6.3.18 Remote Execution Production Readiness

A staging build that finishes remotely proves one path through the system. It does not prove that the deployment can carry the production workload, remain correct under contention, expose a useful failure, or recover from change. Production readiness is therefore a decision backed by joined evidence, not a feature checklist and not a larger demonstration build.

Begin only after a candidate backend has passed the compatibility and capability checks in 6.3.3 Choosing a Remote Execution Backend. Then qualify the deployment against representative workload classes and explicit failure conditions. The result should say what may enter production, what must remain local, which degraded modes are allowed, and what change makes the decision invalid.

Readiness joins workload evidence into one bounded decision
A green showcase target cannot stand in for the workload, failure conditions, and deployment version that production will use.

Representative compile and link, test and generation, output consumer, and shared tenant cohorts pass through the same integration gates. Each gate joins portable Bazel and REAPI observations, backend-specific observations, and organizational limits. The result is a versioned qualification record containing claim, evidence, limit, and decision fields. It publishes explicit pass, restrict, reject, or degraded-mode decisions and expires when a material client, backend, topology, workload, or policy change invalidates the evidence.

REPRESENTATIVE WORKLOAD COHORTS
Compile and linkLanguages, toolchains, platforms, large inputs
Test and generateDuration, services, policy, cancellation
Consume outputsDownloads, downstream actions, archives
Share tenantsIdentity, quota, namespace, trust
The same deployment version must pass every applicable gate
Compatibility and placement
Trace and topology
State and storage
Scheduling and capacity
Worker and data boundaries
Failure and tenant behavior
Planned change, rollback, and recovery
Portable observationBazel and REAPI show client and service behavior.
Backend observationThe pinned implementation shows scheduling, workers, storage, and recovery.
Accepted limitThe organization names the workload boundary and tolerated degraded modes.
VERSIONED QUALIFICATION RECORD
Each gate keeps the complete argument together
ClaimRequired behavior
EvidenceJoined observations
LimitTested boundary
DecisionAllowed outcome
Publish: pass, restrict, reject, or permit a named degraded mode for each cohort.
Expire: requalify when a material client, backend, topology, workload, or policy change breaks an evidence join.
Readiness is one versioned integration argument. Separate green checks from different workloads or configurations do not add up to a production decision.

Turn readiness into a set of falsifiable claims

Write each qualification gate as a claim that an operator could disprove. “CAS enabled” is a feature statement. “Every required consumer can retrieve a declared output after the producing client exits, until the published retention boundary” is a claim with a subject, an observation, and a limit.

For every gate, retain four fields:

FieldQuestion it must answer
ClaimWhat behavior must hold for a named workload or failure condition?
EvidenceWhich portable client observation and which backend observation establish it?
LimitWhich platform, size, tenant, topology, retention period, or version bounds the result?
DecisionPass, reject, restrict, or permit a named degraded mode?

Keep three authorities separate in those fields. Bazel and REAPI define portable client/service behavior; the selected backend defines its scheduler, worker, storage, and recovery behavior; the organization decides which limits and risks it accepts. REAPI itself is a wire contract, not a production topology or an operational recipe.1 A Buildbarn deployment, for example, can provide concrete frontend, storage, scheduler, runner, and worker evidence, but those components are not universal REAPI roles.2

That separation prevents two common errors. A backend dashboard cannot turn an implementation-specific queue transition into a portable protocol guarantee. Conversely, a successful Execute response cannot establish that the backend's coordinator survives a restart or that its worker cleanup boundary prevents state leakage.

Qualify the workload, not the showcase target

Partition the intended production workload into classes that can fail differently. Include representative languages, action families, execution platforms and toolchains, input sizes, output shapes, durations, concurrency profiles, and trust levels. Add release-only generators, tests with unusual runtime needs, and large-output consumers even if they are rare. Remote systems enforce implementation-specific CPU, memory, I/O, and other limits, so one ordinary compile action cannot discover the useful boundary of the service.3

