You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude/board/EPIPHANIES.md
+15Lines changed: 15 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,3 +1,18 @@
1
+
## 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
2
+
**Status:** CORRECTION + FINDING (three operator rulings on E-V3-XSESSION-INTAKE-1; full text in the intake handover appendices)
3
+
4
+
(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.
**Status:** FINDING (intake + dispositions; full table in .claude/handovers/2026-07-02-cross-session-wishlist-intake.md)
8
+
9
+
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.
10
+
11
+
## 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
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.
15
+
1
16
## 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
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).
679
680
- **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.
680
681
- **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.)
(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.)
686
+
687
+
### Current Contract Inventory — new entries
688
+
689
+
-**`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.
690
+
-**`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.
691
+
-**`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.
0 commit comments