From a43c5323afb8924369d7572b85d2dd83ebca92c4 Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Sat, 20 Jun 2026 18:28:27 +0200 Subject: [PATCH] =?UTF-8?q?docs(roadmap):=20VCR-DBG-001=20=E2=86=92=20appr?= =?UTF-8?q?oved,=20Tier-1=20feature-loop=20plan=20for=20v0.12.0=20(first?= =?UTF-8?q?=20North-Star=20feature=20release)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User selected DWARF Tier-1 .debug_line as the first dedicated feature-loop release (lowest flight-path risk: additive non-loadable sections ⇒ .text + frozen fixtures bit-identical, no silicon gate). De-risked the core crux via a spike: synth's source_line is the wasm OP INDEX, not the byte-offset DWARF keys on, and the decoder discards the offsets wasmparser exposes — so the bridge is op-index → byte-offset. Records the 5-step oracle-gated plan: (1) additive decoder byte-offset side-table (frozen-safe enabling step); (2) read wasm DWARF via gimli (new prod dep + MODULE.bazel pin); (3) compose ARM-addr → wasm-op → byte-offset → source; (4) emit non-ALLOC .debug_line; (5) oracle (addr→line correct + .text byte-identical) → cut v0.12.0. status proposed→approved. Docs only — frozen-fixture-safe. Co-Authored-By: Claude Opus 4.8 --- artifacts/verified-codegen-roadmap.yaml | 34 +++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/artifacts/verified-codegen-roadmap.yaml b/artifacts/verified-codegen-roadmap.yaml index 097ab6eb..8f0f6e23 100644 --- a/artifacts/verified-codegen-roadmap.yaml +++ b/artifacts/verified-codegen-roadmap.yaml @@ -1112,8 +1112,38 @@ artifacts: DWARF is additive non-loadable sections ⇒ `.text` and the frozen fixtures stay bit-identical. Coordinate the line/var encodings with meld so source → meld → synth → on-target debugger composes end-to-end. - status: proposed - tags: [toolchain, dwarf, debuggability, elf, meld-coordination, gale-adjacent, synth-394] + + FEATURE-LOOP PLAN — Tier 1, release v0.12.0 (the FIRST North-Star FEATURE + release; user-selected 2026-06-20). Chosen first because additive + non-loadable sections ⇒ ZERO flight-path risk (no re-freeze, no silicon + gate) while delivering real integrator value + exercising the + source-to-object provenance spine. DE-RISKED (spike 2026-06-20): the core + crux is that synth's `source_line` is the wasm OP INDEX + (instruction_selector.rs:5428 `wasm_ops.iter().enumerate()`), NOT the wasm + code BYTE-OFFSET that DWARF .debug_line keys on; and the decoder + (wasm_decoder.rs decode_function_body:445) DISCARDS the byte offsets + wasmparser exposes. So the bridge is wasm-op-index → wasm-byte-offset. + Steps, each oracle-gated: + (1) DECODER byte-offset side-table: capture per-op wasm code byte offset + in decode_function_body (wasmparser OperatorsReaderWithOffsets) → + additive `op_offsets: Vec` on FunctionOps. Codegen IGNORES it ⇒ + .text byte-identical ⇒ frozen fixtures bit-identical (the first, + safe, enabling step). + (2) READ the input wasm DWARF: extract `.debug_*` custom sections + (wasmparser, already a dep) + parse `.debug_line` (gimli, NEW + production dep ⇒ deliberate MODULE.bazel pin + repin — in-scope for a + feature loop) → (wasm-byte-offset → file:line) rows. + (3) COMPOSE: ARM-text-offset → wasm-op-index (source_line) → wasm-byte-offset + (step 1) → file:line (step 2). Build the address→line table. + (4) EMIT the ARM/RV32 `.debug_line` (+ minimal `.debug_info`/`.debug_abbrev`/ + `.debug_str`) as non-ALLOC ELF sections; ensure they survive the + relocatable host-link path. + (5) ORACLE: parse the output ELF's `.debug_line`, assert a known + ARM address resolves to the correct source line; AND assert `.text` + byte-identical to the no-DWARF build (the load-bearing safety + property). Then cut v0.12.0. + status: approved + tags: [toolchain, dwarf, debuggability, elf, meld-coordination, feature-loop, release-v0.12.0, synth-394] links: - type: derives-from target: VCR-001