Repository navigation
Description
Problem
The unit (linux) job on current main crashed mid-suite: turbo itself segfaulted, so the run's failure reads as ordinary test failures while most of the affected suite never executed — including @opencode/core:test, the package the validated merge changed.
Evidence (verified 2026-10-19)
Run 39182188357 — test workflow, push to main at b3e93cd0 (merge of PR #88, the #87 subagent-cycle fix), job unit (linux) (117837096275), 00:45:17Z–00:48:18Z:
Test summaries actually printed before the crash:
@opencode/server:test— 104 pass / 0 fail (32 files)@opencode/simulation:test— 47 pass / 0 fail (9 files)@opencode/sdktest — 37 pass / 2 fail (39 tests; both failures are the already-tracked test(sdk): transport tests fail on main at the sessions.get error assertion — sessions.get error does not match {_tag: SessionNotFoundError} in the test flow (unit linux red) #62 transport assertions)
Then, at 00:48:12Z, @opencode/cli:test started (cache miss, executing cfbd54e631d40ea2), and ~1.6s later:
error: Failed to run "turbo" due to signal SIGSEGV
... line 6: 2309 Segmentation fault (core dumped) GITHUB_ACTIONS=false bun turbo test --affected --concurrency=3
##[error]Process completed with exit code 139.
No @opencode/core:test group ever opens in the log. packages/core is where PR #88 landed (packages/core/src/tool/plugin/subagent.ts), so current main has no unit (linux) verdict for core at all — the only visible failures are the two pre-existing #62 sdk tests, which makes the run look like a routine known-failure run.
The sibling unit (windows) job in the same run completed its suite (failures: the same 2 #62 tests + the known Windows #!/bin/sh mcpx ensureDaemon spawn test) — the crash is linux-job-only in this instance.
Scope check
- Searched the failed logs of 8 other recent
testworkflow runs (39181436767, 39172821410, 39165632602, 39164913828, 39164101664, 39163561017, 39162690752, 39155385642): no other SIGSEGV. This is a single verified sighting so far — filed because the crash silently truncates coverage on the current main, not because it is known to be frequent. - Turbo is used only in this repo among the four fork repos (no turbo in code/openchamber/nix workflows or package.json), so this is a single-repo issue, not a cross-repo set.
- Not test(sdk): transport tests fail on main at the sessions.get error assertion — sessions.get error does not match {_tag: SessionNotFoundError} in the test flow (unit linux red) #62 (the sdk assertion failures are real but separate, and they did report), not CI: add timeout-minutes caps to every job in every workflow #61 (timeout caps), not test(core): Ripgrep and search-tool tests fail on runners without an ambient rg — binary resolution falls through to a network download the test harness forbids #72 (ripgrep cluster did not appear in this run).
Why it matters
A test-orchestrator crash that leaves the job summary indistinguishable from ordinary test failures silently erases CI signal: reviewers and sweeps triage the visible failures (#62) and move on, while the package that actually changed ships with no unit verdict. It already happened once on the merge that most needed the verdict.
Acceptance criteria
- A re-run (or a new push) produces a complete
unit (linux)run forb3e93cd0or a later main head in which@opencode/core:testreports a summary, so main has a real core verdict. - On any recurrence, the turbo and bun versions in play and the runner's core dump / dmesg tail are captured on this issue (the unit step runs
bun turbo test --affected --concurrency=3; the siblingaffectedjob pinsturbo@2.10.2— record which binary actually segfaulted). - The unit job distinguishes an orchestrator crash from test failures in its outcome — e.g. per-package test steps/jobs, or a wrapper that retries once on exit 139 and annotates the run — so a truncated suite cannot masquerade as a complete red run.
- If a re-run plus several subsequent main runs show no recurrence, close with that evidence and keep the distinguishing measure (or record why it is not needed).
Activity
dezren39 commentedon Oct 26, 2026
Intake review
🤖 Fleet monitor intake pass (protocol §5). The body already carries acceptance criteria, so the body was left untouched; this pass adds labels and this comment only.
Related: run 39182188357 on main at b3e93cd (merge of PR #88 / #87 fix), detailed in the body; the two
@opencode/sdkfailures in that run were the already-tracked #62 assertions.Live check: still open and previously unlabelled. I did not find evidence in this pass that the turbo segfault has recurred or been diagnosed — equally, a single 2026-10-19 crash with no recurrence data may now be stale, which the next triage should test against recent
unit (linux)runs before investing in a root-cause hunt.Notes / risks: the failure mode is dangerous precisely because it masquerades as ordinary test failures while suites (including
@opencode/core:test) never run — a truncated run should fail loudly, not read as red tests.Suggested approach: first check recent main runs for any repeat SIGSEGV / exit-139 signature; if none, close-or-park with that evidence; if it recurs, treat making the truncation visible (job-level signal check) as the fixable part, with the turbo crash itself upstream.
dezren39 commentedon Oct 28, 2026
Triage verdict: segfault NOT recurring on current main; the distinguishing measure is still missing
Checked against live CI on current main (2026-10-28), not the issue text alone. The original sighting was run 39182188357 on
b3e93cd0(2026-10-19): turbo SIGSEGV, exit 139,@opencode/core:testnever ran.No recurrence in sampled current-main runs (
testworkflow,unit (linux)logs grepped forSIGSEGV/Segmentation fault/exit code 139):b0633cc6): 0 crash matches; the@opencode/core:testgroup opened and executed — so acceptance criterion 1 (a later main head where core reports) is met.cb92f8fe): 0 crash matches, core:test present.af239842): 0 crash matches, core:test present.ad881d2b): unit (linux) success, 0 crash matches in the full log.Still open — criterion 3: at
origin/maincd21eab1dec5,.github/workflows/test.yml's "Run unit tests" step is still a single bareGITHUB_ACTIONS=false bun turbo test --affected --concurrency=3— no retry on exit 139, no distinct annotation, no turbo/bun version capture on crash. If turbo segfaults again, a truncated suite will again read as ordinary test failures.Route
Scoped follow-up packet enqueued to
repo-health-opencode-pilotas task 2693 (kindsmall_fix, deduperepo-health:v1:fix:developing-today/opencode:issue:90): wrap the unit step so an orchestrator crash retries once and, on recurrence, is annotated distinctly with versions recorded; ordinary test failures unchanged. Criterion 4's close-with-evidence path applies once that measure lands — this issue stays open until then.Labels synced:
status/needs-triageremoved;queue/queuedset for task 2693.dezren39 commentedon Oct 28, 2026
🤖 Dispatcher binding · openchamber-dispatcher run 2026-10-28 15:30 CDT
small_fix) ↔ issue CI: unit (linux) turbo run segfaulted mid-suite on main — @opencode/core:test never ran, truncated run reads as ordinary failure #90 (CI: unit (linux) turbo run segfaulted mid-suite on main — truncated run reads as ordinary failure)ses_e7bc22869ffe8u18n5anY1c60d(laptop OpenChamber, agent build) — the launch POST returned this id withpromptDispatched: true, and the session listing independently binds it to the worktree/title below.opencode-route/workhorse, resolving server-side to opencode-go / deepseek-v4.1-flash — OPEN). Fresh quota read this run ~15:32 CDT: opencode-go 5h 13.74% (reset 7:26 PM) / weekly 21.94% / monthly 73.45% — plan quota only, never PAYG.~/git/fleet/2693-90-turbo-crash-cion the laptop, branchqueue/2693-90-turbo-crash-ci(from origin/main cd21eab)queuedin the fleet queue (no targeted claim/binding verb exists yet — fix(script): stats.ts fetches have no deadline and buffer unbounded .json() bodies — PostHog, npm downloads, and the GitHub releases pager #1337/fix(changelog): read upstream changelog through a 1 MiB capped reader #1272); the owning lane reconciles/harvests from here, and the babysitter shepherds the session.dezren39 commentedon Oct 28, 2026
Task 2693 checkpoint: crash-retry wrapper implemented, PR open, CI reported
Branch/commit:
queue/2693-90-turbo-crash-ci@72ea2299— PR #761 (opened, not merged): #761What changed
.github/workflows/test.yml,Run unit testsstep only: both the--affectedvariant and theworkflow_dispatchfull-suite variant now invokebash script/run-unit-tests.sh bun turbo test …. The step's env and flags are otherwise unchanged.script/run-unit-tests.sh(new): runs the given command and inspects the outcome.SIGSEGVanywhere in the attempt's output →::warning title=Unit test orchestrator crashed::, then one retry.::error title=Unit test orchestrator crashed twice::stating that the run was truncated (so packages after the crash point, e.g.@opencode/core:test, may have no verdict) and recording turbo and bun versions, plus the same facts in the step summary. Fallback to thepackage.jsonpins if a crashed binary cannot answer--version.::notice title=Unit tests passed on retry::and a summary line, so a flake leaves a trace.bun testprocess inside a finished turbo task already surfaces as a normal turbo task failure, which this measure does not reinterpret.Simulation (laptop, stub commands, CI shell flags
bash -eo pipefail,GITHUB_STEP_SUMMARYcaptured)Failed to run "turbo" due to signal SIGSEGV): warning → retry → distinct error annotation withturbo 2.10.2, bun 1.4.2in both annotation and summary, exit 139.bash -nandshellcheckclean; workflow YAML parses and the step resolves to the wrapper on both branches.CI on the PR (run 40765912824, base
cd21eab1)unit (linux)(job 123089886700) andunit (windows)(job 123089887027): the wrapper logged==> unit tests, attempt 1/2: bun turbo test --affected --concurrency=3, made one attempt, and emitted no crash annotation — exactly the unchanged ordinary-failure path. Both jobs failed on the two permission-focus tests that unit: two permission-focus tests fail on linux + windows (pre-existing) #565 records as deterministic pre-existing failures on both platforms (@opencode/tui#test,exit 1).mainat88ecd395— without the wrapper — failed with exactly those two tests (run 40762355777,Failed: @opencode/tui#test). The wrapper changes no ordinary verdict.test.yml(a turbo global dependency) cache-invalidates every test task; that is expected for any workflow change and is why this PR surfaces unit: two permission-focus tests fail on linux + windows (pre-existing) #565 that affected-only main runs skip.e2e (linux/windows, app-2)regression specs, tracked by ci(app): e2e app-2 regression specs fail on subagent navigation/timeline visibility — reproduced on unrelated PR #607 (attempts 1+2) #631 as reproduced on unrelated PR fix(tui): truncators respect lengths 0-2 #607.affected packages,build (linux/windows),typecheck,nix-eval, standards/compliance/duplicates,e2eapp-1 and both component suites.State
Implementation, simulation and CI reporting are done. PR #761 is open for review and must not be merged until checks are judged; its
unitchecks will stay red on #565 (tracked separately) regardless of this change. Nothing here requires a decision from #90's owners beyond merging the measure.Closure note
Triage 2063 found no recurrence in 4 sampled recent main runs (runs 40744745296, 40741605903, 40740624281, 40737402873;
@opencode/core:testpresent each time), and this measure now supplies criterion 3. I am not closing #90 myself; close it once PR #761 has merged and the measure is onmain.dezren39 commentedon Oct 28, 2026
Closing per acceptance: (1) triage task 2063 found no recurrence of the turbo SIGSEGV in sampled current-main runs (runs 40744745296, 40741605903, 40740624281, 40737402873 — 0 segfault matches, @opencode/core:test executed); (2) PR #761 (merged a66dd47) adds the criterion-3 distinguishing measure: script/run-unit-tests.sh wraps both unit-step variants — a crash (exit 139 / SIGSEGV marker) retries once and, on recurrence, annotates distinctly (::error title=Unit test orchestrator crashed twice::) with turbo+bun versions in the annotation and step summary; ordinary failures are untouched.