[testing_requests] Isolate images again.

Change-Id: I30713b821e2ffc0346d98433feda0c7cfa6ead8f
diff --git a/recipe_modules/build/examples/full.expected/extract_build_artifacts.json b/recipe_modules/build/examples/full.expected/extract_build_artifacts.json
index 41761c5..3b04dba 100644
--- a/recipe_modules/build/examples/full.expected/extract_build_artifacts.json
+++ b/recipe_modules/build/examples/full.expected/extract_build_artifacts.json
@@ -3428,11 +3428,82 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/out/default/some.dep\": [\"[CLEANUP]/isolate_tmp_2/some.dep\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_2/netboot.zbi\"], \"[START_DIR]/out/default/some.dep\": [\"[CLEANUP]/isolate_tmp_2/some.dep\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_2/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -3548,7 +3619,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"0\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"syslog.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"0\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"DUMMY.POOL\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./catalyst\", \n            \"-images\", \n            \"gs://###fuchsia-build###/uuid/images/images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://###fuchsia-build###/uuid/images/images.json\", \n            \"-timeout\", \n            \"0s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/uuid/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"-use-runtests\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"0\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"0\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"syslog.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"0\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"DUMMY.POOL\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./catalyst\", \n            \"-images\", \n            \"images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"images.json\", \n            \"-timeout\", \n            \"0s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/uuid/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"-use-runtests\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"0\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_3/task_requests.json"
     ],
     "infra_step": true,
@@ -3577,7 +3648,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"packages\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"path\": \".\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              }@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            ]@@@",
@@ -3597,7 +3668,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@          \"command\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./catalyst\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://###fuchsia-build###/uuid/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-bootserver\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./bootserver_new\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-config\", @@@",
@@ -3607,7 +3678,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"debug\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"run\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://###fuchsia-build###/uuid/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-timeout\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"0s\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-serial-log\", @@@",
diff --git a/recipe_modules/build/examples/full.expected/extract_build_artifacts_with_images.json b/recipe_modules/build/examples/full.expected/extract_build_artifacts_with_images.json
index c231236..bd8c890 100644
--- a/recipe_modules/build/examples/full.expected/extract_build_artifacts_with_images.json
+++ b/recipe_modules/build/examples/full.expected/extract_build_artifacts_with_images.json
@@ -3426,11 +3426,82 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_2/netboot.zbi\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_2/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -3544,7 +3615,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"0\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"syslog.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"0\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"DUMMY.POOL\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./catalyst\", \n            \"-images\", \n            \"gs://###fuchsia-build###/uuid/images/images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://###fuchsia-build###/uuid/images/images.json\", \n            \"-timeout\", \n            \"0s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/uuid/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"-use-runtests\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"0\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"0\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"syslog.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"0\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"DUMMY.POOL\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./catalyst\", \n            \"-images\", \n            \"images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"images.json\", \n            \"-timeout\", \n            \"0s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/uuid/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/###fuchsia-build###/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"-use-runtests\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"0\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_3/task_requests.json"
     ],
     "infra_step": true,