For each class, preserve a remote-only success path and a negative or boundary probe. Disable or otherwise exclude local fallback while collecting placement evidence; otherwise a green build may hide a remote failure. If a class is unsupported, record it as an explicit production restriction with an owner and a review condition. Do not silently omit it from the test corpus.

A compact coverage table makes gaps visible:

CohortRepresentative variationPositive proofBoundary proof
Compile and linklanguages, toolchains, platforms, large input closuresremote placement and correct consumable outputsincompatible platform and missing-input behavior
Test and generationduration, services, network policy, cancellationisolated execution with declared runtimetimeout, cancellation, residue, and prohibited authority
Output consumerslocal download, remote downstream action, CI/archive toolingrequired consumer obtains the outputexpiry, lost authorization, and partial-download behavior
Shared tenantsidentities, quotas, cache namespaces, trust levelsintended sharing and accountingcross-tenant read, write, queue, and worker-isolation probes

6.3.1 Making Actions Work Remotely defines the admission decision for each action class; this qualification uses that register as input. A production decision is not a reason to repair action declarations, toolchains, or host assumptions inside the readiness exercise.

Require a gate across every deployment boundary

The following gates form the minimum integration argument. Each points to the article that defines the mechanism and its deeper evidence:

  1. Compatibility and placement. Pin the Bazel client, backend, API and feature matrix; prove representative actions land only on compatible executors. Continue with 6.3.3 Choosing a Remote Execution Backend and 6.3.2 Remote Executor Matching.
  2. Trace and topology. Join client execution to backend queue, attempt, worker, storage, and terminal observations without pretending they share one universal identifier. Use 6.3.4 Remote Action Tracing and 6.3.5 Remote Execution Architecture.
  3. State and storage. Test loss and restart of coordination state, CAS and Action Cache reachability, retention, corruption handling, and the recovery promises the implementation actually makes. Use 6.3.6 Remote Execution State and Recovery and 6.3.7 Remote Execution Storage.
  4. Scheduling and capacity. Exercise matching, admission, quotas, backpressure, fairness, autoscaling lag, and headroom under a representative arrival and duration distribution. Use 6.3.8 Scheduling Actions on Remote Executors and 6.3.12 Remote Execution Capacity.
  5. Worker and data boundaries. Prove the versioned runtime, isolation, cleanup, input availability, output publication, and required consumer paths. Use 6.3.9 Remote Executor Environments and Isolation, 6.3.10 Remote Input Presentation, and 6.3.11 Remote Output Availability.
  6. Failure and tenant behavior. Test cancellation, retry, duplicate attempts, allowed fallback, identity, authorization, namespace, quota, and cross-tenant isolation. Use 6.3.13 Remote Action Failure Handling and 6.3.14 Multi-Tenant Remote Execution.
  7. Planned change. Canary a client, backend, scheduler, executor, or image change; prove drain, abort, rollback, evidence preservation, and cold-cache protection. Use 6.3.17 Remote Execution Upgrades.

Multi-region routing and action deduplication are additional gates only when the deployment promises those behaviors. In that case qualify them through 6.3.15 Multi-Region Remote Execution and 6.3.16 Action Deduplication and Racing rather than treating them as implicit benefits of a distributed service.

This list is deliberately a set of joins, not a retelling of the preceding articles. A gate passes only when evidence from the relevant mechanism is attached to the same versioned deployment and workload cohort. Nine individually credible documents about nine different configurations do not qualify one production system.

Exercise degraded operation, not only total failure

The difficult production states are often partial: one worker pool is unmatchable, storage is slow but reachable, an API server restarts, cancellation arrives after a duplicate attempt starts, or the client loses its stream while the backend continues execution. State the permitted result for each condition: fail closed, retry within a bound, fall back locally for named classes, serve a cached result, or reject new work while preserving existing operations.

Retain evidence that distinguishes those outcomes. A production incident in one remote-execution service remained invisible as build failure because GOMA fell back locally; autoscaling and logging regressions instead appeared as intermittent slowness for days.4 That is why a successful user-facing build and a healthy remote service are different claims.

