Resuming a release run

Resuming a release run

Repeating stado release submit resumes the same release run. An initial platform submission keeps its original stable job identity and output URI. Before replacing a failed platform attempt, the coordinator reads the original job: queued, running, completed, and uploaded jobs keep that identity and their existing output. A publication or storage-read failure does not start another build. A failed job also keeps its identity when its durable build receipt says passed: the bootstrap's upload can fail after compilation and qualification succeed, while the native finalizer subsequently preserves the output. If canonical output is missing, resumption reads the retained receipt from the recorded builder through Stado. It verifies the receipt's run, job, product, version, platform, builder, source and manifest bindings, then asks that builder's installed Stado to upload its retained command log, archive and receipt to both the attempt and canonical output locations. The receipt is uploaded last; publication checks the storage write receipts, reads the canonical receipt back, and verifies the actual archive's SHA-256 before using it. A mismatch returns release job <JOB> returned a receipt that does not match this run: <FIELD> is "<RECEIPT>", not "<EXPECTED>"; …, naming every field that disagrees, an absent artifact with the archive's digest, and a status other than passed with the failure the receipt states. A missing archive returns release job omitted archive. Neither replaces a passed build. The original job keeps its recorded terminal state and cause; recovery does not rewrite that history.

The worker also checks for its own exact completed output before executing a replayed request. It reuses a passed receipt only when the immutable request, including its inputs and secret references, matches and the retained archive still has the recorded size and SHA-256. That replay returns the existing build instead of running the compiler again.

The stored platform request fixes its builder and input archives. Resumption checks that request against the release's source and manifest, preserves its exact bytes, and uses the already-staged inputs instead of fetching them again. An existing queue plan retains its recorded consumer and does not require a new live-builder selection. If no queue plan exists yet, the saved builder must still pass normal admission; another machine is not silently selected. An altered request returns immutable queue object differs: PATH without overwriting the saved request or creating a replacement build.

Source: this website