revert(ci): keep the singleton bucket unchunked

CI evidence overturns the chunking half of this branch. Splitting the
singleton bucket into 8 chunks made the job run 11m27s and go red, where
the unchunked bucket passes in ~1m31s on a concurrent PR. The duration
matches the 600s chunk watchdog, i.e. a chunk wedged rather than merely
running slowly -- the "these suites co-locate in one process" comment was
describing a real coupling, so restore it and the original plan entry.

The failure-attribution change is kept and is independently justified:
this run is precisely the case where a bare "exit code 137" cannot
distinguish the watchdog from the OOM killer.
This commit is contained in:
Muhammad Mustaqeem
2026-08-13 23:42:37 +05:00
parent 6b78c4e112
commit 21a4d0b2fa
+3 -9
View File
@@ -65,14 +65,8 @@ const validModes: Record<Mode, true> = {
// separate `bun test` child process. A fresh process per chunk resets Bun's // separate `bun test` child process. A fresh process per chunk resets Bun's
// heap and reaps any dangling spawned children between groups, keeping peak RSS // heap and reaps any dangling spawned children between groups, keeping peak RSS
// under the CI runner's OOM ceiling (a single 170–370-file invocation gets // under the CI runner's OOM ceiling (a single 170–370-file invocation gets
// SIGKILLed at 137). Every bucket is chunked, including singleton/global-state: // SIGKILLed at 137). The singleton/global-state bucket is left whole: its suites
// that bucket is selected precisely because its suites mutate process-wide state // co-locate in one process to exercise process-wide state, so they must not split.
// (env vars, fake timers, Settings/agent-dir singletons), and it is sequencing,
// not co-location, that keeps them from colliding. `parallel: 1` already
// guarantees the sequencing, so splitting into separate processes strictly
// increases isolation. Left whole the bucket grew to 79 files and hit the very
// 137 that chunking exists to prevent; 10 is the width the 650-file native
// bucket already sustains on this runner.
// //
// The UI/TUI bucket uses a smaller chunk (5) than the others: its suites build up // The UI/TUI bucket uses a smaller chunk (5) than the others: its suites build up
// native ghostty-vt cells, and bun 1.3.14's GC aborts (SIGTRAP/SIGABRT, exit // native ghostty-vt cells, and bun 1.3.14's GC aborts (SIGTRAP/SIGABRT, exit
@@ -82,7 +76,7 @@ const validModes: Record<Mode, true> = {
// 10-file chunk aborts ~50% of runs while either 5-file half is 0/20; halving the // 10-file chunk aborts ~50% of runs while either 5-file half is 0/20; halving the
// chunk keeps each process under the threshold. // chunk keeps each process under the threshold.
const codingAgentBucketPlans: Record<CodingAgentBucket, { label: string; parallel: number; chunkSize?: number }> = { const codingAgentBucketPlans: Record<CodingAgentBucket, { label: string; parallel: number; chunkSize?: number }> = {
singleton: { label: "singleton/global-state bucket", parallel: 1, chunkSize: 10 }, singleton: { label: "singleton/global-state bucket", parallel: 1 },
ui: { label: "UI/TUI bucket", parallel: 1, chunkSize: 5 }, ui: { label: "UI/TUI bucket", parallel: 1, chunkSize: 5 },
runtime: { label: "runtime/session bucket", parallel: 1, chunkSize: 10 }, runtime: { label: "runtime/session bucket", parallel: 1, chunkSize: 10 },
native: { label: "native/tooling/browser/unit bucket", parallel: 1, chunkSize: 10 }, native: { label: "native/tooling/browser/unit bucket", parallel: 1, chunkSize: 10 },