Skip to content
23 changes: 23 additions & 0 deletions .claude/board/CROSS_SESSION_BROADCAST.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,3 +152,26 @@ end-to-end against `crate::simd::U8x64`.
can synthesize via existing `unpack_lo/hi_epi8` + I32 ops.

9 tests pass. All methods have matching scalar fallbacks.

## 2026-07-02 — Cross-session wishlist intake executed: C6 MERGED, emission_scan MINTED, OGAR mint-batch is THE allocation vehicle

**For:** op-nexgen, ruff/medcare, tesseract/contract, and the coverage sessions.
**Branch:** claude/v3-substrate-migration-review-o0yoxv (lance-graph + OGAR).

- **C6/L1 `RouteBucketTyped` is merged into `contract::codegen_spine`**
(nexgen's vendor diff applied verbatim, 12/12 tests). nexgen: retire
`vendor/AdaWorldAPI-lance-graph/codegen_spine.diff` on your next sync.
- **`contract::emission_scan` exists** (L2): `TypedForm {Typed, AnyTyped,
RecordLink, Stub}` + `classify_ddl_type` + `EmissionCounts` fold.
Replace the hand-grep behind the 89.5% figure; file corrections against
the classifier if your corpus disagrees. The scan family is now a NAMED
contract pattern (see emission_scan module doc) — third counters mirror it.
- **ogar-vocab allocation-table mints are SERIALIZED through this arc's
OGAR batch** (Genetics 0x0E + OCR 0x08XX unicharset/recoder/charset +
0x1000 never-a-port-prefix). Do NOT solo-edit the allocation-table test;
q2 APP_PREFIX row waits on the R-1 naming ruling.
- **Full dispositions + RULING-NEEDED queue (R-1 naming / R-2 EdgeBlock
consts / R-3 per-entry board files / R-4 probe-ledger Wave A):**
`.claude/handovers/2026-07-02-cross-session-wishlist-intake.md`.
- **Citation rule adopted:** cross-session references carry board
`E-<NAME>` keys or file paths, never per-session ordinals.
15 changes: 15 additions & 0 deletions .claude/board/EPIPHANIES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## 2026-07-02 — E-V3-XSESSION-INTAKE-1-RULINGS: operator closed the intake's escalations — R-1 was a PHANTOM, R-2 is an edges-projection requirement, L3 schema design is KILLED
**Status:** CORRECTION + FINDING (three operator rulings on E-V3-XSESSION-INTAKE-1; full text in the intake handover appendices)

(1) **R-1 hi-u16 naming — phantom conflict.** The canon already exists and THIS session authored it: `le-contract.md:26` `canon hi u16 = domain:appid` / `custom lo u16 = classview`; `v3-substrate-primer.md:94` spells it `concept/domain:appid` — "concept" NAMES the whole hi u16, "domain:appid" is its byte spelling; le-contract vs OGAR prose name the same u16 at two granularities. The sibling sessions' "an appid reading cannot express 0x0102 sharing" argument conflated the canonical **appid byte** (hi half; `0x07:01` = OSINT:q2) with the per-vendor **APP render prefix** (lo half; `0x0001` = OpenProject) — the homonym "app" across the two halves produced the entire thread, including the q2 "collision" (positionally distinct registers; nothing blocked). Orchestrator lesson: I relayed the conflict into a RULING-NEEDED row without grepping my own canon — the first check on any "two ledgers disagree" claim is the primer/le-contract line that already reconciles them. (2) **R-2 EdgeBlock — reframed empirically:** "can lance-graph pull the edges guid separately? if so edges-cheap is preferable." Contract already carves it: NODE_ROW_COLUMNS (canonical_node.rs:668-687) declares Edges as its own 16B column — but zero consumers outside the contract materialize it yet (exhaustive grep). Absorbed as a **W1 sink requirement**: write NodeRow as THREE Lance columns so edge traversal projects at 16 B/row without value-slab I/O; gate = edges-only projection test. Canon stays `key(16)|edges(16)|value(480)`; OGAR's `key+value(496)` = the coarse view; the pinned const set both repos cite is NODE_ROW_COLUMNS + NODE_ROW_STRIDE. (2b — CORRECTION, same day) the "W1 sink requirement: three Lance columns" reading of R-2 was over-reach and is RETRACTED per follow-up ruling: "the SoA schema was 512 bytes before and after and was tested against surrealdb kv-lance AND batch writer — I don't see the reason to touch that." The 512-byte row is frozen; edges-cheap = strided 16-of-512 slice reads over the existing store via the NODE_ROW_COLUMNS offsets (zero-copy, data-flow rule 1) — a read-side helper/test at most, never a storage change; any Lance-level projection idea is a later measurement question (truth-architect gate). (3) **L3 interchange — "defining arrow schemas is bullshit and hallucination because we already have a working SoA schema."** The five-column triple-schema idea (and my Addendum-10 bullet endorsing a "schema family") is withdrawn: extraction output lands as node rows + facets in the existing canon layout through the W1b cast path; Lance writes LE bytes from the envelope-described store. Survivors: minter@sha provenance stamps + ndjson as the diffable golden layer — artifacts around the store, never a second schema.

## 2026-07-02 — E-V3-XSESSION-INTAKE-1: three sibling-session wishlists triaged — C6 RouteBucketTyped merged, emission_scan minted, OGAR quick wins executed, 4 items escalated to operator ruling
**Status:** FINDING (intake + dispositions; full table in .claude/handovers/2026-07-02-cross-session-wishlist-intake.md)

Three parallel sessions (ruff/medcare, a second #630 reviewer, op-nexgen) forwarded post-#630 wishlists. Executed in this arc: (1) **L1/C6** — `RouteBucketTyped` (kind-generic sibling of RouteBucket + `?Sized` blanket bridge, codex-reviewed on nexgen PR #8) merged verbatim from nexgen's `vendor/AdaWorldAPI-lance-graph/codegen_spine.diff` into `contract::codegen_spine` — 12/12 tests green; nexgen can retire its re-apply-on-every-sync diff. (2) **L2** — `contract::emission_scan` minted as the classid_scan sibling (`TypedForm {Typed, AnyTyped, RecordLink, Stub}` + fold) so typed-DDL adoption is measured identically by every consumer instead of hand-grep (nexgen's 89.5% figure). (3) OGAR-side quick wins (flip fuse test making #628↔#147 lockstep mechanical, COUNT_FUSE two-sided, Genetics 0x0E mint, 0x1000 never-a-port-prefix reservation, post-flip prose sweep, truncation-doctrine DISCOVERY-MAP mirror). Escalated RULING-NEEDED (operator): (a) hi-u16 naming — `domain:appid` (le-contract.md) vs `domain:concept-slot` (OGAR general canon), same u16 described differently in both ledgers; blocks the q2 APP_PREFIX-row guard; (b) EdgeBlock canon wording — lance-graph CANON `key(16)|edges(16)|value(480)` vs OGAR ADR `key(16)+value(496)` — read as reconcilable (edges(16) is a reserved subdivision of OGAR's 496-byte value; lance lock is later, 06-13 vs 06-10) but should collapse to ONE const set both repos pin; (c) per-entry board files (`board/epiphanies/E-<NAME>.md` + generated index) — the prepend-collision rebase tax is real and growing, council-sized change; (d) OGAR probe-ledger Wave A green-light (PROBE-SUBSTRATE-PROPOSAL §9, stale since 06-10, 20+ NOT-RUN probes). Deferred with landing zones: L3 Arrow/Lance columnar triple interchange (five parallel columns s/p/o/f/c — "compiled not parsed" applied to interchange; natural W5 consumer item), L4 DAG-materialization contract flag, E5 ruff Mint→ndjson/Arrow seam (targets the W1b writer/WAL shape — correct that it waited), OGAR fields_for(u32) ClassView custom-half routing (first step to post-P4 64k catalogue), F17 body triage + ogar-from-ruff writes/calls consumption.

## 2026-07-02 — E-V3-GRAPHRAG-INV-1: GraphRAG-rs full inventory — algorithm cookbook, not a dependency; LanceDB support is a 100% stub; InferenceEngine is the doctrine ANTI-exhibit
**Status:** FINDING (full-fidelity inventory, .claude/knowledge/graphrag-rs-inventory.md; corrects the operator's docs.rs pointer gently)

automataIA/graphrag-rs (5 crates, graphrag-core 33 subdirs): every component verdict is REUSE-AS-REFERENCE or IGNORE — nothing to fork/depend (P0 fork policy holds effortlessly). Headline falsifications: (1) **LanceDBStore is a complete NotImplemented stub** (every method errs; Qdrant is their real default) — their "native LanceDB support" is aspirational scaffolding; (2) **"hierarchical Leiden" is single-level** (level hardcoded 0, no coarsening loop — Louvain-with-refinement; refinement phase real and citable); (3) **cAST tree-sitter chunking lives only in an example file**, no src/ module despite README+feature flag; lesson: a Cargo feature compiling is not evidence the capability exists — chase the impl body. Genuinely portable-as-reference: LightRAG dual-level retrieval (trait-isolated merge strategies), HippoRAG PPR (entity/passage dual-weight reset distribution), Ollama KV-cache priming (keep_alive + context two-step), bloom+content-hash snapshot diffing (delta_computation — NOT a WAL; the opposite model to M24's board-as-WAL). API shapes worth stealing: **TypedBuilder type-state pattern** (phantom-typed slots; .build() only exists on TypedBuilder<HasOutput,HasLlm> — compile-error-before-object-exists, exactly what a mailbox/tenant builder wants under I-LEGACY-style invariants), sync/async trait pairs bridged by one adapter module, Boxed* type-alias page, single prelude. Anti-exhibit (operator's pointer corrected): `InferenceEngine` owns only config, takes &KnowledgeGraph as a call parameter, returns Vec (no Result, silent-empty on missing entity) — it is the INVERSE of "Thinking is a struct" (the litmus "free function on a carrier's state → reject" names it exactly); the organ-owning analog the operator sensed is **AsyncGraphRAG** (owns knowledge_graph/document_trees/language_model as fields) + TypedBuilder. Config sprawl (30 config structs) recorded as the anti-pattern our "new column, not new struct" doctrine prevents.

## 2026-07-02 — E-V3-ORACLE-LIVE-1: W3c oracle node measured LIVE — graph-flow overhead is 1-2 ms against an 8.4-8.7 s LLM round trip
**Status:** FINDING (live run, rig 0.39 xai provider, 3 calls ~$0.02; harness in session scratchpad, reproducible)

Expand Down
12 changes: 12 additions & 0 deletions .claude/board/LATEST_STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ Membrane consumers can now pull BOTH halves of a render `classid` BBB-safely fro

| PR | Merged | Title | What it added |
|---|---|---|---|
| **#631** | 2026-07-02 | W1b LIVE: WAL batch writer (4 probes green) + M15 rename + temporal synthesis + live oracle numbers | batch_writer implemented: BTreeMap WAL board, ack(cast, LanceVersion) join, delegation cache, never-refuses stacking (probe 4); M15 MulGateDecision rename (W2 unblocked; collapse_gate confirmed 3rd distinct type); operator rulings pinned (zero-copy descriptor casts + eager drain + mutual masking; melden macht frei — freeze retracted; temporal.rs = the read side, replay = QueryReference::at + deinterlace, M24=M25=time-travel ONE mechanism). Measured live: W3c oracle 1-2 ms framework overhead vs 8.4-8.7 s LLM round trip (rig->xAI grok-4 via FlowRunner); JITSON serve.rs = local CI oracle delta. Planner lib 204 + probes 4/4. Merge `c7149eab`. |
| **#630** | 2026-07-02 | V3 W1 START: preflight deltas + WAL writer probes + adoption scan + D-PERT-1 + temporal synthesis | Fable-5 ten-point preflight (M24 board=WAL, W6a baseline inversion, W3 oracle ratchet, W2 probe-first reorder) + operator rulings folded live: zero-copy sink (cast = descriptor never bytes, flush via NodeRowPacket::as_le_bytes), "melden macht frei" (stacked casts never refused — 4 ignored probes define W1b green), temporal.rs deinterlace = the READ side (replay = QueryReference::at + deinterlace; M24/M25/time-travel are ONE mechanism; ack carries LanceVersion). Landed code: batch_writer skeleton + 4 probes; contract::classid_scan (771 green); D-PERT-1 rename (462 green). Audits: planner-SoA type-real/wiring-dormant (M15 GateDecision rename BLOCKING before W2); M7 corrected (NodeRowPacket IS production SoaEnvelope, codex P2); graph-flow benched ~0.4-0.5us/step (two-speed confirmed); M25 KanbanSessionStorage design (graph-flow-kanban envelope exists — wire don't invent). Merge `9a6df2a1`. |
| **#629** | 2026-07-02 | V3 SUBSTRATE consolidated entry point (`.claude/v3/`) + ractor ownership attestation | `.claude/v3/` tree shipped: README (orientation), INTEGRATION-PLAN (W0–W6), COMPONENT-MAP (reuse/repurpose/retire), ENTROPY-MILESTONES (N→1 ledger), MODULE-TABLE (per-file census core/contract/planner), soa_layout/ (LE contract, tenant lanes, consumer map, routing), knowledge/ (substrate primer, mailbox-kanban model, sonnet-worker-guardrails), agents/BOOT.md (4 V3 cards); `/v3` skill + `/v3-audit` command; CLAUDE.md/BOOT.md ★ entrypoint. Review sharpenings folded: LE byte-order range-scan caveat, 3-shape legacy corpus scanner (incl. `0xAAAA_DDCC`), ractor helper-scope ruling (NOT messaging — slow; helper only: spawn/supervision/occasional control RPC). Ownership compile attestation: `KanbanActor<O: MailboxSoaOwner>` `type State = O`, owner MOVES in at pre_start; 22 supervisor tests green on the AdaWorldAPI ractor fork. Merge `28f17cd7`. |
| **#628** | 2026-07-02 | classid canon:custom half-order flip EXECUTED (P0+P1+P2) | `CLASSID_ORDER = CanonHigh` live: canon `domain:appid` HIGH / custom LOW (`0x0701_1000` = `0x07:01::1000`); ONE flippable composition + `classid_canon_compat` (mint-forward both-forms reader — RBAC authorizes pre-flip rows, no re-bake); new-form mint constants + `CLASSID_*_LEGACY` aliases; hhtl dual-form fold; OGAR#95 reconciled (prefix = custom half, values unchanged); ogar pin → `19373a2` (OGAR #147 lockstep). Fleet: OGAR #147 + MedCare #180 + woa-rs #177 merged; q2 #71 + op-nexgen #68 open. Merge `6858118b`. |
Expand Down Expand Up @@ -678,3 +679,14 @@ PR sequence: #360 → #361 → post-#360 substrate-sweep (this PR).
This generalises the OGAR GUID `3×4`-vs-`4×3` debate from nibble-units to byte/field-units and lands on the canon's verdict (aligned 3×4 default; straddling 4×3 worst-case). **The shared substrate the three language SDKs (§1.6) all read.** +4 facet tests (`cascade_rotations_are_total_but_only_aligned_are_defaults`, `classid_switch_separates_view_from_functions`, `tier_bytes_ladder_and_per_carving_grouping`, `cascade_group_shared_is_per_group_lcp`) + canonical_node `guids_per_node_*` + 4 compile-time asserts. Lib facet 8/8 + canonical_node 43/43 green; clippy `-D warnings` + rustfmt clean (probe-workspace verified offline — the workspace ndarray git dep is 403 offline).
- **2026-06-29 correction (operator veto):** the "G4D3 = worst case to prevent" framing above is SOFTENED — **the shape is class-conditioned, not locked**. A ClassView is mapped from the class's *inherited* format and selected by `classid` (the filter); the shape follows: **Rails → `6×2`, other frameworks → `4×3`, the GUID → `3×4`** (operator: "Rails might need 6x2x8bit, others 4x3x8bit"). So `4×3` (`G4D3`) is **legitimate per-class**, not a thing to "reject" — its `group_of` divides (a per-class *cost* a class opts into), and `is_byte_aligned()`/`shift()`/`ALIGNED` now read as "distinguishes the shift fast-path from the divide shape," not "prevent." NEW `CascadeShape::from_levels(d)` — the class-conditioned `D ∈ {2,3,4}` selector (`2→G6D2`/`3→G4D3`/`4→G3D4`), inverse of `levels()`; the classid resolves `D`, never a global lock. Test renamed → `cascade_shapes_are_total_and_class_conditioned` (adds the `from_levels` round-trip). The earlier "quadruplet/4-bucket FieldMask" framing in ruff `soc` was likewise unlocked → byte-cardinality cap, class-conditioned shape (ruff #36). Facet 7/7 + canonical_node 43/43 green post-correction.
- **2026-06-29 (later) correction — the "(ruff #36)" attribution on the line above is WRONG (append-only, prior line kept as record):** ruff PR #36 (`origin/main` tip `3d04e37` = "Merge PR #36", payload commit `c613094` "soc FieldMask cap 64 -> 256 (quadruplet) + bucket chaining") merged the **pre-veto LOCKED quadruplet** — `FIELD_MASK_BUCKET_BITS = 64`, `FIELD_MASK_MAX_BUCKETS = 4`, `field_mask_buckets()`, `FIELD_MASK_CAP = 64*4 = 256` — **NOT** the unlock. The veto edit was authored but never committed, so #36 shipped the pre-veto code. The actual unlock (`FIELD_MASK_CAP = MAX_SIBLINGS_PER_TIER` = byte cardinality, class-conditioned shape, `quadruplet`→`classview` test renames) lands via ruff commit `101928a` ("apply dropped operator veto"), which is **not yet on ruff `main`** — it is in the PR-to-main on branch `claude/odoo-rs-transcode-lf8ya5` (this arc). Until that ruff PR merges, ruff `soc` on `main` is still the locked quadruplet; the "unlocked (ruff #36)" reading becomes true only after it merges. (Confirmed by adversarial cross-repo audit, both P0 claims unrefuted at high confidence; lance-graph's own `facet.rs` is correctly class-conditioned on `main` and needs no change.)

## 2026-07-02 — Append: cross-session intake arc (PR #632; branch claude/v3-substrate-migration-review-o0yoxv)

(Per APPEND-ONLY rule: new top-of-inventory entries. Companion PR: OGAR #148 — merge OGAR first, then bump this repo's ogar-vocab lock pin so lance_graph_ogar COUNT_FUSE compares 68 == 68.)

### Current Contract Inventory — new entries

- **`codegen_spine::RouteBucketTyped`** (NEW; C6 merged verbatim from op-nexgen's vendored diff, codex-reviewed on nexgen PR #8). Kind-generic sibling of `RouteBucket` (`type Kind: Copy + Eq`) + `?Sized` blanket bridge (`impl<T: RouteBucket + ?Sized> RouteBucketTyped for T { type Kind = OdooMethodKind; }`) so non-Odoo codegen targets bring their own kind enum additively. Coherence rule: a type needing a different Kind skips the legacy trait. 12/12 module tests incl. dyn-object coverage.
- **`emission_scan`** (NEW; op-nexgen L2). Zero-dep typed-DDL adoption counter, `classid_scan`'s design-language sibling: `TypedForm {Typed, AnyTyped, RecordLink, Stub}` (#[non_exhaustive]) + tokenizer `classify_ddl_type` (precedence Stub > RecordLink > AnyTyped > Typed; word-boundary tokens so `many`/`recording` never false-match) + `EmissionCounts` fold with `typed_ratio()` (f64, mirrors `adoption_pct`). 15 tests. Module doc NAMES the contract scan-family pattern (Form enum + classify_* + fold-to-counts): the next governance counter mirrors it.
- **`ogar_codebook` 0x08XX OCR rows** — `unicharset` (0x0801) / `recoder` (0x0802) / `charset` (0x0803) mirroring OGAR #148's mint (container kinds only; content never becomes concepts — Osint zero-rows precedent). Drift-guard test extended. CODEBOOK now 68 entries.
- **Rulings + intake record:** EPIPHANIES E-V3-XSESSION-INTAKE-1(+RULINGS), E-V3-GRAPHRAG-INV-1; handover `.claude/handovers/2026-07-02-cross-session-wishlist-intake.md`; plan Addendum-10/11 (per-consumer classid ownership + tripwires ratified; R-1 naming phantom closed — `domain:appid:classview`; R-2 closed — 512-byte row frozen, edges via strided view; L3 new-Arrow-schema design killed; five post-fuse workstreams enumerated). Knowledge: `graphrag-rs-inventory.md`.
Loading
Loading