Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .claude/board/EPIPHANIES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,45 @@
## 2026-06-25 — E-FACET-8-8-ALWAYS — the homogeneous facet is ALWAYS 8:8 (content-blind, consumer-projected); it amortizes to a 2bit×2bit Morton tile cascade

**Status:** FINDING `[H]` (operator-locked 2026-06-25; impl PR #613). Refines
`E-HOMOGENEITY-CLOSES-AS-CONTAINED-FACET`'s `place⊕search` framing to its general
form: the facet tier is **ALWAYS 8:8** — two opaque bytes `hi:lo` — and the
**producer bakes in NO meaning**; only the CONSUMER (the `facet_classid`'s ClassView)
projects it: `(part_of:is_a)`, a 256:256 palette/CAM-PQ centroid pair, a concatenated
`u16`, `(group:member)`, `(mixin:identity)`, `(column:row)`, `(Y:Z)`, … (AGI-as-glove:
the SoA is content-blind, the reader interprets). **Benefit (why ALWAYS-8:8 is the
right substrate):** every interpretation amortizes to ONE `2 bit × 2 bit` **Morton
tile cascade** — Morton-interleave `hi:lo` and each nibble is a quad-tree quadrant in
BOTH bytes at once (`256 = 4⁴` hierarchical ancestry), so hierarchical-prefix routing
is uniform regardless of meaning. (Operator analogy: chess bitboards / `shakmaty` /
Stockfish — one fixed bit substrate, many consumers; magic-bitboard + NNUE
index-into-quantized-table = the centroid reading.)

**Contract (#613, `canonical_node.rs`):** `FacetTier { lo, hi }` (2 B, `as_u16` +
`morton` projections) + `FacetCascade { facet_classid: u32, tiers: [FacetTier; 6] }`
(16 B = `facet_classid(4) | 6×(8:8)=12`, harvest §5.1) — a *reading* over a borrowed
`[u8; 16]`, carrying NO value-slab offset (it does NOT touch the LOCKED 480 B layout;
the `classid → ClassView` byte-pick is the separate, panel-gated step). `hi_chain`/
`lo_chain` + `hi_distance`/`lo_distance` are the two orthogonal prefix metrics.

**Key-side V3 routing (#613, `hhtl.rs` / `soa_graph.rs`):**
`NiblePath::from_guid_prefix_v3` folds the 4 HHTL tiers `HEEL·HIP·TWIG·LEAF` in FULL
(BOTH bytes per tier, depth 16) — the routing **prefix** of the 6-tier facet;
`family`/`identity` (tiers 5-6) stay the basin tail (`local_key`), exactly as v1/v2
keep their tail out of the path (the full 12 B cascade does not fit one `u64`
NiblePath). `classid` is NOT folded, so `hhtl_path` (schema-driven by `tail_variant`)
routes OSINT-V3 `0x1000_0700` to a non-empty depth-16 path — fixing the Codex-P2
latent EMPTY-fold.

**Correction (resolves Codex P2 on #613):** "high `u16` is reserved-zero" is a
**v1-fold** statement (v1 folds `classid_lo` as the coarse tier), NOT a global classid
law — V3 abolishes it by never folding `classid`. `from_guid_prefix`'s doc + guard
scoped to v1 accordingly.

**Cross-ref:** `E-HOMOGENEITY-CLOSES-AS-CONTAINED-FACET` (the place⊕search facet this
generalizes to content-neutral 8:8), `soa-value-tenant-migration-v1-harvest.md` §5.1,
`perturbation-sim/src/cascade_key.rs` (`CascadeKeyV3`), q2 `fma/docs/V3_SOA_WIRING.md`,
`I-VSA-IDENTITIES` (concatenate disjoint bytes, never XOR-bundle codes).

## 2026-06-25 — E-TWO-SOA-WORLDS — the value-tenant migration's real object is the slab↔parallel-MailboxSoA seam, not homogenization

**Status:** FINDING `[G]` (confirmed-by-read; Phase-1 harvest of `soa-value-tenant-migration-v1`). The 480 B `NodeRow.value` slab (10 `ValueTenant`s, `canonical_node.rs:606`) and the parallel `MailboxSoA<N>` (`cognitive-shader-driver/src/mailbox_soa.rs`, separate `[T;N]` columns) BOTH implement `MailboxSoaView`/`Owner` (`soa_view.rs`) but are **disjoint** — they share exactly one semantic column, `class_id()≡entity_type()` (`soa_view.rs:75`). **6 of 10 slab tenants have NO live producer** (Meta/MaterializedEdges/HelixResidue/TurbovecResidue/Plasticity — only schema tests or parallel-SoA mirrors); only Energy/EntityType/Kanban/Fingerprint are written into the actual slab. `SymbiontBoard` straddles both (carries `Vec<NodeRow>` but exposes parallel mirror `Vec`s). **Consequence:** the migration's load-bearing decision is which world becomes canonical (the A↔B reconciliation), NOT homogenizing tenants. Open (un-answerable from source, a §6-panel question): does `MailboxSoA.edges` become the slab `MaterializedEdges` tenant? Full inventory: `soa-value-tenant-migration-v1-harvest.md`.
Expand Down
2 changes: 2 additions & 0 deletions .claude/board/LATEST_STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ Membrane consumers can now pull BOTH halves of a render `classid` BBB-safely fro

## Current Contract Inventory (lance-graph-contract)

> **2026-06-25 — ADDED (#613, the 6-tier 8:8 homogeneous facet + V3 routing fold)**: `lance_graph_contract::canonical_node::{FacetTier, FacetCascade}` — the **ALWAYS-8:8** content-blind facet substrate. `FacetTier{lo, hi}` (2 B, `const`; `as_u16` concatenated + `morton` 2bit×2bit Morton-tile projections); `FacetCascade{facet_classid: u32, tiers: [FacetTier; 6]}` (16 B = `facet_classid(4) | 6×(8:8)=12`, harvest §5.1) — a *reading* over a borrowed `[u8;16]` with `from_bytes`/`to_bytes`/`hi_chain`/`lo_chain`/`hi_distance`/`lo_distance`. **Carries NO value-slab offset** → does NOT touch the operator-LOCKED 480 B layout (the `classid→ClassView` byte-pick is the separate, panel-gated step); content-blind — only the consumer projects meaning (`part_of:is_a` / 256:256 palette centroid / `group:member` / `column:row` / concatenated u16 …), every reading amortizing to one 2bit×2bit Morton tile cascade. **Key-side V3 routing:** `hhtl::NiblePath::from_guid_prefix_v3` (feature `guid-v3-tail`) folds the 4 HHTL tiers `HEEL·HIP·TWIG·LEAF` in FULL (both bytes, depth 16) — the facet's routing prefix; `family`/`identity` stay the basin tail. `classid` NOT folded, so `soa_graph::hhtl_path` (schema-driven by `tail_variant`) routes OSINT-V3 `0x1000_0700` non-empty — fixes the Codex-P2 latent EMPTY-fold. `from_guid_prefix`'s "reserved-zero" doc/guard scoped to **v1-fold** (NOT a global classid law). Additive, zero-dep; 739 lib green (default + `guid-v3-tail`), clippy `-D warnings` + fmt clean. EPIPHANIES `E-FACET-8-8-ALWAYS`. Branch `claude/p-a-readmode-tail-variant`.

> **2026-06-21 — ADDED (content-store for the AriGraph/OSINT episodic arc)**: `lance_graph_contract::content_store::{ContentId, SourceSpan, ContentError, ContentStore, ContentSink}` — the content-addressed **cold text/blob store** contract. `ContentId(u64)` = `hash::fnv1a` of the bytes (stable across versions — the correct content address; `DefaultHasher` must never key one; `0` = sentinel). `SourceSpan{ContentId,u32,u32}` = the fixed-size, `Copy` typed form of `template-equivalence`'s `(source_id,start,end)` provenance; `is_cited()` = "no source span → no claim" (non-sentinel content + non-empty span). `ContentStore` (cold read: `resolve(id) -> Option<&[u8]>` zero-copy slice into the mmap/backing store; `resolve_span`/`contains` defaulted) + `ContentSink` (idempotent `put -> ContentId`, dedup by content-address: many episodes → one source row). **Hot/cold firewall (ADR-022)**: the hot path (SIMD sweep, AriGraph edge traversal) touches only the fixed-size `ContentId`/`SourceSpan`; bytes hydrate cold at the membrane (the fingerprint is the hot-path stand-in for text). Nothing variable-length enters the 512 B node. Additive, zero-dep; +6 tests (stable/dedup, idempotent put, resolve_span slice, OOB/missing errors, uncited-rejected); clippy clean. Consumers: `rs-graph-llm/episodic-arc-task` (replaces its local fnv1a), `template-equivalence` (typed provenance). Plan: `.claude/plans/arigraph-osint-episodic-v1.md` (D-CC-ARI-3). Branch `claude/content-store-contract-draft`.

> **2026-06-18 — ADDED (probe-excel-compute-dag-v1 Inc 0, the `compute_dag` Core gap)**: `lance_graph_contract::class_view::{ComputeEdge, compute_dag_is_acyclic}` + `ClassView::compute_dag(class) -> &[ComputeEdge]` (default `&[]`, zero-fallback). `ComputeEdge {target: u8, inputs: &'static [u8]}` is the harvest-sourced recompute edge (`emitted_by` target ← `depends_on` inputs; field positions index the class `FieldMask`), `const`-constructible like `MethodSig`/`ActionDef` (the harvest IS the manifest). `compute_dag_is_acyclic` is the **registry-build gate** — a cyclic recompute DAG (formula loop / `@api.depends` cycle / self-loop) is rejected at build (Kahn over ≤64 positions, allocation-free; out-of-range positions ignored, no panic, mirrors `FieldMask::from_positions`). This is the Core home for computed-field recompute *dispatch* that EVERY computed-field AR consumer needs (Odoo `@api.depends`, Excel formulas, medcare lab-trends, woa calc, q2 cells — they reduce to a sheet; `E-EXCEL-SHADER-PROJECTION`) and the NNUE-incremental existence-proof shape (`E-CHESS-TENSOR-PROVEN`). **Layout-preserving**: a default trait method + a free fn, resolution metadata ABOVE the SoA, stores nothing on the row, zero `NODE_ROW_STRIDE`/`ENVELOPE_LAYOUT_VERSION` impact (core-gap-auditor's EXTEND-CORE, never an adapter-state hack). The instance recompute that consumes it is gated per-cell by the cycle-aware `write_row` (`E-SOA-CYCLE-OWNERSHIP`). Additive, zero-dep; +4 tests (default-empty, acyclic-chain, cycle/self-loop/3-cycle rejected, out-of-range ignored); 10/10 class_view, clippy/fmt clean. Sibling `ClassView::constraints` (`validation_kind`-sourced) deferred to Inc-follow-up. Plan: `.claude/plans/probe-excel-compute-dag-v1.md`. Branch `claude/particle-wave-click-epiphany`.
Expand Down
9 changes: 9 additions & 0 deletions crates/lance-graph-contract/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ trajectory-audit = []
# I-LEGACY-API-FEATURE-GATED (field-isolation matrix + version gate).
guid-v2-tail = []

# guid-v3-tail (P-A, plan: soa-value-tenant-migration-v2.md §2.1/§2.2) — gates the
# V3 cascade-key per-classid entries. The V3 identity AXIS itself (TailVariant::V3
# + ReadMode::tail_variant) is unconditional, latent (nothing reads tail_variant
# yet) → non-breaking. The gated entries pin the generation marker in the HIGH
# (custom) u16, preserving the canon LOW-u16 0xDDCC domain byte (so
# `classid_concept_domain` still routes the legacy domain). OSINT-V3 (0x1000_0700)
# is the wired exemplar; FMA-V3 (0x1000_0A01) + Genetics follow. Default OFF.
guid-v3-tail = []

# tenant-counters — per-ValueTenant update counters for debug instrumentation of
# the SoA write cascade (the capstone NaN-census / seam-wiring measurement). OFF
# by default: `tenant_counter::tenant_update` is a zero-cost no-op unless enabled
Expand Down
Loading
Loading