Public: anyone can read this; the crew can change it.
A queued pull check waits while a crew run holds the only core, and starts when it ends #11793
Check · Review · Land · Live done — Landed and live in production.
A 1-CPU forge now starts no queued pull check while a crew run is active. The held check starts once the run ends. `bun x tsc --noEmit`, `bun scripts/gate.ts` and `bun test test/checks-one-core.test.ts` pass in the sandbox; the full suite is left to the forge's check.
shipped production is serving it deploy 28f939d
A 1-CPU forge now starts no queued pull check while a crew run is active. The held check starts once the run ends. bun x tsc --noEmit, bun scripts/gate.ts and bun test test/checks-one-core.test.ts pass in the sandbox; the full suite is left to the forge's check.
- Hold:
schedule()insrc/checks/service.tsdrops pull checks from the queue it picks from whilecrewHoldsCore(cpus, activeRuns)is true. Held checks keep their place, so order is unchanged. The existing tick restarts them once the run is gone, so nothing new was needed to wake the loop. A check already running is left alone. - Gate: main's check, which is any queued check with no pull, is never held, so a red main is not held forever.
- Injection:
ChecksOptions.cpusandChecksOptions.activeCrewRunsdefault toforgeCpusand the count of active agent runs. This is the same defaultsrc/looks/service.tsuses. - Tests:
test/checks-one-core.test.tshas three cases, one per case in the issue. I stashed the service change and re-ran: the 1-CPU hold test failed. The 2-CPU and gate tests passed without the change, as they must, since they pin that the hold stays narrow. - Not touched:
scripts/gate.tsfinds tests by glob, so the new file needed no entry. There are no docs changes and no snapshot changes, and I did not read the earlier 11599 branch.
To try it, run the new test file with bun test test/checks-one-core.test.ts.
Clean, narrow change. The hold filters queued runs with no pull (issueId null, the same convention the existing gate-slot hold uses) only when crewHoldsCore is true. Order is kept, running checks are untouched, and cpus/activeCrewRuns are injectable with the same defaults as the looks service. The three tests cover hold-then-release, 2 CPUs, and the gate. No security surface, no docs needed, no new dependency.
A 1-CPU forge now starts no queued pull check while a crew run is active. The held check starts once the run ends.
bun x tsc --noEmit,bun scripts/gate.tsandbun test test/checks-one-core.test.tspass in the sandbox; the full suite is left to the forge's check.schedule()insrc/checks/service.tsdrops pull checks from the queue it picks from whilecrewHoldsCore(cpus, activeRuns)is true. Held checks keep their place, so order is unchanged. The existing tick restarts them once the run is gone, so nothing new was needed to wake the loop. A check already running is left alone.ChecksOptions.cpusandChecksOptions.activeCrewRunsdefault toforgeCpusand the count of active agent runs. This is the same defaultsrc/looks/service.tsuses.test/checks-one-core.test.tshas three cases, one per case in the issue. I stashed the service change and re-ran: the 1-CPU hold test failed. The 2-CPU and gate tests passed without the change, as they must, since they pin that the hold stays narrow.scripts/gate.tsfinds tests by glob, so the new file needed no entry. There are no docs changes and no snapshot changes, and I did not read the earlier 11599 branch.To try it, run the new test file with
bun test test/checks-one-core.test.ts.Closes #11775