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
495 changes: 495 additions & 0 deletions .claude/board/EPIPHANIES.md

Large diffs are not rendered by default.

371 changes: 371 additions & 0 deletions .claude/board/LATEST_STATE.md

Large diffs are not rendered by default.

36 changes: 36 additions & 0 deletions .claude/board/PR_ARC_INVENTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,39 @@
## 2026-08-20 — lance-graph #970 (MERGED, merge commit 781c3b9, head 8a3cd4e) — CE64: additive `CausalTopology` + `ReasoningBand` lenses over bits 59..63, no wire change

*(Entry written 2026-08-20 on branch `claude/carve-nars-kernels` — the
hygiene was owed at merge time and not written then. Recorded late rather than
not at all; the omission is the note, per the board's own append-only rule.)*

- **Added:** `CausalTopology { Direct, IndirectKnownIntermediates,
IndirectUnknownIntermediates, Unknown }` over bits **59..60**, with EXACT
ordinal compatibility to the `TrustTexture` band already stored there
(`TRUTH_SHIFT`) — a second READING of stored bits, never a relocation;
`ReasoningBand` (8 levels `Surface … Transcendent`) over the previously-
`SPARE_SHIFT` bits **61..63**; and four accessors on `CausalEdge64`
(`topology` / `reasoning_band` / `with_topology` / `with_reasoning_band`),
consuming builders matching the crate's own `with_truth` / `with_spare`
convention.
- **Locked:** strictly mechanical and non-breaking — **no bit moved, no
`ENVELOPE_LAYOUT_VERSION` bump, no CE64 v3**; `_LAYOUT_COVERAGE` unchanged;
every pre-existing accessor reads exactly the bits it read before. v1 stub
twins mirror the existing convention.
- **Deferred (explicitly out of scope by the brief, and still out):**
OGAR-loco wiring; the 34 recipes; DisMech integration; HHTL nodes; any NARS
redesign; Rubicon/MUL.
- **Corrections the brief absorbed rather than imposed** — *the brief bends to
current main, never the reverse* (operator, same session): the band type is
the REAL existing `TrustTexture`, not a new name; the builders are
`with_*` (consuming), not the brief's `set_*`.
- **Known trap recorded, not fixed:** `CausalEdge64::temporal()` reads bits
**52..63** and decomposes them as `plast | (w_slot << 1) | (truth << 7) |
(band << 9)`, so `Network::evidence_trail`'s sort by `temporal()` is
sensitive to the 59..63 content these lenses now name. Nothing changed
underneath it; the entanglement is pre-existing and is called out so a
future session does not read the new lenses as its cause.
- **Confidence:** HIGH for the layout claim (const-asserted + ordinal parity
tested); the trap above is a read of shipped code, not a measurement of its
consequences.

## 2026-08-19 — lance-graph #968 (MERGED, merge commit 66fec27, head 88210f7) — seal STORNO + finalization map + register-grid correction + 5+3-ratified spec (no implementation) — ⊘ SUPERSEDED SAME-HOUR by the DUMB-STORAGE architecture reset

- **Added (docs/board/probe only, zero substrate code):**
Expand Down
111 changes: 111 additions & 0 deletions .claude/board/TECH_DEBT.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,114 @@
## TD-CAUSAL-EDGE-IS-EXCLUDED-SO-CI-NEVER-LINTS-IT (2026-08-20) — OPEN

**`causal-edge` is in the root `Cargo.toml`'s `exclude` list, not `members`.**
It therefore builds into its own `crates/causal-edge/target/` and the
workspace's `cargo clippy --workspace -D warnings` gate **never sees it** —
which is why 7 clippy errors have accumulated there unnoticed:

| file | lint |
|---|---|
| `edge.rs:118` | `if_same_then_else` (the `mag == 5` arm of `InferenceType::from_mantissa` — both branches return `Synthesis`) |
| `edge.rs:200` | `too_many_arguments` (10/7 — the v1 `pack`, kept for back-compat) |
| `edge.rs:684` | `wildcard_in_or_patterns` |
| `edge.rs:742`, `747` | `collapsible_if` ×2 |
| `edge.rs:834` | `too_many_arguments` (8/7 — `pack_v2`) |
| `tables.rs:37` | `doc_lazy_continuation` |
| `v2_layout_tests.rs:20` | `module_inception` (lib-test only) |

Not fixed in PR #971 — that PR is scoped to CE64⇄V3 conversion correctness, and
`edge.rs`'s two `too_many_arguments` are load-bearing back-compat signatures
whose change is a consumer-facing decision, not a lint cleanup. Verified in the
same pass that the PR's own file (`edge_v3.rs`) is **fmt-clean and clippy-clean
in both feature states**, so this debt is strictly pre-existing.

**The generalisable half:** a workspace-excluded crate silently opts out of
every workspace-level gate — not just clippy. Any excluded crate needs either
its own CI job or an explicit note that its gates are manual. Same family as
tesseract-rs's "the gate is LOCAL — a green PR says nothing."

**Paid when** either the exclusion is revisited (it exists to keep the crate
zero-dep and independently buildable) or a per-crate lint job is added.

## TD-THOUGHTCTX-IS-A-LOSSY-PROJECTION (2026-08-20) — OPEN, Stage-3

**`ThoughtCtx` is not the reasoning state. It is a lossy projection of the
reasoning substrate — measured from both sides in one session.**

**Input side.** `thought_ctx_from(&PlanContext)` reads exactly two scalars
(`free_will_modifier`, `features.estimated_complexity`). `lance-graph-contract`
has no `causal-edge` dependency at all, so the entire Stage-2 recipe surface is
causally blind to CE64/V3; `nars_hint` and `witness` sit on `PlanContext` unread
by that projection (`E-THE-RECIPE-SURFACE-IS-CAUSALLY-BLIND-1`).

**Output side.** 17 of 34 kernels are `Operational` and confidence-MUTE — real
effects on `candidates` / `rung` / `temperature` / `beliefs`, observed by a
dissent consumer that watches only `confidence`
(`E-THE-FILTER-WAS-FILTERING-ON-THE-WRONG-PREDICATE-1`).

**Explicitly NOT the fix:** rewriting the 17 to move confidence. That would
destroy the producer/consumer distinction the audit just discovered, and it is
ruled out by the operator. They are not stubs.

**Stage 3 decides**, from measurement rather than preference, whether dissent
becomes (A) a multidimensional comparison over each kernel's declared
`writes()`, (B) separate watchers per capability/dimension, (C) a projection of
effects into a common epistemically meaningful space, or some measured
combination. The questions that make it tractable are already well-posed: which
causal/NARS/V3/witness dimensions does each recipe READ; which epistemic
dimensions does it WRITE; which consumers can observe those writes; what does
the `ThoughtCtx` projection lose. That connects directly to the JC/HHTL
psychometric program.

**Third measurement, same fact (2026-08-20, codex round 3).** `Mcp` declares
`moves_confidence() == true` truthfully yet is guaranteed silent in the
dispatched context: `free_energy` starts at 0.5, exactly one kernel writes it,
and that one only decays it — swept 36 styles x 5 rungs, `free_energy` never
exceeds 0.5 and `Mcp` moves confidence 0/180. Capability is not reachability.
A reachability FILTER is near-circular (deciding it costs the same as sampling);
what it would really buy is refusing to count structural silence as agreement,
which is a change to what dissent MEANS. See `E-CAPABILITY-IS-NOT-REACHABILITY-1`.

**Paid when** the projection is explicit and measurable — not when the symptom
(17 silent kernels) is papered over.

## TD-KERNEL-IDENTITY-FINGERPRINT-RAIL (2026-08-20) — OPEN

**Three of the 34 NARS recipe kernels — `ARE`(19), `ZCF`(24), `HKF`(34) —
cannot be carved out of `Demonstration` because of ONE missing substrate
capability, not three separate gaps.**

All three are VSA bind/unbind identities: `A⊗B⊗B = A` (ARE), `bind(A,B)`
recoverable (ZCF), `bind(domain_A, rel, domain_B)` reversible (HKF). Each is
an exact algebraic statement and each is currently demonstrated on **hardcoded
`u32` constants**, so the kernel ignores `ctx` entirely — measured and pinned
by `context_blind_kernels_are_input_invariant`.

**What they need:** an identity-fingerprint rail on the kernel substrate.
`ThoughtCtx`'s eight-field basis (`ThoughtField`) is a scalar proxy —
`sd`/`free_energy`/`dissonance`/`temperature`/`confidence`/`rung` are `f32`,
`candidates` is `Vec<f32>`, `beliefs` is `Vec<(u32,f32,f32)>`. **None of them
is a fingerprint**, so there is nothing in scope for a bind/unbind kernel to
bind. This is the same gap `recipe_claim_audit`'s Axis B already names at
scale: *"all 34 measure their claim against a lightweight scalar proxy, never
the real organ named … the gap is WIRING, not composition."*

**HKF needs one thing more**, and it is worth recording separately so a future
session does not discover it half-way: its identity is over a **predicate**
rail (`domain_A —rel→ domain_B`), and `SubstrateView::project` discards the
predicate rail entirely. A fingerprint rail alone unblocks ARE and ZCF; HKF
additionally needs a predicate-preserving projection.

**Explicitly NOT the fix:** giving them an effect on the scalars they do not
read. That would be the silent-effect-under-a-not-production-label failure
`non_operational_kernels_land_no_effect` exists to catch, and it would trade
an honest placeholder for a dishonest kernel. They stay `Demonstration` — and
`MaturityPolicy::ProductionOnly` refuses them, pinned at exactly 3 by
`the_policy_discriminates_over_the_live_kernels`.

**Paid when:** a fingerprint rail (and, for HKF, a predicate-preserving
projection) reaches the kernel substrate; then the three carve together and
that pin, plus `G2` in `recipe_claim_audit`, are re-pinned to zero.

## TD-LANCE9-LANCEDB036-REMEASURE (2026-08-05, operator-noted, DEFERRED)

**Pins today:** `lance`/`lance-linalg`/`lance-namespace` `=7.0.0`,
Expand Down
Loading
Loading