@@ -3573,7 +3644,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"packages\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"path\": \".\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              }@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            ]@@@",
@@ -3593,7 +3664,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@          \"command\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./catalyst\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://###fuchsia-build###/uuid/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-bootserver\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./bootserver_new\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-config\", @@@",
@@ -3603,7 +3674,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"debug\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"run\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://###fuchsia-build###/uuid/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-timeout\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"0s\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-serial-log\", @@@",
diff --git a/recipe_modules/testing/examples/full.expected/asan_tests.json b/recipe_modules/testing/examples/full.expected/asan_tests.json
index e0f4155..fef4119 100644
--- a/recipe_modules/testing/examples/full.expected/asan_tests.json
+++ b/recipe_modules/testing/examples/full.expected/asan_tests.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1364,7 +1402,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"-cpu\", \"8\", \"-memory\", \"8192\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"-cpu\", \"8\", \"-memory\", \"8192\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/async.json b/recipe_modules/testing/examples/full.expected/async.json
index bf71c04..6ddfcfd 100644
--- a/recipe_modules/testing/examples/full.expected/async.json
+++ b/recipe_modules/testing/examples/full.expected/async.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1323,7 +1361,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/fail_then_timeout.json b/recipe_modules/testing/examples/full.expected/fail_then_timeout.json
index f82c32f..fca5da4 100644
--- a/recipe_modules/testing/examples/full.expected/fail_then_timeout.json
+++ b/recipe_modules/testing/examples/full.expected/fail_then_timeout.json
@@ -1302,11 +1302,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard fuchsia-0000.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard fuchsia-0000.create tree of build artifacts",
@@ -1439,7 +1478,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1790,7 +1829,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/isolated_test_device_no_pave.json b/recipe_modules/testing/examples/full.expected/isolated_test_device_no_pave.json
index a340a70..28ffa6e 100644
--- a/recipe_modules/testing/examples/full.expected/isolated_test_device_no_pave.json
+++ b/recipe_modules/testing/examples/full.expected/isolated_test_device_no_pave.json
@@ -1211,11 +1211,91 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1351,7 +1431,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Intel NUC Kit NUC6i3SYK-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"zedboot\", \"-config\", \"/etc/botanist/config.json\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-results-dir\", \"/tmp/infra-test-output\", \"-out\", \"out.tar\", \"-serial-log\", \"serial.txt\", \"-netboot\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Intel NUC Kit NUC6i3SYK\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"out.tar\", \"serial.txt\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Intel NUC Kit NUC6i3SYK-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"zedboot\", \"-config\", \"/etc/botanist/config.json\", \"-images\", \"images.json\", \"-results-dir\", \"/tmp/infra-test-output\", \"-out\", \"out.tar\", \"-serial-log\", \"serial.txt\", \"-netboot\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Intel NUC Kit NUC6i3SYK\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"out.tar\", \"serial.txt\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/isolated_tests_kernel_panic.json b/recipe_modules/testing/examples/full.expected/isolated_tests_kernel_panic.json
index b2ef1b9..67dd40d 100644
--- a/recipe_modules/testing/examples/full.expected/isolated_tests_kernel_panic.json
+++ b/recipe_modules/testing/examples/full.expected/isolated_tests_kernel_panic.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1345,7 +1383,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1462,7 +1500,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/isolated_tests_no_json.json b/recipe_modules/testing/examples/full.expected/isolated_tests_no_json.json
index ff61628..7c8b375 100644
--- a/recipe_modules/testing/examples/full.expected/isolated_tests_no_json.json
+++ b/recipe_modules/testing/examples/full.expected/isolated_tests_no_json.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1342,7 +1380,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/isolated_tests_no_resource.json b/recipe_modules/testing/examples/full.expected/isolated_tests_no_resource.json
index 94e1a78..7788815 100644
--- a/recipe_modules/testing/examples/full.expected/isolated_tests_no_resource.json
+++ b/recipe_modules/testing/examples/full.expected/isolated_tests_no_resource.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1346,7 +1384,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1464,7 +1502,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/isolated_tests_test_failure.json b/recipe_modules/testing/examples/full.expected/isolated_tests_test_failure.json
index 38d8eed..3c29c53 100644
--- a/recipe_modules/testing/examples/full.expected/isolated_tests_test_failure.json
+++ b/recipe_modules/testing/examples/full.expected/isolated_tests_test_failure.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1368,7 +1406,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1594,7 +1632,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/sharded_failure_string.json b/recipe_modules/testing/examples/full.expected/sharded_failure_string.json
index 115396c..28d83f6 100644
--- a/recipe_modules/testing/examples/full.expected/sharded_failure_string.json
+++ b/recipe_modules/testing/examples/full.expected/sharded_failure_string.json
@@ -1245,11 +1245,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -1382,7 +1463,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1723,7 +1804,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/sharded_kernel_panic.json b/recipe_modules/testing/examples/full.expected/sharded_kernel_panic.json
index 20bb6dd..dd8353b 100644
--- a/recipe_modules/testing/examples/full.expected/sharded_kernel_panic.json
+++ b/recipe_modules/testing/examples/full.expected/sharded_kernel_panic.json
@@ -1245,11 +1245,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -1382,7 +1463,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1717,7 +1798,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/test_in_shards_mixed_failure.json b/recipe_modules/testing/examples/full.expected/test_in_shards_mixed_failure.json
index 6f5213b..01538a3 100644
--- a/recipe_modules/testing/examples/full.expected/test_in_shards_mixed_failure.json
+++ b/recipe_modules/testing/examples/full.expected/test_in_shards_mixed_failure.json
@@ -1365,11 +1365,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard fuchsia-0000.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard fuchsia-0000.create tree of build artifacts",
@@ -1466,11 +1505,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard fuchsia-0001.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_2/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_2/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_2/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_2/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard fuchsia-0001.create tree of build artifacts",
@@ -1569,11 +1689,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_3/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard fuchsia-0002.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_3/private_key\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_3/private_key\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_3/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_3/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_3/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard fuchsia-0002.create tree of build artifacts",
@@ -1635,11 +1794,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_4/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard fuchsia-0003.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_4/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_4/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_4/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_4/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_4/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard fuchsia-0003.create tree of build artifacts",
@@ -1737,7 +1977,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1775,7 +2015,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0001\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0001\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1813,7 +2053,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0002\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0002\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -1851,7 +2091,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0003\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0003\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -2775,7 +3015,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0001\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0001\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -2813,7 +3053,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0002\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0002\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -2851,7 +3091,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"fuchsia-0003\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"fuchsia-0003\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:NUC-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"NUC\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"NUC\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/test_in_shards_single_attempt.json b/recipe_modules/testing/examples/full.expected/test_in_shards_single_attempt.json
index ae5ea08..2cdd7ae 100644
--- a/recipe_modules/testing/examples/full.expected/test_in_shards_single_attempt.json
+++ b/recipe_modules/testing/examples/full.expected/test_in_shards_single_attempt.json
@@ -1302,11 +1302,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard multiplied:fuchsia-0000.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard multiplied:fuchsia-0000.create tree of build artifacts",
@@ -1439,7 +1478,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"multiplied:fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"multiplied:fuchsia-0000\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-syslog\", \"syslog.txt\", \"-ssh\", \"private_key\", \"-config\", \"./qemu.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"-per-test-timeout\", \"1s\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"QEMU\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/test_with_shards_arm64_serial_failure.json b/recipe_modules/testing/examples/full.expected/test_with_shards_arm64_serial_failure.json
index 16561a8..94a01ed 100644
--- a/recipe_modules/testing/examples/full.expected/test_with_shards_arm64_serial_failure.json
+++ b/recipe_modules/testing/examples/full.expected/test_with_shards_arm64_serial_failure.json
@@ -1245,11 +1245,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -1382,7 +1463,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"Vim2\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:Khadas Vim2 Max-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Khadas Vim2 Max\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"FUCHSIA_DEVICE_TYPE\", \"value\": \"Khadas Vim2 Max\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/upload_test_coverage.json b/recipe_modules/testing/examples/full.expected/upload_test_coverage.json
index e0f4155..fef4119 100644
--- a/recipe_modules/testing/examples/full.expected/upload_test_coverage.json
+++ b/recipe_modules/testing/examples/full.expected/upload_test_coverage.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1364,7 +1402,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"-cpu\", \"8\", \"-memory\", \"8192\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:QEMU-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"arm64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"-cpu\", \"8\", \"-memory\", \"8192\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing/examples/full.expected/upload_to_catapult.json b/recipe_modules/testing/examples/full.expected/upload_to_catapult.json
index c036851..b9f53f7 100644
--- a/recipe_modules/testing/examples/full.expected/upload_to_catapult.json
+++ b/recipe_modules/testing/examples/full.expected/upload_to_catapult.json
@@ -1263,11 +1263,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Linux.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Linux.create tree of build artifacts",
@@ -1400,7 +1481,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"Linux\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:linux-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"gs://fuchsia-artifacts/8945511751514863184/images/images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"os\", \"value\": \"linux\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"Linux\", \"priority\": \"200\", \"service_account\": \"default_service_account\", \"tags\": [\"test_environment_name:linux-arm64\"], \"task_slices\": [{\"expiration_secs\": \"0\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"run\", \"-images\", \"images.json\", \"-timeout\", \"0s\", \"-serial-log\", \"serial.txt\", \"-syslog\", \"syslog.txt\", \"-repo\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/8945511751514863184/repository\", \"-blobs\", \"http://$GCS_PROXY_HOST/fuchsia-artifacts/blobs\", \"-config\", \"/etc/botanist/config.json\", \"./testrunner\", \"-archive\", \"out.tar\", \"tests.json\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"os\", \"value\": \"linux\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [{\"key\": \"BUILD_PRODUCT\", \"value\": \"//products/foo.gni\"}, {\"key\": \"FUCHSIA_TEST_OUTDIR\", \"value\": \"${ISOLATED_OUTDIR}\"}, {\"key\": \"BUILDBUCKET_ID\", \"value\": \"8945511751514863184\"}, {\"key\": \"LSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"BUILDBUCKET_BUCKET\", \"value\": \"ci\"}, {\"key\": \"BUILD_TARGET\", \"value\": \"arm64\"}, {\"key\": \"ASAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"UBSAN_SYMBOLIZER_PATH\", \"value\": \"llvm-symbolizer\"}, {\"key\": \"INPUT_COMMIT_PROJECT\", \"value\": \"fuchsia\"}, {\"key\": \"BUILDER_NAME\", \"value\": \"builder\"}, {\"key\": \"INPUT_COMMIT_REF\", \"value\": \"refs/heads/master\"}, {\"key\": \"INPUT_COMMIT_HOST\", \"value\": \"fuchsia.googlesource.com\"}, {\"key\": \"BUILD_BOARD\", \"value\": \"//boards/foo.gni\"}, {\"key\": \"BUILD_CREATE_TIME\", \"value\": \"1527292217\"}, {\"key\": \"BUILD_TYPE\", \"value\": \"build-type\"}], \"env_prefixes\": [], \"execution_timeout_secs\": \"0\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"0\", \"outputs\": [\"serial.txt\", \"syslog.txt\", \"out.tar\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipe_modules/testing_requests/api.py b/recipe_modules/testing_requests/api.py
index 5fdc958..8f319f0 100644
--- a/recipe_modules/testing_requests/api.py
+++ b/recipe_modules/testing_requests/api.py
@@ -29,7 +29,7 @@
 _PRIVATE_KEY_PATH = 'private_key'
 
 # The version of catalyst to use.
