diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index d7811bf79..853b1e8d7 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -1,3 +1,35 @@ +## 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`. + +**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..303066469 100644 --- a/.claude/board/PR_ARC_INVENTORY.md +++ b/.claude/board/PR_ARC_INVENTORY.md @@ -10,6 +10,52 @@ > 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"). +- **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`). +- **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 - **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..12ba5d7c3 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -1,3 +1,29 @@ +## 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 / +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 | +| 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 +1369,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 +1466,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..6806fe13c 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 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:** -2 crate files against 10 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 @@ -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 | 12 | 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/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 new file mode 100644 index 000000000..a1a0996e0 --- /dev/null +++ b/.claude/plans/house-differential-style-v1.md @@ -0,0 +1,321 @@ +# 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. + +```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) +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, 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` | +| 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)`. 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 + 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`) → `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; 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. +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. + +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. + +## 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 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 + the starting rung excludes (the periphery's job). + +**Arms.** +- A0: RCR alone (`rcr_abduce`, rank by expectation). +- 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). + +**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 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 §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) + +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 | +| 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 + +- 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..c458b40fc --- /dev/null +++ b/.claude/plans/thinking-engine-harvest-closure-v1.md @@ -0,0 +1,210 @@ +# 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` | 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 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. + +## 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`, 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 + (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. **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 | +| `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::{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) + +`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 | 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 §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 +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 | +| 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 | +| "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. 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]: