Remote Test Roadmap
Snapshot date: 2026-05-18. Author: C5 of the May 10-16 sprint plan, reconciled after the Codex RBE eligibility proof updates (2026-05-10-cache-forward-toward-rbe.md).
This is a framing document, not a broad-RBE implementation plan. It identifies the shortest credible path from the first proved remote-test classes to remote test-class proof per language without overstating where the substrate is.
Where we are today
- Thirty-five executor-backed target classes are recorded; twenty-six are
check/test/smoke-style classes. This roadmap details the twenty-six
check/test/smoke classes. The other nine manifest entries are build,
packaging, or public
input-handoff proofs and are tracked in
config/rbe-target-eligibility.json.//app:unit_testsis proved by GF REAPI Cell run25601913985withbazel_command=test,GF_RBE_PROOF_FORCE_EXECUTION=true,527 remoteprocesses, worker imagesha256:be2832171ac69cc9a2d012b3c789e8b765afb7cae0df8f7e9677dd6d8542dbc0, and Vitest evidence for 20 files / 168 passing tests. The public consumertinyland-inc/omux.xoxd.ai //:unit_testsclass is proved by run25742782051withbazel_command=test, forced execution, browser-capable worker imagesha256:a567696e341f6eb0589ece9efd6014a2133a4f10831bdad31e8dd84055eff8a0,1437 processes: 2 action cache hit, 551 remote cache hit, 882 internal, 4 remote, and a remotetest-setup.sh unit_tests_/unit_tests ...Vitest action through./vitest.config.ts. The public consumerJesssullivan/jesssullivan.github.io //:types_unit_testsclass is proved by run25892939448withbazel_command=test, forced execution, proof nonce20260515T001050Z-25892939448-1, the same browser-capable worker image,2331 processes: 1477 internal, 855 remote, remote lifecycle-hook execution foresbuild,sharp, andpuppeteer, and remotetest-setup.sh types_unit_tests_/types_unit_testsevidence. The pure-Go//examples/hello-go:hello_testclass is proved by run25634296833withbazel_command=test, forced execution, worker imagesha256:bb5455a038bdbff2560f22491c131c2163d3089ffafedee08f937d63f35fa848,20 processes: 9 internal, 11 remote, and a passing Go test action. The Rust//examples/hello-rust:hello_testclass is proved by run25648670844withbazel_command=test, forced execution, worker imagesha256:98b78964245baf5d5fbb0ab382c1106c3d4006a3a30918c0a1a8f5e0fad9f62a,175 processes: 170 internal, 5 remote, and one passing Rust test action. The C++//examples/hello-cc:hello_testclass is proved by run25648975728withbazel_command=test, forced execution, the same worker image,8 processes: 4 internal, 4 remote, remote gcc compile/link andtest-setupevidence, and one passing C++ test action. The cgo-backed//examples/hello-go-cgo:cgo_testclass is proved by run25649628233withbazel_command=test, forced execution, the same worker image,18 processes: 7 internal, 11 remote, remoteruntime/cgo,GoCompilePkg,GoLink, andtest-setupevidence, and one passing cgo test action. The browser/web//docs-site:playwright_chromium_smokeclass is proved by run25712694947withbazel_command=test, forced execution, browser-capable worker imagesha256:a567696e341f6eb0589ece9efd6014a2133a4f10831bdad31e8dd84055eff8a0,2549 processes: 1489 internal, 1060 remote, remotesveltekit_sync, remotevite_build, remotetest-setupevidence, and a passingplaywright-coresmoke with/bin/chromium. The public consumertinyland-inc/omux.xoxd.ai //:puppeteer_chromium_smokeclass is proved by run25826953857withbazel_command=test, forced execution, the same browser-capable worker image,3162 processes: 1 action cache hit, 1043 remote cache hit, 1982 internal, 137 remote, remotesveltekit_sync, remotevite_build, remotetest-setupevidence, and a passingpuppeteer-coresmoke with/bin/chromium. The public consumertinyland-inc/omux.xoxd.ai //:playwright_chromium_smokeclass is proved by run25897326537withbazel_command=test, forced execution, proof nonce20260515T024138Z-25897326537-1, public main commitd3608a5a6325adee0a5e625cf7ad76b470e7b83f, the same browser-capable worker image,3162 processes: 1 action cache hit, 1174 remote cache hit, 1982 internal, 6 remote, remote@tailwindcss/oxideandesbuildlifecycle hooks, remotesveltekit_sync, remotevite_build, remotetest-setup.sh playwright_chromium_smoke_/playwright_chromium_smoke, remotegenerate-xml.sh, and a passing Playwright Chromium static-output smoke. The public consumertinyland-inc/omux.xoxd.ai //:playwright_local_route_smokeclass is proved by run26005817853withbazel_command=test, forced execution, proof nonce20260517T232840Z-26005817853-1, GitHub App checkout authority, public main commitcd730bdc432b6eb2af4cac7032c040e4ab734da7, the same browser-capable worker image,3162 processes: 1167 remote cache hit, 1982 internal, 13 remote, remote@tailwindcss/oxideandesbuildlifecycle hooks, remotesveltekit_sync, remotevite_build, remotetest-setup.sh playwright_local_route_smoke_/playwright_local_route_smoke, remotegenerate-xml.sh, and a passing Playwright route smoke for/agent-snippetover declared adapter-static output. The public consumertinyland-inc/omux.xoxd.ai //:puppeteer_local_route_smokeclass is proved by run26037732121withbazel_command=test, forced execution, proof nonce20260518T135044Z-26037732121-1, GitHub App checkout authority, public main commit50e0b796cbc44bc82de67891b1999e7e48cff473, the same browser-capable worker image,3162 processes: 2 action cache hit, 1170 remote cache hit, 1982 internal, 10 remote, remote@tailwindcss/oxideandesbuildlifecycle hooks, remotesveltekit_sync, remotevite_build, remotetest-setup.sh puppeteer_local_route_smoke_/puppeteer_local_route_smoke, remotegenerate-xml.sh, and a passing Puppeteer route smoke for/agent-snippetover declared adapter-static output. The public consumerJesssullivan/jesssullivan.github.io //:puppeteer_chromium_smokeclass is proved by run25777472760withbazel_command=test, forced execution, the same browser-capable worker image,2331 processes: 1477 internal, 855 remote, remote Puppeteer lifecycle-hook execution without browser download, remotetest-setupevidence, and a passing Chromium smoke. The public consumerJesssullivan/jesssullivan.github.io //:playwright_chromium_smokeclass is proved by run25894297074withbazel_command=test, forced execution, proof nonce20260515T005745Z-25894297074-1, the same worker image,2331 processes: 1477 internal, 855 remote, remote lifecycle-hook execution without browser download, remotetest-setup.sh playwright_chromium_smoke_/playwright_chromium_smoke, and a passing Playwright Chromium runtime smoke with/bin/chromium. The public consumerJesssullivan/jesssullivan.github.io //:sveltekit_vite_build_smokeclass is proved by run25779597385withbazel_command=test, forced execution, the same worker image,2331 processes: 1477 internal, 855 remote, remote npm package extraction and lifecycle-hook execution, remotetest-setupevidence, and a passing SvelteKit/Vite build smoke. The private consumerJesssullivan/MassageIthaca //:svelte_check_testclass is proved by run25938855554withbazel_command=test, forced execution, proof nonce20260515T200641Z-25938855554-1, repo-scoped deploy key checkout, the same browser-capable worker image,7662 processes: 3 action cache hit, 4343 internal, 3319 remote, remote lifecycle-hook execution foresbuild,sharp,@sparticuz/chromium,msw, and@vercel/speed-insights, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotetest-setup.sh svelte_check_test_/svelte_check_test, remotegenerate-xml.sh, and a passing SvelteKit/svelte-check action. The private consumerJesssullivan/MassageIthaca //:tsc_noemit_testclass is proved by run25948484331withbazel_command=test, forced execution, proof nonce20260516T005553Z-25948484331-1, repo-scoped deploy key checkout, the same browser-capable worker image,7662 processes: 4 action cache hit, 4343 internal, 3319 remote, remote lifecycle-hook execution foresbuild,sharp,@sparticuz/chromium,msw, and@vercel/speed-insights, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotetest-setup.sh tsc_noemit_test_/tsc_noemit_test, remotegenerate-xml.sh, and a passing TypeScript no-emit action in24.2s. The private consumerJesssullivan/MassageIthaca //:playwright_tmd_smokeclass is proved by run25953478878withbazel_command=test, forced execution, proof nonce20260516T050753Z-25953478878-1, repo-scoped deploy key checkout, consumer commit08555e16b9ee0504b1b23e6373b5b6bbfb799f5f, the same browser-capable worker image,7670 processes: 3 action cache hit, 4352 internal, 3318 remote, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotevite_build_bin_/vite_build_bin, remotetest-setup.sh playwright_tmd_smoke_/playwright_tmd_smoke, remotegenerate-xml.sh, and a passing Playwright TMD smoke in4.5s. The private consumertinyland-inc/tinyland.dev //:app_typecheckclass is proved by run25970619559withbazel_command=build, forced execution, proof nonce20260516T191944Z-25970619559-1, GitHub App checkout authority, the verified privatetummycrypt_tinyland_schemas:0.2.4distdir handoff, the same browser-capable worker image,5578 processes: 1 action cache hit, 2567 remote cache hit, 2955 internal, 56 remote, remote TypeScripttsc, remote Svelte build tool, remote Vite build tool, remoteapp_typecheck_tool, artifact verifier success, and Kubernetes restart evidence that stayed at0before and after the proof. The private consumertinyland-inc/tinyland.dev //:app_buildclass is proved by run25978934708withbazel_command=build, forced execution, proof nonce20260517T021820Z-25978934708-1, GitHub App checkout authority, the verified privatetummycrypt_tinyland_schemas:0.2.4distdir handoff, the same browser-capable worker image,6146 processes: 3125 remote cache hit, 2959 internal, 62 remote, remote TypeScript package fanout, remoteJsRunBinary app_build.log, artifact verifier success, and Kubernetes restart evidence that stayed at0before and after the proof. The private consumerJesssullivan/MassageIthaca //:sveltekit_node_buildclass is proved by run25983800544withbazel_command=build, forced execution, proof nonce20260517T064447Z-25983800544-1, repo-scoped deploy key checkout, consumer commite06a70d12417f04568092a62e225b6c6595c3b39, the same browser-capable worker image,7379 processes: 2 action cache hit, 4186 internal, 3193 remote, remote lifecycle-hook execution foresbuild,msw, andsharp, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotevite_build_bin_/vite_build_bin, artifact verifier success, and Kubernetes restart evidence that stayed at0before and after the proof. The private consumertinyland-inc/tinyland.dev //packages/tinyland-a11y-engine:typecheckclass is proved by run25984827370withbazel_command=build, forced execution, proof nonce20260517T073751Z-25984827370-1, GitHub App checkout authority,workspace_path=consumer-workspace, the verified privatetummycrypt_tinyland_schemas:0.2.4distdir handoff, the same browser-capable worker image,553 processes: 223 remote cache hit, 328 internal, 2 remote, remoteesbuildlifecycle-hook execution, remote TypeScripttscforpackages/tinyland-color-utils, artifact verifier success, and Kubernetes restart evidence that stayed at0before and after the proof. The private consumertinyland-inc/tinyland.dev //:playwright_local_route_smokeclass is proved by run25989829826withbazel_command=test, forced execution, proof nonce20260517T114200Z-25989829826-1, GitHub App checkout authority,workspace_path=consumer-workspace, the verified privatetummycrypt_tinyland_schemas:0.2.4distdir handoff, the same browser-capable worker image,6155 processes: 3139 remote cache hit, 2963 internal, 53 remote, remote TypeScripttsc, remote Vite build-tool execution, remotetest-setup.sh playwright_local_route_smoke_/playwright_local_route_smoke, remotegenerate-xml.sh, a loopback SvelteKit Node server inside the Bazel test action, and a passing local-route Playwright smoke using/bin/chromium. The private consumertinyland-inc/tinyland.dev //:puppeteer_local_route_smokeclass is proved by run26051698671withbazel_command=test, forced execution, proof nonce20260518T181314Z-26051698671-1, GitHub App checkout authority,workspace_path=consumer-workspace, the verified privatetummycrypt_tinyland_schemas:0.2.4distdir handoff, the same browser-capable worker image,6319 processes: 1 action cache hit, 3135 remote cache hit, 3052 internal, 132 remote, remote npm lifecycle-hook execution for@tailwindcss/oxide,sharp, andesbuild, remote TypeScripttsc, remote Svelte and Vite build-tool execution, remotetest-setup.sh puppeteer_local_route_smoke_/puppeteer_local_route_smoke, remotegenerate-xml.sh, a loopback SvelteKit Node server inside the Bazel test action, and a passing local-route Puppeteer smoke using/bin/chromium. The consumer WebKit static-smoke classJesssullivan/darkmap.phasi.space //:playwright_webkit_shell_smokeplus//:playwright_webkit_mobile_hud_smokeis proved by run27330688866(consumer dispatch27330681726for//:webkit_smoke_suitewithforce_execution=true) withbazel_command=test, forced execution, worker image digestsha256:9db80cc90cb6736430cdbfcf0a0773fd89073d897ec084b9b141ded1d58661af,1703 processes: 985 internal, 718 remote,@playwright/testpinned exactly to1.59.1, the pinned worker WebKit launched through thegf-webkit-launchershim fromGF_RBE_WEBKIT_EXECUTABLE, and both smoke targets passing in4.5sand14.1s. - The proof is target-class scoped. It proves the in-repo SvelteKit Vitest
class, one public omux Vite/SvelteKit Vitest class, one public ghio
SvelteKit/Vite/Vitest class, plus one pure-Go rules_go unit-test class, one
rules_rust unit-test class, one cc_test class,
one cgo-backed rules_go unit-test class, and one
Chromium static-site Playwright smoke class, one public consumer Chromium
Playwright static-output smoke class, one public consumer Chromium Playwright
runtime smoke class, two public consumer Chromium static-output Puppeteer
smoke classes, one public consumer SvelteKit/Vite build-smoke class, one
private MassageIthaca booking-operation Vitest class, one private
MassageIthaca SvelteKit/svelte-check class, and one private MassageIthaca
TypeScript no-emit class, and one private MassageIthaca Playwright TMD smoke
class, one private tinyland.dev root app typecheck class, one private
tinyland.dev root Vite/SvelteKit production-build class, and three private
tinyland.dev package Vitest/typecheck classes, one private tinyland.dev
local-server Playwright route-smoke class, one private tinyland.dev
local-server Puppeteer route-smoke class, one private MassageIthaca
SvelteKit/Vite production-build class, and one consumer darkmap WebKit
static-smoke class, not
all JavaScript tests, not all omux tests, not all private
tinyland.devpackage tests, not all MassageIthaca tests, not all Go or cgo-backed Go tests, not broader Rust or C++ tests, not deployed-environment browser E2E, not broad Puppeteer, not all tinyland.dev routes, and not broad/default RBE. The source of truth remainsconfig/rbe-target-eligibility.json. - The first high-impact web test class is proved.
//docs-site:playwright_chromium_smokeis the firstweb-playwright-chromium-static-smokeclass for Vite/SvelteKit-style projects. It serves static docs-site output inside the Bazel test action and usesplaywright-corewith Chromium from the worker image. Run25711894340proved the graph could remote-execute at scale (1059 remoteactions) but failed the final Chromium action on crashpad’s writable-home assumption. Run25712694947then passed after the harness created scratch-backedHOME,XDG_CONFIG_HOME, andXDG_CACHE_HOMEand fixed static route fallback for generated Vite/SvelteKit output. - The first public consumer Puppeteer class is proved.
tinyland-inc/omux.xoxd.ai //:puppeteer_chromium_smokeis the firstweb-puppeteer-chromium-static-smokeclass. It usespuppeteer-corewith explicitGF_RBE_CHROMIUM_EXECUTABLE=/bin/chromiumand the same pinned worker-image Chromium authority. Run25826953857proved that class after the consumer disabled Puppeteer lifecycle browser downloads; run25747017023remains the negative evidence for why npm lifecycle browser downloads do not count as RBE proof. - The first public consumer Playwright static-output class is proved.
tinyland-inc/omux.xoxd.ai //:playwright_chromium_smokeis the first omux Playwright Chromium static-output smoke class. Run25897326537proved that class with the same pinned worker-image Chromium authority, proof nonce20260515T024138Z-25897326537-1,6 remoteprocesses, remotesveltekit_sync, remotevite_build, remotetest-setup, remotegenerate-xml, and no action-time browser installation. It does not promote all omux Playwright tests, Vitest browser mode, deployed E2E, or broad/default web RBE. - The first public omux local-server Playwright route-smoke class is proved.
tinyland-inc/omux.xoxd.ai //:playwright_local_route_smokeserves declared adapter-static output inside the Bazel test action and verifies/agent-snippetwith the same pinned worker-image Chromium authority. Run26005817853proved that class with GitHub App checkout, proof nonce20260517T232840Z-26005817853-1,13 remoteprocesses, remote@tailwindcss/oxideandesbuildlifecycle hooks, remotesveltekit_sync, remotevite_build, remotetest-setup, remotegenerate-xml, and no action-time browser installation. It does not promote all omux routes, deployed E2E, or broad Playwright. - The first public omux local-server Puppeteer route-smoke class is proved.
tinyland-inc/omux.xoxd.ai //:puppeteer_local_route_smokeserves declared adapter-static output inside the Bazel test action and verifies/agent-snippetwithpuppeteer-coreand the same pinned worker-image Chromium authority. Run26037732121proved that class with GitHub App checkout, proof nonce20260518T135044Z-26037732121-1,10 remoteprocesses, remote@tailwindcss/oxideandesbuildlifecycle hooks, remotesveltekit_sync, remotevite_build, remotetest-setup, remotegenerate-xml, and no action-time browser installation. It does not promote all omux routes, deployed E2E, or broad Puppeteer. - Additional public ghio browser/build-smoke classes are proved.
Jesssullivan/jesssullivan.github.io //:puppeteer_chromium_smoke,//:playwright_chromium_smoke, and//:sveltekit_vite_build_smokepassed runs25777472760,25894297074, and25779597385with855 remoteprocesses each. These are useful consumer-lane proofs, but they still do not promote repo-wide Playwright/Puppeteer, hosted E2E, publication, or broad/default web RBE. - Multi-language test coverage has a Stage 1 foothold. Per
Toolchain Coverage, rust/c++/go now have
Bazel-hermetic BCR binary examples plus one trivial test target each:
//examples/hello-rust:hello_test,//examples/hello-cc:hello_test,//examples/hello-go:hello_test, and//examples/hello-go-cgo:cgo_test. Zig and Chapel remain backlog. - The Go proofs now split pure-Go from cgo-backed Go. PR #605 fixed the
gf-reapi-cell output inlining bug found by run
25631848864. The retry, run25632300253, progressed to real remote rules_go actions and exposed the separateruntime/cgo/cc: no such file or directoryworker/toolchain gap. Run25634296833proved thepure = "on"target. After the worker image carried the C/C++ closure, run25649628233proved//examples/hello-go-cgo:cgo_testwith remoteruntime/cgoandGoLinkevidence. Broader cgo-backed Go remains unproved. - The C++ proof followed a worker toolchain-closure blocker. Run
25638930305forced the//examples/hello-cc:hello_testtest proof through the GF REAPI Cell and reached the remote C++ compile action, but the worker failed to execute/nix/store/zx71vq7s1v840wqsrw2m2ckmxn413a2b-gcc-wrapper-13.3.0/bin/gcc. Bazel reportedRemote Execution Failureand6 processes: 6 internal, so that is blocker evidence, not a C++ remote-test proof. After the worker image carried the C/C++ wrapper closure, run25648975728proved the trivial C++ unit-test class with4 remoteprocesses and one passing test. - The Rust proof followed two useful blocker runs. Run
25647399161forced//examples/hello-rust:hello_testthrough the GF REAPI Cell and reached the remote rules_rust compile action fortinyjson, but the rules_rustrustcbinary failed on the worker witherror while loading shared libraries: libz.so.1: cannot open shared object file. Bazel reported172 processes: 172 internal. After zlib was added to imagesha256:fb77cc74124c1b235981ecf85e71b8de3d14d7b0d7e316c1172c52698990453c, run25648006195recorded one successful remotetinyjsonRust compile action, then failed linkingprocess_wrapperbecause the selected Nixgcc-wrapperpath was not present in the worker. Bazel reported173 processes: 172 internal, 1 remote. Run25648670844then proved the trivial Rust unit-test class with5 remoteprocesses and one passing test.
The path
The remote-test story has three credible stages, in order. Skipping ahead introduces aspirational claims that the substrate can’t currently back.
Stage 0 — Toolchain hermeticity baseline
Rust, C++, and Go now have trivial Bazel-hermetic BCR binary targets. That makes cache-backed test proof meaningful for those languages. The Stage 1 test targets exist, but they do not promote those languages to remote execution.
Stage 1 — Cache-backed test proof per language
Per language with a hermetic toolchain, prove one trivial test target runs cache-backed on the shared runner contract:
- TypeScript:
//app:unit_testsand public consumertinyland-inc/omux.xoxd.ai //:unit_testsalready have cache-backed and remote-test proof. PrivateJesssullivan/MassageIthaca //:booking_operation_unit_testsnow has forced REAPI proof from run25928429263with3319 remoteprocesses. Privatetinyland.devpackage Vitest is past checkout and private codeload distdir staging: run25933145419reached//packages/tinyland-grafana:test, produced4 remoteprocesses and remotetest-setupevidence, then failed because the remote test environment madetests/grafana-config.test.tsthrowGRAFANA_SERVICE_ACCOUNT_TOKEN is not setunderkubernetessemantics. tinyland.dev PR #401 fixed that test-environment assumption, and run25935041748then proved//packages/tinyland-grafana:testfrommainwith the repo-scoped deploy key, verified codeload distdir inputtummycrypt_tinyland_schemas:0.2.4, proof nonce20260515T184435Z-25935041748-1,1531 processes: 468 remote cache hit, 1059 internal, 4 remote, remotetest-setup.sh packages/tinyland-grafana/test_/test, and a passing Vitest action. This is one private tinyland.dev package target class only. Run25981546207then proved//packages/tinyland-activitypub:testfrommainwith GitHub App checkout authority,workspace_path=consumer-workspace, verified codeload distdir inputtummycrypt_tinyland_schemas:0.2.4, proof nonce20260517T044208Z-25981546207-1,728 processes: 1 action cache hit, 299 remote cache hit, 415 internal, 14 remote, remotetest-setup.sh packages/tinyland-activitypub/test_/test, remotegenerate-xml.sh, and a passing Vitest action. This is a second private tinyland.dev package target class only, not broad tinyland.dev package-test RBE. Run25984827370separately proved//packages/tinyland-a11y-engine:typecheckfrommainwith GitHub App checkout authority,workspace_path=consumer-workspace, verified codeload distdir inputtummycrypt_tinyland_schemas:0.2.4, proof nonce20260517T073751Z-25984827370-1,553 processes: 223 remote cache hit, 328 internal, 2 remote, remoteesbuildlifecycle-hook execution, remote TypeScripttscforpackages/tinyland-color-utils, and successful completion of the package typecheck target. This is one private tinyland.dev package TypeScript typecheck target class only, not broad tinyland.dev package typecheck RBE. Run25989829826separately proved//:playwright_local_route_smokefrommainwith GitHub App checkout authority,workspace_path=consumer-workspace, verified codeload distdir inputtummycrypt_tinyland_schemas:0.2.4, proof nonce20260517T114200Z-25989829826-1,6155 processes: 3139 remote cache hit, 2963 internal, 53 remote, remote TypeScripttsc, remote Vite build-tool execution, remotetest-setup.sh playwright_local_route_smoke_/playwright_local_route_smoke, remotegenerate-xml.sh, and a passing local-route Playwright smoke over loopback-served SvelteKit output. This is one private tinyland.dev local-server Playwright route-smoke target class only, not broad Playwright, all tinyland.dev routes, or deployed E2E. Run26051698671separately proved//:puppeteer_local_route_smokefrommainwith GitHub App checkout authority,workspace_path=consumer-workspace, verified codeload distdir inputtummycrypt_tinyland_schemas:0.2.4, proof nonce20260518T181314Z-26051698671-1,6319 processes: 1 action cache hit, 3135 remote cache hit, 3052 internal, 132 remote, remote npm lifecycle-hook execution for@tailwindcss/oxide,sharp, andesbuild, remote TypeScripttsc, remote Svelte and Vite build-tool execution, remotetest-setup.sh puppeteer_local_route_smoke_/puppeteer_local_route_smoke, remotegenerate-xml.sh, and a passing local-route Puppeteer smoke over loopback-served SvelteKit output. This is one private tinyland.dev local-server Puppeteer route-smoke target class only, not broad Puppeteer, all tinyland.dev routes, or deployed E2E. PrivateJesssullivan/MassageIthaca //:svelte_check_testnow also has forced REAPI proof from run25938855554with repo-scoped deploy-key checkout, proof nonce20260515T200641Z-25938855554-1,3319 remoteprocesses, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotetest-setup.sh svelte_check_test_/svelte_check_test, remotegenerate-xml.sh, and a passing SvelteKit/svelte-check action. This is one private MassageIthaca typecheck target class only. PrivateJesssullivan/MassageIthaca //:tsc_noemit_testis now a separate forced REAPI proof from run25948484331with repo-scoped deploy-key checkout, proof nonce20260516T005553Z-25948484331-1,3319 remoteprocesses, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotetest-setup.sh tsc_noemit_test_/tsc_noemit_test, remotegenerate-xml.sh, and a passing TypeScript no-emit action in24.2s. This is one private MassageIthaca TypeScript no-emit target class only. PrivateJesssullivan/MassageIthaca //:playwright_tmd_smokeis now a separate forced REAPI proof from run25953478878with repo-scoped deploy-key checkout, consumer commit08555e16b9ee0504b1b23e6373b5b6bbfb799f5f, proof nonce20260516T050753Z-25953478878-1,3318 remoteprocesses, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotevite_build_bin_/vite_build_bin, remotetest-setup.sh playwright_tmd_smoke_/playwright_tmd_smoke, remotegenerate-xml.sh, and a passing Playwright TMD smoke action in4.5s. This is one private MassageIthaca browser-smoke target class only. Privatetinyland-inc/tinyland.dev //:app_typecheckis now a separate forced REAPI proof from run25970619559with GitHub App checkout authority, the verified privatetummycrypt_tinyland_schemas:0.2.4distdir handoff, proof nonce20260516T191944Z-25970619559-1,56 remoteprocesses, remote TypeScripttsc, remote Svelte build tool, remote Vite build tool, remoteapp_typecheck_tool, proof artifact verifier success, and Kubernetes restart evidence that stayed at0before and after the proof. This is one private tinyland.dev root app typecheck target class only; it does not prove all tinyland.dev builds, all tinyland.dev tests, browser E2E, the Vite production build class, durable private mirror/repository-cache authority, broad/default web RBE, or CAS/action-cache backend suitability. Privatetinyland-inc/tinyland.dev //:app_buildis now a separate forced REAPI proof from run25978934708with GitHub App checkout authority, the verified privatetummycrypt_tinyland_schemas:0.2.4distdir handoff, proof nonce20260517T021820Z-25978934708-1,62 remoteprocesses, remote TypeScript package fanout, remoteJsRunBinary app_build.log, proof artifact verifier success, and Kubernetes restart evidence that stayed at0before and after the proof. This is one private tinyland.dev root Vite/SvelteKit production-build target class only; it does not prove all tinyland.dev builds/tests, browser E2E, deployed app behavior, durable private mirror/repository-cache authority, broad/default web RBE, or CAS/action-cache backend suitability. PrivateJesssullivan/MassageIthaca //:sveltekit_node_buildis now a separate forced REAPI proof from run25983800544with repo-scoped deploy-key checkout, consumer commite06a70d12417f04568092a62e225b6c6595c3b39, proof nonce20260517T064447Z-25983800544-1,3193 remoteprocesses, remote lifecycle-hook execution foresbuild,msw, andsharp, remotesveltekit_sync_bin_/sveltekit_sync_bin, remotevite_build_bin_/vite_build_bin, proof artifact verifier success, and Kubernetes restart evidence that stayed at0before and after the proof. This is one private MassageIthaca SvelteKit/Vite production-build target class only; it does not prove all MassageIthaca builds/tests, deployed booking E2E, image publication, durable private mirror/repository-cache authority, broad/default web RBE, or CAS/action-cache backend suitability. - Browser/Web:
//docs-site:playwright_chromium_smokenow has a forced REAPI proof for one static Vite/SvelteKit Chromium Playwright smoke class, andtinyland-inc/omux.xoxd.ai //:puppeteer_chromium_smokehas a forced REAPI proof for one public consumer static-output Puppeteer smoke class.tinyland-inc/omux.xoxd.ai //:playwright_chromium_smokeadds a public consumer Playwright Chromium static-output proof.Jesssullivan/jesssullivan.github.io //:puppeteer_chromium_smokeadds a second public consumer Puppeteer smoke proof,Jesssullivan/jesssullivan.github.io //:playwright_chromium_smokeadds a public consumer Playwright Chromium runtime-smoke proof, andJesssullivan/jesssullivan.github.io //:sveltekit_vite_build_smokeadds a public consumer SvelteKit/Vite build-smoke proof. PrivateJesssullivan/MassageIthaca //:playwright_tmd_smokeadds a private Playwright TMD smoke proof over built Vite/SvelteKit output. - Python: needs a trivial
py_testproof ontinyland-nix— there is no current Python test target in the repo. - Rust:
//examples/hello-rust:hello_test. - C++:
//examples/hello-cc:hello_test. - Go:
//examples/hello-go:hello_testand//examples/hello-go-cgo:cgo_test.
Stage 1 proof acceptance runs through scripts/bazel-cache-backed.sh test,
shows the shared-cache path working on the runner contract, and has no
--remote_executor involvement. Source Bazel Proof now exercises the four
rust/c++/go language test targets through that wrapper.
Stage 2 — Remote-test proof per language (one class at a time)
Only after Stage 1 lands per language is remote-test even on the table for that language. The Stage 2 unit is one target class per language — e.g. “rust_test on x86_64-linux,” not “all rust tests everywhere.”
Stage 2 proof acceptance:
- Wraps through
scripts/bazel-rbe-proof.sh(or its evolution) with explicit proof mode and forced execution. - Logs show test execution running on the REAPI worker, not on the runner.
- Worker provenance, action digest, and platform identity are all captured.
- Eligibility is reflected in
config/rbe-target-eligibility.json(Codex stream owns this).
Stage 3 — Backend decision and broader rollout
Stage 3 is not in scope for this roadmap. It belongs to the broad-RBE gate work (see Roadmap “Later” section). The narrow proof cell does not survive scaling to broad RBE without a backend decision covering CAS, action cache, retention, auth, and observability.
What gates each stage
| Stage | Per-language gate | Substrate gate |
|---|---|---|
| 0 (hermeticity) | Bazel-hermetic toolchain registered | Rust/c++/go binary wedges landed; zig/chapel backlog |
| 1 (cache test) | One trivial test target green on tinyland-nix |
Stage 0 done for that language; actual test target exists and Source Bazel Proof exercises it |
| 2 (remote test) | Forced REAPI proof through gf-reapi-cell, evidence captured | Stage 1 done for that language; gf-reapi-cell stable enough for repeated proof runs |
| 3 (broad RBE) | (out of scope here) | Backend decision, retention/auth/obs design |
What this roadmap explicitly does NOT do
- Promise zig or chapel remote test. They are backlog at the toolchain layer; remote test conversation is meaningless before that.
- Promise broad/default RBE for any test class.
//app:unit_tests, pure-Go//examples/hello-go:hello_test, Rust//examples/hello-rust:hello_test, and C++//examples/hello-cc:hello_test, and cgo-backed Go//examples/hello-go-cgo:cgo_testhave narrow forced proofs; default developer and CI posture remains cache-forward unless explicitly opted into the proved executor-backed path. - Generalize
//docs-site:playwright_chromium_smoke,tinyland-inc/omux.xoxd.ai //:puppeteer_chromium_smoke,tinyland-inc/omux.xoxd.ai //:playwright_chromium_smoke,tinyland-inc/omux.xoxd.ai //:playwright_local_route_smoke,tinyland-inc/omux.xoxd.ai //:puppeteer_local_route_smoke, or theJesssullivan/jesssullivan.github.iobrowser/build-smoke targets beyond their proofs. They are proved for one Chromium static-site Playwright smoke class, one public omux Chromium Playwright static-output smoke class, one public omux local-server Playwright route-smoke class, one public omux local-server Puppeteer route-smoke class, one Chromium Playwright runtime smoke class, two Chromium static-output Puppeteer smoke classes, and one SvelteKit/Vite build-smoke class only, not all Playwright, not all Puppeteer, not deployed-environment E2E, and not Firefox. WebKit is proved separately for one consumer static-smoke class only (Jesssullivan/darkmap.phasi.space, run27330688866); do not generalize it beyond that class either. Do not generalize the publictinyland-inc/omux.xoxd.ai //:unit_testsproof beyond one Vite/SvelteKit Vitest unit-test target class. - Replace the eligibility JSON. Codex stream owns
config/rbe-target-eligibility.json. This roadmap describes the path; the JSON describes what is actually proven.
Recommended current slice
- Keep Stage 1 cache-backed test proof for rust/c++/go and cgo-backed Go green in
Source Bazel Proof. - Keep the pure-Go, cgo-backed Go, Rust, and C++ proof promotions in
config/rbe-target-eligibility.jsonusing runs25634296833,25649628233,25648670844, and25648975728; keep broader cgo-backed Go and broader C++ unproved. - Move the next forced REAPI language proof to the next real toolchain gap rather than widening claims from these trivial targets.
- Keep
//docs-site:playwright_chromium_smoke,tinyland-inc/omux.xoxd.ai //:unit_tests,tinyland-inc/omux.xoxd.ai //:puppeteer_chromium_smoke,tinyland-inc/omux.xoxd.ai //:playwright_chromium_smoke,tinyland-inc/omux.xoxd.ai //:playwright_local_route_smoke,tinyland-inc/omux.xoxd.ai //:puppeteer_local_route_smoke, and the publicJesssullivan/jesssullivan.github.ioPlaywright/Puppeteer/build-smoke target classes green as the first web/browser RBE classes. Keep the privateJesssullivan/MassageIthaca //:booking_operation_unit_tests,//:svelte_check_test,//:tsc_noemit_test,//:playwright_tmd_smoke, and//:sveltekit_node_buildtarget classes green as separate private app proofs. Keep the private tinyland.dev//packages/tinyland-a11y-engine:typecheck,//:playwright_local_route_smoke, and//:puppeteer_local_route_smokeclasses green as the first private TypeScript/package and local-server browser slices. Then design the next browser or TypeScript slice deliberately: additional private package typechecks, private package Vitest, Vitest browser mode, broader Puppeteer, broader svelte-check/typecheck, or deployed E2E should each receive its own target-class proof rather than inheriting these proofs. - Keep the Browser Runtime Authority as the
gate for those browser slices: Chromium
138.0.7204.49from lockedpkgs.chromiumis the current worker-image authority, exposed throughGF_RBE_CHROMIUM_EXECUTABLE=/bin/chromium. Playwright/Puppeteer proofs must consume a pinned browser byexecutablePathand must not use npm lifecycle browser downloads. - Hold zig / chapel as backlog; revisit only after rust/cc/go are at Stage 1 stably.
Related
- Toolchain Coverage — hermeticity status table
- GF REAPI Cell — narrow proof cell
- Remote Execution Proof Contract
- Roadmap