-CATALYST_CIPD_REVISION = "git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4"
+CATALYST_CIPD_REVISION = "git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc"
 
 
 class _TaskRequester(object):
@@ -106,7 +106,7 @@
         dimensions['serial'] = '1'
       dimensions.update(shard.dimensions)
 
-    image_manifest = '%s/%s' % (self._api.artifacts.image_url(), IMAGES_JSON)
+    image_manifest = IMAGES_JSON
 
     if shard.targets_fuchsia:
       # Construct the catalyst command.
@@ -133,8 +133,9 @@
 
       # In the emulator case, serial is redirected to stdio.
       if not is_emu_type:
-          botanist_cmd.extend(['-serial-log', self._api.testing_requests.SERIAL_LOG_NAME])
-          outputs.append(self._api.testing_requests.SERIAL_LOG_NAME)
+        botanist_cmd.extend(
+            ['-serial-log', self._api.testing_requests.SERIAL_LOG_NAME])
+        outputs.append(self._api.testing_requests.SERIAL_LOG_NAME)
 
       if pave:
         botanist_cmd.extend([
@@ -488,7 +489,7 @@
       ensure_file.add_package('infra/tools/luci-auth/${platform}', 'latest')
       cmd.extend(['./luci-auth', 'context', '--'])
 
-    image_manifest = '%s/%s' % (self.m.artifacts.image_url(), IMAGES_JSON)
+    image_manifest = IMAGES_JSON
 
     cmd.extend([
       './botanist',
@@ -580,7 +581,7 @@
       ensure_file.add_package('infra/tools/luci-auth/${platform}', 'latest')
       cmd.extend(['./luci-auth', 'context', '--'])
 
-    image_manifest = '%s/%s' % (self.m.artifacts.image_url(), IMAGES_JSON)
+    image_manifest = IMAGES_JSON
 
     # Download catalyst.
     ensure_file.add_package('fuchsia/infra/catalyst/${platform}',
@@ -722,6 +723,27 @@
           linkname=isolate_tree.root.join(relpath),
       )
 
+    # TODO(ihuh): Remove once paving from GCS is working.
+    if shard is None or shard.targets_fuchsia:
+      image_list = build_results.images.values()
+      # In the case of an emulated target, we restrict what we isolate to the
+      # bare essentials to avoid the needless downloading of several gigabytes
+      # of images on the other end.
+      is_emulated_target = (
+            (shard is None and legacy_qemu) or
+            (shard and self.m.emu.is_emulator_type(shard.device_type))
+      ) # yapf: disable
+      if is_emulated_target:
+        image_list = [
+          img for img in image_list
+          if img['name'] in ['qemu-kernel', 'zircon-a', 'storage-full']
+        ] # yapf: disable
+      image_manifest_path = isolate_tree.root.join(IMAGES_JSON)
+      self.m.file.write_json(
+          'write image manifest', image_manifest_path, image_list, indent=2)
+      for image in image_list:
+        register_link(image['path'])
+
     if shard:
       for test in shard.tests:
         if test.os in ['linux', 'mac']:
diff --git a/recipe_modules/testing_requests/examples/full.expected/aemu.json b/recipe_modules/testing_requests/examples/full.expected/aemu.json
index 07b790f..f542cc8 100644
--- a/recipe_modules/testing_requests/examples/full.expected/aemu.json
+++ b/recipe_modules/testing_requests/examples/full.expected/aemu.json
@@ -1251,11 +1251,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard NAME.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard NAME.create tree of build artifacts",
diff --git a/recipe_modules/testing_requests/examples/full.expected/deprecated_aemu.json b/recipe_modules/testing_requests/examples/full.expected/deprecated_aemu.json
index 37488f2..abb4a57 100644
--- a/recipe_modules/testing_requests/examples/full.expected/deprecated_aemu.json
+++ b/recipe_modules/testing_requests/examples/full.expected/deprecated_aemu.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
diff --git a/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_netboot.json b/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_netboot.json
index 2d8295e..3f44750 100644
--- a/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_netboot.json
+++ b/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_netboot.json
@@ -1211,11 +1211,91 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
diff --git a/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_pave.json b/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_pave.json
index 21f2d4a..49e8f45 100644
--- a/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_pave.json
+++ b/recipe_modules/testing_requests/examples/full.expected/deprecated_non_emu_pave.json
@@ -1211,11 +1211,91 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
diff --git a/recipe_modules/testing_requests/examples/full.expected/deprecated_qemu.json b/recipe_modules/testing_requests/examples/full.expected/deprecated_qemu.json
index 37488f2..abb4a57 100644
--- a/recipe_modules/testing_requests/examples/full.expected/deprecated_qemu.json
+++ b/recipe_modules/testing_requests/examples/full.expected/deprecated_qemu.json
@@ -1223,11 +1223,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
diff --git a/recipe_modules/testing_requests/examples/full.expected/not_emu_netboot.json b/recipe_modules/testing_requests/examples/full.expected/not_emu_netboot.json
index fe55a87..fe6cc32 100644
--- a/recipe_modules/testing_requests/examples/full.expected/not_emu_netboot.json
+++ b/recipe_modules/testing_requests/examples/full.expected/not_emu_netboot.json
@@ -1212,11 +1212,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard NAME.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard NAME.create tree of build artifacts",
diff --git a/recipe_modules/testing_requests/examples/full.expected/not_emu_pave.json b/recipe_modules/testing_requests/examples/full.expected/not_emu_pave.json
index fe55a87..fe6cc32 100644
--- a/recipe_modules/testing_requests/examples/full.expected/not_emu_pave.json
+++ b/recipe_modules/testing_requests/examples/full.expected/not_emu_pave.json
@@ -1212,11 +1212,92 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"build-archive.zip\", \n    \"type\": \"zip\", \n    \"name\": \"archive\"\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"symbol-archive.tgz\", \n    \"type\": \"tgz\", \n    \"name\": \"symbol-archive\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard NAME.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"build-archive.zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zip\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"symbol-archive.tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"tgz\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"symbol-archive\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/out/default/build-archive.zip\": [\"[CLEANUP]/isolate_tmp_1/build-archive.zip\"], \"[START_DIR]/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.esp.blk\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.sparse.blk\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_1/netboot.zbi\"], \"[START_DIR]/out/default/symbol-archive.tgz\": [\"[CLEANUP]/isolate_tmp_1/symbol-archive.tgz\"], \"[START_DIR]/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_1/zircon-r.zbi\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard NAME.create tree of build artifacts",
diff --git a/recipe_modules/testing_requests/examples/full.expected/qemu.json b/recipe_modules/testing_requests/examples/full.expected/qemu.json
index 021af6b..c13f864 100644
--- a/recipe_modules/testing_requests/examples/full.expected/qemu.json
+++ b/recipe_modules/testing_requests/examples/full.expected/qemu.json
@@ -1251,11 +1251,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_1/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard NAME.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
+      "{\"/path/to/dep\": [\"/path/to/dep\"], \"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/.ssh/pkey\": [\"[CLEANUP]/isolate_tmp_1/private_key\"], \"[START_DIR]/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_1/fuchsia.zbi\"], \"[START_DIR]/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_1/fvm.blk\"], \"[START_DIR]/out/default/linux_arm64/botanist\": [\"[CLEANUP]/isolate_tmp_1/botanist\"], \"[START_DIR]/out/default/linux_arm64/testrunner\": [\"[CLEANUP]/isolate_tmp_1/testrunner\"], \"[START_DIR]/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_1/bootserver_new\"], \"[START_DIR]/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_1/multiboot.bin\"], \"[START_DIR]/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_1/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard NAME.create tree of build artifacts",
diff --git a/recipes/fuchsia/build.expected/default.json b/recipes/fuchsia/build.expected/default.json
index 232ab8c..6429954 100644
--- a/recipes/fuchsia/build.expected/default.json
+++ b/recipes/fuchsia/build.expected/default.json
@@ -2407,11 +2407,82 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_3/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_3/fuchsia.esp.blk\"], \"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_3/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_3/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_3/fvm.sparse.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_3/multiboot.bin\"], \"[START_DIR]/fuchsia/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_3/netboot.zbi\"], \"[START_DIR]/fuchsia/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_3/zircon-r.zbi\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -2525,7 +2596,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_4/task_requests.json"
     ],
     "infra_step": true,
@@ -2558,7 +2629,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@              }, @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"path\": \".\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              }@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            ]@@@",
@@ -2585,7 +2656,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"--\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./catalyst\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-bootserver\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./bootserver_new\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-config\", @@@",
@@ -2595,7 +2666,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"debug\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"run\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-timeout\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"1800s\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-serial-log\", @@@",
diff --git a/recipes/fuchsia/build.expected/default_cq.json b/recipes/fuchsia/build.expected/default_cq.json
index 6857df8..699c777 100644
--- a/recipes/fuchsia/build.expected/default_cq.json
+++ b/recipes/fuchsia/build.expected/default_cq.json
@@ -2272,11 +2272,82 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_4/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.esp.blk\"], \"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.sparse.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_4/multiboot.bin\"], \"[START_DIR]/fuchsia/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_4/netboot.zbi\"], \"[START_DIR]/fuchsia/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_4/zircon-r.zbi\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -2390,7 +2461,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_5/task_requests.json"
     ],
     "infra_step": true,
@@ -2423,7 +2494,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@              }, @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"path\": \".\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              }@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            ]@@@",
@@ -2450,7 +2521,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"--\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./catalyst\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-bootserver\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./bootserver_new\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-config\", @@@",
@@ -2460,7 +2531,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"debug\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"run\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-timeout\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"1800s\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-serial-log\", @@@",
diff --git a/recipes/fuchsia/build.expected/non-numeric-parent-id.json b/recipes/fuchsia/build.expected/non-numeric-parent-id.json
index 8c068be..b916803 100644
--- a/recipes/fuchsia/build.expected/non-numeric-parent-id.json
+++ b/recipes/fuchsia/build.expected/non-numeric-parent-id.json
@@ -2371,11 +2371,82 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_3/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_3/fuchsia.esp.blk\"], \"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_3/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_3/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_3/fvm.sparse.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_3/multiboot.bin\"], \"[START_DIR]/fuchsia/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_3/netboot.zbi\"], \"[START_DIR]/fuchsia/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_3/zircon-r.zbi\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -2489,7 +2560,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/not-a-number/images/images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/not-a-number/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_4/task_requests.json"
     ],
     "infra_step": true,
