ci(fast-checks): decide admission on one census read instead of polling 180 s
What happened
Every fast-checks run starts with the admit picker. On run 41718897738 (cmux#34036), the picker step "Select a live fleet runner or bounded overflow" ran for 182 s, from 21:10:04.9Z to 21:13:06.7Z. Its census reads all succeeded. It polled every 15 s for an idle fleet runner, found none, and took blacksmith-8vcpu-ubuntu-2404. That 180 s is a fixed cost whenever the fleet is busy or gone, on top of any hosted queue wait.
Change
The picker (scripts/ci/fast_checks_runner.py) now decides on one census read:
- An online Linux fleet runner, idle or busy: the checks go to
cmux-fleet-linux-x64. A checks job queued there starts as soon as a fleet runner frees. The lane-gh broker, which dispatches every fast-checks run, already moves a checks job that sits 180 s on the fleet label with no start to the Blacksmith overflow. So the fleet-first order and its about-3-minute bound still hold; the bound is just measured where the job actually waits, not by holdingadmit. - No online fleet runner (offline, or none registered): the smallest measured Blacksmith size, at once.
- Unreadable census: read once more after 15 s, then overflow. A spent quota overflows at once, as before (#33652).
Wiring
main's fast-checks.yml pins this helper by commit, and still pins ecc5d607 (#30648). A follow-up PR to main moves that pin to this change's merge commit; until then, runs keep the old picker.
Performance
| Metric | Before | After | Delta | Harness |
|---|---|---|---|---|
| Picker step, fleet busy or offline | 182 s (run 41718897738) | one census read, about 1 s (plus one 15 s retry only if the census is unreadable) | about -180 s | admit job log; tests/test_ci_fast_checks_runner.py |
Whole admit job | 3m27s (21:09:40Z to 21:13:07Z) | about 30 s (checkout and token mint) | about -3 min | admit job log; to be measured on the first run after the pin moves |
Testing
python3 tests/test_ci_fast_checks_runner.py: 21 pass. The newtest_one_census_read_decides_without_pollingandtest_an_unreadable_census_is_read_once_more_then_overflowsfail on the base.python3 tests/test_ci_pr_runner_pool.py: 262 pass.
Changelog
none
Agent session: agent session
🤖 Generated with Claude Code
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Cuts the fast-checks admission picker's fixed ~180 s wait when the fleet is busy or offline: it now decides on one census read instead of polling every 15 s for an idle fleet runner.
- An online Linux fleet runner, idle or busy, keeps the checks on the fleet label; the lane-gh broker already moves a fleet-labeled checks job that sits 180 s to the Blacksmith overflow, so the fleet-first stall bound still holds where the job waits.
- No online fleet runner falls back to the smallest measured Blacksmith size at once; an unreadable census is read once more after 15 s before overflowing, and a spent quota still overflows immediately.
Rollout
main's fast-checks.yml still pins the old helper commit (ecc5d607); a follow-up PR moves the pin to this change's merge commit, so runs keep the old picker until then.