ci(web): web-subarea-scope reads the Linux pool, never LINUX_RUNNER alone

Merged
TE
5d ago
+14-2

web / web-subarea-scope gates every webview shard. It read vars.LINUX_RUNNER || 'blacksmith-4vcpu-ubuntu-2404', which is a single Blacksmith size. On 2026-11-01 LINUX_RUNNER stayed frozen on blacksmith-32vcpu-ubuntu-2404 while that size started nothing. Job 124762739841 (run 41275619982) sat unassigned from 05:36Z to 06:25Z, and every webview-routed PR waited behind it.

Leo: "if we gotta use stuff, we use it and we maximize the absolulte f*** out of every second", and on Blacksmith: "we clearly are not able to use them. so we should have resized a long-ass time ago."

Route, before: fork branches, then vars.LINUX_RUNNER (one size), then blacksmith-4vcpu-ubuntu-2404.
Route, after: fork branches unchanged, then fromJSON(vars.RUNNER_POOLS).linux, which runner_pools.py keeps on a live member. A frozen LINUX_RUNNER can no longer strand this job. #30277 makes the same one-line change for this job and five other ci-web jobs; the two merge cleanly with each other.

Owned-mini member, dropped from this PR. An earlier head passed the PR picker's owned side label into this job. tests/test_runner_routing_table.py (Validate every macOS job names its job class) then requires a job that can run on a mini to be class portable-checks. That class must read a portable-placement job's linux_runner/mini_runner, and scripts/ci/portable_job_placement.py can only find an idle mini with the routing App token. So it needs GLAEDA_ROUTE_APP_KEY/CMUX_BOT_APP_KEY passed from ci.yml into ci-web.yml, which is a change to where secrets reach, and it lands separately.

Performance

metricbeforeafterdeltasource
web-subarea-scope wait, stalled-size case49 min unassigned (job 124762739841)the pool's live memberabout -49 min when one size stallsrun 41275619982
Blacksmith minutes/day for this jobabout 1 min per CI run on 32 vCPUabout 1 min on the pool member (16 vCPU now)about half the vCPU-minutes; not measuredestimate from the 5-minute timeout
$/day32 vCPU minutes16 vCPU minutesdown; not measuredestimate

Changelog

none

Observed / Not run

  • Red/green: tests/test_ci_linux_single_size.py gains test_web_subarea_scope_reads_the_linux_pool, and the ci-web.yml count drops from 6 to 5. It passes at head and fails at base.
  • These pass at head: test_runner_routing_table (it failed at 1e59553e on the mini member), test_ci_owned_pool_sources and test_ci_linux_single_size. tests/test_ci_self_hosted_guard.sh shows the same failures as base. actionlint 1.7.7 reports nothing, and the prepush gate finds no new violations.
  • The other reds in the cmux-next CI guard group at 1e59553e are base reds that name nothing here: nightly.yml anchors, nightly.yml size, upload retention, fleet rule lints, the design-spec map, the Blacksmith Linux failover and check_no_self_hosted_fleet_runners.

risk: normal

Agent session: agent session

šŸ¤– Generated with Claude Code