diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index 8bef0d94..3d74b326 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -1,3 +1,22 @@ +## 2026-07-04 — E-V1-TAIL-FORBIDDEN-V3-IS-CONTENT-BLIND-1: the flat contiguous-u24 tail (`family:u24 ++ identity:u24`) is V1-LEGACY, FORBIDDEN for new units; V3 is the content-blind 4+12 facet whose 12B the ClassView projects as axis-grouped byte rails — migration of residues MANDATORY +**Status:** RULING (operator, 2026-07-04). Specializes/enforces `E-V3-FACET-4-PLUS-12` (operator-locked 2026-07-02) with an explicit *forbidding* + a *mandatory-migration* stamp. Reverses the older 2026-06-10 OGAR P0 pin (u24+u24) and this repo's own 2026-06-13 CANON block (which still document the flat tail) — latest operator word wins; both are regraded in place, append-only, never deleted. + +**The shape (settled after a 4-turn operator correction of the model's stale framing):** +- **V1 (FORBIDDEN for new):** key tail bytes 10..16 = `family(u24) ++ identity(u24)` — two contiguous flat integer fields, **no axis**. `NodeGuid::new` / `family()` / `identity()` / `GuidParts`. +- **V2:** `leaf(u16)·family(u16)·identity(u16)` — three flat u16s (the deprecated integer read). `new_v2` / `family_v2()`. +- **V3 (REQUIRED for new):** the **content-blind 4+12 facet** — `classid(4) + 12-byte payload`. The 12B is a **dumb byte register**; the classid's **ClassView projects it and holds every reading at once**, picking per read. Sanctioned carves (le-contract §3, `E-V3-FACET-4-PLUS-12`): `6×(u8:u8)` rails (`part_of:is_a` / `X:Y` / `palette256:palette256` / `segment:taxonomy` / typed) · `4×(u8:u8:u8)` SPO triplets · `3×(u8:u8:u8:u8)` odoo quads. **`u8:u8` is two separate bytes — NEVER widened to u16/u24.** Byte accounting: `6×2 = 4×3 = 3×4 = 12`. + +**Why the u24 tail is forbidden, not merely "old":** a flat u24 has **no axis** — it cannot carry a rail (`X:Y`). It is not a width variant of the facet; it is a structurally different (retired) shape. The model's earlier "escalating catalogue, pick a layout" framing was WRONG: V3 is not a mint-time choice among L1–L8, it is one content-blind register the ClassView reads polymorphically (le-contract §2 slot-purity: "the SoA is dumb bytes; the class makes them meaningful"). + +**Conformance sweep (this session, 3 read-only audits):** +- **ruff:** already V3 — `ruff_spo_address::Facet` = `classid(4) + 6×(is_a:part_of)`; harvest crates emit string SPO triples only. **No V1. No-op.** +- **OGAR:** *code* already V3 (`ogar-from-ruff` via `ruff_spo_address::Facet`) or the 8:8 `ogar-fma-skeleton::Guid` (classid 2→4 open, F-2); zero u24 emit. Only OGAR *docs* pinned/defended V1 → superseded this session (OGAR PR: `CLAUDE.md` P0 regraded, `NODEGUID-CANON-AUDIT` F-3 inverted, `DISCOVERY-MAP` `D-V1-TAIL-RETIRED`). +- **lance-graph:** the only live V1 producers are **2 pre-existing sites** — `contract/src/ocr.rs:121` (#496 OCR keystone) + `contract/src/aiwar.rs:104` — both hardcode `NodeGuid::new` (V1) instead of `mint_for(classid_read_mode(c).tail_variant,…)`. Behaviorally fine today (V1-default classids) but MANDATORY to migrate when their output paths move onto a V3-marked classid. Tracked: `ISSUES.md` `ISS-V1-TAIL-RESIDUE`. + +**Mandatory follow-ups (deferred timing, not deferred obligation):** migrate `ocr.rs:121` + `aiwar.rs:104` onto `mint_for`/V3-marked classids; a `/v3-audit` grep-forbid of new `NodeGuid::new(` in non-test code; regrade this repo's CLAUDE.md CANON block (done in the same PR as this entry); OGAR promote `V3-TRANSPILER-ADR` RFC→adopted + reconcile `ogar-fma-skeleton::Guid` classid 2→4. + +**Cross-refs:** `E-V3-FACET-4-PLUS-12` + `soa_layout/le-contract.md` §2/§3 (operator-lock), `E-V3-DUAL-SCHEMA-0x1000-IS-PERMANENT-1`, `canonical_node.rs` (`TailVariant::{V1,V2,V3}`, `mint_for`, `new`/`family()`/`identity()` V1 surface), `ISSUES.md` `ISS-V1-TAIL-RESIDUE`, OGAR `D-V1-TAIL-RETIRED` + `NODEGUID-CANON-AUDIT` F-3, `ruff_spo_address::Facet`. Supersedes the flat-tail framing in this repo's CLAUDE.md CANON block + OGAR CLAUDE.md P0 (both regraded, append-only). + ## 2026-07-04 — E-V3-DEEPNSM-IS-THE-ENCODER-NOT-A-MIGRATION-1: DeepNSM does not migrate ONTO V3 — it is the trained encoder that fills tenants V3 already reserved; the static convergence is PROVEN (#624 P0–P5), only the MEMORY layer is doc-only **Status:** FINDING (mapper-sweep synthesis — 4 parallel contract mappers over deepnsm+COCA / V3 substrate / representation zoo / arm-discovery+grammar, all file:line-grounded this session; NOT an operator ruling, NOT a lock — a scoreboard + a reframe, collapses no type, retires no enum). Specializes `E-V3-TENANTS-ALREADY-EXIST-WIRE-DONT-INVENT` to the DeepNSM question the operator raised ("migrate everything of DeepNSM to V3 … check convergence with cam_pq 48-bit vs 6×palette256² vs causaledge64 vs SPO nars 2³ … episodic witness / AriGraph basins"). diff --git a/.claude/board/ISSUES.md b/.claude/board/ISSUES.md index a6df757d..e842b5f2 100644 --- a/.claude/board/ISSUES.md +++ b/.claude/board/ISSUES.md @@ -1,5 +1,19 @@ # Issues Log — Open + Resolved (double-entry, append-only) +## 2026-07-04 — ISS-V1-TAIL-RESIDUE — two pre-existing `NodeGuid::new` (V1 `u24+u24`) mint sites must migrate to V3 (`mint_for` / V3-marked classid) + +**Status:** OPEN — **MIGRATION MANDATORY** (operator ruling 2026-07-04, `E-V1-TAIL-FORBIDDEN-V3-IS-CONTENT-BLIND-1`). Deferred in *timing*, not in *obligation*; NOT to be churned into unrelated PRs. Owner: whoever next moves each output path onto a V3-marked classid. + +**The residue.** The flat V1 tail `family(u24) ++ identity(u24)` is forbidden for new units; V3 is the content-blind `classid(4)+12B` facet (`E-V3-FACET-4-PLUS-12`). A read-only conformance audit of the whole repo found the V1 tail *produced* at exactly two live sites, both hardcoding `NodeGuid::new(...)` instead of the canonical `mint_for(classid_read_mode(c).tail_variant, …)` dispatch: +- `crates/lance-graph-contract/src/ocr.rs:121` — the #496 OCR→`NodeRow` keystone. +- `crates/lance-graph-contract/src/aiwar.rs:104` — the aiwar `NodeRow` builder. + +Both currently target V1-default/OSINT classids, so they are **behaviorally correct today** — the defect is that they bypass the `mint_for` dispatch that is supposed to make a class's V1→V3 flip a one-line registry change. Everything else in the repo is either a test (`#[cfg(test)]`) or a legitimate legacy-compat *read* (`family()`/`identity()` fallback arms in `soa_graph.rs`, `hhtl.rs` prefix routing) — reads stay, per `I-LEGACY-API-FEATURE-GATED`; only new *mints* are forbidden. + +**Resolution (mandatory, when each output path is next touched).** Route each site through `mint_for(classid_read_mode(classid).tail_variant, …)` with a V3-marked classid; add a `/v3-audit` grep that forbids new `NodeGuid::new(` in non-test code so the guard is mechanical. Blocker to note: `mint_for`/`new_v2` sit behind `guid-v2-tail` (default-off) — un-gate `mint_for` (V1 arm unconditional, V2/V3 under the feature) before pointing production mints at it. + +**Cross-ref:** `EPIPHANIES.md` `E-V1-TAIL-FORBIDDEN-V3-IS-CONTENT-BLIND-1`, `E-V3-FACET-4-PLUS-12`, `canonical_node.rs` (`TailVariant`, `mint_for`, `new`), OGAR PR (canon supersession) + `D-V1-TAIL-RETIRED`. + ## 2026-07-01 — ISS-Q2-CASCADE3-NIBBLE-ANCESTRY — q2 `cascade3` FNV bytes are byte-hierarchical but NOT nibble-hierarchical; HHTL routing over bake mints is sound only at whole-tier granularity **Status:** OPEN (falsifier specified, not yet run — q2 push gate WAIVED 2026-07-02, "temporary precaution … you can unarm that"; runnable now, D-VCW-5). Owner: diff --git a/CLAUDE.md b/CLAUDE.md index fc72fc3b..157405d2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1317,6 +1317,26 @@ All findings in `.claude/knowledge/session_autocomplete_cache.md`. > Operator-locked this session. Append-only. Wrapper `NodeGuid` (#480) is audited > against THIS, never the reverse. No RFC-9562 ceremony in the hot key. +> **⊘ SUPERSEDED — MIGRATION MANDATORY (operator, 2026-07-04).** The +> `10..13 family (u24)` / `13..16 identity (u24)` tail below — two +> contiguous **u24** bit-groupings (`family:u24 ++ identity:u24`) — is +> **V1-LEGACY and forbidden for new units.** A flat u24 has no axis: it +> cannot carry a rail (`X:Y`), so it is a structurally retired shape, not a +> width variant. Every new unit is the **V3 content-blind 4+12 facet** +> (`classid(4) + 12-byte payload`, operator-locked `E-V3-FACET-4-PLUS-12`, +> 2026-07-02; ruling `E-V1-TAIL-FORBIDDEN-V3-IS-CONTENT-BLIND-1`, +> `.claude/board/EPIPHANIES.md`). The 12B is a **dumb byte register the +> ClassView projects** — it holds every sanctioned reading at once, carved +> per `.claude/v3/soa_layout/le-contract.md` §3 as `6×(u8:u8)` rails / +> `4×(u8:u8:u8)` SPO triplets / `3×(u8:u8:u8:u8)` odoo quads +> (`6·2 = 4·3 = 3·4 = 12`). **`u8:u8` = two separate bytes, NEVER widened +> to u16 or u24.** Reads of the u24 tail on existing V1 rows survive +> unchanged (I-LEGACY-API-FEATURE-GATED); only new **mints** are forbidden +> — route them through `mint_for(classid_read_mode(c).tail_variant, …)`, +> never `NodeGuid::new` (V1). Append-only: the pin below is NOT deleted; +> read it as the retired V1 tail. Live residue tracked in +> `.claude/board/ISSUES.md` `ISS-V1-TAIL-RESIDUE`. + **Node = 4096 bit = 512 byte:** `key(16) | edges(16) | value(480)`. **Key (16 byte, little-endian):** @@ -1325,11 +1345,12 @@ All findings in `.claude/knowledge/session_autocomplete_cache.md`. 4..6 HEEL (u16) ┐ 6..8 HIP (u16) ├ 3 cascade tiers (HHTL path) 8..10 TWIG (u16) ┘ -10..13 family (u24) ┐ trailing 6 bytes = basin-local key -13..16 identity (u24) ┘ (masked load after the trie binds the prefix) +10..13 family (u24) ┐ V1-LEGACY tail — read-only; new units mint the +13..16 identity (u24) ┘ V3 4+12 facet (see ⊘ supersession above) ``` `local_key()` = bytes 10..16 (family ++ identity), the only discriminator once -the prefix is resolved. +the prefix is resolved. **[V1-LEGACY — reads only; new mints use the V3 +content-blind facet.]** **Edge block (16 byte):** 12 in-family + 4 out-of-family, one byte per slot. Canonical, NOT mandatory — always reserved (zeroed when unused), never shrunk; a