Skip to content

Commit c1ff2bf

Browse files
committed
plan(odoo-savant-reasoners-v2): reshape Reasoner trait → typed composition over CausalEdge64 + Tactic + role_keys (E-SAVANT-COMPOSITION-1)
v1 (shipped PR #420 with a "MED on dispatch shape" caveat) review resolved: the Reasoner trait surface fails CLAUDE.md "P-1 The Click" + "P0 AGI-as-glove" litmus tests verbatim: 1. "new capability lands as a new column, not a new layer" → the Reasoner trait IS a new layer 2. "free function on a carrier's state = reject" → build_conclusion(savant, ctx) is the named anti-pattern 3. "wrap the axes in a new struct = breaks the SIMD sweep" → SavantConclusion + SavantSuggestion duplicate CausalEdge64 v2 routes the canonical path through the agnostic substrate that already exists: - CausalEdge64 (zero-dep crates/causal-edge, v2 layout — the savant's decision IS the emitted edge: SPO palette + NARS truth + Pearl 2³ + inference mantissa) - Tactic trait + 34 kernels (PR #411 — "the Elixir-like recipe layer that later fronts the real fingerprint substrate via cognitive-shader-driver with no change to the 34 call sites") - 33-TSV atom layer (PR #411 contract::atoms::CANONICAL_ATOMS) - Role-key catalogues (I-VSA-IDENTITIES names callcenter/role_keys.rs as future Layer-2 home) Deliverables (Queued): - D-ODOO-SAV-5a: SavantPattern + TacticInvocation + EdgeEmissionSpec + AtomTouchMask primitives in lance-graph-contract (Group D) - D-ODOO-SAV-5b: callcenter/role_keys.rs with 25 disjoint Vsa16kF32 slices + lookup-by-OdooSavant + slice manifest (Group E) - D-ODOO-SAV-5c: 25 typed SavantPattern consts drawn from .claude/odoo/savants/<N>.md slot 1/4 + .claude/odoo/L*.md (Group F) - D-ODOO-SAV-5d: #[deprecated] + legacy-reasoner feature gate + migration pointers on v1 Reasoner surface, per I-LEGACY-API-FEATURE-GATED (Group G) - D-ODOO-SAV-5e: end-to-end test (FiscalPositionResolver SavantPattern → expected CausalEdge64 row, SPO + NARS + v2 signed mantissa) Execution: 5a + 5b parallel (additive, zero churn) → 5c after both → 5d after 5c (migration pointers name real targets) → 5e throughout. woa-rs consumer migration OUT OF SCOPE but UNBLOCKED by 5d. Board hygiene per CLAUDE.md: plan file + INTEGRATION_PLANS PREPEND + STATUS_BOARD section + EPIPHANIES E-SAVANT-COMPOSITION-1 all in this commit. v1 surface (Reasoner trait, 4 *Reasoner impls, SavantConclusion, SavantSuggestion, build_conclusion) stays compiling under the legacy-reasoner feature with #[deprecated] migration pointers until woa-rs migrates its Reasoner::reason() call sites to SavantPattern resolution. Removal in a follow-up PR after the migration. https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
1 parent a21d577 commit c1ff2bf

4 files changed

Lines changed: 257 additions & 0 deletions

File tree

.claude/board/EPIPHANIES.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
## 2026-05-28 — E-SAVANT-COMPOSITION-1 — the `Reasoner` trait surface (D-ODOO-SAV-4, PR #420) is the wrong shape: savants are typed compositions over `CausalEdge64` + `Tactic` + `callcenter/role_keys`, not service impls
2+
3+
**Status:** FINDING (architectural correction, drives `odoo-savant-reasoners-v2`).
4+
5+
**Click:** v1's "MED on dispatch shape" caveat resolved on review against CLAUDE.md "P-1 The Click" + "P0 AGI-as-glove". v1 shipped `Reasoner` trait + 4 `*Reasoner` impls (`CustomerCategoryReasoner`, `NextBestActionReasoner`, `PostingAnomalyReasoner`, `OtherReasoner`) + `SavantConclusion` struct + `SavantSuggestion` enum + `build_conclusion(savant, ctx)` free function. **Three doctrine litmus tests in CLAUDE.md name this verbatim**: (1) "new capability lands as a new column, not a new layer" — `Reasoner` is a new layer; (2) "free function on a carrier's state = reject" — `build_conclusion(savant, ctx)` is the named anti-pattern; (3) "wrap the axes in a new struct = breaks the SIMD sweep" — `SavantConclusion`/`SavantSuggestion` duplicate `CausalEdge64`. The substrate v1 should have composed instead is already shipped: **`CausalEdge64`** (the 64-bit causal neuron with SPO palette + NARS truth + Pearl 2³ + inference mantissa — *the conclusion IS the emitted edge*), **`Tactic` trait + 34 kernels** (PR #411 ratified explicitly as "the Elixir-like recipe layer ... later fronts the real fingerprint substrate via cognitive-shader-driver with no change to the 34 call sites"), **33-TSV atoms** (PR #411 `contract::atoms::CANONICAL_ATOMS`), **role-key catalogues** (`I-VSA-IDENTITIES` names `callcenter/role_keys.rs` as the future Layer-2 home).
6+
7+
**Mechanism (right shape):** each savant = (role-key identity in `callcenter/role_keys.rs` — one Vsa16kF32 slice per savant) + (typed composition of `Tactic` dispatches over `ThoughtCtx`) + (`CausalEdge64` emission spec: SPO palette + Pearl 2³ + v2 signed mantissa). No new trait. No new conclusion type. No new dispatch service. The shader runs the composition over the SoA columns; the savant's "decision" rides in the emitted `EdgeColumn` row. Per `E-BATON-1`: cross-boundary state IS the `(u16, CausalEdge64)` baton, so the conclusion *literally is* the baton's edge.
8+
9+
**Fix:** `odoo-savant-reasoners-v2` plan + INTEGRATION_PLANS PREPEND + STATUS_BOARD rows (D-ODOO-SAV-5a..5e) + this epiphany — landed in the same commit per board hygiene. v2 keeps v1 compiling under `legacy-reasoner` feature with `#[deprecated]` migration pointers (per `I-LEGACY-API-FEATURE-GATED`) until woa-rs migrates its `Reasoner::reason()` call sites to `SavantPattern` resolution. Removal in a follow-up PR after the migration.
10+
11+
**Lesson (generalizes):** the "consult before guess" rule in CLAUDE.md §"Driving Seat" (3) names this failure mode — *"Grepping ndarray for a primitive name when the family-codec-smith agent or the `encoding-ecosystem.md` knowledge doc has the answer is a rediscovery tax, not a diligence win."* v1 was four trait impls shipped before reading PR #411 (`recipe_kernels.rs` + `Tactic` trait), `causal-edge/edge.rs` (the canonical edge primitive), or `vsa-switchboard-architecture.md` (the three-layer Layer-2 catalogue doctrine). Every one of those contained the answer to "where does the savant's dispatch live." The codex P1 review on PR #420 was the surface signal; this is the underlying diagnosis. Going forward: a plan with "MED on dispatch shape" should ship with the review pass done *before* the implementation D-id, not as a follow-up.
12+
13+
**Cross-ref:** PR #420 (v1 ship), PR #411 (33-TSV atoms + 34-tactic `Tactic`), PR #418 + `E-BATON-1` (mailbox-owned SoA, CE64 as cross-boundary state), `causal-edge/edge.rs` (v2 layout, signed mantissa), `lance-graph-contract::recipe_kernels` (the `Tactic` trait + 34 kernels), CLAUDE.md "P-1 The Click" + "P0 AGI-as-glove" litmus tests, `I-VSA-IDENTITIES` (Layer-2 role catalogues), `I-LEGACY-API-FEATURE-GATED` (deprecation discipline), `.claude/plans/odoo-savant-reasoners-v1.md` (the shipped v1) → `.claude/plans/odoo-savant-reasoners-v2.md` (this reshape).
114
## 2026-05-27 — E-AUDIT-1 — `with_jsonl_audit` jsonl-feature build break: a default-feature `cargo check` masks feature-gated error-type mismatches
215

316
**Status:** FINDING

.claude/board/INTEGRATION_PLANS.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
## 2026-05-28 — odoo-savant-reasoners-v2 (reshape: `Reasoner` trait → typed composition over `CausalEdge64` + `Tactic` + `callcenter/role_keys`)
2+
3+
**Status:** PROPOSAL (architectural reshape of v1, shipped PR #420 with a "MED on dispatch shape" caveat). v1 review resolved: the `Reasoner` trait surface is the wrong shape per CLAUDE.md "P-1 The Click" + "P0 AGI-as-glove" litmus tests. v2 deprecates the v1 surface (feature-gated + `#[deprecated]`) and routes the canonical path through the agnostic substrate that already exists (`CausalEdge64` + `Tactic` + 33-TSV atoms + role-key catalogues — all shipped via PR #411 + #418 + #419 + #420).
4+
**Confidence:** HIGH on the diagnosis (litmus tests in CLAUDE.md name v1's anti-patterns verbatim). HIGH on the right-shape vocabulary (PR #411 ratified the 34-tactic `Tactic` trait as "the Elixir-like recipe layer that later fronts the real fingerprint substrate via cognitive-shader-driver with no change to the 34 call sites"). MED on per-savant typed composition consts (substantial translation pass from savant-doc + L-doc curation).
5+
**Plan file:** `.claude/plans/odoo-savant-reasoners-v2.md`
6+
**Predecessors:** PR #420 (v1 ship — the surface to deprecate), PR #411 (33-TSV atoms + 34-tactic `Tactic` + `recipe_kernels`), PR #418 (BindSpace → mailbox-owned SoA; `E-BATON-1`), PR #419 (25 AXIS-B evidence contracts), PR #416 (`contract::savants` roster), PR #414 (D-ODOO-SAV-1/2/3). v1 plan: `odoo-savant-reasoners-v1.md`.
7+
**Anchored iron rules:** AGI-as-glove (P0), The Click P-1 ("free function on carrier = reject"), `I-VSA-IDENTITIES` (`callcenter/role_keys.rs` named home), `E-BATON-1` (mailbox-owned SoA, CE64 baton as cross-boundary state), `I-LEGACY-API-FEATURE-GATED` (v1 deprecation under feature + migration pointer).
8+
9+
### Scope
10+
Three deliverable groups: **Group D** — agnostic composition primitives (`SavantPattern` + `TacticInvocation` + `EdgeEmissionSpec` + `AtomTouchMask`) in `lance-graph-contract`, zero-dep, sits next to `atoms`/`recipe_kernels`/`nars`. **Group E**`crates/lance-graph-callcenter/src/role_keys.rs` with 25 disjoint Vsa16kF32 slices per `I-VSA-IDENTITIES` Layer-2 catalogue (slice manifest coordinated with `grammar/role_keys.rs`). **Group F** — 25 typed `SavantPattern` consts in callcenter drawn from `.claude/odoo/savants/<N>.md` slot 1/4 + `.claude/odoo/L*.md` business semantics. **Group G** — deprecate v1 surface (`Reasoner` trait + 4 impls + `SavantConclusion` + `SavantSuggestion` + `build_conclusion`) under `legacy-reasoner` feature with `#[deprecated]` migration pointers; removal in a follow-up after woa-rs migrates.
11+
12+
### Deliverables
13+
D-ODOO-SAV-5a (Group D): composition primitives in contract · D-ODOO-SAV-5b (Group E): `callcenter/role_keys.rs` 25 disjoint slices + lookup · D-ODOO-SAV-5c (Group F): 25 `SavantPattern` consts · D-ODOO-SAV-5d (Group G): `#[deprecated]` + `legacy-reasoner` feature gate on v1 surface · D-ODOO-SAV-5e: end-to-end test (FiscalPositionResolver → expected `CausalEdge64` row, SPO + NARS + v2 signed mantissa).
14+
15+
### Execution
16+
5a + 5b parallel (additive, zero churn) → 5c after both → 5d after 5c (deprecation pointers name a real target) → 5e throughout (per-D-id tests + e2e proof in 5c completion). woa-rs consumer migration OUT OF SCOPE but UNBLOCKED by 5d. Board hygiene: this plan + INTEGRATION_PLANS PREPEND + STATUS_BOARD rows + EPIPHANIES `E-SAVANT-COMPOSITION-1` land in the same commit as 5a.
17+
18+
### Invariants
19+
AGI-as-glove (new capability = column population, not new trait) · `I-VSA-IDENTITIES` (identity in `role_keys`, content in atoms/tactic/emission/AriGraph, never bundled) · The Click P-1 (no free function on carrier's state) · `I-LEGACY-API-FEATURE-GATED` (v1 deprecation under feature + migration pointer) · suggestion-only never un-guarded write (woa-rs Iron Rule 7).
120
## 2026-05-27 — multi-server-cognition-expansion-v1 (legacy-stack displacement + Raft-log / SoA-state-machine)
221

322
**Status:** PROPOSAL — §2 displacement is current-state; §3 multi-server expansion is unbuilt, gated on the §4 determinism probe

.claude/board/STATUS_BOARD.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,20 @@ Plan path: `.claude/plans/bindspace-singleton-to-mailbox-soa-v1.md`. Epiphany `E
530530

531531
---
532532

533+
## odoo-savant-reasoners-v2 — reshape: `Reasoner` trait → typed composition over `CausalEdge64` + `Tactic` + `callcenter/role_keys`
534+
535+
Reshape of v1 (shipped PR #420). v1's `Reasoner` trait surface fails CLAUDE.md "P-1 The Click" + "P0 AGI-as-glove" litmus tests; v2 routes the canonical path through the agnostic substrate that already exists (CausalEdge64 + Tactic + 33-TSV atoms + role-key catalogues). v1 stays under `legacy-reasoner` feature with `#[deprecated]` until woa-rs migrates. Plan path: `.claude/plans/odoo-savant-reasoners-v2.md`. Driver epiphany: `E-SAVANT-COMPOSITION-1`.
536+
537+
| D-id | Title | Crate | Lines | Conf | Status | Notes |
538+
|---|---|---|---|---|---|---|
539+
| D-ODOO-SAV-5a | `SavantPattern` + `TacticInvocation` + `EdgeEmissionSpec` + `AtomTouchMask` primitives (Group D, zero-dep, in contract) | lance-graph-contract | 200 | HIGH | **Queued** | additive — ships with this plan + INTEGRATION_PLANS prepend + this STATUS_BOARD section + EPIPHANIES entry (board hygiene) |
540+
| D-ODOO-SAV-5b | `callcenter/role_keys.rs` with 25 disjoint Vsa16kF32 slices + lookup-by-enum + slice-allocation manifest (Group E) | lance-graph-callcenter | 250 | HIGH | **Queued** | parallel with 5a — independent; coordinate disjoint slice range vs `grammar/role_keys.rs` |
541+
| D-ODOO-SAV-5c | 25 `SavantPattern` consts drawn from `.claude/odoo/savants/<N>.md` slot 1/4 + `.claude/odoo/L*.md` business semantics (Group F) | lance-graph-callcenter | 600 | MED | **Queued** | blocked on 5a + 5b; likely one D-id per savant in a Wave if translation is large; 14 NEEDS-INPUT savants ship pattern + emission spec only |
542+
| D-ODOO-SAV-5d | `#[deprecated]` + `legacy-reasoner` feature gate + migration pointers on v1 `Reasoner` trait + 4 `*Reasoner` impls + `SavantConclusion` + `SavantSuggestion` + `build_conclusion` (Group G) | lance-graph-contract + lance-graph-callcenter | 120 | HIGH | **Queued** | blocked on 5c (so the migration pointer names a real target); removal in a follow-up after woa-rs migrates |
543+
| D-ODOO-SAV-5e | End-to-end test: FiscalPositionResolver `SavantPattern` over a synthetic ontology fixture → expected `CausalEdge64` row (SPO + NARS truth + v2 signed mantissa); the proof the reshape works | lance-graph-callcenter tests | 150 | MED | **Queued** | ships with 5c completion as the round-trip proof; uses `CausalEdge64::pack_v2` per `I-LEGACY-API-FEATURE-GATED` |
544+
545+
---
546+
533547
## Update protocol
534548

535549
When a deliverable ships:

0 commit comments

Comments
 (0)