From 13b06a64037deedc415911bd10785c7171a5dd07 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 19:26:19 +0000 Subject: [PATCH 1/6] board: fruits from the D-STAUNEN co-research and the reasoning-codegraph PRs New fruits: - IDEAS: P-X6A-CYCLE (Low-hanging), P-X6A-LEDGER parity with DerivationLedger (High-signal), recursion emits no count / one trace is not disjointness evidence (Low-hanging), Kythe ref/call from a call-fact source (Heavy). - TECH_DEBT: the native bag-count overflow refusal has no test (Low-hanging). - ISSUES: is a source root the observer or one report (High-signal, operator decision); rust-analyzer StaticIndex misses references inside assert_eq! arguments (Low-hanging). ISS-RECURSION-DRIVER and ISS-RETRACTION-PROVENANCE gain a candidate-evidence bullet for #1896; neither closes. FRUITS.md regenerated: 32 open, 1 closed. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF --- .claude/board/FRUITS.md | 9 +++++- .claude/board/IDEAS.md | 64 ++++++++++++++++++++++++++++++++++++++ .claude/board/ISSUES.md | 31 ++++++++++++++++++ .claude/board/TECH_DEBT.md | 15 +++++++++ 4 files changed, 118 insertions(+), 1 deletion(-) diff --git a/.claude/board/FRUITS.md b/.claude/board/FRUITS.md index 981e49c4c..d0fd2a742 100644 --- a/.claude/board/FRUITS.md +++ b/.claude/board/FRUITS.md @@ -4,7 +4,7 @@ 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: 25. Closed: 1. +Open: 32. Closed: 1. ## discovery torque @@ -14,12 +14,16 @@ _none open_ | tier | row | status | ledger | |---|---|---|---| +| High-signal | 2026-10-31 — The probe's minimal-environment label against `DerivationLedger::pooled` | Open. | `IDEAS.md` | | High-signal | 2026-10-23 — A certificate replaces the deltas: lane 0 keeps the delta, a receipt or seal, and in time a proof reference — never the operations | Open. | `IDEAS.md` | | 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 — amended 2026-10-23: X8 is partially measured. L1 (#1740) keyed a certified recipe on its semantics and guarded the binding on each run, reusing it on fresh frames with refusals for a wrong ABI, another order and another chain. X8's own falsifier (two certified bindings for one key in `egglog-r2il-probe`, where the first falls back today) was not run. X6, X7, X16 and X18 remain unrun. | `IDEAS.md` | +| Low-hanging | 2026-10-31 — Independent support stays one label when a cycle is unrolled further | Open. | `IDEAS.md` | +| Low-hanging | 2026-10-31 — Recursion never emits a count, and one trace is not disjointness evidence | Open. | `IDEAS.md` | | Low-hanging | 2026-10-23 — The MeTTa four-binding case can run against the D-MPS-9 oracle | Open. | `IDEAS.md` | +| Heavy | 2026-10-31 — `ref/call` edges for the Kythe bridge, from a source of call facts | Open. | `IDEAS.md` | | Heavy | 2026-10-23 — A certified-compiler boundary for DR64: typed relational statements, egglog laws with checked proofs, a lowering check | Open — amended 2026-10-23 (D-ONNX-RELALG-CAP S0): "none exists" is stale for one law. `relcomp::certify_reassociation` issues a `RecipeCertificate` for associativity of Boolean-Distinct composition over a DR64 chain (#1707), and L1 executed such certificates on fresh frames (#1740, `entries/2026-10-23-drmc-l1-x8-fresh-frame-result.md`). The single-operand recipe path still ends in `NoCertifiedCompiler`. Still open: a checker independent of egglog (none exists; egglog checks its own proof internally), a law token that selects rewrites, laws beyond associativity, rebinding beyond the same shape, and the typed statement language. | `IDEAS.md` | ## engineering debt @@ -27,6 +31,7 @@ _none open_ | tier | row | status | ledger | |---|---|---|---| | High-signal | TD-NARS-REVISION-UNGUARDED-CAUSAL-EDGE-ISA-1 — `Opcode::Revision` pools a duplicated source; a measured site of TD-NARS-REVISION-UNGUARDED (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE + MEASURED. | `TECH_DEBT.md` | +| Low-hanging | TD-XLOG-NATIVE-COUNT-OVERFLOW-UNTESTED — the native bag count refuses on overflow, and no test reaches it (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`native.rs:45`, `:148-157`; no hit for `NativeRefusal::Count` outside `native.rs`, read on main `b38d88e`). | `TECH_DEBT.md` | | Low-hanging | TD-BGZ-TENSOR-INTEGRATION-TESTS-UNGATED-1 (2026-10-23) — OPEN | OPEN | `TECH_DEBT.md` | | Low-hanging | TD-CE64-W-SLOT-DOC-SAYS-NO-ANCHOR — `edge.rs` still documents W = 0 as "no corpus anchor" (2026-10-23) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`edge.rs:944` on main `8f610a85`). | `TECH_DEBT.md` | | Low-hanging | TD-STATUS-BOARD-ROWS-MISSING-FOR-OCT-PLANS-1 (2026-10-23) — OPEN | — | `TECH_DEBT.md` | @@ -35,6 +40,7 @@ _none open_ | tier | row | status | ledger | |---|---|---|---| +| High-signal | ISS-SOURCE-ROOT-AGENT-OR-REPORT — is a source root the observer or one report? (2026-10-31) | OPEN (operator decision). **Basis:** VERIFIED-IN-CODE (`crates/xlog-relcomp-probe/tests/provenance.rs` `root()` hashes the observer and the report's facts; `unrelated_sources_never_collapse_to_one_root` pins that one observer with two different reports gives two roots). | `ISSUES.md` | | High-signal | ISS-SIX-DECISIONS-NOT-EXECUTED-ACTION-GATE — `commit` still fails open where the decision says fail closed (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE (`crates/lance-graph-contract/src/action.rs:266` `pub fn commit`, `:328` `pub fn commit_via`; read at `main` `19c1324a`). | `ISSUES.md` | | High-signal | ISS-SIX-DECISIONS-NOT-EXECUTED-FLOAT-REFS — the fold path still pulls OGAR `main` into the default build (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE (`crates/lance-graph/Cargo.toml:58` unconditional `lance-graph-r2il`; `crates/lance-graph-r2il/Cargo.toml:19-20` OGAR `branch = "main"`; no `fold` feature in any `crates/*/Cargo.toml`, 39 manifests read in full by a Haiku scout, `:51-58` re-read). | `ISSUES.md` | | High-signal | ISS-SIX-DECISIONS-NOT-EXECUTED-WIRE50-ISA-LEGACY — CE64 50..52 presence and the 46..49 legacy reading have no code (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE (`Option` only in `crates/lance-graph-planner/tests/maturation_ladder.rs`, EXPERIMENTAL; no `ISA_LEGACY` / `legacy_opcode` / `LegacyRead` in `crates/`, scout over the named patterns; `causal-edge/src/edge.rs` has `fn activation(self) -> i8`). | `ISSUES.md` | @@ -42,6 +48,7 @@ _none open_ | High-signal | ISS-D-CGW-4-PROMOTION-GATE — the counterfactual verdict is computed but promotes nothing (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE (`crates/lance-graph-planner/src/pearl.rs:259-263` `counterfactual_verdict` calls `Reaction::verdict`; callers found only in `pearl.rs` tests `:747-815`; STATUS_BOARD row D-CGW-4 Queued). | `ISSUES.md` | | High-signal | ISS-DURABLEREF-THOUGHTCOMMITID — the two identity types four plans depend on do not exist (2026-10-20) | OPEN. **Basis:** VERIFIED-IN-CODE (`DurableRef` and `ThoughtCommitId` appear in `crates/` only in doc comments, `mork-pathmap-probe/src/rmap.rs:70` and `:690`). | `ISSUES.md` | | High-signal | ISS-BF16-POLYFILL-PER-ELEMENT-ALLOC — ndarray's BF16 16×16 polyfill allocates per output element (2026-10-20) | OPEN. **Basis:** VERIFIED-IN-CODE (`ndarray/src/simd_ops.rs`, `bf16_tile_gemm_16x16`) and MEASURED (D-RMAP-2 §5a: a 256 × 256 `A·A` takes about 19 ms, about 0.9 GMAC/s, on an AVX-512 host without AMX or `avx512_bf16`). | `ISSUES.md` | +| Low-hanging | ISS-RA-STATICINDEX-MISSES-MACRO-ARGUMENT-REFS — references inside `assert_eq!` are not recorded (2026-10-31) | OPEN. **Basis:** MEASURED (`crates/sag-ra-probe/KYTHE.md` § Result, #1894: 3 of 11 pins fail; moving the calls out of the macro records them). | `ISSUES.md` | | Low-hanging | ISS-FISHERZ-ENCODE-SATURATES-SILENTLY — out-of-family cosines encode to the edge code with no flag (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE (`crates/bgz-tensor/src/fisher_z.rs:67`, `i8_val.clamp(-128.0, 127.0) as i8`, read at `main` `8f610a85`) + MEASURED. | `ISSUES.md` | | Low-hanging | ISS-CAUSAL-EDGE-CARRIES-SEVEN-PRE-EXISTING-CLIPPY-FINDINGS (2026-08-22) — OPEN | — | `ISSUES.md` | | Heavy | ISS-ORDER-AND-CODEBOOK-WITNESS-HAS-NO-CONTRACT-TYPE — seven open items wait on one witness nobody owns (2026-10-23) — OPEN | OPEN (reframed, see correction). **Basis:** VERIFIED-IN-CODE | `ISSUES.md` | diff --git a/.claude/board/IDEAS.md b/.claude/board/IDEAS.md index f913edd24..0aaa0884e 100644 --- a/.claude/board/IDEAS.md +++ b/.claude/board/IDEAS.md @@ -85,6 +85,70 @@ Agents filter by `@`-mention or domain to see what's theirs. ## Open Ideas +## 2026-10-31 — Independent support stays one label when a cycle is unrolled further + +`[P1 @falsifier-designer domain:provenance D-STAUNEN X6a]` + +`xlog-relcomp-probe` `tests/provenance.rs` computes independent support as the +minimal-environment label over source roots (ATMS / PosBool; #1896, after the +co-research found the first version counted lineage). Its `derivations()` +lists simple paths only, so recursion was never exercised. **Next probe +(P-X6A-CYCLE):** edges 1→2, 2→3, 3→2, 3→4; A reports 1→2, 2→3, 3→4 and B +reports 3→2. Enumerate derivations of `path(1, 4)` unrolled k = 0..3 times +round the cycle; the label must be `{{A}}` at every k. Twin: a bypass 1→5→4 +reported by C gives `{{A}, {C}}`, disjoint, at every k. **Kill:** the label at +some k ≥ 1 differs from k = 0. Disable: drop the minimality filter. +(`entries/2026-10-31-coresearch-d-staunen-arc.md`, row 1b.) + +**Fruit:** Low-hanging +**Status:** Open. + +## 2026-10-31 — The probe's minimal-environment label against `DerivationLedger::pooled` + +`[P1 @bridge-architect domain:provenance D-STAUNEN X6a D-EPI-COT]` + +Root-disjoint support already exists in production as `DerivationLedger` +(`lance-graph-planner/src/nars/support.rs:308-323`, D-EPI-COT C1/C2). **Next +probe (P-X6A-LEDGER):** `xlog-relcomp-probe` exports a plain-text fixture +(source reports, their edges, the closure's derivations); a planner dev test +replays it into the ledger. `pooled` must agree with the label on {A}/{A,B} +and on disjoint {A},{B}. On {A,B},{B,C},{A,C} they differ by design: the label +has 3 environments, `pooled` selects 1. The test pins that. The probe crate +does not depend on the planner (arrow 60 vs 58; path vs git ndarray). +**Kill:** `pooled` and the label disagree on a case they are meant to share. +This decides whether X6a is already met by existing code. + +**Fruit:** High-signal +**Status:** Open. + +## 2026-10-31 — Recursion never emits a count, and one trace is not disjointness evidence + +`[P2 @falsifier-designer domain:xlog D-STAUNEN X2 X6a]` + +Two guards from the D-STAUNEN co-research, both offline. **P-REC-NO-COUNT:** +no function returns a derivation multiplicity for a recursive fact (all-tree +N[X] is infinite under recursion, arXiv 2202.10766 §3.2); twin: the acyclic +count is admitted. **P-TRACE-NOT-DISJOINT:** on the diamond, the roots of +`recursive::trace` number 1 while the `support` label has 2; twin: a chain, +where they agree. **Kill:** an API yields a count for a recursive fact, or a +single trace is accepted as evidence that roots are disjoint. + +**Fruit:** Low-hanging +**Status:** Open. + +## 2026-10-31 — `ref/call` edges for the Kythe bridge, from a source of call facts + +`[P3 @systems-scout domain:codegraph D-REASONING-CODEGRAPH-0]` + +`sag-ra-probe` (#1894) emits `ref` only. A reference is not a call, and calls +are not inferred from references. **Next probe (P-KYTHE-CALL):** one function +that both calls `f()` and takes `&f` must give exactly 1 `ref/call` and 1 +`ref`; a pure address-of gives 0 `ref/call`. It starts red. Needs a call-fact +source; Charon is not installed here. + +**Fruit:** Heavy +**Status:** Open. + ## 2026-10-25 — Virtual associative folds + comma syndromes + emergency Thought-Git Pickaxe (brainstorm cluster) `[P3 @truth-architect @thought-struct-scribe domain:thought-git domain:memory]` diff --git a/.claude/board/ISSUES.md b/.claude/board/ISSUES.md index 9cf4a5244..955a7118b 100644 --- a/.claude/board/ISSUES.md +++ b/.claude/board/ISSUES.md @@ -1,3 +1,32 @@ +## ISS-SOURCE-ROOT-AGENT-OR-REPORT — is a source root the observer or one report? (2026-10-31) + +**Status:** OPEN (operator decision). **Basis:** VERIFIED-IN-CODE (`crates/xlog-relcomp-probe/tests/provenance.rs` `root()` hashes the observer and the report's facts; `unrelated_sources_never_collapse_to_one_root` pins that one observer with two different reports gives two roots). +**Fruit:** High-signal + +- Today one observer filing two different reports counts as two independent + sources. In PROV and evidence-combination terms independence attaches to + the agent, not to each report (co-research map row 7, + `entries/2026-10-31-coresearch-d-staunen-arc.md`). +- Every root-disjoint count (X6a, M2, D-HL-3) depends on the answer. +- **What closes it:** the ruling, then P-AGENT-VS-REPORT pinning both readings + (`roots by report == 2`, `roots by agent == 1`, two observers give 2 under + both). + +## ISS-RA-STATICINDEX-MISSES-MACRO-ARGUMENT-REFS — references inside `assert_eq!` are not recorded (2026-10-31) + +**Status:** OPEN. **Basis:** MEASURED (`crates/sag-ra-probe/KYTHE.md` § Result, #1894: 3 of 11 pins fail; moving the calls out of the macro records them). +**Fruit:** Low-hanging + +- `ra_ap_ide` 0.0.358 `StaticIndex` records no reference to `count_below`, + `popcount_mask` or `mask_below` inside `assert_eq!(...)` in + `fixtures/sag_fixture/tests/law.rs` lines 21 and 31. Calls outside a macro + are recorded. `add_file` calls `descend_into_macros_exact` on each token, so + the cause is not yet known. +- Until it is found, any Kythe reading from these facts under-counts + references inside macro arguments. +- **What closes it:** the cause, from rust-analyzer's source, then either a + fix upstream or a documented limit on the exporter. + ## ISS-FISHERZ-ENCODE-SATURATES-SILENTLY — out-of-family cosines encode to the edge code with no flag (2026-10-23) **Status:** OPEN. **Basis:** VERIFIED-IN-CODE (`crates/bgz-tensor/src/fisher_z.rs:67`, `i8_val.clamp(-128.0, 127.0) as i8`, read at `main` `8f610a85`) + MEASURED. @@ -159,6 +188,7 @@ operator decision (raised on EXO-50 by session 01G22 /036). - the JC-SBI note (`jc-sbi-counterfactual-integration-v1.md:191`). - `chain::ask` (#1624) is one candidate shape, in the lab: fold, read escapes, admit in preparation, fold again. Translation happens only in preparation. It is Boolean, one variable, and has no cycle refusal, so it is evidence for a design, not the driver. - **What closes it:** a reviewed driver design under D-HOLO H14c/H14d: least fixpoint equal to Datafrog on set workloads, terminated cycles, refusal past the bound. Gated by `ISS-ADMISSION-PREP-BINDING`. +- **Candidate evidence, not the driver (2026-10-31, #1896):** `xlog-relcomp-probe` `src/recursive.rs` admits XLOG's compiled linear transitive closure (one recursive SCC; mutual recursion and non-linear steps refused) and evaluates it semi-naively on the DR64 register with `relcomp::compose`, against a BFS oracle and a 200-case differential. It is one shape, set semantics, in a lab crate, with no bound-and-refuse. Whether `compose` counts as co-addressed under ADMISSION B is not decided here. ## ISS-RETRACTION-PROVENANCE — per-derived-cell provenance for selective retraction is undecided (2026-10-20) @@ -172,6 +202,7 @@ operator decision (raised on EXO-50 by session 01G22 /036). - D-RST-5 (DRed retraction). - Until it is decided a changed premise can only be refused, never selectively retracted. - **What closes it:** the D-TGA-3 decision, then X9 run against it. +- **Candidate evidence, not the decision (2026-10-31, #1896):** `recursive::support` and `affected` compute, from the closure and on demand, the base facts an answer can rest on and the answers a base fact feeds. Nothing is stored per derived cell. A changed fact is handled by refusing the old frame and recomputing, not by retraction. The D-STAUNEN co-research (row 5) notes that counting is exact only for non-recursive rules; DRed^c needs split counters (arXiv 1711.03987). ## ISS-DURABLEREF-THOUGHTCOMMITID — the two identity types four plans depend on do not exist (2026-10-20) diff --git a/.claude/board/TECH_DEBT.md b/.claude/board/TECH_DEBT.md index 07c3f9d5b..382c161a8 100644 --- a/.claude/board/TECH_DEBT.md +++ b/.claude/board/TECH_DEBT.md @@ -1,3 +1,18 @@ +## TD-XLOG-NATIVE-COUNT-OVERFLOW-UNTESTED — the native bag count refuses on overflow, and no test reaches it (2026-10-31) — OPEN + +`crates/xlog-relcomp-probe/src/native.rs:155` multiplies per-Y counts with +`checked_binary_i64(I64Op::Mul, ..)` and maps an overflow to +`NativeRefusal::Count` (`:45`). No test in `src/` or `tests/` produces +`NativeRefusal::Count`. On a real fixture it is unreachable: overflowing `i64` +needs per-side counts near 3·10⁹ rows. + +**Fruit:** Low-hanging +**Status:** OPEN. **Basis:** VERIFIED-IN-CODE (`native.rs:45`, `:148-157`; no hit for `NativeRefusal::Count` outside `native.rs`, read on main `b38d88e`). + +- **What closes it:** split the multiply so a test can hand it counts, then + pin the refusal with a can-fire and a stay-silent case, or document the + path as unreachable and say why. + ## TD-NARS-REVISION-UNGUARDED-CAUSAL-EDGE-ISA-1 — `Opcode::Revision` pools a duplicated source; a measured site of TD-NARS-REVISION-UNGUARDED (2026-10-23) **Status:** OPEN. **Basis:** VERIFIED-IN-CODE + MEASURED. From 546e21b01e4674275d41f31e98ac6000270c6ad0 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 20:30:12 +0000 Subject: [PATCH 2/6] plan D-DT64-7: behaviour addressing and registration over one classid Frozen = compile time (left side 0x0000), Learned = registered in the BindStore (left side 0xF### or Domain::AppId), Explore = not registered; the right side is ClassView / WideFieldMask selection. ONNX, SQL and Gremlin are Frozen; the R2IL codegraph harvest is Learned / Explore; XLOG is Learned in the lab and Frozen once minted as lance-graph-xlog. Withdrawal never deletes and only the registrant withdraws (constraints C1-C8). Findings, each cited to main b38d88e: the Frozen polyfill is runtime-declared and named through ogar-r2il's vocabulary; only routes can be withdrawn; registration moves no version; no activation is consulted; classid_canon_compat misreads a left-empty classid; the global -> local selection is not yet a versioned table. Board: STATUS_BOARD D-DT64-7 rows, INTEGRATION_PLANS entry, two TECH_DEBT rows. Corrections: the traceroute is the stage-identity chain of DR256 capstone section C.5, not recursive::trace's node path; the D-STAUNEN probes are reframed as mask computations and the trace probe is dropped. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF --- .claude/board/FRUITS.md | 10 +- .claude/board/IDEAS.md | 60 +++---- .claude/board/INTEGRATION_PLANS.md | 5 + .claude/board/STATUS_BOARD.md | 13 ++ .claude/board/TECH_DEBT.md | 18 +++ .../2026-10-31-coresearch-d-staunen-arc.md | 5 + ...codegraph-0-xlog-egglog-shared-relation.md | 4 + ...-7-behaviour-addressing-registration-v1.md | 151 ++++++++++++++++++ 8 files changed, 233 insertions(+), 33 deletions(-) create mode 100644 .claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md diff --git a/.claude/board/FRUITS.md b/.claude/board/FRUITS.md index d0fd2a742..0023eaf9c 100644 --- a/.claude/board/FRUITS.md +++ b/.claude/board/FRUITS.md @@ -4,7 +4,7 @@ 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: 32. Closed: 1. +Open: 34. Closed: 1. ## discovery torque @@ -14,14 +14,14 @@ _none open_ | tier | row | status | ledger | |---|---|---|---| -| High-signal | 2026-10-31 — The probe's minimal-environment label against `DerivationLedger::pooled` | Open. | `IDEAS.md` | +| High-signal | 2026-10-31 — The probe's support masks against `DerivationLedger::pooled` | Open. | `IDEAS.md` | | High-signal | 2026-10-23 — A certificate replaces the deltas: lane 0 keeps the delta, a receipt or seal, and in time a proof reference — never the operations | Open. | `IDEAS.md` | | 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 — amended 2026-10-23: X8 is partially measured. L1 (#1740) keyed a certified recipe on its semantics and guarded the binding on each run, reusing it on fresh frames with refusals for a wrong ABI, another order and another chain. X8's own falsifier (two certified bindings for one key in `egglog-r2il-probe`, where the first falls back today) was not run. X6, X7, X16 and X18 remain unrun. | `IDEAS.md` | -| Low-hanging | 2026-10-31 — Independent support stays one label when a cycle is unrolled further | Open. | `IDEAS.md` | -| Low-hanging | 2026-10-31 — Recursion never emits a count, and one trace is not disjointness evidence | Open. | `IDEAS.md` | +| Low-hanging | 2026-10-31 — Independent support is a mask question: does one source root's edges still cover the answer? | Open. | `IDEAS.md` | +| Low-hanging | 2026-10-31 — Recursion never emits a count | Open. | `IDEAS.md` | | Low-hanging | 2026-10-23 — The MeTTa four-binding case can run against the D-MPS-9 oracle | Open. | `IDEAS.md` | | Heavy | 2026-10-31 — `ref/call` edges for the Kythe bridge, from a source of call facts | Open. | `IDEAS.md` | | Heavy | 2026-10-23 — A certified-compiler boundary for DR64: typed relational statements, egglog laws with checked proofs, a lowering check | Open — amended 2026-10-23 (D-ONNX-RELALG-CAP S0): "none exists" is stale for one law. `relcomp::certify_reassociation` issues a `RecipeCertificate` for associativity of Boolean-Distinct composition over a DR64 chain (#1707), and L1 executed such certificates on fresh frames (#1740, `entries/2026-10-23-drmc-l1-x8-fresh-frame-result.md`). The single-operand recipe path still ends in `NoCertifiedCompiler`. Still open: a checker independent of egglog (none exists; egglog checks its own proof internally), a law token that selects rewrites, laws beyond associativity, rebinding beyond the same shape, and the typed statement language. | `IDEAS.md` | @@ -30,7 +30,9 @@ _none open_ | tier | row | status | ledger | |---|---|---|---| +| High-signal | TD-FROZEN-POLYFILL-NAMED-BY-R2IL — the compile-time polyfill is declared at runtime and named through `ogar-r2il` (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (lines above, `main` `b38d88e`). | `TECH_DEBT.md` | | High-signal | TD-NARS-REVISION-UNGUARDED-CAUSAL-EDGE-ISA-1 — `Opcode::Revision` pools a duplicated source; a measured site of TD-NARS-REVISION-UNGUARDED (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE + MEASURED. | `TECH_DEBT.md` | +| Low-hanging | TD-CLASSID-CANON-COMPAT-MISREADS-LEFT-EMPTY — `classid_canon_compat(0x0000_F123)` returns `0xF123` (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`ogar_codebook.rs:530-540`, read on `main` `b38d88e`). | `TECH_DEBT.md` | | Low-hanging | TD-XLOG-NATIVE-COUNT-OVERFLOW-UNTESTED — the native bag count refuses on overflow, and no test reaches it (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`native.rs:45`, `:148-157`; no hit for `NativeRefusal::Count` outside `native.rs`, read on main `b38d88e`). | `TECH_DEBT.md` | | Low-hanging | TD-BGZ-TENSOR-INTEGRATION-TESTS-UNGATED-1 (2026-10-23) — OPEN | OPEN | `TECH_DEBT.md` | | Low-hanging | TD-CE64-W-SLOT-DOC-SAYS-NO-ANCHOR — `edge.rs` still documents W = 0 as "no corpus anchor" (2026-10-23) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`edge.rs:944` on main `8f610a85`). | `TECH_DEBT.md` | diff --git a/.claude/board/IDEAS.md b/.claude/board/IDEAS.md index 0aaa0884e..6531ab999 100644 --- a/.claude/board/IDEAS.md +++ b/.claude/board/IDEAS.md @@ -85,53 +85,55 @@ Agents filter by `@`-mention or domain to see what's theirs. ## Open Ideas -## 2026-10-31 — Independent support stays one label when a cycle is unrolled further +## 2026-10-31 — Independent support is a mask question: does one source root's edges still cover the answer? -`[P1 @falsifier-designer domain:provenance D-STAUNEN X6a]` +`[P1 @falsifier-designer domain:provenance D-STAUNEN X6a D-DT64-7]` `xlog-relcomp-probe` `tests/provenance.rs` computes independent support as the -minimal-environment label over source roots (ATMS / PosBool; #1896, after the -co-research found the first version counted lineage). Its `derivations()` -lists simple paths only, so recursion was never exercised. **Next probe -(P-X6A-CYCLE):** edges 1→2, 2→3, 3→2, 3→4; A reports 1→2, 2→3, 3→4 and B -reports 3→2. Enumerate derivations of `path(1, 4)` unrolled k = 0..3 times -round the cycle; the label must be `{{A}}` at every k. Twin: a bypass 1→5→4 -reported by C gives `{{A}, {C}}`, disjoint, at every k. **Kill:** the label at -some k ≥ 1 differs from k = 0. Disable: drop the minimality filter. -(`entries/2026-10-31-coresearch-d-staunen-arc.md`, row 1b.) +minimal-environment label over source roots (ATMS / PosBool; #1896). Its oracle +enumerates simple paths, which is traversal; graph work is mask selection +(D-DT64-7 D9'). **Next probe (P-X6A-MASK):** for each source root, AND the +edge register with that root's edge mask, run the closure on the result, and +test the answer bit. A root (or a set of roots) is a support exactly when its +masked closure still holds the answer, so the minimal supports come from +masks, never from walks. Fixture: the diamond with A and B as in the current +test, plus a cycle 2→3→2 reported by B; the cycle must not change the result. +Twin: a bypass 1→5→4 reported by C gives two disjoint supports. **Kill:** the +mask computation and the path oracle disagree on any of these, or the cycle +changes the minimal supports. Disable: drop the minimality filter. +(`entries/2026-10-31-coresearch-d-staunen-arc.md` rows 1/1b.) **Fruit:** Low-hanging **Status:** Open. -## 2026-10-31 — The probe's minimal-environment label against `DerivationLedger::pooled` +## 2026-10-31 — The probe's support masks against `DerivationLedger::pooled` `[P1 @bridge-architect domain:provenance D-STAUNEN X6a D-EPI-COT]` Root-disjoint support already exists in production as `DerivationLedger` (`lance-graph-planner/src/nars/support.rs:308-323`, D-EPI-COT C1/C2). **Next -probe (P-X6A-LEDGER):** `xlog-relcomp-probe` exports a plain-text fixture -(source reports, their edges, the closure's derivations); a planner dev test -replays it into the ledger. `pooled` must agree with the label on {A}/{A,B} -and on disjoint {A},{B}. On {A,B},{B,C},{A,C} they differ by design: the label -has 3 environments, `pooled` selects 1. The test pins that. The probe crate -does not depend on the planner (arrow 60 vs 58; path vs git ndarray). -**Kill:** `pooled` and the label disagree on a case they are meant to share. -This decides whether X6a is already met by existing code. +probe (P-X6A-LEDGER):** `xlog-relcomp-probe` exports a plain-text fixture (the +source roots and the edge mask each reported); a planner dev test replays it +into the ledger. `pooled` must agree with the probe's mask-computed supports +on {A}/{A,B} and on disjoint {A},{B}. On {A,B},{B,C},{A,C} they differ by +design: three minimal supports, `pooled` selects 1. The test pins that. The +probe crate does not depend on the planner (arrow 60 vs 58; path vs git +ndarray). **Kill:** `pooled` and the probe disagree on a case they are meant to +share. This decides whether X6a is already met by existing code. **Fruit:** High-signal **Status:** Open. -## 2026-10-31 — Recursion never emits a count, and one trace is not disjointness evidence +## 2026-10-31 — Recursion never emits a count -`[P2 @falsifier-designer domain:xlog D-STAUNEN X2 X6a]` +`[P2 @falsifier-designer domain:xlog D-STAUNEN X2]` -Two guards from the D-STAUNEN co-research, both offline. **P-REC-NO-COUNT:** -no function returns a derivation multiplicity for a recursive fact (all-tree -N[X] is infinite under recursion, arXiv 2202.10766 §3.2); twin: the acyclic -count is admitted. **P-TRACE-NOT-DISJOINT:** on the diamond, the roots of -`recursive::trace` number 1 while the `support` label has 2; twin: a chain, -where they agree. **Kill:** an API yields a count for a recursive fact, or a -single trace is accepted as evidence that roots are disjoint. +**P-REC-NO-COUNT:** no function returns a derivation multiplicity for a +recursive fact (all-tree N[X] is infinite under recursion, arXiv 2202.10766 +§3.2); twin: the acyclic count is admitted. **Kill:** an API yields a count for +a recursive fact. (A trace-versus-label probe proposed alongside it was dropped: +`recursive::trace` rebuilds a node path and is not the traceroute, DR256 +capstone §C.5; D-DT64-7 F8.) **Fruit:** Low-hanging **Status:** Open. diff --git a/.claude/board/INTEGRATION_PLANS.md b/.claude/board/INTEGRATION_PLANS.md index 10c167fe4..f038681b5 100644 --- a/.claude/board/INTEGRATION_PLANS.md +++ b/.claude/board/INTEGRATION_PLANS.md @@ -1,3 +1,8 @@ +## 2026-10-31 — D-DT64-7: behaviour addressing and registration → `.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md` + +**Status:** PROPOSED, docs only. **Board:** [STATUS_BOARD](STATUS_BOARD.md) D-DT64-7. Behaviour for fixed relalg is Frozen (compile time, left side `0x0000`), Learned (registered in the `BindStore`, left side `0xF###` or `Domain::AppId`, withdrawn only by its registrant, never deleted) or Explore (not registered). ONNX, SQL and Gremlin are Frozen; the R2IL codegraph harvest is Learned / Explore; XLOG is Learned in the lab and Frozen once minted as `lance-graph-xlog`. Findings: the Frozen polyfill is runtime-declared and named through `ogar-r2il`'s vocabulary; only routes can be withdrawn; registration moves no version; no activation is consulted; `classid_canon_compat` misreads a left-empty classid; the global → local selection is not yet a versioned table. +**Confidence:** plan; every finding cited to code read on `main` `b38d88e`; no new measurement. + ## 2026-10-31 — D-DYNBAG: DR{dynamic bag}, holographic bags as polyfill, the PostgreSQL endgame → `.claude/plans/d-dynbag-holographic-bags-v1.md` **Status:** PROPOSED, plan only. **Board:** [STATUS_BOARD](STATUS_BOARD.md) D-DYNBAG. DuckDB's selection vector made explicit: a Quack selection becomes a mask plus one pointer table (`dt64::dr::LocalMap`) and runs on a local tile whose width follows the survivor count (DR64 / DR256 / multi-tile). Relations on a tile are read in a semiring per operation (B for presence, ℕ for bag multiplicity; K-relations), one address with several readings. The bag-op polyfill names each relational operation once with one realization per semiring. ℕ-compose via `ndarray::simd::matmul_i8_to_i32` is the candidate home for the many-to-many join (falsifier D-DYNBAG-1). Endgame: a PostgreSQL-compatible surface (`sql-quack-probe`, modelled on `lance-graph-cypher-quack`) scored against DuckDB and PostgreSQL in ns, losses reported. The membrane stays a reference note on EXO-50. diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 8a46fdce7..4b224929b 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -1,3 +1,16 @@ +## D-DT64-7 — behaviour addressing and registration: Frozen, Learned, Explore over one classid (2026-10-31) + +Plan: `.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md`. Docs only. Frozen = compile time (left side `0x0000`); Learned = registered in the `BindStore` (left side `0xF###` or `Domain::AppId`); Explore = not registered. Right side = ClassView / `WideFieldMask` selection. + +| D-id | Deliverable | Status | Gate | +|---|---|---|---| +| D-DT64-7-0 | plan and board rows | In PR | docs review | +| D-DT64-7-1 | `classid_canon_compat(0x0000_F123) == 0x0000` falsifier (F5) | Queued | O3 | +| D-DT64-7-2 | `BindStore` withdrawal with constraints C1–C8, behind an activation | Queued | O1 | +| D-DT64-7-3 | compile-time Frozen polyfill table under `0x0000`, parity test against `R2ILVocabulary`; `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il` | Queued | O1 | +| D-DT64-7-4 | behaviour-seat arm `0xF###` in `OgarAuthority` | Queued | O1, O2 (OGAR owner) | +| D-DT64-7-5 | the versioned global → local selection table (D-LITHO Q5) | Queued | O5 (DR/DT owner) | + ## D-MIST-NATIVE — Mistaber's Kripke holdings over the DR64 relation register (2026-10-30) **Status:** LAB PROBE; test-only, standalone crate, no production API. [Plan](../plans/d-mistaber-native-v1.md); [board entry](entries/2026-10-30-d-mist-native-0-kripke-fixpoint-over-dr64.md). diff --git a/.claude/board/TECH_DEBT.md b/.claude/board/TECH_DEBT.md index 382c161a8..c0a3d9bfc 100644 --- a/.claude/board/TECH_DEBT.md +++ b/.claude/board/TECH_DEBT.md @@ -1,3 +1,21 @@ +## TD-FROZEN-POLYFILL-NAMED-BY-R2IL — the compile-time polyfill is declared at runtime and named through `ogar-r2il` (2026-10-31) — OPEN + +`BindStore::declare_algebra` (`crates/lance-graph-dt64/src/lib.rs:628`) declares the polyfill lens at runtime, and `lance-graph-r2il::binding` resolves every word through `ogar_r2il::R2ILVocabulary` and refuses any lens whose concept is not `ogar_r2il::CONCEPT_R2IL_FOLD` (`binding.rs:278`, `:496-525`; `0xC401` is provisional, not minted). By D-DT64-7 D2/D3 the polyfill is Frozen (compile time) and R2IL is harvest-side. + +**Fruit:** High-signal +**Status:** OPEN. **Basis:** VERIFIED-IN-CODE (lines above, `main` `b38d88e`). + +- **What closes it:** D-DT64-7-3: a compile-time lance-graph table under left side `0x0000` with a parity test against `R2ILVocabulary`, and `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il`. + +## TD-CLASSID-CANON-COMPAT-MISREADS-LEFT-EMPTY — `classid_canon_compat(0x0000_F123)` returns `0xF123` (2026-10-31) — OPEN + +`crates/lance-graph-contract/src/ogar_codebook.rs:530-540` takes the high half only when it is `>= 0x0100`; with a non-zero low half it re-reads the id in the legacy order. A left-empty (hardcoded) classid therefore reports its right side as its concept. The strict `classid_concept` is correct; RBAC grant matching and other mixed-form readers use the compat reader. + +**Fruit:** Low-hanging +**Status:** OPEN. **Basis:** VERIFIED-IN-CODE (`ogar_codebook.rs:530-540`, read on `main` `b38d88e`). + +- **What closes it:** the falsifier D-DT64-7-1, then the decision O3 (exclude left-empty ids, or retire the heuristic). + ## TD-XLOG-NATIVE-COUNT-OVERFLOW-UNTESTED — the native bag count refuses on overflow, and no test reaches it (2026-10-31) — OPEN `crates/xlog-relcomp-probe/src/native.rs:155` multiplies per-Y counts with diff --git a/.claude/board/entries/2026-10-31-coresearch-d-staunen-arc.md b/.claude/board/entries/2026-10-31-coresearch-d-staunen-arc.md index f0f8e6f11..1aefd163f 100644 --- a/.claude/board/entries/2026-10-31-coresearch-d-staunen-arc.md +++ b/.claude/board/entries/2026-10-31-coresearch-d-staunen-arc.md @@ -63,3 +63,8 @@ PR #1896 | STATUS: open | OUTCOME: co-research map for the D-STAUNEN arc; lineag MIRROR - BLIND SPOT: #1896's provenance test was reviewed for multiplicity versus roots, but never against a case where a second observer depends on the first. + +## Correction (2026-10-31) + +- Rows 1b and 3: the probes are reframed as mask computations (each source root's edge mask, closure, answer bit), with no path enumeration; the trace-versus-label probe is dropped. `recursive::trace` is not the traceroute (DR256 capstone §C.5). IDEAS rows of 2026-10-31. +- Not a crosswalk row: the stored, versioned selection a right-side `0xF###` would address is the lab `Pop { witness, .. }` precedent (`dir-rmap-probe/src/pop.rs`, #1666), owned through the planned binding store (§C.3). See D-DT64-7. diff --git a/.claude/board/entries/2026-10-31-d-reasoning-codegraph-0-xlog-egglog-shared-relation.md b/.claude/board/entries/2026-10-31-d-reasoning-codegraph-0-xlog-egglog-shared-relation.md index b935beaf6..cf8e6ab59 100644 --- a/.claude/board/entries/2026-10-31-d-reasoning-codegraph-0-xlog-egglog-shared-relation.md +++ b/.claude/board/entries/2026-10-31-d-reasoning-codegraph-0-xlog-egglog-shared-relation.md @@ -17,3 +17,7 @@ OPEN: - SQL and Java legs; - egglog proofs of a directed relation; - XLOG recursion shapes beyond one linear closure. + +## Correction (2026-10-31): the traceroute + +The traceroute is a chain of stage identities (derivation, proof, binding, execution, replay), each referenced by an immutable identity, storing no intermediate population (`dr256-where-capstone-v1.md` §C.5). `recursive::trace` rebuilds one node path; it is not that traceroute, and a per-round delta-mask store would violate §C.5. `support` and `affected` stand as mask selections. Graph work is mask selection, not traversal. See D-DT64-7 F8 and O6. diff --git a/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md new file mode 100644 index 000000000..c67e3a2cb --- /dev/null +++ b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md @@ -0,0 +1,151 @@ +# D-DT64-7 — Behaviour addressing and registration: Frozen, Learned, Explore over one classid + +**Status:** PROPOSED, docs only. No code, crate, ABI or test lands with this plan. Each claim is labelled: +- **DECISION**, with who decided and when; +- **VERIFIED-IN-CODE**, with its location on `main` `b38d88e`; +- **WORKING-MODEL** (the design this plan proposes); +- **OPEN** (undecided; carries an owner). + +**Date:** 2026-10-31. **Parent work:** D-DT64-6 (`d-dt64-6-routing-bindstore-behavior-v1.md`, #1869, #1871, #1883), D-LITHO (`entries/2026-10-30-d-litho-photolithography-contract.md`), D-DYNBAG (`d-dynbag-holographic-bags-v1.md`), the DR256 WHERE capstone §C (`dr256-where-capstone-v1.md`), the V3 mandatory hot-plug reading (`v3-mandatory-hotplug-reading-v1.md`), #1892/#1897 (R1 binding), #1896 (XLOG × egglog). + +**What this plan settles:** where agnostic and registered behaviour lives, how a classid addresses it, who may register and withdraw it, and what that means for the current dependency of DT64 execution on `ogar-r2il`. **What it does not settle:** selection and tiling (D-DYNBAG), routing and frames (D-DT64-6, DR), the traceroute (DR256 capstone §C.5). + +--- + +## 1. Decisions carried (operator, 2026-10-31, in session) + +| # | decision | +|---|---| +| D1 | Behaviour for fixed relalg has three categories: **Frozen**, **Learned**, **Explore**. | +| D2 | **Frozen = compile time.** **Learned = registered in the `BindStore`.** **Explore = not yet registered.** There is no lifecycle state besides versioned, replayable immutability. | +| D3 | ONNX, SQL and Gremlin belong to Frozen: their semantics are declared by an external specification. The R2IL codegraph harvest (and analyzer output) belongs to Learned / Explore. | +| D4 | XLOG is Learned during the lab (`xlog-relcomp-probe`) and becomes Frozen once migrated to production by minting `lance-graph-xlog`, where it is permanently registered in lance-graph. This is consistent with #1888's "no `lance-graph-xlog` crate until a measured source gap exists": that rule governs the lab phase; the mint is the migration. | +| D5' | Registration needs common-sense constraints: anything that runs code through the `BindStore` (a code analyzer, an R2IL macro) can register **and unregister**. | +| D6' | **Left side empty (`0x0000`) = hardcoded** behaviour. **Left side = a `Domain::AppId` concept = registered by that domain/app.** Registered behaviour may also take a left side in the `0xF###` range. | +| D7' | The **right side** (low 16 bits) is ClassView / `WideFieldMask` selection and routing within the concept, not render only: Quack addresses a mask from the DR versioning store for the current bag, comparable to DuckDB reusing a bag selection. The right side's `0xF###` range addresses behaviour selections. | +| D8' | `0x1000` (the V3 marker) is deprecated, from when V3 was opt-in. Recorded earlier: `v3-mandatory-hotplug-reading-v1.md` item 5 (2026-10-10, "deprecated, not evicted"). | +| D9' | Graph work is mask selection, not traversal: a selection mask before DR/DT and a selection mask after DR/DT. | +| D10' | The DR/DT global → local selection must be a versioned lance-graph table, accessible through `ClassView × WideFieldMask` if nothing better exists. Recorded earlier as D-LITHO Q5 ("which table" open for the DR/DT owner). | + +The primes mark decisions numbered in this plan, not D-DT64-6's D4–D6. + +--- + +## 2. The classid, both sides + +```text + left (high 16): concept right (low 16): selection within it + [ Domain 8 | AppId 8 ] :: [ ClassView / WideFieldMask selection ] + + 0x0000 hardcoded (Frozen) + 0xF000 ..= 0xFFFF registered behaviour concepts (Learned) + Domain::AppId that domain/app's registered classes (Learned) + 0xF000 ..= 0xFFFF behaviour selections +``` + +- **VERIFIED-IN-CODE.** Under the current order a classid is `[canon u16][custom u16]` (`ogar_codebook.rs` `compose_classid`, `:484`). `classid_concept` (`:573`) is the left side; `classid_app_prefix` (`:561`) still names the right side as the app/render prefix, which is the fossil reading D8' deprecates. +- **VERIFIED-IN-CODE.** `0x00` is `ConceptDomain::Reserved` and `0xF0..=0xFF` is `Unassigned` (`ogar_codebook.rs:179-210`); `ogar-vocab` at `2a080a9` mints nothing in `0xF0..=0xFF`. +- **WORKING-MODEL.** The two `0xF###` ranges are different roles. On the left, `0xF###` names a behaviour concept. On the right, it is a selection under whatever concept is on the left. No reader infers one from the other. + +--- + +## 3. Where each category lives + +| category | home | changes by | VERIFIED-IN-CODE today | +|---|---|---|---| +| **Frozen** | compiled code and `const` tables; left side `0x0000` | a new build only | relalg, mask-risc, `ndarray::simd`; the contract's `const` mirrors (`ogar_codebook`) | +| **Learned** | `BindStore` entries; left side `0xF###` or `Domain::AppId` | `register`; withdrawal (§5); revisions as new classids + re-route | `xlog-relcomp-probe/tests/dto_binding.rs:145-154` registers an XLOG method and admits it | +| **Explore** | outside the store | becomes Learned by `register` | Kythe/rust-analyzer facts (#1894), the R2IL codegraph harvest | + +**Migration is not a store operation.** Explore → Learned is a `register`. Learned → Frozen is moving the behaviour into compiled code (for XLOG: minting `lance-graph-xlog`). + +--- + +## 4. Findings against the current code + +**F1 — Frozen polyfill words are runtime-registered, through the Learned vocabulary.** VERIFIED-IN-CODE: +- `BindStore::declare_algebra(lens, schema_rev, extent, arity)` (`lance-graph-dt64/src/lib.rs:628`) declares the polyfill lens at runtime. `AlgebraLens` holds a schema and one arity per word, nothing else (`:119-122`); "the store never resolves or runs the word" (`:105-109`). +- Executing a bound effect goes through `lance-graph-r2il::binding`, which: + - refuses any lens whose concept is not `ogar_r2il::CONCEPT_R2IL_FOLD` (`binding.rs:278`; `0xC401`, marked PROVISIONAL, not minted in `ogar-vocab`); + - resolves each word by label through `ogar_r2il::R2ILVocabulary` and checks `stack_arity` / `pushes_result` (`binding.rs:496-525`); + - takes `FnIndex` from `ogar-loco` and the fold opcodes from `ogar-r2il`. +- So a Frozen word (D2) is named and typed by the R2IL vocabulary, which is harvest-side (D3). WORKING-MODEL: the Frozen polyfill is a compile-time lance-graph table under left side `0x0000`; R2IL maps onto it with a parity test where OGAR is compiled; `ogar-loco` / `ogar-r2il` leave the execution path. +- Dependency weight is not the issue: `cargo tree -p lance-graph-r2il` shows OGAR contributing exactly `ogar-r2il` and `ogar-loco`, and `ogar-r2il`'s only normal dependency is `ogar-loco` (no r2sleigh). The issue is the category, and the git `main` coordinate (`ISS-SIX-DECISIONS-NOT-EXECUTED-FLOAT-REFS`). + +**F2 — Nothing can be withdrawn but a route.** VERIFIED-IN-CODE: +- `BindStore::retract(position)` writes a new `RouteVersion` and keeps history (`lib.rs:747`; `dr.rs` `RouteLog::retract`/`push`); its doc says the classid keeps its behaviour. +- There is no withdrawal for `register`, `register_derived` or `declare_algebra`. +- `admit` (`lib.rs:796`) checks method, signature revision and guard only; a class whose routes are all retracted still admits. + +**F3 — Registration moves no version.** VERIFIED-IN-CODE: only routes are versioned (`RouteLog`). Recorded as open for the frame owner (D-DT64-6 plan `:293`, D8). With withdrawal (§5) a frame-visible version for registration becomes necessary. + +**F4 — No registrant is recorded and no activation is consulted.** VERIFIED-IN-CODE: `register` takes any `u32` (`lib.rs:556`); `lance-graph-dt64` contains no `hotplug`, `Activation` or `CapabilityAuthority` reference. D-DT64-6 lists "wiring OGAR's `CapabilityAuthority` (D6)" as not done (`:261`). + +**F5 — The compat reader misreads a left-empty classid.** VERIFIED-IN-CODE: `classid_canon_compat` (`ogar_codebook.rs:530-540`) takes the high half only when it is `>= 0x0100` and otherwise, with a non-zero right side, re-reads the id in the legacy order. `0x0000_F123` therefore yields concept `0xF123`, not `0x0000`. The strict `classid_concept` is correct. Left side `0xF###` is unaffected (`>= 0x0100`). + +**F6 — The global → local selection is in memory, not a versioned table.** VERIFIED-IN-CODE: `dt64::dr::LocalMap` (`dr.rs:424-505`) is "the prepared global → local pointer table for one tile under one frame"; it is versioned only by `digest()`, which a frame carries as its `coordinates` revision. No lance-graph table holds it (D-LITHO Q5 open) and it is not addressable as `ClassView × WideFieldMask`. + +**F7 — A witnessed, reusable population exists in the lab.** VERIFIED-IN-CODE: `dir-rmap-probe/src/pop.rs` `Pop { witness, tiles, kept }` refuses `Stale` when populations from different snapshots combine (`:35-98`, #1666). DR256 capstone §C.3 assigns named reusable binding descriptors (witness, lifetime, dependencies) to the planned binding store, with the computed mask in the caller's buffer under that witness. A right-side behaviour selection (D7') is that precedent, not a new design. + +**F8 — The traceroute is a chain of stage identities, not a path.** DR256 capstone §C.5: derivation, proof, binding, execution and replay, each referenced by an immutable identity; "it stores no intermediate population, symbolic graph or duplicated SoA payload". `recursive::trace` in #1896 rebuilds a node path, which is not that traceroute (D9'); a per-round delta-mask store would violate §C.5. + +--- + +## 5. Registration and withdrawal constraints (WORKING-MODEL) + +Each constraint is a test that fires plus a twin that stays silent, on non-trivial input. + +| # | constraint | fires | stays silent | +|---|---|---|---| +| C1 | **Left side `0x0000` is not runtime-registrable.** `register`, `register_derived`, `declare_algebra` and withdrawal refuse it. | `register(0x0000_0001, ..)` refused | `register(0xF001_0000, ..)` with an activation accepted | +| C2 | **Registration needs an activation for its left side.** A `Domain::AppId` concept must be among the concepts an `Activation` covers (`hotplug.rs` `CapabilityAuthority::activate`); a `0xF###` behaviour concept follows the seat arm (§6). The activated plug is the registrant. | registering a concept the plug did not activate | registering the activated concept | +| C3 | **Withdrawal never deletes.** At versions before the withdrawal the class still resolves and admits (replay holds); from the withdrawal on, `admit` and `route` refuse with a named reason (`Withdrawn { class, at }`). | `admit` after withdrawal | `admit` at a version before withdrawal | +| C4 | **Registration and withdrawal move a frame-visible version** (closes F3). | a frame sealed before a withdrawal fails `check` | a frame sealed after it passes | +| C5 | **No dangling routes.** A class that is still routed cannot be withdrawn; the refusal names the positions. | withdraw while routed | withdraw after `retract` of every position | +| C6 | **No orphaned dependents.** Withdrawal refuses while a derived class names it as base, or registered methods use the lens's words (`users_of` exists, `lib.rs:700`). | withdraw a base with a live derived class | withdraw a class nothing depends on | +| C7 | **Only the registrant withdraws.** | another plug's withdrawal | the registrant's withdrawal | +| C8 | **D5 holds after withdrawal.** A different binding under a withdrawn classid is refused (`BehaviourImmutable`); the identical binding reinstates it at a new version; a changed hypothesis takes a new classid. | different binding, same classid | identical binding | + +--- + +## 6. Left-side behaviour seats `0xF###` (WORKING-MODEL) + +- **Precedent, VERIFIED-IN-CODE:** `OgarAuthority::activate` (`lance-graph-ogar/src/lib.rs:565-660`) routes a reserved range outside the minted codebook through its own arm before the capability join: palette seats `0x17XX` (`is_palette_seat` `:501`, `palette_seat_owner` `:541`, `impersonated_seat` `:550`). A claimed seat is owner-checked (`UnexpectedConsumer`); an unclaimed seat is plug-and-play; readings come from `plug_readings` (`:452`). +- **Proposal:** behaviour seats `0xF000..=0xFFFF` take the same kind of arm: activation without minting each behaviour as a domain concept, an owner for C2/C7, and readings from the plug. + +--- + +## 7. Open decisions + +| # | question | owner | +|---|---|---| +| O1 | Seat ownership for left `0xF###`: claimed by the first registrant (palette-seat style), or the whole range owned by lance-graph, registering on others' behalf? | operator | +| O2 | OGAR reserves `0xF0..=0xFF` as behaviour seats, never minted as domain concepts, with a mirror test that fails if a codebook row lands there. | OGAR owner | +| O3 | F5: exclude left-empty classids from `classid_canon_compat`, or retire the heuristic (which assumes the legacy order the 2026-10-10 ruling chose not to force-migrate). | operator | +| O4 | Right-side `0xF###` selection: does one value name one stored selection over the existing 256-position basis, or one position in a wider basis (which widens `WideFieldMask` and `AlgebraRef.word` past `u8`)? D7' points to the first. | operator | +| O5 | D-LITHO Q5: which lance-graph table versions the global → local selection, and its row shape (WORKING-MODEL: versions = frame revisions, one row per local position, read through a ClassView, selected by a `WideFieldMask`; it also holds the stored selections of D7'). | DR/DT owner | +| O6 | Whether `recursive::trace` (#1896) stays as a semi-naive test oracle or is removed; either way it is documented as not the traceroute. | operator | + +--- + +## 8. Plan items (test-first; none started) + +| id | item | gate (red first, disable-verified) | +|---|---|---| +| D-DT64-7-0 | this document and the board rows | docs review | +| D-DT64-7-1 | F5 falsifier: `classid_canon_compat(0x0000_F123) == 0x0000` | red on `main` today | +| D-DT64-7-2 | C1–C8 as tests over a `BindStore` withdrawal API, behind the activation of C2 | each constraint's fire and silent twin (§5) | +| D-DT64-7-3 | Frozen polyfill table: a compile-time lance-graph table under `0x0000` (opcode, label, arity, pushes-result), with a parity test against `ogar_r2il::R2ILVocabulary` where OGAR is compiled | parity test red on one deliberately changed row; `lance-graph-r2il` builds with `ogar-loco` / `ogar-r2il` optional | +| D-DT64-7-4 | behaviour-seat arm in `OgarAuthority` (§6) | claimed seat refuses another consumer; unclaimed seat activates; a `0xF###` codebook row fails the mirror test | +| D-DT64-7-5 | O5 table design | D-LITHO Q5 answered; a selection read under a stale version refuses (`Pop`'s `Stale`, F7) | + +D-DT64-7-1 and D-DT64-7-3 need no open decision beyond O3 and O1 respectively; D-DT64-7-2 needs O1; D-DT64-7-4 needs O1 and O2; D-DT64-7-5 needs O5. + +--- + +## 9. Not covered + +- How a selection is evaluated, relabelled and tiled, and its semiring readings: D-DYNBAG. +- Routing, frames, focus and scope: D-DT64-6 and DR. +- Proof checking: DR256 capstone §C.2 lists the independent checker as MISSING. +- Promotion evidence for XLOG (D4): its lab oracles exist (BFS oracle and 200-case differential for the closure, two oracles for bag counts, Scallop), but which must be green for the mint is not decided here. From 6c330098f9cf3062713a78c0f9ad943c737e35eb Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 20:32:52 +0000 Subject: [PATCH 3/6] Cite TECH_DEBT code by symbol, not line number citation-decay flagged three new line-number citations in the D-DT64-7 TECH_DEBT entries. They now name the function and file. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF --- .claude/board/FRUITS.md | 2 +- .claude/board/TECH_DEBT.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.claude/board/FRUITS.md b/.claude/board/FRUITS.md index 0023eaf9c..4ec2cdb41 100644 --- a/.claude/board/FRUITS.md +++ b/.claude/board/FRUITS.md @@ -32,7 +32,7 @@ _none open_ |---|---|---|---| | High-signal | TD-FROZEN-POLYFILL-NAMED-BY-R2IL — the compile-time polyfill is declared at runtime and named through `ogar-r2il` (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (lines above, `main` `b38d88e`). | `TECH_DEBT.md` | | High-signal | TD-NARS-REVISION-UNGUARDED-CAUSAL-EDGE-ISA-1 — `Opcode::Revision` pools a duplicated source; a measured site of TD-NARS-REVISION-UNGUARDED (2026-10-23) | OPEN. **Basis:** VERIFIED-IN-CODE + MEASURED. | `TECH_DEBT.md` | -| Low-hanging | TD-CLASSID-CANON-COMPAT-MISREADS-LEFT-EMPTY — `classid_canon_compat(0x0000_F123)` returns `0xF123` (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`ogar_codebook.rs:530-540`, read on `main` `b38d88e`). | `TECH_DEBT.md` | +| Low-hanging | TD-CLASSID-CANON-COMPAT-MISREADS-LEFT-EMPTY — `classid_canon_compat(0x0000_F123)` returns `0xF123` (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`classid_canon_compat`, read on `main` `b38d88e`). | `TECH_DEBT.md` | | Low-hanging | TD-XLOG-NATIVE-COUNT-OVERFLOW-UNTESTED — the native bag count refuses on overflow, and no test reaches it (2026-10-31) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`native.rs:45`, `:148-157`; no hit for `NativeRefusal::Count` outside `native.rs`, read on main `b38d88e`). | `TECH_DEBT.md` | | Low-hanging | TD-BGZ-TENSOR-INTEGRATION-TESTS-UNGATED-1 (2026-10-23) — OPEN | OPEN | `TECH_DEBT.md` | | Low-hanging | TD-CE64-W-SLOT-DOC-SAYS-NO-ANCHOR — `edge.rs` still documents W = 0 as "no corpus anchor" (2026-10-23) — OPEN | OPEN. **Basis:** VERIFIED-IN-CODE (`edge.rs:944` on main `8f610a85`). | `TECH_DEBT.md` | diff --git a/.claude/board/TECH_DEBT.md b/.claude/board/TECH_DEBT.md index c0a3d9bfc..9425b43e2 100644 --- a/.claude/board/TECH_DEBT.md +++ b/.claude/board/TECH_DEBT.md @@ -1,6 +1,6 @@ ## TD-FROZEN-POLYFILL-NAMED-BY-R2IL — the compile-time polyfill is declared at runtime and named through `ogar-r2il` (2026-10-31) — OPEN -`BindStore::declare_algebra` (`crates/lance-graph-dt64/src/lib.rs:628`) declares the polyfill lens at runtime, and `lance-graph-r2il::binding` resolves every word through `ogar_r2il::R2ILVocabulary` and refuses any lens whose concept is not `ogar_r2il::CONCEPT_R2IL_FOLD` (`binding.rs:278`, `:496-525`; `0xC401` is provisional, not minted). By D-DT64-7 D2/D3 the polyfill is Frozen (compile time) and R2IL is harvest-side. +`BindStore::declare_algebra` (in `crates/lance-graph-dt64/src/lib.rs`) declares the polyfill lens at runtime, and `lance-graph-r2il::binding` resolves every word through `ogar_r2il::R2ILVocabulary` and refuses any lens whose concept is not `ogar_r2il::CONCEPT_R2IL_FOLD` (`binding.rs:278`, `:496-525`; `0xC401` is provisional, not minted). By D-DT64-7 D2/D3 the polyfill is Frozen (compile time) and R2IL is harvest-side. **Fruit:** High-signal **Status:** OPEN. **Basis:** VERIFIED-IN-CODE (lines above, `main` `b38d88e`). @@ -9,18 +9,18 @@ ## TD-CLASSID-CANON-COMPAT-MISREADS-LEFT-EMPTY — `classid_canon_compat(0x0000_F123)` returns `0xF123` (2026-10-31) — OPEN -`crates/lance-graph-contract/src/ogar_codebook.rs:530-540` takes the high half only when it is `>= 0x0100`; with a non-zero low half it re-reads the id in the legacy order. A left-empty (hardcoded) classid therefore reports its right side as its concept. The strict `classid_concept` is correct; RBAC grant matching and other mixed-form readers use the compat reader. +`classid_canon_compat` (in `crates/lance-graph-contract/src/ogar_codebook.rs`) takes the high half only when it is `>= 0x0100`; with a non-zero low half it re-reads the id in the legacy order. A left-empty (hardcoded) classid therefore reports its right side as its concept. The strict `classid_concept` is correct; RBAC grant matching and other mixed-form readers use the compat reader. **Fruit:** Low-hanging -**Status:** OPEN. **Basis:** VERIFIED-IN-CODE (`ogar_codebook.rs:530-540`, read on `main` `b38d88e`). +**Status:** OPEN. **Basis:** VERIFIED-IN-CODE (`classid_canon_compat`, read on `main` `b38d88e`). - **What closes it:** the falsifier D-DT64-7-1, then the decision O3 (exclude left-empty ids, or retire the heuristic). ## TD-XLOG-NATIVE-COUNT-OVERFLOW-UNTESTED — the native bag count refuses on overflow, and no test reaches it (2026-10-31) — OPEN -`crates/xlog-relcomp-probe/src/native.rs:155` multiplies per-Y counts with +`bag_count` (in `crates/xlog-relcomp-probe/src/native.rs`) multiplies per-Y counts with `checked_binary_i64(I64Op::Mul, ..)` and maps an overflow to -`NativeRefusal::Count` (`:45`). No test in `src/` or `tests/` produces +`NativeRefusal::Count`. No test in `src/` or `tests/` produces `NativeRefusal::Count`. On a real fixture it is unreachable: overflowing `i64` needs per-side counts near 3·10⁹ rows. From 766995f86f48bf40c9040cddd4ffea624b9b1ca6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 20:36:36 +0000 Subject: [PATCH 4/6] D-DT64-7: hardcoded behaviour at 0xFFFF::0xF###, registered by DT64 Operator decision: hardcoded behaviour moves from left side 0x0000 to 0xFFFF, with the right-side 0xF### range naming the concern (relalg, XLOG, ONNX, TFLite, SQL, Gremlin; split proposed as O7). DT64 is the delegate that registers these classids for lance-graph-ogar without consulting ogar-vocab. Consumers register under their own Domain::AppId::0xF###. Consequences recorded: one classid per behaviour lens, never per word; classid_canon_compat reads 0xFFFF correctly, so F5 now concerns legacy ids only; CapabilityAuthority is in the contract, so DT64 can be the authority with no OGAR dependency (where the composition lives is O8). C1, section 6, O1-O3 and the plan items are revised; superseded text is marked, not deleted. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF --- .claude/board/INTEGRATION_PLANS.md | 2 +- .claude/board/STATUS_BOARD.md | 10 +-- .claude/board/TECH_DEBT.md | 3 +- ...-7-behaviour-addressing-registration-v1.md | 64 ++++++++++++++----- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/.claude/board/INTEGRATION_PLANS.md b/.claude/board/INTEGRATION_PLANS.md index f038681b5..0f3eaa1a3 100644 --- a/.claude/board/INTEGRATION_PLANS.md +++ b/.claude/board/INTEGRATION_PLANS.md @@ -1,6 +1,6 @@ ## 2026-10-31 — D-DT64-7: behaviour addressing and registration → `.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md` -**Status:** PROPOSED, docs only. **Board:** [STATUS_BOARD](STATUS_BOARD.md) D-DT64-7. Behaviour for fixed relalg is Frozen (compile time, left side `0x0000`), Learned (registered in the `BindStore`, left side `0xF###` or `Domain::AppId`, withdrawn only by its registrant, never deleted) or Explore (not registered). ONNX, SQL and Gremlin are Frozen; the R2IL codegraph harvest is Learned / Explore; XLOG is Learned in the lab and Frozen once minted as `lance-graph-xlog`. Findings: the Frozen polyfill is runtime-declared and named through `ogar-r2il`'s vocabulary; only routes can be withdrawn; registration moves no version; no activation is consulted; `classid_canon_compat` misreads a left-empty classid; the global → local selection is not yet a versioned table. +**Status:** PROPOSED, docs only. **Board:** [STATUS_BOARD](STATUS_BOARD.md) D-DT64-7. Behaviour for fixed relalg is Frozen (compile time, at `0xFFFF :: 0xF###`, registered by DT64 as delegate for `lance-graph-ogar` without asking `ogar-vocab`; the range names the concern: relalg, XLOG, ONNX, TFLite, SQL, Gremlin), Learned (registered in the `BindStore` at `Domain::AppId :: 0xF###`, withdrawn only by its registrant, never deleted) or Explore (not registered). ONNX, SQL and Gremlin are Frozen; the R2IL codegraph harvest is Learned / Explore; XLOG is Learned in the lab and Frozen once minted as `lance-graph-xlog`. Findings: the Frozen polyfill is runtime-declared and named through `ogar-r2il`'s vocabulary; only routes can be withdrawn; registration moves no version; no activation is consulted; `classid_canon_compat` misreads a legacy left-empty classid (it reads `0xFFFF` correctly); the global → local selection is not yet a versioned table. **Confidence:** plan; every finding cited to code read on `main` `b38d88e`; no new measurement. ## 2026-10-31 — D-DYNBAG: DR{dynamic bag}, holographic bags as polyfill, the PostgreSQL endgame → `.claude/plans/d-dynbag-holographic-bags-v1.md` diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 4b224929b..c34eb7750 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -1,14 +1,14 @@ ## D-DT64-7 — behaviour addressing and registration: Frozen, Learned, Explore over one classid (2026-10-31) -Plan: `.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md`. Docs only. Frozen = compile time (left side `0x0000`); Learned = registered in the `BindStore` (left side `0xF###` or `Domain::AppId`); Explore = not registered. Right side = ClassView / `WideFieldMask` selection. +Plan: `.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md`. Docs only. Frozen = compile time, at `0xFFFF :: 0xF###`, registered by DT64 as delegate for `lance-graph-ogar` without `ogar-vocab` (concern by range: relalg `F0__`, XLOG `F1__`, ONNX `F2__`, TFLite `F3__`, proposed); Learned = registered in the `BindStore` at `Domain::AppId :: 0xF###`; Explore = not registered. Right side = ClassView / `WideFieldMask` selection. | D-id | Deliverable | Status | Gate | |---|---|---|---| | D-DT64-7-0 | plan and board rows | In PR | docs review | -| D-DT64-7-1 | `classid_canon_compat(0x0000_F123) == 0x0000` falsifier (F5) | Queued | O3 | -| D-DT64-7-2 | `BindStore` withdrawal with constraints C1–C8, behind an activation | Queued | O1 | -| D-DT64-7-3 | compile-time Frozen polyfill table under `0x0000`, parity test against `R2ILVocabulary`; `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il` | Queued | O1 | -| D-DT64-7-4 | behaviour-seat arm `0xF###` in `OgarAuthority` | Queued | O1, O2 (OGAR owner) | +| D-DT64-7-1 | `classid_canon_compat(0x0000_F123) == 0x0000` falsifier (F5, legacy ids only), with the twin `0xFFFF_F000 → 0xFFFF` | Queued | none | +| D-DT64-7-2 | `BindStore` withdrawal with constraints C1–C8, behind an activation | Queued | O8 | +| D-DT64-7-3 | compile-time Frozen polyfill table at `0xFFFF :: 0xF000`, registered by DT64, parity test against `R2ILVocabulary`; `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il` | Queued | O7 | +| D-DT64-7-4 | DT64 `CapabilityAuthority` for concept `0xFFFF` + the composing authority | Queued | O2 (OGAR owner), O8 | | D-DT64-7-5 | the versioned global → local selection table (D-LITHO Q5) | Queued | O5 (DR/DT owner) | ## D-MIST-NATIVE — Mistaber's Kripke holdings over the DR64 relation register (2026-10-30) diff --git a/.claude/board/TECH_DEBT.md b/.claude/board/TECH_DEBT.md index 9425b43e2..37f84e642 100644 --- a/.claude/board/TECH_DEBT.md +++ b/.claude/board/TECH_DEBT.md @@ -5,7 +5,7 @@ **Fruit:** High-signal **Status:** OPEN. **Basis:** VERIFIED-IN-CODE (lines above, `main` `b38d88e`). -- **What closes it:** D-DT64-7-3: a compile-time lance-graph table under left side `0x0000` with a parity test against `R2ILVocabulary`, and `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il`. +- **What closes it:** D-DT64-7-3: a compile-time lance-graph table at `0xFFFF :: 0xF000`, registered by DT64 (D-DT64-7 §1a), with a parity test against `R2ILVocabulary`, and `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il`. ## TD-CLASSID-CANON-COMPAT-MISREADS-LEFT-EMPTY — `classid_canon_compat(0x0000_F123)` returns `0xF123` (2026-10-31) — OPEN @@ -15,6 +15,7 @@ **Status:** OPEN. **Basis:** VERIFIED-IN-CODE (`classid_canon_compat`, read on `main` `b38d88e`). - **What closes it:** the falsifier D-DT64-7-1, then the decision O3 (exclude left-empty ids, or retire the heuristic). +- **Scope (2026-10-31, D-DT64-7 §1a):** hardcoded behaviour moved to `0xFFFF :: 0xF###`, which this reader handles (`0xFFFF >= 0x0100`). What remains is legacy `0x0000_XXXX` ids only; this no longer blocks D-DT64-7. ## TD-XLOG-NATIVE-COUNT-OVERFLOW-UNTESTED — the native bag count refuses on overflow, and no test reaches it (2026-10-31) — OPEN diff --git a/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md index c67e3a2cb..a8ca81372 100644 --- a/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md +++ b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md @@ -29,6 +29,32 @@ The primes mark decisions numbered in this plan, not D-DT64-6's D4–D6. +### 1a. Revision: hardcoded behaviour is `0xFFFF::0xF###`, and DT64 owns its registration (operator, 2026-10-31, later in session) + +| # | decision | +|---|---| +| D11'' | **Hardcoded behaviour is `0xFFFF :: 0xF###`**: left side `0xFFFF` (domain `0xFF`, app `0xFF`), right side `0xF###` naming the behaviour. **Supersedes D6'** "left side empty (`0x0000`) = hardcoded". | +| D12'' | The hardcoded families include the relalg polyfill, **XLOG** (after the `lance-graph-xlog` mint, D4), **ONNX** and **TFLite**; D3 already places SQL and Gremlin in Frozen. | +| D13'' | **DT64 is the delegate for registering behaviour classids for `lance-graph-ogar`, without asking `ogar-vocab`.** Separation of concerns is hardcoded by address: the address range says which concern a behaviour belongs to. | +| D14'' | **Consumers still register behaviour through `0xF###` on the right side, under their own `Domain::AppId` on the left side.** | +| D15'' | Assigning behaviour classids to DT64 means assigning the concern with them: DT64 holds the registration authority for that range, not only the storage of its bindings. | + +WORKING-MODEL consequences, each checked against `main` `b38d88e`: + +- **One classid per behaviour family, never per word.** `0xFFFF_F###` names one lens; its words stay field positions (`AlgebraRef { lens, word: u8 }`, `lance-graph-dt64/src/lib.rs` "Agnostic algebra" module doc: "No word gets a classid of its own"). This also answers the objection in `entries/2026-10-31-cross-frontend-projection-crosswalk.md` that a per-method slot would be a second spelling of `MethodRef`: `F###` addresses a lens, not a method. A lens holds at most `MAX_FIELDS = 256` words (`lib.rs`); a family larger than that takes more than one classid inside its range. +- **The compat misread no longer touches hardcoded behaviour.** `classid_canon_compat` returns the high half when it is `>= 0x0100` and not `0x1000` (VERIFIED-IN-CODE), so `0xFFFF_F000` reads concept `0xFFFF`. F5 remains true of legacy `0x0000_XXXX` ids only, which I-LEGACY keeps on purpose; D-DT64-7-1 and O3 no longer gate this plan. +- **The delegate needs no OGAR crate in DT64.** `CapabilityAuthority` lives in the zero-dependency contract (`hotplug.rs`), `lance-graph-dt64` depends only on the contract, and `lance-graph-ogar` does not depend on `lance-graph-dt64` (VERIFIED-IN-CODE, both `Cargo.toml`s). DT64 can implement `CapabilityAuthority` for concept `0xFFFF`; whatever composes the two authorities routes `0xFFFF` to DT64 and every other concept to `OgarAuthority` / `ogar-vocab`. Where that composition lives is O8. +- **Concern ranges inside `0xF###` (proposal, O7).** The second hex digit names the concern; the low byte gives up to 256 classids per concern, so a new revision of a frozen specification (an ONNX opset, a TFLite schema version) takes a new classid in its range, which is D5's "a changed hypothesis takes a new classid" applied to Frozen: + + | right side | concern | Frozen from | + |---|---|---| + | `0xF0__` | relalg / mask-risc polyfill (the lens `declare_algebra` declares today) | now (D-DT64-7-3) | + | `0xF1__` | XLOG | the `lance-graph-xlog` mint (D4); in the lab XLOG registers under the probe's own `Domain::AppId :: 0xF###` (D14'') | + | `0xF2__` | ONNX | when an ONNX surface lands | + | `0xF3__` | TFLite | when a TFLite surface lands | + | `0xF4__`, `0xF5__` | SQL, Gremlin (D3) | when each surface lands | + | `0xF6__ ..= 0xFF__` | reserved | — | + --- ## 2. The classid, both sides @@ -37,10 +63,12 @@ The primes mark decisions numbered in this plan, not D-DT64-6's D4–D6. left (high 16): concept right (low 16): selection within it [ Domain 8 | AppId 8 ] :: [ ClassView / WideFieldMask selection ] - 0x0000 hardcoded (Frozen) - 0xF000 ..= 0xFFFF registered behaviour concepts (Learned) + 0xFFFF hardcoded behaviour (Frozen), registered by DT64 (D11'', D13'') Domain::AppId that domain/app's registered classes (Learned) - 0xF000 ..= 0xFFFF behaviour selections + 0xF000 ..= 0xFFFF behaviour (by concern under 0xFFFF, §1a) + + 0x0000 ⊘ was "hardcoded" (D6'); superseded by 0xFFFF (D11'') + 0xF000 ..= 0xFFFE ⊘ was "registered behaviour seats" (D6', §6); unallocated (O1) ``` - **VERIFIED-IN-CODE.** Under the current order a classid is `[canon u16][custom u16]` (`ogar_codebook.rs` `compose_classid`, `:484`). `classid_concept` (`:573`) is the left side; `classid_app_prefix` (`:561`) still names the right side as the app/render prefix, which is the fossil reading D8' deprecates. @@ -53,8 +81,8 @@ The primes mark decisions numbered in this plan, not D-DT64-6's D4–D6. | category | home | changes by | VERIFIED-IN-CODE today | |---|---|---|---| -| **Frozen** | compiled code and `const` tables; left side `0x0000` | a new build only | relalg, mask-risc, `ndarray::simd`; the contract's `const` mirrors (`ogar_codebook`) | -| **Learned** | `BindStore` entries; left side `0xF###` or `Domain::AppId` | `register`; withdrawal (§5); revisions as new classids + re-route | `xlog-relcomp-probe/tests/dto_binding.rs:145-154` registers an XLOG method and admits it | +| **Frozen** | compiled code and `const` tables; `0xFFFF :: 0xF###`, registered by DT64 (§1a) | a new build only | relalg, mask-risc, `ndarray::simd`; the contract's `const` mirrors (`ogar_codebook`) | +| **Learned** | `BindStore` entries; `Domain::AppId :: 0xF###` (D14'') | `register`; withdrawal (§5); revisions as new classids + re-route | `xlog-relcomp-probe/tests/dto_binding.rs:145-154` registers an XLOG method and admits it | | **Explore** | outside the store | becomes Learned by `register` | Kythe/rust-analyzer facts (#1894), the R2IL codegraph harvest | **Migration is not a store operation.** Explore → Learned is a `register`. Learned → Frozen is moving the behaviour into compiled code (for XLOG: minting `lance-graph-xlog`). @@ -69,7 +97,7 @@ The primes mark decisions numbered in this plan, not D-DT64-6's D4–D6. - refuses any lens whose concept is not `ogar_r2il::CONCEPT_R2IL_FOLD` (`binding.rs:278`; `0xC401`, marked PROVISIONAL, not minted in `ogar-vocab`); - resolves each word by label through `ogar_r2il::R2ILVocabulary` and checks `stack_arity` / `pushes_result` (`binding.rs:496-525`); - takes `FnIndex` from `ogar-loco` and the fold opcodes from `ogar-r2il`. -- So a Frozen word (D2) is named and typed by the R2IL vocabulary, which is harvest-side (D3). WORKING-MODEL: the Frozen polyfill is a compile-time lance-graph table under left side `0x0000`; R2IL maps onto it with a parity test where OGAR is compiled; `ogar-loco` / `ogar-r2il` leave the execution path. +- So a Frozen word (D2) is named and typed by the R2IL vocabulary, which is harvest-side (D3). WORKING-MODEL: the Frozen polyfill is a compile-time lance-graph table at `0xFFFF :: 0xF0__` (§1a); R2IL maps onto it with a parity test where OGAR is compiled; `ogar-loco` / `ogar-r2il` leave the execution path. - Dependency weight is not the issue: `cargo tree -p lance-graph-r2il` shows OGAR contributing exactly `ogar-r2il` and `ogar-loco`, and `ogar-r2il`'s only normal dependency is `ogar-loco` (no r2sleigh). The issue is the category, and the git `main` coordinate (`ISS-SIX-DECISIONS-NOT-EXECUTED-FLOAT-REFS`). **F2 — Nothing can be withdrawn but a route.** VERIFIED-IN-CODE: @@ -97,8 +125,8 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi | # | constraint | fires | stays silent | |---|---|---|---| -| C1 | **Left side `0x0000` is not runtime-registrable.** `register`, `register_derived`, `declare_algebra` and withdrawal refuse it. | `register(0x0000_0001, ..)` refused | `register(0xF001_0000, ..)` with an activation accepted | -| C2 | **Registration needs an activation for its left side.** A `Domain::AppId` concept must be among the concepts an `Activation` covers (`hotplug.rs` `CapabilityAuthority::activate`); a `0xF###` behaviour concept follows the seat arm (§6). The activated plug is the registrant. | registering a concept the plug did not activate | registering the activated concept | +| C1 | **Left side `0xFFFF` is registered only by DT64, from compiled tables.** A plug cannot activate concept `0xFFFF`, so `register`, `register_derived`, `declare_algebra` and withdrawal by a plug refuse it. *(Was: left side `0x0000`; superseded by D11''.)* | a plug's `register(0xFFFF_F001, ..)` refused | the same plug's `register(_F001, ..)` accepted | +| C2 | **Registration needs an activation for its left side.** A `Domain::AppId` concept must be among the concepts an `Activation` covers (`hotplug.rs` `CapabilityAuthority::activate`); concept `0xFFFF` is activated only by DT64's own authority (§6). The activated plug is the registrant. | registering a concept the plug did not activate | registering the activated concept | | C3 | **Withdrawal never deletes.** At versions before the withdrawal the class still resolves and admits (replay holds); from the withdrawal on, `admit` and `route` refuse with a named reason (`Withdrawn { class, at }`). | `admit` after withdrawal | `admit` at a version before withdrawal | | C4 | **Registration and withdrawal move a frame-visible version** (closes F3). | a frame sealed before a withdrawal fails `check` | a frame sealed after it passes | | C5 | **No dangling routes.** A class that is still routed cannot be withdrawn; the refusal names the positions. | withdraw while routed | withdraw after `retract` of every position | @@ -110,6 +138,8 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi ## 6. Left-side behaviour seats `0xF###` (WORKING-MODEL) +> ⊘ **Superseded by §1a (D13'').** Concept `0xFFFF` is not a seat that plugs claim; DT64 is its authority and registers it from compiled tables. The palette-seat precedent below still describes the mechanism a composing authority uses to route a reserved concept before the capability join. Left sides `0xF000 ..= 0xFFFE` are unallocated (O1). + - **Precedent, VERIFIED-IN-CODE:** `OgarAuthority::activate` (`lance-graph-ogar/src/lib.rs:565-660`) routes a reserved range outside the minted codebook through its own arm before the capability join: palette seats `0x17XX` (`is_palette_seat` `:501`, `palette_seat_owner` `:541`, `impersonated_seat` `:550`). A claimed seat is owner-checked (`UnexpectedConsumer`); an unclaimed seat is plug-and-play; readings come from `plug_readings` (`:452`). - **Proposal:** behaviour seats `0xF000..=0xFFFF` take the same kind of arm: activation without minting each behaviour as a domain concept, an owner for C2/C7, and readings from the plug. @@ -119,12 +149,14 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi | # | question | owner | |---|---|---| -| O1 | Seat ownership for left `0xF###`: claimed by the first registrant (palette-seat style), or the whole range owned by lance-graph, registering on others' behalf? | operator | -| O2 | OGAR reserves `0xF0..=0xFF` as behaviour seats, never minted as domain concepts, with a mirror test that fails if a codebook row lands there. | OGAR owner | -| O3 | F5: exclude left-empty classids from `classid_canon_compat`, or retire the heuristic (which assumes the legacy order the 2026-10-10 ruling chose not to force-migrate). | operator | +| O1 | ~~Seat ownership for left `0xF###`~~ — answered for `0xFFFF` by D13'' (lance-graph owns it, DT64 registers). Open remainder: do left sides `0xF000 ..= 0xFFFE` ever hold anything? | operator | +| O2 | OGAR reserves concept `0xFFFF` (at least; domain `0xFF` if preferred) for lance-graph behaviour, never minted in `ogar-vocab`, with a mirror test that fails if a codebook row lands there. | OGAR owner | +| O3 | F5 for legacy `0x0000_XXXX` ids: exclude them, or retire the heuristic. No longer gates this plan (§1a). | operator | | O4 | Right-side `0xF###` selection: does one value name one stored selection over the existing 256-position basis, or one position in a wider basis (which widens `WideFieldMask` and `AlgebraRef.word` past `u8`)? D7' points to the first. | operator | | O5 | D-LITHO Q5: which lance-graph table versions the global → local selection, and its row shape (WORKING-MODEL: versions = frame revisions, one row per local position, read through a ClassView, selected by a `WideFieldMask`; it also holds the stored selections of D7'). | DR/DT owner | | O6 | Whether `recursive::trace` (#1896) stays as a semi-naive test oracle or is removed; either way it is documented as not the traceroute. | operator | +| O7 | The concern ranges inside `0xF###` (§1a table): confirm the digit-per-concern split and the order (relalg, XLOG, ONNX, TFLite, SQL, Gremlin). | operator | +| O8 | Where the composing authority lives: in `lance-graph-ogar` (which then depends on `lance-graph-dt64`), or in the binary that holds both authorities. | operator | --- @@ -133,13 +165,13 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi | id | item | gate (red first, disable-verified) | |---|---|---| | D-DT64-7-0 | this document and the board rows | docs review | -| D-DT64-7-1 | F5 falsifier: `classid_canon_compat(0x0000_F123) == 0x0000` | red on `main` today | -| D-DT64-7-2 | C1–C8 as tests over a `BindStore` withdrawal API, behind the activation of C2 | each constraint's fire and silent twin (§5) | -| D-DT64-7-3 | Frozen polyfill table: a compile-time lance-graph table under `0x0000` (opcode, label, arity, pushes-result), with a parity test against `ogar_r2il::R2ILVocabulary` where OGAR is compiled | parity test red on one deliberately changed row; `lance-graph-r2il` builds with `ogar-loco` / `ogar-r2il` optional | -| D-DT64-7-4 | behaviour-seat arm in `OgarAuthority` (§6) | claimed seat refuses another consumer; unclaimed seat activates; a `0xF###` codebook row fails the mirror test | +| D-DT64-7-1 | F5 falsifier for legacy ids: `classid_canon_compat(0x0000_F123) == 0x0000`; plus the silent twin `classid_canon_compat(0xFFFF_F000) == 0xFFFF` (green today) | first red on `main` today; no longer gating (§1a) | +| D-DT64-7-2 | C1–C8 as tests over a `BindStore` withdrawal API, behind the activation of C2 (C1 as revised: a plug cannot register under `0xFFFF`) | each constraint's fire and silent twin (§5) | +| D-DT64-7-3 | Frozen polyfill table: a compile-time lance-graph table at `0xFFFF :: 0xF000` (opcode, label, arity, pushes-result), registered by DT64, with a parity test against `ogar_r2il::R2ILVocabulary` where OGAR is compiled | parity test red on one deliberately changed row; `lance-graph-r2il` builds with `ogar-loco` / `ogar-r2il` optional | +| D-DT64-7-4 | DT64 `CapabilityAuthority` for concept `0xFFFF`, plus the composing authority (O8) | a plug claiming `0xFFFF` is refused; DT64 activates it; any other concept still reaches `OgarAuthority`; an `ogar-vocab` row at `0xFFFF` fails the mirror test (O2) | | D-DT64-7-5 | O5 table design | D-LITHO Q5 answered; a selection read under a stale version refuses (`Pop`'s `Stale`, F7) | -D-DT64-7-1 and D-DT64-7-3 need no open decision beyond O3 and O1 respectively; D-DT64-7-2 needs O1; D-DT64-7-4 needs O1 and O2; D-DT64-7-5 needs O5. +D-DT64-7-1 needs none; D-DT64-7-3 needs O7 (the `0xF0__` range only); D-DT64-7-2 needs O8; D-DT64-7-4 needs O2 and O8; D-DT64-7-5 needs O5. --- From e2b9be6dc69ca12dfb76416d7647cbdf084bbc0b Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 20:38:19 +0000 Subject: [PATCH 5/6] D-DT64-7: polyglot aliasing over one algebra, binding by position Operator decision: behaviour is normalized across languages as aliases over one algebra, and a classid replaces hardcoded strings. Recorded against binding.rs: prepare binds a word by its label through R2ILVocabulary (cold); run re-resolves nothing. The plan reverses the direction: the Frozen table fixes positions, each language supplies a ClassView of labels. Adds D-DT64-7-6 with a parity gate and an ns timing of prepare and run; the overhead claim stays a hypothesis. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF --- .claude/board/STATUS_BOARD.md | 1 + ...-7-behaviour-addressing-registration-v1.md | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index c34eb7750..882845261 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -9,6 +9,7 @@ Plan: `.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md`. Docs onl | D-DT64-7-2 | `BindStore` withdrawal with constraints C1–C8, behind an activation | Queued | O8 | | D-DT64-7-3 | compile-time Frozen polyfill table at `0xFFFF :: 0xF000`, registered by DT64, parity test against `R2ILVocabulary`; `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il` | Queued | O7 | | D-DT64-7-4 | DT64 `CapabilityAuthority` for concept `0xFFFF` + the composing authority | Queued | O2 (OGAR owner), O8 | +| D-DT64-7-6 | polyglot alias views (C, Rust, Java, SQL) over one Frozen algebra: words bound by position, names as per-language `ClassView` labels; `prepare`/`run` timed in ns | Queued | D-DT64-7-3, O7 | | D-DT64-7-5 | the versioned global → local selection table (D-LITHO Q5) | Queued | O5 (DR/DT owner) | ## D-MIST-NATIVE — Mistaber's Kripke holdings over the DR64 relation register (2026-10-30) diff --git a/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md index a8ca81372..080c28077 100644 --- a/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md +++ b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md @@ -55,9 +55,22 @@ WORKING-MODEL consequences, each checked against `main` `b38d88e`: | `0xF4__`, `0xF5__` | SQL, Gremlin (D3) | when each surface lands | | `0xF6__ ..= 0xFF__` | reserved | — | ---- +### 1b. Polyglot aliasing over one algebra (operator, 2026-10-31, later in session) + +| # | decision | +|---|---| +| D16'' | **Behaviour is normalized across languages** (C, Rust, Java, SQL and the other frontends): each language's operator names are **aliases over one algebra**, not separate behaviour. | +| D17'' | **A classid is cleaner than a hardcoded string.** Identity is the Frozen classid plus the word position; a name is never the key. | + +VERIFIED-IN-CODE (`lance-graph-r2il/src/binding.rs` module doc, step 3, and `fn opcode`): today the reverse holds. `prepare` reads the word's label from the lens's `ClassView` and scans `R2ILVocabulary` for an opcode with that name; the module doc states it: "the position a lens gives a word is free and only the name binds". The string join is in `prepare` (cold). `run` (hot) re-resolves nothing. + +WORKING-MODEL: + +- **Position binds, labels alias.** The Frozen table at `0xFFFF :: 0xF0__` fixes each word's position and its semantics. Each language supplies a `ClassView` over the same positions whose labels are that language's names (SQL `SUM`, a Java method name, a Rust method name, a C symbol). This is the mechanism DT64 already documents ("labels are resolved late through that view"); only the direction of binding changes. +- **Normalization is a parity test, not a convention.** For every alias view, the label at a position must resolve to the same `AlgebraRef`; a name that maps to two positions, or a position with no name in a view that claims full coverage, refuses. +- **What this does to the concern table (O7).** A language that only renames the shared algebra gets an alias view, not a concern range. A concern range under `0xF###` is for behaviour with no equivalent in the shared algebra (tensor operators for ONNX and TFLite; whatever XLOG adds beyond the relational core). SQL's three-valued logic is a known case: `prepare` refuses `Truth::ThreeValued` today (`binding.rs`), so SQL's NULL behaviour either gets its own words or stays refused. The `F4__` / `F5__` rows for SQL and Gremlin are therefore provisional. +- **Calling overhead (HYPOTHESIS, unmeasured).** Binding by position removes the label scan from `prepare`. Nothing in the code shows a string lookup on the hot path, so any per-call cost on that path comes from somewhere not yet identified. The probe (D-DT64-7-6) reports the cost of `prepare` and of one `run`, each in nanoseconds, before and after; per the workspace rule, a millisecond reading is a failed gate, not a result. -## 2. The classid, both sides ```text left (high 16): concept right (low 16): selection within it @@ -155,7 +168,7 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi | O4 | Right-side `0xF###` selection: does one value name one stored selection over the existing 256-position basis, or one position in a wider basis (which widens `WideFieldMask` and `AlgebraRef.word` past `u8`)? D7' points to the first. | operator | | O5 | D-LITHO Q5: which lance-graph table versions the global → local selection, and its row shape (WORKING-MODEL: versions = frame revisions, one row per local position, read through a ClassView, selected by a `WideFieldMask`; it also holds the stored selections of D7'). | DR/DT owner | | O6 | Whether `recursive::trace` (#1896) stays as a semi-naive test oracle or is removed; either way it is documented as not the traceroute. | operator | -| O7 | The concern ranges inside `0xF###` (§1a table): confirm the digit-per-concern split and the order (relalg, XLOG, ONNX, TFLite, SQL, Gremlin). | operator | +| O7 | The concern ranges inside `0xF###` (§1a table): confirm the digit-per-concern split and the order. Per §1b, languages that only rename the shared algebra become alias views; which of SQL, Gremlin and XLOG keep a range? | operator | | O8 | Where the composing authority lives: in `lance-graph-ogar` (which then depends on `lance-graph-dt64`), or in the binary that holds both authorities. | operator | --- @@ -169,9 +182,10 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi | D-DT64-7-2 | C1–C8 as tests over a `BindStore` withdrawal API, behind the activation of C2 (C1 as revised: a plug cannot register under `0xFFFF`) | each constraint's fire and silent twin (§5) | | D-DT64-7-3 | Frozen polyfill table: a compile-time lance-graph table at `0xFFFF :: 0xF000` (opcode, label, arity, pushes-result), registered by DT64, with a parity test against `ogar_r2il::R2ILVocabulary` where OGAR is compiled | parity test red on one deliberately changed row; `lance-graph-r2il` builds with `ogar-loco` / `ogar-r2il` optional | | D-DT64-7-4 | DT64 `CapabilityAuthority` for concept `0xFFFF`, plus the composing authority (O8) | a plug claiming `0xFFFF` is refused; DT64 activates it; any other concept still reaches `OgarAuthority`; an `ogar-vocab` row at `0xFFFF` fails the mirror test (O2) | +| D-DT64-7-6 | polyglot alias views over `0xFFFF :: 0xF000` (§1b): position-bound words, one `ClassView` per language, binding by position instead of `R2ILVocabulary` label scan | every alias resolves to the same `AlgebraRef` (red on one deliberately duplicated name); `prepare` and `run` timed in ns before and after | | D-DT64-7-5 | O5 table design | D-LITHO Q5 answered; a selection read under a stale version refuses (`Pop`'s `Stale`, F7) | -D-DT64-7-1 needs none; D-DT64-7-3 needs O7 (the `0xF0__` range only); D-DT64-7-2 needs O8; D-DT64-7-4 needs O2 and O8; D-DT64-7-5 needs O5. +D-DT64-7-6 follows D-DT64-7-3; D-DT64-7-1 needs none; D-DT64-7-3 needs O7 (the `0xF0__` range only); D-DT64-7-2 needs O8; D-DT64-7-4 needs O2 and O8; D-DT64-7-5 needs O5. --- From ca88640b2a650fc9e2723585b1646242a81c7c06 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 20:47:16 +0000 Subject: [PATCH 6/6] D-DT64-7: operator-set capacity is per lens; add the semantic union census 256 words is a per-lens limit (AlgebraRef word: u8, MAX_FIELDS); a concern range holds up to 256 lenses, so a large operator set such as full TensorFlow spans several lenses. Datatype belongs to the lens's fields, not the word. Outside counts (GGML, Burn IR, ONNX) are marked secondhand; D-DT64-7-7 recounts them from source and maps them to shared words or concern ranges. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF --- .claude/board/STATUS_BOARD.md | 1 + .../plans/d-dt64-7-behaviour-addressing-registration-v1.md | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 882845261..f8d09a9f0 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -10,6 +10,7 @@ Plan: `.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md`. Docs onl | D-DT64-7-3 | compile-time Frozen polyfill table at `0xFFFF :: 0xF000`, registered by DT64, parity test against `R2ILVocabulary`; `ogar-loco` / `ogar-r2il` optional in `lance-graph-r2il` | Queued | O7 | | D-DT64-7-4 | DT64 `CapabilityAuthority` for concept `0xFFFF` + the composing authority | Queued | O2 (OGAR owner), O8 | | D-DT64-7-6 | polyglot alias views (C, Rust, Java, SQL) over one Frozen algebra: words bound by position, names as per-language `ClassView` labels; `prepare`/`run` timed in ns | Queued | D-DT64-7-3, O7 | +| D-DT64-7-7 | semantic union census of operator sets (ONNX, TF, TFLite, GGML, Burn IR, R2IL, XLOG) after aliasing; decides the `0xF0__` layout and the tensor ranges | Queued | counts recounted from source | | D-DT64-7-5 | the versioned global → local selection table (D-LITHO Q5) | Queued | O5 (DR/DT owner) | ## D-MIST-NATIVE — Mistaber's Kripke holdings over the DR64 relation register (2026-10-30) diff --git a/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md index 080c28077..2879fdd6c 100644 --- a/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md +++ b/.claude/plans/d-dt64-7-behaviour-addressing-registration-v1.md @@ -69,6 +69,9 @@ WORKING-MODEL: - **Position binds, labels alias.** The Frozen table at `0xFFFF :: 0xF0__` fixes each word's position and its semantics. Each language supplies a `ClassView` over the same positions whose labels are that language's names (SQL `SUM`, a Java method name, a Rust method name, a C symbol). This is the mechanism DT64 already documents ("labels are resolved late through that view"); only the direction of binding changes. - **Normalization is a parity test, not a convention.** For every alias view, the label at a position must resolve to the same `AlgebraRef`; a name that maps to two positions, or a position with no name in a view that claims full coverage, refuses. - **What this does to the concern table (O7).** A language that only renames the shared algebra gets an alias view, not a concern range. A concern range under `0xF###` is for behaviour with no equivalent in the shared algebra (tensor operators for ONNX and TFLite; whatever XLOG adds beyond the relational core). SQL's three-valued logic is a known case: `prepare` refuses `Truth::ThreeValued` today (`binding.rs`), so SQL's NULL behaviour either gets its own words or stays refused. The `F4__` / `F5__` rows for SQL and Gremlin are therefore provisional. +- **Capacity: 256 is per lens, not per namespace.** A word is `AlgebraRef { lens, word: u8 }` and a lens holds at most `MAX_FIELDS = 256` words (VERIFIED-IN-CODE, `lance-graph-dt64`). A concern range `0xF#__` holds up to 256 lens classids, so up to 65,536 words per concern. A large operator set therefore spans several lenses in its range; it does not need a wider word. Operator figure: TensorFlow (not Lite) has about 1,500 ops, which is about six lenses. Figures relayed from an outside summary, SECONDHAND and not recounted here: GGML graph opcodes 102, Burn IR 212 shared operation kinds (328 counting float/int/bool variants separately), ONNX about 180. +- **Datatype belongs to the lens, not the word.** The Burn IR count above is lower than its variant count because one operation kind serves several tensor types. The same split holds here: an `Effect` is a word plus ordered operands (`lance-graph-dt64`), and the operand types are the `ClassView`'s fields. A dtype-specific variant is not a new word. +- **The semantic union is the open question, not the ceiling.** After aliasing (above), how many distinct words do relalg, R2IL, XLOG, ONNX, TF/TFLite, GGML and Burn need between them, and which belong in the shared lens versus a concern range? That count decides the layout of `0xF0__` and the tensor ranges (D-DT64-7-7). - **Calling overhead (HYPOTHESIS, unmeasured).** Binding by position removes the label scan from `prepare`. Nothing in the code shows a string lookup on the hot path, so any per-call cost on that path comes from somewhere not yet identified. The probe (D-DT64-7-6) reports the cost of `prepare` and of one `run`, each in nanoseconds, before and after; per the workspace rule, a millisecond reading is a failed gate, not a result. @@ -168,7 +171,7 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi | O4 | Right-side `0xF###` selection: does one value name one stored selection over the existing 256-position basis, or one position in a wider basis (which widens `WideFieldMask` and `AlgebraRef.word` past `u8`)? D7' points to the first. | operator | | O5 | D-LITHO Q5: which lance-graph table versions the global → local selection, and its row shape (WORKING-MODEL: versions = frame revisions, one row per local position, read through a ClassView, selected by a `WideFieldMask`; it also holds the stored selections of D7'). | DR/DT owner | | O6 | Whether `recursive::trace` (#1896) stays as a semi-naive test oracle or is removed; either way it is documented as not the traceroute. | operator | -| O7 | The concern ranges inside `0xF###` (§1a table): confirm the digit-per-concern split and the order. Per §1b, languages that only rename the shared algebra become alias views; which of SQL, Gremlin and XLOG keep a range? | operator | +| O7 | The concern ranges inside `0xF###` (§1a table): confirm the digit-per-concern split and the order. Per §1b, languages that only rename the shared algebra become alias views; which of SQL, Gremlin and XLOG keep a range? Does full TensorFlow share TFLite's range, or take its own? | operator | | O8 | Where the composing authority lives: in `lance-graph-ogar` (which then depends on `lance-graph-dt64`), or in the binary that holds both authorities. | operator | --- @@ -183,6 +186,7 @@ Each constraint is a test that fires plus a twin that stays silent, on non-trivi | D-DT64-7-3 | Frozen polyfill table: a compile-time lance-graph table at `0xFFFF :: 0xF000` (opcode, label, arity, pushes-result), registered by DT64, with a parity test against `ogar_r2il::R2ILVocabulary` where OGAR is compiled | parity test red on one deliberately changed row; `lance-graph-r2il` builds with `ogar-loco` / `ogar-r2il` optional | | D-DT64-7-4 | DT64 `CapabilityAuthority` for concept `0xFFFF`, plus the composing authority (O8) | a plug claiming `0xFFFF` is refused; DT64 activates it; any other concept still reaches `OgarAuthority`; an `ogar-vocab` row at `0xFFFF` fails the mirror test (O2) | | D-DT64-7-6 | polyglot alias views over `0xFFFF :: 0xF000` (§1b): position-bound words, one `ClassView` per language, binding by position instead of `R2ILVocabulary` label scan | every alias resolves to the same `AlgebraRef` (red on one deliberately duplicated name); `prepare` and `run` timed in ns before and after | +| D-DT64-7-7 | semantic union census (§1b): published operator enums of ONNX, TF, TFLite, GGML and Burn IR, plus R2IL and XLOG, each recounted from source, mapped to shared words or to a concern range | every count carries the command or file it came from; the mapping is checked by the D-DT64-7-6 parity test | | D-DT64-7-5 | O5 table design | D-LITHO Q5 answered; a selection read under a stale version refuses (`Pop`'s `Stale`, F7) | D-DT64-7-6 follows D-DT64-7-3; D-DT64-7-1 needs none; D-DT64-7-3 needs O7 (the `0xF0__` range only); D-DT64-7-2 needs O8; D-DT64-7-4 needs O2 and O8; D-DT64-7-5 needs O5.