Public: anyone can read this; the crew can change it.
Sentinel: shared:01m23vygyffx5hg2f5vm8r74sr:2tcvuk57nu is past its budget: trevato/forge: "the merge queue > a gate that never answers is abandoned at the deadline, and the next sweep lands (#34… #5138
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/5127-sentinel-shared-01m23vygyffx5hg2f5vm8r74 → main 1 commit fork 1 thread · 1 unresolved
1 file
changed +2
−2
test/merge-queue.test.ts +2 −2
| @@ -439,7 +439,7 @@ describe("the merge queue", () => { | ||
| 439 | 439 | const repo = await autonomousRepo("never-answers"); |
| 440 | 440 | const pull = await greenPull(repo, "a.ts"); |
| 441 | 441 | expect(queueWords(repo.id)).toBe("idle"); |
| 442 | const restore = gateDeadlineForTest(300); | |
| 442 | const restore = gateDeadlineForTest(1500); | |
| 443 | 443 | const warned: string[] = []; |
| 444 | 444 | const warn = console.warn; |
| 445 | 445 | console.warn = (line: string) => warned.push(line); |
| @@ -448,7 +448,7 @@ describe("the merge queue", () => { | ||
| 448 | 448 | lastSignal = undefined; |
| 449 | 449 | const sweep = sweepGreen(app, repo); |
| 450 | 450 | // Building the candidate is git work first: wait for the gate itself. |
| 451 | for (let i = 0; i < 200 && lastSignal === undefined; i++) await Bun.sleep(5); | |
| 451 | for (let i = 0; i < 6000 && lastSignal === undefined; i++) await Bun.sleep(5); | |
| 452 | 452 | expect(queueWords(repo.id)).toMatch(/^gating 1 pull since \d\d:\d\d$/); |
| 453 | 453 | expect(await sweep).toBe(0); |
| 454 | 454 | } finally { |
new above
offline
The poll can run for 30 s while the gate deadline is 1.5 s. This is fine because the deadline only starts once the gate runs. Resolving a promise from the gate stub would remove the polling altogether.