diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index 77b7c32b9..fb4e8990c 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -1,3 +1,144 @@ +## 2026-09-13 — E-DISMECH-IS-NOT-A-THINKING-ATOM-AND-THE-MATURITY-LADDER-WAS-FABRICATED-1 — PR #1224 withdrawn; two architectural errors and one invented governance model + +**Status:** OPERATOR RULING, BINDING (2026-09-13). PR #1224 is **CLOSED, not merged** — +its branch is reverted to `main` content and carries only this record. This entry exists +because #1224 was built on premises an agent invented; it is a contamination record, not +a feature note. +**Confidence:** The leak map and consumer counts below are MEASURED (commands in each +row). The withdrawal of the classification is OPERATOR-RULED. Nothing here is inference +promoted to doctrine. + +### 1. What was fabricated — withdrawn, not renamed + +**⊘ The "defining / permissive / decorative" classification is WITHDRAWN.** It was +agent-generated conjecture that converted an operator criticism of *implementation +quality* into an unauthorized maturity/state model, complete with counters and a +progression ("moves from permissive-0 to permissive-1"). It was never authorized as +states, levels, counters, or an architectural ladder. The underlying per-site +measurements may still be cited individually and factually; **the classification and +every transition/counter derived from it have no authority.** Do not re-introduce it +under renamed states. + +Corrected meanings, operator-ruled: + +- **"permissive"**, when the operator uses it to criticize code, means approximately + *"the substrate would permit a correct implementation, but the actual implementation + is bad or incomplete."* It is a qualitative criticism of the CODE. It is **not** a + substrate state, not an acceptable intermediate architecture, and earns no progress. +- **"defining"** is an attribute of a contract that is **actually enforced**. A + canonical byte image, accessors, tests, docs, or one compliant consumer do **not** + make a contract defining. If consumers can bypass, flatten, reinterpret, omit, or + independently materialize the semantics, it is not globally defining. + +**The generalizable failure:** bad code is evidence about an implementation. It is not +permission to invent architectural states, maturity ladders, transition systems, or +acceptance criteria that explain it. **Never turn a criticism into a specification.** + +### 2. DisMech is not a thinking atom — OPERATOR-RULED + +Thinking belongs in lance-graph. **DisMech transcode is a narrow, optional shortcut for +representing or emulating mechanisms for a handful of diseases.** It is not a reasoning +substrate, planner strategy, generic causal engine, counterfactual primitive, NARS +primitive, thinking vocabulary, or alternate implementation of lance-graph thinking. + +The only legitimate use is on the **MedCare-rs / domain side**, behind an explicit +`ogar-loco` / `ogar-dismech` specialization (e.g. a `LabCausalityTrajectory` or an +equivalent explicitly medical, actionable predicate framing). That adapter may translate +narrow DisMech output into ordinary domain assertions/evidence. **After the adapter +boundary, lance-graph must not know or care that DisMech produced the evidence. +DisMech provenance confers ZERO thinking semantics.** + +### 3. The leak map — MEASURED, not estimated + +`rg -l dismech crates/` → 12 files. Sizes via `wc -l`; consumers via +`grep -rn "dismech_\(replay\|counterfactual\|candidates\)::" --include=*.rs crates/`. + +| Location | Lines | Surface it occupies | Production consumers | +|---|---:|---|---| +| `lance-graph-contract/src/dismech_evidence.rs` | 817 | `pub mod` at `lib.rs:85` of the **ZERO-DEP SPINE CONTRACT** | the 3 planner modules below + `lance-graph-ogar` parity assert | +| `lance-graph-planner/src/dismech_replay.rs` | 873 | `pub mod` at planner `lib.rs:104` | **none** | +| `lance-graph-planner/src/dismech_counterfactual.rs` | 799 | `pub mod` at planner `lib.rs:103` | **none** (1 example) | +| `lance-graph-planner/src/dismech_candidates.rs` | 394 | `pub mod` at planner `lib.rs:102` | **none** | +| `.claude/plans/dismech-causal-replay-v1.md` | 856 | plan | — | +| `.claude/plans/dismech-causality-v3-v1.md` | 519 | plan | — | + +**2,883 lines of Rust** (2,066 planner + 817 contract) **+ 1,375 lines of plans.** + +**The only three references to the planner modules from outside themselves are:** +`cache/nars_engine.rs:490` (a `///` doc comment), `examples/house_differential.rs:164` +(an example), `dismech_evidence.rs:503` (a `///` doc comment). **Zero production +thinking/planner code calls any of it.** The cluster is self-referential: the contract +mirror feeds the planner modules, which feed examples and their own tests. + +So the contamination is not deep entanglement in a hot path — it is that a +disease-mechanism vocabulary was installed **into the public surface of the thinking +crate and mirrored into the zero-dep spine contract**, at nearly 3k lines, with no +consumer justifying any of it. `lance-graph-ogar::assert_dismech_palette_parity()` +shows the authority already lives correctly in the armed tier (`ogar_dismech::RELATIONS`, +19 causal predicates); the contract carries a **mirror** of it that the spine should +never have held. + +### 4. What #1224 actually added — and why it is deleted, not re-homed + +#1224 added `EdgeRole::is_causally_licensed()` / `is_causally_load_bearing()` (+125 lines +with tests) **inside `dismech_counterfactual.rs`** — i.e. it added causal-reasoning +semantics to a module that should not host reasoning semantics at all, to advance a +counter in the fabricated classification. Measured: **zero consumers** of either method +anywhere in the workspace. + +The PR body claimed it "prevented relation-level changes from being incorrectly reported +as causal." **That claim was false.** There is no reporting boundary that consumes the +predicate. **A helper existing is not enforcement.** The tests passed and proved only +that the boolean expression evaluates as written — passing tests are not a reason to keep +an abstraction whose architectural home is invalid. + +### 5. CausalEdge64 LE — verdict DOWNGRADED, MEASURED + +The merged `STATUS_BOARD.md` D-BBB-NARS-2 row asserts *"`CausalEdge64`'s canonical +little-endian image IS the defining truth representation."* Separating representation +from enforcement, as the operator requires: + +1. **Canonical representation exists** — partially. `#[repr(transparent)] pub struct + CausalEdge64(pub u64)` with documented bit positions. But **`CausalEdge64` has no + `to_le_bytes`/`from_le_bytes` at all** — every LE conversion in `crates/causal-edge/` + is on `CausalEdgeV3` (a different, 12-byte type). Its byte image is host-native. +2. **Local encode/decode law** — correct and tested (bit accessors). +3. **Consumers preserve it** — **NO.** The field is `pub u64`. Any consumer can build + `CausalEdge64(raw)` from an arbitrary integer, bypassing every accessor. Measured + construction sites outside the owning crate include `cognitive-shader-driver/src/ + backing.rs:123` and `mailbox_soa.rs:1324`. +4. **Storage/replay boundaries enforce it** — **NO.** `contract/src/soa_view.rs:83` + documents the storage read as *"per-row packed `CausalEdge64` as raw `u64` + (reconstruct via `CausalEdge64(raw)`)"* — the boundary hands out a raw integer and + asks the consumer to re-wrap it. +5. **Alternatives cannot silently discard/reinterpret the defining dimensions** — + **NO.** `edge.rs:158` names a twin type, `ndarray::hpc::causal_diff::CausalEdge64`, + and bits 59-63 are freely writable by anyone holding the raw `u64`. + +**Verdict: the CE64 LE contract is NOT globally defining.** Only #5 would justify a +strong global claim, and #3/#4/#5 all fail. The operator ruling *"we should always +enforce CE64 as defining LE"* is a **directive about what must be built**; the board +converted it into a claim of accomplished fact. `CausalTopology` (59-60) and +`ReasoningBand` (61-63) being present in the register does **not** prove those +dimensions are universally respected — **a representation can carry the truth while +the code throws the truth away.** That is a severe defect, not a weaker-but-acceptable +state. + +### 6. What survives + +Measured facts survive; the theory around them does not. The 19-predicate DisMech +palette, the per-site consumer counts, the CE64 bit positions, and the NARS confidence +fixed point (170 under `NarsTables::build(1)`) are all real measurements and may be +cited individually. **Nothing in §1 may be cited as architecture.** + +### 7. Where the fabricated text still lives (append-only, corrected here — not rewritten) + +The classification reached `main` before it was caught, and merged governance text is not +silently rewritten: `EPIPHANIES.md` (2 lines, in the entry below this one) and +`STATUS_BOARD.md` (the D-BBB-NARS-2 row) still carry it. **This entry is the explicit +newest-first correction that supersedes both.** The historical operator words are NOT +mutated to make the agents look less wrong. + ## 2026-09-10 — E-LE-IS-THE-UNIVERSAL-DTO-LAYER-TYPED-SYNTAX-MEANS-A-VERSIONED-LE-SCHEMA-1 — a bare `(f, c)` pair is a degree, not a typed truth **Status:** OPERATOR RULING, BINDING (2026-09-10, verbatim: *"Little-endian is the universal