CI: move every job to the org self-hosted fleet — scry was the last holdout - #205
CI: move every job to the org self-hosted fleet — scry was the last holdout#205avrabe wants to merge 1 commit into
Conversation
…oldout
On 2026-09-02 a PR sat 85 minutes with 0 of 13 jobs started, surviving a
full cancel + re-run, while 5 runners in the pulseengine fleet sat IDLE.
The cause is not contention:
scry 19 of 19 jobs on GitHub-hosted `ubuntu-latest`
rivet/witness/meld heavy jobs already on
[self-hosted, linux, x64, light|rust-cpu]
org fleet 12 runners, ALL online, 7 busy / 5 idle
The org migrated to a Hetzner self-hosted fleet and scry never followed,
so it is the one repo fully exposed when hosted capacity does not
materialise. rivet even ships a job literally named "Traceability (hosted
fallback)", which is what engineering around this failure mode looks
like.
Mapping mirrors rivet's: `light` for checks that do no heavy Rust compile
(Format, WIT round-trip, AADL, claim-check, required-checks, rivet
validate/delta/traceability, Pages), `rust-cpu` for anything that builds
or proves (Clippy, Test, Bazel, cargo-deny, MC/DC, Rocq, Verus, publish,
release, MC/DC evidence).
JOB NAMES ARE UNCHANGED, so all 12 required contexts (scry#130) keep
reporting — `runs-on` does not affect a check's context name. Verified
with check-required-checks.py: 12 contexts, 13 jobs, PASS.
CORRECTED A COMMENT THIS CHANGE FALSIFIED. rocq-proofs.yml said "Stays on
ubuntu-latest: requires Nix + Bazel for the hermetic Rocq 9.0 toolchain".
The Nix and Bazel requirement is satisfied by the install STEPS in that
job, not by the runner image, so it was never a reason to stay hosted —
and leaving the comment would have been the same drift as the "carry no
verifies link by construction" line repaired in #198.
THE RISK IS RECORDED RATHER THAN DISCOVERED. `bazel-build` and `test`
install Nix via cachix/install-nix-action, because Bazel resolves
@rocq_toolchains through rules_nixpkgs and fails with "nix-build not
found in PATH" without it. That install has to work on self-hosted too.
ci.yml's header now says so, so a failure on a Nix step points at the
runner class rather than sending someone into the build. Rocq and Verus
are `continue-on-error`, making them the cheapest early signal.
Refs: FEAT-093
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc
|
Parked as draft — the diagnosis holds, the execution does not, and the urgency evaporated. What this PR got rightThe exposure is real and worth fixing eventually: scry is the only pulseengine repo still on GitHub-hosted What it got wrong5 jobs fail, and 4 of them fail on the same step:
That is exactly the risk this PR's own scry needs Nix because Bazel resolves And the urgency is goneThe stall that motivated this was transient — long, but transient. #204's re-run completed green with all 12 jobs after roughly nine hours, and rivet/meld have since completed successfully too. So this is no longer blocking the v3.3.0 release, which proceeds on the existing configuration. What would make it landableOne of:
I have not picked one because (2) is an infrastructure call and (1) needs a runner I can test against. Left as a draft with the evidence rather than closed, since the underlying exposure has not gone away — it just stopped being today's problem. |
📐 rivet artifact deltaPR: #205 Base SHA: Validationhead — `rivet validate` resultbase — `rivet validate` result (for comparison)Artifact stats
full stats — headDiff (base → head)AADL model — headPosted by the |
On 2026-09-02 a PR sat 85 minutes with 0 of 13 jobs started, surviving a full cancel + re-run, while 5 runners in the pulseengine fleet sat idle. This is not contention:
ubuntu-latest[self-hosted, linux, x64, light|rust-cpu]The org migrated to a Hetzner self-hosted fleet and scry never followed, so it is the one repo fully exposed when hosted capacity doesn't materialise. rivet even ships a job named "Traceability (hosted fallback)" — that is what engineering around this failure mode looks like.
Mapping (mirrors rivet's ci.yml)
light— no heavy Rust compile: Format · WIT round-trip · AADL (spar) · claim-check · Required-checks · Rivet validate / delta / traceability · Pagesrust-cpu— builds or proves: Clippy · Test · Bazel build · cargo-deny · MC/DC · Rocq · Verus · Publish · Release · MC/DC evidenceRequired contexts are unaffected
Job names are unchanged, and
runs-ondoes not affect a check's context name. Verified rather than assumed —check-required-checks.py --against-file: 12 contexts, 13 jobs, PASS.Corrected a comment this change falsified
rocq-proofs.ymlsaid:The Nix and Bazel requirement is satisfied by the install steps in that job, not by the runner image — so it was never a reason to stay hosted. Leaving it would have been the same drift as the "carry no verifies link by construction" line repaired in #198.
The risk, recorded rather than discovered
bazel-buildandtestinstall Nix viacachix/install-nix-action, because Bazel resolves@rocq_toolchainsthroughrules_nixpkgsand fails with"nix-build not found in PATH"without it. That install has to work on self-hosted too.ci.yml's header now says so, so a failure on a Nix step points at the runner class rather than sending someone into the build. Rocq and Verus arecontinue-on-error, making them the cheapest early signal.This PR is its own test: if the jobs start, the diagnosis was right.
Refs: FEAT-093
🤖 Generated with Claude Code
https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc