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
2 changes: 1 addition & 1 deletion .claude/board/STATUS_BOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ Plan: `.claude/plans/2026-10-06-global-sudoku-replayable-orchestration-v1.md`. O
| **D-EPI-CANON-0** | Canonical joint `EpistemicState5` reading of bits 59..63 in the contract | Shipped (#1381) | `contract::epistemic_state5`: Cartesian `Topology2 × Certification3`, `raw5 = t \| c << 2`, 24 meaningful / 8 reserved; per-factor facts; declarations + `project_state5`; `CausalEdge64::{epistemic_raw5, with_epistemic_raw5}`; non-declared-reading writers deprecated |
| **D-EPI-POP-0** | Facts → 32-state population: the missing operator between one edge's coordinate (u5) and a semantic condition over all coordinates (u32) | Shipped (#1381) | `contract::epistemic_state5::{Population, facts_population, EpistemicState5::bit}`: `const fn`, no DSL / query object / planner. Tests pin exact sets (`CAUSES` = {20..23}, `IND_UNKNOWN \| RELATED` = {10,14,18,22}, `IND_KNOWN \| SUPPORTS` = {13,17,21}, `RELATED` = 8..23), operator == state enumeration over all 2048 requirements with no reserved code, conjunction == intersection; 2 disable runs red (any-of semantics; reserved read as fact-less) |
| **D-EPI-LEGACY-DEPROJECT-0** | Deproject the remaining `ReasoningBand` / CE64-`TrustTexture` consumers: each goes to an exact coordinate, a `facts_population(..)`, MUL, or another subsystem (e.g. counterfactual context) — never a 1:1 replacement enum | Shipped (#1381) | `entries/2026-10-07-epi-legacy-deprojection.md`: 6 ReasoningBand caller sites (1 certification question, 1 non-interference witness → both exact coordinates; 2 context/obsolete → compat; 2 refusal witnesses), 0 production CE64 `TrustTexture` consumers, 4 `TrustTexture` types with no bridge; `EdgeRole::band` removed; hinge + V3 lift migrated; 4 code loops → `facts_population` |
| **D-PUZZLE-0** | Sudoku / crossword / chess on the same population algebra under domain laws | In progress | step 1 Sudoku at scale (`cognitive-shader-driver/examples/sudoku_population_fold_probe.rs`, `entries/2026-10-07-puzzle-0-sudoku-population-fold.md`): 1,000,066 claim edges, counts equal 3 ways + solver counters; filter fold 0.35–0.39 ns/edge, 32-bin histogram 0.93–1.07, decode oracle 3.8–4.0 (one machine). Next: crossword (lance-graph), chess (`stockfish-rs`, GPL) |
| **D-PUZZLE-0** | Sudoku / crossword / chess on the same population algebra under domain laws | In progress | step 1 Sudoku shipped (#1382). Step 2 crossword (`crossword_population_fold_probe.rs`, `entries/2026-10-07-puzzle-0-crossword-same-algebra.md`): domain-free half moved to `examples/shared/population_fold.rs` (fence test, Sudoku counts unchanged); 1,000,052 crossword edges, counts equal 3 ways; filter 0.30–0.43 ns/edge in both domains. Step 2b real words (`crossword_real_words_probe.rs`, `entries/2026-10-07-puzzle-0-crossword-real-words.md`): English = DeepNSM v1 4096 + academic_20k (committed), German = DeReKo top 20k only from `DEREKO_PATH` (CC BY-NC, nothing committed); ~1.0M edges each, counts equal 3 ways. Next: chess in `stockfish-rs` (GPL) — how it reaches the shared half is open |
| **D-EPI-MIG-0** | Migrate readers/writers to the canonical reading; #1378 → conformance | Shipped (#1381) | `entries/2026-10-07-epi-mig-0.md`: affordance law (per-factor compile) + P7a (identity packing) + 6 probes + dismech + V3 lift; conformance census 24/0/8 (was 3/5/16); 3 historical-band probes cannot migrate without invention |
| **D-EPI-CONFLICT-0** | (superseded by D-EPI-MIG-0: probe converted to conformance) Pin the disagreement between the D-ACR-7-declared P7a band and the affordance law on CE64 bits 59..63 | Superseded | **Current:** the same probe is the conformance test, census 24 agree / 0 disagree / 8 reserved under the Cartesian V1 (D-EPI-MIG-0). **HISTORICAL — the pre-Cartesian pins below no longer describe the code:** `cognitive-shader-driver/examples/epistemic_reading_conflict_probe.rs`: contract-projected `Causes` reads as affordance code 20 `Related` (topology 0) or refuses (1..3), `COUNTERFACTUAL_PROBE` never eligible; `CAUSES` codes 1 and 17 sit on P7a `Open` / `CausalCandidate`; codes 25, 30 on P7a reserved bands; census over 24 cells = 3 agree, 5 disagree, 16 refuse; the affordance law measures where the contract refuses (undeclared / band `Absent`). Both readings run from shared code (`shared/affordance_law.rs`, and P7a's reading moved unchanged into `shared/certification_reading.rs`, used by `relational_certification_probe` too), never copied. Pins of current state, to become agreement tests when the issue closes (`ISS-EPISTEMIC-READINGS-DISAGREE-ON-BITS-61-63`); 5 tests, 6 disable runs red (3 on the affordance codebook, 3 on P7a's: `Contributes` entailment, a reserved code admitted, `Causes` recoded) |
| **D-MBX-CUTOVER-0** | ShaderDriver on MailboxSoA without BindSpace | In PR | `entries/2026-10-06-shaderdriver-bindspace-cutover.md`: every ShaderDriver → BindSpace edge classified (production state / shared resource / fallback / test oracle / fossil / dead). In `run()` the only mailbox-mode BindSpace read was the ontology; outside it, metrics and the builder read the singleton and `backing()` silently fell back for any mailbox not under id 0. Cutover: optional BindSpace, explicit mailbox selection with no fallback, ontology on the driver, metrics from the selected substrate; no temporal change. `tests/mailbox_cutover.rs` 8 tests, 8 disable runs red |
Expand Down
76 changes: 76 additions & 0 deletions .claude/board/entries/2026-10-07-puzzle-0-crossword-real-words.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# 2026-10-07 — D-PUZZLE-0-XWORD-REAL (D-PUZZLE-0 step 2b): real-word crosswords (DeepNSM vocabularies, optional DeReKo)

**Probe:** `cognitive-shader-driver/examples/crossword_real_words_probe.rs`,
over `examples/shared/population_fold.rs` (unchanged).
**Status:** MEASURED (this machine), TEST-PINNED (11 tests, 6 disable runs red).

## What changed from step 2

The step-2 crossword drew its words from a synthetic 3-letter alphabet. This
probe fills the same 5×5 template from a real vocabulary. The dictionary is
every word of a slot's length in that vocabulary.

- **English:** exactly the two vocabularies DeepNSM reads, both committed
under `crates/deepnsm/word_frequency/`. These are v1's 4096-word table
(`word_rank_lookup.csv`, ranks 1..=4096) and v2's academic list
(`academic_20k.csv`), taken as their union. Alphabetic ASCII only, scored by
the larger COCA frequency. `word_forms.csv` is not a source. Dictionary:
1,250 four-letter, 1,697 five-letter words.
- **German:** the 20,000 most frequent DeReKo-2014 forms, after excluding
proper nouns (`NE`) and non-alphabetic forms and summing frequencies per
lowercase form. Read only when `DEREKO_PATH` names the file at run time and
skipped otherwise. DeReKo is © IDS Mannheim, CC BY-NC 3.0. No German word,
list or derived artifact is committed; this entry carries counts only.
Dictionary: 802 four-letter, 1,466 five-letter words.

The first version of this probe (`cc887e3`) used the top 1000 `word_forms.csv`
surfaces per length. It was replaced on review because that list is not a
vocabulary DeepNSM uses.

An instance is a random fill of the template from the dictionary. Given slots
are then added in random order until the dictionary admits exactly one fill
(backtracking). Law, claims, questions, fold and oracle are the step-2 ones.

## Measured (release, `avx2=true avx512f=false`, median of 7, one run)

| | English (v1 4096 + academic) | German (DeReKo top 20k) |
|---|---|---|
| edges | 1,005,146 | 1,000,074 |
| instances | 1,209 | 1,390 |
| build time | 7.4 s | 6.7 s |
| given | 5,370 | 6,118 |
| forced | 1,278 | 1,400 |
| entailed, not yet forced | 5,442 | 6,382 |
| live candidates | 993,056 | 986,174 |
| filter fold, ns/edge | 0.35 | 0.36 |
| histogram, ns/edge | 2.23 | 2.10 |
| decode oracle, ns/edge | 4.01 | 3.79 |

Every count is equal three ways (filter, histogram, decode) and to the
instances' own counters. Every instance holds exactly 10 asserted claims.

Givens needed for uniqueness (givens: instances), EN:
`1:23 2:246 3:208 4:204 5:161 6:129 7:109 8:88 9:41`. DE:
`1:53 2:250 3:263 4:208 5:200 6:152 7:132 8:80 9:52`. These are minimal
along a random order, not globally minimal.

The filter and the oracle cost the same as for Sudoku and the synthetic
crossword. The histogram is slower again (2.1–2.2 ns, against 1.7 synthetic
and 1.0 Sudoku). That fits the step-2 hypothesis: here 98.6–98.8 % of edges
share one code, against 77 % there. It fits, but nothing here measures the
cause.

## Falsifiers (disable-verified red)

- Uniqueness check returning 1 always → `instances_are_unique_and_givens_are_needed`.
- Index ignoring fixed letters → 4 tests, including `the_index_agrees_with_a_scan`.
- `NE` rows kept → `dereko_rows_are_parsed_by_tag_and_summed`.
- 4096 rank cut removed → `the_english_dictionary_is_deepnsm_v1_plus_academic`
(words ranked past 4096 and absent from the academic list leak in).
- Academic list dropped → the same test (academic-only words missing).
- German 20k truncation removed → `german_keeps_the_top_20k_forms`.

## Open

- German runs only where the DeReKo file is present; CI covers English only.
- Chess in `stockfish-rs` and how it reaches the shared fold: still open.
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# 2026-10-07 — D-PUZZLE-0-XWORD (D-PUZZLE-0 step 2): crosswords on the same algebra as Sudoku

**Probes:** `cognitive-shader-driver/examples/crossword_population_fold_probe.rs`,
`sudoku_population_fold_probe.rs`, both over
`examples/shared/population_fold.rs`.
**Status:** MEASURED (this machine), TEST-PINNED (fence + 6 domain tests, 3
disable runs red).

## What "same algebra" means here, and how it is checked

The domain-free half moved out of the Sudoku probe into
`shared/population_fold.rs`: the propagation reading (given / forced /
entailed-not-forced / candidate), the five questions as `facts_population`
masks, the filter / histogram / decode folds, the group fold, the declaration
gate. Each domain file supplies only its claims, its law and its counters.

- **Fence:** a test fails if `sudoku`, `crossword`, `chess`, `digit`, `slot`,
`cell`, `letter`, `grid`, `board` or `move` appears in the shared half.
Disable run: one planted word → red.
- **Refactor checked by output:** the Sudoku probe's five counts are
identical before and after the move (1,000,066 edges).

## The crossword domain

A 5×5 grid, two black squares, ten slots, every white square in two slots.
Fills are random over a 3-letter alphabet; the dictionary is the solution
words plus 10 distractors per length; two slots are given. An instance is kept
only with exactly one solution (backtracking). The law is the forced single: a
slot whose consistent dictionary words narrow to one is placed.

## Measured (1,000,052 edges, 22,455 instances)

| question | edges |
|---|---|
| every asserted claim | 224,550 |
| given | 44,910 |
| forced, chain known | 13,745 |
| entailed, not yet forced | 165,895 |
| live candidates | 775,502 |

Every count is equal three ways and to the instances' own counters. Every
instance holds exactly 10 asserted claims. The instance build takes 7.3 s
(rejection sampling with backtracking).

Timing, release, `avx2=true avx512f=false`, same 4-core shared Xeon, median of
7, three runs:

| path | crossword ns/edge | Sudoku ns/edge |
|---|---|---|
| one population, filter | 0.30 – 0.43 | 0.35 – 0.39 |
| 32-bin histogram | 1.67 – 1.75 | 0.93 – 1.07 |
| per-edge decode (oracle) | 3.9 – 4.1 | 3.8 – 4.0 |

The filter and the oracle cost the same in both domains: they read five bits
and do not care what the claim is about. The histogram costs more on the
crossword lane, where 77 % of edges share one code. Repeated increments of
one bin are the likely cause; this is a hypothesis, not measured.

## What differs, and it is the law, not the algebra

Forcing is rare in crosswords: 13,745 of 177,640 non-given slots, against
Sudoku's naked singles, which solve the base puzzle completely. A slot rarely
narrows to one word without stronger propagation (arc consistency over
crossings), so most true words stay `IndirectUnknown × Causes`. That is a
statement about the law. The questions and folds did not change.

## Next

Chess in `stockfish-rs` (GPL; shakmaty supplies legality), using the same
shared half. The open point is how it gets there. The module is an
example-local file in lance-graph and is not part of `lance-graph-contract`.
Copying it into stockfish-rs would make a second copy (a fence violation in
spirit); promoting it into the contract is a contract change. The decision is
open.
4 changes: 3 additions & 1 deletion .claude/board/entries/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ index row, (3) no duplicate entry id. Checks 1 and 2 are deliberately
opposite directions; the stranding this convention prevents shows up in
exactly one of them, never both.

247 entries, 2026-08-06 .. 2026-10-07.
249 entries, 2026-08-06 .. 2026-10-07.

| date | entry id | finding | file |
|---|---|---|---|
| 2026-10-07 | `tinker-janus-fold-harvest` | TinkerPop bulk = K (GroupReduce), ONE_BULK = S, GValue pinning = bundle invalidation; JanusGraph slice = OrderedLaneWitness→Range (30–38×); no new V4 op | [2026-10-07-tinker-janus-fold-harvest.md](2026-10-07-tinker-janus-fold-harvest.md) |
| 2026-10-07 | `selector-seq-aware-coverage` | | [2026-10-07-selector-seq-aware-coverage.md](2026-10-07-selector-seq-aware-coverage.md) |
| 2026-10-07 | `D-PUZZLE-0` | | [2026-10-07-puzzle-0-sudoku-population-fold.md](2026-10-07-puzzle-0-sudoku-population-fold.md) |
| 2026-10-07 | `D-PUZZLE-0-XWORD` | | [2026-10-07-puzzle-0-crossword-same-algebra.md](2026-10-07-puzzle-0-crossword-same-algebra.md) |
| 2026-10-07 | `D-PUZZLE-0-XWORD-REAL` | | [2026-10-07-puzzle-0-crossword-real-words.md](2026-10-07-puzzle-0-crossword-real-words.md) |
| 2026-10-07 | `gated-gather-bit-schedule` | Production gather is 3.8× slow from a per-row branch; bit-gated visitation wins or ties at every density; ordinal vectors never win (R1 holds) | [2026-10-07-gated-gather-bit-schedule.md](2026-10-07-gated-gather-bit-schedule.md) |
| 2026-10-07 | `D-EPI-MIG-INVENTORY` | | [2026-10-07-epi-mig-inventory.md](2026-10-07-epi-mig-inventory.md) |
| 2026-10-07 | `D-EPI-CANON-0` | | [2026-10-07-epi-mig-0.md](2026-10-07-epi-mig-0.md) |
Expand Down
10 changes: 10 additions & 0 deletions crates/cognitive-shader-driver/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,16 @@ test = true
name = "sudoku_population_fold_probe"
test = true

# D-PUZZLE-0 step 2: crosswords on the same population algebra (shared fold
# with the Sudoku probe); tests run under `cargo test`.
[[example]]
name = "crossword_population_fold_probe"
test = true

[[example]]
name = "crossword_real_words_probe"
test = true

[dependencies]
lance-graph-contract = { path = "../lance-graph-contract" }
# Read-only ontology registry (Phase 7, v4 plan). default-features = false so the
Expand Down
29 changes: 29 additions & 0 deletions crates/cognitive-shader-driver/examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -413,3 +413,32 @@ checked once per lane. Every count agrees three ways — population filter,
```bash
cargo run --release -p cognitive-shader-driver --example sudoku_population_fold_probe
```

## crossword_population_fold_probe.rs

D-PUZZLE-0, step 2. Crosswords on the same population algebra as the Sudoku
probe: ten-slot 5×5 grids with generated fills, distractor words, two given
slots and a forced-single law, each instance checked to have exactly one
solution. The probe holds only the domain; the reading, questions, folds and
oracle come unchanged from `shared/population_fold.rs`, whose fence test
fails if domain vocabulary enters the shared half.

```bash
cargo run --release -p cognitive-shader-driver --example crossword_population_fold_probe
```

## crossword_real_words_probe.rs

D-PUZZLE-0 step 2b. The step-2 crossword with a real dictionary: every 4- and
5-letter word of DeepNSM's English vocabularies (v1's 4096-word
`word_rank_lookup.csv` plus v2's `academic_20k.csv`, both committed), and of
the 20,000 most frequent DeReKo-2014 German forms, read only when
`DEREKO_PATH` names the file (CC BY-NC 3.0; nothing derived is committed).
Instances are random fills, givens added until the fill is unique. About 1.0M
edges per language; every count agrees three ways. Board:
`.claude/board/entries/2026-10-07-puzzle-0-crossword-real-words.md`.

```
cargo run --release -p cognitive-shader-driver --example crossword_real_words_probe
DEREKO_PATH=/path/DeReKo-2014-II-MainArchive-STT.100000.freq cargo run --release -p cognitive-shader-driver --example crossword_real_words_probe
```
Loading
Loading