roller: Support matching branches

When triggering off a branch name that appears in both the submodule and
the top-level project, and when match_triggering_branch is set, roll
into that branch on the top-level project.

Also remove some earlier code that was trying to do something similar.

Bug: b/509549918
Change-Id: I9d74e3f420213b02875df823f4b67e0e4bdf674e
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/409294
diff --git a/recipe_modules/checkout/api.py b/recipe_modules/checkout/api.py
index 741e078..f92dac2 100644
--- a/recipe_modules/checkout/api.py
+++ b/recipe_modules/checkout/api.py
@@ -737,6 +737,7 @@
         ctx: CheckoutContext,
         remote: str = None,
         branch: str = None,
+        fallback_to_head: bool = True,
     ) -> tuple[Change, ...]:
         bb_input: build_pb.Build.Input = self.m.buildbucket.build.input
         results: list[Change] = []
@@ -791,7 +792,7 @@
                             )
                         )
 
-            if not results:
+            if not results and fallback_to_head:
                 # If not triggered by a gitiles_poller gitiles_commit may be
                 # empty. In that case treat the most recent commit on the
                 # remote as the triggering commit. This is a good assumption
@@ -1743,12 +1744,17 @@
 
         return remote1 in equivalent_remotes.get(remote2, ())
 
-    def triggering_changes(self, options: Options):
+    def triggering_changes(self, options: Options) -> tuple[Change]:
         ctx = CheckoutContext(self.m)
         ctx.options = options
         ctx.changes = []
 
-        return self._change_data(ctx, options.remote, options.branch)
+        return self._change_data(
+            ctx,
+            remote=options.remote,
+            branch=options.branch,
+            fallback_to_head=False,
+        )
 
     def __call__(
         self,
diff --git a/recipe_modules/checkout/tests/git.expected/not_in_gerrit.json b/recipe_modules/checkout/tests/git.expected/not_in_gerrit.json
index c62f88d..cf60d75 100644
--- a/recipe_modules/checkout/tests/git.expected/not_in_gerrit.json
+++ b/recipe_modules/checkout/tests/git.expected/not_in_gerrit.json
@@ -1457,64 +1457,6 @@
     "name": "change data"
   },
   {
-    "cmd": [
-      "git",
-      "ls-remote",
-      "--heads",
-      "https://pigweed.googlesource.com/pigweed/pigweed",
-      "main"
-    ],
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "change data.git ls-remote",
-    "timeout": 600.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@stdout@h3ll0\trefs/heads/main@@@",
-      "@@@STEP_LOG_END@stdout@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-query",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"params\": {\"q\": \"commit:h3ll0\"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "name": "change data.number",
-    "timeout": 30,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@[@@@",
-      "@@@STEP_LOG_LINE@json.output@  {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"_number\": \"1234\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"branch\": \"main\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"project\": \"pigweed\"@@@",
-      "@@@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@  \"params\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"q\": \"commit:h3ll0\"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@"
-    ]
-  },
-  {
     "cmd": [],
     "name": "change data.changes",
     "~followup_annotations": [
@@ -1522,14 +1464,6 @@
     ]
   },
   {
-    "cmd": [],
-    "name": "change data.changes.pigweed:1234",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_SUMMARY_TEXT@Change(number=1234, remote='https://pigweed.googlesource.com/pigweed/pigweed', ref='h3ll0', rebase=False, project=None, branch='main', gerrit_name='pigweed', submitted=True, patchset=None, path=None, base=None, base_type=None, is_merge=False, commit_message='', topic=None, current_revision=None, primary=False, submit_requirements={}, uploader=None)@@@"
-    ]
-  },
-  {
     "name": "$result"
   }
 ]
\ No newline at end of file
diff --git a/recipe_modules/checkout/tests/git.expected/other.json b/recipe_modules/checkout/tests/git.expected/other.json
index f53127e..9ca9d0f 100644
--- a/recipe_modules/checkout/tests/git.expected/other.json
+++ b/recipe_modules/checkout/tests/git.expected/other.json
@@ -1463,64 +1463,6 @@
     "name": "change data"
   },
   {
-    "cmd": [
-      "git",
-      "ls-remote",
-      "--heads",
-      "https://pigweed.googlesource.com/pigweed/pigweed",
-      "main"
-    ],
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "change data.git ls-remote",
-    "timeout": 600.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@stdout@h3ll0\trefs/heads/main@@@",
-      "@@@STEP_LOG_END@stdout@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-query",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"params\": {\"q\": \"commit:h3ll0\"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "name": "change data.number",
-    "timeout": 30,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@[@@@",
-      "@@@STEP_LOG_LINE@json.output@  {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"_number\": \"1234\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"branch\": \"main\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"project\": \"pigweed\"@@@",
-      "@@@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@  \"params\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"q\": \"commit:h3ll0\"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@"
-    ]
-  },
-  {
     "cmd": [],
     "name": "change data.changes",
     "~followup_annotations": [
@@ -1528,14 +1470,6 @@
     ]
   },
   {
-    "cmd": [],
-    "name": "change data.changes.pigweed:1234",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_SUMMARY_TEXT@Change(number=1234, remote='https://pigweed.googlesource.com/pigweed/pigweed', ref='h3ll0', rebase=False, project=None, branch='main', gerrit_name='pigweed', submitted=True, patchset=None, path=None, base=None, base_type=None, is_merge=False, commit_message='', topic=None, current_revision=None, primary=False, submit_requirements={}, uploader=None)@@@"
-    ]
-  },
-  {
     "name": "$result"
   }
 ]
\ No newline at end of file
diff --git a/recipe_modules/submodule_roll/api.py b/recipe_modules/submodule_roll/api.py
index 581cafe..4427e5e 100644
--- a/recipe_modules/submodule_roll/api.py
+++ b/recipe_modules/submodule_roll/api.py
@@ -207,45 +207,22 @@
                     )
                 )
 
-            is_release_branch = False
             if not submodule.branch:
-                if (
-                    submodule_entry.release_branch_prefix
-                    and checkout.options.branch
-                    and checkout.options.branch.startswith(
-                        submodule_entry.release_branch_prefix
-                    )
-                ):
-                    submodule.branch = checkout.options.branch
-                    is_release_branch = True
-                else:
-                    try:
-                        submodule.branch = gitmodules.get(section, 'branch')
-                    except configparser.NoOptionError:
-                        submodule.branch = 'main'
+                try:
+                    submodule.branch = gitmodules.get(section, 'branch')
+                except configparser.NoOptionError:
+                    submodule.branch = 'main'
 
             submodule.remote = self.m.git_roll_util.normalize_remote(
                 gitmodules.get(section, 'url'),
                 checkout.options.remote,
             )
 
-            try:
-                new_revision = self.m.git_roll_util.resolve_new_revision(
-                    submodule.remote,
-                    submodule.branch,
-                    checkout.remotes_equivalent,
-                )
-            except self.m.step.StepFailure:
-                if is_release_branch:
-                    self.m.step.empty(
-                        'skip missing release branch',
-                        step_text=(
-                            f'Branch {submodule.branch} not found in '
-                            f'{submodule.remote}'
-                        ),
-                    )
-                    return []
-                raise
+            new_revision = self.m.git_roll_util.resolve_new_revision(
+                submodule.remote,
+                submodule.branch,
+                checkout.remotes_equivalent,
+            )
 
             change = self.update_pin(
                 checkout,
diff --git a/recipe_modules/submodule_roll/submodule.proto b/recipe_modules/submodule_roll/submodule.proto
index 2a7c8d7..5d01475 100644
--- a/recipe_modules/submodule_roll/submodule.proto
+++ b/recipe_modules/submodule_roll/submodule.proto
@@ -29,8 +29,4 @@
 
   // Timeout for 'git submodule update'. Default: 10 minutes.
   int32 timeout_sec = 4;
-
-  // Prefix for release branches. If set, builds on release branches will be
-  // skipped if the branch doesn't exist in the downstream repo.
-  string release_branch_prefix = 5;
 }
