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

4.3 KiB

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.