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
12 changes: 12 additions & 0 deletions .claude/board/AGENT_LOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## [Main-thread → woa-rs HANDOFF] Odoo savant AXIS-B evidence-contract scaffold (carve-out request)

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).

---

## [Agent-A / Sonnet] [SCAFFOLD ONLY — no implementation, no commit] D-ATOM-4 — counterfactual.rs split-resolution-via-counterfactual-mantissa scaffold

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

---

## [Main-thread] [DONE — green] D-ODOO-1 Odoo savant roster + integration plan

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.

---

## [Main-thread] [DONE — green] the 34 tactics as 34 working Rust kernels (Elixir-like behaviour)

`crates/lance-graph-contract/src/recipe_kernels.rs` (new, wired in lib.rs). One uniform
Expand Down
7 changes: 7 additions & 0 deletions .claude/board/INTEGRATION_PLANS.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ D-ODOO-SAV-1/2/3 additive + low-risk → first PR (this session). D-ODOO-SAV-4

### Invariants
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.
---
## 2026-05-27 — odoo-savant-roster-v1 (the lance-graph side of the woa-rs Odoo savant delegation: 25 delegated reasoners)

**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).
**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`).
**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).
**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).

---

Expand Down
1 change: 1 addition & 0 deletions .claude/board/LATEST_STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

| PR | Merged | Title | What it added |
|---|---|---|---|
| **#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. |
| **#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`. |
| **#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`. |
| **#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`. |
Expand Down
29 changes: 29 additions & 0 deletions .claude/board/PR_ARC_INVENTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,35 @@

---

## PR #411 — Cognitive substrate: locked 33-TSV atom layer + 34-tactic recipes + escalation loop (MERGED 2026-05-27 → main)

**Status:** MERGED. Branch `claude/splat3d-cpu-simd-renderer-MAOO0` → `main`, 39 commits.

**Added:**
- `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.
- `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.
- `contract::recipes` — the 34 reasoning tactics as a metadata catalogue (`Recipe{Tier,Mechanism,Bucket,spo2cubed,substrate}`, `RECIPES[34]`, lookups). 4 tests.
- `contract::recipe_kernels` — **the 34 tactics as 34 `Tactic` implementations** + registry (`kernel`/`all_kernels`) over a shared `ThoughtCtx`. 5 tests.
- Scaffolds (un-wired, `todo!()`): `recipe.rs`/`quorum.rs`/`counterfactual.rs` (contract), `graph/witness_tombstone.rs` (core).

**Locked:**
- **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.
- Execution stack **atoms → cognitive-shader-driver → SIMD** (atoms are NOT SIMD).
- 3-layer: **atom = one pole** (bare-metal) → **style = one i4 vector** (molecule) → **persona = composition**; the OO style/persona objects are the metacognition.
- The lattice is **SPOQ**: SPO 2³ = the causal slice (Counterfactual=`SPO`/0b111, Intervention=`_PO`); **Q (Qualia) = the 4th, affective overlay**.
- **Business = OGIT-inherited sidecar**, not an atom.
- Markers gate implicitly (entropy=CollapseGate SD FLOW/HOLD/BLOCK, F-floor, rung, temperature, dissonance) — the CPU clock-gating partition: **datapath / control / gate**.
- The 34 tactics reduce to **3 mechanisms** (parallel-independence / truth-aware / structural-divergence) = the partition.
- One uniform `Tactic` behaviour; richer fingerprint substrate slots behind the same trait without changing the 34 call sites.

**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.

**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).

**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.

---

## sprint-13/W-I1 — impl(sprint-13): D-CSV-13b i4 batch SIMD dispatch + tests (in PR)

**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.
Expand Down
89 changes: 89 additions & 0 deletions .claude/odoo/savants/_SCAFFOLD-EVIDENCE-CONTRACT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# SCAFFOLD — Odoo savant AXIS-B evidence contract (carve-out request)

> **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").
> **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.
> **Date:** 2026-05-27.

## What lance-graph already has (don't re-send)

- **`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()`.
- **`reasoning::{Reasoner, ReasoningContext, ReasoningKind, EvidenceRef, Budget}`** — the delegation surface (shipped).
- **#414**: OGIT families `0x64 ProductCatalog` / `0x90 HRFoundation` + Layer-2 alignment axioms (stock.* / analytic.distribution.model / account.account.tag) + StyleCluster wiring.
- FIBU subtree now inherits `fibofnd` (zugferd/fibobe/skr0x).

## What I need carved out — 4 slots per savant

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`):

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.)*
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`.
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.
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.)*

## The target the carve-out feeds (so you know the shape)

