diff --git a/.claude/board/INTEGRATION_PLANS.md b/.claude/board/INTEGRATION_PLANS.md index 30adc2d59..35d5fd21d 100644 --- a/.claude/board/INTEGRATION_PLANS.md +++ b/.claude/board/INTEGRATION_PLANS.md @@ -1,3 +1,32 @@ +## 2026-09-03 — `probe-r2il-live-regfile-v1` (PROBE, GREEN 2026-08-26) — BACKFILLED INDEX ENTRY + +`.claude/plans/probe-r2il-live-regfile-v1.md`. The executable falsifier for +`r2il-machine-semantic-contract-v1` §7.8: a real 6502 routine, lifted to R2IL by +Ghidra's own SLEIGH spec and executed through `r2conc::SlabState` with machine +state bound to borrowed slabs, must produce architectural state identical to an +independently-written reference **on every field except `V`**. GREEN, 18/18, +seven disable runs red-then-green. `D-PRLR-1..5` minted in the same commit. + +The `V` exclusion is the probe's own FINDING, not a weakening (§6a): Ghidra's +6502 `ADC` assigns the unsigned carry to the signed-overflow flag, so on +`255 × 255` both sides compute `0xFE01` and agree on every other field while +Ghidra leaves `V=1` and a real 6502 leaves `V=0`. The exclusion is itself tested +two-sided (falsifier D7 — it must diverge on some pairs and agree on others), and +the product is compared in full on every pair. Calling the result plain +"byte-identical" — as the first version of this entry did — overstates what the +18 checks establish. + +Two results worth finding from the index rather than by reading 286 lines. **The +facet binding is a projection, not a byte-identity** — SLEIGH lays the 6502 out +across 55 bytes because each status flag is its own byte register, while the +semantic register file is 7; §7.8's V4 binding survives, restated correctly. +And **r2sleigh's CI has never run** (`total_count: 0`, ever), so every green here +is local — the same "a gate that never runs is not a gate" lesson tesseract-rs +recorded, found by checking rather than by being bitten. + +Its parent plan was indexed 2026-09-03 (#1155); this probe was the second +instance of the same untracked-plan defect, counted in #1156's census. + ## 2026-09-03 — `r2il-machine-semantic-contract-v1` (PLAN, 2026-08-25) — BACKFILLED INDEX ENTRY `.claude/plans/r2il-machine-semantic-contract-v1.md`. Answers *"wie soll die diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index ce8e994fd..40dc39b1e 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -1,3 +1,35 @@ +## probe-r2il-live-regfile-v1 (D-ids minted 2026-09-03; the plan shipped 2026-08-26) + +`.claude/plans/probe-r2il-live-regfile-v1.md`. The falsifier for the EXECUTABLE +HALF of `r2il-machine-semantic-contract-v1` §7.8's V4 space binding: it validates +the lift-and-execute path against borrowed slabs. It does **NOT** exercise a +projection from SLEIGH's layout into a 12-byte V3 facet register — it measures +the two layouts and concludes one is needed. **The projection is unbuilt and +unvalidated**; reading this row as "the V4 binding is covered" is the misreading +it is worded to prevent. Untracked since it landed and carrying no D-ids — one of +the 53 counted in +`ISS-PLAN-TRACKING-IS-UNENFORCED` (#1156), and the second instance of the same +defect as its parent plan (#1155). Ids are minted against sections that already +exist; no scope is added. + +| D-id | deliverable | status | +|---|---|---| +> **⚠ The mint is BOARD-ONLY, and that does not close #1156's root cause.** +> `D-PRLR-1..5` exist in this file; `grep -c "D-PRLR" .claude/plans/probe-r2il-live-regfile-v1.md` +> → **0**. `supersession_index.py` counts D-ids by scanning `.claude/plans/*.md`, +> so a board-only mint is invisible to its coverage column. #1156 named the root +> cause as *"a plan without a D-id is unaddressable"* — this PR makes the plan +> addressable FROM the board, it does not put ids in the plan. Same for +> `D-R2IL-1..5` (#1155). Writing the ids into the two plans is the real close and +> is deliberately not done here: it edits plan bodies, which both of those PRs +> declared out of scope. + +| D-PRLR-1 | §2 the three-leg validity answer: side A's semantics are Ghidra's own SLEIGH spec (not ours), side B written in enforced isolation, side C arithmetic ground truth external to both | **Shipped 2026-08-26** — the design that makes the differential meaningful rather than self-confirming | +| D-PRLR-2 | §3/§7 the probe itself: a real 6502 routine lifted to R2IL and executed through `r2conc::SlabState` against an independent reference, all fields except `V` (see §6a — the `V` divergence is the probe's own finding, and the exclusion is falsifier-D7 two-sided) | **GREEN 2026-08-26** — 18/18, **seven disable runs red-then-green**. Code: r2sleigh `crates/r2conc/tests/{live_regfile,mos6502_oracle}.rs`, feature `probe-6502` | +| D-PRLR-3 | §6 the measured facts (each row naming what produced it, none predicted) | **Measured** — 6502 memory is `SpaceId::Ram` not `Custom(n)`; SLEIGH's register space spans **55 bytes** because each status flag is its own byte register, while the semantic register file is **7 bytes** | +| D-PRLR-4 | §6's consequence for §7.8: the facet binding MUST be a **PROJECTION** of the register file, never a byte-identity with SLEIGH's layout | **Constraint measured + pinned two-sided; the projection itself is NOT built and NOT validated** — `the_sleigh_register_space_is_sparse_so_the_facet_binding_is_a_projection` fails if SLEIGH ever packs the 6502 into 12 bytes, forcing a re-measure instead of letting a stale note stand | +| D-PRLR-5 | §9 the gate finding: **r2sleigh's CI has never run** — `--all-features` would execute this probe, but the repo reports `total_count: 0` workflow runs, ever (the workflow targets an unregistered self-hosted runner) | **OPEN, not fixed** — every green in §6/§7 is a LOCAL run, and the same holds for the `r2conc` crate merged in r2sleigh PR #5. Switching to a hosted runner is an operator infra call (the job compiles SLEIGH specs for every architecture), deliberately not a drive-by | + ## r2il-machine-semantic-contract-v1 (BACKFILLED 2026-09-03 — the plan shipped 2026-08-25 with NO board tracking) `.claude/plans/r2il-machine-semantic-contract-v1.md` (1427 lines). Untracked