Follow-up to #418, whose v1 CLI stepper landed in #538. The original issue's blocked tail:
v2 — locals as first-class scopes. A records now fire at every scope (they ride the same hooks as the temporal history) but carry the name only — same-named bindings from different scopes merge into one stream, so the stepper (and state_at) can't distinguish a function-local i from the top-level one. v2 is a scope/frame qualifier on the record (tape-encoding change → TRACE_FORMAT_VERSION bump + compat decision per #411; measure the record-volume cost — the trace compile-gate discipline applies).
v3 — src/eigsdap.c, a DAP server over stdio (blocked on v2): reuse eigenlsp's JSON plumbing; stepBack/reverseContinue driving the same tape model as --step; variables pane with trajectory child nodes; launch config in the canonical VS Code extension; tests/test_dap.py protocol-pinned like test_lsp.py.
The v1 stepper's tape model (position = L-record index, bindings = A-record fold, labels via the exported observer_slot_record_value) is the substrate v3 wraps — the DAP server is a protocol skin over step.c's internals, so consider extracting its Tape struct to a header when v3 starts.
🤖 Generated with Claude Code
Follow-up to #418, whose v1 CLI stepper landed in #538. The original issue's blocked tail:
v2 — locals as first-class scopes. A records now fire at every scope (they ride the same hooks as the temporal history) but carry the name only — same-named bindings from different scopes merge into one stream, so the stepper (and
state_at) can't distinguish a function-localifrom the top-level one. v2 is a scope/frame qualifier on the record (tape-encoding change → TRACE_FORMAT_VERSION bump + compat decision per #411; measure the record-volume cost — the trace compile-gate discipline applies).v3 — src/eigsdap.c, a DAP server over stdio (blocked on v2): reuse eigenlsp's JSON plumbing; stepBack/reverseContinue driving the same tape model as
--step; variables pane with trajectory child nodes; launch config in the canonical VS Code extension; tests/test_dap.py protocol-pinned like test_lsp.py.The v1 stepper's tape model (position = L-record index, bindings = A-record fold, labels via the exported observer_slot_record_value) is the substrate v3 wraps — the DAP server is a protocol skin over step.c's internals, so consider extracting its Tape struct to a header when v3 starts.
🤖 Generated with Claude Code