From 2c63e10d9a8042b4b6d0765ca7dc8a510c963440 Mon Sep 17 00:00:00 2001 From: Lex Date: Tue, 20 Oct 2026 15:55:43 +0700 Subject: [PATCH 1/3] fix(create-batch): preserve per-spec creation failures in --run JSON output (#483) --- src/commands/test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/commands/test.ts b/src/commands/test.ts index 8bf5ce5..fcb1ca9 100644 --- a/src/commands/test.ts +++ b/src/commands/test.ts @@ -4985,7 +4985,10 @@ async function runBatchRun( return { ...r, dashboardUrl: state.dashboardUrl }; }) : batchRunResults; - out.print({ results: enrichedResults }); + out.print({ + results: enrichedResults, + creation: { results: createResponse.results, summary: createResponse.summary }, + }); } else if (!opts.wait) { // Text mode, no --wait: statuses are non-terminal by design ('queued'), // so a pass/fail summary would misread a successful dispatch as From 4c5eb4c253800de7f4312c9581e40086be8d589c Mon Sep 17 00:00:00 2001 From: Lex Date: Tue, 20 Oct 2026 16:02:00 +0700 Subject: [PATCH 2/3] fix(cli): preserve non-zero exit code on stdout EPIPE (#489) --- src/lib/interrupt.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/interrupt.ts b/src/lib/interrupt.ts index 939a2fd..f291d32 100644 --- a/src/lib/interrupt.ts +++ b/src/lib/interrupt.ts @@ -165,7 +165,7 @@ export class ShutdownController { } class BrokenPipeInterruptError extends InterruptError { - override readonly exitCode = 0; + override readonly exitCode = (process.exitCode as number | undefined) ?? 0; constructor() { // Existing graceful-detach consumers read `.signal` to render their @@ -366,7 +366,7 @@ export function installBrokenPipeGuard(deps: BrokenPipeDeps = {}): void { shutdown.brokenPipe(); return; } - exit(0); + exit((process.exitCode as number | undefined) ?? 0); return; } throw error; From 8de9efaaf4e4d7a3cc2fbe809447104d0514066f Mon Sep 17 00:00:00 2001 From: Lex Date: Thu, 22 Oct 2026 16:55:54 +0700 Subject: [PATCH 3/3] chore: trigger CI entry check