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
11 changes: 9 additions & 2 deletions .claude/board/STATUS_BOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,17 @@ Plan: `.claude/plans/2026-10-08-resident-projection-fold-mask-v1.md`. Mask = adm

| D-id | scope | status | gate / falsifier |
|---|---|---|---|
| **D-RPF-0** | Pearl3 / Epi5 / mantissa predicate over `MaterializedEdges` via `MatchFacet16Strided`, threshold as ≤ n+1 patterns | In PR (test-pinned, `mask-risc/tests/resident_ce64_predicate.rs`) | equals CE64 accessors; wrong-bit care disagrees; unnamed fields silent; both windows stay inside the 32 B tenant |
| **D-RPF-0** | Pearl3 / Epi5 / mantissa predicate over `MaterializedEdges` via `MatchFacet16Strided`, threshold as ≤ n+1 patterns | Shipped (#1413; test-pinned, `mask-risc/tests/resident_ce64_predicate.rs`) | equals CE64 accessors; wrong-bit care disagrees; unnamed fields silent; both windows stay inside the 32 B tenant |
| **D-RPF-1** | Law tables → per-recipe ternary pattern set (≤ 24 × 8), run under an admission plane (class, rail, generation, provenance) | Queued | equals `measure_declared`; dropping one code loses exactly its rows; removing the admission plane admits a v1 row |
| **D-RPF-2** | Census of eligibility and read-set classes on a real population | Queued | classes/rows reported; near 1 drops D-RPF-3; no population-sized seen-set |
| **D-RPF-3** | Exact read-set dedup per CE64 instruction, key incl. handle context | Queued (after D-RPF-2) | removing cohort from key changes a result; dedup-then-fold equals per-row for Count/Sum/Avg |
| **D-RPF-4** | Population revision as one `(Σw, Σw·f)` fold | Blocked (4 decisions; T1 LUT-weighted strided sum gap) | normative choice vs pairwise chain; c = 255 cap first |
| **D-RPF-5** | Moore tenants 18..20 under a declared `SlabReading`; per-slot masks | Blocked (`SlabReading` decision) | sign-triple consumer refuses Moore lanes through the declared reading |
| **D-RPF-6** | Tile skip on zero gate measured on resident-row predicates (capstone pt 3) | Queued | identical answers; dead-tile beside dead-word fraction |
| **D-RPF-7** | Rank spectrum of the 256×256 palette distance LUTs | Queued (measurement only) | reported; never a fold |
| **D-RPF-CONF-0** | Confidence surface: Rust vs exact integer form, (255,255), zero-weight identity, c=255 candidates, census of live revision laws | Shipped (#1424; measured) | T1 three one-code f32 deviations; (255,255) → (0,0); 24 defs → 7 laws → 4 behaviours; G1 open (`entries/2026-10-09-d-rpf-conf-0-confidence-surface.md`) |
| **D-RPF-TABLE-1** | Cost of `NarsTables` resolutions B1..B16 vs exact revision A: surface, replay drift, decision flips, throughput | Shipped (#1426; measured); G2 follow-up: law-A load-bearing fixture + frequency-bar rationale without B1's constant (this PR) | B1 2.2–4.4× hot replay, 37.9% verdict flips; no Bn decision-stable; A wins cold; law-A fixture 210 → 64 flips, B1–B8 miss it, B16 agrees (`entries/2026-10-09-d-rpf-table-1-fast-path-cost.md`) |
| **D-RPF-P5** | NARS ↔ Beta correspondence on the CE64 surface: Jeffreys identity, unit-evidence stall, duplicate inflation, variance coarseness, 255 unreachable | In PR (tests only) | E1 exact for k = 1, k = 2 distinguishable; E2 stall at c = 244 after 20 unit obs; E2b 12-row stall table; E3 4 copies → sd 2.04× too small; E5 max revision code 254; ceil-rounding disable turns E2/E2b/E5 red (`entries/2026-10-10-d-rpf-p5-nars-beta-correspondence.md`) |
| **D-RPF-8** | Boundary: mask-risc never executes CE64 instructions; no VSA on this path | Queued (doc) | review-enforced |
| **D-RPF-9** | Fold-Join deforestation probe: resident ∧ resident, predicate chains gated/ungated, CE64 in place, strided pattern merge | Shipped (probe; R2/R3/G1–G3 proposed) | every arm equals the oracle; care-shift fires, non-care rewrite silent; merge precondition refuses conflicting cares |

Expand Down Expand Up @@ -84,7 +87,11 @@ Plan: `.claude/plans/2026-10-06-global-sudoku-replayable-orchestration-v1.md`. O
| **D-ALPHA-G-0** | WorldG as Alpha-route provenance, not a CE64 field | Shipped (#1372) | `cognitive-shader-driver/examples/alpha_world_provenance_probe.rs`: event = (Alpha-attended address, CE64); WorldG = `graph_of(addr)`, order = `SpogTenants` route (`merge_in_claim_order`); same CE64 bits in two worlds = two events; replay of the same claims recovers the world sequence with all-zero edges; changing CE64 fields never moves the world while the events change; fed from the tunnel's per-world shadows each `MailboxSoA` holds only its own deliveries through the unchanged `apply_edges`; an undeclared world is refused at the tunnel (`NoTenant`). No production caller of `apply_edges` exists, so "no mixing" is absence of a path; 5 tests, 5 disable runs red |
| **D-WA-0** | Witness × Angle as a declared sparse local source coordinate | Shipped (#1372) | `cognitive-shader-driver/examples/witness_angle_probe.rs`: `(class, generation, w_slot, direction bits 43..45) → SourceCoord` under a probe-local sparse law (6 entries); same bits mean different sources in another class of the same world, in another world and in another generation; undeclared class, a class reading the bits as pathology triad or cohort `WitnessTable`, an undeclared generation, Witness 0 and v1/unknown provenance refuse; other CE64 fields never move the coordinate; world from the attended key, never the edge; 0 allocations; 7 tests, 8 disable runs red |
| **D-CE64-TIME-0** | `CausalEdge64` as the register that survives a cycle | In PR | `cognitive-shader-driver/examples/ce64_cycle_survival_probe.rs`: one declared (`set_populated`) `MailboxSoA` `edges` row (cycle-gated `write_row` + `tick`, read back through `MailboxSoaView`) is the only cross-cycle state; folds = shipped `CausalEdge64::learn` (NARS revision of F/C) over a per-cycle `SupportLedger`; next-cycle reading = the #1370 law, moved unchanged to `examples/shared/affordance_law.rs`. Trajectory over cycles 0..3: eligible `OBS, OBS, OBS\|STRATIFY, OBS` (accumulation, certification read next cycle, contradiction read next cycle). The EpistemicState5 step (3 ↔ 7) is probe-declared: no production writer of bits 59..63 from evidence exists (`ISS-NO-EVIDENCE-WRITER-FOR-EPISTEMIC-STATE`). F1–F7 tests; 1000 folds from one source never certify; sources split across cycles never combine (missing state, pinned); an undeclared row is not a register. 10 tests, 9 disable runs red |
| **D-MOORE-NARS-0** | Recipe learning from reasoning consequences on Gomoku (`cognitive-shader-driver/examples/moore_nars_gomoku_probe.rs`): census of the 34 recipes, 9 realized on Moore lines, structural `situation → recipe` NARS learner | In PR | persistent structural learner 0.500 → 0.535 vs best fixed recipe 0.498 and reset-every-game ~0.47; literal-board memory and immediate credit learn nothing; W-delayed one-reply credit is the spine; transfer to unseen openings 0.526 vs 0.493; "less work" not achieved (~280 folds/step); unlearning after switch not demonstrated (`entries/2026-10-08-moore-nars-0-recipe-learning-gomoku.md`) |
| **D-MOORE-NARS-0** | Recipe learning from reasoning consequences on Gomoku (`cognitive-shader-driver/examples/moore_nars_gomoku_probe.rs`): census of the 34 recipes, 9 realized on Moore lines, structural `situation → recipe` NARS learner | Shipped (#1400) | persistent structural learner 0.500 → 0.535 vs best fixed recipe 0.498 and reset-every-game ~0.47; literal-board memory and immediate credit learn nothing; W-delayed one-reply credit is the spine; transfer to unseen openings 0.526 vs 0.493; "less work" not achieved (~280 folds/step); unlearning after switch not demonstrated (`entries/2026-10-08-moore-nars-0-recipe-learning-gomoku.md`) |
| **D-MOORE-PERT-AB-0** | Moore perturbation field A/B probe with an independent arm and statistical comparison (`examples/MoorePertubationsfeld.rs`) | Shipped (#1427; probe) | CI line; percentile fix; timings dropped from asserts; falsifiable tests |
| **D-MOORE-OBSERVABLE-FIRST-0** | Certify N-1 overload decisions before field convergence (linear flow model) | Shipped (#1428; measured) | solver-agnostic ‖r‖₁ bound + warm start certifies most decisions early; PCG/LODF beat Jacobi; bound proven for the linear flow model only (`entries/2026-10-09-d-moore-observable-first-0.md`) |
| **D-LAB-P1** | Certified argmax on Gomoku minimax: deterministic `L_best ≥ U_j` cutoff (`minimax_certified`) | In PR (probe) | same pick as `minimax` on 400 positions at k 4/4, 5/5, 8/8; folds −36.2 / −44.8 / −61.0 %; cut at `L + 1` changes a pick (`entries/2026-10-10-d-lab-p1-certified-argmax-gomoku.md`) |
| **D-SELF-CALIBRATING-LAB-0** | Hypothesis lab v0: shared paired/Holm/verdict/reliability statistics (`examples/shared/lab.rs`) + Gomoku arm (`moore_nars_gomoku_probe --lab`) | In PR (probe; Gomoku + crossword) | crossword (16 fresh puzzles): C1 Support −36× nodes SUPPORTED, C2–C4 ops FALSIFIED (Support 13×, Single 2.9×, Pair 2.2× more ops); Gomoku fresh-seed confirmation, 16 blocks: H2 learned > fixed HPM +0.024 SUPPORTED; H4 certified −29 folds/step, identical games at cost 0 SUPPORTED; H7 cost term −143 folds/step SUPPORTED (−0.026 score); H3 INCONCLUSIVE; H5 FALSIFIED; e ECE 0.05 over non-neutral outcomes (`entries/2026-10-10-d-self-calibrating-lab-0.md`) |
| **D-CE64-NEXTSTATE-0** | EpistemicState5 as a sparse next-state mutation of the CE64 register | In PR | `cognitive-shader-driver/examples/ce64_nextstate_probe.rs`: N1 only bits 59..63 move, all 32 codes on an edge with every field set; N2 written in cycle k through `MailboxSoA::write_row`, read in k+1 through `MailboxSoaView`; N3 the mailbox does not double-buffer (a same-cycle read sees the write), and next-cycle authority is a read discipline: start-of-cycle copy plus `last_write_cycle == cycle` treated as pending; N4 canonical LE round trip (bits 59..63 in byte 7, bits 3..7); N5 a fresh mailbox from the persisted word continues identically; N6 the shipped `with_spare` + `with_truth` compile to `bzhi; shl; or`, identical to the masked insert (LLVM folded the two), so no 5-bit writer is added. Production change: `CausalEdge64::to_le_bytes` / `from_le_bytes` (mirroring `EpisodicEdges64`) and the register contract on the type. 6 tests, 7 disable runs red |
| **D-ANCESTRY-K1-0** | StreamDto / PerturbationDto / BusDto / p64 / shader-driver ancestry vs code | Shipped (this PR) | `entries/2026-10-06-streamdto-circuit-ancestry.md`: v3 docs first, then code (git history is shallow at #1327). The k → k+1 loop was intended (`EmitMode::Persist`, `persist_cycle`, `mailbox-thoughtspace` read shim, W4a cast pairing) and left open: the driver owned its mailbox read-only. Path B |
| **D-STREAMDTO-0** | A real `StreamDto` through the shipped path to next-cycle #1370 eligibility | In PR | `cognitive-shader-driver/examples/streamdto_circuit_probe.rs`: `StreamDto` → the new `ingest_codebook_indices_soa` (straight into the SoA, cycle-gated `write_row`, encoding shared with the superseded BindSpace arm) → `dispatch` k → `persisted_row` gets `emitted_edges[0]` via the new `ShaderDriver::mailbox_mut` → `tick` → `dispatch` k+1 reads it and changes → `measure`. The edge steers k+1 only through `s_idx / 4`; the shader writes code 0, so eligibility is unchanged by the circuit (`0x20`, same as an unwritten word; code 7 gives `0x24`). Timestamp ≠ cycle; restart from LE bytes reproduces k+1. CI step added (feature-gated targets incl. `w2_differential` were never run). 6 tests + 1 lib test, 9 disable runs red |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# D-LAB-P1 — certified argmax on Gomoku: a deterministic certificate (2026-10-10)

**Status:** MEASURED. Probe only
(`crates/cognitive-shader-driver/examples/moore_nars_gomoku_probe.rs`,
`minimax_certified` + `certified_minimax_picks_what_minimax_picks_with_fewer_folds`).
Stockfish O1 untouched. `Op::Asc` and `Opp::Lookahead` still call `minimax`.

## Certificate (kind: deterministic)

A candidate's value is the minimum over its replies, so the running minimum
is an upper bound U that only falls. The best finished candidate has an exact
value L. When U ≤ L, the candidate cannot be chosen (the choice needs a strict
`>`), and its remaining replies are skipped. No value exceeds 7, so a finished
7 ends the search. This is the alpha-beta cutoff at the root, stated as a
certificate: `L_best ≥ U_j` ⇒ j is excluded. It holds by construction, not by
measurement; the corpus test checks the implementation.

#1428's residual bound was not reused: it is proven for the linear flow model
only.

## Measured (400 reasoning positions; propagation-decided positions excluded)

| k1/k2 | folds full | folds certified | saved | positions with a cut | pick changed |
|---|---|---|---|---|---|
| 4/4 | 442,720 | 282,480 | 36.2 % | 400/400 | 0 |
| 5/5 | 665,076 | 367,344 | 44.8 % | 400/400 | 0 |
| 8/8 | 1,601,258 | 624,386 | 61.0 % | 400/400 | 0 |

Savings grow with branching, as expected for cutoffs. Overhead: one
comparison per evaluated reply. Abstentions: none (an exact search never
abstains; it only skips).

CI: the probe is `test = true` and runs under rust-test.yml's shader-driver
step. Disable run: cutting at `U ≤ L + 1` (unsound by one) → the test fails on
k = 4/4 with a changed pick. Pinned fold counts are exact (deterministic
corpus).

## For the lab

This is strategy S7 (certified early stopping) on one task, with a
decision-identical guarantee. It answers H4 on Gomoku minimax: computation
drops 36–61 % with zero changed decisions. It does not touch D-MOORE-NARS-0's
"less work not achieved" by itself: that probe's recipes would need to call
`minimax_certified`, which would change its reported folds but not its games.
That swap is the first lab arm to measure, not an edit made here.

```
PR (this) | STATUS: measured | OUTCOME: deterministic certified argmax on
Gomoku minimax: identical picks on 400 positions, 36-61% fewer folds; unsound
cut changes a pick | OPEN: recipes still call minimax by default; no
certificate yet for statistical (sampled) values
```
60 changes: 60 additions & 0 deletions .claude/board/entries/2026-10-10-d-rpf-g2-law-a-boundary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# D-RPF-G2 — the law for decision-bearing wiring; P8 audit closed (2026-10-10)

Follows `entries/2026-10-09-d-rpf-table-1-fast-path-cost.md` (#1426), which
already holds the P8 semantic audit. This entry re-checks it against code,
records the G2 boundary, and closes two of its four open items.

## P8 — re-checked in code

| question | answer | where |
|---|---|---|
| Which law does replay run? | Whatever `NarsTables` the caller passes; every caller passes `build(1)` (B1) except `tests/chain_confidence.rs` (16) | `chain_replay.rs::replay_step` |
| Who calls it outside tests? | Nobody. `replay_chain`, `counterfactual_replay` and `pearl::reason`'s `CutContext` are built only under `#[cfg(test)]` (`chain_admission.rs:165`, `pearl.rs:427`, `chain_counterfactual.rs:272`), in `tests/` and in examples | read 2026-10-10 |
| `NarsEngine::tables` consumed? | No production reader. `NarsEngine::new` (production instance `strategy/chat_bundle.rs:42`) allocates `build(1)`; `revise_fast`/`deduce_fast` have test callers only | `cache/nars_engine.rs` |
| Does replay overwrite forward's truth? | **Yes, confirmed.** `CausalEdge64::execute` computes `op.truth(..)` and packs it with `op.inference_type()`; `replay_step` then writes revision's F/C over it. The emitted edge names the weight's opcode (e.g. Deduction) and carries a revision truth | `causal-edge/src/edge.rs` `execute`; `chain_replay.rs` `replay_step` step 3 |

No production behaviour depends on any of this today.

## G2 — recommendation (DECISION, scoped)

- DECISION: future decision-bearing consumers of replay/revision use exact
revision (law A). A table resolution is admissible only for a hot,
dependent replay whose measured decision-flip rate on that workload's own
corpus is below a bar stated before the run.
- SCOPE: new wiring only. `NarsEngine::new`'s `build(1)` default and every
existing public default stay as they are (operator-held).
- BASIS: #1426 — no Bn is decision-stable (B16: 4.7 % verdict flips); A beats
every table cold and beats B8/B16 on random access.
- REVISIT WHEN: a real recorded chain corpus exists (both #1426 corpora are
synthetic) or a consumer needs replay throughput A cannot meet.

G1 (the (255,255) cell and finite vs dogmatic evidence) is untouched and stays
open; it is a separate decision.

## Closed here

1. **Load-bearing fixture re-derived under law A.**
`tests/d_rpf_table_1.rs::a_load_bearing_fixture_under_law_a`: seed 200/200,
support 250/250, refutation 10/230, cut 0. Law A: `LoadBearing {210 → 64}`.
Tables `[B1, B2, B4, B8, B16]` → load-bearing `[false, false, false, false,
true]`. The mirror image of the old fixture (load-bearing under B1 only).
Disable run: law A replaced by B1 → red, B1 reads `TruthOnly {118 → 105}`;
with B1 even the supported factual arm falls below the bar.
2. **`DEFAULT_FREQUENCY_BAR` rationale** no longer cites B1's constant 170 as
evidence; the semantic reason (consistency is strength, not amount of
evidence) stands alone. `the_bar_is_not_inert` keeps pinning 170, labelled
as B1's constant.

## Still open

- forward's discarded truth (compute waste) and the opcode/truth label
mismatch on replayed edges — recorded, unchanged.
- G1.

```
PR (this) | STATUS: done | OUTCOME: P8 re-checked in code (no production
consumer; replay overwrites forward's truth); G2 recorded as law A for new
decision-bearing wiring, defaults untouched; law-A load-bearing fixture
pinned; frequency-bar rationale corrected | OPEN: G1; forward truth discard
and opcode label mismatch
```
Loading
Loading