Skip to content

Commit 40ccdc7

Browse files
committed
docs(debt): D-555 re-sweep — 6 findings -> 2 after the D-556 fix; remaining pair diagnosed (vm loc-fidelity fallback vs print.zig's intended caret form)
1 parent 6abb9ee commit 40ccdc7

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

‎.dev/debt.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ active:
3535
barrier: "FIXED for the reported class — keep open until the D-555 re-sweep (check_vm_parity.sh) confirms which of the 6 findings cleared, then discharge with the sweep numbers."
3636
last_reviewed: "2026-07-07"
3737
- id: "D-555"
38-
status: "RE-NARROWED 2026-07-06 (same day): finding (1) watch_recursion SEGFAULT is FIXED — the ADR-0157 native-stack guard (threadlocal stack_base anchor + 6MiB budget) existed ONLY in vm.zig; the tree_walk arm is now ported (per-node check in eval; a threadlocal read + two compares). SIGSEGV -> catchable stack_overflow, all watch/validator/reducer reentry cases green on BOTH backends. The e2e 500-deep legit-recursion cases were vm-shaped: tree_walk pays ~30KB native per HOF step / ~13KB per direct step (ReleaseSafe), so 500 PHYSICALLY exceeds the 6MiB budget (pre-guard: raw SIGSEGV) — cases (6)/(7) are now backend-aware (100/300 deep on tree_walk; --version gained a \", tree_walk\" marker for detection, vm banner unchanged). FORWARD: raising tree_walk depth to clj-like levels needs build.zig stack_size + an ADR-0157 budget amendment (depth-2) — take up if the oracle depth becomes limiting. REMAINING (4 findings): (2) phase16_gc_torture dies; (3) phase14_symbol_metadata sym_meta_gc_survives nil-want-1 (GC rooting gap, tree_walk-only); (4) phase14_seq_helpers2 interleave_large got-empty (possibly the SAME budget physics on a deep lazy realize — triage vs a rooting bug); (5) phase15_dynamic_var guard + (6) phase15_require_fs missing, both got-2-want-1 (exit-code shaped). ORIGINAL: six e2e fail on -Dbackend=tree_walk (D-553 first sweep), corpus green, F-012 oracle green."
38+
status: "SWEEP RE-RUN 2026-07-07 (post-D-556 root-cause fix): 6 findings -> 2. CLEARED by the persist-analysis-roots + conservative-scan arc: (1) watch_recursion segfault [the ADR-0157 tree_walk guard], (2) phase16_gc_torture, (3) symbol_metadata sym_meta_gc_survives, (4) seq_helpers2 interleave_large — all were the D-556 GC family. REMAINING 2 (both the SAME shape, not memory-unsafe): phase15_dynamic_var `guard` + phase15_require_fs `missing` expect `grep -c <message>` == 1 but tree_walk prints 2 — DIAGNOSED: print.zig's INTENDED error form is header+message THEN a source window with `^--- <message>` caret (message appears twice; print.zig's own unit test pins that form); the vm loses the SourceLocation for these errors and falls back to header+message only (1 occurrence), and the e2e expectations were written against the vm's DEGRADED form. Fix = restore loc fidelity on the vm path for these error classes (or consciously pin the fallback) + update the two e2e expectations; then the sweep is CLEAN and D-555 discharges. Cadence follow-up: wire check_vm_parity.sh into the nightly CI leg + Phase-boundary list. PRIOR: six findings from the first sweep (see history in this row)."
3939
category: "runtime"
4040
barrier: "none — deterministic repros in hand. Start with the phase15_watch_recursion SEGFAULT (memory safety) and the two GC-related fails (torture + symbol-meta) — likely a tree-walk-only rooting gap; the exit-code pair last (may be harness-shaped)."
4141
last_reviewed: "2026-07-06"

0 commit comments

Comments
 (0)