Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
156 changes: 156 additions & 0 deletions .claude/board/EPIPHANIES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,159 @@
## 2026-09-19 — E-THE-1224-DETOUR-CLEANUP-PASS-WHAT-WAS-CONTAMINATION-AND-WHAT-SURVIVES-1

**Status:** CLEANUP RULING (operator-directed, one pass, no new architecture).
**Confidence:** high — each row names the statement it supersedes and where it
lived. Board entries are append-only, so nothing below is deleted from the
ledger; the live PLAN is corrected in place (it is not a ledger) and the
corrections are listed here.

### Exit condition this pass serves

A new session reads the live board and reaches **SPOG + `f,c` → generic
reasoning → R2IL / replay / mask / fold / ternlog → next consequence / focus**
directly — without reproducing the #1224 causal-licensing detour, treating
OGAR as the thinker, conflating `G` with `ClassView`, weakening R2IL varnode
semantics, or demoting the Panama/Valhalla zero-copy lesson.

### 1. Removed or superseded as contamination

| # | statement, and where it stood | why it goes |
|---|---|---|
| C1 | *"High IG at `band = Relation` … requires an explicit Causal-band operation before any new CE64 is written"* (plan §1, and echoed in `E-THREE-CONVERGENCES-…-1`) | **Invented here, from band ordinality.** `ReasoningBand` is an explicit, coarse, ORTHOGONAL classifier; the source contract says setting one field never implies, derives or requires another. Not a permission ladder. **Deleted, and not replaced by another licensing mechanism** — any future epistemic/causal write gate must come from SPOG / `f,c` / provenance / revision semantics and measured code |
| C2 | *"Usefulness is not causal licensing"* as a doctrine derived from #1224; the helper-existence lesson; the zero-consumer census as the reason the PR closed | #1224 is **not an architectural source**. It was withdrawn because its premise was wrong; the census was forensic evidence only. All three derivations withdrawn |
| C3 | *"outer ontology `G` — which ClassView interprets the bytes"* (plan §2 list) | **Collapsed two axes.** `G` is the graph / context / frame / source context (an ontology graph, a patient graph, a code graph, an episode); `ClassView` is how canonical bytes are interpreted. Never the same axis |
| C4 | *"A varnode is not a buffer"* (plan §1, `E-A-VARNODE-IS-NOT-A-BUFFER`-adjacent text) | **Too broad.** R2IL varnodes ARE real typed machine values/locations with explicit size and address-space semantics. Narrowed to: *a varnode is not a semantic-population materialization obligation.* R2IL stays mechanical behavioral microcode; the zero-materialization freedom belongs to the binding/lowering layer |
| C5 | *"'Valhalla is the storage membrane' does not hold against the tree … Valhalla is E4: Vector API is permanently a lab arm"* (`E-LAYER0-IS-T1-…` item 3, this board) | **Conflated Valhalla with the Vector API lab arm — two different things.** Correct: **lance-graph / T0 owns canonical storage; Panama gives Java direct reach into it; Valhalla gives Java cheap value-shaped semantic carriers over it; lgj therefore inhabits the substrate zero-copy.** Valhalla is a Java-side storage MEMBRANE, never storage OWNERSHIP. E4 (no Vector API in `src/main`) is untouched and unrelated. lgj is one consumer teaching how this works — never the center |
| C6 | *"mount `ogar-dismech` + `dismech-rs` ⇒ DisMech behaviour becomes available"* read as activation | Mounting a graph makes **facts** available; generic reasoning is unchanged. `lance-graph-ogar` is a mount/integration seam, not an ontology reasoner. *We think with OGAR graphs; OGAR does not do the thinking* |

### 2. Retained — independently supported, not #1224-derived

