Repository navigation
nightly: unread runners queue the app build on the owned pool, not Blacksmith macOS - #29401
Conversation
…acksmith macOS Run 41203691245 (the first nightly-next tip after a three-hour build red) picked blacksmith-6vcpu-macos-26 for build-nightly-app because its picker got a 403 rate limit on /actions/runners: "owned runners could not be read live, so no owned label is waited on". That Blacksmith label started nothing, while the nightly slot pool had nine minis. Fleet first (Blacksmith is capped, paid overflow since 2026-10-30): when the runners cannot be read, owned is the first watched owned label, a many-runner pool the rescue watches and moves. With no watched label, Blacksmith as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-cabecb079fe356666905
|
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)
|
|
Found 1 test failure on Blacksmith runners: Failure
|
|
Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at 3ff482c BLOCK at 3ff482c Visual verdict: no images; Leo tries the build
|
|
Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at 3ff482c BLOCK at 3ff482c Visual verdict: no images; Leo tries the build
|
…es, kill switch respected - nightly_build_runner.py offers the watched owned label on an unread pool only when the caller sets UNREAD_OWNED_FALLBACK=1; nightly.yml's build pick sets it only while vars.CI_PR_POOL_OWNED is on. The train picker and verify picks keep Blacksmith on an unread pool. - owned_pool_rescue.job_pool() (this branch's copy) recognizes the nightly slot label; main's copy, the one workflow_run runs, already does via LANE_LABEL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-cabecb079fe356666905
|
Review (codex, router-review): SHIP at c3f86c3 Reviewer: codex gpt-6-astra high, fast tier. Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward. SHIP at c3f86c3 Visual verdict: no images; Leo tries the build
Focused routing/rescue suites passed: 283 tests via |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo: "we just need the nightlies bro"
Problem
Run 41203691245 was the first nightly-next tip that included #29366, after about three hours with no tip build. Its
pick-nightly-build-runnergot a 403 rate limit on/actions/runners:build-nightly-appthen sat queued onblacksmith-6vcpu-macos-26and nothing started it. Meanwhile the nightly slot pool (glaeda-nightly-std-xcode-26.6, now on nine minis after HQ#5641) was ready to take it.Change
nightly_build_runner.py: when the runners cannot be read (the token's API budget is spent, or there is no routing token),ownedbecomes the first watched owned label fromOWNED_LABELS(unread_owned_route()). That is the nightly slot pool, a label many runners carry and the rescue watches and moves. With no watched owned label the pick still falls back to Blacksmith. Fleet first: Blacksmith is capped, paid overflow since 2026-10-30.Tests
tests/test_nightly_build_runner.py: the three tests that expected Blacksmith on an unread read now expect the owned pool, and a new test checks that with no watched label the pick still takes Blacksmith. All 36 pass. The related routing suites (cascade, sign runner, trusted routing, train) pass too.test_ci_signing_owned_mac's hook-list failure is the base red that #29332 fixes.Risk: low. It changes only the case where the picker could not read the runners.
Agent session: agent session
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Nightly app builds now queue on the owned slot pool when the runner picker can't read the runners, instead of a Blacksmith macOS label that may sit stalled.
Fixes run 41203691245, where a 403 rate limit on
/actions/runnersqueued the first tip build after a three-hour red onblacksmith-6vcpu-macos-26while the nightly pool had nine minis ready. When runners can't be read (API budget spent or no routing token) and the caller opts in, the picker uses the first watched owned label — a many-runner pool the rescue watches and moves. Only nightly.yml's build pick opts in, and only while theCI_PR_POOL_OWNEDkill switch is on; the train picker and verify picks still take Blacksmith on an unread pool. With no watched owned label the pick falls back to Blacksmith as before, and the owned-pool rescue now also recognizes the nightly slot label.Written for commit c3f86c3. Summary will update on new commits.