Skip to content

Commit 725067e

Browse files
authored
Merge pull request #416 from AdaWorldAPI/claude/splat3d-cpu-simd-renderer-MAOO0
Odoo savant roster (contract::savants) + FIBU/ZUGFeRD OGIT inheritance fix
2 parents 44c4fc8 + a4f36b6 commit 725067e

20 files changed

Lines changed: 498 additions & 18 deletions

.claude/board/AGENT_LOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## [Main-thread → woa-rs HANDOFF] Odoo savant AXIS-B evidence-contract scaffold (carve-out request)
2+
3+
Wrote `.claude/odoo/savants/_SCAFFOLD-EVIDENCE-CONTRACT.md` — a self-contained handover asking the **woa-rs session** (roster/evidence-schema owner) to carve out the **4 AXIS-B slots per savant** (Arrow `EvidenceRef` schema · odoo field→signal map · property-level OWL alignment · the decision in evidence terms) so lance-graph can implement the `Reasoner` impls (D-ODOO-2 / D-ODOO-SAV-4) in one pass without cross-session ping-pong. Includes the fixed dispatch tuple for all 25 (priority-tiered) + the target `Reasoner` shape + the open dispatch-shape question (N impls vs savant-config registry). Hand-back: fill per-savant docs + note here. No code; doc only. On branch `splat3d-cpu-simd-renderer-MAOO0` (PR #416).
4+
5+
---
6+
17
## [Agent-A / Sonnet] [SCAFFOLD ONLY — no implementation, no commit] D-ATOM-4 — counterfactual.rs split-resolution-via-counterfactual-mantissa scaffold
28

39
**D-id:** D-ATOM-4 (`atom-mailbox-substrate-v1` pillar 5 — counterfactual mantissa v2 deposit + v3 mailbox+revision).
@@ -83,6 +89,12 @@
8389

8490
---
8591

92+
## [Main-thread] [DONE — green] D-ODOO-1 Odoo savant roster + integration plan
93+
94+
Created the lance-graph side of the woa-rs Odoo savant delegation (material: `.claude/odoo/SAVANTS.md` + L1–L15, PR #413). **`contract::savants`** — the **25-savant roster as data**: `Savant { id, name, family: Option<u8>, kind, inference, semiring, style, lane, decides }` + `SAVANTS[25]` + `savant()`/`savant_by_name()`/`unaligned()` + `query_strategy()`. `other_kind` codes for the 6 `ReasoningKind::Other(u32)`. Rides the shipped `reasoning::{Reasoner,ReasoningKind}` / `nars` / `thinking::StyleCluster` (delegation surface already existed). **3 tests green** (roster=25 unique ids, id-16-absent, lookup+dispatch, 11 `unaligned()` need axioms). Plan `odoo-savant-roster-v1.md` + INTEGRATION_PLANS prepend (D-ODOO-1 done; D-ODOO-2 Reasoner impls / D-ODOO-3 OGIT families 0x63+0x90 / D-ODOO-4 alignment axioms / D-ODOO-5 conformance queued). Synced to `main` (incl. #412/#413); 452 contract tests green.
95+
96+
---
97+
8698
## [Main-thread] [DONE — green] the 34 tactics as 34 working Rust kernels (Elixir-like behaviour)
8799

88100
`crates/lance-graph-contract/src/recipe_kernels.rs` (new, wired in lib.rs). One uniform

.claude/board/INTEGRATION_PLANS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ D-ODOO-SAV-1/2/3 additive + low-risk → first PR (this session). D-ODOO-SAV-4
1717

1818
### Invariants
1919
Option B (inherit existing slots; new families are genuine basins not per-class mints; `None` stays `None` w/o honest pivot) · public OWL pristine (axioms are NEW TTL) · savant = Layer-2 catalogue · reasoner output = suggestion (guard stays in woa-rs) · impls in callcenter behind contract `Reasoner` trait.
20+
---
21+
## 2026-05-27 — odoo-savant-roster-v1 (the lance-graph side of the woa-rs Odoo savant delegation: 25 delegated reasoners)
22+
23+
**Status:** PROPOSAL. **Plan file:** `.claude/plans/odoo-savant-roster-v1.md`. **Source:** `.claude/odoo/SAVANTS.md` + L1–L15 (PR #413). **Predecessor:** PR #412 (odoo→FIBO/SKR alignment + DOLCE classifier).
24+
**Scope:** 25 Odoo savants = delegated reasoners (woa-rs keeps the AXIS-A deterministic guard; the ambiguous AXIS-B core delegates to lance-graph via `reasoning::Reasoner`). Each savant = a dispatch tuple (OGIT family · `ReasoningKind` · `InferenceType` · `SemiringChoice` · `StyleCluster`).
25+
**Deliverables:** D-ODOO-1 roster-as-data (`contract::savants`, ✅ DONE) · D-ODOO-2 `Reasoner` impls per `ReasoningKind` · D-ODOO-3 new OGIT families `0x63 ProductCatalog` + `0x90 HRFoundation` + style wiring · D-ODOO-4 Layer-2 alignment axioms for the `None` classes (stock.*, analytic.distribution.model, account.account.tag) · D-ODOO-5 delegation call-site conformance (ReasoningContext + Arrow EvidenceRef schemas).
26+
**Invariants:** suggestion-only never un-guarded write (Iron Rule 7) · deterministic guard stays woa-rs · BBB-allowed crates only · tuple fully determines dispatch · business = OGIT-inherited sidecar (odoo inherits FIBO/SKR slots; 0x63/0x90 are the only new families, need ratification).
2027

2128
---
2229

.claude/board/LATEST_STATE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
| PR | Merged | Title | What it added |
1616
|---|---|---|---|
17+
| **#411** | 2026-05-27 | Cognitive substrate: locked 33-TSV atom layer + 34-tactic recipes + escalation loop | **D-PERSONA-1** `contract::escalation` + `planner::mul::escalation` (CollapseHint/InnerCouncil/EpiphanyDetector/GhostEcho/WisdomMarker/Checklist, 13 tests). **`contract::atoms`** — LOCKED 33-dim TSV `CANONICAL_ATOMS` (3 Pearl + 9 Rung + 5 Σ + 8 Ops + 4 Presence + 4 Meta) + `I4x32` carrier. **`contract::recipes`** — 34-tactic metadata catalogue. **`contract::recipe_kernels`** — the 34 tactics as 34 `Tactic` impls + registry over a shared `ThoughtCtx`. Charter D0: **ladybug-rs has no relation, rewrite-not-port**; lattice is **SPOQ** (SPO 2³ causal + Q qualia overlay); business = OGIT sidecar; markers gate the datapath/control/gate partition. Green: escalation 13 / atoms 3 / recipes 4 / recipe_kernels 5 + 446 prior, no warnings. Branch `claude/splat3d-cpu-simd-renderer-MAOO0` (39 commits). See PR_ARC #411. |
1718
| **#389** | 2026-05-16 | fix(sprint-12/wave-F): codex P2 — AttentionMaskBackend impl for AttentionMaskSoA + canonical MailboxId import | Codex P2 follow-on to PR #388. Adds `AttentionMaskBackend` trait impl for `AttentionMaskSoA` (Wave-F surface coherence) and converges duplicate `MailboxId` imports onto the canonical contract definition. Merge commit `b526485`. |
1819
| **#388** | 2026-05-16 | impl(sprint-12/wave-F partial): D-CSV-10 sigma-tier-router + AttentionMask + splat ops + governance (6 of 12 workers landed) | Sprint-12 Wave F fleet partial landing. **D-CSV-10** `SigmaTierRouter` crate (Rubicon-resonance ΔF + threshold → Σ10 commit, hand-tuned threshold per OQ-CSV-6, tracked as TD-SIGMA-TIER-THRESHOLDS-1); **D-CSV-12** scalar splat op fleet on i4 (`splat_gaussian`, `score_hole_closure`, `replay_coherence`, `emit_if_epiphany`); **AttentionMask** SoA + actor + backend surface; W-F8 TYPE_DUPLICATION_MAP refresh (records two-`TrustTexture` coexistence as TD-TRUST-TEXTURE-DUPE-1); W-F10 sprint-11 Opus meta-review; W-F11 i4-substrate-decisions knowledge doc; W-F12 cognitive-substrate-convergence-v2 plan draft (608 lines). Merge commit `77f2d26`. |
1920
| **#387** | 2026-05-16 | impl(sprint-11/wave-E): D-CSV-8 MUL i4 SIMD evaluation + D-CSV-9 8ch↔SPO transcoder | **D-CSV-8** integer MUL evaluation on `QualiaI4_16D` + signed mantissa (scalar i4 path; AVX-512/NEON deferred → D-CSV-13 sprint-12). **D-CSV-9** 8-channel ↔ SPO-palette transcoder (Option R-3) at thinking-engine L3 commit boundary; 16-mapping bidirectional round-trip; renames `set_channel``set_channel_u8` to widen equivalence class. Merge commit `e042c70`. |

.claude/board/PR_ARC_INVENTORY.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,35 @@
3535
3636
---
3737

38+
## PR #411 — Cognitive substrate: locked 33-TSV atom layer + 34-tactic recipes + escalation loop (MERGED 2026-05-27 → main)
39+
40+
**Status:** MERGED. Branch `claude/splat3d-cpu-simd-renderer-MAOO0``main`, 39 commits.
41+
42+
**Added:**
43+
- `contract::escalation` (D-PERSONA-1) + `planner::mul::escalation``CollapseHint` / `InnerCouncil` (3-archetype split) / `EpiphanyDetector` / `GhostEcho` (8) / `WisdomMarker` (0.1 floor) / `Checklist` (HARD/SOFT). 13 tests.
44+
- `contract::atoms` — the **LOCKED 33-dim ThinkingStyleVector** `CANONICAL_ATOMS` (3 Pearl + 9 Rung + 5 Σ + 8 Operations + 4 Presence + 4 Meta) + `I4x32` bare-metal carrier. 3 tests.
45+
- `contract::recipes` — the 34 reasoning tactics as a metadata catalogue (`Recipe{Tier,Mechanism,Bucket,spo2cubed,substrate}`, `RECIPES[34]`, lookups). 4 tests.
46+
- `contract::recipe_kernels`**the 34 tactics as 34 `Tactic` implementations** + registry (`kernel`/`all_kernels`) over a shared `ThoughtCtx`. 5 tests.
47+
- Scaffolds (un-wired, `todo!()`): `recipe.rs`/`quorum.rs`/`counterfactual.rs` (contract), `graph/witness_tombstone.rs` (core).
48+
49+
**Locked:**
50+
- **D0 — ladybug-rs has NO relation and never will** (failed "empty cathedral"); rewrite-not-port; cross-repo docs (ladybug/ada-consciousness/neo4j-rs) are spec-references only, never deps/ports.
51+
- Execution stack **atoms → cognitive-shader-driver → SIMD** (atoms are NOT SIMD).
52+
- 3-layer: **atom = one pole** (bare-metal) → **style = one i4 vector** (molecule) → **persona = composition**; the OO style/persona objects are the metacognition.
53+
- The lattice is **SPOQ**: SPO 2³ = the causal slice (Counterfactual=`SPO`/0b111, Intervention=`_PO`); **Q (Qualia) = the 4th, affective overlay**.
54+
- **Business = OGIT-inherited sidecar**, not an atom.
55+
- Markers gate implicitly (entropy=CollapseGate SD FLOW/HOLD/BLOCK, F-floor, rung, temperature, dissonance) — the CPU clock-gating partition: **datapath / control / gate**.
56+
- The 34 tactics reduce to **3 mechanisms** (parallel-independence / truth-aware / structural-divergence) = the partition.
57+
- One uniform `Tactic` behaviour; richer fingerprint substrate slots behind the same trait without changing the 34 call sites.
58+
59+
**Deferred:** per-recipe real-substrate evaluators (kernels are deterministic over `ThoughtCtx` today); atom `pack/unpack` via cognitive-shader-driver; the un-wired scaffolds (D-ATOM-2..5 wiring); the SPO-2³-vs-SPOQ-2⁴ lattice decision; the substrate-Markov re-scope (awaits [FORMAL-SCAFFOLD] check); the `rung-persona`→mailbox rename.
60+
61+
**Docs:** `ada-rewrite-charter`, `atom-basis-inventory`, `spo-2cubed-list-coverage`, `34-tactics-vs-ada`, `agi-stack-cross-repo` (knowledge); `atom-mailbox-substrate-v1` (plan + INTEGRATION_PLANS); `E-LADDER-SERVES-MAILBOX` + append-only correction (EPIPHANIES); `TD-GHOST-ECHO-DUP-1` (TECH_DEBT).
62+
63+
**Confidence (2026-05-27):** working — `lance-graph-contract` green (escalation 13 / atoms 3 / recipes 4 / recipe_kernels 5 + 446 prior), zero warnings. The kernels are the uniform deterministic layer; real-substrate upgrade is the named follow-on.
64+
65+
---
66+
3867
## sprint-13/W-I1 — impl(sprint-13): D-CSV-13b i4 batch SIMD dispatch + tests (in PR)
3968

4069
**Status:** In PR (branch `claude/sprint-13-w-i1-salvage`, HEAD `c9c1c79`, awaiting user merge). 4 commits on the branch: `cdc84ec` salvage W-I1 i4_eval::batch impl + criterion scaffold (recovered from cleaned worktree) → `a356e64` SIMD-vs-scalar parity tests + repr(u8) enum invariant (5 new randomised tests over 10 sizes, criterion 0.5 dev-dep, dead-code warning fix) → `d8d1437` AVX-512 dim-extract sign-extend fix (the bug that made the salvage path silently produce wrong bytes on negative thresholds) → `c9c1c79` `scalar_impl` made `#[doc(hidden)] pub` for bench access.
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# SCAFFOLD — Odoo savant AXIS-B evidence contract (carve-out request)
2+
3+
> **Handover:** lance-graph session (`splat3d-cpu-simd-renderer-MAOO0`) → **woa-rs session** (the Odoo extractor, owner of the roster + evidence schemas per `SAVANTS.md` §"lance-graph handover boundary").
4+
> **Why this exists:** the `Reasoner` impls (D-ODOO-2 / D-ODOO-SAV-4) are blocked on the **AXIS-B input contract**, which the current `SAVANTS.md` + `L*.md` specify only on the AXIS-A (woa-rs guard) side. Rather than ping-pong (which loses context across sessions), **carve out the four slots below per savant** and I implement the Reasoners in one pass.
5+
> **Date:** 2026-05-27.
6+
7+
## What lance-graph already has (don't re-send)
8+
9+
- **`contract::savants`** — the 25-savant roster as data: each `Savant { id, name, family, kind, inference, semiring, style, lane, decides }`. The dispatch tuple is **fixed**; `query_strategy()` rides `InferenceType::default_strategy()`.
10+
- **`reasoning::{Reasoner, ReasoningContext, ReasoningKind, EvidenceRef, Budget}`** — the delegation surface (shipped).
11+
- **#414**: OGIT families `0x64 ProductCatalog` / `0x90 HRFoundation` + Layer-2 alignment axioms (stock.* / analytic.distribution.model / account.account.tag) + StyleCluster wiring.
12+
- FIBU subtree now inherits `fibofnd` (zugferd/fibobe/skr0x).
13+
14+
## What I need carved out — 4 slots per savant
15+
16+
For each savant create `.claude/odoo/savants/<Name>.md` (schema = `SAVANTS.md` §"Per-agent document schema") and fill **these four AXIS-B slots** (the rest of the tuple is in `contract::savants`):
17+
18+
1. **Evidence (Arrow `EvidenceRef`)** — the concrete table(s) + **key columns** + dtype, and what signal each column carries. This is the typed input the Reasoner consumes. *(Without this the impl has no input.)*
19+
2. **Odoo field → signal map** — which exact odoo model fields back each column (e.g. `res.partner.{payment_history, credit_limit}` for `PartnerTrustAdvisor`), with the L-doc `file:lines`.
20+
3. **Property-level alignment** — the OWL property IRIs (not just class) the reasoner traverses (e.g. `odoo:amount_residual ≡ fibo:hasResidualAmount`), if the decision crosses the FIBO/SKR/ZUGFeRD seam.
21+
4. **AXIS-B decision in evidence terms** — restate `decides` as: given evidence E, produce conclusion C with a NARS `(frequency, confidence)`; name the discriminating features. *(The AXIS-A guard is already in the L-docs; I only need the ambiguous core.)*
22+
23+
## The target the carve-out feeds (so you know the shape)
24+
25+
```rust
26+
// lance-graph side will implement, one per ReasoningKind (or savant-config registry — TBD review):
27+
impl Reasoner for <Kind>Reasoner {
28+
fn reason(&self, ctx: &ReasoningContext) -> SavantConclusion {
29+
// ctx.evidence: &[EvidenceRef] ← slot 1 (your schema)
30+
// dispatch by ctx.kind + family style; fuse via savant.semiring (NarsTruth common)
31+
// → conclusion + (frequency, confidence) ← slot 4 shape
32+
}
33+
}
34+
```
35+
36+
## The 25 savants to carve out (priority-ordered; fill in lane order)
37+
38+
**Tier 1 — substrate most ready, do first (accounting / 0x62 / 0x81):**
39+
40+
| id | savant | family | kind | infer | lane | decides (AXIS-B core) |
41+
|---|---|---|---|---|---|---|
42+
| 6 | SequenceGapAnomalyDetector | 0x62 | PostingAnomaly | Abduction | L11 | journal sequence gaps ⇒ deleted posted entries (GoBD) |
43+
| 17 | AutopostRecommender | 0x81 | PostingAnomaly | Induction | L1 | auto-post bills after 3+ unmodified from a partner |
44+
| 18 | LockDateAdvancer | 0x81 | PostingAnomaly | Abduction | L1 | next open period to advance a locked move into |
45+
| 4 | AnalyticDistributionSuggester | 0x62 | NextBestAction | Induction | L10 | suggested cost-centre distribution for a move line |
46+
| 15 | TaxExigibilitySuggestor | 0x62 | NextBestAction | Induction | L15 | tax exigibility (on-invoice vs on-payment / cash-basis) |
47+
48+
**Tier 2 — partner / pricing (0x80 / 0x81 / 0x64):**
49+
50+
| id | savant | family | kind | infer | lane | decides |
51+
|---|---|---|---|---|---|---|
52+
| 1 | FiscalPositionResolver | 0x80 | CustomerCategory | Deduction | L9 | which fiscal position (tax mapping) for a partner |
53+
| 2 | PartnerTrustAdvisor | 0x80 | CustomerCategory | Revision | L9 | partner trust / dunning-risk from payment history |
54+
| 3 | PricelistAssignmentAgent | 0x64 | Other(PRICELIST_ASSIGNMENT) | Revision | L8 | partner pricelist when no explicit property |
55+
| 23 | PricelistRecommender | 0x81 | NextBestAction | Synthesis | L6 | which pricelist rule when multiple candidates apply |
56+
| 22 | UpsellActivityTrigger | 0x81 | NextBestAction | Induction | L6 | qty_delivered>ordered ⇒ upsell TODO |
57+
| 10 | UserCompanyAccessAdvisor | 0x80 | CustomerCategory | Induction | L12 | branch-access subset by user role/context |
58+
59+
**Tier 3 — reconcile / FX / currency (None / 0x62):**
60+
61+
| id | savant | family | kind | infer | lane | decides |
62+
|---|---|---|---|---|---|---|
63+
| 19 | ReconcileMatchSelector | None | Other(RECONCILE_MATCH) | Induction | L2 | open items to propose as reconciliation candidates |
64+
| 20 | BankStatementMatcher | None | Other(BANK_STATEMENT_MATCH) | Induction | L5 | reconcile-model rule for a bank line + write-offs |
65+
| 21 | PaymentToInvoiceMatcher | None | Other(RECONCILE_MATCH) | Induction | L5 | whether a payment fully reconciles open invoices |
66+
| 5 | AnalyticModelScorer | None | CustomerCategory | Deduction | L10 | which analytic.distribution.model matches (priority) |
67+
| 7 | ExchangeAccountSelector | 0x62 | Other(CHART_ACCOUNT_MAPPING) | Deduction | L12 | gain/loss account for FX diff |
68+
| 8 | ReportRateTypeSelector | 0x62 | Other(CONSOLIDATION_RATE_POLICY) | Deduction | L12 | current/historical/average rate per report line |
69+
| 9 | CurrencySelectionAdvisor | 0x62 | NextBestAction | Induction | L12 | which currencies to enable (geography signal) |
70+
71+
**Tier 4 — stock / procurement (None, needs #414 axioms confirmed):**
72+
73+
| id | savant | family | kind | infer | lane | decides |
74+
|---|---|---|---|---|---|---|
75+
| 11 | ProcurementRuleSelector | None | NextBestAction | Induction | L13 | route among equal-sequence rules |
76+
| 12 | ReorderTimingAdvisor | None | NextBestAction | Induction | L13 | reorder timing under demand/supplier uncertainty |
77+
| 13 | ReplenishmentReportAdvisor | None | NextBestAction | Induction | L13 | real shortfall vs demand noise |
78+
| 14 | RouteTiebreaker | None | NextBestAction | Abduction | L13 | equal-sequence route tiebreak |
79+
| 24 | RemovalStrategySelector | None | NextBestAction | Induction | L7 | quants to bind to a reservation (FIFO/FEFO/LIFO) |
80+
| 25 | MoveAssignmentPrioritizer | None | NextBestAction | Induction | L7 | which confirmed moves to satisfy first |
81+
| 26 | BackorderJudge | None | NextBestAction | Abduction | L7 | partial fulfilment ⇒ backorder vs cancel |
82+
83+
## Open question for woa-rs to pin (drives the impl shape)
84+
85+
**Reasoner dispatch shape:** one `Reasoner` impl per `ReasoningKind` (5–6 impls, dispatch on family+evidence inside), **or** a savant-config registry (data-driven, one generic engine reading the savant tuple)? #414 flagged this as gating D-ODOO-SAV-4. Your call — it determines whether the carve-out feeds N impls or one config table.
86+
87+
## Hand-back
88+
89+
Fill the per-savant docs (or a single table with the 4 slots × 25) and drop a note in `lance-graph/.claude/board/AGENT_LOG.md`. I'll then implement the Reasoners against the filled evidence contract in one pass — no re-derivation.

0 commit comments

Comments
 (0)