From 8db0228f4d38ff5d41b30038b6d227b01ea0fc8a Mon Sep 17 00:00:00 2001 From: can1357 Date: Thu, 30 Jul 2026 08:59:03 +0200 Subject: [PATCH] fix(ci): unblocked release run on formatting and chunk watchdog - Reformatted the logger burst test per biome (the type-check job gates on check:tools, which failed on the previous hotfix's formatting). - Raised the native/unit bucket's chunk watchdog to 1200 s: the mupdf PDF extraction chunk runs ~7 min per attempt on burstable runners under a full fan-out and the 600 s default SIGKILLed both tries in release run 30519992654; the watchdog targets wedged children, not slow chunks. --- .github/workflows/ci.yml | 6 ++++ packages/utils/test/logger-contract.test.ts | 34 +++++++++------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 84bc2e397..31b2878c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -380,6 +380,12 @@ jobs: - name: Test coding-agent native/unit bucket env: OMP_TEST_CONCURRENCY: "4" + # The mupdf/PDF-extraction chunk measures ~7 min on burstable + # runners under a full 8-wide fan-out; the default 600 s chunk + # watchdog SIGKILLed it (release run 30519992654). The watchdog + # exists to catch wedged children, not slow-but-progressing + # chunks — give this bucket a wider budget. + OMP_TEST_CHUNK_TIMEOUT: "1200" run: bun run ci:test:coding-agent:native test_smoke: diff --git a/packages/utils/test/logger-contract.test.ts b/packages/utils/test/logger-contract.test.ts index f6f0a7b93..f2afd144c 100644 --- a/packages/utils/test/logger-contract.test.ts +++ b/packages/utils/test/logger-contract.test.ts @@ -252,26 +252,22 @@ describe("central logger transport lifecycle", () => { // on an unloaded runner — bun's 5 s default test timeout SIGTERMed the // probe (exit 143) whenever CI runners shared cores. The contract is // order + drain, not latency; give it an explicit budget. - test( - "preserves burst order and drains on close and natural child exit", - async () => { - for (const scenario of ["burst-close", "burst-natural"] as const) { - const result = await runScenario(scenario); - expect(result.stdout).toBe(""); - expect(result.stderr).toBe(""); - const text = (await readSingleLog(result.primaryDir)).text; - expect(text.endsWith(os.EOL)).toBe(true); - const lines = text.split(os.EOL); - expect(lines.pop()).toBe(""); - expect(lines).toHaveLength(1_000); - for (const [index, line] of lines.entries()) { - const entry = JSON.parse(line) as { message: string; index: number }; - expect(entry).toMatchObject({ message: scenario, index }); - } + test("preserves burst order and drains on close and natural child exit", async () => { + for (const scenario of ["burst-close", "burst-natural"] as const) { + const result = await runScenario(scenario); + expect(result.stdout).toBe(""); + expect(result.stderr).toBe(""); + const text = (await readSingleLog(result.primaryDir)).text; + expect(text.endsWith(os.EOL)).toBe(true); + const lines = text.split(os.EOL); + expect(lines.pop()).toBe(""); + expect(lines).toHaveLength(1_000); + for (const [index, line] of lines.entries()) { + const entry = JSON.parse(line) as { message: string; index: number }; + expect(entry).toMatchObject({ message: scenario, index }); } - }, - 30_000, - ); + } + }, 30_000); test("runs local console output before sinks and isolates throwing or disposed sinks", async () => { const result = await runScenario("sink-order");