ci: keep queued nightly controls on the fleet

Merged
TE
5d ago
+76-3

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

MetricBeforeAfterEvidence
Blacksmith default for the two NEXT controls without placement2 jobs0 jobsevaluated workflow expressions
Blacksmith minutes/daynot measurednot measuredlive routing measurement follows deployment

Changelog

none

Agent session: agent session
🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
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-on expression so an empty or stale placement plus the nightly-next track resolves to cmux-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.