From 84f2885468a9e0c8b846e38aefefba3e2a0b9881 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 2 Sep 2026 17:47:29 +0000 Subject: [PATCH 1/4] plans: House differential style v1 + thinking-engine harvest & closure v1 Two plan-only additions, no code. house-differential-style-v1: names the differential-diagnosis style pattern as a composition of shipped rung-3 tactics (RCR frontier, periphery watchers + peripheral_dissent, ASC with the disjoint-stamp guard, CR, council split -> -6 counterfactual fork), asks for two readouts (discriminating evidence; elimination as a predicate over arena entries) and an anchoring alarm gated on the ghost-prior harvest. First code is PROBE-HOUSE-DIFFERENTIAL-1 (planted-cause recovery, shuffle null, periphery can-fire and can-stay-silent). No opcode, tenant, ClassView, axis, struct, persona wiring, or clinical content; the working name never enters code. thinking-engine-harvest-closure-v1: measured live footprint of the excluded crate (one required consumer through the bridge_gate trait module; one optional consumer behind with-engine), 51-file fate table on the MODULE-TABLE census, reconciliation of every open row still pointing at the crate, four-wave closure with stop rules, idea harvest, four rulings asked. Board: INTEGRATION_PLANS entry; STATUS_BOARD sections D-HOUSE-0..6 and D-TEH-0..5; status-cell regrades with evidence (D-PERSONA-1 -> Shipped, D-PERSONA-5 proposed RETIRE, D-REUNIFY-2 shipped as D-CSV-9); EPIPHANIES E-THINKING-ENGINE-LIVE-FOOTPRINT-IS-ONE-TRAIT-AND-HOUSE-IS-SHIPPED-IN-PIECES-1; SUPERSESSION-INDEX regenerated last. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01PFnYKqw6d7TTiB9cT8eFdK --- .claude/board/EPIPHANIES.md | 14 ++ .claude/board/INTEGRATION_PLANS.md | 31 +++ .claude/board/PR_ARC_INVENTORY.md | 24 ++ .claude/board/STATUS_BOARD.md | 29 ++- .claude/board/SUPERSESSION-INDEX.md | 24 +- .claude/plans/house-differential-style-v1.md | 223 ++++++++++++++++++ .../thinking-engine-harvest-closure-v1.md | 206 ++++++++++++++++ 7 files changed, 536 insertions(+), 15 deletions(-) create mode 100644 .claude/plans/house-differential-style-v1.md create mode 100644 .claude/plans/thinking-engine-harvest-closure-v1.md diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index d7811bf79..c4b49f5ff 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -1,3 +1,17 @@ +## 2026-09-02 — E-THINKING-ENGINE-LIVE-FOOTPRINT-IS-ONE-TRAIT-AND-HOUSE-IS-SHIPPED-IN-PIECES-1 — the 51-file excluded crate binds the spine through ONE trait module; the differential-diagnosis style the operator asked for already exists as seven scattered shipped mechanisms and zero names + +**Status:** FINDING (measured on `94543a5`, read-only). **Confidence:** High for both measurements. Plans: `house-differential-style-v1`, `thinking-engine-harvest-closure-v1`. + +**Measurement 1 — the crate's live footprint.** `grep thinking-engine crates/*/Cargo.toml` names two consumers. `lance-graph-callcenter` requires it and uses exactly `bridge_gate::{CognitiveBridgeGate, CognitiveAuthResult, …}` — a trait-only module whose own doc says it lives low so callcenter can implement it. `cognitive-shader-driver` takes it OPTIONALLY behind `with-engine` (default off) and reaches `dto::BusDto`, two `cognitive_stack` thresholds, and lens lookups in doc/test paths. Everything else in the 51 files is internal or example-only. Consequence: the chapter closes by moving one trait to the zero-dep contract and ruling the DTO ladder's home under D-TTV-1 — not by a rewrite. The MODULE-TABLE census's gem-status column, COMPONENT-MAP §3 and three TD rows already agreed on the file-level verdicts; nobody had measured the dependency edge, so the closure kept looking larger than it is. + +**Measurement 2 — the House question.** A grep for the pattern's name (and for "differential diagnosis") over `.claude/`, thinking-engine, contract and planner returns nothing. The mechanics are shipped in seven places: `rcr_abduce` (the ranked board), `asc_challenge` with the disjoint-stamp guard (attack the leader), `cr_synthesize` (thesis/antithesis, depth preserved), `InnerCouncil` + `quorum_project` + `deposit_counterfactual` (minority kept as −6), `peripheral_sample_where` + `peripheral_dissent` (the test nobody ordered; never decides), `Recipe::min_rung` (cheap passes first), `WisdomMarker`/`GhostEcho` (memory, without the field). MedCare-rs already carries the consumer shape (`differential() -> Vec`, private repo). What is missing is not a mechanism but two READOUTS (discriminating evidence; elimination as a predicate over `truth`/`contradiction`/`stamp`) and the O2 style→recipe edge. Consequence: the right first artifact is a falsifier, not a struct — PROBE-HOUSE-DIFFERENTIAL-1 (planted-cause recovery, shuffle null, periphery can-fire AND can-stay-silent). + +**Two stale rows found on the way.** D-PERSONA-1 still read "In progress" on a branch name; its content (`contract::escalation`, planner `mul/escalation.rs`) is on main. D-REUNIFY-2 still read "Backlog"; it shipped as D-CSV-9 in #387. Both regraded in the same commit, status cells only. + +**Rule extracted.** Before sizing a retirement, measure the DEPENDENCY EDGE (which symbols cross the crate boundary), not the file count. A 51-file crate with a one-trait edge is a one-trait retirement plus a harvest list; the harvest list is then governed by consumers and falsifiers, one port at a time. + +Refs: `TD-THINKING-ENGINE-EXCLUDED-DEBT-1`, `TD-GHOST-ECHO-DUP-1`, `E-RUNG-ASCENT-WIRED-1` (the crate named orphaned), `E-PERIPHERAL-DISSENT-GUARDS-THE-STRATIFICATION-1`, `E-DIALECTIC-V1-TACTICS-IN-PLANNER-1`, `persona-vs-rung-ladder.md` O2/O3. + ## 2026-09-02 — E-QUALIA-IS-RANK-INERT-AT-THE-FRONTIER-AND-POPULATION-LOSES-TO-COUNTING-1 **Status:** MEASURED (PROBE-POP-READOUT-1 / D-POP-1, `pop_readout.rs`, whole diff --git a/.claude/board/INTEGRATION_PLANS.md b/.claude/board/INTEGRATION_PLANS.md index ab2242487..c9fd306ac 100644 --- a/.claude/board/INTEGRATION_PLANS.md +++ b/.claude/board/INTEGRATION_PLANS.md @@ -1,3 +1,34 @@ +## 2026-09-02 — `house-differential-style-v1` (PROPOSAL, plan-only) + `thinking-engine-harvest-closure-v1` (PROPOSAL, plan-only) + +`.claude/plans/house-differential-style-v1.md`. A differential-diagnosis +style program named as a COMPOSITION of shipped rung-3 tactics — RCR +frontier, periphery watchers (`peripheral_sample_where` + +`peripheral_dissent`), ASC challenge with the disjoint-stamp guard, CR +synthesis, council split → −6 counterfactual fork — plus two readouts it +asks for (discriminating evidence; elimination as a predicate over arena +entries, never a new state) and an anchoring alarm gated on the ghost-prior +harvest. Nothing in the parts list is modified. Gate: PROBE-HOUSE- +DIFFERENTIAL-1 (D-HOUSE-1), planted-cause recovery on synthetic arenas with +shared-predicate distractors, size-preserving shuffle null, can-fire AND +can-stay-silent bounds on the periphery. No opcode, tenant, ClassView, axis, +struct, persona wiring, or clinical content. The working name never enters +code. + +`.claude/plans/thinking-engine-harvest-closure-v1.md`. Fate of every one of +the 51 files in the workspace-excluded crate (HARVESTED / HOT-VIA-FEATURE / +GEM→landing / LAB / RESIDUE), built on the MODULE-TABLE census and +COMPONENT-MAP §3. Measured live footprint: one required consumer +(`lance-graph-callcenter`, ONE trait module `bridge_gate`) and one optional +(`cognitive-shader-driver` `with-engine`: the DTO ladder + two thresholds). +Reconciles every open row still pointing at the crate (D-PERSONA-1 stale → +Shipped; D-PERSONA-5 proposed RETIRE under E-NOBODY-WAITS-1; D-REUNIFY-2 +already shipped as D-CSV-9; D-REUNIFY-4 done in `think.rs`; three TDs +paid by named waves). Closure in four waves — cut the hard dependency, +harvest gems WITH consumers and falsifiers, M8 engine collapse, retire and +rename to a lab crate — with stop rules (no port without a consumer, no +singleton field, no handoff-type revival, no asserted axis basis). §4 keeps +the chapter's ideas as doctrine with named homes. + ## 2026-09-02 — `post-teardown-buildup-survey-v1` (SURVEY, plan-only) `.claude/plans/post-teardown-buildup-survey-v1.md`. First step after the diff --git a/.claude/board/PR_ARC_INVENTORY.md b/.claude/board/PR_ARC_INVENTORY.md index 79e7218e3..4bac0b714 100644 --- a/.claude/board/PR_ARC_INVENTORY.md +++ b/.claude/board/PR_ARC_INVENTORY.md @@ -10,6 +10,30 @@ > census §8.3 trap 10: read the body FIRST, then open for write — never > inline both in one expression. +## 2026-09-02 — lance-graph branch `claude/medcare-rs-continue-6nhbxn` (plans PR, after #1136) — House differential style v1 + thinking-engine harvest & closure v1 + +- **Added:** `.claude/plans/house-differential-style-v1.md` (223 lines: parts + list of shipped surfaces file-cited, the composition as a recipe-level + program, ladder placement per `persona-vs-rung-ladder.md`, PROBE-HOUSE- + DIFFERENTIAL-1 pre-registered, D-HOUSE-0..6); + `.claude/plans/thinking-engine-harvest-closure-v1.md` (206 lines: measured + live footprint, 51-file fate table, open-row reconciliation, four-wave + closure with stop rules, idea harvest, D-TEH-0..5, four rulings asked); + INTEGRATION_PLANS entry; STATUS_BOARD sections for both plans; EPIPHANIES + entry `E-THINKING-ENGINE-LIVE-FOOTPRINT-IS-ONE-TRAIT-AND-HOUSE-IS-SHIPPED-IN-PIECES-1`; + SUPERSESSION-INDEX regenerated last. +- **Regraded (status cells only, evidence cited):** D-PERSONA-1 In progress → + Shipped (`contract::escalation` + planner `mul/escalation.rs` on main); + D-PERSONA-5 annotated "proposed RETIRE, ruling needed"; D-REUNIFY-2 + annotated "shipped as D-CSV-9 (#387)". +- **Locked:** nothing — plan-only; no code, no Cargo change, no type. +- **Deferred:** every code wave (D-HOUSE-1, D-TEH-1..5) behind its gate; four + rulings listed in the closure plan §6. +- **Confidence:** High for the footprint measurement (two `Cargo.toml` + consumers, symbols grepped) and the parts list (each row file:line); + Medium for the fate verdicts that name a landing without a consumer yet + (they are marked "park" rather than "port"). + ## 2026-09-02 — lance-graph branch `claude/medcare-rs-continue-6nhbxn` (D-POP-1 result PR, after #1135) — PROBE-POP-READOUT-1 - **Added:** `crates/deepnsm-v2/examples/pop_readout.rs` (probe only, no library diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index adaf69dbe..31a0cfbfa 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -1,3 +1,26 @@ +## house-differential-style-v1 + +| D-id | deliverable | status | +|---|---|---| +| D-HOUSE-0 | the plan: parts list of shipped surfaces (file-cited), the composition as a recipe-level style program, ladder placement, pre-registered falsifier | **Shipped (plan-only, this PR)** | +| D-HOUSE-1 | PROBE-HOUSE-DIFFERENTIAL-1: planted-cause recovery on synthetic arenas with shared-predicate distractors; arms RCR-alone / +ASC / full cycle / shuffle null; PASS iff Δp@1 ≥ 0.05 above null p95, planted cause never eliminated, periphery fires on 10–90 % | **Queued — next step** | +| D-HOUSE-2 | discriminating-evidence readout (clone arena, observe hypothetical premise, report largest rank displacement) | Gated on D-HOUSE-1 PASS | +| D-HOUSE-3 | elimination predicate over `truth`/`contradiction`/`stamp` + never-re-enter falsifier | Gated on D-HOUSE-1 PASS | +| D-HOUSE-4 | anchoring alarm (free energy between wisdom-marker prior and evidence) | Gated on `thinking-engine-harvest-closure-v1` D-TEH-2 | +| D-HOUSE-5 | the style→recipe edge (O2) with House as its first program | Gated on D-HOUSE-1 PASS and the D-TSC-2/3 mint | +| D-HOUSE-6 | consumer pointer: `DiffRow` READ fields `eliminated` / `discriminator` (MedCare-rs) | pointer only, out of scope here | + +## thinking-engine-harvest-closure-v1 + +| D-id | deliverable | status | +|---|---|---| +| D-TEH-0 | census: live footprint measured (one required consumer via `bridge_gate`; one optional via `with-engine`), 51-file fate table, open-row reconciliation, four-wave closure, idea harvest, four rulings asked | **Shipped (plan-only, this PR)** | +| D-TEH-1 | W1: `bridge_gate` trait → `lance-graph-contract`; callcenter drops the path dep; DTO-ladder home ruling recorded (D-TTV-1); thinking-engine becomes a leaf | Queued — first code wave | +| D-TEH-2 | W2: ghost prior → planner `nars/ghost_prior.rs` over `WisdomMarker`, per-thought, two-sided falsifiers; crate `ghosts.rs` deleted | Queued — consumer D-HOUSE-4 | +| D-TEH-3 | W2: `cronbach` → `jc::reliability`; `semantic_chunker` / `spiral_segment` decided by their falsifiers | Queued | +| D-TEH-4 | W3: ENTROPY M8 engine collapse with dtype parity suite; 5 cascade shapes + 3 lens modules collapse | Queued | +| D-TEH-5 | W4: residue deleted, crate renamed `thinking-lab` with a `--manifest-path` CI line; §2 rows closed; `TD-THINKING-ENGINE-EXCLUDED-DEBT-1` paid | Queued — closes the chapter | + ## post-teardown-buildup-survey-v1 | D-id | deliverable | status | @@ -1343,7 +1366,7 @@ Plan path: `.claude/plans/causaledge64-mailbox-rename-soa-v1.md`. | D-id | Title | Status | PR / Evidence | |---|---|---|---| | D-REUNIFY-1 | Acknowledge dual `CausalEdge64` types in TYPE_DUPLICATION_MAP + LATEST_STATE + EPIPHANIES | **Shipped** | this commit (post-merge #372 board-hygiene tail) | -| D-REUNIFY-2 | 8-channel → SPO transcoder spec at thinking-engine L3 commit boundary | **Backlog** | per Option R-3; sprint-12+ | +| D-REUNIFY-2 | 8-channel → SPO transcoder spec at thinking-engine L3 commit boundary | **Backlog → shipped as D-CSV-9** (#387 `e042c70`; annotated 2026-09-02, `thinking-engine-harvest-closure-v1` §2) | per Option R-3; sprint-12+ | | D-REUNIFY-3 | `Think` carrier struct prototype unifying thinking-engine cascade + cognitive-shader-driver SoA | **Backlog** | per `.claude/knowledge/splat-shader-rayon-struct-method-vision.md` sprint-12 | | D-REUNIFY-4 | Splat op fleet (`splat_gaussian`, `score_hole_closure`, `replay_coherence`, `emit_if_epiphany`) as methods on `Think` | **Backlog** | sprint-13+ | | D-REUNIFY-5 | rayon work-stealing par_* method variants | **Backlog** | sprint-14+ | @@ -1440,11 +1463,11 @@ hot/cold/feedback loop onto our contract types + SoA floor | D-id | Title | Crate(s) | ~LOC | Risk | Status | PR / Evidence | |---|---|---|---|---|---|---| -| D-PERSONA-1 | escalation+epiphany loop = the checklist (`felt_parse` collapse-hint + `InnerCouncil`/`HdrResonance` split + `EpiphanyDetector`; green-flip = Epiphany/Wisdom ghost) — NOT a bespoke verifier | contract + planner | 160 | LOW | **In progress** | branch `claude/splat3d-cpu-simd-renderer-MAOO0` | +| D-PERSONA-1 | escalation+epiphany loop = the checklist (`felt_parse` collapse-hint + `InnerCouncil`/`HdrResonance` split + `EpiphanyDetector`; green-flip = Epiphany/Wisdom ghost) — NOT a bespoke verifier | contract + planner | 160 | LOW | **Shipped** (regraded 2026-09-02 by `thinking-engine-harvest-closure-v1` §2: `contract::escalation` {CollapseHint, InnerCouncil, EpiphanyDetector, GhostEcho, WisdomMarker, Checklist} + planner `mul/escalation.rs` {`verdict_from`, `boot_checklist`} are on main; the old branch pointer was stale) | — | | D-PERSONA-2 | meta-recipe manifest (declarative child-spec, recipe-as-data, macro-evaluable) | contract | 150 | MED | **Queued** | — | | D-PERSONA-3 | hot/cold/feedback wiring — anneal + `CrystalCodebook`→wisdom-marker cold path + Preload hydrate | planner + Lance | 240 | MED | **Queued** | — | | D-PERSONA-4 | macro-eval harness (scenario→trace→discover→diagnose; suspect-bridge = blasgraph betweenness; 5 rubrics from D-RUNG-MUL) | planner + Lance | 280 | HIGH | **Queued** | — | -| D-PERSONA-5 | ractor outer-swarm runtime under `OrchestrationBridge` (batons as messages, async only at boundary) | planner | 200 | MED | **Queued** | — | +| D-PERSONA-5 | ractor outer-swarm runtime under `OrchestrationBridge` (batons as messages, async only at boundary) | planner | 200 | MED | **Queued — proposed RETIRE** (`thinking-engine-harvest-closure-v1` §2/§6: batons-as-messages contradicts E-NOBODY-WAITS-1 and E-ACK-ELIMINATED-1; ruling needed, not assumed) | — | | D-PERSONA-6 | `odoo_scanner` + `OdooBridge` — harvest Odoo `l10n_de` → Finance-ns `MappingProposal`s; bind existing `TaxEngine`; GoBD by construction | ontology + contract + planner | 280 | MED | **Queued** | — | --- diff --git a/.claude/board/SUPERSESSION-INDEX.md b/.claude/board/SUPERSESSION-INDEX.md index 9d51051aa..8f4687b8a 100644 --- a/.claude/board/SUPERSESSION-INDEX.md +++ b/.claude/board/SUPERSESSION-INDEX.md @@ -17,11 +17,11 @@ most-referenced symbol here: **68 crate files, 44 plans, 41 of them blind.** That is a programme, not a cleanup. -**`CollapseGateEmission` is the sharpest case: 12 plans name it and *every one* is blind.** -Its COMPONENT-MAP note reads: already tombstoned (PR #477); comment-only remains +**`GateState` is the sharpest case: 1 plans name it and *every one* is blind.** +Its COMPONENT-MAP note reads: intra-cascade SD gate — fine IF intra-mailbox; warden sign-off queued, not assumed **`ResonanceDto` → `PerturbationDto` gives the rule that needs no map at all:** -2 crate files against 10 plans. The code moved; the plans did not. +2 crate files against 11 plans. The code moved; the plans did not. **Plan-mentions exceeding crate-mentions is a staleness signal on its own.** ### The limit of the mechanical route @@ -49,9 +49,9 @@ coverage instead. | symbol | verdict | successor | live in crates | named in plans | blind plans | |---|---|---|---|---|---| -| `A2AMessage` | BLOCKED | — | 2 | 0 | 0 | -| `StepMask` | BLOCKED | — | 3 | 8 | 4 | -| `commit_to_l4` | BLOCKED | — | 2 | 1 | 0 | +| `A2AMessage` | BLOCKED | — | 2 | 1 | 0 | +| `StepMask` | BLOCKED | — | 3 | 9 | 4 | +| `commit_to_l4` | BLOCKED | — | 2 | 2 | 0 | | `dispatch_busdto` | BLOCKED | — | 3 | 6 | 5 | | `persist_cycle` | BLOCKED | — | 10 | 6 | 5 | | `CognitiveMarkers` | REPURPOSE | `Commit` | 2 | 0 | 0 | @@ -59,10 +59,10 @@ coverage instead. | `GateDecision` | REPURPOSE | — | 25 | 27 | 24 | | `GateState` | REPURPOSE | — | 14 | 1 | 1 | | `MergeMode` | REPURPOSE | — | 8 | 13 | 12 | -| `ResonanceDto` | REPURPOSE | `PerturbationDto` | 2 | 10 | 7 | +| `ResonanceDto` | REPURPOSE | `PerturbationDto` | 2 | 11 | 7 | | `BindSpace` | RETIRE | — | 68 | 44 | 41 | -| `CollapseGateEmission` | RETIRE | — | 5 | 12 | 12 | -| `ThinkingStyle` | RETIRE-toward-contract | — | 51 | 27 | 24 | +| `CollapseGateEmission` | RETIRE | — | 5 | 13 | 12 | +| `ThinkingStyle` | RETIRE-toward-contract | — | 51 | 28 | 24 | ## Table 2 — plans naming a ruled symbol without citing the ruling (73) @@ -98,8 +98,8 @@ a licence to act on it. | **READ** | `self-reasoning-substrate-v1` | `GateDecision` | PROPOSED — doc-only. No code, no contract ch | 5/5 | | **READ** | `v3-convergence-wiring-v1` | `GateDecision` | ACTIVE (2026-07-01). Operator: "I'm all in f | 0/0 | | **RESCOPE** | `soa-migration-diff-resolution-2026-06-13` | `BindSpace`, `CollapseGateEmission`, `GateDecision`, `MergeMode` … | — | 3/5 | -| **RESCOPE** | `cognitive-substrate-convergence-v1` | `BindSpace`, `CollapseGateEmission`, `GateDecision`, `MergeMode` … | PROPOSAL (sprint-10 architectural decisions | 6/13 | -| **RESCOPE** | `cognitive-substrate-convergence-v2` | `BindSpace`, `CollapseGateEmission`, `GateDecision`, `MergeMode` … | ACTIVE — sprint-11 Phase A/B COMPLETE (pendi | 7/15 | +| **RESCOPE** | `cognitive-substrate-convergence-v1` | `BindSpace`, `CollapseGateEmission`, `GateDecision`, `MergeMode` … | PROPOSAL (sprint-10 architectural decisions | 7/13 | +| **RESCOPE** | `cognitive-substrate-convergence-v2` | `BindSpace`, `CollapseGateEmission`, `GateDecision`, `MergeMode` … | ACTIVE — sprint-11 Phase A/B COMPLETE (pendi | 8/15 | | **RESCOPE** | `bindspace-singleton-to-mailbox-soa-v1` | `BindSpace`, `CollapseGateEmission`, `ResonanceDto`, `ThinkingStyle` | CONJECTURE / design (migration spec). NOT ye | 18/19 | | **RESCOPE** | `callcenter-membrane-v1` | `BindSpace`, `GateDecision`, `MergeMode`, `ThinkingStyle` | Active | 0/0 | | **RESCOPE** | `causaledge64-mailbox-rename-soa-v1` | `BindSpace`, `GateDecision`, `MergeMode`, `ThinkingStyle` | Active (draft, 2026-05-14) | 1/10 | @@ -110,7 +110,7 @@ a licence to act on it. | **RESCOPE** | `alpha-reason-witness-shader-field-archaeology-pass-1` | `BindSpace`, `MergeMode`, `ResonanceDto` | SOURCE AUDIT / PLAN ONLY. No production wiri | 1/1 | | **RESCOPE** | `bindspace-mailbox-soa-dependency-map-v1` | `BindSpace`, `dispatch_busdto`, `persist_cycle` | MAP / preflight. No source wired yet. Read-b | 2/2 | | **RESCOPE** | `bindspace-mailbox-soa-w3-w4a-impl-v1` | `BindSpace`, `dispatch_busdto`, `persist_cycle` | v2 — 5-consolidation + 3-brutal-critic pass | 1/1 | -| **RESCOPE** | `cognitive-substrate-convergence-v3` | `BindSpace`, `CollapseGateEmission`, `MergeMode` | ACTIVE — sprint-12 Wave F + Wave G complete | 7/16 | +| **RESCOPE** | `cognitive-substrate-convergence-v3` | `BindSpace`, `CollapseGateEmission`, `MergeMode` | ACTIVE — sprint-12 Wave F + Wave G complete | 8/16 | | **RESCOPE** | `mailbox-cycle-aware-write-contract-v1` | `BindSpace`, `dispatch_busdto`, `persist_cycle` | CONJECTURE / design. 5+3-gated before code. | 1/1 | | **RESCOPE** | `unified-integration-v1` | `BindSpace`, `MergeMode`, `ThinkingStyle` | Active — brainstorm phase complete; delivera | 0/0 | | **RESCOPE** | `2026-05-06-splat-osint-ingestion-v1` | `BindSpace`, `MergeMode` | Active — PR 1+2 of 6 in flight on `claude/sp | 1/7 | diff --git a/.claude/plans/house-differential-style-v1.md b/.claude/plans/house-differential-style-v1.md new file mode 100644 index 000000000..6479cd303 --- /dev/null +++ b/.claude/plans/house-differential-style-v1.md @@ -0,0 +1,223 @@ +# House differential style v1 — a differential-diagnosis style program over shipped rung-3 tactics + +> **Status:** PROPOSAL, plan-only (no code, no opcode, no tenant, no ClassView, +> no axis vocabulary, no new struct). **Baseline:** lance-graph `94543a5` +> (the #1136 merge). **Date:** 2026-09-02. **Working label:** "House" is a +> working name for the differential-diagnosis style pattern (rank hypotheses, +> attack the leader, keep the minority alive, order the test nobody ordered, +> eliminate only on independent evidence). It names a composition; it never +> becomes an identifier in code, a classid, or a vocabulary row. +> **Predecessors:** `post-teardown-buildup-survey-v1` (atoms / recipes / +> styles framing; PROBE-POP-READOUT-1 KILL), `persona-vs-rung-ladder.md` +> (rung-content ladder; styles are programs applicable at any rung), +> `rung-persona-orchestration-v1` (D-PERSONA-1 shipped the council + +> epiphany loop this plan composes). **Sibling:** +> `thinking-engine-harvest-closure-v1` (the ghost-prior harvest this plan's +> D-HOUSE-4 waits on). **Domain fence:** the medical meaning of a differential +> lives in MedCare-rs (private). This plan carries only the reasoning +> mechanics; no clinical vocabulary, code, or data enters lance-graph. + +## 0. Why a plan and not a struct + +A grep for the pattern's name over `.claude/`, `crates/thinking-engine`, +`crates/lance-graph-contract` and `crates/lance-graph-planner` returns +nothing. The mechanics are nevertheless shipped, in pieces, across four +surfaces. Naming the composition is therefore the whole deliverable; the +first code this plan licenses is a falsifier, not a feature. + +``` +families = state / evidence carriers (unchanged; six, see survey §1) +atoms = readouts over the BeliefArena (expectation, contradiction, gaps) +recipes = the rung-3 tactics RCR / ASC / CR (+ TR, CAS as needed) +style = the House program: WHICH recipes fire, in WHAT order, with WHICH + periphery budget — a policy, applicable at any rung +``` + +## 1. What is already shipped (the parts list, file-cited) + +| House move | Shipped surface | Where | +|---|---|---| +| The whiteboard: ranked hypotheses from an observation | RCR abduction over a shared predicate → `Frontier { candidates, gaps }`, `Candidate { stmt, truth, premises, rung, tactic }`, `ReasoningGap` | planner `nars/tactics.rs:177 rcr_abduce`, `:71 Candidate`, `:88 ReasoningGap` | +| Attack the leading hypothesis | ASC: `challenge_target = ⟨1−f, c⟩`; counter-evidence admitted ONLY with a disjoint stamp; self-refutation `BlockedSelfReference` | `tactics.rs:457 challenge_target`, `:479 asc_challenge`, `:463 AscOutcome` | +| Thesis vs antithesis on one claim | CR: NARS revision, `|f₁−f₂|` contradiction depth preserved, never averaged | `tactics.rs:503 cr_synthesize` | +| The team argues; the minority view stays on the board | `InnerCouncil::deliberate`, `is_split(0.7, 0.5)` amplified ×1.2; a split quorum is a Contradiction, never averaged; the minority pole is forked as a −6 counterfactual nibble | contract `escalation.rs:137 InnerCouncil`, `:116 is_split`; `quorum.rs:215 quorum_project`; `counterfactual.rs:140 deposit_counterfactual` | +| The test nobody ordered (the contrarian) | excluded tactics run as watchers; a watcher that moves the score may force rung elevation; it never decides | contract `recipes.rs:557 peripheral_recipes`, `:573 peripheral_sample`, `:601 peripheral_sample_rotating`, `:641 peripheral_sample_where`; planner `strategy/style_strategy.rs:121 peripheral_dissent`, `:184 cross_family_dissent` | +| Cheap passes first, the counterfactual leap last | `Recipe::min_rung` / `admissible_at`, `RungLevel::for_pass`; admissible set 4 → 11 → 24 → 34; `ExtremelyHard` gated to `Counterfactual` | `recipes.rs:505–545` | +| Pattern memory and its failure mode (anchoring) | `GhostField::{imprint, bias, prediction, free_energy}` (excluded crate); contract twin `GhostEcho` + `WisdomMarker` (floor 0.1, decay 0.85) | `thinking-engine/src/ghosts.rs:75–200`; contract `escalation.rs:289 GhostEcho`, `:312 WisdomMarker` | +| Saturation: when everything is admissible, stop picking a winner | passive `quorum_mantissa` + `meta_basin` outlier SUGGESTIONS | `E-SATURATION-SWITCHES-TO-PASSIVE-QUORUM-1` | +| The one selection edge that exists today | `tactic_for_bias(GraphBias) -> TacticChoice` — a pure LUT driven by graph health, not by style | planner `nars/tactic_select.rs:77` | +| The consumer shape | `differential() -> Vec`, `Frontier::gaps` | MedCare-rs `medcare-cohorts/src/reasoning.rs:363`, `:499` (private repo; cited by path only) | + +Everything in the table is consumed as-is. Nothing in it is modified by +this plan. + +## 2. The composition (the style program, recipe level) + +One House cycle over a `BeliefArena`, written as the order in which shipped +tactics fire. Each step names its output atom so the falsifier in §4 can +measure it. + +1. **Board.** `rcr_abduce(arena, throttle)` from the observation's + predicate. Output: `Frontier.candidates` ranked by `truth.expectation()` + (the ranking key MedCare's `DiffRow` already uses). `Frontier.gaps` + records why candidates were NOT formed (`NoSharedMiddle`, `HubExcluded`, + `BudgetExhausted`, …) — this is the raw material for step 5. +2. **Periphery.** `RungLevel::peripheral_sample_where(k, eligible)` picks the + watchers the current rung excludes; `StyleStrategy::peripheral_dissent` + runs them as observers. If one moves the score beyond `tol`, the rung + elevates and step 1 re-runs with the wider admissible set. The periphery + never votes (E-PERIPHERAL-DISSENT-GUARDS-THE-STRATIFICATION-1). +3. **Challenge the leader.** For the top candidate, `asc_challenge` with the + best available counter-evidence. Only a DISJOINT stamp is admitted; a + `BlockedSelfReference` outcome is recorded, not retried with the same + sources. For a contested claim carried by two candidates, + `cr_synthesize` keeps both frequencies' distance as contradiction depth. +4. **Council.** `InnerCouncil::from_signals(trust, humility, flow, load)` + (planner `mul/escalation.rs::verdict_from` already derives these from a + `MulAssessment`). A split verdict routes through `quorum_project` → + contested → `deposit_counterfactual(minority pole)`. The minority + diagnosis stays addressable under the −6 lane and can win later via + `revise_if_minority_wins` when the mailbox arm exists. +5. **Discriminating evidence (OPEN — the first readout this plan asks for).** + For the top two candidates, name the single observation whose presence + would swap their order. Definition (a READOUT, no state): clone the + arena, `observe` a hypothetical premise with the candidate's own truth, + re-rank, report the premise with the largest rank displacement. + `Frontier.gaps` gives the candidate premises; the clone-and-observe is + what `dismech_counterfactual` already does for a cut edge, run here for + an added one. Not built; D-HOUSE-2. +6. **Elimination (OPEN — the second readout).** "Ruled out" is NOT "ranked + low" (MedCare's own plan says so). Definition: a candidate is eliminated + when an ASC challenge with DISJOINT counter-evidence drove its + `expectation()` below a pre-registered floor AND the contradiction depth + is recorded on the belief. Both facts are already on the arena entry + (`truth`, `contradiction`, `stamp`); elimination is a predicate over + them, never a new enum. Falsifier: an eliminated candidate must not + re-enter the top-k without a NEW disjoint stamp. D-HOUSE-3. +7. **Memory and the anchoring alarm (gated on the sibling plan).** On a + green-flip (`CollapseHint::Flow` plus an `Epiphany`) a `WisdomMarker` + is laid; on the next case the marker biases the initial ranking. The + alarm is `free_energy`: prior says X, evidence says Y, surprise rises → + the prior is demoted, not the evidence. The contract has the marker but + no field (no per-atom `bias`/`prediction`/`free_energy`); the excluded + crate has the field but no consumer. D-HOUSE-4 waits for + `thinking-engine-harvest-closure-v1` D-TEH-2 (ghost prior harvested with + a falsifier) and is NOT built by porting `GhostField` as a singleton. + +What the style ADDS beyond the parts: the order (1→7), the periphery budget +`k`, the elimination floor, and the rule that step 3 runs before any +commit. It adds no arithmetic of its own. + +## 3. Persona, rung, style — where House sits on the ladder + +- **Rung content:** House is a rung-3 composition (the 34 recipes ARE the + runbooks: RCR #4, TR #6, ASC #7, CAS #8, CR #11). Its ADMISSION follows + `Recipe::min_rung`: on a shallow pass only the gate/datapath tactics fire, + and the House cycle degenerates to "board + periphery"; ASC/CR (Control + bucket) open at `Analogical`. That degeneration is the pyramid working as + designed, not a defect. +- **Style application is not confined to rung 4** (scope correction of + 2026-08-30 in `persona-vs-rung-ladder.md`). House is a program over the + atom/mask substrate; the landing zone named for such programs is + `.claude/v3/FUTURE-DESIGN.md` E-THINKING-STYLES-ARE-CLASSES-1 (style = StepMask × + WideFieldMask + rung set + KausalSpec). House would be ONE such class. + This plan does not mint it (D-TSC-2/3 are the mint vehicle, still + queued). +- **Persona is out of scope by ruling O3.** `PersonaProfile` / + `CognitiveBaseline` (12 dims incl. `precision_drive`, + `epistemic_humility`) and the adjective-36 are the unwired + persona-modelling storyline. A "House persona" would be a data card there; + nothing in §2 needs it. `StyleFamily` (12) is enough to address the + program: the natural default is `Analytical` with a raised periphery + budget; measured, not assumed (§4). +- **The missing edge is O2**, unchanged: nothing selects recipes FROM a + style. `tactic_for_bias` selects from graph health. A House program needs + the style→recipe edge; §4's probe drives the cycle by hand so the edge's + absence does not block the measurement, and the probe's result is the + evidence for building the edge. + +## 4. Falsifier first — PROBE-HOUSE-DIFFERENTIAL-1 (D-HOUSE-1) + +**Question.** Does the House cycle (§2 steps 1–4, run by hand) recover a +planted cause more often than RCR alone, above a size-preserving shuffle +null, on synthetic arenas whose distractors share predicates with the +planted cause? + +**Why synthetic.** No clinical data may enter lance-graph (MedCare-rs +commitment #9; the private repo is the only place that corpus exists), and +the KJV SPO stream has no observation→cause structure. Planted-cause +recovery is the standard falsifier for an abductive ranker and needs no +domain vocabulary. + +**Fixture (pre-registered).** +- N = 200 arenas, SplitMix64 seed `0x9E3779B97F4A7C15 ^ i`. +- One planted cause `C*` with 4–6 observations `O_j`, each an + `O_j → C*` belief (`Copula::Inh`, frequency 0.9, confidence 0.6, + disjoint stamps). +- 5 distractor causes sharing 1–3 observations each with `C*` (the + shared-predicate trap RCR abduces over). +- One disjoint counter-evidence stamp per distractor (frequency ≤ 0.3) that + is ONLY visible to step 3. +- Half the arenas additionally carry a "far" fact reachable only by a tactic + the starting rung excludes (the periphery's job). + +**Arms.** +- A0: RCR alone (`rcr_abduce`, rank by expectation). +- A1: RCR + ASC on the leader (steps 1, 3). +- A2: full cycle (steps 1–4; `k = 4` periphery, `tol = 0.02`). +- AN: A2 on 25 permutations of the observation→cause links per arena + (size-preserving null). + +**Metrics.** p@1 and p@3 for `C*`; elimination false-positive rate (the +planted cause must never be eliminated); periphery fire rate. + +**PASS iff** (a) A2 p@1 − A0 p@1 ≥ 0.05 AND A2 p@1 > AN p95, (b) planted +cause eliminated in 0 arenas, (c) periphery fires on ≥ 10 % and ≤ 90 % of +arenas (can-fire AND can-stay-silent). **KILL** otherwise, and the plan +stops at §1 as a parts list. + +**Anti-vacuity guards (each disable-verified before the run is trusted).** +- Removing the disjoint-stamp gate in the fixture must make A1 worse than + A0 (otherwise the guard was never binding). +- Zeroing the far facts must drop the periphery fire rate to ~0. +- A2 with `k = 0` must equal A1 to the bit. + +**Deliverable shape.** One example in `lance-graph-planner/examples/` +(no library surface), plan §4a RESULT, one board entry, STATUS row. +Nothing else lands from a PASS except a licence to design the O2 edge. + +## 5. Deliverables + +| D-id | title | scope | status | +|---|---|---|---| +| D-HOUSE-0 | this plan: parts list, composition, ladder placement, falsifier | plan-only | Shipped (this PR) | +| D-HOUSE-1 | PROBE-HOUSE-DIFFERENTIAL-1 (§4) | planner example | Queued — next step | +| D-HOUSE-2 | discriminating-evidence readout (§2 step 5) | planner `nars` readout, no state | Gated on D-HOUSE-1 PASS | +| D-HOUSE-3 | elimination predicate (§2 step 6) + never-re-enter falsifier | planner `nars` readout | Gated on D-HOUSE-1 PASS | +| D-HOUSE-4 | anchoring alarm over a harvested ghost prior (§2 step 7) | planner, after D-TEH-2 | Gated on `thinking-engine-harvest-closure-v1` D-TEH-2 | +| D-HOUSE-5 | the style→recipe edge (O2) with House as its first program | contract + planner | Gated on D-HOUSE-1 PASS and the D-TSC-2/3 mint | +| D-HOUSE-6 | consumer pointer: `DiffRow` gains READ fields `eliminated` / `discriminator` | MedCare-rs (out of scope here) | pointer only | + +## 6. What this plan does NOT do + +- No opcode, tenant, ClassView, axis set, or lane; no `ENVELOPE_LAYOUT_VERSION` + change. +- No new struct for the differential: `Frontier` + `BeliefArena` entries are + the state; §2 steps 5–6 are readouts. +- No port of `GhostField` into the contract or planner as a singleton; the + ghost prior arrives per-mailbox through the sibling plan or not at all. +- No persona modelling, no adjective-36 wiring (O3). +- No clinical vocabulary, fixtures or data in lance-graph. +- No name "House" in any identifier, test name, or vocabulary row. + +## 7. Provenance + +Read-only survey on 2026-09-02 over `94543a5`: `persona-vs-rung-ladder.md` +(full), `recipes.rs` (rung admission + periphery), `escalation.rs`, +`quorum.rs`, `counterfactual.rs`, planner `nars/{tactics,tactic_select, +stance}.rs`, `mul/escalation.rs`, `thinking-engine/src/{ghosts,persona, +meaning_axes}.rs`, board entries `E-PERIPHERAL-DISSENT-GUARDS-THE- +STRATIFICATION-1`, `E-A-WATCHER-THAT-CANNOT-DISSENT-IS-NOT-A-WATCHER-1`, +`E-SATURATION-SWITCHES-TO-PASSIVE-QUORUM-1`, `E-DIALECTIC-V1-TACTICS-IN- +PLANNER-1`; MedCare-rs `docs/REASONING_CHAIN_INTEGRATION_PLAN.md` §A rows +(private; cited by path). diff --git a/.claude/plans/thinking-engine-harvest-closure-v1.md b/.claude/plans/thinking-engine-harvest-closure-v1.md new file mode 100644 index 000000000..459b6abac --- /dev/null +++ b/.claude/plans/thinking-engine-harvest-closure-v1.md @@ -0,0 +1,206 @@ +# thinking-engine harvest & closure v1 — harvest every gem into the spine, retire the residue, close the chapter + +> **Status:** PROPOSAL, plan-only (W0 = this census; no code moves in this +> PR). **Baseline:** lance-graph `94543a5`. **Date:** 2026-09-02. +> **Purpose:** the crate `crates/thinking-engine` (51 files, +> workspace-EXCLUDED, off CI, ~40 clippy lints + a stale test-compile break +> per `TD-THINKING-ENGINE-EXCLUDED-DEBT-1`) is the ladybug-rs migration's +> landing zone. Most of what was good in it has already been lifted into the +> spine; what remains is a mix of hot-path engines reached only through one +> optional feature, unwired gems with named landing zones, a calibration +> battery, and self-declared residue. This plan fixes the FATE of every file, +> lists the open plans and rows that still point at the crate, and sequences +> the closure so that nothing is lost and nothing is ported without a +> consumer and a falsifier. +> **Inputs (read, not re-derived):** `.claude/v3/MODULE-TABLE.md` ancestry +> census (51 rows, gem-status column), `.claude/v3/COMPONENT-MAP.md` §3, +> `.claude/v3/FUTURE-DESIGN.md` "the migration arc", `TECH_DEBT.md` +> (`TD-THINKING-ENGINE-EXCLUDED-DEBT-1`, `TD-GHOST-ECHO-DUP-1`, +> `TD-RESONANCEDTO-DUP-1`), STATUS_BOARD rows D-PERSONA-1..6, D-TRI-1..6, +> D-TSC-1b, D-TTV-1, D-REUNIFY-2..6, ENTROPY-MILESTONES M8, board entries +> `E-RUNG-ASCENT-WIRED-1`, `E-CE64-NAME-COLLISION-DEDUP`, +> `E-MORTON-CASCADE-V3-1` (downgraded), `E-ACK-ELIMINATED-1`, +> `E-NOBODY-WAITS-1`. **Sibling:** `house-differential-style-v1` (consumer +> of the ghost-prior harvest, D-TEH-2). + +## 0. The measured live footprint + +Two crates depend on `thinking-engine` (`grep thinking-engine crates/*/Cargo.toml`): + +| consumer | dependency | symbols actually used | +|---|---|---| +| `cognitive-shader-driver` | OPTIONAL, feature `with-engine`, default off | `dto::BusDto`; `cognitive_stack::{SD_FLOW_THRESHOLD, …}`; lens lookups (`jina_lookup`, `bge_m3_lookup`, `reranker_lookup`) in doc/test paths | +| `lance-graph-callcenter` | required, `default-features = false` | `bridge_gate::{CognitiveBridgeGate, CognitiveAuthResult, …}` (callcenter IMPLEMENTS the trait; direction callcenter → thinking-engine is the only allowed one) | + +So the spine's hard dependency on a 51-file crate is ONE trait module +(`bridge_gate.rs`), and the optional dependency is the DTO ladder plus two +thresholds. Everything else is internal to the crate or reached only by its +own examples. That is the finding this plan is built on: closing the chapter +costs one trait move and one DTO-home decision, not a rewrite. + +## 1. Fate table — every file, one verdict + +Verdict vocabulary: **HARVESTED** (already in the spine; the crate copy is a +dup to delete or a re-export), **HOT-VIA-FEATURE** (real compute, reached +only through `with-engine`), **GEM→landing** (unwired; a named spine home +and a consumer), **LAB** (calibration battery; keep in a lab crate), +**RESIDUE** (self-declared legacy; delete). + +### 1a. HARVESTED — the spine already has it + +| file / symbol | spine home | action | +|---|---|---| +| `cognitive_stack::RungLevel` | `contract::cognitive_shader::RungLevel` (`pub use` since E-RUNG-ASCENT-WIRED-1) | already a re-export; nothing to do | +| `cognitive_stack::ThinkingStyle` (12) | `contract::style_family::StyleFamily` (D-TSC-1) | deprecated alias; delete with the crate | +| `contract_bridge::contract_style_to_engine` | `StyleFamily::family()` | routed; delete with the crate | +| `ghosts::GhostType` (8) | `contract::escalation::GhostEcho` (identical 8, same order; `TD-GHOST-ECHO-DUP-1`) | the ENUM is harvested; the FIELD is not (see 1c) | +| `meaning_axes::Archetype` + council vote | `contract::escalation::{Archetype, InnerCouncil, is_split}` (D-PERSONA-1) | harvested; `CouncilWeights::modulate/shift_toward` has no spine twin — see 1c | +| `layered::CascadeChannels8` (ex-`CausalEdge64`, E-CE64-NAME-COLLISION-DEDUP) | 8-channel ↔ SPO transcoder D-CSV-9 (PR #387); channel = CE64 signed mantissa per FUTURE-DESIGN | transcoder shipped; the cascade itself is HOT-VIA-FEATURE (1b) | +| `dto::ResonanceDto` → `PerturbationDto` | D-PERT-1 (#630) | done; `awareness_dto::ResonanceDto` keeps its name (perspectival) | +| `cronbach::cronbach_alpha`, `QuorumLevel` | `jc::reliability::{cronbach_alpha, icc}` | dup; retire into jc (W2) | +| `superposition::ThinkingStyle = DetectedStyle` alias | renamed `DetectedStyle` (D-TSC-1) | the alias name still collides with `cognitive_stack`'s alias in the same crate; delete both with the crate | + +### 1b. HOT-VIA-FEATURE — real compute, one caller behind `with-engine` + +`engine.rs` (u8 MatVec, `cycle_vnni/cycle_auto`), `bf16_engine.rs`, +`signed_engine.rs`, `f32_engine.rs`, `builder.rs`, `lookup.rs` +(`TextToThought`), `codebook_index.rs`, `pooling.rs`, `sensor.rs`, +`dto.rs` (Φ/Ψ/B/Γ ladder), `awareness_dto.rs`, `qualia.rs` (`Qualia17D`), +`think.rs` (the "Thinking is a struct" carrier, minimum scope), +`superposition.rs`, `layered.rs`, `role_tables.rs`, the three lens +modules (`jina_lens` self-declared legacy, `bge_m3_lens`, `reranker_lens`). + +Two decisions own this group and both already have rows: +- **M8** (ENTROPY-MILESTONES, QUEUED): four near-duplicate engines + (u8/BF16/i8/f32, same 7-method API) → one enum-dispatched engine with a + parity suite across dtypes. `signed_domino`/`domino`/`composite_engine`/ + `dual_engine`/`branching` (1c) collapse into the same slice. +- **D-TTV-1** (Queued): thinking-related tenants → V3 substrate. This is + the vehicle for the DTO ladder's home: `BusDto.{converged, cycle_count}` + is the D-MBX-A6 Outcome signal (COMPONENT-MAP §3), so the ladder lands + where the outcome is consumed — the driver side — never in the zero-dep + contract. Ruling needed on WHICH crate (driver vs a small `thinking-dto` + crate); this plan does not decide it. + +### 1c. GEM → landing — unwired, with a named home AND a consumer + +| file / symbol | what it is | landing | consumer that justifies the port | gate | +|---|---|---|---|---| +| `ghosts::GhostField::{imprint,bias,prediction,free_energy,prune}` | Friston prior as a per-atom decaying field; the anchoring alarm | planner `nars/ghost_prior.rs` over `contract::escalation::WisdomMarker` (floor 0.1, decay 0.85 — the constants already agree); per-thought/per-mailbox, NEVER a singleton field | `house-differential-style-v1` D-HOUSE-4 (anchoring alarm) | falsifiers: bias decays but never below floor; `free_energy` RISES on a context shift and FALLS on a recurrence (two-sided); disable-run on the decay constant | +| `meaning_axes::CouncilWeights::{modulate, shift_toward}` | free-energy-weighted three-archetype modulation with renormalisation | `contract::escalation` beside `InnerCouncil` — only if a caller needs weighted (not majority) council output | none today | do NOT port until a caller exists; record the formula in the plan (done here) | +| `meaning_axes::AXES_48` + `AxisActivation` | 48 bipolar semantic axes (r = 0.9913 vs Jina cosine, per census) | `quorum.rs` names an `AxisId` BLOCKED on D-ATOM-1; AXES_48 is the natural candidate vocabulary | `quorum_project` per-axis projection | falsifier-first (the September ruling forbids a fixed axis basis minted by assertion): a size-preserving shuffle of axis assignments must NOT reproduce the 0.9913; until measured, the table stays where it is | +| `persona::{PersonaProfile, CognitiveBaseline}` | 12 personality constants + mode/temperature/rung bounds | a Layer-2 role catalogue DATA card (≤32 identities, I-VSA-IDENTITIES) in the persona storyline | none (O3: persona unwired by design) | park; no port | +| `persona::{A2AMessage, A2APayload, AgentDto}` | identity-carrying inter-agent messages | none | none | **RETIRE** — inter-mailbox handoff types were eliminated (`E-ACK-ELIMINATED-1`, no CollapseGateEmission/baton); COMPONENT-MAP already marks A2AMessage BLOCKED for exactly this | +| `world_model::{SelfState,UserState,FieldState,GestaltState,WorldModelDto}` | situational-awareness DTO | driver side with the DTO ladder (D-TTV-1) after the `GestaltState` dedup (defined twice: here and `awareness_dto.rs`) | driver | dedup first, then move with 1b | +| `cognitive_trace::{SpoTriple,CognitiveTrace,LensTrace}` | provenance chain text → thought | `temporal.rs` witness rows already carry provenance; a trace is a READ over versions | debug tooling only | port only if a probe needs it; otherwise delete with the crate | +| `domino.rs`, `signed_domino.rs`, `composite_engine.rs`, `dual_engine.rs`, `branching.rs` | 5 cascade shapes (top-K NARS-context cascade, signed variant, multi-lens superposition, u8-vs-BF16 disagreement, 4×4 spawning cascade) | M8 collapse surface | the one engine (1b) | parity suite; `branching.rs`'s "spawn, don't filter" shape is the idea worth keeping (§4) | +| `l4.rs`, `l4_bridge.rs`, `tensor_bridge.rs` | L4 "particle" personality layer + L3→L4 learning bridge (self-declared LOSSY) + embedding-output type | the LEARNED tenant of the triangle (`triangle-tenants-gestalt-separation-v1` W4b) | D-TRI-1 learned lane | BLOCKED on the orphan-write (`commit_to_l4` writes `&mut L4Experience` with no owner stamp — COMPONENT-MAP §3); stays until the learned lane wires, then ports as a ClassView reading | +| `prime_fingerprint.rs` | prime-DFT bit fingerprint, orthogonal by construction | VSA niche (I-VSA-IDENTITIES four tests) | none today | re-scope before any wiring; keep in LAB | +| `spiral_segment.rs` | 51× generative row compression (4×BF16 per row) | codec home: `bgz-tensor` / `ndarray::hpc` (encoding-ecosystem.md governs) | codec certification | `certification-officer` battery vs ground truth before promotion | +| `semantic_chunker.rs` | chunk boundaries = convergence jumps, no forward pass | `deepnsm-v2` (text side) or the paperless sentence assembler | tesseract-paperless `assemble_sentences` is the only live sentence producer | falsifier: boundaries vs a gold sentence split; else stays LAB | +| `contrastive_learner.rs`, `osint_bridge.rs` | online EMA table update; crawl → engine pipeline | `lance-graph-osint` owns the arc | osint arc | move with the osint arc or delete when it does | +| `inference_backend.rs` | 7-backend runtime registry ("nothing is killed, deprecation is data-driven") | LAB | R&D bench only | keep in the lab crate | +| `bridge_gate::{CognitiveBridgeGate, PassthroughGate, DenyAllGate, CognitiveOpKind}` | cross-tenant authorization injection point (trait-only) | `lance-graph-contract` (zero-dep, trait-only — it already says it lives low so callcenter can implement it) | `lance-graph-callcenter` (live) | W1: move trait, callcenter drops the thinking-engine dep; behaviour-preserving, tests move with it | + +### 1d. LAB — the calibration battery (keep, rename, gate) + +`auto_detect.rs`, `ground_truth.rs` (candle-gated), `reencode_safety.rs` +(x256 re-encode proof), `silu_correction.rs`, `tokenizer_registry.rs`, +`centroid_labels.rs`, `bridge.rs` (spiral → table index), `role_tables.rs` +(BF16 per-role tables). These feed D-MTS-2's certification gate and are +calibration-only by design. Fate: they survive as a lab crate +(`thinking-lab`, excluded, `calibration` feature) with a `--manifest-path` +CI line so the formatting/clippy debt cannot re-accumulate unseen. + +### 1e. RESIDUE — delete + +`splat_ops.rs` (self-declared deprecated, superseded by `Think::*`, removal +scheduled sprint-15+), `jina_lens.rs` (self-declared legacy; Jina v5 is +ground truth), the second `GestaltState`, the two `ThinkingStyle` aliases, +`persona::A2A*` (see 1c). + +## 2. Open plans and rows that still point at the crate — and their fate + +| item | today | fate under this plan | +|---|---|---| +| `rung-persona-orchestration-v1` D-PERSONA-1 | STATUS row says "In progress, branch claude/splat3d-…" | **STALE → Shipped**: `contract::escalation` (CollapseHint, InnerCouncil, EpiphanyDetector, GhostEcho, WisdomMarker, Checklist) and planner `mul/escalation.rs` (`verdict_from`, `boot_checklist`) are on main. Row regraded in this PR | +| D-PERSONA-2 meta-recipe manifest | Queued | absorbed by `house-differential-style-v1` §2 (a style program IS a declarative recipe composition) — first program = House; the manifest FORM waits for D-TSC-3 | +| D-PERSONA-3 hot/cold/feedback, `CrystalCodebook` → wisdom markers | Queued | absorbed by D-TEH-2 (ghost prior harvest) + D-HOUSE-4; the cold path is a WisdomMarker store keyed by fingerprint (I-VSA-IDENTITIES), not a history dump (rung-persona §8 already says so) | +| D-PERSONA-4 macro-eval harness | Queued | its first instance is PROBE-HOUSE-DIFFERENTIAL-1 (scenario → trace → diagnose); no separate harness before a second consumer | +| D-PERSONA-5 ractor outer-swarm, batons as messages | Queued | **proposed RETIRE** — contradicts `E-NOBODY-WAITS-1` (ractor = compile-time ownership only; no messages, no actors) and `E-ACK-ELIMINATED-1`; ruling needed, noted on the row | +| D-PERSONA-6 Odoo `l10n_de` harvest | Queued | not thinking-engine work; belongs to the odoo blueprint plans, unchanged | +| D-TRI-1..6 (triangle tenants) | value-tenant half merged (#717); D-TRI-6 ascent wired | unchanged; the LEARNED lane is the landing for `l4*` (1c) | +| D-TSC-1b → TD (5 missing planner `default_modulation` arms) | In PR / TD open | small pay, independent of this plan; listed so it is not forgotten | +| D-TTV-1 thinking tenants → V3 | Queued | the vehicle for 1b's DTO ladder home; ruling on crate placement needed | +| D-REUNIFY-2 (8ch → SPO transcoder) | Backlog | **already shipped as D-CSV-9** (#387); row to regrade | +| D-REUNIFY-3 (`Think` carrier unification) | Backlog | `think.rs` exists at minimum scope; moves with 1b under D-TTV-1 | +| D-REUNIFY-4 (splat ops as `Think` methods) | Backlog | done in `think.rs`; `splat_ops.rs` is the residue (1e) | +| D-REUNIFY-5 (rayon par_*), D-REUNIFY-6 (DOLCE filter wiring) | Backlog | superseded by V3 (SoA sweep, ontology at the membrane); propose CLOSE-superseded, ruling needed | +| ENTROPY M8 four-engine collapse | QUEUED | W3 of this plan | +| `TD-THINKING-ENGINE-EXCLUDED-DEBT-1` | open | paid by W1+W4 (the crate shrinks to a lab crate with a CI line) | +| `TD-GHOST-ECHO-DUP-1` | open | paid by W2 (field ported over `GhostEcho`; crate enum deleted) | +| `TD-RESONANCEDTO-DUP-1` | Deferred | resolved by D-PERT-1's split (two names now); row to close | +| `E-MORTON-CASCADE-V3-1` | ⊘ CONJECTURE | the "reimagine the compute as a V3 Morton read" path; independent of closure — closure must not delete the legacy arm it compares against until that probe runs or is dropped | + +## 3. Closure sequence + +Each wave lands only with its gate green; no wave ports without a consumer. + +| wave | content | gate | +|---|---|---| +| **W0 (this PR)** | census, fate table, row regrades, idea harvest (§4) | boards consistent; SUPERSESSION-INDEX regenerated | +| **W1 — cut the hard dependency** | move `bridge_gate` trait + gates to `lance-graph-contract` (trait-only, zero-dep); callcenter re-imports; decide the DTO-ladder home (D-TTV-1 ruling) so the driver's `with-engine` feature can point at it | `lance-graph-callcenter` builds with no thinking-engine path dep; driver `with-engine` still green; thinking-engine becomes a LEAF | +| **W2 — harvest gems with consumers** | ghost prior → planner `nars/ghost_prior.rs` (D-TEH-2, consumer D-HOUSE-4); `cronbach` → retire onto `jc::reliability`; `semantic_chunker` → deepnsm-v2 only if its falsifier passes; `spiral_segment` → codec home via certification battery | each port has a two-sided falsifier + a disable run; each source file deleted in the same PR | +| **W3 — M8** | one enum-dispatched engine; the 5 cascade shapes and 3 lens modules collapse; parity suite across u8/BF16/i8/f32 | bit-parity on the driver's existing fixtures; the `branching` spawn shape kept as a mode, not lost | +| **W4 — retire and rename** | delete RESIDUE (1e) + retired persona A2A; rename what is left `thinking-lab` (calibration feature, `--manifest-path` CI line); regrade every row in §2; pay `TD-THINKING-ENGINE-EXCLUDED-DEBT-1` | the name `thinking-engine` no longer appears in any `Cargo.toml` dependency; board rows closed or re-owned | + +Stop rules (non-negotiable inside this plan): nothing ports without a +consumer named in §1c; nothing ports as a singleton field or a new lane +(ClassView reading or per-mailbox module only); `A2AMessage` and any +inter-mailbox handoff type never revive; the `E-MORTON-CASCADE-V3-1` +legacy arm is not deleted while that probe is open; no port of a fixed +axis vocabulary by assertion (AXES_48 goes falsifier-first or stays LAB). + +## 4. The good ideas — what the chapter leaves behind even where the code dies + +Kept as doctrine with a named present or future home, so the closure is a +harvest and not an amputation. + +| idea (from the crate's own docs) | keep as | home | +|---|---|---| +| "Models are sensors. The matrix is the brain. DTOs are the bus. One MatVec per cycle." | the Zone-1 cost model (200–500 ns cycle) that sizes every rung budget | `VISION.md`, three-zone hot-path model (#372) | +| Ghosts = Friston priors with an asymptotic floor; anchoring is MEASURABLE as free energy between prior and evidence | the anchoring alarm | D-TEH-2 / D-HOUSE-4 | +| A council SPLIT is the learning signal (one archetype sees what the others do not) — amplify it, never average it | shipped invariant | `escalation.rs`, `quorum.rs` ("split quorums are Contradictions — NEVER averaged") | +| 48 bipolar meaning axes with a measured r = 0.9913 against a real embedding | the candidate for the per-axis quorum vocabulary, falsifier-first | `quorum.rs` D-ATOM-1 pointer (1c) | +| Branching cascades SPAWN, they do not filter (parallel vectors, not survivors) | a mode of the one engine after M8 | W3 | +| "Nothing is killed; deprecation is data-driven" (the backend registry doctrine) | the standing rule of this very plan (every retirement here cites a measurement or a ruling) | this plan §1 | +| Chunk boundaries are convergence jumps — segmentation without a forward pass | a falsifiable chunker for the sentence seam | W2 (`semantic_chunker`) | +| An L4 "particle" layer that learns OUTSIDE the wave cascade, XOR-bound, save/load | the LEARNED tenant of the autopoiesis triangle | D-TRI-1 learned lane | +| Provenance text → thought as an appendable trace | already the temporal witness's job; keep as a read | `temporal.rs` | +| The 8-channel cascade edge (BECOMES / CAUSES / SUPPORTS / REFINES / GROUNDS / ABSTRACTS / RELATES / CONTRADICTS) | transcoded to the SPO palette, kept as the comma-level mantissa carrier | D-CSV-9, FUTURE-DESIGN "first wiring target" | +| Persona as 12 constants + a mode with rung bounds and a collapse bias | a Layer-2 data card for the persona storyline, when it opens | O3 (parked) | + +## 5. Deliverables + +| D-id | title | scope | status | +|---|---|---|---| +| D-TEH-0 | census + fate table + open-row reconciliation + idea harvest (this plan) | plan + board rows | Shipped (this PR) | +| D-TEH-1 | W1: `bridge_gate` trait → contract; DTO-ladder home ruling recorded; thinking-engine becomes a leaf | contract + callcenter (+ driver feature pointer) | Queued — first code wave | +| D-TEH-2 | W2: ghost prior harvested as planner `nars/ghost_prior.rs` over `WisdomMarker`, per-thought, with two-sided falsifiers; crate `ghosts.rs` deleted | planner | Queued — consumer = D-HOUSE-4 | +| D-TEH-3 | W2: `cronbach` → jc, `semantic_chunker` / `spiral_segment` decided by their falsifiers | jc / deepnsm-v2 / codec home | Queued | +| D-TEH-4 | W3: M8 engine collapse with parity suite; cascade shapes and lens modules collapse | thinking-engine → the one engine | Queued (owns ENTROPY M8) | +| D-TEH-5 | W4: residue deleted, crate renamed `thinking-lab` with a CI line; §2 rows closed; TD paid | workspace | Queued — closes the chapter | + +## 6. Rulings this plan asks for (not assumed) + +1. D-PERSONA-5 RETIRE (contradicts E-NOBODY-WAITS-1 / E-ACK-ELIMINATED-1). +2. D-REUNIFY-5/6 CLOSE-superseded by V3. +3. The DTO ladder's crate home under D-TTV-1 (driver vs a small DTO crate). +4. Whether `thinking-lab` survives as a named excluded crate or the + calibration battery moves into `jc` outright. + +## 7. What this PR does NOT do + +No file moves, no deletions, no Cargo changes, no feature flips, no new +types. Row regrades touch only status cells and cite their evidence. The +crate builds exactly as before. From 575c6d3d77d640a90cf7add7216699c1f25a95e6 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 2 Sep 2026 17:51:36 +0000 Subject: [PATCH 2/4] house-differential-style-v1: add three probe arms (resonance prior, signed-qualia dye, aperture) Operator direction. A_res ranks by gestalt resonance before abduction (ResonanceDto/HdrResonance, the pyramid base); A_dye reads one signed i4 per candidate from the ASC outcome into the existing QualiaI4_16D lanes as a contrast agent; A_ap replaces the fixed periphery budget k with k = f(incongruity) read from CR contradiction depth or free energy. Each arm is graded separately against A2, carries a per-arm rank-inertness guard (rho < 1 required before p@1 is read) and its own disable/inertness falsifier. D-HOUSE-5 now names its two faces after PASS: persona modelling as a lens, and the program over the loco palette (no new atom, batched mint only). No register, lane, opcode or struct is minted by any arm. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01PFnYKqw6d7TTiB9cT8eFdK --- .claude/board/SUPERSESSION-INDEX.md | 4 +- .claude/plans/house-differential-style-v1.md | 44 +++++++++++++++++++- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/.claude/board/SUPERSESSION-INDEX.md b/.claude/board/SUPERSESSION-INDEX.md index 8f4687b8a..2c58ff17c 100644 --- a/.claude/board/SUPERSESSION-INDEX.md +++ b/.claude/board/SUPERSESSION-INDEX.md @@ -21,7 +21,7 @@ That is a programme, not a cleanup. Its COMPONENT-MAP note reads: intra-cascade SD gate — fine IF intra-mailbox; warden sign-off queued, not assumed **`ResonanceDto` → `PerturbationDto` gives the rule that needs no map at all:** -2 crate files against 11 plans. The code moved; the plans did not. +2 crate files against 12 plans. The code moved; the plans did not. **Plan-mentions exceeding crate-mentions is a staleness signal on its own.** ### The limit of the mechanical route @@ -59,7 +59,7 @@ coverage instead. | `GateDecision` | REPURPOSE | — | 25 | 27 | 24 | | `GateState` | REPURPOSE | — | 14 | 1 | 1 | | `MergeMode` | REPURPOSE | — | 8 | 13 | 12 | -| `ResonanceDto` | REPURPOSE | `PerturbationDto` | 2 | 11 | 7 | +| `ResonanceDto` | REPURPOSE | `PerturbationDto` | 2 | 12 | 7 | | `BindSpace` | RETIRE | — | 68 | 44 | 41 | | `CollapseGateEmission` | RETIRE | — | 5 | 13 | 12 | | `ThinkingStyle` | RETIRE-toward-contract | — | 51 | 28 | 24 | diff --git a/.claude/plans/house-differential-style-v1.md b/.claude/plans/house-differential-style-v1.md index 6479cd303..ef113787e 100644 --- a/.claude/plans/house-differential-style-v1.md +++ b/.claude/plans/house-differential-style-v1.md @@ -168,19 +168,59 @@ domain vocabulary. - AN: A2 on 25 permutations of the observation→cause links per arena (size-preserving null). +Three additional arms (added 2026-09-02 on operator direction; same +harness, same null, same arenas — each is a READING over shipped state, none +adds a register): + +- **A_res — gestalt resonance first (rung 0–1 prior).** Rank candidates by + resemblance BEFORE any abduction — the perspectival + `awareness_dto::ResonanceDto` / `HdrResonance` shape (x,y,z per archetype, + `is_epiphany`, `is_unanimous`), the pyramid's base per the triangle plan and + the D-TRI-3 nail→hammer direction — then run A2 seeded by that order. + Measures whether a gestalt prior helps the board or anchors it. +- **A_dye — signed qualia as Kontrastmittel.** Per candidate, ONE signed i4 + derived from the ASC outcome (+ `Revised`, − `BlockedSelfReference`, + 0 `NoTarget`), read into the existing `QualiaI4_16D` lanes (tenant 1) and + consulted by the ranking. A contrast agent, not data: it exists only to + make contested structure visible. The lane it uses is chosen by the arm, + not minted for it; if no lane fits, the arm reports that and stops + (OQ-CSV-1, the 17D-vs-16D reconciliation, is answered by this arm's need, + never pre-empted). +- **A_ap — humor as aperture.** The cycle has one knob, `k` in + `peripheral_sample_where(k)`. Fixed `k = 4` in A2; here + `k = f(incongruity)`, with incongruity read from what is already emitted + (CR contradiction depth `|f₁−f₂|`, or the arena's free energy). Controlled + incongruity opens the periphery wider exactly when the board looks too + tidy; a tidy board with a hidden far fact is the case it should catch. + **Metrics.** p@1 and p@3 for `C*`; elimination false-positive rate (the planted cause must never be eliminated); periphery fire rate. **PASS iff** (a) A2 p@1 − A0 p@1 ≥ 0.05 AND A2 p@1 > AN p95, (b) planted cause eliminated in 0 arenas, (c) periphery fires on ≥ 10 % and ≤ 90 % of arenas (can-fire AND can-stay-silent). **KILL** otherwise, and the plan -stops at §1 as a parts list. +stops at §1 as a parts list. The three additional arms are graded +SEPARATELY against A2 (not against A0): an arm PASSES its own gate iff it +clears the rank-inertness guard AND adds ≥ 0.03 p@1 over A2 above the same +null; each arm's verdict is reported on its own line, so a KILL on one never +hides a PASS on another. **Anti-vacuity guards (each disable-verified before the run is trusted).** - Removing the disjoint-stamp gate in the fixture must make A1 worse than A0 (otherwise the guard was never binding). - Zeroing the far facts must drop the periphery fire rate to ~0. - A2 with `k = 0` must equal A1 to the bit. +- **Per-arm rank-inertness guard (the 2026-09-02 lesson: `curiosity_gestalt` + was rank-identical to `curiosity` at ρ = 1.000000).** Each of A_res / A_dye + / A_ap must produce a ranking that DIFFERS from A2 (Spearman ρ < 1 over + the candidate set) before its p@1 is read; an arm with ρ = 1 is reported + as decoration, not as a null result. +- A_res must NOT beat the planted cause's rank on no-distractor arenas (a + prior that overrides clean evidence is anchoring, measured). +- A_dye with all signs forced to 0 must equal A2 to the bit. +- A_ap inertness: raising `f` must admit a watcher on some arena, lowering it + must silence one; if neither moves, the knob is theatre and the arm is + reported KILL on its own. **Deliverable shape.** One example in `lance-graph-planner/examples/` (no library surface), plan §4a RESULT, one board entry, STATUS row. @@ -195,7 +235,7 @@ Nothing else lands from a PASS except a licence to design the O2 edge. | D-HOUSE-2 | discriminating-evidence readout (§2 step 5) | planner `nars` readout, no state | Gated on D-HOUSE-1 PASS | | D-HOUSE-3 | elimination predicate (§2 step 6) + never-re-enter falsifier | planner `nars` readout | Gated on D-HOUSE-1 PASS | | D-HOUSE-4 | anchoring alarm over a harvested ghost prior (§2 step 7) | planner, after D-TEH-2 | Gated on `thinking-engine-harvest-closure-v1` D-TEH-2 | -| D-HOUSE-5 | the style→recipe edge (O2) with House as its first program | contract + planner | Gated on D-HOUSE-1 PASS and the D-TSC-2/3 mint | +| D-HOUSE-5 | the style→recipe edge (O2) with House as its first program — two faces after PASS: (a) persona modelling as a LENS (a readout policy over the same arena: admitted recipes, periphery budget, elimination floor, council weights; philosophical labels are further lenses, and two lenses with identical rankings are one lens), (b) the program materialised over the loco palette (`ogar-loco` / `ogar-r2il`, the ruled convergence for style application; no new atom — the 226-atom palette's 30 reserved slots stay untouched; any opcode rides the batched OGAR mint, never solo) | contract + planner (+ OGAR mint) | Gated on D-HOUSE-1 PASS and the D-TSC-2/3 mint | | D-HOUSE-6 | consumer pointer: `DiffRow` gains READ fields `eliminated` / `discriminator` | MedCare-rs (out of scope here) | pointer only | ## 6. What this plan does NOT do From 645f331ca54f4a438b4f67439eacb881e063b3d5 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 2 Sep 2026 17:58:11 +0000 Subject: [PATCH 3/4] house plan: keep D-HOUSE-1 surgical, move the three arms to gated 1b/1c/1d; bank the ghost-trace vs counterfactual-lane fence Adopts two points from an external review of #1137, both verified in source before acting. 1. Attribution: D-HOUSE-1 asks one causal question (does attacking the leader and preserving dissent improve planted-cause recovery). The resonance, qualia-dye and aperture arms folded in by 575c6d3 would have made it five hypotheses in one harness. They move to plan section 4b as separately gated probes on the same arenas and null, each graded against the D-HOUSE-1 A2 ordering with its own rank-inertness guard. Three processing-order defects fixed in the move: the aperture knob read a quantity that does not exist until two steps later (now reads the previous pass of the fixpoint loop); the dye coloured only the leader (now top-3 ASC, post-challenge re-rank only); the resonance arm was one shape where the pyramid names two (res-seed vs res-gate). "Humor" stays a style hypothesis until its operator is defined. Section 2 now states the loop shape the linear list hid. 2. Semantics: thinking-engine GhostType/GhostField and contract GhostEcho/WisdomMarker are lingering traces (Staunen = persistent wonder, Wisdom = harvested knowing); the -6 counterfactual lane is a non-authoritative rung whose own docs call it "ghost-tier" seven times. Same word, two families. Fence banked as E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1; doc-wording debt TD-GHOST-TIER-NAME-COLLISION-1; closure plan D-TEH-2 row carries the fence; Staunen/Wisdom duality kept in the idea harvest. Board: STATUS_BOARD rows D-HOUSE-1b/1c/1d; PR_ARC dated correction line; SUPERSESSION-INDEX regenerated last. Plan-only, no code. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01PFnYKqw6d7TTiB9cT8eFdK --- .claude/board/EPIPHANIES.md | 18 +++ .claude/board/PR_ARC_INVENTORY.md | 7 ++ .claude/board/STATUS_BOARD.md | 3 + .claude/board/TECH_DEBT.md | 16 +++ .claude/plans/house-differential-style-v1.md | 107 +++++++++++------- .../thinking-engine-harvest-closure-v1.md | 3 +- 6 files changed, 111 insertions(+), 43 deletions(-) diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index c4b49f5ff..853b1e8d7 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -1,3 +1,21 @@ +## 2026-09-02 — E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1 — the word "ghost" names two semantic families in the tree; the same-word-≠-same-family lesson of the September teardown, caught BEFORE a port this time + +**Status:** FINDING + FENCE (verified against source). **Confidence:** High. Raised by an external review of #1137 (GPT-class; held CLAIMED-BY-EXTERNAL per `E-EXTERNAL-REVIEW-ADJUDICATED-1` until checked, then confirmed on both sides in code). + +**The two families.** +1. **Lingering trace.** `thinking_engine::ghosts::{GhostType, Ghost, GhostField}` — a `Ghost` carries `atom`, `ghost_type`, `intensity`, `created_at`, `source_text`; the field decays asymptotically and biases the NEXT cascade (Friston prior). Contract twin `escalation::{GhostEcho, WisdomMarker}` (floor 0.1, decay 0.85). Its eight names are memory residues: Staunen = persistent wonder, Wisdom = deep / harvested knowing, Grief = loss that reshapes topology, Boundary = a limit still felt. +2. **Non-authoritative counterfactual rung.** `contract::counterfactual::{deposit_counterfactual, CounterfactualMailbox, revise_if_minority_wins}` — the minority pole of a split quorum, kept under `InferenceType::Counterfactual` (−6), never written as observed SPO truth. Its own docs call it a "ghost-tier mailbox" seven times (`counterfactual.rs:16, 111, 229, 243, 247, 340, 402`). + +**Why it matters now.** `thinking-engine-harvest-closure-v1` D-TEH-2 ports the trace family into the planner, and `house-differential-style-v1` D-HOUSE-4 consumes it as an anchoring alarm. A reader who meets `GhostType::Wisdom` beside a "ghost-tier mailbox" will plausibly conclude the existing `GhostField` already IS the counterfactual-rung carrier. It is not: one is what a past thought left behind, the other is a road not taken that may still win. The September teardown removed a register precisely because evocative shape-sharing (G24N4) had been read as semantic identity; this is the same failure one word earlier. + +**The fence.** The rung MAY consume a trace (a Staunen or Wisdom marker) as a starting prior. The rung is NEVER a trace, a trace is NEVER a rung, and no port under D-TEH-2 or readout under D-HOUSE-1..4 reads `WisdomMarker` as counterfactual state or writes the −6 lane from a ghost field. The wording collision in `counterfactual.rs` is recorded as `TD-GHOST-TIER-NAME-COLLISION-1` (doc-only; rename "ghost-tier" → "counterfactual-tier" when that file is next touched, never as a drive-by). + +**Archaeology kept.** The older architecture already carried the epistemic cycle as a DUALITY: Staunen keeps a question alive, Wisdom is what was harvested from it. The shipped `curiosity() = (1/(q+1))·(1−c)` (`exploration.rs`) is a later operational slice of the Staunen end, not the pair. Recorded in the closure plan's idea harvest so the duality survives the crate. + +**Also adopted from the same review:** D-HOUSE-1 stays surgical (one causal question, four arms); the resonance, qualia-dye and aperture arms folded in by `575c6d3` are moved OUT to gated follow-on probes D-HOUSE-1b/1c/1d (plan §4b), with three processing-order defects fixed in the move (the aperture knob was reading a quantity that does not exist until two steps later; the dye coloured one candidate; the resonance arm was one shape where the pyramid names two). + +Refs: `E-SIX-SEMANTIC-FAMILIES-MUST-NOT-IMPERSONATE-EACH-OTHER-1`, `E-EXTERNAL-REVIEW-ADJUDICATED-1`, `TD-GHOST-ECHO-DUP-1`, `E-QUALIA-IS-RANK-INERT-AT-THE-FRONTIER-AND-POPULATION-LOSES-TO-COUNTING-1` (the attribution lesson), plans `house-differential-style-v1` §4b, `thinking-engine-harvest-closure-v1` §1c/§4. + ## 2026-09-02 — E-THINKING-ENGINE-LIVE-FOOTPRINT-IS-ONE-TRAIT-AND-HOUSE-IS-SHIPPED-IN-PIECES-1 — the 51-file excluded crate binds the spine through ONE trait module; the differential-diagnosis style the operator asked for already exists as seven scattered shipped mechanisms and zero names **Status:** FINDING (measured on `94543a5`, read-only). **Confidence:** High for both measurements. Plans: `house-differential-style-v1`, `thinking-engine-harvest-closure-v1`. diff --git a/.claude/board/PR_ARC_INVENTORY.md b/.claude/board/PR_ARC_INVENTORY.md index 4bac0b714..99e9878ea 100644 --- a/.claude/board/PR_ARC_INVENTORY.md +++ b/.claude/board/PR_ARC_INVENTORY.md @@ -33,6 +33,13 @@ consumers, symbols grepped) and the parts list (each row file:line); Medium for the fate verdicts that name a landing without a consumer yet (they are marked "park" rather than "port"). +- **Correction 2026-09-02 (same PR, third commit):** `575c6d3` had folded three + extra arms into D-HOUSE-1; an external review objected (attribution — one + causal question per harness) and the objection was adopted: arms moved out + to gated D-HOUSE-1b/1c/1d (plan §4b) with three processing-order defects + fixed; ghost-trace vs counterfactual-lane fence banked + (`E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1`, + `TD-GHOST-TIER-NAME-COLLISION-1`). ## 2026-09-02 — lance-graph branch `claude/medcare-rs-continue-6nhbxn` (D-POP-1 result PR, after #1135) — PROBE-POP-READOUT-1 diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 31a0cfbfa..568dc318c 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -4,6 +4,9 @@ |---|---|---| | D-HOUSE-0 | the plan: parts list of shipped surfaces (file-cited), the composition as a recipe-level style program, ladder placement, pre-registered falsifier | **Shipped (plan-only, this PR)** | | D-HOUSE-1 | PROBE-HOUSE-DIFFERENTIAL-1: planted-cause recovery on synthetic arenas with shared-predicate distractors; arms RCR-alone / +ASC / full cycle / shuffle null; PASS iff Δp@1 ≥ 0.05 above null p95, planted cause never eliminated, periphery fires on 10–90 % | **Queued — next step** | +| D-HOUSE-1b | resonance prior probe (`res-seed` + `res-gate`): anchoring vs recognition, same arenas, ρ < 1 guard against the D-HOUSE-1 A2 ordering (plan §4b) | Gated on D-HOUSE-1 reported | +| D-HOUSE-1c | signed-qualia contrast probe: one i4 per top-3 candidate from the ASC outcome into existing `QualiaI4_16D` lanes, post-challenge re-rank only, all-zero-signs must equal A2 (plan §4b) | Gated on D-HOUSE-1 reported | +| D-HOUSE-1d | aperture hypothesis (the "humor" label): incongruity → `k` across passes; a hypothesis until its operator is defined and measured (plan §4b) | Not scheduled | | D-HOUSE-2 | discriminating-evidence readout (clone arena, observe hypothetical premise, report largest rank displacement) | Gated on D-HOUSE-1 PASS | | D-HOUSE-3 | elimination predicate over `truth`/`contradiction`/`stamp` + never-re-enter falsifier | Gated on D-HOUSE-1 PASS | | D-HOUSE-4 | anchoring alarm (free energy between wisdom-marker prior and evidence) | Gated on `thinking-engine-harvest-closure-v1` D-TEH-2 | diff --git a/.claude/board/TECH_DEBT.md b/.claude/board/TECH_DEBT.md index fb5275a72..ac81df884 100644 --- a/.claude/board/TECH_DEBT.md +++ b/.claude/board/TECH_DEBT.md @@ -1,3 +1,19 @@ +## TD-GHOST-TIER-NAME-COLLISION-1 (2026-09-02) — OPEN, doc-only + +`crates/lance-graph-contract/src/counterfactual.rs` calls the −6 minority-pole +lane a "ghost-tier mailbox" in seven places (lines 16, 111, 229, 243, 247, 340, +402). The tree already has a "ghost" family with a different meaning: the +lingering cognitive trace (`thinking_engine::ghosts::GhostType` / `GhostField`, +contract `escalation::GhostEcho` / `WisdomMarker`). A reader meeting +`GhostType::Wisdom` beside a "ghost-tier mailbox" can conclude the trace field +is the counterfactual carrier; it is not (board: +`E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1`). **Pay by:** rename the +wording to "counterfactual-tier" in the same PR that next touches +`counterfactual.rs` (D-ATOM-4 v3 / the mailbox arm) — doc comments only, no +identifier is named "ghost" in that file, so no API changes. Never as a +drive-by on an unrelated PR. Surfaced by an external review of #1137, +verified in source. + ## TD-DEEPNSM-V2-SESSION-RESIDUE (2026-08-22) — OPEN Three leftovers from the corpus-addressing session, surfaced by its own review diff --git a/.claude/plans/house-differential-style-v1.md b/.claude/plans/house-differential-style-v1.md index ef113787e..3dc91055c 100644 --- a/.claude/plans/house-differential-style-v1.md +++ b/.claude/plans/house-differential-style-v1.md @@ -104,6 +104,12 @@ measure it. `thinking-engine-harvest-closure-v1` D-TEH-2 (ghost prior harvested with a falsifier) and is NOT built by porting `GhostField` as a singleton. +The list above reads linearly; the execution is a LOOP. On a shallow pass +steps 3–4 do not exist yet (Control-bucket tactics open at `Analogical`), so +the real shape is: board → periphery → (elevate) → board again → challenge → +council, and only after the loop settles do the two readouts (5–6) and the +memory step (7) run. §4b's aperture is definable only because of this loop. + What the style ADDS beyond the parts: the order (1→7), the periphery budget `k`, the elimination floor, and the rule that step 3 runs before any commit. It adds no arithmetic of its own. @@ -168,70 +174,87 @@ domain vocabulary. - AN: A2 on 25 permutations of the observation→cause links per arena (size-preserving null). -Three additional arms (added 2026-09-02 on operator direction; same -harness, same null, same arenas — each is a READING over shipped state, none -adds a register): - -- **A_res — gestalt resonance first (rung 0–1 prior).** Rank candidates by - resemblance BEFORE any abduction — the perspectival - `awareness_dto::ResonanceDto` / `HdrResonance` shape (x,y,z per archetype, - `is_epiphany`, `is_unanimous`), the pyramid's base per the triangle plan and - the D-TRI-3 nail→hammer direction — then run A2 seeded by that order. - Measures whether a gestalt prior helps the board or anchors it. -- **A_dye — signed qualia as Kontrastmittel.** Per candidate, ONE signed i4 - derived from the ASC outcome (+ `Revised`, − `BlockedSelfReference`, - 0 `NoTarget`), read into the existing `QualiaI4_16D` lanes (tenant 1) and - consulted by the ranking. A contrast agent, not data: it exists only to - make contested structure visible. The lane it uses is chosen by the arm, - not minted for it; if no lane fits, the arm reports that and stops - (OQ-CSV-1, the 17D-vs-16D reconciliation, is answered by this arm's need, - never pre-empted). -- **A_ap — humor as aperture.** The cycle has one knob, `k` in - `peripheral_sample_where(k)`. Fixed `k = 4` in A2; here - `k = f(incongruity)`, with incongruity read from what is already emitted - (CR contradiction depth `|f₁−f₂|`, or the arena's free energy). Controlled - incongruity opens the periphery wider exactly when the board looks too - tidy; a tidy board with a hidden far fact is the case it should catch. - **Metrics.** p@1 and p@3 for `C*`; elimination false-positive rate (the planted cause must never be eliminated); periphery fire rate. **PASS iff** (a) A2 p@1 − A0 p@1 ≥ 0.05 AND A2 p@1 > AN p95, (b) planted cause eliminated in 0 arenas, (c) periphery fires on ≥ 10 % and ≤ 90 % of arenas (can-fire AND can-stay-silent). **KILL** otherwise, and the plan -stops at §1 as a parts list. The three additional arms are graded -SEPARATELY against A2 (not against A0): an arm PASSES its own gate iff it -clears the rank-inertness guard AND adds ≥ 0.03 p@1 over A2 above the same -null; each arm's verdict is reported on its own line, so a KILL on one never -hides a PASS on another. +stops at §1 as a parts list. **Anti-vacuity guards (each disable-verified before the run is trusted).** - Removing the disjoint-stamp gate in the fixture must make A1 worse than A0 (otherwise the guard was never binding). - Zeroing the far facts must drop the periphery fire rate to ~0. - A2 with `k = 0` must equal A1 to the bit. -- **Per-arm rank-inertness guard (the 2026-09-02 lesson: `curiosity_gestalt` - was rank-identical to `curiosity` at ρ = 1.000000).** Each of A_res / A_dye - / A_ap must produce a ranking that DIFFERS from A2 (Spearman ρ < 1 over - the candidate set) before its p@1 is read; an arm with ρ = 1 is reported - as decoration, not as a null result. -- A_res must NOT beat the planted cause's rank on no-distractor arenas (a - prior that overrides clean evidence is anchoring, measured). -- A_dye with all signs forced to 0 must equal A2 to the bit. -- A_ap inertness: raising `f` must admit a watcher on some arena, lowering it - must silence one; if neither moves, the knob is theatre and the arm is - reported KILL on its own. - **Deliverable shape.** One example in `lance-graph-planner/examples/` (no library surface), plan §4a RESULT, one board entry, STATUS row. Nothing else lands from a PASS except a licence to design the O2 edge. +## 4b. Three follow-on probes — kept OUT of D-HOUSE-1 (external review, 2026-09-02, adopted) + +An earlier revision of this plan folded three extra arms into D-HOUSE-1. An +external review (GPT-class, adjudicated against the code per +`E-EXTERNAL-REVIEW-ADJUDICATED-1`) objected, and the objection holds: D-HOUSE-1 +asks ONE causal question — does attacking the leader and preserving dissent +improve planted-cause recovery — and five hypotheses in one harness destroy +attribution. #1136's value came from isolating that one arm was rank-inert. +So the three become separate, gated probes, each run on the SAME arenas and +null AFTER D-HOUSE-1 has reported, each graded against the D-HOUSE-1 A2 +ordering, each with its own rank-inertness guard (Spearman ρ < 1 against +A2 before any p@1 is read) and its own inertness falsifier. Re-checking the +processing order also found three defects in the folded version; they are +fixed here. + +- **D-HOUSE-1b — resonance prior: anchoring vs recognition.** Ingredient: + the perspectival `awareness_dto::ResonanceDto` / `HdrResonance` shape, the + pyramid base. TWO sub-arms, because the pyramid names a different shape + than "seed the board": `res-seed` (resonance orders the board, RCR runs + regardless) and `res-gate` (a unanimous, epiphany-grade resonance commits + WITHOUT RCR; otherwise RCR runs — the faithful base-first form, and the + more dangerous one). Falsifiers: neither sub-arm may beat the planted + cause's rank on no-distractor arenas (a prior overriding clean evidence + is anchoring, measured); `res-gate` must abstain on ≥ 10 % of arenas + (a gate that always commits is not a gate). +- **D-HOUSE-1c — signed qualia as contrast agent.** Per candidate ONE signed + i4 from the ASC outcome (+ `Revised`, − `BlockedSelfReference`, + 0 `NoTarget`), read into the existing `QualiaI4_16D` lanes (tenant 1) and + consulted by the POST-challenge re-rank only — the dye cannot inform the + initial board because ASC has not run yet. Order fix: ASC runs on the + top-k (k = 3), not the leader alone; a single dyed candidate is trivially + inert or trivially decisive and would trip the ρ guard for the wrong + reason. No lane is minted: if no existing lane fits, the probe reports + that and stops (OQ-CSV-1 is answered by the probe's need, never + pre-empted). Falsifier: all signs forced to 0 must equal A2 to the bit. +- **D-HOUSE-1d — aperture (the "humor" hypothesis, held as a STYLE + hypothesis).** The cycle has one knob, `k` in `peripheral_sample_where(k)`. + The candidate operator is incongruity → aperture, `k(pass n) = + f(incongruity at pass n−1)` with fixed `k` on pass 1 — the order fix: `k` + is spent at step 2 but CR contradiction depth exists only after steps 3–4, + so the knob can only read the PREVIOUS pass of the fixpoint loop. The word + "humor" does not substitute for that operator; until the operator is + defined and measured, this row is a hypothesis, not a scheduled probe. + Inertness falsifier when it runs: raising `f` must admit a watcher on some + arena, lowering it must silence one. + +Ghost-family fence for all three (banked as +`E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1`): `GhostType` / +`GhostField` / `GhostEcho` / `WisdomMarker` are LINGERING TRACES (Staunen = +persistent wonder, Wisdom = harvested knowing); the −6 counterfactual lane +(`deposit_counterfactual`, `CounterfactualMailbox`) is a NON-AUTHORITATIVE +RUNG. The second may consume the first as a starting prior; it is never one +of them, and none of these probes reads `WisdomMarker` as counterfactual +state. + ## 5. Deliverables | D-id | title | scope | status | |---|---|---|---| | D-HOUSE-0 | this plan: parts list, composition, ladder placement, falsifier | plan-only | Shipped (this PR) | | D-HOUSE-1 | PROBE-HOUSE-DIFFERENTIAL-1 (§4) | planner example | Queued — next step | +| D-HOUSE-1b | resonance prior probe, `res-seed` + `res-gate`, anchoring vs recognition (§4b) | planner example, same arenas | Gated on D-HOUSE-1 reported | +| D-HOUSE-1c | signed-qualia contrast probe over top-k ASC, post-challenge re-rank only (§4b) | planner example, same arenas | Gated on D-HOUSE-1 reported | +| D-HOUSE-1d | aperture hypothesis: incongruity → `k` across passes; held until the operator is defined (§4b) | hypothesis | Not scheduled | | D-HOUSE-2 | discriminating-evidence readout (§2 step 5) | planner `nars` readout, no state | Gated on D-HOUSE-1 PASS | | D-HOUSE-3 | elimination predicate (§2 step 6) + never-re-enter falsifier | planner `nars` readout | Gated on D-HOUSE-1 PASS | | D-HOUSE-4 | anchoring alarm over a harvested ghost prior (§2 step 7) | planner, after D-TEH-2 | Gated on `thinking-engine-harvest-closure-v1` D-TEH-2 | diff --git a/.claude/plans/thinking-engine-harvest-closure-v1.md b/.claude/plans/thinking-engine-harvest-closure-v1.md index 459b6abac..b99c8a0dd 100644 --- a/.claude/plans/thinking-engine-harvest-closure-v1.md +++ b/.claude/plans/thinking-engine-harvest-closure-v1.md @@ -86,7 +86,7 @@ Two decisions own this group and both already have rows: | file / symbol | what it is | landing | consumer that justifies the port | gate | |---|---|---|---|---| -| `ghosts::GhostField::{imprint,bias,prediction,free_energy,prune}` | Friston prior as a per-atom decaying field; the anchoring alarm | planner `nars/ghost_prior.rs` over `contract::escalation::WisdomMarker` (floor 0.1, decay 0.85 — the constants already agree); per-thought/per-mailbox, NEVER a singleton field | `house-differential-style-v1` D-HOUSE-4 (anchoring alarm) | falsifiers: bias decays but never below floor; `free_energy` RISES on a context shift and FALLS on a recurrence (two-sided); disable-run on the decay constant | +| `ghosts::GhostField::{imprint,bias,prediction,free_energy,prune}` | Friston prior as a per-atom decaying field; the anchoring alarm. **Family fence:** this is the LINGERING-TRACE family (Staunen = persistent wonder, Wisdom = harvested knowing) — NOT the non-authoritative counterfactual rung (the −6 lane, `deposit_counterfactual` / `CounterfactualMailbox`), whose docs call themselves "ghost-tier" (`TD-GHOST-TIER-NAME-COLLISION-1`). The rung may consume a trace as a starting prior; it is never one. `E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1` | planner `nars/ghost_prior.rs` over `contract::escalation::WisdomMarker` (floor 0.1, decay 0.85 — the constants already agree); per-thought/per-mailbox, NEVER a singleton field | `house-differential-style-v1` D-HOUSE-4 (anchoring alarm) | falsifiers: bias decays but never below floor; `free_energy` RISES on a context shift and FALLS on a recurrence (two-sided); disable-run on the decay constant | | `meaning_axes::CouncilWeights::{modulate, shift_toward}` | free-energy-weighted three-archetype modulation with renormalisation | `contract::escalation` beside `InnerCouncil` — only if a caller needs weighted (not majority) council output | none today | do NOT port until a caller exists; record the formula in the plan (done here) | | `meaning_axes::AXES_48` + `AxisActivation` | 48 bipolar semantic axes (r = 0.9913 vs Jina cosine, per census) | `quorum.rs` names an `AxisId` BLOCKED on D-ATOM-1; AXES_48 is the natural candidate vocabulary | `quorum_project` per-axis projection | falsifier-first (the September ruling forbids a fixed axis basis minted by assertion): a size-preserving shuffle of axis assignments must NOT reproduce the 0.9913; until measured, the table stays where it is | | `persona::{PersonaProfile, CognitiveBaseline}` | 12 personality constants + mode/temperature/rung bounds | a Layer-2 role catalogue DATA card (≤32 identities, I-VSA-IDENTITIES) in the persona storyline | none (O3: persona unwired by design) | park; no port | @@ -170,6 +170,7 @@ harvest and not an amputation. |---|---|---| | "Models are sensors. The matrix is the brain. DTOs are the bus. One MatVec per cycle." | the Zone-1 cost model (200–500 ns cycle) that sizes every rung budget | `VISION.md`, three-zone hot-path model (#372) | | Ghosts = Friston priors with an asymptotic floor; anchoring is MEASURABLE as free energy between prior and evidence | the anchoring alarm | D-TEH-2 / D-HOUSE-4 | +| Staunen / Wisdom as a DUALITY: wonder keeps a question alive, wisdom is what was harvested from it. The shipped `curiosity() = (1/(q+1))·(1−c)` is a later operational SLICE of Staunen, not the original pair | the two ends of the epistemic cycle, kept as two names | `exploration.rs` (curiosity), `escalation.rs` (`GhostEcho::{Staunen, Wisdom}`, `promote_to_wisdom`) | | A council SPLIT is the learning signal (one archetype sees what the others do not) — amplify it, never average it | shipped invariant | `escalation.rs`, `quorum.rs` ("split quorums are Contradictions — NEVER averaged") | | 48 bipolar meaning axes with a measured r = 0.9913 against a real embedding | the candidate for the per-axis quorum vocabulary, falsifier-first | `quorum.rs` D-ATOM-1 pointer (1c) | | Branching cascades SPAWN, they do not filter (parallel vectors, not survivors) | a mode of the one engine after M8 | W3 | From a17f5bc44fc3e4868e66521b19594d644d944ccf Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 2 Sep 2026 18:05:40 +0000 Subject: [PATCH 4/4] #1137 review pass: fix 6 Codex + 8 CodeRabbit findings in both plans MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All fourteen verified against source before changing text. House plan (D-HOUSE-1 probe design, three P1s were real): - fixture direction: rcr_abduce pairs beliefs on a shared PREDICATE ({P->M, S->M} |- S->P); the old fixture (feature->cause) made RCR relate features to each other and the cause never appeared as a candidate. Now cause->feature rules + case->feature observations, board = the case->cause candidates; hub_indegree set above the sharing count. - admission: rcr_abduce does not mutate the arena; asc_challenge on an unadmitted leader returns NoTarget. Step 1b admit_derived added; A1/A2 include it. - quorum_project and quorum_project_blackboard are todo! scaffolds (D-ATOM-1/3); removed from step 4, which now goes CouncilVerdict -> deposit_counterfactual directly (EpisodicEdge impl exists in planner). - A1c control arm (steps 1,1b,3,4, no periphery); the k=0 guard compares against A1c, not A1. - discriminating-evidence readout restricted to swap-causing premises with a deterministic tie-break and an explicit None result. - stale §4a reference; table pipes in the CR row; fence language tag. Closure plan: - §0 footprint corrected: callcenter's test pure_ops_emit_zero_audit_events calls three lens modules; W1 must rewrite it before the dep line goes. - bridge_gate row lists all seven public items with a W1 compatibility contract (move together, temporary re-exports, test rewrite, then drop). - role_tables.rs = LAB only; jina_lens.rs = RESIDUE only. - ghost port: decay agrees (0.85) but floors do not (0.001 prune vs 0.1 clamp) -> intentional semantic change with a two-floor calibration gate. - W3 gate: per-dtype tolerances + ranking/convergence invariants on real engine fixtures, not bit-parity; DualResult disagreement is the baseline. - stop rule scoped to consumers named in §1b or §1c. Generator: singular agreement in the "sharpest case" line; index regenerated (stable on rerun). Board: STATUS_BOARD D-HOUSE-1 row, PR_ARC dated review-pass line. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01PFnYKqw6d7TTiB9cT8eFdK --- .claude/board/PR_ARC_INVENTORY.md | 15 ++++ .claude/board/STATUS_BOARD.md | 2 +- .claude/board/SUPERSESSION-INDEX.md | 2 +- .claude/plans/house-differential-style-v1.md | 79 +++++++++++++------ .../thinking-engine-harvest-closure-v1.md | 23 +++--- .claude/tools/supersession_index.py | 3 +- 6 files changed, 89 insertions(+), 35 deletions(-) diff --git a/.claude/board/PR_ARC_INVENTORY.md b/.claude/board/PR_ARC_INVENTORY.md index 99e9878ea..303066469 100644 --- a/.claude/board/PR_ARC_INVENTORY.md +++ b/.claude/board/PR_ARC_INVENTORY.md @@ -40,6 +40,21 @@ fixed; ghost-trace vs counterfactual-lane fence banked (`E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1`, `TD-GHOST-TIER-NAME-COLLISION-1`). +- **Review pass 2026-09-02 (fourth commit):** 6 Codex + 8 CodeRabbit findings + on `84f2885`, all verified in source, all fixed. The three Codex P1s were + real probe-design errors: the fixture direction meant `rcr_abduce` + (`{P→M, S→M} ⊢ S→P`) could never emit the cause as a candidate (fixed: + `cause→feature` rules + `case→feature` observations); candidates were + never admitted before ASC (`admit_derived` step added, else + `AscOutcome::NoTarget`); `quorum_project` is an unconditional `todo!` + (removed from the path; council verdict → `deposit_counterfactual` + directly). Also: A1c control arm for the `k = 0` guard; swap-only, + `None`-defined discriminating-evidence readout; role_tables/jina_lens + one fate each; bridge_gate migration symbol-complete (7 items) with a + W1 compatibility contract incl. callcenter's lens-touching test; ghost + floor mismatch (0.001-prune vs 0.1-clamp) declared an intentional change + with a calibration gate; M8 gate = tolerances + invariants, not + bit-parity; stop rule scoped to §1b+§1c; generator singular agreement. ## 2026-09-02 — lance-graph branch `claude/medcare-rs-continue-6nhbxn` (D-POP-1 result PR, after #1135) — PROBE-POP-READOUT-1 diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 568dc318c..12ba5d7c3 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -3,7 +3,7 @@ | D-id | deliverable | status | |---|---|---| | D-HOUSE-0 | the plan: parts list of shipped surfaces (file-cited), the composition as a recipe-level style program, ladder placement, pre-registered falsifier | **Shipped (plan-only, this PR)** | -| D-HOUSE-1 | PROBE-HOUSE-DIFFERENTIAL-1: planted-cause recovery on synthetic arenas with shared-predicate distractors; arms RCR-alone / +ASC / full cycle / shuffle null; PASS iff Δp@1 ≥ 0.05 above null p95, planted cause never eliminated, periphery fires on 10–90 % | **Queued — next step** | +| D-HOUSE-1 | PROBE-HOUSE-DIFFERENTIAL-1: planted-cause recovery on synthetic arenas with shared-predicate distractors; arms RCR-alone / +admit+ASC / +council control / full cycle / shuffle null (fixture direction `cause→feature` + `case→feature` so RCR yields `case→cause`; `quorum_project` NOT on the path — it is a `todo!`); PASS iff Δp@1 ≥ 0.05 above null p95, planted cause never eliminated, periphery fires on 10–90 % | **Queued — next step** | | D-HOUSE-1b | resonance prior probe (`res-seed` + `res-gate`): anchoring vs recognition, same arenas, ρ < 1 guard against the D-HOUSE-1 A2 ordering (plan §4b) | Gated on D-HOUSE-1 reported | | D-HOUSE-1c | signed-qualia contrast probe: one i4 per top-3 candidate from the ASC outcome into existing `QualiaI4_16D` lanes, post-challenge re-rank only, all-zero-signs must equal A2 (plan §4b) | Gated on D-HOUSE-1 reported | | D-HOUSE-1d | aperture hypothesis (the "humor" label): incongruity → `k` across passes; a hypothesis until its operator is defined and measured (plan §4b) | Not scheduled | diff --git a/.claude/board/SUPERSESSION-INDEX.md b/.claude/board/SUPERSESSION-INDEX.md index 2c58ff17c..6806fe13c 100644 --- a/.claude/board/SUPERSESSION-INDEX.md +++ b/.claude/board/SUPERSESSION-INDEX.md @@ -17,7 +17,7 @@ most-referenced symbol here: **68 crate files, 44 plans, 41 of them blind.** That is a programme, not a cleanup. -**`GateState` is the sharpest case: 1 plans name it and *every one* is blind.** +**`GateState` is the sharpest case: 1 plan names it and *every one* is blind.** Its COMPONENT-MAP note reads: intra-cascade SD gate — fine IF intra-mailbox; warden sign-off queued, not assumed **`ResonanceDto` → `PerturbationDto` gives the rule that needs no map at all:** diff --git a/.claude/plans/house-differential-style-v1.md b/.claude/plans/house-differential-style-v1.md index 3dc91055c..a1a0996e0 100644 --- a/.claude/plans/house-differential-style-v1.md +++ b/.claude/plans/house-differential-style-v1.md @@ -25,7 +25,7 @@ nothing. The mechanics are nevertheless shipped, in pieces, across four surfaces. Naming the composition is therefore the whole deliverable; the first code this plan licenses is a falsifier, not a feature. -``` +```text families = state / evidence carriers (unchanged; six, see survey §1) atoms = readouts over the BeliefArena (expectation, contradiction, gaps) recipes = the rung-3 tactics RCR / ASC / CR (+ TR, CAS as needed) @@ -39,7 +39,7 @@ style = the House program: WHICH recipes fire, in WHAT order, with WHICH |---|---|---| | The whiteboard: ranked hypotheses from an observation | RCR abduction over a shared predicate → `Frontier { candidates, gaps }`, `Candidate { stmt, truth, premises, rung, tactic }`, `ReasoningGap` | planner `nars/tactics.rs:177 rcr_abduce`, `:71 Candidate`, `:88 ReasoningGap` | | Attack the leading hypothesis | ASC: `challenge_target = ⟨1−f, c⟩`; counter-evidence admitted ONLY with a disjoint stamp; self-refutation `BlockedSelfReference` | `tactics.rs:457 challenge_target`, `:479 asc_challenge`, `:463 AscOutcome` | -| Thesis vs antithesis on one claim | CR: NARS revision, `|f₁−f₂|` contradiction depth preserved, never averaged | `tactics.rs:503 cr_synthesize` | +| Thesis vs antithesis on one claim | CR: NARS revision, the absolute frequency difference kept as contradiction depth, never averaged | `tactics.rs:503 cr_synthesize` | | The team argues; the minority view stays on the board | `InnerCouncil::deliberate`, `is_split(0.7, 0.5)` amplified ×1.2; a split quorum is a Contradiction, never averaged; the minority pole is forked as a −6 counterfactual nibble | contract `escalation.rs:137 InnerCouncil`, `:116 is_split`; `quorum.rs:215 quorum_project`; `counterfactual.rs:140 deposit_counterfactual` | | The test nobody ordered (the contrarian) | excluded tactics run as watchers; a watcher that moves the score may force rung elevation; it never decides | contract `recipes.rs:557 peripheral_recipes`, `:573 peripheral_sample`, `:601 peripheral_sample_rotating`, `:641 peripheral_sample_where`; planner `strategy/style_strategy.rs:121 peripheral_dissent`, `:184 cross_family_dissent` | | Cheap passes first, the counterfactual leap last | `Recipe::min_rung` / `admissible_at`, `RungLevel::for_pass`; admissible set 4 → 11 → 24 → 34; `ExtremelyHard` gated to `Counterfactual` | `recipes.rs:505–545` | @@ -57,11 +57,25 @@ One House cycle over a `BeliefArena`, written as the order in which shipped tactics fire. Each step names its output atom so the falsifier in §4 can measure it. -1. **Board.** `rcr_abduce(arena, throttle)` from the observation's - predicate. Output: `Frontier.candidates` ranked by `truth.expectation()` - (the ranking key MedCare's `DiffRow` already uses). `Frontier.gaps` - records why candidates were NOT formed (`NoSharedMiddle`, `HubExcluded`, - `BudgetExhausted`, …) — this is the raw material for step 5. +1. **Board.** `rcr_abduce(arena, throttle)`. Abduction direction matters + (Codex P1 on #1137, verified in `tactics.rs:177`): RCR pairs two `Inh` + beliefs sharing a PREDICATE, `{P→M (rule), S→M (obs)} ⊢ S→P`. So the + arena must carry cause knowledge as `cause→feature` rules and the case as + `case→feature` observations; the shared predicate is the FEATURE, and the + candidates come out as `case→cause`. Beliefs written the other way round + (`feature→cause`) make RCR relate features to each other and the cause + never appears as a candidate. The board = the candidates with + `stmt.s == case`, ranked by `truth.expectation()` (the ranking key + MedCare's `DiffRow` already uses); the throttle's `hub_indegree` must + exceed the number of causes sharing a feature, or shared features are + barred as hubs. `Frontier.gaps` records why candidates were NOT formed + (`NoSharedMiddle`, `HubExcluded`, `BudgetExhausted`, …) — the raw + material for step 5. +1b. **Admit.** `rcr_abduce` does not mutate the arena; a `Candidate` is a + proposal. Before any tactic can act on the leader it must be admitted: + `BeliefArena::admit_derived` (`belief.rs:226`) for the top-k. Without + this step `asc_challenge` returns `AscOutcome::NoTarget` for every + leader and the challenge arm is vacuous (Codex P1, verified). 2. **Periphery.** `RungLevel::peripheral_sample_where(k, eligible)` picks the watchers the current rung excludes; `StyleStrategy::peripheral_dissent` runs them as observers. If one moves the score beyond `tol`, the rung @@ -74,15 +88,28 @@ measure it. `cr_synthesize` keeps both frequencies' distance as contradiction depth. 4. **Council.** `InnerCouncil::from_signals(trust, humility, flow, load)` (planner `mul/escalation.rs::verdict_from` already derives these from a - `MulAssessment`). A split verdict routes through `quorum_project` → - contested → `deposit_counterfactual(minority pole)`. The minority - diagnosis stays addressable under the −6 lane and can win later via - `revise_if_minority_wins` when the mailbox arm exists. + `MulAssessment`) → `CouncilVerdict`; on `verdict.split`, + `deposit_counterfactual(&verdict, &mut edge)` tags the minority + diagnosis's edge with the −6 mantissa (the planner already has + `impl EpisodicEdge for CausalEdge64`, D-DCR-3). **Not on the path:** + `quorum.rs::quorum_project` and `quorum_project_blackboard` are + unconditional `todo!` scaffolds blocked on D-ATOM-1/3 (Codex P1, + verified at `quorum.rs:216, 253`), and `CounterfactualMailbox` / + `revise_if_minority_wins` are the v3 `todo!` arm. The probe uses the + council verdict and the deposit only; the minority stays addressable + under the −6 lane and may win later when the mailbox arm exists. 5. **Discriminating evidence (OPEN — the first readout this plan asks for).** For the top two candidates, name the single observation whose presence would swap their order. Definition (a READOUT, no state): clone the - arena, `observe` a hypothetical premise with the candidate's own truth, - re-rank, report the premise with the largest rank displacement. + arena; for each candidate premise `observe` it with the candidate's own + truth and re-rank; keep ONLY premises that actually swap the top two; + among those report the one that leaves the largest post-swap margin, + ties broken by ascending premise id. If no single premise swaps the + order the readout returns an explicit `None` carrying the current + top-two margin ("no single observation discriminates") — never the + largest non-swapping displacement (CodeRabbit on #1137: a largest + displacement can preserve the order, and the no-swap case must be + defined). `Frontier.gaps` gives the candidate premises; the clone-and-observe is what `dismech_counterfactual` already does for a cut edge, run here for an added one. Not built; D-HOUSE-2. @@ -157,11 +184,15 @@ domain vocabulary. **Fixture (pre-registered).** - N = 200 arenas, SplitMix64 seed `0x9E3779B97F4A7C15 ^ i`. -- One planted cause `C*` with 4–6 observations `O_j`, each an - `O_j → C*` belief (`Copula::Inh`, frequency 0.9, confidence 0.6, - disjoint stamps). -- 5 distractor causes sharing 1–3 observations each with `C*` (the - shared-predicate trap RCR abduces over). +- One planted cause `C*` with 4–6 features `O_j`, written as RULES + `C* → O_j` (`Copula::Inh`, frequency 0.9, confidence 0.6, disjoint + stamps), and one `case` with observations `case → O_j` for every planted + feature (the direction RCR needs; see §2 step 1). +- 5 distractor causes `D_i`, each with rules `D_i → O_j` sharing 1–3 + features with `C*` (the shared-predicate trap RCR abduces over) plus 2–3 + private features the case does not show. `Throttle::hub_indegree` is set + above 7 so a feature shared by all six causes and the case is not barred + as a hub. - One disjoint counter-evidence stamp per distractor (frequency ≤ 0.3) that is ONLY visible to step 3. - Half the arenas additionally carry a "far" fact reachable only by a tactic @@ -169,8 +200,10 @@ domain vocabulary. **Arms.** - A0: RCR alone (`rcr_abduce`, rank by expectation). -- A1: RCR + ASC on the leader (steps 1, 3). -- A2: full cycle (steps 1–4; `k = 4` periphery, `tol = 0.02`). +- A1: RCR + admit + ASC on the leader (steps 1, 1b, 3). +- A1c: A1 + council (steps 1, 1b, 3, 4; no periphery) — the control that + isolates the periphery's contribution. +- A2: full cycle (steps 1, 1b, 2, 3, 4; `k = 4` periphery, `tol = 0.02`). - AN: A2 on 25 permutations of the observation→cause links per arena (size-preserving null). @@ -186,9 +219,11 @@ stops at §1 as a parts list. - Removing the disjoint-stamp gate in the fixture must make A1 worse than A0 (otherwise the guard was never binding). - Zeroing the far facts must drop the periphery fire rate to ~0. -- A2 with `k = 0` must equal A1 to the bit. +- A2 with `k = 0` must equal A1c to the bit (A1 lacks the council, so + equality with A1 was the wrong control — CodeRabbit on #1137). **Deliverable shape.** One example in `lance-graph-planner/examples/` -(no library surface), plan §4a RESULT, one board entry, STATUS row. +(no library surface), plan §4 RESULT (added as a dated subsection when the +run reports), one board entry, STATUS row. Nothing else lands from a PASS except a licence to design the O2 edge. ## 4b. Three follow-on probes — kept OUT of D-HOUSE-1 (external review, 2026-09-02, adopted) diff --git a/.claude/plans/thinking-engine-harvest-closure-v1.md b/.claude/plans/thinking-engine-harvest-closure-v1.md index b99c8a0dd..c458b40fc 100644 --- a/.claude/plans/thinking-engine-harvest-closure-v1.md +++ b/.claude/plans/thinking-engine-harvest-closure-v1.md @@ -30,11 +30,11 @@ Two crates depend on `thinking-engine` (`grep thinking-engine crates/*/Cargo.tom | consumer | dependency | symbols actually used | |---|---|---| | `cognitive-shader-driver` | OPTIONAL, feature `with-engine`, default off | `dto::BusDto`; `cognitive_stack::{SD_FLOW_THRESHOLD, …}`; lens lookups (`jina_lookup`, `bge_m3_lookup`, `reranker_lookup`) in doc/test paths | -| `lance-graph-callcenter` | required, `default-features = false` | `bridge_gate::{CognitiveBridgeGate, CognitiveAuthResult, …}` (callcenter IMPLEMENTS the trait; direction callcenter → thinking-engine is the only allowed one) | +| `lance-graph-callcenter` | required, `default-features = false` | production: `bridge_gate::{CognitiveBridgeGate, CognitiveAuthResult, CognitiveOpKind}` (`cognitive_bridge_gate.rs:45`; callcenter IMPLEMENTS the trait; direction callcenter → thinking-engine is the only allowed one). **Tests also** call `jina_lens::{jina_lookup, jina_distance}`, `bge_m3_lens::bge_m3_lookup`, `reranker_lens::reranker_lookup` (`cognitive_bridge_gate.rs:474–477`, test `pure_ops_emit_zero_audit_events`) — a Codex finding on #1137; the first draft of this row said "only `bridge_gate`", which was true of production code and false of the crate | -So the spine's hard dependency on a 51-file crate is ONE trait module -(`bridge_gate.rs`), and the optional dependency is the DTO ladder plus two -thresholds. Everything else is internal to the crate or reached only by its +So the spine's hard PRODUCTION dependency on a 51-file crate is ONE trait +module (`bridge_gate.rs`), plus one unit test that touches three lens +modules; the optional dependency is the DTO ladder plus two thresholds. Everything else is internal to the crate or reached only by its own examples. That is the finding this plan is built on: closing the chapter costs one trait move and one DTO-home decision, not a rewrite. @@ -67,8 +67,11 @@ and a consumer), **LAB** (calibration battery; keep in a lab crate), (`TextToThought`), `codebook_index.rs`, `pooling.rs`, `sensor.rs`, `dto.rs` (Φ/Ψ/B/Γ ladder), `awareness_dto.rs`, `qualia.rs` (`Qualia17D`), `think.rs` (the "Thinking is a struct" carrier, minimum scope), -`superposition.rs`, `layered.rs`, `role_tables.rs`, the three lens -modules (`jina_lens` self-declared legacy, `bge_m3_lens`, `reranker_lens`). +`superposition.rs`, `layered.rs`, and two lens modules (`bge_m3_lens`, +`reranker_lens`). (`role_tables.rs` is LAB, 1d; `jina_lens.rs` is RESIDUE, +1e — each file has exactly one fate; the two callers that still touch +`jina_lens` — callcenter's test and the driver's doc/test lookups — are +rewritten in W1, not carried.) Two decisions own this group and both already have rows: - **M8** (ENTROPY-MILESTONES, QUEUED): four near-duplicate engines @@ -86,7 +89,7 @@ Two decisions own this group and both already have rows: | file / symbol | what it is | landing | consumer that justifies the port | gate | |---|---|---|---|---| -| `ghosts::GhostField::{imprint,bias,prediction,free_energy,prune}` | Friston prior as a per-atom decaying field; the anchoring alarm. **Family fence:** this is the LINGERING-TRACE family (Staunen = persistent wonder, Wisdom = harvested knowing) — NOT the non-authoritative counterfactual rung (the −6 lane, `deposit_counterfactual` / `CounterfactualMailbox`), whose docs call themselves "ghost-tier" (`TD-GHOST-TIER-NAME-COLLISION-1`). The rung may consume a trace as a starting prior; it is never one. `E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1` | planner `nars/ghost_prior.rs` over `contract::escalation::WisdomMarker` (floor 0.1, decay 0.85 — the constants already agree); per-thought/per-mailbox, NEVER a singleton field | `house-differential-style-v1` D-HOUSE-4 (anchoring alarm) | falsifiers: bias decays but never below floor; `free_energy` RISES on a context shift and FALLS on a recurrence (two-sided); disable-run on the decay constant | +| `ghosts::GhostField::{imprint,bias,prediction,free_energy,prune}` | Friston prior as a per-atom decaying field; the anchoring alarm. **Family fence:** this is the LINGERING-TRACE family (Staunen = persistent wonder, Wisdom = harvested knowing) — NOT the non-authoritative counterfactual rung (the −6 lane, `deposit_counterfactual` / `CounterfactualMailbox`), whose docs call themselves "ghost-tier" (`TD-GHOST-TIER-NAME-COLLISION-1`). The rung may consume a trace as a starting prior; it is never one. `E-A-GHOST-TRACE-IS-NOT-THE-COUNTERFACTUAL-LANE-1` | planner `nars/ghost_prior.rs` over `contract::escalation::WisdomMarker`; per-thought/per-mailbox, NEVER a singleton field. **Intentional semantic change, not source parity** (Codex on #1137, verified): the decay rate agrees (0.85) but the FLOORS do not — `GhostField` drops contributions below 0.001 and `prune` deletes them, `WisdomMarker` clamps at 0.1 forever. Porting the field over the marker raises long-lived bias by up to two orders of magnitude; the port declares the floor it adopts and a calibration gate (free-energy response on a recurrence fixture under both floors) decides it | `house-differential-style-v1` D-HOUSE-4 (anchoring alarm) | falsifiers: bias decays monotonically to the DECLARED floor (whichever the calibration gate picks); `free_energy` RISES on a context shift and FALLS on a recurrence (two-sided); disable-run on the decay constant; the two-floor calibration comparison is reported, not assumed | | `meaning_axes::CouncilWeights::{modulate, shift_toward}` | free-energy-weighted three-archetype modulation with renormalisation | `contract::escalation` beside `InnerCouncil` — only if a caller needs weighted (not majority) council output | none today | do NOT port until a caller exists; record the formula in the plan (done here) | | `meaning_axes::AXES_48` + `AxisActivation` | 48 bipolar semantic axes (r = 0.9913 vs Jina cosine, per census) | `quorum.rs` names an `AxisId` BLOCKED on D-ATOM-1; AXES_48 is the natural candidate vocabulary | `quorum_project` per-axis projection | falsifier-first (the September ruling forbids a fixed axis basis minted by assertion): a size-preserving shuffle of axis assignments must NOT reproduce the 0.9913; until measured, the table stays where it is | | `persona::{PersonaProfile, CognitiveBaseline}` | 12 personality constants + mode/temperature/rung bounds | a Layer-2 role catalogue DATA card (≤32 identities, I-VSA-IDENTITIES) in the persona storyline | none (O3: persona unwired by design) | park; no port | @@ -100,7 +103,7 @@ Two decisions own this group and both already have rows: | `semantic_chunker.rs` | chunk boundaries = convergence jumps, no forward pass | `deepnsm-v2` (text side) or the paperless sentence assembler | tesseract-paperless `assemble_sentences` is the only live sentence producer | falsifier: boundaries vs a gold sentence split; else stays LAB | | `contrastive_learner.rs`, `osint_bridge.rs` | online EMA table update; crawl → engine pipeline | `lance-graph-osint` owns the arc | osint arc | move with the osint arc or delete when it does | | `inference_backend.rs` | 7-backend runtime registry ("nothing is killed, deprecation is data-driven") | LAB | R&D bench only | keep in the lab crate | -| `bridge_gate::{CognitiveBridgeGate, PassthroughGate, DenyAllGate, CognitiveOpKind}` | cross-tenant authorization injection point (trait-only) | `lance-graph-contract` (zero-dep, trait-only — it already says it lives low so callcenter can implement it) | `lance-graph-callcenter` (live) | W1: move trait, callcenter drops the thinking-engine dep; behaviour-preserving, tests move with it | +| `bridge_gate::{CognitiveOpKind, CognitiveAuthResult, CognitiveBridgeError, auth_to_result, CognitiveBridgeGate, PassthroughGate, DenyAllGate}` — the WHOLE public surface of the module, seven items | cross-tenant authorization injection point (trait + result/error enums + two reference gates) | `lance-graph-contract` (zero-dep, trait-only — it already says it lives low so callcenter can implement it), as one module, all seven items together; owner = contract | `lance-graph-callcenter` (live: `CognitiveBridgeGate`, `CognitiveAuthResult`, `CognitiveOpKind` at `cognitive_bridge_gate.rs:45`) | W1 compatibility contract: (a) all seven items move in one PR, identical shapes; (b) thinking-engine keeps `pub use lance_graph_contract::::*` re-exports for that PR so callcenter's imports flip in the same change without a window where either path is missing; (c) callcenter's `pure_ops_emit_zero_audit_events` test is rewritten to exercise the gate without the three lens lookups (or moved to the driver's `with-engine` tests) BEFORE the dep line is deleted; (d) callcenter builds and its tests pass with no thinking-engine path dep — only then is the claim made | ### 1d. LAB — the calibration battery (keep, rename, gate) @@ -151,11 +154,11 @@ Each wave lands only with its gate green; no wave ports without a consumer. | **W0 (this PR)** | census, fate table, row regrades, idea harvest (§4) | boards consistent; SUPERSESSION-INDEX regenerated | | **W1 — cut the hard dependency** | move `bridge_gate` trait + gates to `lance-graph-contract` (trait-only, zero-dep); callcenter re-imports; decide the DTO-ladder home (D-TTV-1 ruling) so the driver's `with-engine` feature can point at it | `lance-graph-callcenter` builds with no thinking-engine path dep; driver `with-engine` still green; thinking-engine becomes a LEAF | | **W2 — harvest gems with consumers** | ghost prior → planner `nars/ghost_prior.rs` (D-TEH-2, consumer D-HOUSE-4); `cronbach` → retire onto `jc::reliability`; `semantic_chunker` → deepnsm-v2 only if its falsifier passes; `spiral_segment` → codec home via certification battery | each port has a two-sided falsifier + a disable run; each source file deleted in the same PR | -| **W3 — M8** | one enum-dispatched engine; the 5 cascade shapes and 3 lens modules collapse; parity suite across u8/BF16/i8/f32 | bit-parity on the driver's existing fixtures; the `branching` spawn shape kept as a mode, not lost | +| **W3 — M8** | one enum-dispatched engine; the 5 cascade shapes and 3 lens modules collapse; parity suite across u8/BF16/i8/f32 | NOT bit-parity across dtypes — u8 / BF16 / i8 / f32 differ in encoding by design, and `dual_engine.rs` exists to MEASURE that disagreement (Codex on #1137). Gate: per-dtype output tolerances plus dtype-invariant ranking/convergence invariants (top-k order, `converged`, `cycle_count` bounds) on real engine fixtures that instantiate all four engines (the driver's fixtures do not — they round-trip `BusDto` only); the pre-collapse `DualResult` disagreement is the baseline the collapsed engine must not exceed; the `branching` spawn shape kept as a mode, not lost | | **W4 — retire and rename** | delete RESIDUE (1e) + retired persona A2A; rename what is left `thinking-lab` (calibration feature, `--manifest-path` CI line); regrade every row in §2; pay `TD-THINKING-ENGINE-EXCLUDED-DEBT-1` | the name `thinking-engine` no longer appears in any `Cargo.toml` dependency; board rows closed or re-owned | Stop rules (non-negotiable inside this plan): nothing ports without a -consumer named in §1c; nothing ports as a singleton field or a new lane +consumer named in §1b (the DTO ladder, D-TTV-1) or §1c (the gems); nothing ports as a singleton field or a new lane (ClassView reading or per-mailbox module only); `A2AMessage` and any inter-mailbox handoff type never revive; the `E-MORTON-CASCADE-V3-1` legacy arm is not deleted while that probe is open; no port of a fixed diff --git a/.claude/tools/supersession_index.py b/.claude/tools/supersession_index.py index e4ebe197c..69441a7e7 100644 --- a/.claude/tools/supersession_index.py +++ b/.claude/tools/supersession_index.py @@ -119,7 +119,8 @@ def plans_for(sym): f"That is a programme, not a cleanup.\n\n") if allblind: s0 = max(allblind, key=lambda s: stat[s][1]) - out(f"**`{s0}` is the sharpest case: {stat[s0][1]} plans name it and *every one* is blind.**\n" + n0 = stat[s0][1] + out(f"**`{s0}` is the sharpest case: {n0} plan{'' if n0 == 1 else 's'} name{'s' if n0 == 1 else ''} it and *every one* is blind.**\n" f"Its COMPONENT-MAP note reads: {syms[s0][2][:120]}\n\n") used = {s0} if allblind else set() if [s for s in inverted if s not in used]: