Files
ARCADIA-Studio/harness/experiments/analysis-mixed-emission-20260925/STACK-DIAGNOSIS.md
T

71 lines
4.3 KiB
Markdown

# Emission checkpoint stack investigation
2026-09-25. Source `19a4082117b88caf332198e4c685bde91005cb52` compiled and
passed all eleven new emission tests, including the seven scoped 128 KiB
success/no-op/refusal/deep/wide worker cases. Its full library run then aborted
with STATUS_STACK_OVERFLOW (3221225725) in the unchanged ordinary-index
`small_stack_success_and_late_header_failure_leave_no_partial_owner` control.
There were 135 completed passing outcomes before abort. This is not the completed
sixteen-failure baseline.
The exact artifact is 42,402,816 bytes, SHA256
`777457cfefb8a3046e3f0809cabd936cfb742abe792befad2c50e05dfac1bf6b`.
It was copied locally before replacement, under the gates folder's artifacts
directory; it is identified rather than included in the evidence ZIP.
The initial full log SHA256 is
`7a23c1151cfba02f6527bef6c8ffd53ffa5eac0e0598e37728733bc85230e538`.
LLDB reproduced the failure in Windows heap allocation beneath String formatting,
Exact::parse_decimal, Budget::exact, Cursor::exact_literal, syntax::binding,
declarations::parse, State::parse_typed, Parser::unit and parse_impl. No emission
method is on this active stack. The worker is in its initial rich-source parsing
path. Debugger log SHA256:
`fca0fc9a3c59b95beb84d1690df6f0b289dcc46bd949337de555f7102b2cce59`.
The stopped child PID 3724 was explicitly killed. Debugger exit zero reports
that controlled observation, not a passed test; no child remains running.
Symbol-bound prologue records show these selected frames are identical to the
previous passing fa7 artifact: parse_impl 11,048 bytes, parse_with_profile 200,
parse 280, accepted 1,432, indexed 1,496 and the actual worker 6,920. The separate
same-named test shim is 56. The new emitter does not add fields to old owners or
change those parser/test sources. Thus the prior duplicated-policy explanation
does not apply to this recurrence. This observation does not establish the full
cause of process/layout/heap-dependent stack headroom variation.
Additional active-frame observations identify binding at 27,272 bytes,
declarations::parse at 22,664, Parser::unit at 11,864, State::parse_typed at
6,952, Exact::parse_decimal at 2,296, parse_literal at 952, Budget::exact at
632 and Cursor::exact_literal at 776. Prologues are not complete live-stack
measurements; calls, OS/library frames and padding remain outside this list.
The selected repair separates the existing iterative binding driver from its
prefix and continuation operations. Numeric prefix parsing should no longer
carry stack slots for unrelated continuation construction. It preserves the
same task/value vectors, processing order, accounting and policies. No numeric
formatting change, larger stack, heap wrapper, optimizer attribute or weakened
test is selected. Independent mechanical source review and measured rebuilt
prologues plus the unchanged runtime controls are required before acceptance.
Repair source is `8d52dab97c92cc31baae9f20d8c324b55818aa5d`. Independent
mechanical review confirms the continuation operations are token-identical and
the prefix operations differ only by two optional trailing argument commas.
The compiled binding driver reserves 2,520 bytes and its active prefix helper
11,720: 14,240 bytes together versus the former 27,272, a 13,032-byte reduction
in these selected prologue reservations. The mutually exclusive continuation
helper reserves 13,416 bytes (15,936 with the driver); it must not be added to
the active numeric-prefix sum. Other observed frames retain their prior sizes.
These figures exclude call overhead and are not a complete live-stack bound.
The final artifact is 42,402,816 bytes, SHA256
`29d8a4761fd8f09a3c0eafeb11cca07f0d45c711bf1b969d97c8b29d2b3ab446`.
All eleven focused tests pass. The full run completes with 253 passed and 16
failed; exact baseline reconciliation is recorded in RUNTIME-REVIEW.md.
The unchanged previously overflowing control also passes three fresh processes,
with no stack override or test edits. Their separate receipts preserve all
attempts. Strict core all-target Clippy passes; formatting output remains the
inherited eight blocks in five files. The evidence supports this bounded repair,
not universal stack safety or an explanation of all process headroom variation.
The older rename full-pipeline setup observation remains separate; this work
does not retroactively turn an unrerun historical fixture into a pass.