ci(cmux-next): the fast Release admission stays red on a fleet failure and requests promotion itself
Leo, 2026-10-24: "why arent nightlies up yet". From the coordinator: "make the fast Release compile job fail, or show as a warning, when no compile ran. A 'no Release profile' result must never be green."
#24866 (merged at 07:46Z) landed the core of this PR: the fast check now has its own name, and release-compile-fast-admission carries cmux-next Release compile (Xcode 26) only on a fleet pass. This PR is now just the two gaps the independent Codex review found that #24866 leaves open.
1. A fleet failure leaves no gate at all
release-compile-fast-admission runs only on verdict == 'pass'. Two cases end up with no job carrying the gate name, where before #24866 there was a red one:
- a fleet compile error (
verdict=fail); - a fast check refused at "Set up runner" before it wrote a verdict, as glaeda did under the 30 GiB disk floor (jobs 120799474474 and 120799574773 on cmux11s).
Consumers that treat a missing or skipped compile as "not run" (merge_compile_guard.py NOT_RUN) then see nothing red.
Fix: the admission job runs whenever the fast check ran without handing off to the Mac fallback, with if: always() && !cancelled() && …. It is not cancelled or skipped, and its verdict is not unavailable. It is green only on verdict == pass && result == success, and otherwise exits 1 with an ::error. The unavailable case still goes to the Mac fallback, as before. #24822 (nightly-opus) adds the Mac fallback for the died-before-a-verdict case, and the two compose: a red admission next to a green fallback still admits, because consumers look for any green job with the gate name.
2. Promotion is requested before the gate exists
The fast check still runs request-nightly-next.sh from inside its own job. That means before release-compile-fast-admission has even started on Blacksmith, while main's promote job (admitted()) waits only 6 × 5 s for a green gate. request-nightly-next-fast also doesn't wait for the admission job.
Fix:
- The admission job checks out the pushed commit and requests promotion itself once green, the same way the Mac gate does ("Request nightly-next promotion after this gate"). A rerun of only the gate therefore requests too, which a skipped downstream helper never would.
request-nightly-next-fastnow needs the admission job.- The fast check drops its in-job request and
actions: write.
Tests
test_fast_gate_is_the_first_compile_path…: the admissionifacross six result/verdict pairs, and green only on pass.test_the_fast_admission_gate_requests_promotion_itselfreplaces the old checkout-before-request test, since the fast check no longer requests.python3 tests/test_cmux_next_checks_workflow.pygives the same two pre-existing failures as base (test_the_session_lane_label_comes_after_the_fork_clauseandtest_bot_attempt_three_drops_stale_owned_pool_placement).test_nightly_promotion_admission.py(73 cases),test_gh_merge_green.py,test_ci_linux_guard_routing.py,test_ci_owned_pool_sources.pyandtest_supplychain_security.pypass.
Other
- The fast check itself is cx3-s34-ota's (the controller still serves a client without
--release; #24812, hq#3744). This PR doesn't touch the compile step. - The Mac fallback refused for disk goes to the CI-mini hygiene reconciler: cmux11s-mac-mini (27.0–27.2 GiB free at 06:15–06:17Z, jobs 120799474474, 120799574773 and 120800155249) and one side mini at 18.6 GiB (job 120799008962).
Agent session: big-red
🤖 Generated with Claude Code