ci(cmux-next): run the Mac Release fallback when the fast gate dies before a verdict
Unblocks cmux NEXT nightlies (Leo, 2026-10-24: "why arent nightlies up yet"). This builds on #24831 (the fast check no longer carries the gate name, and release-compile-fast-admission does).
Problem. The fast fleet check can be refused at "Set up runner" by glaeda-cmux-runner-hook (the side pool under its 30 GiB disk floor: cmux9s 19 GiB, cmux11s 29, cmux8s 21, cmux17 27โ32). Then it fails with no verdict. Since #24831, admission goes red under the gate name and the Mac Release fallback stays skipped (it runs only on a skipped fast check or verdict=unavailable). So a push whose code is fine has a red gate and can't be promoted. Before #24831 the same refusal skipped both jobs (runs 40069112418, 40069406866, 40069440543, 40069632489).
Fix.
release-compile(Mac fallback) also runs when the fast job's result isfailurewith an empty verdict.- That fallback is routed to
blacksmith-12vcpu-macos-26, the last-resort tier in the routing order, instead of the macos-placement mini, which is in the same full pool (attempt 2 of run 40069430211 was refused on cmux8s). Anunavailableverdict still uses the placement mini. Bothruns-onandCMUX_NEXT_RUNNERare changed. - The fast compile step is
continue-on-error. A fleet compile failure keeps the step red but the job green withverdict=fail, which admission turns red. The fast job fails only when it never reached a verdict. So the route never depends on whether GitHub passes a failed job's outputs downstream. release-compile-fast-admissionskips in exactly that case, so one job carries the gate name per push. That answers the earlier Codex review: push attribution (cmux_next_push_attribution.py) andnightly_next_feed_watch.pyread the first job with that name, and a red admission next to a green fallback would mislead them.
| fast check | admission | Mac fallback |
|---|---|---|
| pass | green | skipped |
verdict fail (compile error) | red | skipped |
verdict unavailable | skipped | placement mini |
| refused before a verdict | skipped | Blacksmith macOS |
| no verdict, job succeeded (step died before writing one) | skipped | placement mini |
| skipped | skipped | as before |
Tests.
test_a_fast_gate_that_died_before_a_verdict_falls_back_to_the_mac_compilecovers the fallback condition and both routes.test_exactly_one_job_carries_the_gate_name_for_each_fast_check_outcomefails if admission doesn't yield.- #24831's admission table now expects a skip for
("", failure). tests.test_cmux_next_checks_workflowon a sparse worktree has the same failure set as base (58 pre-existing errors from missing sparse paths).
Risk. Low, CI only. A refused fast check now costs one Blacksmith macOS Release compile instead of a red gate. The disk floor itself is a separate problem for the fleet owner.
๐ค Generated with Claude Code
Agent session: huge-blue