ci: keep fast checks fleet first on reroute
Fast checks currently wait on a fixed paid Linux runner. This workflow admits an online, idle fleet Linux runner first and uses measured Blacksmith Linux 8/16/32-vCPU overflow after a 180-second no-capacity window. It calls the reviewed runtime from #30648 at immutable commit ecc5d6074e78b81627a5ba840dcdf0690c4bfd4e; the main diff contains only workflow wiring, its light-job declaration, and four CI test files.
The hosted Ubuntu admission job uses the existing routing App with read-only runner permissions. Arbitrary check commands receive no routing token. Blacksmith sticky disks are conditional; portable cache paths use runner.temp. The cache and sanitizer steps start from the workspace root, so a fresh runner needs no pre-existing checkout directory. Display-command parsing ignores shell comments, preventing a commented --display from suppressing a failing command.
Leo's light-job exception (2026-11-01): “you can run it. you can also run it on linux github if these are light jobs or we can just run it on our fleet”. Hosted Ubuntu is used for the light admission job; release and signing jobs are outside this change.
Prior art: #29932, #29934, runtime #30648, and HQ's existing three-minute broker redispatch path. No new runner trust or credential permissions are introduced.
Observed / Not run
At 9f7014d8f099f388a576e35737edc133cb18817e, 85 focused failover, runner-set, runner-label-policy and SwiftPM artifact tests pass, as do the full tests/test_ci_self_hosted_guard.sh, YAML parsing and git diff --check. Regression coverage includes a fresh workspace and a commented display option. The hosted guard regression fails at 31006bea32bd866553689ea9f929ed0005f352ef and passes after the narrow exception: python3 tests/test_ci_fast_checks_failover.py FastChecksFailoverTests.test_main_hosted_guard_accepts_light_admission. Negative cases reject a copied exception, release environment, write permission and hosted macOS. The declaration is limited to fast-checks.yml:admit. Head 6944253ac607e6addd86724229651fe816cc66f4 adds only two lines asserting the runtime pin is a full SHA; that focused test passes on the final head. The pinned runtime has its own exact-head Astra SHIP and seven passing picker tests. After landing, the pool-activation lane will run its required 63-test validation through this workflow; its admission, actual runner and command receipt will be read back as runtime proof. No end-to-end success is claimed yet.
Independent review at the final head: https://github.com/manaflow-ai/cmux/pull/30529#issuecomment-6557092135. The reviewer reran 48 focused tests and the full self-hosted runner guard successfully. The narrow main-policy exception is merged and deployed.
Known follow-up: #30728 covers stale admission outputs during failed-job-only reruns. Runtime review follow-ups #30743, #30744 and #30745 are being repaired separately.
Performance
| Metric | Before | After | Measurement |
|---|---|---|---|
| Blacksmith minutes per day | Not measured | Not measured | Runtime census and workflow routing change; no completed day of traffic yet |
Existing warm checkout/package disks remain for Blacksmith. Fleet cache paths use runner-local temporary storage; this change does not claim warm-cache parity on ephemeral fleet workers.
Changelog
none
Agent session: agent session