Repository navigation
ci: attribute silent external-speech browser bundle failure in broad feedback #2334
Description
Out of scope
No skipped speech proof, relaxed audio/drain/unmount assertions, changed offline guards or raised deadlines. The maintainer's #2202 exception covers a different unavailable-Send observation and does not classify this failure. An isolated passing bundle is not a repair.
Observation
During #2172's broad import-graph preflight on head fe5faafda079a9dc9d182fe21dc703b9d8a2b514, base b9805a455ea8c62b238034f873859f21560006e3, Bun 1.4.3, the isolated external-speech worker successfully builds all packages. Phase receipts identify package child 3774650, exit 0 and both output completions at about 87.86 seconds. Local speech/application construction succeeds. The next browser-client bundle exits unsuccessfully with empty captured stdout and stderr, before Chrome launch.
The failure is Speech fixture client build failed at the nonzero branch (beforeAll, packages/ui-react/tests/external-speech-runtime.test.ts:70-72). The child wrapper reports one setup failure at about 87.66 seconds; the parent reports the isolated failure at about 88.41 seconds. This is neither a 180-second package-build hook timeout (#1600/#2279) nor the repaired initial-send/audio timeout (#2194). The original error omitted the bundle child’s PID, numeric exit and signal, so its cause is not established. Current diagnostic coverage has since been delivered, as reconciled below.
A bounded standalone control on the unchanged source runs the same browser entrypoint and Bun.build expression with the offline child preload. It exits 0, signal null, empty stdout/stderr. This only proves that the bundle can succeed in isolation. The complete broad run remains failed; its final totals are recorded below.
Scope and acceptance criteria
- Preserve the failing source/base/runtime identity and actual failed receipt.
- Capture bounded bundle PID, exit, signal, elapsed time and output-completion evidence without changing execution limits or assertions.
- Reproduce the failure in its isolated-worker/broad context, or establish a concrete external limit from contemporaneous evidence; do not infer resource pressure from an unrelated later process event.
- Select a correction only after causal attribution. Verify it with the relevant failing/restored control and the real offline audio/drain/unmount scenario.
- Keep passing controls separate from the failed broad result and complete normal candidate proof before treating this prerequisite as resolved.
Verification and contract impact
The owning fixture is packages/ui-react/tests/external-speech-runtime.test.ts; its bundle entry is packages/ui-react/tests/fixtures/external-speech-browser.ts. Use the existing isolated wrapper and broad feedback with bounded observations. No product or machine-contract change is selected. Supporting verification work discovered during #2172; reference #736's verification outcome without changing its scope.
2026-10-17: filed with needs: repro. The observed failed stage is established; the child termination cause remains unknown.
Bounded diagnostic results and resumption
The complete original candidate preflight finishes with 949 fast tests / 6,307 assertions passing, then broad feedback at 6,948 pass / 4 skip / 1 fail, 45,988 assertions across 523 files (4,260.19 seconds). All four skips are inverse empty test.if(!vecAvailable) placeholders; substantive vector cases ran and passed. Earlier unavailable-vector descriptions were incorrect. The sole failed group is this speech setup. The original #2202 desktop Subagent Deny case passes.
- Standalone unchanged-candidate browser bundle: exit 0, signal null, empty output. This control does not explain the original exit.
- Isolated checkout of the same
fe5faafdacandidate, with only bounded bundle PID/exit/signal/output observations: fails earlier at the existing 180-second package-build hook. Its final package label is ui-server at +172.27 seconds; no bundle diagnostic starts. This is the already tracked ci: two runtime test hooks time out under the full local suite #1600/ci: attribute repeated hosted runtime setup hook timeouts #2279 setup-timeout class, not a reproduction or explanation of the silent bundle exit. - Main-based diagnostic at
7cc86931e763f0eca636b89abd78b3b5371ec027, with the same observations and main's independently delivered narrower fixture builds: bundle PID 3986464 exits 0, signal null, both channels complete with zero bytes in about448ms. Both actual browser/audio cases pass (2 tests / 13 assertions), as does the isolated wrapper (1 / 1), in about113seconds. No timeout, guard or behavioral assertion changed. Main differs from the failing Storage candidate; this is a passing control, not a repaired or passing receipt for that candidate.
No matching crash/termination evidence establishes the original bundle child's cause; its PID/exit/signal were not captured. Later intentionally resource-limited test events do not establish an earlier bundle failure's cause. No production correction is selected.
Diagnostic requirement: run a bounded faithful broad-context reproduction with the prepared bundle observations, recording its actual source/runtime identity and child PID, numeric exit, signal and independent channel completions. If it recurs, correlate that exact PID/time with process/resource evidence before selecting a repair. If only successful controls occur, retain needs: repro rather than declaring resolution. The diagnostic patch and failed/passing logs are preserved with the reporting session. A correction for this failure still requires attribution and relevant failing/restored proof. #2172 has separately completed current-candidate qualification and delivery; that does not waive this investigation or classify the original failure.
2026-10-17 diagnostic handoff: original failure retained, bounded controls complete, cause unresolved. No child is left running by these attempts.
Storage continuation handoff — 2026-10-19
Storage #2172 is delivered as caae12da2e678dd4720bf112e93ef21812cfdc18, after complete local and fresh selected ready-PR qualification.
The original #2172 automatic main run 39302987919, attempt 1 remains failed: 15 jobs passed, unit (1) encountered the #2405 vanishing maintenance.lock fixture-copy failure, and aggregate proof failed. All 77 Storage browser/story cases passed there. Its actual checkout was caae12da2e678dd4720bf112e93ef21812cfdc18; no failed receipt was rerun or relabelled.
The separate test-fixture correction #2448 merged as cea53611ddea4916ac323060bfef42ec18118fea, parent caae12da2e678dd4720bf112e93ef21812cfdc18, tree 4a826e90467b5874be85ff71d04e9ede01577486. Its automatic main-push run 39312029459, attempt 1 passed all 17 selected jobs. Every actual checkout log and all 13 resource receipts agree on that squash identity; integrated-cadence aggregate passed with an empty retention ledger. All 77 Storage browser/story cases and all eight Git-policy regressions passed freshly on corrected main. The correction changes only the test preload, its regression tests and testing documentation; Storage product source is unchanged. Both squash commits are present on remote main.
This issue remains OPEN with needs: repro. The next useful evidence is a bounded faithful broad-context recurrence with bundle PID, numeric exit, signal and independent output completions, correlated to the same process/time before selecting a repair. Passing current-source speech cases do not identify the historical silent failure.
Claim storage-recheck-20261017-e8f2 is released after this bounded continuation. Original failed receipts, later reproductions and their stated source/runtime limits remain unchanged. No diagnostic process is left running by this continuation.
2026-10-19 correction: recorded the separately verified #2448 main delivery. The diagnostic requirement, uncertainty and released claim remain unchanged.
Current diagnostic coverage — triage 2026-10-21
The original missing-metadata statement describes the frozen failure, not current main. At inspected main b393bf45994b5416867cbb372420b2b5be364892, the actual browser-bundle child is passed through runtimeHookPhases(...).child (packages/ui-react/tests/external-speech-runtime.test.ts:70-72), and a failed bundle error includes numeric code and signal. The delivered child helper (packages/ui-react/tests/fixtures/runtime-hook-phases.ts:19-60) reports child PID, start, exit code/signal and independently joined stdout/stderr completion, then whole-child completion. It adds no timeout or suppression. Do not implement this basic instrumentation again.
These current source receipts cannot recover the old child’s native termination origin. The later same-stage blank-output occurrence under concurrent-JIT=false also lacked numeric exit/signal at that first occurrence; its instrumented follow-up bundled successfully and later failed on the separately tracked #2357 renderer crash. File-size and output-directory fault controls produced explicit nonempty errors, which differ from the silent failure. Other GC, parallel-bundler, native-trace and current-Storage passes remain separate controls.
Retain needs: repro, p2, original failed identities and source-qualified Storage delivery. The missing evidence is a genuinely failing bundle with the now-available process/output receipts joined to its native termination/resource context. No causal fix, new reproduction, additional broad replay, runtime allocation or readiness change was performed.
Activity
schlessera commentedon Oct 17, 2026
Claim storage-speech-bundle-20261017-c0d4: bounded diagnostic work authorized with the Storage blocker reproductions. Preserve the frozen broad-run failure and capture child exit/signal evidence in an isolated diagnostic checkout; no product, assertion or deadline change is selected.
schlessera commentedon Oct 17, 2026
Bounded diagnostic outcome is folded into the issue body. The original #2172 preflight finishes 6,948 pass / 4 skip / 1 fail after 949 fast checks pass. A standalone bundle succeeds. The same-candidate isolated wrapper instead reaches the existing 180-second package-build timeout before bundling. A separately identified main
7cc86931ediagnostic reaches the observed stage and passes: bundle exit0/signalnull in448ms, then both real audio/drain/unmount cases2/13 and wrapper1/1. No guard/deadline change or causal correction. Preserve needs: repro and the original failed receipt; the next useful attempt needs exact child exit/signal evidence in the faithful broad context. Claim storage-speech-bundle-20261017-c0d4 is being released; diagnostic source and receipts remain preserved. #2172 stays draft.schlessera commentedon Oct 17, 2026
Resuming the authorized Storage chain and bounded blocker diagnostics under claim
storage-recheck-20261017-e8f2, using existing PR #2172 branchfeat/2059-storage-history-ui-m4p6. Reconcile current main, preserve the original #2334 failure, and obtain the missing browser-bundle child exit/signal/output observations before selecting any correction. No skipped test, weakened assertion or deadline change. The four historical SQLite skip labels are inverse empty placeholders; substantive vector cases passed, as verified against source and the retained log. Historical totals and the speech failure remain unchanged.schlessera commentedon Oct 17, 2026
2026-10-17 recheck: current candidate
4376cf9cdintegrates main85873db77. Strict types, 150 HTTP/citation tests, 51 observation/citation tests and complete native separate-UID/Btrfs qualification pass with zero owned-resource residue. The required preflight is running with bounded bundle PID/exit/signal/output observations. A real SIGTERM control fails on the missing signal before the change and passes after it; original runtime limits and assertions remain intact.The original four skip labels were misread: source and retained logs show inverse empty placeholders skipped while substantive SQLite-vector tests passed. Issue/PR bodies now correct this; original totals and the distinct #2334 failure remain unchanged. Current-source proof and main-based successful controls do not establish that original termination cause. No merge or complete hosted proof is claimed.
schlessera commentedon Oct 17, 2026
The policy consistency audit found a concrete #2058 defect: the long scenario still capped observations at 28 days, although the compatible later maintainer ruling selects 7-day/30-day windows. PR #2172 now includes correction
4440e0f9b, aligning the implementation, design experiment, specification, durable decision and user documentation. Existing 64/90/32 retention, sample/byte limits, evidence minimums, sampling cost and warning/delivery policy are unchanged.Failing-first evidence:
STORAGE_LONG_SCENARIO_USES_30_DAY_POLICYdrops two eligible daily endpoints under the old limit. The independent design trace returns 47 days instead of 45.483870967741936 under the old limit. Both pass after the correction; 62 history/pressure/citation tests pass with 213 assertions. The regression checks included/excluded endpoint effects and the exact 30-day boundary. Lint and the complete pending changeset plan pass (all 19 packages minor).The earlier
4376cf9cdpreflight was intentionally interrupted before its speech-bundle stage because this correction changes the delivery candidate; its 950 passing fast checks are preserved without claiming a complete pass. All 10 owned processes exited without forced cleanup. Full preflight is now running on4440e0f9bagainst unchanged main85873db77, with the bundle observations intact. This is a policy correction, not a diagnosis or repair of #2334; its historical failed receipt remains.schlessera commentedon Oct 17, 2026
2026-10-17 — Not reproduced, overlapping native client-bundle controls at main
bfaf3be35408e7983f6b525430118fa867c19d6a.New dimension: three sequential waves of two real Bun.build subprocesses running concurrently, each with a separate output directory and the original external-speech browser entry/expression. This differs from the prior single standalone bundle and complete isolated-worker controls. No artificial failure, output suppression, source edit or process limit is applied.
All six native children exit 0 / signal null, each with stdout/stderr zero bytes and independently observed EOFs. Exit durations range 407.4–513.9 ms; output channels complete just before their corresponding exits. The temporary driver passes 12 explicit child-exit/signal assertions, exit 0, 1.449 s. Each actual bundle checks result.success; scratch outputs are removed after the joined children finish.
Command:
timeout60s bun run test ./tmp/repro2334.test.ts, standard wrapper/offline child preload, own frozen dependencies/full initial build, Bun 1.4.3 on shared local Linux host. This is a bounded two-bundler workload, not original candidatefe5faafda, its broad predecessor state or actual browser/audio proof. No resource-pressure cause inferred from concurrency or short local durations.Keep
needs: repro: no silent nonzero bundle termination or historical PID/signal owner captured. Original failed broad and other controls retain their own identities. No repair, deadline change, skipped native assertion or hosted event. Driver and complete per-child PID/exit/EOF receipts retained locally.Re-read the concurrent Storage updates before posting: its instrumented candidate/preflight remains owned by that invocation. This separate paired-bundler control neither replaces nor claims its broad-context proof or the policy correction.
1 remaining item
schlessera commentedon Oct 17, 2026
2026-10-17 — Second round: Historical silent failure not reproduced; induced resource failure is explicit. Baseline exits 0 with empty outputs (483 ms). Limited child exits 1, signal null, with nonempty stderr: File too large: writing chunk ./client.js (474 ms). Restored child exits 0 with empty outputs (556 ms). Diagnostic probe passes 3 assertions in 1.54 s. at main
33cc244ea9f4f92114201a29d0d27edf24f89ce1.New approach: Constrain only the real Bun.build browser-bundle child with native RLIMIT_FSIZE=262144 bytes (core output disabled), using the exact original program/entry/output naming. Compare separate baseline, limited and restored output directories, observing real numeric exit, signal and independent output EOFs. This varies output-file capacity rather than overlapping build children or injecting a child signal.
Historical silent failure not reproduced; induced resource failure is explicit. Baseline exits 0 with empty outputs (483 ms). Limited child exits 1, signal null, with nonempty stderr: File too large: writing chunk ./client.js (474 ms). Restored child exits 0 with empty outputs (556 ms). Diagnostic probe passes 3 assertions in 1.54 s.
Command:
unshare --user --map-current-user --keep-caps --net sh <scratch>/offline.sh bun run test ./tmp/repro2334-round2.test.ts. Own isolated frozen dependencies and successful full build; Bun 1.4.3, shared local Linux host. Browser controls use the unchanged pinned Playwright 1.63.0 noble image, Vitest 4.1.11 and verified locked fonts with network disabled. Original offline guards and deadlines retained. A deliberately limited file-size boundary yields a different nonempty-error signature, not the original unexplained silent child failure. No full speech/audio qualification or Storage candidate proof claimed; preserve that owner and its broad-context receipts. No package output or release manifest changes.Keep
needs: repro: no historical cause or correction established. Temporary source edits restored; diagnostic inputs and output retained locally. No fix, PR or hosted dispatch.Concurrent-state reconciliation: read the updated body covering the completed 4440e0f broad preflight and new integrated candidate dbeabf6 before posting. This isolated capacity control does not replace either candidate qualification or its independently repaired browser configuration pin.
schlessera commentedon Oct 17, 2026
2026-10-17: candidate
dbeabf662completed local preflight with 950 fast passes, then 7,164 affected passes / four inverse empty fallback skips / one failure, 48,777 assertions across 542 files. The sole failure is a stale browser-command configuration fingerprint; the speech bundle, both actual audio/drain/unmount cases and the exact #2202 desktop Deny case pass. This failed result remains preserved.The class audit found three remaining stale fingerprints. On the same combined source all three corresponding controls fail before correction (18 pass / 3 fail); updating only the reviewed fingerprints passes 165 audit/input/build/citation tests with 727 assertions. Guard logic and behavioral assertions remain unchanged. Candidate
95dc5e8bfd33b2cb251c891c603b46ce6fee4df3integrates main8f9d2ceaa6df72e46a6feccec3f3a96292f18648, including its independently delivered build stamps. Full local preflight and strict types are running; full selected hosted confirmation remains pending. The original #2334 cause is still unknown, and its separate original-source broad replay remains prepared. No prior failure is relabelled as passing and no causal repair of #2334 is claimed.schlessera commentedon Oct 17, 2026
2026-10-17 — Third round: Matching full-fixture symptom observed once: Speech fixture client build failed with both captured streams empty, at unchanged line72; current-UID namespace, pair10pass/1outerfail,108.17s. Original code proves a nonzero child outcome but records no numeric exit/signal. The instrumented follow-up does not recur:child exits0,signalnull,zero output; it later fails with the separate renderer crash #2357. Induced outdir collision exits1 with explicit stderr; baseline/restored native bundles exit0.
New approach: First, the native outdir-topology control places an ordinary file where the original Bun.build child expects a directory, unlike the earlier file-size limit. Separately, the full real speech fixture under parent Bun concurrent-JIT=false unexpectedly reaches the original blank-output bundle error. Add child exit/signal/output observations to a distinct follow-up control, retaining its mandatory real build and original failure check.
Command:
bun run test packages/ui-react/tests/external-speech-runtime.test.ts tests/stats-answer-render.test.tsx; diagnostic speech-only control; bun run test tmp/repro2334-round3.test.ts.Local test at main
2a0b77f675da2f01c32adba3f4920650a5ee09fa, isolated checkout with its own successful frozen install and full build, Bun 1.4.3. Pinned-project browser probes use the Playwright 1.63.0 noble image, Vitest 4.1.11, verified offline fonts and network disabled; native host controls are distinguished below. Existing offline guards, assertions and deadlines retained. Shared Linux host; no historical runner equivalence or measured starvation claimed. The matching observation is local, at the frozen main above, with BUN_JSC_useConcurrentJIT=false and route-free loopback/current-UID namespace/capability drop. It is not the historical broad-feedback context or a proved ordinary-default-environment recurrence. No numeric exit, signal, errno or responsible resource cause can be reconstructed for that first child. The follow-up adds native exited/signal/output telemetry before the original check, not a retry until green. Both whole-fixture controls fail and neither supplies complete speech proof. The native outdir-collision test passes3 assertions with its expected explicit failure and restored success.Keep
needs: repro: this does not establish the historical cause or a correction. Diagnostic source restored; command, input and complete output retained locally. No implementation, PR, push or hosted dispatch.schlessera commentedon Oct 17, 2026
2026-10-18 — Cluster note (no common cause established). #1600, #2279, #2334, #2357 and #2360 all fail inside or right after the setup of
packages/ui-react/tests/*-runtime.test.tsfixtures, under a 180 s hook budget.Every one of the 16 runtime files spawns its own
scripts/build.ts --for …inbeforeAll. Example: (const build,packages/ui-react/tests/external-speech-runtime.test.ts:36). Currently (#2319, #2352) every build recompiles every selected package, andbuild.tsdeletes each package'sdistbefore compiling it. Per-file setup cost is therefore a full package build that is sensitive to host load. #1600's scope already names the structural option of building once, outside the hooks. That would remove the dominant setup cost for every member of this cluster at once, whatever their individual triggers.Checked and ruled out: sibling fixture builds in one
bun testrun do not overlap. Bun runs test files sequentially without--parallel, so the nested-lease reuse at (if (lease && scope,scripts/workspace-lease.mjs:119-123) does not create concurrentdistdeletion within a run.Separately, local receipts gathered on a WSL2 development host should be read against #2370. Leaked Docker Desktop bind mounts made every bwrap cost about 2 s there and broke 5 s worker-setup budgets. These browser fixtures mostly run outside bwrap, so #2370 is not offered as their cause.
schlessera commentedon Oct 17, 2026
2026-10-18 — The bounded original-source affected-test replay has ended without reaching the failing browser-bundle stage.
The command was
timeout --signal=TERM --kill-after=15s 7200s bun run test --changed=b9805a455ea8c62b238034f873859f21560006e3 --pass-with-no-testsat original headfe5faafda079a9dc9d182fe21dc703b9d8a2b514, with only the previously recorded bounded bundle process observations. Original assertions, full package build and deadlines were retained.The target's package child PID 2318053 starts at 22:46:16.338 UTC. The last package progress event is ui-react at +161.74 seconds. The original 180-second setup hook expires; the isolated wrapper fails at 181.49 seconds. No client-bundle start event or bundle resource sample exists. Five earlier runtime hooks also fail at their existing setup deadlines; this is not a clean-predecessor reproduction of the original silent bundle exit.
After the target wrapper joined, the observer intentionally stopped only its owned diagnostic supervisor. Child exit 143 is that recorded stop, not a passing full suite. All eight processes owned at stop are gone. The complete failed log, source patch, times and cleanup receipt are retained locally.
This adds setup-timeout evidence to the distinct #1600/#2279 class and does not establish #2334's termination cause. No correction, relaxed deadline or historical-cause ruling is selected. The current Storage candidate
3c0e884a4d6b43c494469c9fdaf6ce0cb919ef6eseparately passes strict types and 956 fast tests / 6,331 assertions; its broad feedback remains in progress. PR #2172 remains draft and #2334 retains needs: repro.schlessera commentedon Oct 17, 2026
2026-10-18: The current candidate's external-speech target passes: bundle PID 2539396 exits 0 with no signal, both output channels complete with zero bytes, and the two real browser/audio tests pass with 13 assertions. Its isolated wrapper passes in 107.45 seconds. This current-source control does not establish the historical silent exit's cause or resolve #2334.
The existing #2315 SDK correction and the subsequently reproduced application-parent deadline correction #2382 are ready in independent PR #2384 at
20028ce746ae7f0ac300a94d9731169498e1f79e. Complete native proof, strict types, citation audit and mandatory preflight pass there; complete selected hosted proof is requested. That independent result does not qualify or merge this Storage candidate. The Storage candidate continues its frozen broad preflight, with no assertion failure reported so far; no complete current Storage or hosted pass is claimed. The original-source diagnostic and #2380 failed preflight remain failed.schlessera commentedon Oct 18, 2026
Independent #2384 is merged as
775eb17a, closing #2315/#2382 after all selected ready CI jobs and actual checkout/squash verification. See the delivery receipt.The frozen Storage
3c0e884apreflight is still running but has already failed one native runtime-placement assertion. #2387 reproduces the cause on clean main: the fixture uses configurableTMPDIRfor a sentinel meant to be under literal/tmp. Its isolated correction passes 4 native tests / 253 assertions with default and relocated temporary storage; a real broad-retention mutation fails the same sentinel assertion and restoration passes. PR #2389 carries the independent correction. Required local preflight for that correction passes on clean2c3913504382ab54e97586f1fbfc26f87a442affin 21.40 seconds, including all four affected native tests / 253 assertions with relocatedTMPDIR. The Storage run remains failed, and #2172 remains draft.The current external-speech control passes as previously recorded. It still does not establish #2334's historical termination cause; #2380's separate discovery failure also remains unresolved.
schlessera commentedon Oct 18, 2026
2026-10-18 — reproduction pass at
775eb17aab740fa759c2182f306c38fc17acbcbe.Different approach: Run the actual complete speech fixture with inherited generational GC disabled (a separately confirmed JSC option), and observe bundle exit/signal and both EOF channels independently. This differs from earlier concurrent-JIT controls, standalone child waves and output-capacity faults.
Observed: Not reproduced: actual bundle child exits 0 without signal, both output streams reach EOF with zero bytes, and the complete speech fixture passes both real browser/audio cases (13 assertions) plus the parent wrapper check. Owned Chromium exits 0 with signal null. Outer invocation exit
0, elapsed 46.119 s; outer watchdog fired: false.Command (working directory: repository root; any diagnostic source changes are described above):
unshare --user --map-current-user --keep-caps --net sh /tmp/brain-repro-audit/offline.sh bun run test packages/ui-react/tests/external-speech-runtime.test.tsExplicit environment:
BRAIN_REQUIRE_CHROME=1,PUPPETEER_EXECUTABLE_PATH=$PLAYWRIGHT_CHROME,DEBUG=pw:browser,BUN_JSC_useGenerationalGC=false.Bun 1.4.2 with confirmed useGenerationalGC=false; local Chrome for Testing 153.0.8010.12, isolated route-free loopback/dummy namespace, setup capabilities dropped. Real mandatory package build completes before browser bundling. This changes GC generation policy and browser/runtime identity relative to the blank-output failure; a successful bundle with empty output is expected and does not explain a previous unsuccessful empty-output child.
This is focused local evidence, not historical-run equivalence, a repair or full candidate proof. Existing assertions, deadlines and offline guards were retained. Temporary source instrumentation was restored byte for byte. Keep
needs: repro; no readiness or closure change. Full log, command/exit receipt and diagnostic patch are retained in task-owned scratch.schlessera commentedon Oct 18, 2026
2026-10-18 — second reproduction pass at
775eb17aab740fa759c2182f306c38fc17acbcbe.Different approach: Run the actual complete speech fixture with inherited concurrent GC disabled (a separately confirmed JSC option), and observe bundle exit/signal and both EOF channels independently. This differs from earlier generational-GC/concurrent-JIT controls, standalone child waves and output-capacity faults.
Observed: Complete real speech fixture passes: isolated browser child 2 tests / 13 assertions; parent 1 test / 1 assertion. Bundle exit, stdout EOF and stderr EOF each complete, and the native child exits 0. Outer invocation exit
0, elapsed 41.916 s; outer watchdog fired: false.Command (working directory: repository root; any diagnostic source changes are described above):
unshare --user --map-current-user --keep-caps --net sh /tmp/brain-repro-audit-2/offline.sh bun run test packages/ui-react/tests/external-speech-runtime.test.tsExplicit environment:
BRAIN_REQUIRE_CHROME=1,PUPPETEER_EXECUTABLE_PATH=$PLAYWRIGHT_CHROME,DEBUG=pw:browser,TMPDIR=/dev/shm/odysseus-repro2,BUN_JSC_useConcurrentGC=false.Runtime dump confirms useConcurrentGC=false (default true). Separate bundle-channel observations are retained. This differs from prior generational collection policy but does not measure collection activity or explain old setup ordering.
This is focused local evidence, not historical-run equivalence, a repair or full candidate proof. Existing assertions, deadlines and offline guards were retained. Temporary source instrumentation was restored byte for byte. Keep
needs: repro; no readiness or closure change. Full log, command/exit receipt and diagnostic patch are retained in task-owned scratch.schlessera commentedon Oct 18, 2026
2026-10-18 — third reproduction pass at
775eb17aab740fa759c2182f306c38fc17acbcbe.Different approach: Trace only the actual browser-bundle subprocess native process/signal/descriptor lifecycle, forwarding every original Bun.build argument and output/exit join. This differs from broad process tracing or root GC/raster controls; actual speech/browser assertions remain.
Observed: 1 pass; 0 fail; 1 expect() calls Outer invocation exit
0, elapsed 39.557 s; outer watchdog fired: false.Command (working directory: repository root; any diagnostic source changes are described above):
unshare --user --map-current-user --keep-caps --mount --net sh /tmp/brain-repro-audit-3/offline-mounted.sh bun run test packages/ui-react/tests/external-speech-runtime.test.tsExplicit environment:
BRAIN_REQUIRE_CHROME=1,PUPPETEER_EXECUTABLE_PATH=$PLAYWRIGHT_CHROME,DEBUG=pw:browser,TMPDIR=/tmp/brain-repro-audit-3/native-state.Runtime option dumps record accepted settings where applicable; requested configuration does not measure actual collection/compilation activity or identify the historical cause.
This is focused local evidence, not historical-run equivalence, a repair or full candidate proof. Existing assertions, deadlines and offline guards were retained. Temporary source instrumentation was restored byte for byte. Keep
needs: repro; no readiness or closure change. Full log, command/exit receipt and diagnostic patch are retained in task-owned scratch.schlessera commentedon Oct 19, 2026
2026-10-19 Storage continuation handoff
Storage #2172 is delivered as
caae12da2e678dd4720bf112e93ef21812cfdc18, after complete local and fresh selected ready-PR qualification.Automatic main-push CI 39302987919, attempt 1 finished with 15 successful jobs, failed unit (1) and a failed aggregate. All 17 checkout logs and 13 resource identities match the actual squash; all 77 Storage browser/story cases passed. The unit failure is the existing #2405 fixture-maintenance race. Correction #2448 now has passing local preflight and behavioral/mutation proof and is awaiting complete hosted confirmation. Storage issue closure waits for corrected-main evidence; the original failed run remains failed.
This issue remains OPEN with
needs: repro. The next useful evidence is a bounded faithful broad-context recurrence with bundle PID, numeric exit, signal and independent output completions, correlated to the same process/time before selecting a repair. Passing current-source speech cases do not identify the historical silent failure.Claim
storage-recheck-20261017-e8f2is released after this bounded continuation. Original failed receipts, later reproductions and their stated source/runtime limits remain unchanged. No diagnostic process is left running by this continuation.schlessera commentedon Oct 19, 2026
Storage delivery verification is complete after the separate #2405 correction in #2448. This updates delivery evidence only; the existing diagnostic requirement and historical attribution limits remain. The prior claim remains released.
The original #2172 automatic main run 39302987919, attempt 1 remains failed: 15 jobs passed, unit (1) encountered the #2405 vanishing
maintenance.lockfixture-copy failure, and aggregate proof failed. All 77 Storage browser/story cases passed there. Its actual checkout wascaae12da2e678dd4720bf112e93ef21812cfdc18; no failed receipt was rerun or relabelled.The separate test-fixture correction #2448 merged as
cea53611ddea4916ac323060bfef42ec18118fea, parentcaae12da2e678dd4720bf112e93ef21812cfdc18, tree4a826e90467b5874be85ff71d04e9ede01577486. Its automatic main-push run 39312029459, attempt 1 passed all 17 selected jobs. Every actual checkout log and all 13 resource receipts agree on that squash identity; integrated-cadence aggregate passed with an empty retention ledger. All 77 Storage browser/story cases and all eight Git-policy regressions passed freshly on corrected main. The correction changes only the test preload, its regression tests and testing documentation; Storage product source is unchanged. Both squash commits are present on remote main.schlessera commentedon Oct 21, 2026
Closing as not planned (maintainer-approved triage, 2026-10-21). There were two local occurrences, both on 2026-10-17, of the external-speech bundle exiting nonzero with empty output. There has been no hosted occurrence, and every instrumented broad and focused control since exits 0. Main now reports the bundle's exit code and signal, plus phase receipts (
packages/ui-react/tests/external-speech-runtime.test.ts:72), so a recurrence explains itself.Reopen if that message shows a nonzero code or a signal.