diff --git a/.claude/board/BREADCRUMBS.md b/.claude/board/BREADCRUMBS.md index 973a20c8d..6e8ef8c57 100644 --- a/.claude/board/BREADCRUMBS.md +++ b/.claude/board/BREADCRUMBS.md @@ -41,6 +41,17 @@ Coordination happens in Linear (`CC: Thread` label `Breadcrumb`, milestone ## Crumbs +### BC-2026-10-23-14 — where a state sits inside its cell decides where it goes next +**Observation:** In EXO-129, about half of the members of a palette cell go to +a different next cell than the cell's modal result (purity ≈ 0.47). A table +learned from reached states does worse on population starts than on the +states it saw. In the XOR-group world (purity 1.0) the exact law composes +even under noisy snapping. +**Receipt:** lance-graph #1731, +`entries/2026-10-23-exo129-learned-lut-preregistration.md`. +**Rhymes-with:** BC-2026-10-23-1, BC-2026-10-23-4 +**Cluster:** NAMED → IDEAS 2026-10-23 "Lumpability as the closure check" + ### BC-2026-10-23-13 — a replay receipt is sealed before landing, and its witness is issued only by the write path **Observation:** D-TGB-4's receipt is built and sealed at stage time; a landing is accepted only with a `CommitWitness` that `VersionStore::commit_cycle` @@ -130,7 +141,7 @@ if sort typing is accepted as closure. Same probe, near-miss counterexample: 6 414–15 310 row-ORs, so closure decides correctness, not cost. **Receipt:** lance-graph #1707, `entries/2026-10-22-drmc-5-assoc-probe.md`. **Rhymes-with:** BC-2026-10-23-4, BC-2026-10-23-5 -**Cluster:** RHYME (trail T-CLOSURE, Linear EXO-132) +**Cluster:** NAMED → IDEAS 2026-10-23 "Lumpability as the closure check" (trail T-CLOSURE, Linear EXO-132) ### BC-2026-10-23-5 — two-valued rewrites break on a carrier that holds NULL **Observation:** `set_algebra::normalize` (De Morgan, lane covers) is sound on @@ -143,7 +154,7 @@ two-valued `normalize` wrong on 474 of 2000 expressions against PostgreSQL 16.14, `normalize_kleene` equal on 2000/2000. Same shape in #1686 / #1687 (`bool_or`/`bool_and` read NULL as FALSE). **Rhymes-with:** BC-2026-10-23-1, BC-2026-10-23-4 -**Cluster:** RHYME (trail T-CLOSURE, Linear EXO-132) +**Cluster:** NAMED → IDEAS 2026-10-23 "Lumpability as the closure check" (trail T-CLOSURE, Linear EXO-132) ### BC-2026-10-23-4 — the same join is right under Distinct and wrong under Bag **Observation:** D-RFT-1's composition gives the right answer under Distinct @@ -152,7 +163,7 @@ a bit product on the support. The carrier's closure under the multiplicity operation decides correctness. **Receipt:** lance-graph #1685. **Rhymes-with:** BC-2026-10-23-1, BC-2026-10-23-2, BC-2026-10-23-3 -**Cluster:** RHYME (trail T-CLOSURE, Linear EXO-132) +**Cluster:** NAMED → IDEAS 2026-10-23 "Lumpability as the closure check" (trail T-CLOSURE) ### BC-2026-10-23-3 — Warshall closure is well defined because the register is closed under ∨ and ∧ **Observation:** DR256's transitive closure over the 256×256 bit register @@ -160,7 +171,7 @@ needs no snapping. Every intermediate stays a 256×256 bit matrix. **Receipt:** `dir-rmap-probe` Qr register (D-QR plans, INTEGRATION_PLANS catch-up 2026-10-23). **Rhymes-with:** BC-2026-10-23-1, BC-2026-10-23-2, BC-2026-10-23-4 -**Cluster:** RHYME (trail T-CLOSURE, Linear EXO-132) +**Cluster:** NAMED → IDEAS 2026-10-23 "Lumpability as the closure check" (trail T-CLOSURE) ### BC-2026-10-23-2 — spectral radius is degenerate on Boolean and byte-map carriers **Observation:** On the Boolean DAG nest ρ = 0 (nilpotent), and on the finite @@ -170,7 +181,7 @@ it acts in. **Receipt:** evaluated in session 01G22yT6htkcdyXsihxxXdrg on 2026-10-23 (review of an external relay); no PR. **Rhymes-with:** BC-2026-10-23-1, BC-2026-10-23-3, BC-2026-10-23-4 -**Cluster:** RHYME (trail T-CLOSURE, Linear EXO-132) +**Cluster:** NAMED → IDEAS 2026-10-23 "Lumpability as the closure check" (trail T-CLOSURE) ### BC-2026-10-23-1 — a compose table collapses because its codebook is not closed under bind **Observation:** `ComposeTable` agreement with exact composition drops to @@ -179,7 +190,7 @@ codebook's support, so every hop snaps. **Receipt:** lance-graph #1726, `entries/2026-10-23-ps2-compose-chain-preregistration.md`. **Rhymes-with:** BC-2026-10-23-2, BC-2026-10-23-3, BC-2026-10-23-4 -**Cluster:** RHYME (trail T-CLOSURE, Linear EXO-132) +**Cluster:** NAMED → IDEAS 2026-10-23 "Lumpability as the closure check" (trail T-CLOSURE) ### Trail T-CLOSURE — is the carrier closed under the operation the plan composes with? Four crumbs from four independent sources: a probe, a review, a register @@ -191,6 +202,16 @@ must refit the carrier. **Kill:** a closed carrier on which the composition still fails. **First probe:** TORQUE row T-2026-10-23-1 (EXO-129). **Verdict:** RHYME, 2026-10-23. +**Naming attempt, 2026-10-23 (after crumb BC-2026-10-23-14):** *lumpability* (Kemeny–Snell). +A partition of the state space composes under an operation exactly when it is +lumpable for that operation, i.e. when every member of a cell goes to the +same cell. Purity is its data-only observable. Named, not adopted. See +IDEAS 2026-10-23. Whether crumbs 2 and 3 (spectral radius, Warshall over +∨/∧) are instances of it, or only rhyme with it, is still open. +Scope limit from session 013z (crumbs BC-2026-10-23-5 and -6 on this trail, +#1730, NULL/K3 carrier and sort-closed composition): closure decides +CORRECTNESS, not cost. Those crumbs' `Cluster:` lines are regraded to NAMED (#1730 is on main). + **Evidence appended 2026-10-23 (session_013z2e1YXkm6o6HNrDn5BPWA):** crumbs BC-2026-10-23-5 (K3 NULL, independent of the palette and DR256 lines) and BC-2026-10-23-6 (sort-closed composition, weaker). Naming attempt, HYPOTHESIS, diff --git a/.claude/board/FRUITS.md b/.claude/board/FRUITS.md index 0cdbcdd4c..752932388 100644 --- a/.claude/board/FRUITS.md +++ b/.claude/board/FRUITS.md @@ -4,18 +4,17 @@ Generated by `.claude/tools/fruits_index.py --write`. Do not hand-edit: add or change a `**Fruit:**` line on the ledger row and regenerate. CI fails when this file is stale. -Open: 24. Closed: 0. +Open: 24. Closed: 1. ## discovery torque -| tier | row | status | ledger | -|---|---|---|---| -| High-signal | T-2026-10-23-1 — does a PaletteLut learned from data compose where ComposeTable does not? | TORQUE | `TORQUE.md` | +_none open_ ## innovation debt | tier | row | status | ledger | |---|---|---|---| +| High-signal | 2026-10-23 — Lumpability as the closure check: a palette composes under an operation only if its cells are lumpable for it, and purity measures that | Open | `IDEAS.md` | | High-signal | 2026-10-23 — One replay that checks proof, receipt and commit witness together | Open. | `IDEAS.md` | | High-signal | 2026-10-23 — OGAR #357's first kill test (TLAC-P01) is now buildable from real guards | Open. | `IDEAS.md` | | High-signal | 2026-10-23 — The five unrun D-DRMC probes: X6, X7, X8, X16, X18 | Open | `IDEAS.md` | @@ -50,3 +49,9 @@ Open: 24. Closed: 0. | Heavy | ISS-RETRACTION-PROVENANCE — per-derived-cell provenance for selective retraction is undecided (2026-10-20) | OPEN. **Basis:** VERIFIED-IN-CODE (no source bitset or read-provenance plane in `crates/`). | `ISSUES.md` | | Heavy | ISS-GATHER-HOP-1616 — the merged `OutgoingHop` reads positions taken from another lane's values (2026-10-19) | BLOCKED (quarantined). GATHER-DECISION recorded 2026-10-20 (`entries/2026-10-20-six-decisions.md` §1): `OutgoingHop` stays quarantined; it closes only by a rewrite as a co-addressed read. Was: BLOCKED (quarantined; waits on GATHER-DECISION). **Basis:** VERIFIED-IN-CODE (`crates/lance-graph-mask-risc/src/graph_hop.rs`: two `MaskOp::Gather` over `frontier[sources[i]]` and `visible[targets[i]]`, then `ScatterOrU32` by `targets[i]`). | `ISSUES.md` | +## closed (kept for traceability) + +| tier | row | status | ledger | +|---|---|---|---| +| High-signal | T-2026-10-23-1 — does a PaletteLut learned from data compose where ComposeTable does not? | KILLED (#1731: the learned table falls below 0.90 at k=2 in both W1 and W2) | `TORQUE.md` | + diff --git a/.claude/board/IDEAS.md b/.claude/board/IDEAS.md index c6069f648..df74c19f8 100644 --- a/.claude/board/IDEAS.md +++ b/.claude/board/IDEAS.md @@ -87,6 +87,27 @@ Agents filter by `@`-mention or domain to see what's theirs. (Prepend new ideas here with today's date. Format:) +## 2026-10-23 — Lumpability as the closure check: a palette composes under an operation only if its cells are lumpable for it, and purity measures that + +`[P2 @palette-engineer @truth-architect domain:codec/palette]` + +**Status:** Open +**Priority:** P2 +**Scope:** @palette-engineer domain:codec +**Fruit:** High-signal + +Named from crumb trail T-CLOSURE (`BREADCRUMBS.md`, Linear EXO-132; crumbs BC-1..4 and BC-2026-10-23-14 here, BC-5/-6 from #1730) after EXO-129 (#1731). A one-byte palette state can be composed by a 256×256 table, learned or derived, only if the cell determines the next cell under the operation. That is lumpability of the partition in the Markov-chain sense. **Purity**, the share of observed transitions that equal their cell's modal result, is a data-only observable for it. Measured so far: purity 1.0 → the exact law composes at every k (XOR-group world); purity ≈ 0.47 → no table reaches 0.03 at k = 2 (P-S2 worlds). The rank evidence is thin (three distinct points). Scope (from #1730's NULL/K3 crumb): closure decides correctness, not cost. The candidate use is a plan-time `closed(carrier, op)` check that decides lookup vs snap vs refit before a composition is compiled into a LUT. + +**Next probe (not run):** on real Moore/DR pair data with labels, measure purity per operation and test whether a bar (for example P ≥ 0.99) separates compositions that hold at k = 2..64 from those that do not. Distribution-dependent, so it needs real data (GOLDSTAUB G-2026-10-23-1). +**Kill:** a cell partition with purity ≥ 0.99 whose k = 2 composition still falls below 0.90, or one with purity < 0.9 that composes at ≥ 0.90. + +Cross-ref: TORQUE T-2026-10-23-1 (KILLED), #1726, #1731, EXO-129, EXO-132. + +**Scope sharpened 2026-10-23 (EXO-50, from three sessions; all HYPOTHESIS):** +- Purity tests *deterministic* lumpability (the next cell is independent of the representative). Purity below 1 refutes a single-valued table, not *strong* lumpability of a stochastic map (equal block mass from every representative); a sample cannot certify either (GPT:gpt-ada-01). A real-data gate has to say which of the two it tests. +- The condition is that the map into the carrier commutes with the operation and with the final measure, not only that the carrier is closed. BC-4 (Distinct closed under join, Bag wrong) and BC-5 ({T,F} closed, NULL has no image) are closed carriers that fail (session_019fbZ92, #1732). +- Crumb 2 is an instance through the support map N → B, lumpable for ∨/∧ and not for counting, so it should fail exactly where BC-4 fails. Crumb 3 is the identity quotient and cannot discriminate (session_01VncKoy). + ## 2026-10-23 — One replay that checks proof, receipt and commit witness together `[P1 @thought-struct-scribe @truth-architect domain:thought-git D-TGB-7 D-RFT-5 D-DRMC]` diff --git a/.claude/board/TORQUE.md b/.claude/board/TORQUE.md index 544068a46..2d9f474fd 100644 --- a/.claude/board/TORQUE.md +++ b/.claude/board/TORQUE.md @@ -50,6 +50,12 @@ landed in (`epiphany_provenance.py`). - 2026-10-23: P-S2 (#1726). `ComposeTable` is UNSTABLE in both worlds (agreement 0.025 / 0.043 at k=2), because the codebook is not closed under bind. +- 2026-10-23: EXO-129 probe (#1731, pre-registered in + `entries/2026-10-23-exo129-learned-lut-preregistration.md`). The learned + table reads 0.017 / 0.009 at k=2 in W1 / W2, worse than ComposeTable. + Purity (≈ 0.47 there) ranks k=2 agreement across six settings + (ρ = 0.935, but only three distinct points), and P^k magnitude fails. The + next step moved to IDEAS 2026-10-23 "Lumpability as the closure check". **Next probe:** pre-register, then build a synthetic world with a known true transition map. Compare a `PaletteLut` filled from observed transitions against `ComposeTable` and the exact chain at k = 1..6, in two unlike worlds. @@ -58,4 +64,4 @@ worlds. **Promote:** it holds ≥ 0.90 at k=2 in both worlds, and a disable run (shuffled transitions) collapses it. **Last moved:** 2026-10-23 -**Status:** TORQUE +**Status:** KILLED (#1731: the learned table falls below 0.90 at k=2 in both W1 and W2)