ci: report and routing steps take hosted Ubuntu first as declared light jobs
What
Five more report and routing steps join the light Linux exception, the same way #31785 moved ci.yml#changes and the fast-gates resolve/post. Each is declared in .github/runners.json hosted_light_jobs with its measured work time, and its one runs-on line becomes an exact allowlist line through scripts/ci/runner_routing_table.py's hosted-light policy (which tests/test_ci_self_hosted_guard.sh reads):
| job | was | attempt 1 | re-run |
|---|---|---|---|
pr-red-checks-comment.yml#comment (pr-red-checks / comment in ci.yml, cmux-next.yml, cmux-next-guards.yml) | vars.LINUX_RUNNER (4 vCPU) | hosted ubuntu-24.04 | bounded ephemeral LINUX_RUNNER mirror, then Blacksmith 8 vCPU (16 under the overflow switch) |
ci-guards.yml#guard-status (nightly-guards / Guard status, guards / Guard status) | RUNNER_POOLS.linux | hosted ubuntu-24.04 | RUNNER_POOLS.linux |
pr-checks.yml#size (PR size) | RUNNER_POOLS.linux | hosted ubuntu-24.04 | RUNNER_POOLS.linux |
pr-checks.yml#ui-review (UI review advisory) | RUNNER_POOLS.linux | hosted ubuntu-24.04 | RUNNER_POOLS.linux |
cmux-next.yml#path_route (cmux-next path routing) | Blacksmith 4 vCPU (16 under the overflow switch) | hosted ubuntu-24.04 | Blacksmith 8 vCPU (16 under the overflow switch) |
Why the re-runs differ, following #31785's reasoning:
commentholds apull-requests: writetoken, so it never goes to a persistent fleet label: hosted Ubuntu is ephemeral like Blacksmith, and its retry is the same bounded ephemeral routechangesuses.path_routeruns the checked-out revision's routing and probe scripts, so its retry stays on ephemeral Blacksmith too. The policy allows no 4 vCPU retry, so its re-run size is 8 vCPU (only on a re-run).guard-status,sizeandui-reviewreference no secret and hold only read tokens, so a re-run takes the reconciled pool, as fast-gatespostdoes.
None of them references a secret, an environment, signing or publishing. Fork pull requests keep their existing branches, except path_route, which never had a fork pull request branch: a fork pull request's attempt 1 now takes hosted Ubuntu there too (the fork's own code on an ephemeral GitHub VM, as fork-owned runs already do), follow-up #31897. cmux-fleet-linux-x64 has no runners today, so no live fleet Linux runner can take these before hosted.
Skipped: ci-web.yml#web-subarea-scope restores an actions/cache entry, which needs a check that the cache still hits off Blacksmith before it moves (left as #31785's follow-up).
Why
LINUX_RUNNER and RUNNER_POOLS.linux both resolve to blacksmith-4vcpu-ubuntu-2404, which at about 04:40Z on 2026-11-02 had 428 jobs queued against 535 running. These steps do seconds of work each but report a pull request's verdict, so they waited behind that queue.
Performance
Work and queue times from the jobs API (started_at - created_at for the queue), runs on 2026-11-02 05:24-05:33Z. Billed minutes are whole minutes per job; run counts are the 03:30-05:30Z pull_request runs Ć 12, so the minutes are upper bounds (some runs skip these jobs).
| metric | before | after | delta | harness or run link |
|---|---|---|---|---|
pr-red-checks / comment work / queue | 3-9 s / 1-61 s | same work / hosted start | up to -60 s per call | runs 41393817927, 41393826242, 41393801145, 41394534282 |
Guard status work / queue | 2 s / 1 s | same / hosted start | about 0 now | runs 41393826242, 41393801145 |
PR size work / queue | 4 s / 29-44 s | same / hosted start | about -35 s | runs 41394557472, 41394554327 |
UI review advisory work / queue | 4 s / 30 s | same / hosted start | about -30 s | run 41394554327 |
cmux-next path routing work / queue | 32-51 s / 1-27 s | same / hosted start | up to -27 s, and it gates every cmux-next tier | runs 41394344151, 41393817927 |
| Blacksmith 4 vCPU minutes/day for these jobs | up to about 30,000 (comment up to ~11,400 across 3 callers; PR size ~7,600 and UI review below that; Guard status ~3,400+; path routing ~3,100) | re-runs only | up to about -30,000 | Actions runs API counts: ci.yml 411, cmux-next.yml 257, cmux-next-guards.yml 287, pr-checks.yml 637 in 2 h |
Validation
Ran locally on Linux:
- passed:
tests/test_ci_self_hosted_guard.sh, and 31 test files that read these workflows or the runner tables (test_runner_routing_table,test_ci_runner_setwith a new case for these five jobs,test_ci_linux_single_sizewithpr-red-checks-comment.yml's single-size count lowered to 0,test_ci_blacksmith_linux_*,test_ci_fork_runner_routing,test_ci_runner_pool_reconcile,test_cmux_next_fast_gates,test_cmux_next_route,test_pr_red_checks_comment,test_ci_pr_size,test_ui_review_advisory,test_pr_checks_base_only,test_ci_quota_hold_gate, ...): 1193 passed. test_ci_warm_sources(nightly.yml jobs only) andtest_ci_workflow_run_sources::test_ci_failfast_keeps_failure_rollups_and_bounds_observed_tailsfail the same way on base.actionlint: nothing new on the changed lines.
Environments, secrets, permissions and runner trust are unchanged.
Agent session: agent session
š¤ Generated with Claude Code