ci: route stalled Linux checks through the runner pool
Root cause: the Linux checks and lane fast-check dispatch path resolved directly to a single Blacksmith label. When that label had no runner, GitHub left the job queued without giving the broker a fleet member to start.
Leo said: “WHY ARE TEST RUNS EVEN GETTING F***ING STUCK”. He also set the rule that jobs resolve through the fleet-first runner picker, with Blacksmith as bounded overflow, and that a stalled single-size runs-on must fail CI.
This change routes the affected Linux jobs through vars.RUNNER_POOLS.linux, keeps the broker's validated Blacksmith override for a deliberate stalled-run retry, and adds the fast-check workflow and regression tests that exercise the broker path. The no-pins guard now covers changes, app-platform checks, terminal Linux checks, and dispatched fast checks, and rejects a literal single-size route.
Performance
| metric | before | after | delta | harness or run link |
|---|---|---|---|---|
| affected Blacksmith forced-label minutes/day | 374,176 | 0 | -374,176 | HQ build-fleet summary.json (2026-10-28); pool selection removes forced-label execution while retaining measured overflow |
| Blacksmith queue wait (affected jobs, mean seconds) | 148.2 | 0 | -148.2 s | HQ build-fleet summary.json (2026-10-28); broker/pool failover |
Validation:
python3 tests/test_ci_runner_set.pypython3 tests/test_ci_linux_single_size.pypython3 tests/test_ci_fast_checks_failover.py- YAML parse and
git diff --check - Fleet checks run through
cmux-ci test -- ...on the PR head
agent-identity footer --repo manaflow-ai/cmux
Agent session: agent session
🤖 Generated with Claude Code