Repository navigation
ci(nightly-next): decide takes the owned nightly slot first, Blacksmith Linux only on the rescue's re-run - #29650
Merged
Conversation
…th Linux on the rescue's re-run Run 41234993713 (3017ef1) queued decide on blacksmith-32vcpu-ubuntu-2404, a literal with no fleet route. decide is the run's first job, so no picker can precede it: attempt 1 of a nightly-next push now asks for glaeda's nightly slot (vars.CI_NIGHTLY_NEXT_BUILD_RUNNER), and the owned-pool rescue already watching that attempt moves it to the Blacksmith Linux set. test_ci_nightly_off_blacksmith gains a ratchet: a nightly job whose only route is Blacksmith Linux fails unless it is in the listed debt, which may only shrink. On base it fails naming decide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64
The rescue that runs is main's copy (ci-owned-pool-rescue.yml checks out ref: main), which already judges every job_pool() job, glaeda-nightly-* included. This brings feat-cmux-next's copy in line so decide on the slot is judged here too (review finding at 5ef6c4a). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64
Collaborator
Author
|
Review (codex gpt-6.1-sol xhigh, router-review): SHIP at 9aa189a Follow-ups:
|
Collaborator
Author
|
Owned by an agent session · session |
Contributor
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Shipped in:
|
This was referenced Nov 1, 2026
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Leo, 2026-10-31: "FOR OUR NIGHTLIES ARE THEY END TO END ON OUR FLEET? WE CAN'T BE RELYING ON BLACKSMITH THAT CUTS OUT" and "i mean the linux things cant our minis just run them".
What was wrong
Nightly run 41234993713 (tip 3017ef1) queued
decideonblacksmith-32vcpu-ubuntu-2404. Its runs-on had only that label andvars.LINUX_RUNNERas a size switch, so there was no fleet route. Every other nightly job waits ondecide. #29130 and #29436 moved the other light nightly jobs onto portable placement, butdecidecan't use that: it is the run's first job, so no picker or placement job can run before it.test_light_nightly_jobs_stay_on_linux_while_the_overflow_switch_is_ononly checked that these jobs stay on Linux, so the literal pin passed.Change
decideruns-on: attempt 1 of a nightly-next push (CI_PR_POOL_OWNED == '1') now takesvars.CI_NIGHTLY_NEXT_BUILD_RUNNER. That is glaeda's nightly slot (glaeda-nightly-std-xcode-26.6), a runner on each mini that takes only nightly jobs, ahead of PR jobs.decideis a checkout, github-script and two stdlib Python helpers (nightly-publication-marker.py,nightly_build_inputs.py, both 3.9-clean). It holds no secret and does nothing Linux-specific.Fallback: the main-branch owned-pool rescue already watches attempt 1 of every nightly-next push (
nightly_target()), and itsjob_pool()matches the nightly slot throughLANE_LABEL. When no slot takesdecidewithinCI_OWNED_POOL_RESCUE_SECONDS(30 s here) and nothing in the run has started, it cancels and re-runs. Attempt 2 then takes Blacksmith Linux. That is the stall-aware failover. A started nightly is never cancelled (assess(reserved=True))..github/runners.json: addsnightly.yml#decideasportable-checks, with apicker_followupsaying why it reads the slot variable rather than a picker output.runner_routing_table.portable_order()accepts the nightly slot as the mini term for nightly jobs.Ratchet (the test that should have caught this):
test_no_new_nightly_job_rides_blacksmith_linux_alonefails any nightly.yml job whose runs-on reaches Blacksmith Linux with no fleet term (slot, side lane, or a picker/placement owned output), unless the job is inBLACKSMITH_LINUX_ONLY_DEBT. That list must shrink: it also fails on an entry that has gained a fleet route. On base it fails with['decide'].test_decide_takes_the_owned_nightly_slot_then_blacksmith_linux(in test_nightly_trusted_routing.py) evaluates the expression for each case.Rescue (
owned_pool_rescue.py):nightly_watched()now also judgesdecidewhen it waits on aglaeda-nightly-*slot. The copy that runs is main's (ci-owned-pool-rescue.yml checks outref: main), which already judges everyjob_pool()job. This keeps feat-cmux-next's copy in line, with a test.Review: router-review gpt-6.1-sol xhigh BLOCK at 5ef6c4a (the rescue predicate), fixed in 9aa189a, then SHIP at 9aa189a. Follow-up: watch side/dev labels too if
CI_NIGHTLY_NEXT_BUILD_RUNNERever names one; today it names the nightly slot.Not in this PR
The other 33 Blacksmith-Linux-only nightly jobs are in the debt list. Moving them needs a placement step ahead of each; the ones after
build-nightly-appcan reuse #29436's light placement. They are a follow-up, and the ratchet keeps the list from growing.Checks run
These test files pass directly: test_nightly_trusted_routing, test_ci_nightly_off_blacksmith, test_runner_routing_table, test_ci_macos_xcode_selection, test_ci_owned_pool_sources, test_ci_nightly_no_hosted_mac, test_ci_linux_single_size.
runner_routing_table.pyexits 0.test_ci_blacksmith_linux_failoverfails the same way on base.Performance
decideBlacksmith minutes per nightly-next pushAgent session: agent session
🤖 Generated with Claude Code