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.