diff --git a/recipe_modules/submodule_roll/test_api.py b/recipe_modules/submodule_roll/test_api.py
index 8709c1b..4014ef3 100644
--- a/recipe_modules/submodule_roll/test_api.py
+++ b/recipe_modules/submodule_roll/test_api.py
@@ -33,14 +33,8 @@
         path: str,
         name: str | None = None,
         branch: str | None = None,
-        release_branch_prefix: str | None = None,
     ) -> SubmoduleEntry:
-        return SubmoduleEntry(
-            path=path,
-            name=name or path,
-            branch=branch or '',
-            release_branch_prefix=release_branch_prefix or '',
-        )
+        return SubmoduleEntry(path=path, name=name or path, branch=branch or '')
 
     def gitmodules(
         self,
diff --git a/recipe_modules/submodule_roll/tests/full.expected/release_branch.json b/recipe_modules/submodule_roll/tests/full.expected/release_branch.json
deleted file mode 100644
index d9693cd..0000000
--- a/recipe_modules/submodule_roll/tests/full.expected/release_branch.json
+++ /dev/null
@@ -1,572 +0,0 @@
-[
-  {
-    "cmd": [],
-    "name": "a1"
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/checkout/.gitmodules",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "a1.read .gitmodules",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@[submodule \"a1\"]@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@\tpath = a1@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@\turl = sso://foo/a1@@@",
-      "@@@STEP_LOG_END@.gitmodules@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "ls-remote",
-      "--heads",
-      "https://foo.googlesource.com/a1",
-      "release_20260430"
-    ],
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "a1.git ls-remote",
-    "timeout": 600.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@stdout@h3ll0\trefs/heads/release_20260430@@@",
-      "@@@STEP_LOG_END@stdout@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "update",
-      "--init",
-      "--jobs",
-      "4",
-      "[START_DIR]/checkout/a1"
-    ],
-    "cwd": "[START_DIR]/checkout",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "a1.git submodule update",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "log",
-      "--max-count=1",
-      "--pretty=format:%H"
-    ],
-    "cwd": "[START_DIR]/checkout/a1",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "a1.get old revision",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@1111111111111111111111111111111111111111@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.ensure infra/tools/luci/gitiles/${platform}",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.ensure infra/tools/luci/gitiles/${platform}.get packages",
-    "~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/cipd.ensure",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "a1.ensure infra/tools/luci/gitiles/${platform}.get packages.read ensure file",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gitiles/${platform} version:pinned-version@@@",
-      "@@@STEP_LOG_END@cipd.ensure@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.ensure infra/tools/luci/gitiles/${platform}.install infra/tools/luci/gitiles",
-    "~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",
-      "0o777",
-      "[START_DIR]/cipd_tool/infra/tools/luci/gitiles/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
-    ],
-    "infra_step": true,
-    "name": "a1.ensure infra/tools/luci/gitiles/${platform}.install infra/tools/luci/gitiles.ensure package directory",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[START_DIR]/cipd_tool/infra/tools/luci/gitiles/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
-      "-ensure-file",
-      "infra/tools/luci/gitiles/${platform} version:pinned-version",
-      "-max-threads",
-      "0",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "name": "a1.ensure infra/tools/luci/gitiles/${platform}.install infra/tools/luci/gitiles.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-version:pinned-v\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/luci/gitiles/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/gitiles/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gitiles",
-      "log",
-      "-json-output",
-      "/path/to/tmp/json",
-      "-limit",
-      "500",
-      "https://foo.googlesource.com/a1",
-      "1111111111111111111111111111111111111111..h3ll0"
-    ],
-    "infra_step": true,
-    "name": "a1.log a1",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@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_LINE@json.output@    \"author\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_1.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_1.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\": \"3380b83c11e029b7291c83c44e7b1ce09d465fd1\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"message\": \"fake A msg 1\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"parents\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"8675a52c73c701cb0b2c48f5ed4a9058c624e6cd\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tree\": \"a1b1e6aa501915989b45a95e1224ec2a88655eb3\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tree_diff\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"new_id\": \"06bc4c79002f278528aaddae4e056a11f58c19ad\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"new_mode\": 33188,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"new_path\": \"b.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_LINE@json.output@    \"author\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_2.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_2.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\": \"363caa907186de786cb5292cd1ab7245da954815\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"message\": \"fake A msg 2\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"parents\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"255c6325c4c654e17e6b35142e3912c86f1718f2\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tree\": \"e84d4ad259e69da73d2b842e2b9709f08e8b22bd\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tree_diff\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"new_id\": \"d7f478bf423219f2f47c1a6ed344fc597a8bf18f\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"new_mode\": 33188,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"new_path\": \"c.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": "a1.get gerrit change numbers for a1",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.get gerrit change numbers for a1.old revision",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_SUMMARY_TEXT@255c6325c4c654e17e6b35142e3912c86f1718f2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.get gerrit change numbers for a1.new revision",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_SUMMARY_TEXT@3e30158f2a7caccb7a9f6632a60011e7a44e1e5c@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.get gerrit change numbers for a1.3 commits",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.get gerrit change numbers for a1.ensure infra/tools/luci/gerrit/${platform}",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.get gerrit change numbers for a1.ensure infra/tools/luci/gerrit/${platform}.get packages",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "deadline": {
-        "grace_period": 30.0,
-        "soft_deadline": 1337000021.5
-      }
-    },
-    "name": "a1.get gerrit change numbers for a1.ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@",
-      "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
-      "@@@STEP_LOG_END@cipd.ensure@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.get gerrit change numbers for a1.ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/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",
-      "0o777",
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "deadline": {
-        "grace_period": 30.0,
-        "soft_deadline": 1337000021.5
-      }
-    },
-    "name": "a1.get gerrit change numbers for a1.ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
-      "-ensure-file",
-      "infra/tools/luci/gerrit/${platform} version:pinned-version",
-      "-max-threads",
-      "0",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "deadline": {
-        "grace_period": 30.0,
-        "soft_deadline": 1337000021.5
-      }
-    },
-    "name": "a1.get gerrit change numbers for a1.ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/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\": \"infra/tools/luci/gerrit/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/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-detail",
-      "-host",
-      "https://foo-review.googlesource.com",
-      "-input",
-      "{\"change_id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\"}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "name": "a1.get gerrit change numbers for a1.change details for 3e30158:https://foo.googlesource.com/a1/+/3e30158f2a7caccb7a9f6632a60011e7a44e1e5c",
-    "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@}@@@",
-      "@@@STEP_LOG_END@json.output@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\"@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@",
-      "@@@STEP_LINK@gerrit link@https://foo-review.googlesource.com/q/3e30158f2a7caccb7a9f6632a60011e7a44e1e5c@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-detail",
-      "-host",
-      "https://foo-review.googlesource.com",
-      "-input",
-      "{\"change_id\": \"3380b83c11e029b7291c83c44e7b1ce09d465fd1\"}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "name": "a1.get gerrit change numbers for a1.change details for 3380b83:https://foo.googlesource.com/a1/+/3380b83c11e029b7291c83c44e7b1ce09d465fd1",
-    "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@}@@@",
-      "@@@STEP_LOG_END@json.output@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"3380b83c11e029b7291c83c44e7b1ce09d465fd1\"@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@",
-      "@@@STEP_LINK@gerrit link@https://foo-review.googlesource.com/q/3380b83c11e029b7291c83c44e7b1ce09d465fd1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-detail",
-      "-host",
-      "https://foo-review.googlesource.com",
-      "-input",
-      "{\"change_id\": \"363caa907186de786cb5292cd1ab7245da954815\"}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "name": "a1.get gerrit change numbers for a1.change details for 363caa9:https://foo.googlesource.com/a1/+/363caa907186de786cb5292cd1ab7245da954815",
-    "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@}@@@",
-      "@@@STEP_LOG_END@json.output@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"363caa907186de786cb5292cd1ab7245da954815\"@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@",
-      "@@@STEP_LINK@gerrit link@https://foo-review.googlesource.com/q/363caa907186de786cb5292cd1ab7245da954815@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "fetch",
-      "origin",
-      "h3ll0"
-    ],
-    "cwd": "[START_DIR]/checkout/a1",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "a1.git fetch",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "checkout",
-      "FETCH_HEAD"
-    ],
-    "cwd": "[START_DIR]/checkout/a1",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "a1.git checkout",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "commit message",
-    "~followup_annotations": [
-      "@@@STEP_SUMMARY_TEXT@roll: a1 255c632..3e30158 (3 commits)\n\n3e30158:https://foo-review.googlesource.com/c/a1/+/12345 fake A msg 0\n3380b83:https://foo-review.googlesource.com/c/a1/+/12345 fake A msg 1\n363caa9:https://foo-review.googlesource.com/c/a1/+/12345 fake A msg 2\n\nRolled-Repo: https://foo.googlesource.com/a1\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac@@@"
-    ]
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/submodule_roll/tests/full.expected/release_branch_missing.json b/recipe_modules/submodule_roll/tests/full.expected/release_branch_missing.json
deleted file mode 100644
index 2a73252..0000000
--- a/recipe_modules/submodule_roll/tests/full.expected/release_branch_missing.json
+++ /dev/null
@@ -1,70 +0,0 @@
-[
-  {
-    "cmd": [],
-    "name": "a1",
-    "~followup_annotations": [
-      "@@@STEP_FAILURE@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/checkout/.gitmodules",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "a1.read .gitmodules",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@[submodule \"a1\"]@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@\tpath = a1@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@\turl = sso://foo/a1@@@",
-      "@@@STEP_LOG_END@.gitmodules@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "ls-remote",
-      "--heads",
-      "https://foo.googlesource.com/a1",
-      "release_20260430"
-    ],
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "a1.git ls-remote",
-    "timeout": 600.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_FAILURE@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "a1.skip missing release branch",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_TEXT@Branch release_20260430 not found in https://foo.googlesource.com/a1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "nothing to roll, exiting"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/submodule_roll/tests/full.expected/resolve_failure.json b/recipe_modules/submodule_roll/tests/full.expected/resolve_failure.json
deleted file mode 100644
index 8e18593..0000000
--- a/recipe_modules/submodule_roll/tests/full.expected/resolve_failure.json
+++ /dev/null
@@ -1,62 +0,0 @@
-[
-  {
-    "cmd": [],
-    "name": "a1",
-    "~followup_annotations": [
-      "@@@STEP_FAILURE@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/checkout/.gitmodules",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "a1.read .gitmodules",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@[submodule \"a1\"]@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@\tpath = a1@@@",
-      "@@@STEP_LOG_LINE@.gitmodules@\turl = sso://foo/a1@@@",
-      "@@@STEP_LOG_END@.gitmodules@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "ls-remote",
-      "--heads",
-      "https://foo.googlesource.com/a1",
-      "main"
-    ],
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "name": "a1.git ls-remote",
-    "timeout": 600.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_FAILURE@@@"
-    ]
-  },
-  {
-    "failure": {
-      "failure": {},
-      "humanReason": "Step('a1.git ls-remote') (retcode: 1)"
-    },
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/submodule_roll/tests/full.py b/recipe_modules/submodule_roll/tests/full.py
index 6100d6a..9f0a510 100644
--- a/recipe_modules/submodule_roll/tests/full.py
+++ b/recipe_modules/submodule_roll/tests/full.py
@@ -35,8 +35,6 @@
 message InputProperties {
   // Submodules to update.
   recipe_modules.pigweed.submodule_roll.SubmoduleEntry submodule = 1;
-
-  string branch = 2;
 }
 """
 
@@ -48,8 +46,6 @@
     props: InputProperties,
 ):
     checkout = api.checkout.fake_context()
-    if props.branch:
-        checkout.options.branch = props.branch
 
     rolls = api.submodule_roll.update(checkout, props.submodule)
 
@@ -98,40 +94,3 @@
         api.submodule_roll.gitmodules('b2', a1='sso://foo/a1'),
         status='FAILURE',
     )
-
-    yield api.test(
-        'release_branch',
-        properties(
-            api.submodule_roll.entry('a1', release_branch_prefix='release_'),
-            branch='release_20260430',
-        ),
-        api.submodule_roll.gitmodules(
-            'a1',
-            a1='sso://foo/a1',
-        ),
-        api.gitiles.log('a1.log a1', 'A'),
-    )
-
-    yield api.test(
-        'release_branch_missing',
-        properties(
-            api.submodule_roll.entry('a1', release_branch_prefix='release_'),
-            branch='release_20260430',
-        ),
-        api.submodule_roll.gitmodules(
-            'a1',
-            a1='sso://foo/a1',
-        ),
-        api.step_data('a1.git ls-remote', retcode=1),
-    )
-
-    yield api.test(
-        'resolve_failure',
-        properties(api.submodule_roll.entry('a1')),
-        api.submodule_roll.gitmodules(
-            'a1',
-            a1='sso://foo/a1',
-        ),
-        api.step_data('a1.git ls-remote', retcode=1),
-        status='FAILURE',
-    )
diff --git a/recipes/roller.expected/release_branch_trigger.json b/recipes/roller.expected/release_branch_trigger.json
deleted file mode 100644
index 05d9d43..0000000
--- a/recipes/roller.expected/release_branch_trigger.json
+++ /dev/null
@@ -1,3363 +0,0 @@
-[
-  {
-    "cmd": [],
-    "name": "abandon old changes"
-  },
-  {
-    "cmd": [],
-    "name": "abandon old changes.pigweed",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "abandon old changes.pigweed.ensure infra/tools/luci/gerrit/${platform}",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "abandon old changes.pigweed.ensure infra/tools/luci/gerrit/${platform}.get packages",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "abandon old changes.pigweed.ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@",
-      "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
-      "@@@STEP_LOG_END@cipd.ensure@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "abandon old changes.pigweed.ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/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",
-      "0o777",
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "abandon old changes.pigweed.ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
-      "-ensure-file",
-      "infra/tools/luci/gerrit/${platform} version:pinned-version",
-      "-max-threads",
-      "0",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "abandon old changes.pigweed.ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/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\": \"infra/tools/luci/gerrit/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/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-query",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"params\": {\"q\": \"is:open owner:None age:30d \"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "abandon old changes.pigweed.get old changes",
-    "timeout": 30,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@[@@@",
-      "@@@STEP_LOG_LINE@json.output@  {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"_number\": 1001@@@",
-      "@@@STEP_LOG_LINE@json.output@  },@@@",
-      "@@@STEP_LOG_LINE@json.output@  {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"_number\": 1002@@@",
-      "@@@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@  \"params\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"q\": \"is:open owner:None age:30d \"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-abandon",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"change_id\": \"1001\", \"input\": {\"message\": \"Abandoning orphaned roll change.\"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "abandon old changes.pigweed.abandon 1001",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_END@json.output (invalid)@@@",
-      "@@@STEP_LOG_LINE@json.output (exception)@Expecting value: line 1 column 1 (char 0)@@@",
-      "@@@STEP_LOG_END@json.output (exception)@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"1001\",@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"input\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"message\": \"Abandoning orphaned roll change.\"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@",
-      "@@@STEP_LINK@gerrit link@https://pigweed-review.googlesource.com/q/1001@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-abandon",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"change_id\": \"1002\", \"input\": {\"message\": \"Abandoning orphaned roll change.\"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "abandon old changes.pigweed.abandon 1002",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_END@json.output (invalid)@@@",
-      "@@@STEP_LOG_LINE@json.output (exception)@Expecting value: line 1 column 1 (char 0)@@@",
-      "@@@STEP_LOG_END@json.output (exception)@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"1002\",@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"input\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"message\": \"Abandoning orphaned roll change.\"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@",
-      "@@@STEP_LINK@gerrit link@https://pigweed-review.googlesource.com/q/1002@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "abandon old changes.pigweed.success",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "not ready",
-    "~followup_annotations": [
-      "@@@SET_BUILD_PROPERTY@ready_to_upload@false@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed",
-    "~followup_annotations": [
-      "@@@STEP_LINK@applied pigweed:1234 (.)@https://pigweed-review.googlesource.com/c/1234@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.options",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@remote: \"https://pigweed.googlesource.com/pigweed/pigweed\"\nbranch: \"main\"\ninitialize_submodules: true\nmatch_branch: true\nuse_trigger: true\n@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.options with defaults",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@remote: \"https://pigweed.googlesource.com/pigweed/pigweed\"\nbranch: \"main\"\nmanifest_file: \"default.xml\"\ninitialize_submodules: true\nrepo_init_timeout_sec: 120\nrepo_sync_timeout_sec: 900\nnumber_of_attempts: 3\nmatch_branch: true\nsubmodule_timeout_sec: 600\nuse_trigger: true\nmax_attempts: 2\n@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.change data",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.change data.process gitiles commit",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-query",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"params\": {\"q\": \"commit:h3ll0\"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.change data.process gitiles commit.number",
-    "timeout": 30,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LOG_LINE@json.output@[@@@",
-      "@@@STEP_LOG_LINE@json.output@  {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"_number\": \"1234\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"branch\": \"main\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"project\": \"pigweed\"@@@",
-      "@@@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@  \"params\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"q\": \"commit:h3ll0\"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.change data.changes",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.change data.changes.pigweed:1234",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_SUMMARY_TEXT@Change(number=1234, remote='https://pigweed.googlesource.com/pigweed/pigweed', ref='h3ll0', rebase=False, project='pigweed', branch='releases/google/test_20260501', gerrit_name='pigweed', submitted=True, patchset=None, path=None, base=None, base_type=None, is_merge=False, commit_message='', topic=None, current_revision='h3ll0', primary=True, submit_requirements={}, uploader=None)@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.branch names",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@['releases/google/test_20260501']@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.superproject has branch",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "ls-remote",
-      "--heads",
-      "https://pigweed.googlesource.com/pigweed/pigweed",
-      "releases/google/test_20260501"
-    ],
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.superproject has branch.git ls-remote releases/google/test_20260501",
-    "timeout": 600.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@stdout@@@@",
-      "@@@STEP_LOG_END@stdout@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.superproject has branch.head",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_SUMMARY_TEXT@''@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.no branch names match",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.cache",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@miss@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0o777",
-      "[CACHE]/git"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.ensure git cache dir",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "",
-      "[CACHE]/git/.GUARD_FILE"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.write git cache guard file",
-    "~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",
-      "0o777",
-      "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.makedirs",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.cache.miss",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@SET_BUILD_PROPERTY@checkout https://pigweed.googlesource.com/pigweed/pigweed@\"cache miss\"@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "init"
-    ],
-    "cwd": "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.git init",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "config",
-      "remote.origin.url",
-      "https://pigweed.googlesource.com/pigweed/pigweed"
-    ],
-    "cwd": "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.remote set-url",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "config",
-      "fetch.uriprotocols",
-      "https"
-    ],
-    "cwd": "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.enable packfiles",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.cache.timeout 10s",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "fetch",
-      "--prune",
-      "--tags",
-      "--jobs",
-      "4",
-      "origin",
-      "--recurse-submodules"
-    ],
-    "cwd": "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.git fetch",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "merge",
-      "FETCH_HEAD"
-    ],
-    "cwd": "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.git merge",
-    "timeout": 600.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "sync",
-      "--recursive"
-    ],
-    "cwd": "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.git submodule sync",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.cache.timeout 10s (2)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "update",
-      "--init",
-      "--recursive",
-      "--force",
-      "--jobs",
-      "4"
-    ],
-    "cwd": "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.git submodule update",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "remove",
-      "[CACHE]/git/.GUARD_FILE"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.cache.remove git cache guard file",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copytree",
-      "--symlinks",
-      "[CACHE]/git/pigweed.googlesource.com-pigweed-pigweed",
-      "[START_DIR]/co"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.copy from cache",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.git checkout",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.git checkout.timeout 10s",
-    "~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",
-      "0o777",
-      "[START_DIR]/co"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "deadline": {
-        "grace_period": 30.0,
-        "soft_deadline": 1337000019.0
-      },
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.makedirs",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "init"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.git init",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "remote",
-      "add",
-      "origin",
-      "https://pigweed.googlesource.com/pigweed/pigweed"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.git remote",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "config",
-      "core.longpaths",
-      "true"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.set core.longpaths",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "config",
-      "fetch.uriprotocols",
-      "https"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.enable packfiles",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "fetch",
-      "--tags",
-      "--jobs",
-      "4",
-      "origin",
-      "main",
-      "--recurse-submodules"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.git fetch",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "checkout",
-      "-f",
-      "FETCH_HEAD"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.git checkout",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "rev-parse",
-      "HEAD"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.git rev-parse",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "clean",
-      "-f",
-      "-d",
-      "-x"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.git clean",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.git checkout.submodule",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.git checkout.submodule.submodule",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "sync"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.submodule.submodule.git submodule sync",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "update",
-      "--init",
-      "--recursive",
-      "--force",
-      "--jobs",
-      "4"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git checkout.submodule.submodule.git submodule update",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "rev-parse",
-      "HEAD"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git rev-parse",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.apply pigweed:1234",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LINK@gerrit@https://pigweed-review.googlesource.com/c/1234@@@",
-      "@@@STEP_LINK@gitiles@https://pigweed.googlesource.com/pigweed/pigweed/+/h3ll0@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.apply pigweed:1234.timeout 10s",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "fetch",
-      "--jobs",
-      "4",
-      "https://pigweed.googlesource.com/pigweed/pigweed",
-      "h3ll0",
-      "--no-recurse-submodules"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git fetch patch",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "checkout",
-      "--force",
-      "-b",
-      "working",
-      "FETCH_HEAD"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git checkout patch",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "remote",
-      "add",
-      "https___pigweed_googlesource_com_pigweed_pigweed",
-      "https://pigweed.googlesource.com/pigweed/pigweed"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git remote add",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.apply pigweed:1234.timeout 10s (2)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "fetch",
-      "--jobs",
-      "4",
-      "https___pigweed_googlesource_com_pigweed_pigweed",
-      "refs/heads/releases/google/test_20260501"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git fetch branch",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "branch",
-      "--set-upstream-to=https___pigweed_googlesource_com_pigweed_pigweed/releases/google/test_20260501"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git set upstream",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "rev-parse",
-      "HEAD"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git rev-parse",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "log",
-      "--oneline",
-      "-n",
-      "10"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.post-rebase log",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.apply pigweed:1234.timeout 10s (3)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "checkout",
-      "--detach"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.detach",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "sync",
-      "--recursive"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git submodule sync",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "update",
-      "--init",
-      "--recursive",
-      "--jobs",
-      "4"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.git submodule update",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "checkout",
-      "-"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.apply pigweed:1234.reattach",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python3",
-      "RECIPE_MODULE[pigweed::checkout]/resources/submodule_status.py",
-      "[START_DIR]/co",
-      "/path/to/tmp/json",
-      "--recursive"
-    ],
-    "cwd": "[START_DIR]/co",
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.submodule status",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@{}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.matching pigweed:1234",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@no matching submodules@@@",
-      "@@@STEP_LINK@gerrit@https://pigweed-review.googlesource.com/c/1234@@@",
-      "@@@STEP_LINK@gitiles@https://pigweed.googlesource.com/pigweed/pigweed/+/h3ll0@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[{\"applied\": true, \"base\": \"HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_\", \"base_type\": \"submitted_commit_hash\", \"branch\": \"releases/google/test_20260501\", \"commit_message\": \"\", \"current_revision\": \"h3ll0\", \"gerrit_name\": \"pigweed\", \"is_merge\": false, \"number\": 1234, \"patchset\": null, \"path\": \".\", \"primary\": true, \"project\": \"pigweed\", \"rebase\": false, \"ref\": \"h3ll0\", \"remote\": \"https://pigweed.googlesource.com/pigweed/pigweed\", \"submitted\": true, \"topic\": null, \"uploader\": null}]",
-      "[CLEANUP]/tmp_tmp_1"
-    ],
-    "cwd": "[START_DIR]/co",
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.write changes.json",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@tmp_tmp_1@[{\"applied\": true, \"base\": \"HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_\", \"base_type\": \"submitted_commit_hash\", \"branch\": \"releases/google/test_20260501\", \"commit_message\": \"\", \"current_revision\": \"h3ll0\", \"gerrit_name\": \"pigweed\", \"is_merge\": false, \"number\": 1234, \"patchset\": null, \"path\": \".\", \"primary\": true, \"project\": \"pigweed\", \"rebase\": false, \"ref\": \"h3ll0\", \"remote\": \"https://pigweed.googlesource.com/pigweed/pigweed\", \"submitted\": true, \"topic\": null, \"uploader\": null}]@@@",
-      "@@@STEP_LOG_END@tmp_tmp_1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.git log",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "log",
-      "--oneline",
-      "-n",
-      "10"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git log.[START_DIR]/co",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.base",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@SET_BUILD_PROPERTY@got_revision@\"HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_\"@@@",
-      "@@@SET_BUILD_PROPERTY@got_revision_type@\"submitted_commit_hash\"@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "clean",
-      "-f",
-      "-f",
-      "-d"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git clean",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "status"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.git status",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "checkout pigweed.status",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@applied [Change(number=1234, remote='https://pigweed.googlesource.com/pigweed/pigweed', ref='h3ll0', rebase=False, project='pigweed', branch='releases/google/test_20260501', gerrit_name='pigweed', submitted=True, patchset=None, path='.', base='HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_HEAD_', base_type='submitted_commit_hash', is_merge=False, commit_message='', topic=None, current_revision='h3ll0', primary=True, submit_requirements={}, uploader=None)]\nnot applied []@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0o777",
-      "[START_DIR]/snapshot"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.mkdir",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "submodule",
-      "status",
-      "--recursive"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.submodule-status",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "submodule status filler text",
-      "[START_DIR]/snapshot/submodules.log"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.write submodule snapshot",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@submodules.log@submodule status filler text@@@",
-      "@@@STEP_LOG_END@submodules.log@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "log",
-      "--oneline",
-      "-n",
-      "10"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.log",
-    "timeout": 1200.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "",
-      "[START_DIR]/snapshot/git.log"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "checkout pigweed.write git log",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_END@git.log@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "cipd"
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/co/pw_env_setup/py/pw_env_setup/cipd_setup/pigweed.json",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.read pigweed.json",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@{@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@  \"packages\": [@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@    {@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"_comment\": \"comments should be preserved\",@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"path\": \"cipd/${platform}\",@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"platforms\": [@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@        \"linux-amd64\",@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@        \"windows-amd64\"@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      ],@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@        \"git_revision:123\"@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      ]@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@    }@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@  ]@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@}@@@",
-      "@@@STEP_LOG_END@pigweed.json@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "describe",
-      "cipd/linux-amd64",
-      "-version",
-      "latest",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.cipd describe cipd/linux-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/linux-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": [
-      "cipd",
-      "describe",
-      "cipd/windows-amd64",
-      "-version",
-      "latest",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.cipd describe cipd/windows-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/windows-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": "cipd.common tags",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@git_revision:397a2597cdc237f3026e6143b683be4b9ab60540@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "cipd.check number of instances",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "describe",
-      "cipd/linux-amd64",
-      "-version",
-      "git_revision:397a2597cdc237f3026e6143b683be4b9ab60540",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.check number of instances.cipd describe cipd/linux-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-git_revision:397\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/linux-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": [
-      "cipd",
-      "describe",
-      "cipd/windows-amd64",
-      "-version",
-      "git_revision:397a2597cdc237f3026e6143b683be4b9ab60540",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.check number of instances.cipd describe cipd/windows-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-git_revision:397\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/windows-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": "cipd.new version",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@git_revision:397a2597cdc237f3026e6143b683be4b9ab60540@@@",
-      "@@@STEP_LOG_LINE@old version@git_revision:123@@@",
-      "@@@STEP_LOG_END@old version@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "cipd.checking against old version",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "cipd.checking against old version.cipd/linux-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "describe",
-      "cipd/linux-amd64",
-      "-version",
-      "git_revision:123",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.checking against old version.cipd/linux-amd64.cipd describe cipd/linux-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-git_revision:123\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/linux-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": "cipd.checking against old version.cipd/windows-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "describe",
-      "cipd/windows-amd64",
-      "-version",
-      "git_revision:123",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.checking against old version.cipd/windows-amd64.cipd describe cipd/windows-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-git_revision:123\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/windows-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": "cipd.check package uploader",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "cipd.check package uploader.cipd/linux-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "describe",
-      "cipd/linux-amd64",
-      "-version",
-      "git_revision:397a2597cdc237f3026e6143b683be4b9ab60540",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.check package uploader.cipd/linux-amd64.cipd describe cipd/linux-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-git_revision:397\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/linux-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": "cipd.check package uploader.cipd/linux-amd64.allowlist empty",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "cipd.check package uploader.cipd/windows-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "describe",
-      "cipd/windows-amd64",
-      "-version",
-      "git_revision:397a2597cdc237f3026e6143b683be4b9ab60540",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.check package uploader.cipd/windows-amd64.cipd describe cipd/windows-amd64",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"pin\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"instance_id\": \"resolved-instance_id-of-git_revision:397\",@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"package\": \"cipd/windows-amd64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@    },@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"refs\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"modified_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"ref\": \"latest\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ],@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"buildbot_build:some.waterfall/builder/1234\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_repository:https://chromium.googlesource.com/some/repo\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      },@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_by\": \"user:44-blablbla@developer.gserviceaccount.com\",@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"registered_ts\": 1446574210,@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"tag\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@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": "cipd.check package uploader.cipd/windows-amd64.allowlist empty",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "{\n  \"packages\": [\n    {\n      \"_comment\": \"comments should be preserved\",\n      \"path\": \"cipd/${platform}\",\n      \"platforms\": [\n        \"linux-amd64\",\n        \"windows-amd64\"\n      ],\n      \"tags\": [\n        \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"\n      ]\n    }\n  ]\n}\n",
-      "[START_DIR]/co/pw_env_setup/py/pw_env_setup/cipd_setup/pigweed.json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "cipd.write pigweed.json",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@{@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@  \"packages\": [@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@    {@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"_comment\": \"comments should be preserved\",@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"path\": \"cipd/${platform}\",@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"platforms\": [@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@        \"linux-amd64\",@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@        \"windows-amd64\"@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      ],@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      \"tags\": [@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@        \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\"@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@      ]@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@    }@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@  ]@@@",
-      "@@@STEP_LOG_LINE@pigweed.json@}@@@",
-      "@@@STEP_LOG_END@pigweed.json@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "commit message",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@commit message@roll: cipd@@@",
-      "@@@STEP_LOG_LINE@commit message@@@@",
-      "@@@STEP_LOG_LINE@commit message@From git_revision:123@@@",
-      "@@@STEP_LOG_LINE@commit message@To git_revision:397a2597cdc237f3026e6143b683be4b9ab60540@@@",
-      "@@@STEP_LOG_LINE@commit message@@@@",
-      "@@@STEP_LOG_LINE@commit message@Roll-Count: 1@@@",
-      "@@@STEP_LOG_END@commit message@@@",
-      "@@@SET_BUILD_PROPERTY@_roll_count@1@@@",
-      "@@@SET_BUILD_PROPERTY@_roll_names@[\"cipd\"]@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "commit message.cipd",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@{'name': 'cipd', 'spec': 'cipd/${platform}', 'old': 'git_revision:123', 'new': 'git_revision:397a2597cdc237f3026e6143b683be4b9ab60540'}@@@",
-      "@@@SET_BUILD_PROPERTY@cipd@{\"name\": \"cipd\", \"new\": \"git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\", \"old\": \"git_revision:123\", \"spec\": \"cipd/${platform}\"}@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "ready_to_upload",
-    "~followup_annotations": [
-      "@@@SET_BUILD_PROPERTY@ready_to_upload@true@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "ls-files",
-      "--modified",
-      "--deleted",
-      "--exclude-standard"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "check for no-op commit: unstaged / ignored files",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@stdout@hello@@@",
-      "@@@STEP_LOG_END@stdout@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "diff",
-      "HEAD",
-      "--cached",
-      "--name-only"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "check for no-op commit: staged files",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@stdout@staged-foo.txt@@@",
-      "@@@STEP_LOG_LINE@stdout@staged-bar.txt@@@",
-      "@@@STEP_LOG_END@stdout@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "add",
-      "--update"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "git add",
-    "timeout": 300.0
-  },
-  {
-    "cmd": [
-      "git",
-      "rev-parse",
-      "HEAD"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "git rev-parse",
-    "timeout": 300.0
-  },
-  {
-    "cmd": [],
-    "name": "calculate Change-Id",
-    "~followup_annotations": [
-      "@@@STEP_TEXT@I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "diff",
-      "--unified=0",
-      "--cached"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "calculate Change-Id.git diff",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@diff --git a/foo.txt b/foo.txt@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@--- a/foo.txt@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@+++ b/foo.txt@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@@@ -16 +16 @@@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@-        foo = 5@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@+        foo = 6@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@diff --git a/bar.txt b/bar.txt@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@--- a/bar.txt@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@+++ b/bar.txt@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@@@ -5 +5 @@@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@-        bar = 0@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@+        bar = 1@@@",
-      "@@@STEP_LOG_LINE@diff (without hashes)@@@@",
-      "@@@STEP_LOG_END@diff (without hashes)@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "hash-object",
-      "diff --git a/foo.txt b/foo.txt\n--- a/foo.txt\n+++ b/foo.txt\n@@ -16 +16 @@\n-        foo = 5\n+        foo = 6\ndiff --git a/bar.txt b/bar.txt\n--- a/bar.txt\n+++ b/bar.txt\n@@ -5 +5 @@\n-        bar = 0\n+        bar = 1\n####builder########"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "calculate Change-Id.git hash-object",
-    "timeout": 300.0,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-query",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"params\": {\"o\": [\"MESSAGES\", \"DETAILED_ACCOUNTS\"], \"q\": \"change:pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c\"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[START_DIR]/co",
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "check for identical roll",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@json.output@[]@@@",
-      "@@@STEP_LOG_END@json.output@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"params\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"o\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@      \"MESSAGES\",@@@",
-      "@@@STEP_LOG_LINE@json.input@      \"DETAILED_ACCOUNTS\"@@@",
-      "@@@STEP_LOG_LINE@json.input@    ],@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"q\": \"change:pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c\"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "git",
-      "commit",
-      "-m",
-      "roll: cipd\n\nFrom git_revision:123\nTo git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\n\nRoll-Count: 1\nRoller-URL: https://cr-buildbucket.appspot.com/build/8945511751514863184\nCQ-Do-Not-Cancel-Tryjobs: true\nChange-Id: I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c",
-      "-a",
-      "--no-verify"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "git commit",
-    "timeout": 1200.0
-  },
-  {
-    "cmd": [
-      "git",
-      "push",
-      "--push-option",
-      "nokeycheck",
-      "https://pigweed.googlesource.com/pigweed/pigweed",
-      "HEAD:refs/for/main%l=Commit-Queue+1,hashtag=roll%2dcipd"
-    ],
-    "cwd": "[START_DIR]/co",
-    "env": {
-      "GIT_ADVICE": "0",
-      "GIT_CONFIG_COUNT": "3",
-      "GIT_CONFIG_KEY_0": "gc.auto",
-      "GIT_CONFIG_KEY_1": "gc.autoDetach",
-      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
-      "GIT_CONFIG_VALUE_0": "0",
-      "GIT_CONFIG_VALUE_1": "0",
-      "GIT_CONFIG_VALUE_2": "0"
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "git push",
-    "timeout": 180.0,
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@stdout@@@@",
-      "@@@STEP_LOG_END@stdout@@@",
-      "@@@STEP_LINK@gerrit link@https://pigweed-review.googlesource.com/q/pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "output gerrit change id",
-    "~followup_annotations": [
-      "@@@SET_BUILD_PROPERTY@gerrit_changes@[{\"change_id\": \"pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c\", \"dry_run\": true, \"host\": \"pigweed-review.googlesource.com\"}]@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "check for completion"
-  },
-  {
-    "cmd": [],
-    "name": "check for completion.check if done (0)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-detail",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"change_id\": \"pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c\", \"params\": {\"o\": [\"CURRENT_REVISION\", \"DETAILED_ACCOUNTS\", \"SUBMITTABLE\"]}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "check for completion.check if done (0).status",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"_number\": 123456,@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"abc123\",@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"current_revision_number\": 3,@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"labels\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Commit-Queue\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"all\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@        {@@@",
-      "@@@STEP_LOG_LINE@json.output@          \"value\": 2@@@",
-      "@@@STEP_LOG_LINE@json.output@        }@@@",
-      "@@@STEP_LOG_LINE@json.output@      ],@@@",
-      "@@@STEP_LOG_LINE@json.output@      \"approved\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"email\": \"roller@fuchsia-service-account.com\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    }@@@",
-      "@@@STEP_LOG_LINE@json.output@  },@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"status\": \"MERGED\"@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c\",@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"params\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"o\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@      \"CURRENT_REVISION\",@@@",
-      "@@@STEP_LOG_LINE@json.input@      \"DETAILED_ACCOUNTS\",@@@",
-      "@@@STEP_LOG_LINE@json.input@      \"SUBMITTABLE\"@@@",
-      "@@@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://pigweed-review.googlesource.com/q/pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
-      "change-abandon",
-      "-host",
-      "https://pigweed-review.googlesource.com",
-      "-input",
-      "{\"change_id\": \"pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c\", \"input\": {\"message\": \"Dry run passed.\"}}",
-      "-output",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "abandon roll",
-    "timeout": 600,
-    "~followup_annotations": [
-      "@@@STEP_TEXT@dry run passed@@@",
-      "@@@STEP_LOG_END@json.output (invalid)@@@",
-      "@@@STEP_LOG_LINE@json.output (exception)@Expecting value: line 1 column 1 (char 0)@@@",
-      "@@@STEP_LOG_END@json.output (exception)@@@",
-      "@@@STEP_LOG_LINE@json.input@{@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c\",@@@",
-      "@@@STEP_LOG_LINE@json.input@  \"input\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"message\": \"Dry run passed.\"@@@",
-      "@@@STEP_LOG_LINE@json.input@  }@@@",
-      "@@@STEP_LOG_LINE@json.input@}@@@",
-      "@@@STEP_LOG_END@json.input@@@",
-      "@@@STEP_LINK@gerrit link@https://pigweed-review.googlesource.com/q/pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c@@@"
-    ]
-  },
-  {
-    "name": "$result",
-    "summaryMarkdown": "Dry run succeeded. [gerrit link](https://pigweed-review.googlesource.com/q/pigweed/pigweed~main~I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c)"
-  }
-]
\ No newline at end of file
diff --git a/recipes/roller.proto b/recipes/roller.proto
index bd05427..1a735f6 100644
--- a/recipes/roller.proto
+++ b/recipes/roller.proto
@@ -111,4 +111,13 @@
   // Id of the multi_roller build that launched this builder, if applicable.
   // String because large ints don't always get preserved through JSON.
   string parent_build_id = 23;
+
+  // Whether to match the destination branch to the triggering branch. This is
+  // useful for rollers of release branches where the downstream change is on
+  // 'refs/heads/releases/$RELEASE', the destination repo has that branch, but
+  // we don't want to configure a separate roller for each release branch.
+  // If this is set then auto_roller_options.upstream_ref,
+  // override_auto_roller_options.upstream_ref, and checkout_options.branch will
+  // be overwritten.
+  string match_triggering_branch = 24;
 }
diff --git a/recipes/roller.py b/recipes/roller.py
index af3582b..bb24a6d 100644
--- a/recipes/roller.py
+++ b/recipes/roller.py
@@ -33,6 +33,7 @@
 
 import contextlib
 import itertools
+import re
 from collections.abc import Iterator, Sequence
 from typing import Any
 
@@ -42,9 +43,6 @@
 
 from PB.go.chromium.org.luci.buildbucket.proto import build as build_pb
 from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb
-from PB.go.chromium.org.luci.scheduler.api.scheduler.v1 import (
-    triggers as triggers_pb,
-)
 from PB.recipe_engine import result as result_pb
 from PB.recipe_modules.fuchsia.auto_roller.options import (
     Options as AutoRollerOptions,
@@ -91,8 +89,8 @@
     'pigweed/variable_roll',
     'recipe_engine/buildbucket',
     'recipe_engine/file',
+    'recipe_engine/json',
     'recipe_engine/properties',
-    'recipe_engine/scheduler',
     'recipe_engine/step',
     'recipe_engine/time',
 ]
@@ -122,9 +120,27 @@
     not_ready = api.step.empty('not ready').presentation
     not_ready.properties['ready_to_upload'] = False
 
-    if api.properties.get('release_branch_prefix'):
-        props.checkout_options.use_trigger = True
-        props.checkout_options.match_branch = True
+    if props.match_triggering_branch:
+        triggering_changes = api.checkout.triggering_changes(
+            props.checkout_options
+        )
+        if len(triggering_changes) != 1:
+            api.step.empty(
+                f'len(triggering_changes) {len(triggering_changes)} != 1',
+                status='FAILURE',
+            )
+
+        change = triggering_changes[0]
+        if not change.submitted:
+            api.step.empty(
+                f'triggering change {change} is not submitted',
+                status='FAILURE',
+            )
+
+        props.checkout_options.branch = change.branch
+        props.auto_roller_options.upstream_ref = change.branch
+        props.override_auto_roller_options.upstream_ref = change.branch
+
     checkout = api.checkout(props.checkout_options)
 
     env: api.checkout.Environment | None = None
@@ -496,6 +512,101 @@
     )
 
     yield api.test(
+        'match_triggering_branch_success',
+        api.buildbucket.ci_build(
+            git_repo=api.checkout.pigweed_repo,
+            git_ref='refs/heads/release-1.0',
+        ),
+        api.override_step_data(
+            'change data.process gitiles commit.number',
+            api.json.output(
+                [
+                    {
+                        '_number': '1234',
+                        'branch': 'release-1.0',
+                        'project': 'pigweed/pigweed',
+                    }
+                ]
+            ),
+        ),
+        properties(
+            cipd_packages=api.cipd_roll.package_props('cipd/${platform}'),
+            match_triggering_branch='true',
+        ),
+        api.cipd_roll.read_file_step_data(
+            'cipd',
+            'pigweed.json',
+            api.cipd_roll.package(
+                'cipd/${platform}',
+                'git_revision:123',
+                platforms=['linux-amd64', 'windows-amd64'],
+            ),
+        ),
+        expected_roll(
+            'cipd',
+            old='git_revision:123',
+            new='git_revision:397a2597cdc237f3026e6143b683be4b9ab60540',
+        ),
+        api.auto_roller.dry_run_success(),
+        api.post_check(post_process.PropertyEquals, '_roll_count', 1),
+        api.post_check(
+            post_process.StepCommandContains,
+            'git push',
+            [re.compile(r'refs/for/release-1.0')],
+        ),
+        api.post_process(post_process.DropExpectation),
+    )
+
+    yield api.test(
+        'match_triggering_branch_not_submitted',
+        api.checkout.try_test_data(),
+        properties(
+            cipd_packages=api.cipd_roll.package_props('cipd/${platform}'),
+            match_triggering_branch='true',
+        ),
+        api.post_check(
+            post_process.MustRunRE,
+            r'.*triggering change .* is not submitted',
+        ),
+        api.post_process(post_process.DropExpectation),
+        status='FAILURE',
+    )
+
+    yield api.test(
+        'match_triggering_branch_multiple_changes',
+        api.checkout.try_test_data(
+            gerrit_changes=[
+                api.checkout.cl('host1', 'proj1', 123),
+                api.checkout.cl('host2', 'proj2', 456),
+            ]
+        ),
+        properties(
+            cipd_packages=api.cipd_roll.package_props('cipd/${platform}'),
+            match_triggering_branch='true',
+        ),
+        api.post_check(
+            post_process.MustRun,
+            'len(triggering_changes) 2 != 1',
+        ),
+        api.post_process(post_process.DropExpectation),
+        status='FAILURE',
+    )
+
+    yield api.test(
+        'match_triggering_branch_no_changes',
+        properties(
+            cipd_packages=api.cipd_roll.package_props('cipd/${platform}'),
+            match_triggering_branch='true',
+        ),
+        api.post_check(
+            post_process.MustRun,
+            'len(triggering_changes) 0 != 1',
+        ),
+        api.post_process(post_process.DropExpectation),
+        status='FAILURE',
+    )
+
+    yield api.test(
         'mega',
         api.buildbucket.ci_build(
             tags=[common_pb.StringPair(key='user_agent', value='bisector')],
@@ -591,36 +702,3 @@
         api.post_check(post_process.PropertyEquals, '_roll_count', 10),
         # api.post_process(post_process.DropExpectation),
     )
-
-    yield api.test(
-        'release_branch_trigger',
-        api.buildbucket.ci_build(
-            git_repo='https://pigweed.googlesource.com/pigweed/pigweed',
-            revision='h3ll0',
-        ),
-        api.scheduler(
-            triggers=[
-                triggers_pb.Trigger(
-                    gitiles=triggers_pb.GitilesTrigger(
-                        repo='https://pigweed.googlesource.com/pigweed/pigweed',
-                        revision='h3ll0',
-                        ref='refs/heads/releases/google/test_20260501',
-                    ),
-                ),
-            ],
-        ),
-        api.properties(release_branch_prefix='releases/'),
-        properties(
-            cipd_packages=api.cipd_roll.package_props('cipd/${platform}'),
-        ),
-        api.cipd_roll.read_file_step_data(
-            'cipd',
-            'pigweed.json',
-            api.cipd_roll.package(
-                'cipd/${platform}',
-                'git_revision:123',
-                platforms=['linux-amd64', 'windows-amd64'],
-            ),
-        ),
-        api.auto_roller.success(),
-    )
diff --git a/recipes/workflows.proto b/recipes/workflows.proto
index 93d70c2..0a30830 100644
--- a/recipes/workflows.proto
+++ b/recipes/workflows.proto
@@ -41,8 +41,4 @@
   // Version of Bazel to use. If empty, bazelisk uses the .bazelversion file.
   // Cannot be set if the pigweed.latest_bazel experiment is active.
   string bazel_version = 7;
-
-  // Prefix for release branches. If set, builds on release branches will be
-  // skipped if the branch doesn't exist in the downstream repo.
-  string release_branch_prefix = 8;
 }
diff --git a/recipes/workflows.py b/recipes/workflows.py
index 15abf7a..e0c3154 100644
--- a/recipes/workflows.py
+++ b/recipes/workflows.py
@@ -28,7 +28,6 @@
     recipe_test_api,
 )
 
-from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb
 from PB.pigweed.pw_build.proto import build_driver as build_driver_pb
 from PB.pigweed.pw_build.proto import workflows as workflows_pb
 from PB.recipe_engine import result as result_pb
@@ -102,28 +101,7 @@
     if res := api.ci_status.exit_early_in_recipe_testing_if_failing():
         return res  # pragma: no cover
 
-    is_release_branch = False
-    if props.release_branch_prefix and props.checkout_options.branch:
-        if props.checkout_options.branch.startswith(
-            props.release_branch_prefix
-        ):
-            is_release_branch = True
-
-    try:
-        checkout = api.checkout(props.checkout_options)
-    except api.step.StepFailure as e:
-        if is_release_branch:
-            step_text = f'Branch {props.checkout_options.branch} not found in downstream repo or checkout failed'
-            pres = api.step.empty(
-                'skip missing release branch',
-                step_text=step_text,
-            ).presentation
-            pres.properties['early_exit_reason'] = 'skip missing release branch'
-            return result_pb.RawResult(
-                summary_markdown=step_text,
-                status=common_pb.SUCCESS,
-            )
-        raise e
+    checkout = api.checkout(props.checkout_options)
 
     if res := api.roll_tryjob_reuse.exit_early_if_applicable(checkout.changes):
         return res  # pragma: no cover
@@ -447,17 +425,9 @@
 def GenTests(
     api: recipe_test_api.RecipeTestApi,
 ) -> Iterator[recipe_test_api.TestData]:
-    def properties(
-        checkout_overrides=None, **kwargs: Any
-    ) -> recipe_test_api.TestData:
+    def properties(**kwargs: Any) -> recipe_test_api.TestData:
         props = InputProperties(**kwargs)
-        if not props.HasField('checkout_options'):
-            props.checkout_options.CopyFrom(
-                api.checkout.git_options(**(checkout_overrides or {}))
-            )
-        elif checkout_overrides:
-            for k, v in checkout_overrides.items():
-                setattr(props.checkout_options, k, v)
+        props.checkout_options.CopyFrom(api.checkout.git_options())
         return api.properties(props)
 
     def must_upload(
@@ -520,51 +490,3 @@
         ),
         api.post_process(post_process.DropExpectation),
     )
-
-    yield api.test(
-        'release_branch_success',
-        properties(
-            release_branch_prefix='releases/',
-            checkout_overrides=dict(
-                branch='releases/foo',
-            ),
-        ),
-        api.buildbucket.try_build(),
-        api.checkout.try_test_data(),
-        api.post_process(post_process.DropExpectation),
-    )
-
-    yield api.test(
-        'release_branch_missing',
-        properties(
-            release_branch_prefix='releases/',
-            checkout_overrides=dict(
-                branch='releases/foo',
-            ),
-        ),
-        api.buildbucket.try_build(),
-        api.checkout.try_test_data(),
-        api.step_data('checkout pigweed.git checkout.git checkout', retcode=1),
-        api.post_process(post_process.DropExpectation),
-    )
-
-    yield api.test(
-        'checkout_failure',
-        properties(),
-        api.buildbucket.try_build(),
-        api.checkout.try_test_data(),
-        api.step_data('checkout pigweed.git checkout.git checkout', retcode=1),
-        api.post_process(post_process.DropExpectation),
-        status='INFRA_FAILURE',
-    )
-
-    yield api.test(
-        'checkout_overrides_with_options',
-        properties(
-            checkout_options=api.checkout.git_options(branch='main'),
-            checkout_overrides=dict(branch='overridden'),
-        ),
-        api.buildbucket.try_build(),
-        api.checkout.try_test_data(),
-        api.post_process(post_process.DropExpectation),
-    )