@@ -2522,7 +2593,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@              }, @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"path\": \".\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              }@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            ]@@@",
@@ -2549,7 +2620,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"--\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./catalyst\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/not-a-number/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-bootserver\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./bootserver_new\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-config\", @@@",
@@ -2559,7 +2630,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"debug\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"run\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/not-a-number/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-timeout\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"1800s\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-serial-log\", @@@",
diff --git a/recipes/fuchsia/build.expected/not_test_in_shards.json b/recipes/fuchsia/build.expected/not_test_in_shards.json
index f5c2c54..c4d9d9e 100644
--- a/recipes/fuchsia/build.expected/not_test_in_shards.json
+++ b/recipes/fuchsia/build.expected/not_test_in_shards.json
@@ -2040,11 +2040,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_3/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_3/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_3/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_3/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_3/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_3/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_3/multiboot.bin\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_3/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -2141,7 +2179,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"output.fs\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \"qemu\", \n                \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\", \n                \"package_name\": \"fuchsia/third_party/qemu/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"kvm\"\n            }, \n            {\n              \"value\": \"Debian\", \n              \"key\": \"os\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"cpu\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"qemu\", \n            \"-type\", \n            \"qemu\", \n            \"-qemu-dir\", \n            \"./qemu/bin\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-arch\", \n            \"x64\", \n            \"-minfs\", \n            \"output.fs\", \n            \"-pci-addr\", \n            \"06.0\", \n            \"-use-kvm\", \n            \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"\n          ], \n          \"env\": [], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"all tests\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:QEMU-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"output.fs\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \"qemu\", \n                \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\", \n                \"package_name\": \"fuchsia/third_party/qemu/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"kvm\"\n            }, \n            {\n              \"value\": \"Debian\", \n              \"key\": \"os\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"cpu\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"qemu\", \n            \"-type\", \n            \"qemu\", \n            \"-qemu-dir\", \n            \"./qemu/bin\", \n            \"-images\", \n            \"images.json\", \n            \"-arch\", \n            \"x64\", \n            \"-minfs\", \n            \"output.fs\", \n            \"-pci-addr\", \n            \"06.0\", \n            \"-use-kvm\", \n            \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"\n          ], \n          \"env\": [], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"all tests\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:QEMU-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_4/task_requests.json"
     ],
     "infra_step": true,
