Route light CI status jobs through portable placement

Merged
TE
2d ago
+332-33

Short CI status and resolver jobs waited 42–43 minutes behind hosted/paid overflow while owned minis were idle. These three affected workflows now ask portable placement for fleet Linux or a free owned mini before their existing overflow route. The bootstrap reads the trusted runner-state publication without minting a routing-App token or making a runner-list request; stale or missing state leaves the fallback intact.

Leo's request: “how's ci? we still have bigger wins we can get? what's the state of it all? more things we can skip/do better”.

The central runner table declares all affected portable jobs and the secretless bootstraps. It validates their read-only route and current-attempt outputs. Live Linux placement is bounded by its idle slots; nightly priority and queued work still reduce mini capacity. Optional placement failure cannot fail the web result rollup.

The placement bootstraps use hosted Ubuntu on attempt 1 and the reconciled Linux pool on retry; they never wait on a fixed owned label. Merge groups skip placement and retain the web status rollup. Set CI_PORTABLE_LIGHT_JOBS_OFF=1 to skip bootstrap scheduling and keep all six consumers on their previous fallback routes; consumers also fall back if placement fails.

Performance:

metricbeforeafterdeltaharness or run
Affected light jobs with owned-capacity placement before overflow0/66/6+6same YAML scan on merge base and head: PR size/UI/split, fast-gates resolve/post, web-validation status
Runner/API reads by a secretless fresh-state placement000test_runner_state_bootstrap_does_not_fall_through_to_github_api

The live queue p95 and idle-mini-minute acceptance window is tracked by the fleet queue work; this PR does not claim that routing declarations alone prove the two-hour queue outcome. No compile is added, so existing incremental/shared compile caches are unaffected.

Validation: 127 placement/routing/web-rollup/fork-routing tests, the runner routing policy check, and the self-hosted runner guard passed in fleet verification: https://github.com/manaflow-ai/cmux/actions/runs/41768629618. After updating the workflow-shape assertions, all 97 fast-gate and PR base-only tests passed at head 56a898a426dfbf2eb5f36287bb8cc781e762adb4: https://github.com/manaflow-ai/cmux/actions/runs/41772247878. The latter commit changes only those assertions; production code is identical to the first successful verification. The original CI merge also failed WorkflowShape.test_the_type_check_covers_every_webviews_test_file because bench/replayLogs.test.ts is outside the base tsconfig; the identical failure was reproduced on CI base 3c3b97d720831fbffe494301e493761fd9c43fde in https://github.com/manaflow-ai/cmux/actions/runs/41772333335. Actionlint and the prepush gate passed. Regression coverage includes skipped/failed placement, merge-group rollup, trusted checkout, and rejection of fixed bootstrap labels.

🤖 Generated with Codex

Agent session: agent session