Fork recipes testing.

This is a prerequisite to get properties injected to buildbucket api
correctly.

This is forked from fuchsia/recipes/recipe_modules/recipe_testing. It does not contain any changes yet but the idea is that we will be calling  get-build instead of get-builder to ensure all the properties are populated.

A future use case if to grab builders from release branches builds when the led recipes tests are running on release candidate branch cherry picks.

Bug: https://github.com/flutter/flutter/issues/113611
Change-Id: Ie7453aa5d0c0785ef3d28b7c2a7c9103f2ae562a
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/34920
Reviewed-by: Keyong Han <keyonghan@google.com>
Commit-Queue: Godofredo Contreras <godofredoc@google.com>
diff --git a/recipe_modules/recipe_testing/__init__.py b/recipe_modules/recipe_testing/__init__.py
new file mode 100644
index 0000000..4710706
--- /dev/null
+++ b/recipe_modules/recipe_testing/__init__.py
@@ -0,0 +1,28 @@
+# Copyright 2022 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+DEPS = [
+    "fuchsia/buildbucket_util",
+    "fuchsia/commit_queue",
+    "fuchsia/gerrit",
+    "fuchsia/git",
+    "fuchsia/gitiles",
+    "fuchsia/subbuild",
+    "fuchsia/swarming_retry",
+    "recipe_engine/buildbucket",
+    "recipe_engine/context",
+    "recipe_engine/file",
+    "recipe_engine/json",
+    "recipe_engine/led",
+    "recipe_engine/path",
+    "recipe_engine/properties",
+    "recipe_engine/raw_io",
+    "recipe_engine/step",
+    "recipe_engine/swarming",
+    "recipe_engine/time",
+]
+
+from PB.recipe_modules.flutter.recipe_testing.properties import InputProperties
+
+PROPERTIES = InputProperties
diff --git a/recipe_modules/recipe_testing/api.py b/recipe_modules/recipe_testing/api.py
new file mode 100644
index 0000000..1d19c27
--- /dev/null
+++ b/recipe_modules/recipe_testing/api.py
@@ -0,0 +1,507 @@
+# Copyright 2022 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Code for testing recipes."""
+
+import datetime
+import fnmatch
+import functools
+
+from google.protobuf import json_format as jsonpb
+from google.protobuf import timestamp_pb2
+
+from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb2
+from PB.go.chromium.org.luci.buildbucket.proto import (
+    builds_service as builds_service_pb2,
+)
+from PB.recipe_modules.flutter.recipe_testing import properties as properties_pb2
+from recipe_engine import recipe_api
+from RECIPE_MODULES.fuchsia.swarming_retry import api as swarming_retry_api
+
+
+class Build(swarming_retry_api.LedTask):
+    # This warning is spurious because LedTask defines _led_data.
+    # pylint: disable=attribute-defined-outside-init
+
+    def include_cl(self, cl):
+        self._led_data = self._led_data.then("edit-cr-cl", cl)
+
+    def include_recipe_bundle(self):
+        self._led_data = self._led_data.then("edit-recipe-bundle")
+
+    def use_realms(self):
+        self._led_data = self._led_data.then(
+            "edit", "-experiment", "luci.use_realms=true"
+        )
+
+    def set_properties(self, properties):
+        args = []
+        for k, v in properties.items():
+            args += ["-pa", "%s=%s" % (k, self._api.json.dumps(v))]
+        self._led_data = self._led_data.then("edit", *args)
+
+
+def led_task_name(builder):
+    """Returns the name to use for the led swarming task for the builder."""
+    return "recipes-cq:%s" % builder
+
+
+class RecipeTestingApi(recipe_api.RecipeApi):
+    """API for running tests and processing test results."""
+
+    def __init__(self, props, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self._recipe_depth = props.recipe_depth
+        self.enabled = props.enabled
+        self.max_build_age_seconds = int(datetime.timedelta(days=28).total_seconds())
+        self.projects = ("flutter",)
+
+    def _get_affected_recipes(self, recipes_path):
+        """Collect affected recipes.
+
+        For now assume we care about all recipes.
+        """
+
+        with self.m.step.nest("get_affected_recipes") as parent_step:
+            recipes_dir = recipes_path.join("recipes")
+            recipe_files = self.m.file.listdir(
+                "ls-recipes", recipes_dir, recursive=True
+            )
+
+            all_recipes = []
+            for recipe_file in recipe_files:
+                path = self.m.path.relpath(
+                    self.m.path.realpath(recipe_file), self.m.path.realpath(recipes_dir)
+                )
+                # Files inside folders that end in ".resources" are never recipes.
+                if self.m.path.dirname(path).endswith(".resources"):
+                    continue
+
+                name, ext = self.m.path.splitext(path)
+                if ext == ".py":
+                    all_recipes.append(name)
+
+            parent_step.logs["all recipes"] = all_recipes
+
+            with self.m.context(cwd=recipes_path):
+                changed_files = self.m.git.get_changed_files(commit="HEAD")
+            parent_step.logs["changed files (raw)"] = changed_files
+
+            def is_expected_json(path):
+                # We want to ignore expected JSON files--they won't affect how recipes
+                # run. It's possible there are JSON files used as data for recipes
+                # instead of as expected test outputs, so determine which files to
+                # ignore very narrowly.
+                return self.m.path.splitext(path)[1] == ".json" and self.m.path.dirname(
+                    path
+                ).endswith(".expected")
+
+            def is_python_test_file(path):
+                """Return True if this is a test file that we should ignore."""
+                # We want to ignore test_api.py files--they won't affect how recipes
+                # run in led, they only affect how recipes run in
+                # './recipes test run', and we test that every time any recipe is
+                # changed.
+                if (
+                    self.m.path.basename(path) == "test_api.py"
+                    and self.m.path.dirname(self.m.path.dirname(path))
+                    == "recipe_modules"
+                ):
+                    return True
+
+                # Also ignore test definitions themselves. By convention these are
+                # given the filename 'full.py' in Fuchsia, but there is no
+                # guarantee this will remain the case.
+                test_dir_names = ("tests", "examples")
+                if (
+                    self.m.path.splitext(path)[1] == ".py"
+                    and self.m.path.basename(self.m.path.dirname(path))
+                    in test_dir_names
+                ):
+                    return True
+
+                return False
+
+            def is_ignored_file(path):
+                return is_expected_json(path) or is_python_test_file(path)
+
+            filtered_changed_files = [
+                x for x in changed_files if not is_ignored_file(x)
+            ]
+            parent_step.logs["changed files (filtered)"] = filtered_changed_files or [
+                "no changed files"
+            ]
+
+            res = self.m.step(
+                "recipes-analyze",
+                [
+                    recipes_path.join("recipes.py"),
+                    "analyze",
+                    self.m.json.input(
+                        {"recipes": all_recipes, "files": filtered_changed_files}
+                    ),
+                    self.m.json.output(),
+                ],
+            )
+
+            affected_recipes = res.json.output["recipes"]
+
+            def should_test_all_recipes(path):
+                globs = (
+                    "infra/config/recipes.cfg",
+                    # We particularly care about running CQ for flutter.proto changes.
+                    "recipe_proto/*.proto",
+                )
+                return any(fnmatch.fnmatch(path, glob) for glob in globs)
+
+            special_changed_files = [
+                f for f in changed_files if should_test_all_recipes(f)
+            ]
+            if special_changed_files:
+                step = self.m.step.empty("mark all recipes as affected")
+                step.presentation.step_summary_text = (
+                    "because these files were changed:"
+                )
+                step.presentation.step_text = "\n" + "\n".join(special_changed_files)
+                affected_recipes = all_recipes
+
+            parent_step.logs["affected recipes"] = affected_recipes
+
+            # Skip running recipes in the `recipes/contrib` directory, because
+            # they are generally lower-priority and not worth running by default
+            # in recipes CQ.
+            return {r for r in affected_recipes if not r.startswith("contrib/")}
+
+    def _get_last_green_build(self, builder):
+        """Returns the build proto for a builder's most recent successful build.
+
+        If no build younger than `self.max_build_age_seconds` is found, returns
+        None.
+
+        Args:
+          builder: builder protobuf object
+        """
+        project, bucket, builder = builder.split("/")
+        # "infra" is not returned by default, so we have to specify it.
+        build = self.m.buildbucket_util.last_build(
+            project, bucket, builder, status=common_pb2.SUCCESS
+        )
+        if not build:
+            return None
+
+        age_seconds = self.m.time.time() - build.end_time.seconds
+        if age_seconds > self.max_build_age_seconds:
+            return None
+        return build
+
+    def _create_led_build(self, orig_build, selftest_cl):
+        builder = orig_build.builder
+        builder_lookup_name = "{project}/{bucket}:{builder}".format(
+            project=builder.project,
+            bucket=builder.bucket,
+            builder=builder.builder,
+        )
+        # Using `led get-builder` instead of `led get-build` ensures that we
+        # won't use an outdated version of the builder (e.g. with deprecated
+        # dimensions).
+        # By default the priority is increased by 10 (resulting in a "lower"
+        # priority), but we want it to stay the same.
+        led_data = self.m.led(
+            "get-builder", "-adjust-priority", "0", builder_lookup_name
+        )
+
+        led_data = led_data.then("edit", "-name", led_task_name(builder.builder))
+        build = Build(api=self.m, name=builder.builder, led_data=led_data)
+
+        if orig_build.input.properties["recipe"] == "recipes":
+            build.include_cl(selftest_cl)
+        elif orig_build.input.gerrit_changes:
+            orig_cl = orig_build.input.gerrit_changes[0]
+            cl_id, patchset = self._get_latest_cl(orig_cl.host, orig_cl.project)
+            # Setting the CL to a more recent CL helps avoid rebase errors, but
+            # if unable to find a recent CL, fall back to the original build's
+            # triggering CL. It usually works.
+            if not cl_id:
+                cl_id = orig_cl.change
+                patchset = orig_cl.patchset
+            url = "https://%s/c/%s/+/%d/%d" % (
+                orig_cl.host,
+                orig_cl.project,
+                cl_id,
+                patchset,
+            )
+            build.include_cl(url)
+        build.set_properties(self._tryjob_properties())
+        build.use_realms()
+
+        return build
+
+    @functools.lru_cache(maxsize=None)
+    def _get_latest_cl(self, gerrit_host, project):
+        """Returns number and patchset for a project's most recently landed CL.
+
+        Args:
+          gerrit_host (str): E.g., flutter-review.googlesource.com
+          project (str): The name of the project in gerrit, e.g. "flutter"
+
+        Returns:
+          A tuple of
+          * The integer change number for the CL corresponding to the commit at
+            the tip of the main branch.
+          * The last patchset of that CL.
+        """
+        gitiles_host = gerrit_host.replace("-review", "")
+        remote = "https://%s/%s" % (gitiles_host, project)
+        ref = self.m.git.get_default_remote_branch(remote)
+        log = self.m.gitiles.log(remote, ref, limit=10, step_name="log %s" % project)
+
+        for log_entry in log:
+            commit_hash = log_entry["id"]
+            step = self.m.gerrit.change_details(
+                "latest change details for %s" % project,
+                commit_hash,
+                query_params=("CURRENT_REVISION",),
+                host=gerrit_host,
+                test_data=self.m.json.test_api.output(
+                    {
+                        "_number": 12345,
+                        "current_revision": "5" * 40,
+                        "revisions": {"5" * 40: {"_number": 6}},
+                    }
+                ),
+                ok_ret=(0, 1),
+            )
+            # A commit that is committed directly without code review won't have a
+            # corresponding Gerrit CL, so fetching it will fail (which is fine, we'll
+            # just skip it and try the next one).
+            if step.retcode == 0:
+                cl_number = step.json.output["_number"]
+                rev = step.json.output["current_revision"]
+                ps_number = step.json.output["revisions"][rev]["_number"]
+                return (cl_number, ps_number)
+        return None, None
+
+    def run_lint(self, recipes_path, allowlist=""):
+        """Run lint on recipes.
+
+        Args:
+          recipes_path (Path): The path to the root of the recipes repo.
+          allowlist (str): A regex of import names to allow.
+        """
+        args = ["lint"]
+        if allowlist:
+            args.extend(["--allowlist", allowlist])
+        with self.m.context(cwd=recipes_path):
+            self.m.step(
+                "lint",
+                cmd=[self.m.context.cwd.join("recipes.py")] + args,
+            )
+
+    def run_unit_tests(self, recipes_path):
+        """Run the recipe unit tests."""
+        with self.m.context(cwd=recipes_path):
+            self.m.step(
+                "test",
+                cmd=[
+                    self.m.context.cwd.join("recipes.py"),
+                    "test",
+                    "run",
+                ],
+            )
+
+    def run_tests(
+        self,
+        recipes_path,
+        selftest_cl,
+        config,
+        selftest_builder=None,
+    ):
+        """Launch CQ builders.
+
+        Args:
+          recipes_path (Path): Path to recipes repo checkout.
+          selftest_cl (str): The CL to use to test a recursive recipe testing
+            invocation.
+          config (RecipeTesting proto): Many options for led/bb tests.
+            TODO(fxbug.dev/88439): Make this a formal proto under
+            recipe_modules/recipe_testing.
+          selftest_builder (str|None): Builder to use to guarantee that we
+            exercise the scheduling codepath when `use_buildbucket` is True.
+        """
+        # When run against a change to the recipes recipe, this is what the
+        # swarming task stack should look like:
+        #
+        # * recipes.py from current recipe bundle, run against current CL
+        # * recipes.py from current CL, run against SELFTEST_CL
+        # * cobalt.py from current CL, run against current CL
+        #
+        # This works, but in case something goes wrong we need to make sure we
+        # don't enter infinite recursion. We should never get to a third call to
+        # recipes.py, so if we do we should exit.
+        if self._recipe_depth >= 2:
+            raise self.m.step.InfraFailure("recursion limit reached")
+
+        builders = set()
+        for project in config.projects:
+            project_builders = set(
+                self.m.commit_queue.all_tryjobs(
+                    project=project.name,
+                    include_unrestricted=project.include_unrestricted,
+                    include_restricted=project.include_restricted,
+                    config_name=project.cq_config_name or "commit-queue.cfg",
+                )
+            )
+
+            for excluded_bucket in project.excluded_buckets:
+                excluded_builders = set()
+                for builder in project_builders:
+                    # Retrieve "<bucket>" from "<project>/<bucket>/<builder>".
+                    bucket = builder.split("/")[1]
+                    if bucket == excluded_bucket:
+                        excluded_builders.add(builder)
+
+                if excluded_builders:
+                    project_builders -= excluded_builders
+                    with self.m.step.nest(
+                        "excluding {} builders from bucket {}/{}".format(
+                            len(excluded_builders),
+                            project.name,
+                            excluded_bucket,
+                        )
+                    ) as pres:
+                        pres.step_summary_text = "\n".join(sorted(excluded_builders))
+
+            builders.update(project_builders)
+
+        builders = sorted(builders)
+
+        affected_recipes = self._get_affected_recipes(recipes_path=recipes_path)
+        if not affected_recipes:
+            return
+
+        if config.use_buildbucket:
+            self._run_buildbucket_tests(selftest_builder, builders, affected_recipes)
+        else:
+            self._run_led_tests(recipes_path, selftest_cl, builders, affected_recipes)
+
+    def _is_build_affected(self, orig_build, affected_recipes, presentation):
+        if not orig_build:
+            presentation.step_summary_text = "no recent builds found"
+            return False
+
+        recipe = orig_build.input.properties["recipe"]
+        assert recipe
+
+        is_recipe_affected = recipe in affected_recipes
+        presentation.step_summary_text = "SELECTED" if is_recipe_affected else "skipped"
+        presentation.logs["recipe_used"] = recipe
+        return is_recipe_affected
+
+    def _get_green_tryjobs(self, expiry_secs=24 * 60 * 60):
+        """Return the set of tryjobs that are green on the current patchset.
+
+        Args:
+          expiry_secs (int): Do not return tryjobs which are older than this
+            value in seconds.
+        """
+        builds = self.m.buildbucket.search(
+            builds_service_pb2.BuildPredicate(
+                gerrit_changes=list(self.m.buildbucket.build.input.gerrit_changes),
+                status=common_pb2.SUCCESS,
+                create_time=common_pb2.TimeRange(
+                    start_time=timestamp_pb2.Timestamp(
+                        seconds=int(self.m.time.time()) - expiry_secs,
+                    ),
+                ),
+            ),
+            fields=["builder"],
+            step_name="get green tryjobs",
+        )
+        return {self.m.buildbucket_util.full_builder_name(b.builder) for b in builds}
+
+    def _run_buildbucket_tests(self, selftest_builder, builders, affected_recipes):
+        affected_builders = []
+        recipes_is_affected = False
+
+        with self.m.step.nest("get builders"), self.m.context(infra_steps=True):
+            green_tryjobs = self._get_green_tryjobs()
+            builders = [b for b in builders if b not in green_tryjobs]
+            for builder in builders:
+                with self.m.step.nest(builder) as presentation:
+                    orig_build = self._get_last_green_build(builder)
+                    if self._is_build_affected(
+                        orig_build, affected_recipes, presentation
+                    ):
+                        # With recipe versioning, the `recipes` recipe is
+                        # already tested in this invocation, so don't schedule
+                        # any more `recipes` builds.
+                        if orig_build.input.properties["recipe"] == "recipes":
+                            recipes_is_affected = True
+                            continue
+                        affected_builders.append(builder)
+
+        # If `affected_builders` is empty, but the current recipe was affected,
+        # then we should schedule one self-test builder so we can still exercise
+        # the scheduling codepath.
+        if not affected_builders and recipes_is_affected:
+            affected_builders = [selftest_builder]
+
+        with self.m.step.nest("launch builds") as presentation:
+            builds = self.m.subbuild.launch(
+                # TODO(atyfto): Fix subbuild.launch so it can accept builders
+                # with `bucket`s and/or `project`s which don't necessarily match
+                # the current build's.
+                builder_names=[b.split("/")[-1] for b in affected_builders],
+                extra_properties=self._tryjob_properties(),
+                presentation=presentation,
+                # Present tryjobs in Gerrit since they are effectively
+                # top-level builds.
+                hide_in_gerrit=False,
+            )
+        with self.m.step.nest("collect builds"):
+            results = self.m.subbuild.collect(
+                build_ids=[b.build_id for b in builds.values()],
+            )
+            self.m.buildbucket_util.display_builds(
+                "check builds",
+                [b.build_proto for b in results.values()],
+                raise_on_failure=True,
+            )
+
+    def _run_led_tests(self, recipes_path, selftest_cl, builders, affected_recipes):
+        builds = []
+        with self.m.step.nest("get builders") as nest, self.m.context(
+            cwd=recipes_path, infra_steps=True
+        ):
+            for builder in builders:
+                with self.m.step.nest(builder) as presentation:
+                    orig_build = self._get_last_green_build(builder)
+                    if self._is_build_affected(
+                        orig_build, affected_recipes, presentation
+                    ):
+                        build = self._create_led_build(orig_build, selftest_cl)
+                        build.include_recipe_bundle()
+                        builds.append(build)
+
+            nest.step_summary_text = "selected {} builds".format(len(builds))
+
+        if not builds:
+            return
+
+        self.m.swarming_retry.run_and_present_tasks(builds)
+
+    def _tryjob_properties(self):
+        """Properties that should be set on each launched tryjob."""
+        props = properties_pb2.InputProperties(
+            # Signal to the launched build that it's being tested by this module.
+            enabled=True,
+            # Increment the recipe depth. This only has an effect on builds that
+            # use this module.
+            recipe_depth=self._recipe_depth + 1,
+        )
+        return {
+            "$flutter/recipe_testing": jsonpb.MessageToDict(
+                props, preserving_proto_field_name=True
+            )
+        }
diff --git a/recipe_modules/recipe_testing/options.proto b/recipe_modules/recipe_testing/options.proto
new file mode 100644
index 0000000..65c2a4f
--- /dev/null
+++ b/recipe_modules/recipe_testing/options.proto
@@ -0,0 +1,32 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto3";
+
+package recipe_modules.flutter.recipe_testing;
+
+message Project {
+  // Name of the project, e.g., "flutter".
+  string name = 1;
+
+  // Include tryjobs with result_visibility COMMENT_LEVEL_RESTRICTED.
+  bool include_restricted = 2;
+
+  // Include tryjobs with result_visibility COMMENT_LEVEL_FULL.
+  bool include_unrestricted = 3;
+
+  // Name of the CQ file. Defaults to "commit-queue.cfg".
+  string cq_config_name = 4;
+
+  // Buckets to exclude from recipe testing.
+  repeated string excluded_buckets = 5;
+}
+
+message Options {
+  // List of projects to use when searching for tryjobs.
+  repeated Project projects = 1;
+
+  // Launch tryjobs through Buildbucket API instead of led.
+  bool use_buildbucket = 2;
+}
diff --git a/recipe_modules/recipe_testing/properties.proto b/recipe_modules/recipe_testing/properties.proto
new file mode 100644
index 0000000..eed8e8c
--- /dev/null
+++ b/recipe_modules/recipe_testing/properties.proto
@@ -0,0 +1,13 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto3";
+
+package recipe_modules.flutter.recipe_testing;
+
+message InputProperties {
+  int32 recipe_depth = 1;
+  // Set to true to expose to recipes that they are being tested by this module.
+  bool enabled = 2;
+}
diff --git a/recipe_modules/recipe_testing/test_api.py b/recipe_modules/recipe_testing/test_api.py
new file mode 100644
index 0000000..3b5149c
--- /dev/null
+++ b/recipe_modules/recipe_testing/test_api.py
@@ -0,0 +1,189 @@
+# Copyright 2022 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import datetime
+
+from google.protobuf import timestamp_pb2
+
+from PB.go.chromium.org.luci.buildbucket.proto import (
+    build as build_pb2,
+    builder_common as builder_common_pb2,
+    common as common_pb2,
+)
+from PB.go.chromium.org.luci.led.job import job as job_pb2
+from PB.recipe_modules.flutter.recipe_testing import options as options_pb2
+from recipe_engine import recipe_test_api
+
+ONE_DAY = int(datetime.timedelta(days=1).total_seconds())
+MAX_BUILD_AGE_SECONDS = int(datetime.timedelta(days=28).total_seconds())
+
+
+class RecipeTestingTestApi(recipe_test_api.RecipeTestApi):
+    def project(
+        self,
+        name="flutter",
+        include_unrestricted=True,
+        include_restricted=False,
+        cq_config_name="commit-queue.cfg",
+        excluded_buckets=(),
+    ):
+        return options_pb2.Project(
+            name=name,
+            include_unrestricted=include_unrestricted,
+            include_restricted=include_restricted,
+            cq_config_name=cq_config_name,
+            excluded_buckets=excluded_buckets,
+        )
+
+    def options(self, projects=(), use_buildbucket=False, **kwargs):
+        if not projects:
+            projects = [self.project()]
+        return self.m.properties(
+            recipe_testing_options=options_pb2.Options(
+                projects=list(projects), use_buildbucket=use_buildbucket, **kwargs
+            )
+        )
+
+    def build_data(
+        self,
+        name,
+        recipe,
+        age_seconds=ONE_DAY,
+        cl_cached=False,
+        skip=False,
+        num_log_entries=1,
+        project="flutter",
+        bucket="try",
+        # used for both buildbucket build id and swarming task id.
+        fake_id=100,
+        using_led=True,
+    ):
+        # This time is taken from the time recipe_engine module. I see no way
+        # of getting it programmatically.
+        curr_time = 1337000000
+        end_time = curr_time - age_seconds
+
+        orig_build = build_pb2.Build(id=fake_id, status=common_pb2.SUCCESS)
+        orig_build.end_time.seconds = end_time
+        orig_build.builder.project = project
+        orig_build.builder.bucket = bucket
+        orig_build.builder.builder = name
+        orig_build.input.properties["recipe"] = recipe
+        cl = orig_build.input.gerrit_changes.add()
+        cl.host = "flutter-review.googlesource.com"
+        cl.project = project
+
+        result = self.m.buildbucket.simulated_search_results(
+            [orig_build], "get builders.{}.buildbucket.search".format(name)
+        )
+
+        if skip or age_seconds > MAX_BUILD_AGE_SECONDS:
+            return result
+
+        job = job_pb2.Definition()
+        build = self.m.buildbucket.ci_build_message(
+            priority=34500, project=project, bucket=bucket, builder=name
+        )
+        build.input.properties["recipe"] = recipe
+
+        # Don't inject test data for led steps when not using led, i.e. using
+        # the Buildbucket scheduling codepath.
+        if not using_led:
+            return result
+
+        # It's unrealistic for the get-builder response to have a task ID set,
+        # but the only way of mocking the task ID returned by `led launch` is
+        # to set the task ID on the input to `led launch`, which, for recipe
+        # testing, is the `led get-builder` response.
+        build.infra.swarming.task_id = str(fake_id)
+        job.buildbucket.bbagent_args.build.CopyFrom(build)
+        result += self.m.led.mock_get_builder(
+            job,
+            project=project,
+            bucket=bucket,
+            builder=name,
+        )
+
+        if recipe != "recipes" and not cl_cached:
+            result += self.m.gitiles.log(
+                "get builders.{}.log {}".format(name, cl.project),
+                "A",
+                n=num_log_entries,
+            )
+
+        return result
+
+    def no_build(self, name):
+        return self.m.buildbucket.simulated_search_results(
+            [], "get builders.{}.buildbucket.search".format(name)
+        )
+
+    def affected_recipes_data(
+        self,
+        affected_recipes,
+        recipe_files=None,
+        changed_files=None,
+        error=None,
+        invalid_recipes=(),
+        step_name="get_affected_recipes.recipes-analyze",
+    ):
+        if not recipe_files:
+            recipe_files = ["foo", "flutter.py", "recipes.py", "sdk.expected"]
+        res = self.step_data(
+            "get_affected_recipes.ls-recipes",
+            stdout=self.m.raw_io.output_text(
+                "".join("{}\n".format(x) for x in recipe_files)
+            ),
+        )
+
+        if not changed_files:
+            changed_files = [
+                "recipes/flutter.py",
+                "recipes/foo",
+                "recipes/non_expected_json_file.json",
+                "recipe_modules/foo/examples/full.expected/bar.json",
+                "recipe_modules/foo/examples/full.py",
+                "recipe_modules/foo/test_api.py",
+            ]
+        res += self.m.git.get_changed_files(
+            "get_affected_recipes.git diff-tree",
+            changed_files,
+        )
+
+        output = {
+            "recipes": list(affected_recipes),
+            "error": error or "",
+            "invalidRecipes": list(invalid_recipes),
+        }
+        retcode = -1 if error else 0
+        res += self.step_data(step_name, self.m.json.output(output), retcode=retcode)
+
+        return res
+
+    def task_result(self, task_id, name, failed=False):
+        return self.m.swarming.task_result(
+            id=task_id,
+            name="recipes-cq:%s" % name,
+            state=None if not name else self.m.swarming.TaskState.COMPLETED,
+            failure=failed,
+        )
+
+    def existing_green_tryjobs(self, tryjobs):
+        search_results = []
+        for builder_name in tryjobs:
+            project, bucket, builder = builder_name.split("/")
+            search_results.append(
+                build_pb2.Build(
+                    builder=builder_common_pb2.BuilderID(
+                        project=project,
+                        bucket=bucket,
+                        builder=builder,
+                    ),
+                    create_time=timestamp_pb2.Timestamp(seconds=1527292217),
+                )
+            )
+        return self.m.buildbucket.simulated_search_results(
+            search_results,
+            step_name="get builders.get green tryjobs",
+        )
diff --git a/recipe_modules/recipe_testing/tests/full.expected/depth.json b/recipe_modules/recipe_testing/tests/full.expected/depth.json
new file mode 100644
index 0000000..29c8d5c
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/depth.json
@@ -0,0 +1,51 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "failure": {
+      "humanReason": "recursion limit reached"
+    },
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/excluded.json b/recipe_modules/recipe_testing/tests/full.expected/excluded.json
new file mode 100644
index 0000000..c7583df
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/excluded.json
@@ -0,0 +1,258 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/cobalt-x64-linux@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.x64-debug@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "excluding 3 builders from bucket flutter/try",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@fuchsia/try/cobalt-x64-linux\nfuchsia/try/core.arm64-debug\nfuchsia/try/core.x64-debug@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@flutter@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 0 builds@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/fuchsia_recipe_unaffected.json b/recipe_modules/recipe_testing/tests/full.expected/fuchsia_recipe_unaffected.json
new file mode 100644
index 0000000..8658100
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/fuchsia_recipe_unaffected.json
@@ -0,0 +1,392 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/cobalt-x64-linux@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.x64-debug@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@qemu@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"qemu\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 0 builds@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/cobalt-x64-linux",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@skipped@@@",
+      "@@@STEP_LOG_LINE@recipe_used@cobalt@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"cobalt-x64-linux\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/cobalt-x64-linux.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/cobalt-x64-linux\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"cobalt\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@skipped@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.arm64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.arm64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@skipped@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.x64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.x64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/no_build_old_build_ignored_build.json b/recipe_modules/recipe_testing/tests/full.expected/no_build_old_build_ignored_build.json
new file mode 100644
index 0000000..80b2117
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/no_build_old_build_ignored_build.json
@@ -0,0 +1,386 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/cobalt-x64-linux@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.x64-debug@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@flutter@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 0 builds@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/cobalt-x64-linux",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@skipped@@@",
+      "@@@STEP_LOG_LINE@recipe_used@cobalt@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"cobalt-x64-linux\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/cobalt-x64-linux.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/cobalt-x64-linux\", \"project\": \"flutter\"}, \"endTime\": \"2012-04-17T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"cobalt\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no recent builds found@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.arm64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no recent builds found@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.x64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.x64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-04-15T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/no_latest_cl.json b/recipe_modules/recipe_testing/tests/full.expected/no_latest_cl.json
new file mode 100644
index 0000000..38f7cbf
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/no_latest_cl.json
@@ -0,0 +1,1799 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/cobalt-x64-linux@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.x64-debug@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@fuchsia@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 2 builds@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/cobalt-x64-linux",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no recent builds found@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"cobalt-x64-linux\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/cobalt-x64-linux.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.arm64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.arm64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"200\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@200@https://cr-buildbucket.appspot.com/build/200@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "get-builder",
+      "-adjust-priority",
+      "0",
+      "flutter/try:fuchsia/try/core.arm64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led get-builder",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-name",
+      "recipes-cq:fuchsia/try/core.arm64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    }\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "ls-remote",
+      "--symref",
+      "https://flutter.googlesource.com/flutter",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.git ls-remote --symref HEAD",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "RECIPE_MODULE[fuchsia::gitiles]/resources/tool_manifest.json",
+      "/path/to/tmp/json"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.read manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gitiles\",@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
+      "@@@STEP_LOG_END@tool_manifest.json@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.install path/to/gitiles",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/cipd_tool/path/to/gitiles/version%3Apinned-version"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.install path/to/gitiles.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[START_DIR]/cipd_tool/path/to/gitiles/version%3Apinned-version",
+      "-ensure-file",
+      "path/to/gitiles version:pinned-version",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.install path/to/gitiles.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:pinned-v\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"path/to/gitiles\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/path/to/gitiles/version%3Apinned-version/gitiles",
+      "log",
+      "-json-output",
+      "/path/to/tmp/json",
+      "-limit",
+      "10",
+      "https://flutter.googlesource.com/flutter",
+      "refs/heads/main"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.log flutter",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@[]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-cr-cl",
+      "https://flutter-review.googlesource.com/c/flutter/+/0/0"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit-cr-cl",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-pa",
+      "$flutter/recipe_testing={\"enabled\": true, \"recipe_depth\": 1}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit (2)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-experiment",
+      "luci.use_realms=true"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit (3)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-recipe-bundle"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit-recipe-bundle",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"agent\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"data\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  \"kitchen-checkout\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    \"cas\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"size_bytes\": \"1337\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                }@@@",
+      "@@@STEP_LOG_LINE@proto.output@              },@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"purposes\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@              }@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.x64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.x64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "get-builder",
+      "-adjust-priority",
+      "0",
+      "flutter/try:fuchsia/try/core.x64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led get-builder",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-name",
+      "recipes-cq:fuchsia/try/core.x64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    }\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-cr-cl",
+      "https://flutter-review.googlesource.com/c/flutter/+/0/0"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit-cr-cl",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-pa",
+      "$flutter/recipe_testing={\"enabled\": true, \"recipe_depth\": 1}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit (2)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-experiment",
+      "luci.use_realms=true"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit (3)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-recipe-bundle"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit-recipe-bundle",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"agent\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"data\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  \"kitchen-checkout\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    \"cas\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"size_bytes\": \"1337\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                }@@@",
+      "@@@STEP_LOG_LINE@proto.output@              },@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"purposes\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@              }@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect"
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@2 passed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch.fuchsia/try/core.arm64-debug (attempt 0)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LINK@Swarming task@https://luci-milo.appspot.com/swarming/task/200?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "launch",
+      "-modernize"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.launch.fuchsia/try/core.arm64-debug (attempt 0).led launch",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"buildbucket\": {\n            \"agent\": {\n              \"input\": {\n                \"data\": {\n                  \"kitchen-checkout\": {\n                    \"cas\": {\n                      \"digest\": {\n                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",\n                        \"size_bytes\": \"1337\"\n                      }\n                    }\n                  }\n                }\n              },\n              \"purposes\": {\n                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"\n              }\n            }\n          },\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"host_name\": \"example.swarmingserver.appspot.com\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LINK@Swarming task@https://example.swarmingserver.appspot.com/task?id=200@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch.fuchsia/try/core.x64-debug (attempt 0)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LINK@Swarming task@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "launch",
+      "-modernize"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.launch.fuchsia/try/core.x64-debug (attempt 0).led launch",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"buildbucket\": {\n            \"agent\": {\n              \"input\": {\n                \"data\": {\n                  \"kitchen-checkout\": {\n                    \"cas\": {\n                      \"digest\": {\n                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",\n                        \"size_bytes\": \"1337\"\n                      }\n                    }\n                  }\n                }\n              },\n              \"purposes\": {\n                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"\n              }\n            }\n          },\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"host\": \"flutter-review.googlesource.com\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"host_name\": \"example.swarmingserver.appspot.com\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LINK@Swarming task@https://example.swarmingserver.appspot.com/task?id=100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.install infra/tools/luci/swarming",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.install infra/tools/luci/swarming.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin",
+      "-ensure-file",
+      "infra/tools/luci/swarming/${platform} swarming_module_pin",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.install infra/tools/luci/swarming.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-swarming_module_\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/luci/swarming/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin/swarming",
+      "collect",
+      "-server",
+      "https://example.swarmingserver.appspot.com",
+      "-task-summary-json",
+      "/path/to/tmp/json",
+      "-task-output-stdout",
+      "json",
+      "-verbose",
+      "-eager",
+      "100",
+      "200"
+    ],
+    "cost": {
+      "cpu": 100,
+      "disk": 0,
+      "memory": 50,
+      "net": 0
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.collect",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"100\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"output\": \"hello world!\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"outputs\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"results\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"bot_id\": \"vm-123\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"cas_output_root\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"cas_instance\": \"projects/example-project/instances/default_instance\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"hash\": \"24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"size_bytes\": \"73\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"duration\": 62.35, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"exit_code\": \"0\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"resultdb_info\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"invocation\": \"invocations/some-inv-name\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"state\": \"COMPLETED\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"task_id\": 100@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"200\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"output\": \"hello world!\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"outputs\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"results\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"bot_id\": \"vm-123\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"cas_output_root\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"cas_instance\": \"projects/example-project/instances/default_instance\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"hash\": \"24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"size_bytes\": \"73\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"duration\": 62.35, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"exit_code\": \"0\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"resultdb_info\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"invocation\": \"invocations/some-inv-name\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"state\": \"COMPLETED\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"task_id\": 200@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.arm64-debug@hello world!@@@",
+      "@@@STEP_LOG_END@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.x64-debug@hello world!@@@",
+      "@@@STEP_LOG_END@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.x64-debug@@@",
+      "@@@STEP_LINK@task cas outputs: recipes-cq:fuchsia/try/core.arm64-debug@https://cas-viewer.appspot.com/projects/example-project/instances/default_instance/blobs/24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca/73/tree@@@",
+      "@@@STEP_LINK@task cas outputs: recipes-cq:fuchsia/try/core.x64-debug@https://cas-viewer.appspot.com/projects/example-project/instances/default_instance/blobs/24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca/73/tree@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results.recipes-cq:fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results.recipes-cq:fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.passed tasks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LINK@fuchsia/try/core.arm64-debug (attempt 0)@https://luci-milo.appspot.com/swarming/task/200?server=example.swarmingserver.appspot.com@@@",
+      "@@@STEP_LINK@fuchsia/try/core.x64-debug (attempt 0)@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@2 passed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@attempt 0 (pass)@https://luci-milo.appspot.com/swarming/task/200?server=example.swarmingserver.appspot.com@@@",
+      "@@@STEP_LINK@vm-123@https://example.swarmingserver.appspot.com/bot?id=vm-123@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@attempt 0 (pass)@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@",
+      "@@@STEP_LINK@vm-123@https://example.swarmingserver.appspot.com/bot?id=vm-123@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "flakes",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@0 flaked@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "failures",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@0 failed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tasks passed"
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/recipe_proto.json b/recipe_modules/recipe_testing/tests/full.expected/recipe_proto.json
new file mode 100644
index 0000000..e292093
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/recipe_proto.json
@@ -0,0 +1,376 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/cobalt-x64-linux@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.x64-debug@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_proto/infra/flutter.proto@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipe_proto/infra/flutter.proto@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@affected recipes@recipes@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_proto/infra/flutter.proto\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipe_proto/infra/flutter.proto\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": []@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes.mark all recipes as affected",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_TEXT@<br/>recipe_proto/infra/flutter.proto@@@",
+      "@@@STEP_SUMMARY_TEXT@because these files were changed:@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 0 builds@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/cobalt-x64-linux",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no recent builds found@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"cobalt-x64-linux\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/cobalt-x64-linux.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no recent builds found@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.arm64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no recent builds found@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.x64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/recipes.json b/recipe_modules/recipe_testing/tests/full.expected/recipes.json
new file mode 100644
index 0000000..76fc0dd
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/recipes.json
@@ -0,0 +1,1006 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/recipes@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@recipes@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 1 builds@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@recipes@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"recipes\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/recipes\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"recipes\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "get-builder",
+      "-adjust-priority",
+      "0",
+      "flutter/try:fuchsia/try/recipes"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.led get-builder",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/recipes\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-name",
+      "recipes-cq:fuchsia/try/recipes"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.led edit",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/recipes\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"recipes\"\n          }\n        }\n      }\n    }\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/recipes\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-cr-cl",
+      "https://flutter-review.googlesource.com/c/recipes/+/123456"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.led edit-cr-cl",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/recipes\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"recipes\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/recipes\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/recipes\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"123456\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"1337\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-pa",
+      "$flutter/recipe_testing={\"enabled\": true, \"recipe_depth\": 1}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.led edit (2)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/recipes\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"123456\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"1337\",\n              \"project\": \"recipes\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"recipes\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/recipes\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/recipes\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"123456\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"1337\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-experiment",
+      "luci.use_realms=true"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.led edit (3)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/recipes\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"123456\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"1337\",\n              \"project\": \"recipes\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"recipes\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/recipes\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/recipes\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"123456\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"1337\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-recipe-bundle"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.led edit-recipe-bundle",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/recipes\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"123456\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"1337\",\n              \"project\": \"recipes\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"recipes\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/recipes\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/recipes\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"agent\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"data\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  \"kitchen-checkout\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    \"cas\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"size_bytes\": \"1337\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                }@@@",
+      "@@@STEP_LOG_LINE@proto.output@              },@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"purposes\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@              }@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"123456\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"1337\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/recipes\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect"
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@fuchsia/try/recipes passed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch.fuchsia/try/recipes (attempt 0)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LINK@Swarming task@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "launch",
+      "-modernize"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.launch.fuchsia/try/recipes (attempt 0).led launch",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/recipes\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"buildbucket\": {\n            \"agent\": {\n              \"input\": {\n                \"data\": {\n                  \"kitchen-checkout\": {\n                    \"cas\": {\n                      \"digest\": {\n                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",\n                        \"size_bytes\": \"1337\"\n                      }\n                    }\n                  }\n                }\n              },\n              \"purposes\": {\n                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"\n              }\n            }\n          },\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"123456\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"1337\",\n              \"project\": \"recipes\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"recipes\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/recipes\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"host_name\": \"example.swarmingserver.appspot.com\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LINK@Swarming task@https://example.swarmingserver.appspot.com/task?id=100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.install infra/tools/luci/swarming",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.install infra/tools/luci/swarming.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin",
+      "-ensure-file",
+      "infra/tools/luci/swarming/${platform} swarming_module_pin",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.install infra/tools/luci/swarming.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-swarming_module_\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/luci/swarming/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin/swarming",
+      "collect",
+      "-server",
+      "https://example.swarmingserver.appspot.com",
+      "-task-summary-json",
+      "/path/to/tmp/json",
+      "-task-output-stdout",
+      "json",
+      "-verbose",
+      "-eager",
+      "100"
+    ],
+    "cost": {
+      "cpu": 100,
+      "disk": 0,
+      "memory": 50,
+      "net": 0
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.collect",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"100\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"output\": \"hello world!\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"outputs\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"results\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"bot_id\": \"vm-123\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"cas_output_root\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"cas_instance\": \"projects/example-project/instances/default_instance\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"hash\": \"24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"size_bytes\": \"73\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"duration\": 62.35, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"exit_code\": \"0\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"recipes-cq:fuchsia/try/recipes\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"resultdb_info\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"invocation\": \"invocations/some-inv-name\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"state\": \"COMPLETED\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"task_id\": 100@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;recipes@hello world!@@@",
+      "@@@STEP_LOG_END@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;recipes@@@",
+      "@@@STEP_LINK@task cas outputs: recipes-cq:fuchsia/try/recipes@https://cas-viewer.appspot.com/projects/example-project/instances/default_instance/blobs/24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca/73/tree@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results.recipes-cq:fuchsia/try/recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.passed tasks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LINK@fuchsia/try/recipes (attempt 0)@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@1 passed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes.fuchsia/try/recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@attempt 0 (pass)@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@",
+      "@@@STEP_LINK@vm-123@https://example.swarmingserver.appspot.com/bot?id=vm-123@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "flakes",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@0 flaked@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "failures",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@0 failed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tasks passed"
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/recipes_cfg.json b/recipe_modules/recipe_testing/tests/full.expected/recipes_cfg.json
new file mode 100644
index 0000000..faccb9a
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/recipes_cfg.json
@@ -0,0 +1,251 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@a@@@",
+      "@@@STEP_LOG_LINE@all recipes@b@@@",
+      "@@@STEP_LOG_LINE@all recipes@c@@@",
+      "@@@STEP_LOG_LINE@all recipes@d@@@",
+      "@@@STEP_LOG_LINE@all recipes@e@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@infra/config/recipes.cfg@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@infra/config/recipes.cfg@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@a@@@",
+      "@@@STEP_LOG_LINE@affected recipes@b@@@",
+      "@@@STEP_LOG_LINE@affected recipes@c@@@",
+      "@@@STEP_LOG_LINE@affected recipes@d@@@",
+      "@@@STEP_LOG_LINE@affected recipes@e@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/a.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/b.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/c.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/d.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/e.py@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"infra/config/recipes.cfg\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"infra/config/recipes.cfg\"], \"recipes\": [\"a\", \"b\", \"c\", \"d\", \"e\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": []@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes.mark all recipes as affected",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_TEXT@<br/>infra/config/recipes.cfg@@@",
+      "@@@STEP_SUMMARY_TEXT@because these files were changed:@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 0 builds@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/recipes_with_buildbucket.json b/recipe_modules/recipe_testing/tests/full.expected/recipes_with_buildbucket.json
new file mode 100644
index 0000000..aeb5b4f
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/recipes_with_buildbucket.json
@@ -0,0 +1,528 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/recipes@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@recipes@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"recipes\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders"
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1000",
+      "-fields",
+      "builder",
+      "-predicate",
+      "{\"createTime\": {\"startTime\": \"2012-05-13T12:53:21Z\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.get green tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@recipes@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"recipes\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/recipes.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/recipes\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"recipes\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch builds",
+    "~followup_annotations": [
+      "@@@STEP_LINK@foo.bar-debug@https://ci.chromium.org/b/8922054662172514000@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "batch",
+      "-host",
+      "cr-buildbucket.appspot.com"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch builds.schedule",
+    "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"foo.bar-debug\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"$flutter/recipe_testing\": {\"enabled\": true, \"recipe_depth\": 1.0}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"responses\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"scheduleBuild\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"bucket\": \"ci\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"builder\": \"foo.bar-debug\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"project\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }, @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"id\": \"8922054662172514000\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@request@{@@@",
+      "@@@STEP_LOG_LINE@request@  \"requests\": [@@@",
+      "@@@STEP_LOG_LINE@request@    {@@@",
+      "@@@STEP_LOG_LINE@request@      \"scheduleBuild\": {@@@",
+      "@@@STEP_LOG_LINE@request@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"bucket\": \"ci\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"builder\": \"foo.bar-debug\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"project\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"experimental\": \"NO\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"experiments\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"luci.buildbucket.parent_tracking\": false@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"gitilesCommit\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"host\": \"fuchsia.googlesource.com\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"project\": \"fuchsia\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@request@            \"enabled\": true, @@@",
+      "@@@STEP_LOG_LINE@request@            \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@request@          }@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"parentRunId\": \"fake-task-id\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"tags\": [@@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"parent_buildbucket_id\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@request@          }, @@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"skip-retry-in-gerrit\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"subbuild\"@@@",
+      "@@@STEP_LOG_LINE@request@          }, @@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"user_agent\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"recipe\"@@@",
+      "@@@STEP_LOG_LINE@request@          }@@@",
+      "@@@STEP_LOG_LINE@request@        ]@@@",
+      "@@@STEP_LOG_LINE@request@      }@@@",
+      "@@@STEP_LOG_LINE@request@    }@@@",
+      "@@@STEP_LOG_LINE@request@  ]@@@",
+      "@@@STEP_LOG_LINE@request@}@@@",
+      "@@@STEP_LOG_END@request@@@",
+      "@@@STEP_LINK@8922054662172514000@https://cr-buildbucket.appspot.com/build/8922054662172514000@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "collect builds"
+  },
+  {
+    "cmd": [],
+    "name": "collect builds.collect",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "collect",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-interval",
+      "20s",
+      "8922054662172514000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "collect builds.collect.wait",
+    "timeout": 86400.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "batch",
+      "-host",
+      "cr-buildbucket.appspot.com"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "collect builds.collect.get",
+    "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,infra.swarming.taskId,input,number,output,startTime,status,summaryMarkdown,updateTime\", \"id\": \"8922054662172514000\"}}]}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"responses\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"getBuild\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"id\": \"8922054662172514000\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"status\": \"SUCCESS\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@request@{@@@",
+      "@@@STEP_LOG_LINE@request@  \"requests\": [@@@",
+      "@@@STEP_LOG_LINE@request@    {@@@",
+      "@@@STEP_LOG_LINE@request@      \"getBuild\": {@@@",
+      "@@@STEP_LOG_LINE@request@        \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,infra.swarming.taskId,input,number,output,startTime,status,summaryMarkdown,updateTime\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"id\": \"8922054662172514000\"@@@",
+      "@@@STEP_LOG_LINE@request@      }@@@",
+      "@@@STEP_LOG_LINE@request@    }@@@",
+      "@@@STEP_LOG_LINE@request@  ]@@@",
+      "@@@STEP_LOG_LINE@request@}@@@",
+      "@@@STEP_LOG_END@request@@@",
+      "@@@STEP_LINK@8922054662172514000@https://cr-buildbucket.appspot.com/build/8922054662172514000@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "collect builds.check builds",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "collect builds.check builds.",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LINK@8922054662172514000@https://cr-buildbucket.appspot.com/build/8922054662172514000@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/recursive_ls.json b/recipe_modules/recipe_testing/tests/full.expected/recursive_ls.json
new file mode 100644
index 0000000..c2d57aa
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/recursive_ls.json
@@ -0,0 +1,237 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter/flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@abc@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/abc.resources/bar.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/abc.py@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter/flutter\", \"abc\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": []@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/two_pass_one_skip.json b/recipe_modules/recipe_testing/tests/full.expected/two_pass_one_skip.json
new file mode 100644
index 0000000..bb0e710
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/two_pass_one_skip.json
@@ -0,0 +1,2022 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/cobalt-x64-linux@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.x64-debug@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@fuchsia@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@selected 2 builds@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/cobalt-x64-linux",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@skipped@@@",
+      "@@@STEP_LOG_LINE@recipe_used@cobalt@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"cobalt-x64-linux\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/cobalt-x64-linux.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/cobalt-x64-linux\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"cobalt\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.arm64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.arm64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"200\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@200@https://cr-buildbucket.appspot.com/build/200@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "get-builder",
+      "-adjust-priority",
+      "0",
+      "flutter/try:fuchsia/try/core.arm64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led get-builder",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-name",
+      "recipes-cq:fuchsia/try/core.arm64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    }\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "ls-remote",
+      "--symref",
+      "https://flutter.googlesource.com/flutter",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.git ls-remote --symref HEAD",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "RECIPE_MODULE[fuchsia::gitiles]/resources/tool_manifest.json",
+      "/path/to/tmp/json"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.read manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gitiles\",@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
+      "@@@STEP_LOG_END@tool_manifest.json@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.install path/to/gitiles",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/cipd_tool/path/to/gitiles/version%3Apinned-version"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.install path/to/gitiles.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[START_DIR]/cipd_tool/path/to/gitiles/version%3Apinned-version",
+      "-ensure-file",
+      "path/to/gitiles version:pinned-version",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gitiles.install path/to/gitiles.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:pinned-v\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"path/to/gitiles\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/path/to/gitiles/version%3Apinned-version/gitiles",
+      "log",
+      "-json-output",
+      "/path/to/tmp/json",
+      "-limit",
+      "10",
+      "https://flutter.googlesource.com/flutter",
+      "refs/heads/main"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.log flutter",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"author\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_0.email.com\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    }, @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"committer\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_0.email.com\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    }, @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"message\": \"fake A msg 0\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"83a7614b3b60951511be50db1b9561daff4bb447\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    ], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree\": \"1b6412b24ec3add84836c8fdd1af5ac8e35b61d9\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree_diff\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_id\": \"8bea05ad53680fce6937543f0d98cd48e295b8ff\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_mode\": 33188, @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_path\": \"a.py\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_id\": \"0000000000000000000000000000000000000000\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_mode\": 0, @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"type\": \"add\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gerrit",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "RECIPE_MODULE[fuchsia::gerrit]/resources/tool_manifest.json",
+      "/path/to/tmp/json"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gerrit.read manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gerrit\",@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
+      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
+      "@@@STEP_LOG_END@tool_manifest.json@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gerrit.install path/to/gerrit",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/cipd_tool/path/to/gerrit/version%3Apinned-version"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gerrit.install path/to/gerrit.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[START_DIR]/cipd_tool/path/to/gerrit/version%3Apinned-version",
+      "-ensure-file",
+      "path/to/gerrit version:pinned-version",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.ensure gerrit.install path/to/gerrit.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:pinned-v\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"path/to/gerrit\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/path/to/gerrit/version%3Apinned-version/gerrit",
+      "change-detail",
+      "-host",
+      "https://flutter-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\", \"params\": {\"o\": [\"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.latest change details for flutter",
+    "timeout": 600,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 12345, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"5555555555555555555555555555555555555555\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"5555555555555555555555555555555555555555\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 6@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@json.input@{@@@",
+      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\", @@@",
+      "@@@STEP_LOG_LINE@json.input@  \"params\": {@@@",
+      "@@@STEP_LOG_LINE@json.input@    \"o\": [@@@",
+      "@@@STEP_LOG_LINE@json.input@      \"CURRENT_REVISION\"@@@",
+      "@@@STEP_LOG_LINE@json.input@    ]@@@",
+      "@@@STEP_LOG_LINE@json.input@  }@@@",
+      "@@@STEP_LOG_LINE@json.input@}@@@",
+      "@@@STEP_LOG_END@json.input@@@",
+      "@@@STEP_LINK@gerrit link@https://flutter-review.googlesource.com/q/3e30158f2a7caccb7a9f6632a60011e7a44e1e5c@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-cr-cl",
+      "https://flutter-review.googlesource.com/c/flutter/+/12345/6"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit-cr-cl",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-pa",
+      "$flutter/recipe_testing={\"enabled\": true, \"recipe_depth\": 1}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit (2)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-experiment",
+      "luci.use_realms=true"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit (3)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-recipe-bundle"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.led edit-recipe-bundle",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.arm64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"agent\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"data\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  \"kitchen-checkout\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    \"cas\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"size_bytes\": \"1337\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                }@@@",
+      "@@@STEP_LOG_LINE@proto.output@              },@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"purposes\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@              }@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.x64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.x64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "get-builder",
+      "-adjust-priority",
+      "0",
+      "flutter/try:fuchsia/try/core.x64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led get-builder",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-name",
+      "recipes-cq:fuchsia/try/core.x64-debug"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    }\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-cr-cl",
+      "https://flutter-review.googlesource.com/c/flutter/+/12345/6"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit-cr-cl",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-pa",
+      "$flutter/recipe_testing={\"enabled\": true, \"recipe_depth\": 1}"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit (2)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit",
+      "-experiment",
+      "luci.use_realms=true"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit (3)",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "edit-recipe-bundle"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.led edit-recipe-bundle",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@proto.output@{@@@",
+      "@@@STEP_LOG_LINE@proto.output@  \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"bbagent_args\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@      \"build\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"bucket\": \"try\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"builder\": \"fuchsia/try/core.x64-debug\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"create_time\": \"2018-05-25T23:50:17Z\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"id\": \"8945511751514863184\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"infra\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"buildbucket\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"agent\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"data\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  \"kitchen-checkout\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    \"cas\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@                        \"size_bytes\": \"1337\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@                      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                    }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@                }@@@",
+      "@@@STEP_LOG_LINE@proto.output@              },@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"purposes\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@              }@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"resultdb\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"invocation\": \"invocations/build:8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"priority\": 34500,@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        },@@@",
+      "@@@STEP_LOG_LINE@proto.output@        \"input\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gerrit_changes\": [@@@",
+      "@@@STEP_LOG_LINE@proto.output@            {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"change\": \"12345\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"host\": \"flutter-review.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"patchset\": \"6\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"project\": \"flutter\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@            }@@@",
+      "@@@STEP_LOG_LINE@proto.output@          ],@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"gitiles_commit\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"host\": \"chromium.googlesource.com\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"project\": \"flutter\",@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          },@@@",
+      "@@@STEP_LOG_LINE@proto.output@          \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"enabled\": true,@@@",
+      "@@@STEP_LOG_LINE@proto.output@              \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@proto.output@            },@@@",
+      "@@@STEP_LOG_LINE@proto.output@            \"recipe\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@          }@@@",
+      "@@@STEP_LOG_LINE@proto.output@        }@@@",
+      "@@@STEP_LOG_LINE@proto.output@      }@@@",
+      "@@@STEP_LOG_LINE@proto.output@    },@@@",
+      "@@@STEP_LOG_LINE@proto.output@    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"@@@",
+      "@@@STEP_LOG_LINE@proto.output@  }@@@",
+      "@@@STEP_LOG_LINE@proto.output@}@@@",
+      "@@@STEP_LOG_END@proto.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect"
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@2 passed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch.fuchsia/try/core.arm64-debug (attempt 0)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LINK@Swarming task@https://luci-milo.appspot.com/swarming/task/200?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "launch",
+      "-modernize"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.launch.fuchsia/try/core.arm64-debug (attempt 0).led launch",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.arm64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"buildbucket\": {\n            \"agent\": {\n              \"input\": {\n                \"data\": {\n                  \"kitchen-checkout\": {\n                    \"cas\": {\n                      \"digest\": {\n                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",\n                        \"size_bytes\": \"1337\"\n                      }\n                    }\n                  }\n                }\n              },\n              \"purposes\": {\n                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"\n              }\n            }\n          },\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"200\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"host_name\": \"example.swarmingserver.appspot.com\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"task_id\": \"200\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LINK@Swarming task@https://example.swarmingserver.appspot.com/task?id=200@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.launch.fuchsia/try/core.x64-debug (attempt 0)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LINK@Swarming task@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "led",
+      "launch",
+      "-modernize"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.launch.fuchsia/try/core.x64-debug (attempt 0).led launch",
+    "stdin": "{\n  \"buildbucket\": {\n    \"bbagent_args\": {\n      \"build\": {\n        \"builder\": {\n          \"bucket\": \"try\",\n          \"builder\": \"fuchsia/try/core.x64-debug\",\n          \"project\": \"flutter\"\n        },\n        \"create_time\": \"2018-05-25T23:50:17Z\",\n        \"created_by\": \"user:luci-scheduler@appspot.gserviceaccount.com\",\n        \"id\": \"8945511751514863184\",\n        \"infra\": {\n          \"buildbucket\": {\n            \"agent\": {\n              \"input\": {\n                \"data\": {\n                  \"kitchen-checkout\": {\n                    \"cas\": {\n                      \"digest\": {\n                        \"hash\": \"9095eb4fe66a5a67626c5af808e1298598a94bfc48e07c7232161b1128bac0be\",\n                        \"size_bytes\": \"1337\"\n                      }\n                    }\n                  }\n                }\n              },\n              \"purposes\": {\n                \"kitchen-checkout\": \"PURPOSE_EXE_PAYLOAD\"\n              }\n            }\n          },\n          \"resultdb\": {\n            \"invocation\": \"invocations/build:8945511751514863184\"\n          },\n          \"swarming\": {\n            \"priority\": 34500,\n            \"task_id\": \"100\"\n          }\n        },\n        \"input\": {\n          \"gerrit_changes\": [\n            {\n              \"change\": \"12345\",\n              \"host\": \"flutter-review.googlesource.com\",\n              \"patchset\": \"6\",\n              \"project\": \"flutter\"\n            }\n          ],\n          \"gitiles_commit\": {\n            \"host\": \"chromium.googlesource.com\",\n            \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",\n            \"project\": \"flutter\",\n            \"ref\": \"refs/heads/main\"\n          },\n          \"properties\": {\n            \"$flutter/recipe_testing\": {\n              \"enabled\": true,\n              \"recipe_depth\": 1.0\n            },\n            \"recipe\": \"fuchsia\"\n          }\n        }\n      }\n    },\n    \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\"\n  }\n}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"host_name\": \"example.swarmingserver.appspot.com\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"task_id\": \"100\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LINK@Swarming task@https://example.swarmingserver.appspot.com/task?id=100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.install infra/tools/luci/swarming",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.install infra/tools/luci/swarming.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin",
+      "-ensure-file",
+      "infra/tools/luci/swarming/${platform} swarming_module_pin",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.install infra/tools/luci/swarming.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-swarming_module_\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/luci/swarming/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/swarming/swarming_module_pin/swarming",
+      "collect",
+      "-server",
+      "https://example.swarmingserver.appspot.com",
+      "-task-summary-json",
+      "/path/to/tmp/json",
+      "-task-output-stdout",
+      "json",
+      "-verbose",
+      "-eager",
+      "100",
+      "200"
+    ],
+    "cost": {
+      "cpu": 100,
+      "disk": 0,
+      "memory": 50,
+      "net": 0
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch/collect.0.collect",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"100\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"output\": \"hello world!\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"outputs\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"results\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"bot_id\": \"vm-123\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"cas_output_root\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"cas_instance\": \"projects/example-project/instances/default_instance\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"hash\": \"24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"size_bytes\": \"73\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"duration\": 62.35, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"exit_code\": \"0\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"recipes-cq:fuchsia/try/core.x64-debug\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"resultdb_info\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"invocation\": \"invocations/some-inv-name\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"state\": \"COMPLETED\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"task_id\": 100@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"200\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"output\": \"hello world!\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"outputs\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"results\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"bot_id\": \"vm-123\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"cas_output_root\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"cas_instance\": \"projects/example-project/instances/default_instance\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"digest\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"hash\": \"24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"size_bytes\": \"73\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"duration\": 62.35, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"exit_code\": \"0\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"recipes-cq:fuchsia/try/core.arm64-debug\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"resultdb_info\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"invocation\": \"invocations/some-inv-name\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"state\": \"COMPLETED\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"task_id\": 200@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.arm64-debug@hello world!@@@",
+      "@@@STEP_LOG_END@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.x64-debug@hello world!@@@",
+      "@@@STEP_LOG_END@task stdout+stderr: recipes-cq:fuchsia&#x2f;try&#x2f;core.x64-debug@@@",
+      "@@@STEP_LINK@task cas outputs: recipes-cq:fuchsia/try/core.arm64-debug@https://cas-viewer.appspot.com/projects/example-project/instances/default_instance/blobs/24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca/73/tree@@@",
+      "@@@STEP_LINK@task cas outputs: recipes-cq:fuchsia/try/core.x64-debug@https://cas-viewer.appspot.com/projects/example-project/instances/default_instance/blobs/24b2420bc49d8b8fdc1d011a163708927532b37dc9f91d7d8d6877e3a86559ca/73/tree@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results.recipes-cq:fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.process results.recipes-cq:fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch/collect.0.passed tasks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LINK@fuchsia/try/core.arm64-debug (attempt 0)@https://luci-milo.appspot.com/swarming/task/200?server=example.swarmingserver.appspot.com@@@",
+      "@@@STEP_LINK@fuchsia/try/core.x64-debug (attempt 0)@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@2 passed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@attempt 0 (pass)@https://luci-milo.appspot.com/swarming/task/200?server=example.swarmingserver.appspot.com@@@",
+      "@@@STEP_LINK@vm-123@https://example.swarmingserver.appspot.com/bot?id=vm-123@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "passes.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@attempt 0 (pass)@https://luci-milo.appspot.com/swarming/task/100?server=example.swarmingserver.appspot.com@@@",
+      "@@@STEP_LINK@vm-123@https://example.swarmingserver.appspot.com/bot?id=vm-123@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "flakes",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@0 flaked@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "failures",
+    "~followup_annotations": [
+      "@@@STEP_SUMMARY_TEXT@0 failed@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tasks passed"
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.expected/with_buildbucket.json b/recipe_modules/recipe_testing/tests/full.expected/with_buildbucket.json
new file mode 100644
index 0000000..a3dc6cb
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.expected/with_buildbucket.json
@@ -0,0 +1,702 @@
+[
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "lint",
+      "--allowlist",
+      "allowed_module"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "lint"
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "test",
+      "run"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "test"
+  },
+  {
+    "cmd": [],
+    "name": "fetch flutter commit-queue.cfg"
+  },
+  {
+    "cmd": [
+      "luci-auth",
+      "token",
+      "-lifetime",
+      "3m"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get access token for default account",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::url]/resources/pycurl.py",
+      "--url",
+      "https://luci-config.appspot.com/_ah/api/config/v1/config_sets/projects/flutter/config/commit-queue.cfg",
+      "--status-json",
+      "/path/to/tmp/json",
+      "--outfile",
+      "/path/to/tmp/json",
+      "--headers-json",
+      "{\"Authorization\": \"Bearer extra.secret.token.should.not.be.logged\"}"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "fetch flutter commit-queue.cfg.get",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "all tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/cobalt-x64-linux@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.arm64-debug@@@",
+      "@@@STEP_LOG_LINE@tryjobs@fuchsia/try/core.x64-debug@@@",
+      "@@@STEP_LOG_END@tryjobs@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get_affected_recipes",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
+      "@@@STEP_LOG_LINE@all recipes@recipes@@@",
+      "@@@STEP_LOG_END@all recipes@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
+      "@@@STEP_LOG_END@changed files (raw)@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
+      "@@@STEP_LOG_END@changed files (filtered)@@@",
+      "@@@STEP_LOG_LINE@affected recipes@fuchsia@@@",
+      "@@@STEP_LOG_END@affected recipes@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/recipe_path/recipes",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.ls-recipes",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/foo@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/flutter.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/recipes.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipe_path/recipes/sdk.expected@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "diff-tree",
+      "--no-commit-id",
+      "--name-only",
+      "-r",
+      "-z",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/recipe_path",
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.git diff-tree",
+    "timeout": 60.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@files@[@@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/test_api.py\"@@@",
+      "@@@STEP_LOG_LINE@files@]@@@",
+      "@@@STEP_LOG_END@files@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/recipe_path/recipes.py",
+      "analyze",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
+      "/path/to/tmp/json"
+    ],
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get_affected_recipes.recipes-analyze",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"error\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"invalidRecipes\": [], @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"recipes\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders"
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1000",
+      "-fields",
+      "builder",
+      "-predicate",
+      "{\"createTime\": {\"startTime\": \"2012-05-13T12:53:21Z\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.get green tryjobs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.arm64-release\", \"project\": \"fuchsia\"}, \"createTime\": \"2018-05-25T23:50:17Z\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@0@https://cr-buildbucket.appspot.com/build/8945511751514863184@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/cobalt-x64-linux",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@skipped@@@",
+      "@@@STEP_LOG_LINE@recipe_used@cobalt@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"cobalt-x64-linux\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/cobalt-x64-linux.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/cobalt-x64-linux\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"cobalt\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.arm64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.arm64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.arm64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.arm64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"200\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@200@https://cr-buildbucket.appspot.com/build/200@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "get builders.fuchsia/try/core.x64-debug",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@SELECTED@@@",
+      "@@@STEP_LOG_LINE@recipe_used@fuchsia@@@",
+      "@@@STEP_LOG_END@recipe_used@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "ls",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-json",
+      "-nopage",
+      "-n",
+      "1",
+      "-fields",
+      "builder,create_time,created_by,critical,end_time,id,infra,input,number,output,start_time,status,update_time",
+      "-predicate",
+      "{\"builder\": {\"bucket\": \"try\", \"builder\": \"core.x64-debug\", \"project\": \"fuchsia\"}, \"status\": \"SUCCESS\"}"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "get builders.fuchsia/try/core.x64-debug.buildbucket.search",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"fuchsia/try/core.x64-debug\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"fuchsia\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@",
+      "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "launch builds",
+    "~followup_annotations": [
+      "@@@STEP_LINK@core.arm64-debug@https://ci.chromium.org/b/8922054662172514000@@@",
+      "@@@STEP_LINK@core.x64-debug@https://ci.chromium.org/b/8922054662172514001@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "batch",
+      "-host",
+      "cr-buildbucket.appspot.com"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "launch builds.schedule",
+    "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"core.arm64-debug\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"$flutter/recipe_testing\": {\"enabled\": true, \"recipe_depth\": 1.0}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"core.x64-debug\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"$flutter/recipe_testing\": {\"enabled\": true, \"recipe_depth\": 1.0}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"responses\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"scheduleBuild\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"bucket\": \"ci\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"builder\": \"core.arm64-debug\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"project\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }, @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"id\": \"8922054662172514000\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }, @@@",
+      "@@@STEP_LOG_LINE@json.output@    {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"scheduleBuild\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@          \"bucket\": \"ci\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"builder\": \"core.x64-debug\", @@@",
+      "@@@STEP_LOG_LINE@json.output@          \"project\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        }, @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"id\": \"8922054662172514001\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@request@{@@@",
+      "@@@STEP_LOG_LINE@request@  \"requests\": [@@@",
+      "@@@STEP_LOG_LINE@request@    {@@@",
+      "@@@STEP_LOG_LINE@request@      \"scheduleBuild\": {@@@",
+      "@@@STEP_LOG_LINE@request@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"bucket\": \"ci\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"builder\": \"core.arm64-debug\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"project\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"experimental\": \"NO\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"experiments\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"luci.buildbucket.parent_tracking\": false@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"gitilesCommit\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"host\": \"fuchsia.googlesource.com\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"project\": \"fuchsia\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@request@            \"enabled\": true, @@@",
+      "@@@STEP_LOG_LINE@request@            \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@request@          }@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"parentRunId\": \"fake-task-id\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"tags\": [@@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"parent_buildbucket_id\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@request@          }, @@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"skip-retry-in-gerrit\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"subbuild\"@@@",
+      "@@@STEP_LOG_LINE@request@          }, @@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"user_agent\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"recipe\"@@@",
+      "@@@STEP_LOG_LINE@request@          }@@@",
+      "@@@STEP_LOG_LINE@request@        ]@@@",
+      "@@@STEP_LOG_LINE@request@      }@@@",
+      "@@@STEP_LOG_LINE@request@    }, @@@",
+      "@@@STEP_LOG_LINE@request@    {@@@",
+      "@@@STEP_LOG_LINE@request@      \"scheduleBuild\": {@@@",
+      "@@@STEP_LOG_LINE@request@        \"builder\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"bucket\": \"ci\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"builder\": \"core.x64-debug\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"project\": \"fuchsia\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"experimental\": \"NO\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"experiments\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"luci.buildbucket.parent_tracking\": false@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"gitilesCommit\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"host\": \"fuchsia.googlesource.com\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"project\": \"fuchsia\", @@@",
+      "@@@STEP_LOG_LINE@request@          \"ref\": \"refs/heads/main\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"$flutter/recipe_testing\": {@@@",
+      "@@@STEP_LOG_LINE@request@            \"enabled\": true, @@@",
+      "@@@STEP_LOG_LINE@request@            \"recipe_depth\": 1.0@@@",
+      "@@@STEP_LOG_LINE@request@          }@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"swarming\": {@@@",
+      "@@@STEP_LOG_LINE@request@          \"parentRunId\": \"fake-task-id\"@@@",
+      "@@@STEP_LOG_LINE@request@        }, @@@",
+      "@@@STEP_LOG_LINE@request@        \"tags\": [@@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"parent_buildbucket_id\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"8945511751514863184\"@@@",
+      "@@@STEP_LOG_LINE@request@          }, @@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"skip-retry-in-gerrit\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"subbuild\"@@@",
+      "@@@STEP_LOG_LINE@request@          }, @@@",
+      "@@@STEP_LOG_LINE@request@          {@@@",
+      "@@@STEP_LOG_LINE@request@            \"key\": \"user_agent\", @@@",
+      "@@@STEP_LOG_LINE@request@            \"value\": \"recipe\"@@@",
+      "@@@STEP_LOG_LINE@request@          }@@@",
+      "@@@STEP_LOG_LINE@request@        ]@@@",
+      "@@@STEP_LOG_LINE@request@      }@@@",
+      "@@@STEP_LOG_LINE@request@    }@@@",
+      "@@@STEP_LOG_LINE@request@  ]@@@",
+      "@@@STEP_LOG_LINE@request@}@@@",
+      "@@@STEP_LOG_END@request@@@",
+      "@@@STEP_LINK@8922054662172514000@https://cr-buildbucket.appspot.com/build/8922054662172514000@@@",
+      "@@@STEP_LINK@8922054662172514001@https://cr-buildbucket.appspot.com/build/8922054662172514001@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "collect builds"
+  },
+  {
+    "cmd": [],
+    "name": "collect builds.collect",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "collect",
+      "-host",
+      "cr-buildbucket.appspot.com",
+      "-interval",
+      "20s",
+      "8922054662172514000",
+      "8922054662172514001"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "collect builds.collect.wait",
+    "timeout": 86400.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "bb",
+      "batch",
+      "-host",
+      "cr-buildbucket.appspot.com"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "fuchsia:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "collect builds.collect.get",
+    "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,infra.swarming.taskId,input,number,output,startTime,status,summaryMarkdown,updateTime\", \"id\": \"8922054662172514000\"}}, {\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,infra.swarming.taskId,input,number,output,startTime,status,summaryMarkdown,updateTime\", \"id\": \"8922054662172514001\"}}]}",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"responses\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@    {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"getBuild\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"id\": \"8922054662172514000\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"status\": \"SUCCESS\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }, @@@",
+      "@@@STEP_LOG_LINE@json.output@    {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"getBuild\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"id\": \"8922054662172514001\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"status\": \"SUCCESS\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  ]@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@request@{@@@",
+      "@@@STEP_LOG_LINE@request@  \"requests\": [@@@",
+      "@@@STEP_LOG_LINE@request@    {@@@",
+      "@@@STEP_LOG_LINE@request@      \"getBuild\": {@@@",
+      "@@@STEP_LOG_LINE@request@        \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,infra.swarming.taskId,input,number,output,startTime,status,summaryMarkdown,updateTime\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"id\": \"8922054662172514000\"@@@",
+      "@@@STEP_LOG_LINE@request@      }@@@",
+      "@@@STEP_LOG_LINE@request@    }, @@@",
+      "@@@STEP_LOG_LINE@request@    {@@@",
+      "@@@STEP_LOG_LINE@request@      \"getBuild\": {@@@",
+      "@@@STEP_LOG_LINE@request@        \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,infra.swarming.taskId,input,number,output,startTime,status,summaryMarkdown,updateTime\", @@@",
+      "@@@STEP_LOG_LINE@request@        \"id\": \"8922054662172514001\"@@@",
+      "@@@STEP_LOG_LINE@request@      }@@@",
+      "@@@STEP_LOG_LINE@request@    }@@@",
+      "@@@STEP_LOG_LINE@request@  ]@@@",
+      "@@@STEP_LOG_LINE@request@}@@@",
+      "@@@STEP_LOG_END@request@@@",
+      "@@@STEP_LINK@8922054662172514000@https://cr-buildbucket.appspot.com/build/8922054662172514000@@@",
+      "@@@STEP_LINK@8922054662172514001@https://cr-buildbucket.appspot.com/build/8922054662172514001@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "collect builds.check builds",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "collect builds.check builds.",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LINK@8922054662172514000@https://cr-buildbucket.appspot.com/build/8922054662172514000@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "collect builds.check builds. (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LINK@8922054662172514001@https://cr-buildbucket.appspot.com/build/8922054662172514001@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/recipe_testing/tests/full.proto b/recipe_modules/recipe_testing/tests/full.proto
new file mode 100644
index 0000000..51f8064
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.proto
@@ -0,0 +1,14 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto3";
+
+package recipe_modules.flutter.recipe_testing.tests;
+
+import "recipe_modules/flutter/recipe_testing/options.proto";
+
+message InputProperties {
+  // Checkout module options.
+  recipe_modules.flutter.recipe_testing.Options recipe_testing_options = 1;
+}
diff --git a/recipe_modules/recipe_testing/tests/full.py b/recipe_modules/recipe_testing/tests/full.py
new file mode 100644
index 0000000..ad2fcbe
--- /dev/null
+++ b/recipe_modules/recipe_testing/tests/full.py
@@ -0,0 +1,211 @@
+# Copyright 2020 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""API for recipe_engine testing."""
+
+import datetime
+
+from recipe_engine import post_process
+from PB.recipe_modules.flutter.recipe_testing.tests.full import InputProperties
+
+DEPS = [
+    "fuchsia/buildbucket_util",
+    "fuchsia/commit_queue",
+    "flutter/recipe_testing",
+    "fuchsia/swarming_retry",
+    "recipe_engine/path",
+    "recipe_engine/properties",
+]
+
+ONE_DAY = int(datetime.timedelta(days=1).total_seconds())
+MAX_BUILD_AGE_SECONDS = int(datetime.timedelta(days=28).total_seconds())
+
+PROPERTIES = InputProperties
+
+
+def RunSteps(api, props):  # pylint: disable=invalid-name
+    recipes_path = api.path["start_dir"].join("recipe_path")
+
+    api.recipe_testing.run_lint(recipes_path, allowlist=r"allowed_module")
+    api.recipe_testing.run_unit_tests(recipes_path)
+
+    selftest_cl = "https://flutter-review.googlesource.com/c/recipes/+/123456"
+    selftest_builder = "flutter/try/foo.bar-debug"
+    api.recipe_testing.run_tests(
+        recipes_path,
+        selftest_cl,
+        props.recipe_testing_options,
+        selftest_builder=selftest_builder,
+    )
+
+
+def GenTests(api):  # pylint: disable=invalid-name
+
+    test = api.recipe_testing
+
+    project = "flutter"
+
+    yield (
+        api.buildbucket_util.test("recursive_ls")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project, "empty")
+        + test.affected_recipes_data(
+            affected_recipes=[],
+            recipe_files=["flutter/flutter.py", "abc.resources/bar.py", "abc.py"],
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("recipes_cfg")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project, "empty")
+        + test.affected_recipes_data(
+            affected_recipes=[],
+            recipe_files=["a.py", "b.py", "c.py", "d.py", "e.py"],
+            changed_files=["infra/config/recipes.cfg"],
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("recipe_proto")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project)
+        + test.affected_recipes_data(
+            affected_recipes=[],
+            changed_files=["recipe_proto/infra/flutter.proto"],
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("no_build_old_build_ignored_build")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project)
+        + test.affected_recipes_data(["flutter"])
+        + test.build_data(
+            "fuchsia/try/cobalt-x64-linux",
+            "cobalt",
+            age_seconds=MAX_BUILD_AGE_SECONDS - ONE_DAY,
+            skip=True,
+        )
+        + test.build_data(
+            "fuchsia/try/core.x64-debug",
+            "fuchsia",
+            age_seconds=MAX_BUILD_AGE_SECONDS + ONE_DAY,
+        )
+        + test.no_build("fuchsia/try/core.arm64-debug")
+    )
+
+    yield (
+        api.buildbucket_util.test("excluded")
+        + api.recipe_testing.options(
+            [api.recipe_testing.project(excluded_buckets=("try",))]
+        )
+        + api.properties(ignored_buckets=["try"])
+        + api.commit_queue.test_data(project)
+        + test.affected_recipes_data(["flutter"])
+        + api.post_process(
+            post_process.MustRun,
+            "excluding 3 builders from bucket flutter/try",
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("two_pass_one_skip")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project)
+        + test.affected_recipes_data(["fuchsia"])
+        + test.build_data("fuchsia/try/cobalt-x64-linux", "cobalt", skip=True)
+        + test.build_data(
+            "fuchsia/try/core.x64-debug", "fuchsia", cl_cached=True, fake_id=100
+        )
+        + test.build_data("fuchsia/try/core.arm64-debug", "fuchsia", fake_id=200)
+        + api.swarming_retry.collect_data(
+            [
+                test.task_result(100, "fuchsia/try/core.x64-debug"),
+                test.task_result(200, "fuchsia/try/core.arm64-debug"),
+            ]
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("fuchsia_recipe_unaffected")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project)
+        + test.affected_recipes_data(["qemu"])
+        + test.build_data("fuchsia/try/cobalt-x64-linux", "cobalt", skip=True)
+        + test.build_data("fuchsia/try/core.x64-debug", "fuchsia", skip=True)
+        + test.build_data("fuchsia/try/core.arm64-debug", "fuchsia", skip=True)
+    )
+
+    yield (
+        api.buildbucket_util.test("recipes")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project, "recipes-only")
+        + test.affected_recipes_data(["recipes"])
+        + test.build_data("fuchsia/try/recipes", "recipes")
+        + api.swarming_retry.collect_data(
+            [test.task_result(100, "fuchsia/try/recipes")]
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("with_buildbucket")
+        + api.commit_queue.test_data(project)
+        + test.affected_recipes_data(["fuchsia"])
+        + test.build_data(
+            "fuchsia/try/cobalt-x64-linux", "cobalt", skip=True, using_led=False
+        )
+        + test.build_data(
+            "fuchsia/try/core.x64-debug",
+            "fuchsia",
+            cl_cached=True,
+            fake_id=100,
+            using_led=False,
+        )
+        + test.build_data(
+            "fuchsia/try/core.arm64-debug",
+            "fuchsia",
+            fake_id=200,
+            using_led=False,
+        )
+        + test.existing_green_tryjobs(["fuchsia/try/core.arm64-release"])
+        # This line only affects coverage. It's sufficiently tested in other
+        # modules that use this module.
+        + api.recipe_testing.options(
+            use_buildbucket=True,
+            projects=(api.recipe_testing.project(),),
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("recipes_with_buildbucket")
+        + api.commit_queue.test_data(project, "recipes-only")
+        + test.affected_recipes_data(["recipes"])
+        + test.build_data("fuchsia/try/recipes", "recipes", using_led=False)
+        + api.recipe_testing.options(use_buildbucket=True)
+    )
+
+    yield (
+        api.buildbucket_util.test("no_latest_cl")
+        + api.recipe_testing.options()
+        + api.commit_queue.test_data(project)
+        + test.affected_recipes_data(["fuchsia"])
+        + test.build_data("fuchsia/try/core.x64-debug", "fuchsia", cl_cached=True)
+        + test.build_data(
+            "fuchsia/try/core.arm64-debug",
+            "fuchsia",
+            num_log_entries=0,
+            fake_id=200,
+        )
+        + api.swarming_retry.collect_data(
+            [
+                test.task_result(100, "fuchsia/try/core.x64-debug"),
+                test.task_result(200, "fuchsia/try/core.arm64-debug"),
+            ]
+        )
+    )
+
+    yield (
+        api.buildbucket_util.test("depth", status="infra_failure")
+        + api.properties(**{"$flutter/recipe_testing": {"recipe_depth": 2}})
+    )
diff --git a/recipes/recipes.expected/ci.json b/recipes/recipes.expected/ci.json
index 09a055c..c1c6a3b 100644
--- a/recipes/recipes.expected/ci.json
+++ b/recipes/recipes.expected/ci.json
@@ -1523,17 +1523,17 @@
     "cmd": [],
     "name": "get_affected_recipes",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@all recipes@fuchsia@@@",
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
       "@@@STEP_LOG_LINE@all recipes@recipes@@@",
       "@@@STEP_LOG_END@all recipes@@@",
-      "@@@STEP_LOG_LINE@changed files (raw)@recipes/fuchsia.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
       "@@@STEP_LOG_END@changed files (raw)@@@",
-      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/fuchsia.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
       "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
       "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
       "@@@STEP_LOG_END@changed files (filtered)@@@",
@@ -1569,7 +1569,7 @@
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
       "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/foo@@@",
-      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/fuchsia.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/flutter.py@@@",
       "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/recipes.py@@@",
       "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/sdk.expected@@@",
       "@@@STEP_LOG_END@listdir@@@"
@@ -1603,7 +1603,7 @@
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
       "@@@STEP_LOG_LINE@files@[@@@",
-      "@@@STEP_LOG_LINE@files@  \"recipes/fuchsia.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
       "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
       "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
       "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
@@ -1617,7 +1617,7 @@
     "cmd": [
       "[START_DIR]/recipes/recipes.py",
       "analyze",
-      "{\"files\": [\"recipes/fuchsia.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"fuchsia\", \"recipes\"]}",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
       "/path/to/tmp/json"
     ],
     "luci_context": {
@@ -1694,7 +1694,7 @@
     "name": "get builders.flutter/try/flutter-bar.buildbucket.search",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-bar\", \"project\": \"fuchsia\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"fuchsia-review.googlesource.com\", \"project\": \"fuchsia\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-bar\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
       "@@@STEP_LOG_END@raw_io.output_text@@@",
       "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
     ]
@@ -1741,7 +1741,7 @@
     "name": "get builders.flutter/try/flutter-baz.buildbucket.search",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-baz\", \"project\": \"fuchsia\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"fuchsia-review.googlesource.com\", \"project\": \"fuchsia\"}], \"properties\": {\"recipe\": \"project\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-baz\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"project\"}}, \"status\": \"SUCCESS\"}@@@",
       "@@@STEP_LOG_END@raw_io.output_text@@@",
       "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
     ]
@@ -1788,7 +1788,7 @@
     "name": "get builders.flutter/try/flutter-foo.buildbucket.search",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-foo\", \"project\": \"fuchsia\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"fuchsia-review.googlesource.com\", \"project\": \"fuchsia\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-foo\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
       "@@@STEP_LOG_END@raw_io.output_text@@@",
       "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
     ]
diff --git a/recipes/recipes.expected/cq_try.json b/recipes/recipes.expected/cq_try.json
index 09a055c..c1c6a3b 100644
--- a/recipes/recipes.expected/cq_try.json
+++ b/recipes/recipes.expected/cq_try.json
@@ -1523,17 +1523,17 @@
     "cmd": [],
     "name": "get_affected_recipes",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@all recipes@fuchsia@@@",
+      "@@@STEP_LOG_LINE@all recipes@flutter@@@",
       "@@@STEP_LOG_LINE@all recipes@recipes@@@",
       "@@@STEP_LOG_END@all recipes@@@",
-      "@@@STEP_LOG_LINE@changed files (raw)@recipes/fuchsia.py@@@",
+      "@@@STEP_LOG_LINE@changed files (raw)@recipes/flutter.py@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipes/foo@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipes/non_expected_json_file.json@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.expected/bar.json@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/examples/full.py@@@",
       "@@@STEP_LOG_LINE@changed files (raw)@recipe_modules/foo/test_api.py@@@",
       "@@@STEP_LOG_END@changed files (raw)@@@",
-      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/fuchsia.py@@@",
+      "@@@STEP_LOG_LINE@changed files (filtered)@recipes/flutter.py@@@",
       "@@@STEP_LOG_LINE@changed files (filtered)@recipes/foo@@@",
       "@@@STEP_LOG_LINE@changed files (filtered)@recipes/non_expected_json_file.json@@@",
       "@@@STEP_LOG_END@changed files (filtered)@@@",
@@ -1569,7 +1569,7 @@
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
       "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/foo@@@",
-      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/fuchsia.py@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/flutter.py@@@",
       "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/recipes.py@@@",
       "@@@STEP_LOG_LINE@listdir@[START_DIR]/recipes/recipes/sdk.expected@@@",
       "@@@STEP_LOG_END@listdir@@@"
@@ -1603,7 +1603,7 @@
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
       "@@@STEP_LOG_LINE@files@[@@@",
-      "@@@STEP_LOG_LINE@files@  \"recipes/fuchsia.py\", @@@",
+      "@@@STEP_LOG_LINE@files@  \"recipes/flutter.py\", @@@",
       "@@@STEP_LOG_LINE@files@  \"recipes/foo\", @@@",
       "@@@STEP_LOG_LINE@files@  \"recipes/non_expected_json_file.json\", @@@",
       "@@@STEP_LOG_LINE@files@  \"recipe_modules/foo/examples/full.expected/bar.json\", @@@",
@@ -1617,7 +1617,7 @@
     "cmd": [
       "[START_DIR]/recipes/recipes.py",
       "analyze",
-      "{\"files\": [\"recipes/fuchsia.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"fuchsia\", \"recipes\"]}",
+      "{\"files\": [\"recipes/flutter.py\", \"recipes/foo\", \"recipes/non_expected_json_file.json\"], \"recipes\": [\"flutter\", \"recipes\"]}",
       "/path/to/tmp/json"
     ],
     "luci_context": {
@@ -1694,7 +1694,7 @@
     "name": "get builders.flutter/try/flutter-bar.buildbucket.search",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-bar\", \"project\": \"fuchsia\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"fuchsia-review.googlesource.com\", \"project\": \"fuchsia\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-bar\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
       "@@@STEP_LOG_END@raw_io.output_text@@@",
       "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
     ]
@@ -1741,7 +1741,7 @@
     "name": "get builders.flutter/try/flutter-baz.buildbucket.search",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-baz\", \"project\": \"fuchsia\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"fuchsia-review.googlesource.com\", \"project\": \"fuchsia\"}], \"properties\": {\"recipe\": \"project\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-baz\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"project\"}}, \"status\": \"SUCCESS\"}@@@",
       "@@@STEP_LOG_END@raw_io.output_text@@@",
       "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
     ]
@@ -1788,7 +1788,7 @@
     "name": "get builders.flutter/try/flutter-foo.buildbucket.search",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-foo\", \"project\": \"fuchsia\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"fuchsia-review.googlesource.com\", \"project\": \"fuchsia\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@{\"builder\": {\"bucket\": \"try\", \"builder\": \"flutter/try/flutter-foo\", \"project\": \"flutter\"}, \"endTime\": \"2012-05-13T12:53:20Z\", \"id\": \"100\", \"input\": {\"gerritChanges\": [{\"host\": \"flutter-review.googlesource.com\", \"project\": \"flutter\"}], \"properties\": {\"recipe\": \"flutter\"}}, \"status\": \"SUCCESS\"}@@@",
       "@@@STEP_LOG_END@raw_io.output_text@@@",
       "@@@STEP_LINK@100@https://cr-buildbucket.appspot.com/build/100@@@"
     ]
diff --git a/recipes/recipes.py b/recipes/recipes.py
index 2938ef8..648cb83 100755
--- a/recipes/recipes.py
+++ b/recipes/recipes.py
@@ -8,16 +8,16 @@
 
 import attr
 
-from PB.recipe_modules.fuchsia.recipe_testing import options as options_pb2
+from PB.recipe_modules.flutter.recipe_testing import options as options_pb2
 from recipe_engine.recipe_api import Property
 
 DEPS = [
+    'flutter/recipe_testing',
     'fuchsia/commit_queue',
+    'fuchsia/gerrit',
     'fuchsia/git',
     'fuchsia/git_checkout',
-    'fuchsia/recipe_testing',
     'fuchsia/status_check',
-    'fuchsia/gerrit',
     'recipe_engine/buildbucket',
     'recipe_engine/context',
     'recipe_engine/json',