@@ -2211,7 +2249,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"-qemu-dir\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./qemu/bin\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-arch\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"x64\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-minfs\", @@@",
diff --git a/recipes/fuchsia/build.expected/spec_remote_cq.json b/recipes/fuchsia/build.expected/spec_remote_cq.json
index 11bc7d4..0ce6caf 100644
--- a/recipes/fuchsia/build.expected/spec_remote_cq.json
+++ b/recipes/fuchsia/build.expected/spec_remote_cq.json
@@ -2294,11 +2294,82 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_4/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.esp.blk\"], \"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.sparse.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_4/multiboot.bin\"], \"[START_DIR]/fuchsia/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_4/netboot.zbi\"], \"[START_DIR]/fuchsia/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_4/zircon-r.zbi\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -2412,7 +2483,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_5/task_requests.json"
     ],
     "infra_step": true,
@@ -2445,7 +2516,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@              }, @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"path\": \".\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              }@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            ]@@@",
@@ -2472,7 +2543,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"--\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./catalyst\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-bootserver\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./bootserver_new\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-config\", @@@",
@@ -2482,7 +2553,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"debug\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"run\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-timeout\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"1800s\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-serial-log\", @@@",
diff --git a/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json b/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
index 93e2796..b219042 100644
--- a/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
+++ b/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
@@ -2294,11 +2294,82 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_4/images.json"
+    ],
+    "infra_step": true,
+    "name": "shard Vim2.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
+      "{\"/path/to/test\": [\"/path/to/test\"], \"[START_DIR]/fuchsia/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.esp.blk\"], \"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_4/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_4/fvm.sparse.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_4/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_4/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_4/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_4/multiboot.bin\"], \"[START_DIR]/fuchsia/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_4/netboot.zbi\"], \"[START_DIR]/fuchsia/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_4/zircon-r.zbi\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_4/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "shard Vim2.create tree of build artifacts",
@@ -2412,7 +2483,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }, \n              {\n                \"path\": \".\", \n                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", \n                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./catalyst\", \n            \"-images\", \n            \"images.json\", \n            \"-bootserver\", \n            \"./bootserver_new\", \n            \"-config\", \n            \"/etc/catalyst/config.json\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-netboot\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_5/task_requests.json"
     ],
     "infra_step": true,