`ReasoningBand` and `CausalTopology` exist as CE64 61–63 / 59–60 and are
orthogonal (read from `causal-edge/src/layout.rs`, not from #1224). The
**bidirectional domain inversion** #1224 exposed is real and still live in the
tree — that single historical fact survives, in
`ISS-DISMECH-SEAM-INVERTED-BOTH-WAYS`. And the measured Waben work is
untouched by this pass: mask operation ≠ materialized bitmap; a flat explicit
program lowers into fused execution; materialization is deliberate; W0/W1
attestation; W2 range terminals and bounded composition; W3 semantic→geometric
rotation; W4 closed tile; W5 local focus; W6 publication cost; replay identity
and determinism; cache-by-key-mismatch rather than maintenance; Quack/DuckDB
economics; R2IL as mechanical behaviour; lgj as zero-copy evidence. **The
goose ride was in the architecture commentary, not in the execution plan.**

### 3. Final DisMech seam wording

```
ogar-dismech the DisMech graph / vocabulary / source-specific semantics
lance-graph zero knowledge that DisMech exists — generic SPOG reasoning only
```

Per existing `dismech_*` file: generic mechanics → extract under generic names;
DisMech-specific semantics → the source/ontology side; entanglement-only code →
delete. **No generic-looking type may be minted to preserve DisMech policy** —
`Support / Partial / Refute / NoEvidence` is NOT promoted to a lance-graph
`Stance` absent an independent non-DisMech requirement; the SPOG / `f,c` model
gets first refusal.

### 4. Final counterfactual module ownership

⊘ **Amends the census addendum below**, which said the DisMech verdict type
should "collapse into" `revision::CounterfactualVerdict`. **Do not collapse the
measurement to remove a duplicate enum.** The two-arm reading is the
experiment: `Consistent → Inconsistent` clearly supports `Necessary`, and
`Consistent → Consistent` supports `Dispensable`, but `Inconsistent → *` are
**not automatically the same adjudication**. The shape is therefore
`CounterfactualAttack { factual, without_step, … }` with
`adjudicate() -> CounterfactualVerdict`, and **a falsifier covering all four
factual × cut-arm quadrants lands BEFORE the local reading type is deleted.**
Ownership stays: `contract/counterfactual.rs` = split-pole deposit;
`revision::CounterfactualVerdict` = the adjudication; `cognitive/world` =
fingerprint substitution (explicitly not structural intervention); the
structural cut/replay mechanics move beside the generic replay core — **no new
standalone `counterfactual_replay.rs`.**

### 5. The center, restored in one line

```
SPOG + f,c → generic reasoning → R2IL / replay / mask / fold / ternlog → next consequence / focus
```

Around it, none of which redefines it: OGAR graphs = knowledge to consult;
Quack = lowering and economics; lgj = zero-copy runtime consumer; JC =
calibration and metrology; DeepNSM / ARM = priors and evidence producers.

## 2026-09-19 — E-WE-THINK-WITH-OGAR-GRAPHS-OGAR-DOES-NOT-DO-THE-THINKING-1

**Status:** RULING (operator) + the ownership CENSUS it demanded before any
cut. **Confidence:** high; every row is read from the tree at
lance-graph `9fd6956d` / OGAR `ogar-dismech` + `ogar-ro` / MedCare-rs `90eb1f9`.

### The rule, recorded before the cut is revised

**Ontology thinking is a lance-graph / SPOG concern. OGAR ontologies are
knowledge graphs supplied to that reasoning substrate. `ogar-dismech` is one
optional graph to consult — not a DisMech reasoning plugin, not the owner of
ontology cognition.** Shorter: *we think with OGAR graphs; OGAR does not do the
thinking.* `ogar-ro`, `ogar-obo`, `ogar-fma`, `ogar-dismech`, a patient graph,
a code graph are all just `G` in `(S,P,O,G ; f,c ; topology ; band)`. There is
no "activate DisMech reasoning"; mounting a graph makes facts available and
nothing else changes. **The falsifier:** if generic reasoning must know WHICH
graph supplied a relation to run its mechanics, either the graph failed to say
what it means in SPOG / f,c / context, or domain policy leaked into the engine.
`G` may matter as provenance and context; it never selects an algorithm.

⊘ This corrects the cut proposed earlier today in
`ISS-DISMECH-SEAM-INVERTED-BOTH-WAYS`, which gave `ogar-dismech` too much
agency (it was to "grow the typed parse") and proposed `contract::revision::
Stance` — the DisMech `supports` vocabulary renamed and promoted, i.e. the
same contamination with the serial number filed off. Both withdrawn.

### Ownership census of `lance-graph-contract/src/dismech_evidence.rs` (817 lines)

| item | what it is | owner | disposition |
|---|---|---|---|
| `DismechTopology` (4) + `from_source` | the `causal_link_type` YAML tokens `DIRECT / INDIRECT_KNOWN_INTERMEDIATES / INDIRECT_UNKNOWN_INTERMEDIATES / UNKNOWN` — its meaning is ALREADY generic as `causal_edge::CausalTopology` (CE64 59–60), 1:1 by the module's own doc | **source-format** | the enum is redundant with `CausalTopology`; the token parse belongs with whoever reads the source (see open decision) |
| `Supports` (4) + `from_source` | `SUPPORT / PARTIAL / REFUTE / NO_EVIDENCE` — **zero consumers outside `dismech_candidates.rs`** | **source-format** | NOT promoted to a generic `Stance`; at ingestion it becomes SPOG evidence attributes / `f,c` (a REFUTE is a relation with negative polarity or low `f`, the domain's call) |
| `EvidenceSource` (5) + `from_source` | `HUMAN_CLINICAL / MODEL_ORGANISM / IN_VITRO / COMPUTATIONAL / OTHER` | **source-format** | source side |
| `modifier` (7), `frequency` (19) | in the doc table only; no enum exists | — | nothing to move |
| `CitationNamespace / CitationKey / BibliographyRecord` (+ `ContentId`) | `(namespace, id)` citation identity — PMID/DOI/URL are cross-domain, ORPHA/CGGV are medical; **zero consumers outside the module** | domain-neutral in SHAPE, single-domain in USE | no independent cross-domain consumer exists, so it does NOT earn a generic home today; it travels with the source side and returns as `contract::citation` when a second domain needs it |
| `DISMECH_PREDICATE_FLOOR`, `DISMECH_PREDICATES`, `dismech_predicate`, `is_dismech_predicate` | the predicate mirror; authority `ogar_dismech::{RELATIONS, CAUSES, by_index}` | **ontology identity, already owned by `ogar-dismech`** | **DELETE** |

### Census of the planner modules

| module | generic mechanics (stay, domain-neutral name) | DisMech knowledge (leaves) |
|---|---|---|
| `dismech_replay.rs` | `ChainStep`, `ReplayTraceRow`, `ComposeTables`, `replay_step/chain`, `first_divergence`, `next_base_seq` | `validate_chain` / `chain_step_predicate` against the mirror. Replacement is a GENERIC validity contract (`validate_chain(chain, is_valid_predicate)`), acceptable only because the validator is generic — proven by running the SAME code under two vocabularies (`ogar_dismech::by_index` and `ogar_ro::by_index` both exist) |
| `dismech_counterfactual.rs` | cut-one-step, both arms, load-bearing test | none — but its `Verdict{Consistent, Inconsistent}` / `EdgeRole::is_load_bearing` must reconcile with the EXISTING generic `revision::CounterfactualVerdict{Necessary, Dispensable, NotRun}`; two verdict types for one question is the drift the cut exists to remove |
| `dismech_candidates.rs` | `EvidenceMask` (already generic, `revision.rs:31`) | the POLICY `Support ⇒ ∩ · Refute ⇒ ∖ · Partial/NoEvidence ⇒ no-op` is derived from the source vocabulary, has zero independent consumers, and is NOT canonized as a lance-graph law. `apply/evaluate/is_informative` go with it unless they take the OPERATION as input rather than the stance |

### `lance-graph-ogar` is a mount, not a reasoner

Its test is not "lance-graph can replay a DisMech chain". It is: register a
vocabulary → build ordinary SPOG relations → hand generic inputs to
lance-graph → **the identical program runs when the graph is `ogar-dismech`,
`ogar-ro`, or another registered vocabulary.** Mount, unmount: only available
knowledge changes.

### Acceptance (replaces the token-grep as the decisive test; the grep stays as hygiene)

1. lance-graph generic reasoning compiles and tests with no DisMech present.
2. Mount `ogar-dismech`: no reasoning code changes; facts become available.
3. Mount a second unrelated graph: the SAME machinery consults it.
4. Unmount `ogar-dismech`: nothing changes but available knowledge.
5. No DisMech source enum or policy has been renamed into lance-graph to
preserve existing code.

### One open decision, flagged, not decided here

Two versions of the ruling arrived; they agree on everything except WHERE the
source-token parsers live: one places them in `dismech-rs` (source/domain
implementation), the other allows `ogar-dismech` (source normalization is a
vocabulary concern). Read from the tree: `dismech-rs` is not a local checkout;
MedCare's `medcare-dismech` bake tool already carries its own fail-closed
token match (`freeze.rs`) and is the only thing that reads the YAML today. So
the parse currently lives with the reader, which is the source side either
way. Recorded as open; nothing is moved into `ogar-dismech` until it is closed.

## 2026-09-19 — E-THE-CENTER-IS-SPOG-PLUS-FC-EVERYTHING-ELSE-IS-CAST-1

**Status:** RULING on the center of gravity for the whole arc; FINDING on what
Expand Down
65 changes: 65 additions & 0 deletions .claude/board/ISSUES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,68 @@
## ISS-DISMECH-SEAM-INVERTED-BOTH-WAYS — counterfactual adjudication CORRECTED; cleanup pass closed (2026-09-19)

⊘ The census addendum below says the DisMech `Verdict{Consistent,
Inconsistent}` should collapse into `revision::CounterfactualVerdict`.
**Corrected:** collapsing it discards the two-arm measurement. `Consistent →
Inconsistent` supports `Necessary`; `Consistent → Consistent` supports
`Dispensable`; `Inconsistent → Consistent` and `Inconsistent → Inconsistent`
are NOT automatically the same adjudication. The cut therefore preserves the
factual and without-step readings as `CounterfactualAttack { factual,
without_step, … }` with `adjudicate() -> CounterfactualVerdict`, and **a
falsifier over all four quadrants lands before the local reading type is
deleted**. Everything else in the addendum stands: no new
`counterfactual_replay.rs`; the structural mechanics sit beside the generic
replay core.

Also closed by the cleanup pass: `Support / Partial / Refute / NoEvidence` is
NOT promoted to a generic `Stance` (the SPOG / `f,c` model gets first refusal),
and **DisMech archaeology stops here** — the seam is now accurately recorded;
the next DisMech action is the implementation PR, on operator word.

## ISS-DISMECH-SEAM-INVERTED-BOTH-WAYS — census addendum: the generic counterfactual home ALREADY EXISTS (2026-09-19)

⊘ The revised cut below still says "extract counterfactual under a
domain-neutral name" as if a new module were needed. It is not. Read from the
tree, three counterfactual surfaces predate the DisMech one:

| module | what it is | consumers |
|---|---|---|
| `lance-graph-contract/src/counterfactual.rs` (546) | D-ATOM-4 — split resolution: minority pole deposited as the CE64 −6 mantissa (`InferenceType::Counterfactual`), `EpisodicEdge` trait, `CounterfactualMailbox` (ghost tier), `revise_if_minority_wins`, `RevisionOutcome` | `lance-graph/src/reasoning.rs`, `lance-graph-cognitive/world`, planner `nars_engine.rs`, contract `scenario.rs`, + tests/examples — a LIVE generic surface |
| `lance-graph-contract/src/revision.rs` | `CounterfactualVerdict{Necessary, Dispensable, NotRun}` — the load-bearing question, adjudicated in the Fusion → Counterfactual → Revision docket | revision policy |
| `lance-graph-cognitive/src/world/counterfactual.rs` (286) | binding substitution on fingerprint worlds — explicitly NOT do-calculus (its own doc says so) | re-exported by `reasoning.rs:44` |
| `lance-graph-planner/src/dismech_counterfactual.rs` (674) | cut-one-step-and-replay-both-arms over a recorded `CausalEdge64` chain; **already `impl EpisodicEdge for CounterfactualEdge`** (`:64`) — it consumes the generic contract today | none in production |

**Consequence for PR-B:** no `counterfactual_replay.rs`. The cut-one-step
mechanics are the missing *structural* arm (an actual edge severed, which the
cognitive module says it lacks) and land beside the generic replay core as a
method of the recorded chain, and its `Verdict{Consistent, Inconsistent}` +
`EdgeRole::is_load_bearing` collapse into the EXISTING
`revision::CounterfactualVerdict{Necessary, Dispensable, NotRun}` — one verdict
type for one question. Four modules named counterfactual is the drift; the cut
must leave three that each answer a different question (split-pole deposit /
load-bearing adjudication / fingerprint substitution), not add a fourth
generic name.

## ISS-DISMECH-SEAM-INVERTED-BOTH-WAYS — cut REVISED per operator ruling (2026-09-19)

⊘ Supersedes the PR-A/B/C shape in the entries below. Ruling and census:
`E-WE-THINK-WITH-OGAR-GRAPHS-OGAR-DOES-NOT-DO-THE-THINKING-1`.

- **PR-B (lance-graph) lands FIRST and alone** — it needs no new OGAR code:
delete the mirror and the three source enums from the contract; extract
replay + counterfactual under domain-neutral names with a GENERIC predicate
validator; reconcile the counterfactual verdict with
`revision::CounterfactualVerdict`; delete the stance policy in candidates
(zero independent consumers); `lance-graph-ogar` test = the same replay
program under `ogar_dismech::by_index` AND `ogar_ro::by_index`; fence test as
hygiene. Re-scope `dismech-causal-replay-v1.md`; retarget `nan-ci-mode-v1.md`
pointers. **No `Stance`. No parser moves into lance-graph or OGAR.**
- **PR-A (source side) waits on the open decision** — where the token parsers
live (`dismech-rs` vs `ogar-dismech`). Until then the only reader,
`medcare-dismech/freeze.rs`, keeps its local fail-closed match.
- **PR-C (MedCare)** — `freeze.rs:66-70`'s "known follow-up" is retargeted
away from the mirror to wherever PR-A's decision lands; no mirror edge is
ever acquired.

## ISS-DISMECH-SEAM-INVERTED-BOTH-WAYS — the MedCare-rs bank, read (2026-09-19)

The two entries below map the lance-graph and OGAR banks; this reads the
Expand Down
17 changes: 17 additions & 0 deletions .claude/board/LATEST_STATE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
## 2026-09-19 (2) — PR #1251 merged (`16090965`): the Waben fold execution-loop plan is on `main`; `main` is `16090965`

- **#1251 — docs only, 21 commits, +3,928 / −1 across 8 files.** Ships
`.claude/plans/waben-fold-execution-loop-v1.md` (§0–§10) and its board
record. **No contract inventory delta** — no type, crate or API changed.
Full record: `PR_ARC_INVENTORY.md` 2026-09-19 #1251.
- **Queued behind it, on operator word only:** `D-WFL-MASKOP` (precedes
W0/W1), then W0 (two attestations), then W1 (assembly-boundary census). The
DisMech cut per `ISS-DISMECH-SEAM-INVERTED-BOTH-WAYS` (revised: PR-B first
and alone; parser location an open decision). `TD-JC-CLIPPY-RED-ON-BASE-2`
remains red on `main`, untouched.
- **Rulings now on `main`** a session must read before touching masks, folds,
replay or ontology seams: `E-THE-CENTER-IS-SPOG-PLUS-FC-…-1`,
`E-ONE-OBSERVABLE-IS-NOT-THREE-INSTRUMENTS-…-1`, `E-FOLDS-ARE-ZERO-COPY-
PERIOD-…-1`, `E-A-DOMAIN-IS-AN-OPTIONAL-CONSUMER-THROUGH-OGAR-…-1`; and, in
the follow-up PR, `E-WE-THINK-WITH-OGAR-GRAPHS-OGAR-DOES-NOT-DO-THE-THINKING-1`.

## 2026-09-19 (1) — PRs #1249 (`bb988363`) and #1250 (`25988f3c`) merged; `main` is `25988f3c`

- **#1250 — D-DIAMOND-1, verdict BOUNDED.** Ships `ordered_lane`
Expand Down
Loading
Loading