The same incident record shows why qualification must include flow control, timeouts, guardrails, and failure attribution rather than only component availability. Missing proxy flow control exhausted API-server memory; a cyclic RPC dependency could deadlock workers; and a buggy build submitted 172,000 protocol-valid compile actions that saturated a pool, motivating build-scoped cancellation and per-build quota guardrails.4 These are implementation cases, not universal failure modes, but they demonstrate the class of evidence a production exercise must seek: behavior under pressure, bounded impact, and a diagnosable reason.

think

Decide: A representative CI build passes in staging with local fallback enabled. The backend reports 92% remote execution, but release linking and one integration-test family ran locally. Can the deployment pass production qualification for the whole repository?

Reveal

No. The result does not prove what happened when the remote path failed, and it leaves two production workload classes unqualified. Run those classes without fallback and join each attempt to placement and terminal evidence. If either class cannot meet the remote contract, publish it as an explicit local-only restriction and decide whether that degraded mode is acceptable; do not report the aggregate percentage as readiness.

Publish a decision that expires

The final artifact is a versioned qualification record, not “RBE approved.” It names the tested client and backend versions, deployment configuration, worker runtime identities, workload corpus, tenant model, evidence locations, known limits, allowed degraded modes, recovery expectations, and decision owner.

Also state invalidation conditions. Requalification is required when a change can alter an established claim: client/API compatibility, scheduler policy, storage layout or retention, executor image or isolation, identity and authorization, topology, material workload distribution, or the rollback and recovery mechanism. The scope may be targeted to affected gates, but the impact analysis must preserve their joins. For example, an executor-image change is not only an isolation probe when it also changes tool compatibility and cache acceptance.

Keep the operational record usable after launch. Dashboards and alerts should link from symptoms to the same cohort, pool, attempt, storage, and tenant evidence used during qualification. Publish the escalation route alongside the limits; production post-mortems show that unclear incident escalation can turn a technical regression into prolonged user impact even when the underlying fix is quick.4

key takeaway

A production-ready remote-execution deployment has a versioned integration argument for representative workload classes and failure conditions. Each gate states a falsifiable claim, joins portable client evidence to named backend-specific evidence, records its limit, and produces an explicit pass, restriction, rejection, or degraded-mode decision.

One green build, a high remote percentage, a capability list, or separate tests of individual components cannot establish readiness. Qualify compatibility, placement, state, storage, scheduling, capacity, workers, inputs, outputs, failures, tenancy, and planned change together; publish unsupported classes and invalidation conditions so that the decision remains operable after launch.

Check your understanding · 4 questions

1.Which record best supports a production-readiness decision for one workload cohort?

Select one answer

2.Match each readiness question to the authority that can answer it.

Drag each answer onto the matching prompt, or click an answer and then click a prompt

Answers
Which service behavior is portable across compliant implementations?
How does this deployment recover scheduler state after a restart?
Is local fallback acceptable for this release workload?

3.Which changes should trigger impact analysis and possibly targeted requalification?

Select all that apply

4.Classify these claims about workload coverage in a readiness decision.

Choose True or False for each sentence

One ordinary compile action can establish the service boundary for all production workloads.
Rare release generators and large-output consumers belong in the corpus when production depends on them.
An unsupported action class can be recorded as an explicit local-only restriction.
Separate successful tests from different deployment versions combine into one valid qualification.
0 of 4 answered

Footnotes

  1. Remote APIs — protocol contracts for caching and remote execution — portable service and message boundaries, and the distinction between wire semantics and implementation topology

  2. bb-deployments — runnable Buildbarn topologies — one concrete split among frontend, storage, scheduler, runner, worker, and monitoring components

  3. What to Remote Expect When You're Executing - George Gensure, Buildfarm — production implementations impose resource limits and real workloads vary in client behavior, determinism, environment, and contention

  4. Post Mortems for 4 Years of Remote Execution - Ulf Adams, EngFlow Inc. — evidence from flow-control, RPC-deadlock, hidden-fallback, autoscaling, observability, overload, guardrail, and escalation failures 1 2 3