@@ -2445,7 +2516,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@              }, @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"path\": \".\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@                \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@                \"package_name\": \"fuchsia/infra/catalyst/${platform}\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              }@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            ]@@@",
@@ -2472,7 +2543,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"--\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./catalyst\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-bootserver\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"./bootserver_new\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-config\", @@@",
@@ -2482,7 +2553,7 @@
       "@@@STEP_LOG_LINE@task_requests.json@            \"debug\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"run\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-images\", @@@",
-      "@@@STEP_LOG_LINE@task_requests.json@            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            \"images.json\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-timeout\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"1800s\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@            \"-serial-log\", @@@",
diff --git a/recipes/fuchsia_perf.expected/device_tests.json b/recipes/fuchsia_perf.expected/device_tests.json
index a7c92df..85d3ff2 100644
--- a/recipes/fuchsia_perf.expected/device_tests.json
+++ b/recipes/fuchsia_perf.expected/device_tests.json
@@ -1851,11 +1851,81 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fvm.sparse.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-sparse\", \n    \"bootserver_pave\": [\n      \"--fvm\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fuchsia.esp.blk\", \n    \"type\": \"blk\", \n    \"name\": \"efi\", \n    \"bootserver_pave\": [\n      \"--efi\"\n    ]\n  }, \n  {\n    \"path\": \"zircon-r.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-r\", \n    \"bootserver_pave\": [\n      \"--zircon-r\"\n    ]\n  }, \n  {\n    \"path\": \"netboot.zbi\", \n    \"bootserver_netboot\": [\n      \"--boot\"\n    ], \n    \"type\": \"zbi\", \n    \"name\": \"netboot\"\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.sparse.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-sparse\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--fvm\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.esp.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"efi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--efi\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"zircon-r.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-r\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircon-r\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"netboot.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_netboot\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ], @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"netboot\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.esp.blk\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.esp.blk\"], \"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/fvm.sparse.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.sparse.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/fuchsia/out/default/netboot.zbi\": [\"[CLEANUP]/isolate_tmp_2/netboot.zbi\"], \"[START_DIR]/fuchsia/out/default/zircon-r.zbi\": [\"[CLEANUP]/isolate_tmp_2/zircon-r.zbi\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -2000,7 +2070,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:Intel NUC Kit NUC7i5DNHE-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:a4b37878529202f054930707c2f98c5ffe44e9f4\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"zedboot\", \"-config\", \"/etc/botanist/config.json\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \"-results-dir\", \"/tmp/infra-test-output\", \"-out\", \"out.tar\", \"-serial-log\", \"serial.txt\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Intel NUC Kit NUC7i5DNHE\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"out.tar\", \"serial.txt\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:Intel NUC Kit NUC7i5DNHE-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/infra/catalyst/${platform}\", \"path\": \".\", \"version\": \"git_revision:ce2f15d1cbb756b968b4fa79f557976fc196fcbc\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./catalyst\", \"-images\", \"images.json\", \"-bootserver\", \"./bootserver_new\", \"-config\", \"/etc/catalyst/config.json\", \"./botanist\", \"-level\", \"debug\", \"zedboot\", \"-config\", \"/etc/botanist/config.json\", \"-images\", \"images.json\", \"-results-dir\", \"/tmp/infra-test-output\", \"-out\", \"out.tar\", \"-serial-log\", \"serial.txt\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"pool\", \"value\": \"fuchsia.tests\"}, {\"key\": \"device_type\", \"value\": \"Intel NUC Kit NUC7i5DNHE\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"out.tar\", \"serial.txt\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipes/fuchsia_perf.expected/failed_run.json b/recipes/fuchsia_perf.expected/failed_run.json
index 487f139..f0ec490 100644
--- a/recipes/fuchsia_perf.expected/failed_run.json
+++ b/recipes/fuchsia_perf.expected/failed_run.json
@@ -1863,11 +1863,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -2015,7 +2053,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipes/fuchsia_perf.expected/missing_test_results.json b/recipes/fuchsia_perf.expected/missing_test_results.json
index 1d9a7de..2af43fd 100644
--- a/recipes/fuchsia_perf.expected/missing_test_results.json
+++ b/recipes/fuchsia_perf.expected/missing_test_results.json
@@ -1863,11 +1863,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -1996,7 +2034,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipes/fuchsia_perf.expected/successful_run.json b/recipes/fuchsia_perf.expected/successful_run.json
index 24757cb..afc8be8 100644
--- a/recipes/fuchsia_perf.expected/successful_run.json
+++ b/recipes/fuchsia_perf.expected/successful_run.json
@@ -1863,11 +1863,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -2011,7 +2049,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipes/fuchsia_perf.expected/with_patch.json b/recipes/fuchsia_perf.expected/with_patch.json
index b331178..42f8c31 100644
--- a/recipes/fuchsia_perf.expected/with_patch.json
+++ b/recipes/fuchsia_perf.expected/with_patch.json
@@ -1952,11 +1952,49 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "create tree of build artifacts"
@@ -2100,7 +2138,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
diff --git a/recipes/fuchsia_perfcompare.expected/successful_run.json b/recipes/fuchsia_perfcompare.expected/successful_run.json
index 9a9c374..2ab8344 100644
--- a/recipes/fuchsia_perfcompare.expected/successful_run.json
+++ b/recipes/fuchsia_perfcompare.expected/successful_run.json
@@ -1919,11 +1919,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_2/images.json"
+    ],
+    "infra_step": true,
+    "name": "build and launch tests for \"before\" revision.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_2/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_2/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_2/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_2/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_2/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_2/multiboot.bin\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_2/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "build and launch tests for \"before\" revision.create tree of build artifacts",
@@ -2053,7 +2092,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/before/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -2090,7 +2129,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/before/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -3712,11 +3751,50 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[\n  {\n    \"path\": \"multiboot.bin\", \n    \"type\": \"kernel\", \n    \"name\": \"qemu-kernel\"\n  }, \n  {\n    \"path\": \"fuchsia.zbi\", \n    \"type\": \"zbi\", \n    \"name\": \"zircon-a\", \n    \"bootserver_pave\": [\n      \"--boot\", \n      \"--zircona\"\n    ]\n  }, \n  {\n    \"path\": \"fvm.blk\", \n    \"type\": \"blk\", \n    \"name\": \"storage-full\"\n  }\n]",
+      "[CLEANUP]/isolate_tmp_5/images.json"
+    ],
+    "infra_step": true,
+    "name": "build and launch tests for \"after\" revision.write image manifest",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@images.json@[@@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"multiboot.bin\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"kernel\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"qemu-kernel\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fuchsia.zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"zbi\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"zircon-a\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"bootserver_pave\": [@@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--boot\", @@@",
+      "@@@STEP_LOG_LINE@images.json@      \"--zircona\"@@@",
+      "@@@STEP_LOG_LINE@images.json@    ]@@@",
+      "@@@STEP_LOG_LINE@images.json@  }, @@@",
+      "@@@STEP_LOG_LINE@images.json@  {@@@",
+      "@@@STEP_LOG_LINE@images.json@    \"path\": \"fvm.blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"type\": \"blk\", @@@",
+      "@@@STEP_LOG_LINE@images.json@    \"name\": \"storage-full\"@@@",
+      "@@@STEP_LOG_LINE@images.json@  }@@@",
+      "@@@STEP_LOG_LINE@images.json@]@@@",
+      "@@@STEP_LOG_END@images.json@@@"
+    ]
+  },
+  {
+    "cmd": [
       "python",
       "-u",
       "RECIPE_MODULE[recipe_engine::file]/resources/symlink.py",
       "--link-json",
-      "{\"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_5/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_5/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_5/testrunner\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_5/llvm-symbolizer\"]}"
+      "{\"[START_DIR]/fuchsia/out/default/fuchsia.zbi\": [\"[CLEANUP]/isolate_tmp_5/fuchsia.zbi\"], \"[START_DIR]/fuchsia/out/default/fvm.blk\": [\"[CLEANUP]/isolate_tmp_5/fvm.blk\"], \"[START_DIR]/fuchsia/out/default/linux_x64/bootserver_new\": [\"[CLEANUP]/isolate_tmp_5/bootserver_new\"], \"[START_DIR]/fuchsia/out/default/linux_x64/botanist\": [\"[CLEANUP]/isolate_tmp_5/botanist\"], \"[START_DIR]/fuchsia/out/default/linux_x64/testrunner\": [\"[CLEANUP]/isolate_tmp_5/testrunner\"], \"[START_DIR]/fuchsia/out/default/multiboot.bin\": [\"[CLEANUP]/isolate_tmp_5/multiboot.bin\"], \"[START_DIR]/fuchsia/prebuilt/third_party/llvm-symbolizer/linux_x64/llvm-symbolizer\": [\"[CLEANUP]/isolate_tmp_5/llvm-symbolizer\"]}"
     ],
     "infra_step": true,
     "name": "build and launch tests for \"after\" revision.create tree of build artifacts",
@@ -3776,7 +3854,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/after/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"
@@ -3813,7 +3891,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"gs://fuchsia-infra-artifacts/8945511751514863184/after/images/images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
+      "{\"requests\": [{\"name\": \"all tests\", \"priority\": \"200\", \"service_account\": \"service_account\", \"tags\": [\"test_environment_name:QEMU-x64\"], \"task_slices\": [{\"expiration_secs\": \"18000\", \"properties\": {\"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci-auth/${platform}\", \"path\": \".\", \"version\": \"latest\"}, {\"package_name\": \"fuchsia/third_party/qemu/${platform}\", \"path\": \"qemu\", \"version\": \"git_revision:533bf2563d0213a7e002d9fcde75519d30ffa70f\"}]}, \"command\": [\"./luci-auth\", \"context\", \"--\", \"./botanist\", \"-level\", \"debug\", \"qemu\", \"-type\", \"qemu\", \"-qemu-dir\", \"./qemu/bin\", \"-images\", \"images.json\", \"-arch\", \"x64\", \"-minfs\", \"output.fs\", \"-pci-addr\", \"06.0\", \"-use-kvm\", \"zircon.autorun.system=/boot/bin/sh+/boot/infra/runcmds\"], \"containment\": {\"containment_type\": \"NONE\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"kvm\", \"value\": \"1\"}, {\"key\": \"os\", \"value\": \"Debian\"}, {\"key\": \"cpu\", \"value\": \"x64\"}, {\"key\": \"pool\", \"value\": \"fuchsia.tests\"}], \"env\": [], \"env_prefixes\": [], \"execution_timeout_secs\": \"2400\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"inputs_ref\": {\"isolated\": \"[dummy hash]\", \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \"namespace\": \"default-gzip\"}, \"io_timeout_secs\": \"300\", \"outputs\": [\"output.fs\"]}}]}]}",
       "-json-output",
       "/path/to/tmp/json",
       "-cancel-extra-tasks"