You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
SIGSEGV: cc with a ~290-char argument crashes perry-compiled cc (rc=-11, nondeterministic 2/3 reps) — regression window includes today's merge trains #9552
Full-suite verification on main 3b9c9dee2c (binary /root/claude-roots/app_verify): stress case C08_long_arg — -p with a ~290-char xxxx… argument — segfaults where node exits 1 (the normal not-logged-in path).
node rc=[1] | perry rc=[-11] NONDETERMINISTIC-PERRY-ONLY (2 signatures)
Nondeterministic across reps (2 of 3 signatures differ) — consistent with a GC-timing-dependent stale pointer or an overflow whose reachability depends on allocation state.
Why this looks like a fresh regression
This case passed in the previous full sweep (main+#9479, ~12h earlier, 167/196 run — C08 was not in its failure list). The window between the two runs contains today's merge trains: #9518 (stream read path — stdin/argv-adjacent), #9519, #9521 (error stacks — a long-arg error message flows through error rendering), #9522, #9540, #9544, and the worker PRs (#9531–#9538 range). A long -p argument produces a long prompt string that flows into the auth-error path and the transcript writer.
Triage plan
Reproduce standalone: HOME=<fresh> app_verify -p $(python3 -c "print('x'*290)") ×5; then bisect length (256/288/512/1024 — a boundary at 256 or around a header size would be telling).
If GC-clean: core dump + symbolize.py (/root/claude-9417/), and A/B against app_9485/app_final (pre-train binaries, both still on the box) to pin the introducing train.
Binaries for A/B: /root/claude-roots/app_verify (crashing, main tip), app_final (main+#9479, passing this case), app_9485, app_9499. Case runner: cd /root/claude-ccstress && PERRY_BIN=… python3 harness.py cases_all.jsonl C08_long_arg.
Found by the post-merge full verification sweep; the only new failure in it.
Closing: fixed in #9565 (pin cross-thread promises in their constructor until they settle), landed via merge train #9569 on 2026-09-02; the fixture that fails unfixed landed via #9571 in train #9573. Not in release candidate r27 — the refreshed candidate must include it.
Post-merge verification at main 8d27f7b964: fresh toolchain + cc rebuild, the exact case hammered 15× with fresh HOME each run — 0/15 bad, all rc=1 matching node. Extra rigor on purpose: at ed99c35cd the crash was still live at 1-in-3 reps, hidden behind the comparator's representative pair and visible only as NONDETERMINISTIC-PERRY-ONLY — one clean run was demonstrably not evidence for this bug.
Full-suite verification on main
3b9c9dee2c(binary/root/claude-roots/app_verify): stress caseC08_long_arg—-pwith a ~290-charxxxx…argument — segfaults where node exits 1 (the normal not-logged-in path).Nondeterministic across reps (2 of 3 signatures differ) — consistent with a GC-timing-dependent stale pointer or an overflow whose reachability depends on allocation state.
Why this looks like a fresh regression
This case passed in the previous full sweep (main+#9479, ~12h earlier, 167/196 run — C08 was not in its failure list). The window between the two runs contains today's merge trains: #9518 (stream read path — stdin/argv-adjacent), #9519, #9521 (error stacks — a long-arg error message flows through error rendering), #9522, #9540, #9544, and the worker PRs (#9531–#9538 range). A long
-pargument produces a long prompt string that flows into the auth-error path and the transcript writer.Triage plan
HOME=<fresh> app_verify -p $(python3 -c "print('x'*290)")×5; then bisect length (256/288/512/1024 — a boundary at 256 or around a header size would be telling).PERRY_GC_PROTECT_FROMSPACE=1— if it faults on a retired address, it is the rooting class; the cc auth-error path:Cannot read properties of undefined (reading 'def')where node reportsNot logged in#9417 ladder applies.symbolize.py(/root/claude-9417/), and A/B againstapp_9485/app_final(pre-train binaries, both still on the box) to pin the introducing train.Binaries for A/B:
/root/claude-roots/app_verify(crashing, main tip),app_final(main+#9479, passing this case),app_9485,app_9499. Case runner:cd /root/claude-ccstress && PERRY_BIN=… python3 harness.py cases_all.jsonl C08_long_arg.Found by the post-merge full verification sweep; the only new failure in it.