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
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.
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.