diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index 49964ee..1b43d90 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -7,6 +7,38 @@ --- +## 2026-06-25 — E-CLASSID-ENVELOPE-PARSER — V2/V3 (and value-schema/edge-codec) are classid-defined per file+consumer; ONE reusable envelope parser reads classid → registry → parse + +**Status:** CONJECTURE (`[H]` — the composed parser is operator-proposed, "to be wired"; the pieces are `[G]`/CODED). Operator-directed 2026-06-25. + +**The directive (operator example `0x1007`):** the **classid defines V2 vs V3 per file and per consumer** — the GUID-tail variant (V2 = `NodeGuid::new_v2` `leaf·family·identity` 3×u16, the `guid-v2-tail` feature; V3 = the `cascade_key` `(part_of:is_a)` 8:8 tile), AND the value-schema/facet (`Full`/`Compressed`/the E-VALUE-SLAB-FACET contained facet), AND the edge-codec flavor are ALL **resolved from the classid through the OGAR class registry**, never from a per-file format constant. This is OGAR P0 ("native/foreign discrimination lives in the `classid`, not a format constant") applied to the *envelope*. + +**Generation marker (operator, 2026-06-25): a leading `1` before the domain → `0x1007`.** Because the change is *extreme* (a whole new classid-resolved read path), the new-generation classids carry a **leading `1` ahead of the domain byte** (`0x07` OSINT → `0x1007`) so they self-identify at sight and the reusable parser routes legacy vs new-generation envelopes from the prefix alone — a higher cascade level on the classid (P0 "scale = the next cascade level, never field-widening"; RESERVE-DON'T-RECLAIM keeps the legacy zero-prefix space untouched, never reclaimed). It lives in the **classid** (the schema pointer, where versioning belongs) — NOT a version nibble in the GUID tail (the canon forbids that). The exact u32 placement (a high-bits marker vs a domain-field prefix) is the registry/canon's to pin. + +**The mechanism — one reusable, classid-driven envelope parser:** a single parser reads `classid → registry → {tail_variant, value_schema, edge_codec}` then parses the 512-byte envelope accordingly. One parser serves every consumer (q2 / woa-rs / medcare-rs / odoo-rs / openproject-nexgen-rs / …); no bespoke per-consumer parsing, no per-file version byte. It is the consumer-side realization of "classid is a schema pointer" (E-VALUE-SLAB-FACET) AND the single classid-late-bound read path that reconciles the slab↔parallel-`MailboxSoA` two-world seam — the one place the value is read. + +**The pieces exist (`[G]`/CODED); the composition is the `[H]` to-wire:** `classid_read_mode()` + `BUILTIN_READ_MODES` (the registry — with a minted class's mode layered in by **OGAR one level up**), `ClassView::value_schema`/`edge_codec_flavor` (the resolver), `NodeGuid::new_v2` (V2 tail, gated `guid-v2-tail`), `cascade_key` V3 (the part_of:is_a tile), `node_rows_from_le_bytes` (the zero-copy reader). The registry entry must gain the **`tail_variant` (V2/V3)** axis beside `ReadMode {value_schema, edge_codec}`; the reusable parser dispatches on the full set. Same pattern as `E-ACTIONHANDLER-RESOLVER` (the action daemon is a renderer over the classid keyspace) — now the envelope **parser** is one too. + +**Gate / next:** wiring the reusable parser + the registry's `tail_variant` axis is the build follow-up (probe-first per OGAR discipline); the lance-graph §6 panels arbitrate the value-schema/facet half. Cross-ref: E-VALUE-SLAB-FACET, E-ACTIONHANDLER-RESOLVER, D-VALFACET, D-ENVPARSE, D-IDENTITY-PIN (the new_v2/V2 LEAF audit, OGAR #118); lance-graph `soa-value-tenant-migration-v1-harvest.md` §5 + `canonical_node.rs` (`new_v2` gated, `classid_read_mode`). + +--- + +## 2026-06-25 — E-VALUE-SLAB-FACET — the value-slab's homogeneous closure IS OGAR keyspace canon: the contained 16-byte `classid|helix|CAM-PQ` facet (lance-graph value-tenant harvest confirms) + +**Status:** FINDING (`[G]` — the lance-graph value-tenant facts, code-confirmed) + CONJECTURE (`[H]` — the facet-as-closure, operator-proposed 2026-06-25, gated F-1 + F-code; pending the lance-graph §6 sign-off panels). + +**Units pinned first (theorem-checker rule 0):** 48 bit = 6 byte. The facet = `facet_classid(4 byte) + helix-place(6 byte) + CAM-PQ(6 byte) = 16 byte = 128 bit` — the SAME width as the canonical key (32 hex = 128 bit = 16 byte). + +The lance-graph Phase-1 value-tenant harvest (`soa-value-tenant-migration-v1-harvest.md`) asked whether the 480-byte value slab homogenizes. **It does not** — 9 of the 10 `ValueTenant`s are irreducibly heterogeneous (identity / scalars / bitfield / cursor) → KEEP, with Qualia i4-16D + the future thinking-style i4-32D DEFERRED for substrate validation. So §8 homogeneity reduces to "classid is a schema pointer" — OGAR's own P0. **The closure exists as ONE contained facet** the operator named: `facet_classid(4) | helix-place(6) | CAM-PQ(6)` — identity (helix place/residue, the frozen ruler) ⊥ search (CAM-PQ) ⊥ schema (facet_classid). This is **OGAR keyspace canon restated in the value**: the same recurring **6×256 CAM-PQ** shape as the key path (D-TILE256) and the same place/residue split as D-PHASE — now confirmed from the consumer side. + +**Precision point (so it does not dilute):** the KEY's path (HEEL/HIP/TWIG) is a 6-byte CAM-PQ centroid-tile **address** (D-TILE256); the contained VALUE facet's 6-byte CAM-PQ is the **content/search** code, its 6-byte helix the place/residue. Same 6×256 shape, different role — address in the key, content in the value. The facet wants the **6-byte canonical CAM-PQ**, NOT lance-graph's 16-byte `TurbovecResidue` (turbovec 32×4-bit) — a width decision for the §6 panels. I-VSA-IDENTITIES-clean: helix ∥ CAM-PQ in disjoint byte ranges, concatenated, never bundled. Layout-preserving — a `classid → ClassView` reading, no new value-schema variant; it does not touch the GUID canon. + +**Second finding — the two-world seam (`[G]`):** lance-graph carries the value tenants in TWO disjoint SoAs — the canonical `NodeRow.value` slab and a parallel `MailboxSoA` of separate columns; only `entity_type ≡ class_id` is shared, and 6/10 slab tenants have no live producer. Reconciling them is the consumer-side near-term work; OGAR's producer side (`ogar-vocab` codebook / `classid → ReadMode` mint) stays the single source either world resolves through. + +Cross-ref: lance-graph `soa-value-tenant-migration-v1-harvest.md`; DISCOVERY-MAP `D-VALFACET`; canon D-TILE256 / D-PHASE / D-KEYKV. + +--- + ## 2026-06-24 — E-ACTIONHANDLER-RESOLVER — the action daemon IS a renderer over the classid keyspace: transport, class, executor, guard, RBAC all fall out of the GUID, late **Status:** FINDING (`[G]`, 19 tests). diff --git a/docs/DISCOVERY-MAP.md b/docs/DISCOVERY-MAP.md index a7c1597..54c3bbb 100644 --- a/docs/DISCOVERY-MAP.md +++ b/docs/DISCOVERY-MAP.md @@ -244,6 +244,8 @@ two halves of a cell. ADR‑026 names the cascade that ties them. | D‑WHP | **bipolar phase = Walsh‑Hadamard on VSA**: signed (±1) phase makes the cascade the WH transform of the address tree; **sign = XOR (`vsa_bind`), magnitude = `vsa_bundle`** — the TWO‑ALGEBRA rule (raw‑XOR on magnitudes breaks Markov, I‑SUBSTRATE‑MARKOV); superposition + unbind‑by‑role‑key; N ≤ √d/4 IS the substrate's uncertainty principle; roundtrip bit‑exact; "quantum‑like" = the bundling algebra, NOT measurement randomness | H + probes (WHP‑1..4) | CANON‑pin | `CLAUDE.md` P0; ndarray §4b; lance‑graph §7 + E‑WHP‑BIPOLAR‑1 | D‑PHASE, D‑MANTISSA | | D‑DELEG‑INHERIT (né D‑OTP‑INHERIT) | DO‑axis behavior resolution = **prototype‑chain delegation** (Self, Lieberman 1986) carried ON the supervision topology — **NOT an OTP behavior** (supervisors restart, they don't dispatch); diamonds have NO prefix encoding (tree relation) → ordered `mixins` traversal is the absent second mechanism; Odoo = C3 over `LastOrderedSet` install order, not naive source C3 | H + gate F1 (chain + diamond fixture) | EPIPHANY | INTEGRATION‑MAP §3 + F1 | D‑CANON‑GUID, `[per rt]` state_machine | | D‑IDENTITY‑PIN | lance‑graph `NodeGuid` (#480) = the **wrapper carving** of the canon — groups 1–2 + 24‑bit `local` already match exactly; Phase B audits groups 3–4 yielding all eight nibbles to HIP/TWIG; `IDENTITY_LAYOUT_VERSION` stamp = the version gate | G (wrapper) / H (group 3–4 audit) | CODED (wrapper) | lance‑graph `identity.rs`; INTEGRATION‑MAP S1 | D‑CANON‑GUID | +| **D‑VALFACET** | **value‑slab homogeneous closure = the contained 16‑byte facet** `facet_classid(4)+helix‑place(6)+CAM‑PQ(6)` — identity⊥search⊥schema; the value‑side restatement of canon (key path = 6‑byte CAM‑PQ **address** D‑TILE256; this facet's CAM‑PQ = the **content/search** code; helix = place/residue D‑PHASE); lance‑graph value‑tenant harvest CONFIRMS — 9/10 slab tenants don't homogenize (KEEP/DEFER, only HelixResidue matches) + the slab↔parallel‑MailboxSoA two‑world seam | G (harvest facts) / H (facet closure, gated F‑1+F‑code) | EPIPHANY | `.claude/board/EPIPHANIES.md` E‑VALUE‑SLAB‑FACET; lance‑graph `soa-value-tenant-migration-v1-harvest.md` | D‑TILE256, D‑PHASE, D‑KEYKV, D‑CANON‑GUID | +| **D‑ENVPARSE** | **classid defines V2/V3 + value‑schema + edge‑codec per file+consumer; ONE reusable envelope parser reads `classid → registry → parse`** (operator `0x1007` — a leading‑`1` generation marker before the domain self‑identifies new‑gen envelopes; versioning in the classid/schema‑pointer, never a GUID‑tail nibble) — no per‑file format byte; the single classid‑late‑bound read path that also reconciles the two‑world seam; the registry entry gains a **`tail_variant` (V2/V3)** axis beside `ReadMode {value_schema, edge_codec}`; same shape as D‑ACTIONHANDLER‑RESOLVER (renderer over the classid keyspace) | G (pieces: classid_read_mode / ClassView / new_v2 / cascade_key‑V3 / node_rows_from_le_bytes) / H (the composed parser, to‑wire) | EPIPHANY→to‑wire | `.claude/board/EPIPHANIES.md` E‑CLASSID‑ENVELOPE‑PARSER; lance‑graph `canonical_node.rs` | D‑VALFACET, D‑IDENTITY‑PIN, D‑KEYKV, D‑TILE256 | ---