ci: report and routing steps take hosted Ubuntu first as declared light jobs

Merged
TE
4d ago
+53-7

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):

jobwasattempt 1re-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.04bounded 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.linuxhosted ubuntu-24.04RUNNER_POOLS.linux
pr-checks.yml#size (PR size)RUNNER_POOLS.linuxhosted ubuntu-24.04RUNNER_POOLS.linux
pr-checks.yml#ui-review (UI review advisory)RUNNER_POOLS.linuxhosted ubuntu-24.04RUNNER_POOLS.linux
cmux-next.yml#path_route (cmux-next path routing)Blacksmith 4 vCPU (16 under the overflow switch)hosted ubuntu-24.04Blacksmith 8 vCPU (16 under the overflow switch)

Why the re-runs differ, following #31785's reasoning:

  • comment holds a pull-requests: write token, so it never goes to a persistent fleet label: hosted Ubuntu is ephemeral like Blacksmith, and its retry is the same bounded ephemeral route changes uses.
  • path_route runs 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, size and ui-review reference no secret and hold only read tokens, so a re-run takes the reconciled pool, as fast-gates post does.

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).

metricbeforeafterdeltaharness or run link
pr-red-checks / comment work / queue3-9 s / 1-61 ssame work / hosted startup to -60 s per callruns 41393817927, 41393826242, 41393801145, 41394534282
Guard status work / queue2 s / 1 ssame / hosted startabout 0 nowruns 41393826242, 41393801145
PR size work / queue4 s / 29-44 ssame / hosted startabout -35 sruns 41394557472, 41394554327
UI review advisory work / queue4 s / 30 ssame / hosted startabout -30 srun 41394554327
cmux-next path routing work / queue32-51 s / 1-27 ssame / hosted startup to -27 s, and it gates every cmux-next tierruns 41394344151, 41393817927
Blacksmith 4 vCPU minutes/day for these jobsup 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 onlyup to about -30,000Actions 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_set with a new case for these five jobs, test_ci_linux_single_size with pr-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) and test_ci_workflow_run_sources::test_ci_failfast_keeps_failure_rollups_and_bounds_observed_tails fail 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