ci: keep queued nightly controls on the fleet
NEXT nightly run 41269080663 queued its TUI resolver and recovery finder on Blacksmith 16 vCPU while no runner started. When their early placement is empty or stale, these two secret-free jobs now request the existing GCP JIT fleet pool. Valid current-attempt fleet Linux and owned-mini placements still take precedence. Other tracks and fork routing keep their existing behavior.
Leo: “FOR OUR NIGHTLIES ARE THEY END TO END ON OUR FLEET? WE CAN'T BE RELYING ON BLACKSMITH THAT CUTS OUT”.
This is the immediate two-job repair requested ahead of the larger admission change. It never treats missing placement as permission for paid work. The recorded 180-second no-start overflow mechanism remains in #30085. This change does not cancel or rerun an existing nightly; a newer source can build alongside it. No signing job, environment, credential, or permission changes.
Prior art: #29864 supplies early placement and #30042 preserves fleet placement when the routing API quota fails. Their empty-output fallback still selected Blacksmith; this fixes that last branch. #30085 is this lane's held admission implementation. #30081 and #30098 own signing and publication routing and are unchanged.
Validation: 65 routing, nightly policy and fork tests pass. Both new default-route assertions fail against base efbe4292 (Blacksmith 16 instead of fleet Linux). The shell guard's eight failing selectors are byte-for-byte identical to base; neither changed selector is flagged. These jobs do no compilation, so compilation caches are not involved.
Performance
| Metric | Before | After | Evidence |
|---|---|---|---|
| Blacksmith default for the two NEXT controls without placement | 2 jobs | 0 jobs | evaluated workflow expressions |
| Blacksmith minutes/day | not measured | not measured | live routing measurement follows deployment |
Changelog
none
Agent session: agent session
🤖 Generated with Claude Code
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Keeps the two nightly-next control jobs (resolve-nightly-cmux-tui-client and find-nightly-next-recovery) on the fleet when their early placement is empty or stale, instead of letting them fall through to Blacksmith.
- Changes the
runs-onexpression so an empty or stale placement plus thenightly-nexttrack resolves tocmux-fleet-linux-x64. - Valid current-attempt fleet and mini placements still take precedence; other tracks and fork routing keep their existing behavior.
- Adds tests covering run-attempt, placement, and track combinations, plus a fleet-linux fallback case for the two jobs.
HQ#5804 (GCP JIT startup installs gh) has merged. As a fail-safe for VMs made before it, both jobs now run scripts/ci/nightly-steps/ensure-gh.sh on Linux before their first gh call: it installs gh from apt, falls back to the cli.github.com apt repo, and fails the step with a clear error rather than letting the finder crash with FileNotFoundError.