```rust
// lance-graph side will implement, one per ReasoningKind (or savant-config registry — TBD review):
impl Reasoner for <Kind>Reasoner {
fn reason(&self, ctx: &ReasoningContext) -> SavantConclusion {
// ctx.evidence: &[EvidenceRef] ← slot 1 (your schema)
// dispatch by ctx.kind + family style; fuse via savant.semiring (NarsTruth common)
// → conclusion + (frequency, confidence) ← slot 4 shape
}
}
```

## The 25 savants to carve out (priority-ordered; fill in lane order)

**Tier 1 — substrate most ready, do first (accounting / 0x62 / 0x81):**

| id | savant | family | kind | infer | lane | decides (AXIS-B core) |
|---|---|---|---|---|---|---|
| 6 | SequenceGapAnomalyDetector | 0x62 | PostingAnomaly | Abduction | L11 | journal sequence gaps ⇒ deleted posted entries (GoBD) |
| 17 | AutopostRecommender | 0x81 | PostingAnomaly | Induction | L1 | auto-post bills after 3+ unmodified from a partner |
| 18 | LockDateAdvancer | 0x81 | PostingAnomaly | Abduction | L1 | next open period to advance a locked move into |
| 4 | AnalyticDistributionSuggester | 0x62 | NextBestAction | Induction | L10 | suggested cost-centre distribution for a move line |
| 15 | TaxExigibilitySuggestor | 0x62 | NextBestAction | Induction | L15 | tax exigibility (on-invoice vs on-payment / cash-basis) |

**Tier 2 — partner / pricing (0x80 / 0x81 / 0x64):**

| id | savant | family | kind | infer | lane | decides |
|---|---|---|---|---|---|---|
| 1 | FiscalPositionResolver | 0x80 | CustomerCategory | Deduction | L9 | which fiscal position (tax mapping) for a partner |
| 2 | PartnerTrustAdvisor | 0x80 | CustomerCategory | Revision | L9 | partner trust / dunning-risk from payment history |
| 3 | PricelistAssignmentAgent | 0x64 | Other(PRICELIST_ASSIGNMENT) | Revision | L8 | partner pricelist when no explicit property |
| 23 | PricelistRecommender | 0x81 | NextBestAction | Synthesis | L6 | which pricelist rule when multiple candidates apply |
| 22 | UpsellActivityTrigger | 0x81 | NextBestAction | Induction | L6 | qty_delivered>ordered ⇒ upsell TODO |
| 10 | UserCompanyAccessAdvisor | 0x80 | CustomerCategory | Induction | L12 | branch-access subset by user role/context |

**Tier 3 — reconcile / FX / currency (None / 0x62):**

| id | savant | family | kind | infer | lane | decides |
|---|---|---|---|---|---|---|
| 19 | ReconcileMatchSelector | None | Other(RECONCILE_MATCH) | Induction | L2 | open items to propose as reconciliation candidates |
| 20 | BankStatementMatcher | None | Other(BANK_STATEMENT_MATCH) | Induction | L5 | reconcile-model rule for a bank line + write-offs |
| 21 | PaymentToInvoiceMatcher | None | Other(RECONCILE_MATCH) | Induction | L5 | whether a payment fully reconciles open invoices |
| 5 | AnalyticModelScorer | None | CustomerCategory | Deduction | L10 | which analytic.distribution.model matches (priority) |
| 7 | ExchangeAccountSelector | 0x62 | Other(CHART_ACCOUNT_MAPPING) | Deduction | L12 | gain/loss account for FX diff |
| 8 | ReportRateTypeSelector | 0x62 | Other(CONSOLIDATION_RATE_POLICY) | Deduction | L12 | current/historical/average rate per report line |
| 9 | CurrencySelectionAdvisor | 0x62 | NextBestAction | Induction | L12 | which currencies to enable (geography signal) |

**Tier 4 — stock / procurement (None, needs #414 axioms confirmed):**

| id | savant | family | kind | infer | lane | decides |
|---|---|---|---|---|---|---|
| 11 | ProcurementRuleSelector | None | NextBestAction | Induction | L13 | route among equal-sequence rules |
| 12 | ReorderTimingAdvisor | None | NextBestAction | Induction | L13 | reorder timing under demand/supplier uncertainty |
| 13 | ReplenishmentReportAdvisor | None | NextBestAction | Induction | L13 | real shortfall vs demand noise |
| 14 | RouteTiebreaker | None | NextBestAction | Abduction | L13 | equal-sequence route tiebreak |
| 24 | RemovalStrategySelector | None | NextBestAction | Induction | L7 | quants to bind to a reservation (FIFO/FEFO/LIFO) |
| 25 | MoveAssignmentPrioritizer | None | NextBestAction | Induction | L7 | which confirmed moves to satisfy first |
| 26 | BackorderJudge | None | NextBestAction | Abduction | L7 | partial fulfilment ⇒ backorder vs cancel |

## Open question for woa-rs to pin (drives the impl shape)

**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.

## Hand-back

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.
Loading
Loading