Repository navigation
ci(cmux-next): build-fleet compiles take the gateway only while a runner is idle - #25360
Conversation
…ner is idle app-compile-fleet and swift-canary-fleet ran on vars.CI_COMPILE_CHECK_GATEWAY as is. At 06:00Z on 2026-10-26 glaeda-side-light-xcode-26.6 had 5 jobs running and 44 queued (oldest 58 min) with four minis reserved, and PR #24155's app compile queued there three times. Nothing moved them: the rescue re-runs onto the same variable label and the cascade never saw them. macos-placement now judges the gateway (side_lane_placement.gateway_route()): the label itself, then the same label on a wider class (the std side minis), while it has an idle runner for each gateway job beyond this run's own jobs. With none idle the gateway jobs skip, their Mac fallbacks run, and the PR's Release compile joins the cascade (GATEWAY_CASCADE), so it takes an idle owned mini first and a free Blacksmith slot next. gateway_placed keeps the variable route for an older base script and for a skipped placement. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-db24627e2a9fc2dffb63
|
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)
red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 5182c31 to compare; do not merge until green; see lane-rules |
|
Owned by an agent session · session |
|
Bead |
…acing jobs Review: a re-run reused attempt 1's idle reading (gateway_placed), and len(owned) reserved runners for skipped, GUI and fleet-replaced jobs. Placement now writes gateway_attempt; the gateway jobs run on a reading only from the same attempt, attempt 1 with no reading keeps the variable, and a re-run with none takes the Mac fallback. gateway_taken() counts the side jobs that run (CASCADE_RUNS) minus the Mac jobs a gateway job stands in for. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-db24627e2a9fc2dffb63
|
Found 7 test failures on Blacksmith runners: Failures
|
…er all jobs No job takes the build-fleet gateway on a reading nobody made: the gateway jobs run only on a gateway_runner from their own attempt, unreadable runners show none, and release-compile-fast (the push's fleet check) takes the same guard, so a push's release-compile runs at once when the gateway is full. BuildFleetGatewayJobsFallBack is table-driven over the workflow's jobs: any job whose runs-on names the gateway (the variable, a side-light label or gateway_runner) must be in its table, take the gateway only on an idle reading from the same attempt, and otherwise skip with its Mac fallback running in the cascade. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-db24627e2a9fc2dffb63
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
|
Python 3.12's @DataClass reads the module from sys.modules while it executes; the checks job errored in BuildFleetGatewayJobsFallBack.cascade_jobs(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-db24627e2a9fc2dffb63
|
|
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-db24627e2a9fc2dffb63
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-db24627e2a9fc2dffb63
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Problem
The build-fleet gateway jobs ran on
vars.CI_COMPILE_CHECK_GATEWAY(glaeda-side-light-xcode-26.6) unconditionally:cmux-next app compile (build fleet)cmux-next Swift canary (build fleet)cmux-next Release compile (fleet fast check)At 06:00Z on 2026-10-26 that label had 5 jobs running and 44 queued, the oldest for 3457 s. cmux17, 18, 21 and 24 were reserved, and austin-0's side runner was deleted. PR #24155's compile jobs 121392651085, 121406074285 and 121421789999 queued there and never ran; each newer push cancelled the last.
Nothing moved them:
next_macos_cascade.pyplaces only fast-tier, swift-canary, cmux-scheme-compile and release-compile.runs-on, which here was a fixed variable.Fix
macos-placementnow judges the gateway (side_lane_placement.gateway_route()) from the runners API it already reads. It takes:GATEWAY_JOBS), beyond those this run's own racing Mac jobs take (gateway_taken()). That count is the side jobs inCASCADE_RUNS, minus the Mac jobs a gateway job stands in for, plus a routed fast tier.compatible_labels(): the std side minis), on the same condition.A gateway job runs only on a
gateway_runnerthat placement wrote in the same run attempt (gateway_attempt). In every other case the job skips and its Mac fallback runs at once. That covers no idle runner, unreadable runners, a re-run that reuses an earlier attempt's placement, a skipped placement, and an older base script:CASCADE_RUNS(GATEWAY_CASCADE), so it takes an idle owned mini first and then a free Blacksmith slot.The bound is the placement time, about a minute: after that a gateway job either runs on a runner seen idle or its Mac fallback runs. The idle reading is a snapshot, so a concurrent run can still take that runner first. That is the one remaining way a gateway job can wait.
Guard test
tests/test_cmux_next_checks_workflow.py::BuildFleetGatewayJobsFallBackis table-driven over the workflow's jobs.runs-onnames the gateway (CI_COMPILE_CHECK_GATEWAY, aside-lightlabel orgateway_runner) must be in itsFALLBACKStable.runs-onis that runner.ifis true and the fallback is in the cascade (CASCADE_RUNSplusGATEWAY_CASCADE, andnext_macos_cascade.CASCADE_JOBS).runs-on: ${{ vars.CI_COMPILE_CHECK_GATEWAY }}, fails it.Risk
macos-placement, which does one runners read plus the cascade's read, in under 2 min.gateway_attempt, so its gateway jobs skip and the Mac fallbacks run.Tests
tests/test_ci_side_lane_placement.py::GatewayRoute:main()end to end, includinggateway_attempton attempt 2tests/test_cmux_next_checks_workflow.py: the guard test above, plus the app compile'sif/runs-onand the placement env (GATEWAY_JOBS,GATEWAY_CASCADE) across same-repo, fork, full-ci, push and no-native.blacksmith-2vcpu-ubuntu-2404fork-routing red. Head has 13 more passing tests.Agent session: cosmic-gray
🤖 Generated with Claude Code