90 lines
5.4 KiB
Markdown
90 lines
5.4 KiB
Markdown
# Rename planner small-stack investigation
|
|
|
|
2026-09-24, Windows gnullvm development test profile, one Cargo job. These are
|
|
observed diagnostic results; the proposed test repair still requires execution.
|
|
|
|
- Source `9388fcf2f0b82daffec93308f42949a612b07330` compiled. Its focused run
|
|
passed four named tests, then aborted in the 128 KiB deep/wide stress test
|
|
with `STATUS_STACK_OVERFLOW` (3221225725). It did not complete the test suite.
|
|
- The exact original artifact (42,074,624 bytes, SHA256
|
|
`bd927d4653a8915ee72d5df22096d29edb1853c12d929e20056647b05e565956`)
|
|
subsequently passed all other 16 rename tests. That direct run explicitly
|
|
skipped the known aborting case and checked the artifact before/after. It
|
|
does not establish acceptance of the complete 17-test suite.
|
|
- Diagnostic source `9e8e77e1d81c0e3116fa5777a37792a635bb4317` added flushed
|
|
phase markers only. The deep case completed admission/indexing, original
|
|
model cloning, successful planning and plan destruction, then desired-model
|
|
cloning. It aborted after entering the later collision-rejection operation.
|
|
- Diagnostic source `8159a17dd7e8083ca6b572e9b63f3a300f0d67fe` additionally
|
|
bracketed the shared rejection helper. Its final emitted marker is
|
|
`rename rejected helper: entered; before authored`. There is no
|
|
`after authored; before plan` marker. The overflow therefore occurred while
|
|
rebuilding the source through that nested helper, before the colliding plan
|
|
invocation. These markers do not identify a particular internal parser
|
|
instruction, exact compiler frame size, or general application-stack defect.
|
|
|
|
The proposed narrow repair constructs each fresh source directly in the small
|
|
worker and invokes/matches the planner directly. It preserves the 128 KiB stack,
|
|
128-site deep and 129-site wide fixtures, full admission on that worker,
|
|
successful planning/destruction, post-equality collision refusal/destruction and
|
|
non-name refusal/destruction. It does not enlarge the stack, reduce expression
|
|
sizes, move the tested pipeline to another thread or omit failed cases.
|
|
|
|
Production rename code remained SHA256
|
|
`3ce74331c962abfbf63ca7f72b286405b1ca8b266335d77c71103c900cb6e9dd`
|
|
through all three source snapshots. Original and diagnostic logs/receipts,
|
|
committed-input manifests and exact launchers remain in
|
|
`.local/analysis-mixed-rename-plan-gates-20260924` until portable publication.
|
|
|
|
## Further observed results and scoped evaluator decision
|
|
|
|
The direct-call repair `70c20c39de4d87633a3275fda3f2bc54b20e50b7` and compact
|
|
case-loop `f1c095654a5f2a8e1592415b1392644b27169e00` both still aborted in the
|
|
same test. Neither is accepted as a repair. Read-only prologue inspection found
|
|
worker stack allocations of 10,872 and 5,976 bytes respectively; reducing that
|
|
one frame did not establish full-pipeline success. These are static observations,
|
|
not complete call-stack size measurements.
|
|
|
|
Three LLDB runs used the exact f1 artifact (42,076,160 bytes, SHA256
|
|
`b804768eccb350033fcfd01516d0c3253e43525718f42de7c75cda9a3d91c6fe`).
|
|
The first stopped on overflow without executing a backtrace command. The second
|
|
completed the exact single test successfully under the debugger; the third
|
|
overflowed and captured all threads before explicitly killing its owned debuggee.
|
|
Debugger process exit zero is not a passing test gate. The differing outcomes
|
|
show that this stack boundary is environment-sensitive; no cause for that
|
|
variation is claimed.
|
|
|
|
The third backtrace places the fault in Windows heap allocation reached through
|
|
BigInt parsing, `Exact::parse_decimal`, `Budget::exact`, `Cursor::exact_literal`,
|
|
`syntax::binding`, `declarations::parse`, `State::parse_typed`, `Parser::unit`,
|
|
`mixed::parse_with_profile`, the original admission helper, and this test's
|
|
`authored` setup. The rename planner is not on that active stack. Native system
|
|
symbol labels lack full OS debug symbols and should not be treated as precise
|
|
source attribution; the executable's Rust frames establish the setup path.
|
|
|
|
Independent evaluator review distinguishes the accepted planner-specific
|
|
requirement (small-stack comparison, success/drop and late refusal) from a
|
|
stronger full-pipeline stack claim. Prepare each fresh owner and externally
|
|
owned desired model on the normal test thread, then move the complete owner
|
|
into a scoped 128 KiB worker. That worker must invoke the planner, check exact
|
|
outcomes and destroy its plan/failure/consumed source. Desired remains an
|
|
external immutable borrow. All six deep/wide and success/collision/non-name
|
|
cases remain required, with unchanged profiles and expression counts.
|
|
|
|
This scoped evaluator remains pending runtime validation. It will not fix or
|
|
validate the previously failing combined parser/setup path on 128 KiB. Preserve
|
|
that limitation and the failed attempts; existing standalone admission/index
|
|
small-stack tests are separate evidence only.
|
|
|
|
## Final scoped result
|
|
|
|
Source `18073a6f2eabce83fc83997f094e331eec835a16` implements that scoped test.
|
|
All 17 focused tests pass, including all six 128 KiB planner cases. The full
|
|
246-name run completes with 230 passed and the same 16 inherited failures.
|
|
Existing standalone small-stack cases keep their prior outcomes. The new test
|
|
artifact is 42,081,792 bytes, SHA256
|
|
`2c8bd7b9a6adfda3f74b74bae00453b1b1348cbed47f04c8e8c1de9152899416`.
|
|
Strict core all-target Clippy passes; formatting retains the identical prior
|
|
failure bytes. These results establish the scoped planner behavior, not repair
|
|
of the separately recorded full-pipeline 128 KiB setup failure.
|