docs(canon): value-slab facet closure + classid-driven envelope parser (V2/V3, 0x1007 gen marker)#128
Conversation
…nt harvest confirms OGAR keyspace canon The lance-graph Phase-1 value-tenant harvest (soa-value-tenant-migration-v1-harvest.md) confirms, from the consumer side, that the 480-byte value slab's homogeneous closure is the operator's contained 16-byte facet facet_classid(4) | helix-place(6) | CAM-PQ(6) — the value-side restatement of OGAR keyspace canon (key path = 6-byte CAM-PQ address, D-TILE256; this facet's CAM-PQ = the content/search code; helix = place/residue, D-PHASE). Units pinned (48 bit = 6 byte; 16 byte = 128 bit = the key width). The rest of the slab does NOT homogenize (9/10 tenants KEEP/DEFER) — the honest non-closure outcome — and the value tenants live in two disjoint SoAs (canonical NodeRow.value vs parallel MailboxSoA). EPIPHANIES E-VALUE-SLAB-FACET ([G] harvest facts + [H] facet closure, gated F-1+F-code, pending lance-graph §6 panels); DISCOVERY-MAP D-VALFACET. Doc-only, append-only. Claude-Session: https://claude.ai/code/session_01TANd15SECEb1Gm4cpaRVD9
…, 0x1007 generation marker
Records the operator-directed mechanism on top of the value-tenant harvest: the classid
(resolved through the OGAR class registry) defines V2 vs V3 per file and per consumer
(V2 = NodeGuid::new_v2 tail; V3 = cascade_key part_of:is_a tile), plus the value-schema/
facet and edge-codec — never a per-file format constant. ONE reusable envelope parser
reads classid -> registry -> {tail_variant, value_schema, edge_codec} -> parse; one read
path for all consumers, which is also the seam that reconciles the slab<->MailboxSoA
two-world finding. The pieces are CODED (classid_read_mode / ClassView / new_v2 /
cascade_key-V3 / node_rows_from_le_bytes); the composed parser + the registry tail_variant
axis are the to-wire [H].
Generation marker: because the change is extreme, new-gen classids carry a leading 1 before
the domain (0x07 OSINT -> 0x1007) so they self-identify and the parser routes legacy vs
new-gen from the prefix alone — versioning in the classid/schema-pointer, never a GUID-tail
nibble; RESERVE-DON'T-RECLAIM leaves the legacy zero-prefix space untouched.
EPIPHANIES E-CLASSID-ENVELOPE-PARSER ([H], operator-directed); DISCOVERY-MAP D-ENVPARSE.
Doc-only, append-only.
Claude-Session: https://claude.ai/code/session_01TANd15SECEb1Gm4cpaRVD9
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 339cf6b665
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| ## 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. |
There was a problem hiding this comment.
Restore required EPIPHANIES metadata
.claude/AGENTS.md requires every EPIPHANIES entry to have a **Scope:** line and a separate **Cross-ref:** line, but the two newly appended entries go straight from **Status:** into the body and inline/plain-text the cross-reference. Because this log is append-only and entry bodies become immutable after publication, leaving the new canon records outside the required shape makes future indexing/corrections inconsistent; add the required metadata while these entries are still part of the proposed change.
Useful? React with 👍 / 👎.
…x P2 #128 follow-up) AGENTS.md L114-123 requires each EPIPHANIES entry to carry a **Scope:** line (after Status:) and a separate **Cross-ref:** line. E-VALUE-SLAB-FACET and E-CLASSID-ENVELOPE-PARSER (merged in #128) omitted the Scope: line and inlined the cross-ref. Adds the two Scope: lines and promotes the inline cross-refs to **Cross-ref:** lines. Format-only — bodies, dates, claims, and grades unchanged. Doc-only, append-only. Claude-Session: https://claude.ai/code/session_01TANd15SECEb1Gm4cpaRVD9
docs(canon): conform new EPIPHANIES entries to AGENTS.md format (Codex P2 #128 follow-up)
What
Doc-only OGAR canon record (DISCOVERY-MAP + EPIPHANIES, append-only). Two findings from the lance-graph value-tenant harvest (
soa-value-tenant-migration-v1-harvest.md), recorded producer-side, plus the operator's classid-driven envelope-parser mechanism.1 — the value-slab homogeneous closure IS OGAR keyspace canon (
E-VALUE-SLAB-FACET/D-VALFACET)The harvest asked whether lance-graph's 480-byte
NodeRow.valueslab homogenizes. It does not — 9 of the 10ValueTenants are irreducibly heterogeneous → KEEP, with Qualia i4-16D + the future thinking-style i4-32D deferred for substrate validation. So §8 reduces to "classid is a schema pointer" — OGAR's P0. The closure exists as ONE contained facet the operator named:— the value-side restatement of OGAR canon: the same recurring 6×256 CAM-PQ as the key path (
D-TILE256), the same place/residue split asD-PHASE. Precision kept sharp: the key path is a 6-byte CAM-PQ address; this facet's 6-byte CAM-PQ is the content/search code — same shape, different role. It wants the 6-byte canonical CAM-PQ, NOT lance-graph's 16-byteTurbovecResidue. I-VSA-IDENTITIES-clean (disjoint byte ranges, never bundled); layout-preserving (aclassid → ClassViewreading, no value-schema variant — the GUID canon is untouched).2 — classid-driven reusable envelope parser (
E-CLASSID-ENVELOPE-PARSER/D-ENVPARSE)Operator-directed. The classid (via the OGAR class registry) defines V2 vs V3 per file and per consumer — V2 =
NodeGuid::new_v2leaf·family·identity; V3 = thecascade_key(part_of:is_a)8:8 tile — plus the value-schema/facet and edge-codec. Never a per-file format constant (OGAR P0 applied to the envelope). One reusable envelope parser readsclassid → registry → {tail_variant, value_schema, edge_codec} → parse— one read path for every consumer, which is also the single seam that reconciles the slab↔parallel-MailboxSoAtwo-world finding. Same shape asE-ACTIONHANDLER-RESOLVER(renderer over the classid keyspace) — now the envelope parser is one too.The pieces are CODED (
classid_read_mode/ClassView/new_v2/cascade_key-V3 /node_rows_from_le_bytes); the composed parser + the registry's newtail_variantaxis are the[H]to-wire.Generation marker (operator): because the change is extreme, new-generation classids carry a leading
1before the domain (0x07OSINT →0x1007) so they self-identify and the parser routes legacy vs new-gen from the prefix alone — versioning in the classid / schema-pointer, never a GUID-tail nibble; RESERVE-DON'T-RECLAIM leaves the legacy zero-prefix space untouched.Discipline
[G]for the harvest's code facts + the existing pieces;[H]for the facet-as-closure (gated F-1 + F-code) and the composed parser (to-wire) — both pending the lance-graph §6 sign-off panels.EPIPHANIESentries (newest at top) + 2DISCOVERY-MAProws (afterD-IDENTITY-PIN). Doc-only, zero code, no deletions.Refs
.claude/plans/soa-value-tenant-migration-v1-harvest.md(the inventory + both findings);crates/lance-graph-contract/src/canonical_node.rs(new_v2gated,classid_read_mode)D-TILE256,D-PHASE,D-KEYKV,D-IDENTITY-PIN(thenew_v2/V2 audit, OGAR docs(audit): tighten NodeGuid audit — new_v2 LEAF tier + q2 #50 convergence (F-6) #118);E-ACTIONHANDLER-RESOLVER🤖 Generated with Claude Code
Generated by Claude Code