diff --git a/.cargo/config.toml b/.cargo/config.toml index 878fb7eba..6fcf2a3da 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -52,13 +52,17 @@ # CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS, and `make publish` in # python/ sets RUSTFLAGS only on an x86_64 host. Note that the per-target # variable is JOINED with this file's entry, with `native` last (measured), so -# it cannot pin a build that sees this file. Anything below v3 still SIGILLs on the -# `simd_avx2` intrinsics, so never build with no target-cpu at all. A build with -# no target-cpu takes ndarray's AVX2 arm, and that arm is kept only as the -# validation oracle. Real builds go through the ndarray polyfill at a declared -# tier once its arms are validated against that oracle: `native` for local and -# host-bound builds, the explicit x86-64-v4 / `sapphirerapids` tier above for -# shipped artifacts. +# it cannot pin a build that sees this file. Below v3 ndarray has two real +# arms, each selected only by an explicit target-cpu: AVX without AVX2 +# (`simd_avx.rs`, ndarray `.cargo/config-avx.toml`) and x86-64-v2 (SSE4.2, no +# AVX; `simd_scalar.rs`, `.cargo/config-v2.toml`). A build with NO target-cpu +# gets neither: it compiles ndarray's AVX2 arm, which needs an AVX2 CPU, and +# ndarray's startup `cpu_guard` refuses to start it on a CPU without AVX2 +# instead of letting it SIGILL. That arm is kept only as the validation +# oracle, so do not ship a build with no target-cpu. Real builds go through +# the ndarray polyfill at a declared tier once its arms are validated against +# that oracle: `native` for local and host-bound builds, the explicit +# x86-64-v4 / `sapphirerapids` tier above for shipped artifacts. # # The two crypto cfgs ndarray's config also carries (`curve25519_dalek_backend`, # `poly1305_force_soft`) are deliberately NOT repeated: neither crate is in diff --git a/.claude/board/LATEST_STATE.md b/.claude/board/LATEST_STATE.md index 7b5c830d4..fad59c90b 100644 --- a/.claude/board/LATEST_STATE.md +++ b/.claude/board/LATEST_STATE.md @@ -1,10 +1,14 @@ +## 2026-10-16 — synergy map since #1579 (entry `2026-10-16-synergy-map-since-1579.md`, in PR) + +- Revises every point of the #1579 map against merges #1580–#1591. D2 (preimage op) closed as a violation; L6 closed (#1544 closed); X17 and D8 partly closed by #1582. Decisions recorded: 43..45 amended to orientation in the contract, activation becomes a row field, OpenPSI modulators only into qualia. + ## 2026-10-16 — main after #1591 (merged `e53f2325`); ledger revision (c) in PR - **On main since #1581:** #1582 (doc drift, OpenCog oracle-only decision), #1584/#1585 (D-ASM follow-ups queued), #1586/#1587 (WCOJ map and probes; `seek_from`, `is_alpha_acyclic`), #1588 (CATS three-valued binding), #1589 (arc catch-up), #1590 (gather designs bannered as violations), #1591 (`deepnsm_v2::wire`: every CE64 field of a parsed triple, Gadamer gate first; plan D-CGW-0..14). - **In PR:** `LEDGER-REVISION-2026-10-16c.md`; arc entries for #1549 and #1581. - **Flagged:** bits 50..52 now carry two opposite encodings in code (pyramid 7 → 0 vs `with_novelty_wisdom` 1 → 7). -## 2026-10-16 — CE64 grammar wiring (branch `ccr-9f3b8075-74u47l-ce64-grammar-wiring`, in PR) +## 2026-10-16 — CE64 grammar wiring (#1591, merged `e53f2325`) - `deepnsm-v2::wire` writes every CausalEdge64 field of a parsed triple from a named source, with the Gadamer gate (`contract::revision`) deciding before anything is counted; W is the statement's Markov arc in a `WitnessTable<64>`; 43..45 is the Haspelmath dative-map function; loci carry Antecedent, TEKAMOLO, Quorum and Contradiction pointers. Probe: `lance-graph-quack/examples/wired_reasoning_probe.rs`. Plan: `ce64-grammar-wiring-v1.md` (D-CGW-0..12). - Contract inventory delta: none (consumes `revision`, `witness_table`, `causal_witness`, `epistemic_state5`). `deepnsm-v2` gains `wire` and `DativeFunction::ALL`; `causal-edge` gains `activation` / `novelty_wisdom` accessors. diff --git a/.claude/board/PR_ARC_INVENTORY.md b/.claude/board/PR_ARC_INVENTORY.md index ca0da5eae..b4aaadb46 100644 --- a/.claude/board/PR_ARC_INVENTORY.md +++ b/.claude/board/PR_ARC_INVENTORY.md @@ -1,3 +1,10 @@ +## 2026-10-16 — lance-graph PR #1591 (merged `e53f2325`, branch `ccr-9f3b8075-74u47l-ce64-grammar-wiring`, head `cd1b1b3c`, 24 commits incl. a merge of main) — deepnsm-v2 wire: every CE64 field of a parsed triple from its source, Gadamer gate first; plan D-CGW-0..14 + +- **Added:** `deepnsm_v2::wire` (verses → rows: F/C from the arm, Pearl from TEKAMOLO, 43..45 = Haspelmath dative function, W = the statement's Markov arc in `WitnessTable<64>`, epistemic state from the support balance, loci Antecedent / TEKAMOLO / Quorum / Contradiction); the Gadamer gate (`contract::revision`) admits before anything is counted; `DativeFunction::ALL`; `causal-edge` `activation` / `novelty_wisdom` accessors; probe `lance-graph-quack/examples/wired_reasoning_probe.rs` (741 rows, 0 rule violations); plan `ce64-grammar-wiring-v1.md`; entry `2026-10-16-grammar-coordinates-annotation-wiring.md` §10–11. +- **Locked:** each CE64 field has one global meaning held in the `causal-edge` contract (the versioned reading binding was withdrawn the same day); 46..49 stays the inference mantissa. +- **Deferred / open:** wire edges stay in the probe until D-CGW-1 lands; activation is written into 46..49 today, against the mantissa rule (D-CGW-9); D-CGW-2..14. +- **Confidence:** deepnsm-v2 tests pass (wire 27 tests; 11 disable runs red, including the two Codex P2 fixes in `2898f124`); causal-edge tests pass; clippy clean on the lib and the quack examples. + ## 2026-10-16 — lance-graph PR #1581 (merged `95c0d104`, branch `ccr-b2e415d9-4jfvyk`, head `67d0698a`, 3 commits) — recovery ledger deduplicated against #1579; DOC-WIRE (2); N21 - **Added:** `.claude/research/2026-10-recovery/LEDGER-UPDATE-2026-10-16b.md`; dated corrections on three docs that still read bits 59..60 as two readings (`causal-plane-inventory.md`, `TYPE_DUPLICATION_MAP.md`, `causaledge64-mailbox-rename-soa-v1.md`); entry `2026-10-16-ledger-update-dedup-1579.md`; arc entry for #1578. diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 8dfda1d48..03b0380e8 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -5,7 +5,7 @@ Plan: `.claude/plans/ce64-grammar-wiring-v1.md`. Entry: `entries/2026-10-16-gram | D-id | scope | status | gate / falsifier | |---|---|---|---| | **D-CGW-0** | `deepnsm-v2::wire`: CE64 0..63 from named sources; Gadamer gate before counting; W = Markov arc in `WitnessTable<64>`; activation = update-caused frequency change; 43..45 = Haspelmath function; Antecedent / TEKAMOLO / Quorum / Contradiction loci; qualia register; `wired_reasoning_probe` | In PR | 229 tests; probe 741 rows, 5 rules, 0 violations; disable runs red per entry §7–§11 | -| **D-CGW-1** | one global meaning per CE64 field, held in the `causal-edge` contract (no per-tenant readings; superseded the same day); amend 43..45 to orientation with all triad readers migrated | Queued | one code table shared by accessor, writer and readers; field isolation 43..49. **Gate:** wire edges stay in the probe until this lands | +| **D-CGW-1** | one global meaning per CE64 field, held in the `causal-edge` contract (no per-tenant readings; superseded the same day); amend 43..45 to orientation with all triad readers migrated | Queued — approved 2026-10-16 as its own test-first PR (readers census: synergy map since #1579 §4 S8; also `syllogize`/`execute`, ledger N1) | one code table shared by accessor, writer and readers; field isolation 43..49. **Gate:** wire edges stay in the probe until this lands | | **D-CGW-2** | frequency-ranked default reading (COCA, DeReKo) + antecedent-tested promotion of the alternative (relative pronoun) with agreement | Queued | `der Mann, der …` promoted; `der Mann gab der Frau …` silent; English `that` promoted without a COCA Rel tag | | **D-CGW-3** | case morphology decides argument order in the parser (`Den Hund biss der Mann`) | Queued | OVS flips, SVO unchanged, syncretic case unresolved; UD German GSD dev measured | | **D-CGW-4** | counterfactual lanes: `CausalCandidate` → `Causes` only with `IncreaseEligible` ∧ `Necessary` | Queued | necessary / dispensable / not-run triple | @@ -13,12 +13,23 @@ Plan: `.claude/plans/ce64-grammar-wiring-v1.md`. Entry: `entries/2026-10-16-gram | **D-CGW-6** | witness arcs across 63-row cohorts (196/741 probe rows broke) | Queued | arc walk across cohorts; `arc_breaks` 0 for the fixture | | **D-CGW-7** | loci 24 → 32 × i4 over the full 16-byte lane | Queued | envelope audit; field isolation over 32 slots | | **D-CGW-8** | S/P/O identity as 8 × u8:u8 rails beside the u8 palette | Queued | decision: palette stays in 0..23 | -| **D-CGW-9** | 46..49 stays the ISA inference mantissa (law); activation moves out of the edge until the contract gives it a field | Queued | every wire edge decodes through the mantissa decoder as the inference it states | +| **D-CGW-9** | 46..49 stays the ISA inference mantissa (law); activation moves out of the edge until the contract gives it a field | Queued — approved 2026-10-16: activation becomes a row field | every wire edge decodes through the mantissa decoder as the inference it states | | **D-CGW-10** | `ce64-semantic-upper-half.md`: the grammar reading of 43..45 declared beside the triad | Queued | doc only | | **D-CGW-11** | Judicantis and multifunctional forms without a lane: measure before adding context rules | Queued | measurement on a corpus with attested forms | | **D-CGW-12** | word → qualia index source (WordNet × Jina) | Deferred (operator) | — | | **D-CGW-13** | all oracles (Java OpenNARS, ONA, MeTTa, OpenCog, MORK) read out on the same CE64 fields | Queued | D-ORACLE readout | -| **D-CGW-14** | OpenPSI modulators as a qualia device profile into the #1571 PCS (demands stay goals) | Queued | — | +| **D-CGW-14** | OpenPSI modulators as a qualia device profile into the #1571 PCS (demands stay goals) | Queued — approved 2026-10-16: modulators only | — | + +## D-ARG — AriGraph onto addresses: strings prohibited → codebook labels → basins → SPOFC (2026-10-16) + +Order decided 2026-10-16; each step blocks the next. Finding: synergy map since #1579 (AriGraph keys `entity_index` / `spatial_edges` by `String` and turns a label's FNV hash into an identity via `label_fp`; no `NodeGuid`, HHTL or CE64 anywhere in it). + +| D-id | scope | status | gate / falsifier | +|---|---|---|---| +| **D-ARG-1** | strings prohibited: no `String` as a key or address in AriGraph (`EntityVocab`, `TripletGraph::entity_index`, `spatial_edges`, `label_fp` hash-as-identity) | Queued — decided 2026-10-16 | a test fails if any AriGraph key or address type holds a `String`; text survives only as a label view | +| **D-ARG-2** | codebook labels: every entity, relation and place resolves once through the label codebook to an id; parsing goes through the codebook | Queued (after D-ARG-1) | same graph built from text and from ids is equal; an unknown label is refused, never hashed | +| **D-ARG-3** | basins: `EpisodicBasins` keyed by codebook ids, rows given NodeGuid addresses through `deepnsm-v2` `promote::key_at`, real Cam96 `self_code` instead of rung-0 zeros | Queued (after D-ARG-2) | every basin row has a V3 key (V1 refused); `self_code` non-zero and reproducible from its members | +| **D-ARG-4** | SPOFC: AriGraph facts written as CE64 S/P/O (0..23, palette indices under the row's classid) plus F/C (24..39) from the basins | Queued (after D-ARG-3 and D-CGW-1) | facts decode back to the same S/P/O ids and F/C; no field outside 0..39 is written by this step | ## Catch-up (2026-10-16) — D-ids named by merged PRs that had no row @@ -84,7 +95,7 @@ Council 2026-10-16: `metta-datalog-assimilation-v1-council-v3.md` is the ratifie | **D-ASM-9** | `lance-graph-das` attention-broker probe: `w = edge.count / node.count`, rent, spread over the D-ASM-2 hop | Queued (not authorized; gated on D-ASM-2; crate not created) | attention values == DAS broker on one fixture; crate created only when the probe runs | | **D-ASM-10** | MORK as fourth oracle (Hyperon · PeTTa · datafrog · MORK), built as a separate binary outside the workspace, results only | Queued (not authorized) | MORK answers recorded beside the other three, divergences recorded, never averaged | | **D-ASM-11** | **⛔ VIOLATION — GATHER. DO NOT BUILD. CORRECT: D-HOLO-H14c / H14d.** Leapfrog probe on a cyclic 3-way join, split into Q-E (exact existence mask where the semijoin chain over-approximates) and Q-A (binding enumeration emitting keyed counts, D-ASM-3's missing carrier), written from the paper (Veldhuizen, *Leapfrog Triejoin*, arXiv 1210.0481v5, ICDT '14); the zipper shape is the probe's question, not a premise — arm A: leapfrog triejoin over the existing sealed ordered lanes, with aperture depth as `open`/`up` and a galloping `seek` from the cursor (the paper's amortized O(1 + log(N/m)); today's `bound_aperture` is a fresh `partition_point`); cleanest, already integrated; arm B: leapfrog triejoin over a prefix-shared trie zipper (PathMap-like), studied as prior art to learn from (worst-case optimal on cyclic joins, which a semijoin chain is not); the arm that wins on cost per element and integration is adopted, and what B teaches (variable order, prefix sharing, seek pattern) is carried into A either way | Queued (not authorized; gated on D-ASM-2). Pre-work in #1587: F4 fixture, bag oracle, `seek_from` (P-1), GYO (P-3), P-7 insufficiency shown (entry `2026-10-16-wcoj-probes-1-3.md`); closing atoms split into D-ASM-11A/B | Q-E: mask == datafrog's SET of head rows; Q-A: == datafrog as a BAG; per-element cost on the v4 arm only; margin and lessons pre-registered before the run; findings from B recorded even when A wins | -| **D-ASM-11A** | **⛔ VIOLATION — GATHER. DO NOT BUILD. CORRECT: D-HOLO-H14c / H14d.** Closing atom for functional relations: `Pred::EqU32ViaLane` + ndarray `eq_u32_via_lane_to_mask` (spec `.claude/plans/wcoj-closing-atoms-v1.md` §2) | Spec ratified 2026-10-16; authorized 2026-10-16 (ungated from D-ASM-2) | G1 exact mask == datafrog; G2 op count fixed and < the disjunction; G5-A disables | +| **D-ASM-11A** | **⛔ VIOLATION — GATHER. DO NOT BUILD. CORRECT: D-HOLO-H14c / H14d.** Closing atom for functional relations: `Pred::EqU32ViaLane` + ndarray `eq_u32_via_lane_to_mask` (spec `.claude/plans/wcoj-closing-atoms-v1.md` §2) | Spec ratified 2026-10-16; authorized 2026-10-16 (ungated from D-ASM-2); ndarray #364 closed unmerged 2026-10-16 | G1 exact mask == datafrog; G2 op count fixed and < the disjunction; G5-A disables | | **D-ASM-11B** | **⛔ VIOLATION — GATHER. DO NOT BUILD. CORRECT: D-HOLO-H14c / H14d.** Closing atom for n:m relations: `MaskOp::RunsMeet` (gated, beside `Gather`) + ndarray `runs_meet_under_to_mask` + lgj-abi status arm (spec §3) | Spec ratified 2026-10-16; authorized 2026-10-16, after D-ASM-11A | G0 fixtures; G3 edge oracle + projection; G4 elements-touched slope 1.5 ± 0.1; G5-B disables | | **D-ASM-12** | `lance-graph-cog`: deterministic content → NodeGuid atom address, shared by the D-ASM-1b binder and the `atomspace-lance` StorageNode adapter (which calls it); replaces the Rocks `n@`/`l@`/`a@`/`h@` indexes | Queued (not authorized; crate not created) | same content → same address from both callers; no string or hash index reachable from a row; adapter carries no layout of its own | | **D-ASM-13** | `lance-graph-cog` thinking API for OpenCog callers: a facade over existing algebra only — NAL (`lance-graph-nal`, global core methods), ONA-shaped term table + rule catalogue (D-ASM-5/6), R2IL procedures, relalg IR, all lowering to mask-risc | Queued (not authorized; gated on D-ASM-5/6 and D-ASM-12) | answers == OpenCog (PLN / ONA) on the same inputs, run outside the workspace; no new opcode, interpreter or executor (guard: every entry point resolves to an existing NAL/R2IL/relalg call) | diff --git a/.claude/board/entries/2026-10-16-synergy-map-since-1579.md b/.claude/board/entries/2026-10-16-synergy-map-since-1579.md new file mode 100644 index 000000000..91c887871 --- /dev/null +++ b/.claude/board/entries/2026-10-16-synergy-map-since-1579.md @@ -0,0 +1,317 @@ +# 2026-10-16 — Synergy map since #1579 (merges #1580–#1591) + +**Status:** OPEN — exploration map. It decides nothing; the operator chooses. +**Base:** `2026-10-16-synergy-map-since-1011.md` (#1579), which itself revised the +2026-10-11 fleet listing (A–F, X1–X19). This entry revises every point of #1579 +and adds what the twelve merges since then opened or closed. +**Delta read:** lance-graph #1580–#1591 (#1580 reached through a second parent). +ndarray, OGAR, ruff: no merge since #1579. ndarray #364 (`eq_u32_via_lane_to_mask`, +D-ASM-11A) and lance-graph #1544 (D-NALP-4 harvest) were both closed unmerged at +17:42 the same day. +**Method:** two Haiku cards (merge map, quotes); every item relied on was re-read +or re-counted on the main thread (ledger in §7). + +## 1. The base listing, point by point + +### A. `fearless_simd` vs `ndarray::simd` + +| point | #1579 | now | evidence | +|---|---|---|---| +| compile-time dispatch; no per-kernel runtime dispatch; v4-on-AVX2 SIGILL; 512-shaped names; SSE tiers; AVX2 integer polyfills | CLOSED | CLOSED | no ndarray merge | +| aarch64 guard | LOOSE | LOOSE | `cpu_guard.rs:318` still: "Covering it needs the kernel's HWCAP bits (`getauxval(AT_HWCAP)`)"; the only `getauxval` call reads `AT_PHDR` (`:465`) | +| generated backends | PARTIAL | PARTIAL | — | +| per-level parity, 18 types uncovered | LOOSE | LOOSE | no ndarray merge | +| MSRV prose | LOOSE | LOOSE | `ISS-NDARRAY-CANONICAL-COORDINATE-COUPLES-FLEET-MSRV` still OPEN (`ISSUES.md:194-196`) | +| one binary everywhere | EXCLUDED | EXCLUDED | — | + +### B. "Three places the CPU leaks back" + +| point | now | +|---|---| +| the build cares; runtime dispatch | CLOSED | +| consumers inherit no config | CLOSED for lance-graph. **LOOSE for lance-graph-java and sharper:** `native/lgj-abi/.cargo/config.toml:38` hard-codes `-Ctarget-cpu=x86-64-v4`, and its comment (`:2-3`) still says ndarray "pins v3/AVX2" (ndarray's default is `native`); `:34-36` says "one known host". The rules are `native` for host-bound builds and an explicit v4/sapphirerapids tier for shipped artifacts; lgj states neither choice, it hard-codes the second without the guard (X19) | + +### C. Accelerate — PARK, unchanged. ### E/F — unchanged. + +### D. Unsafe inventory — unchanged (no ndarray merge): missing `// SAFETY:`, CONSOLIDATE / SAFE-API, SAFE-CRATE question, 96 `is_x86_feature_detected!` sites unclassified. + +### Findings X1–X19 and TD rows + +| id | #1579 | now | evidence | +|---|---|---|---| +| X1, X7, X18 | CLOSED | CLOSED | — | +| X2–X4 ladybug | LOOSE | LOOSE | no ladybug merge | +| X6 | DECIDED (production v4) | DECIDED | — | +| X11 `mul_add` fused claim | LOOSE | LOOSE | `simd.rs:1241` "`F32x8::mul_add` is FUSED on every arm" vs `simd_wasm.rs:197-199` `f32x4_add(f32x4_mul(a,b),c)` without `relaxed-simd`; `simd_wasm.rs:37-40` documents the unfused path, so the two docs contradict each other; the test (`simd.rs:1247`) has no target cfg | +| X16 consumer raw intrinsics | LOOSE | LOOSE, not re-read | — | +| X17 forbidden remedies in records | LOOSE | **PARTLY CLOSED** by #1582: the `rev = ""` template in `CARGO-COMPUTE-SUBSTRATE.md` and `cargo-substrate-architect.md` now names `branch = "master"`. Still open: the MSRV issue's pinned-`rev` option; lichess-rs and tesseract-rs comments (no merge there, not re-read) | +| X19 lgj | LOOSE | LOOSE | see B; `check_build_cpu` has zero hits in lance-graph-java `origin/main`; `abi.rs:726-729` still asserts `AVX2 \| AVX512` | +| TD-NDARRAY-SIMD-POPCNT-NATIVE | LOOSE (strike b) | **(b) CLOSED** by #1582 (status line, `TECH_DEBT.md:1911`); (a) objdump the faulting instruction and (c) the `Cargo.toml` comment remain | + +## 2. The #1579 dots (D1–D8), revised + +| dot | #1579 | now | +|---|---|---| +| **D1** one set algebra, four spellings (relalg `Rel`, D-CMR-1 `Runs`, D-HOLO intervals, quack `fold_ranges`) | LOOSE, hinge D-RA-2 | unchanged; ledger N17 regraded to "waits on D-RA-2" (#1581) | +| **D2** one preimage op for four callers (D-CMR-5, D-ASM-2, D-RA-4, Gremlin `out()`) | LOOSE, H2 proposed it as a fold op | **CLOSED AS A VIOLATION** (#1590): D-CMR-5 and D-RA-4 carry the GATHER banner. A preimage under a mapping reads a position taken from another lane's values. What stays: a hop is a coordinate range and chained hops are range intersections (`fold_ranges`, already shipped); a join is a layout that puts the pair at one coordinate. H2 is withdrawn | +| **D3** read masks × clustering × prefilter | LOOSE (N18, N19) | unchanged | +| **D4** truth: per-row lane terminal vs scalar law (D-NALP-4) | LOOSE; L6 asked to close #1544 | **L6 CLOSED**: #1544 closed 17:42; the question lives in the D-NALP-4 row (`STATUS_BOARD.md:226`). The question itself stays open | +| **D5** label codebooks: one `Binder::code` | LOOSE | **sharper** (§3 S5): #1587 measured the bind surface; D-ASM-1/1b should implement `Binder`, codebook behind `code`, storage per classid (§9 of #1579). Binder implementers today: quack `Users` (test), glove-parity, report (test), sap `CatsBinder`, dir-sim `UserBinder`, dir-sim `IamBinder` (test) | +| **D6** SAG-5 queued on the withdrawn D-SAG-1 | LOOSE | unchanged | +| **D7** two ndarray ids | CLOSED | CLOSED | +| **D8** doc drift against rulings | LOOSE | **PARTLY CLOSED** (#1582: rev template, TD-POPCNT (b), `.cargo/config.toml` oracle note). Still open: X11 doc pair, X19 lgj comment, MSRV issue option, tesseract/lichess comments. `.cargo/config.toml:55-56` ("Anything below v3 still SIGILLs … never build with no target-cpu at all") now sits next to the oracle note (`:56-60`); the two sentences agree but the first predates the avx and v2 arms and reads as if no lower tier existed | + +## 3. What the twelve merges added + +| PR | arc | what closed | what it opened | +|---|---|---|---| +| #1580 | hydrate `zip` 2 → 9 | workspace resolves again (every 2.x release yanked) | — | +| #1581 | ledger dedup vs #1579 | DOC-WIRE (2), N21, C30 duplicate | DOC-WIRE (1), BAND-RETIRE, O30, O29, D-ASM authorization, D-RA-2 | +| #1582 | doc drift L3 + OpenCog decisions | X17 rev template, TD-POPCNT (b) | `lance-graph-cog` (Apache-2.0 API OpenCog calls), OpenCog = temporary oracle; `TD-ONTOLOGY-REGISTRY-HASH-LOOKUP-REVIEW-1` | +| #1583 | board record of #1582 | — | — | +| #1584, #1585 | D-ASM follow-ups queued: 1b, 8–13 | — | Atomese front end, `learn` measures in arm-discovery, `lance-graph-das` probe, MORK oracle, leapfrog arms, content → NodeGuid (D-ASM-12), thinking facade (D-ASM-13) | +| #1586 | WCOJ co-research map | — | P-1 … P-7 | +| #1587 | WCOJ probes 1–3 | measured: galloping is a middle band; hybrid seek fastest or within noise at every N/m on v4; GYO α-acyclicity; bag oracle (counts) | P-7: the exact triangle mask needs `s_dst[rb[a]] == tc[a]` | +| #1588 | SAP optional CATS fields through validity planes | the "SAP optional fields" candidate from #1587 (`OPTIONAL_CODE_FIELDS = [6, 7, 8, 16, 20, 21]`) | U64 instants still have no `FieldKind` | +| #1589 | board catch-up #1388–#1588 | 115 missing arc entries | open-items ledger (`2026-10-16-board-catchup-open-items.md`) | +| #1590 | VIOLATION banners on gather designs | D-QMB-0…5, D-ASM-11/11A/11B, D-CMR-5, D-RA-4, the WCOJ probe entry: marked, not deleted | "the gather surface that already exists in code is a separate change" | +| #1591 | CE64 grammar wiring (D-CGW-0) + plan D-CGW-1…14 | D-CGW-0: every CE64 field of a parsed triple from a named source; Gadamer gate before counting; Codex P2 ×2 fixed | D-CGW-1…14; the contract amendment (§5 decisions) | + +The P-7 conclusion is where the WCOJ arc and the violation ruling meet: the +probe proved that today's ops cannot express the triangle mask without reading +`s_dst` at `rb[a]`, and named a lane-to-lane-through-fk op as the missing piece. +That op is the forbidden shape. The ruling's answer is the layout: +`s_dst[i][a] : rb[i][a]` placed at one coordinate, compared side by side. The +measurements that survive: the hybrid seek (a cursor over a lane's own sorted +keys, no foreign read), GYO acyclicity (a property of the body, not of data), +the bag oracle (counts, a reference answer). The design that replaces D-ASM-11 +is not written yet (§5 H4). + +## 4. Synergies (the dots between arcs) + +**S1 — one fixed register, five reasoners.** D-CGW-1 makes every CE64 field +mean one thing everywhere (the edge is the fixed point, like GMT; it carries no +qualia). That is what makes D-CGW-13 possible: Java OpenNARS and ONA (runners +already pinned and built by the NAL audit), MeTTa (Hyperon + PeTTa, golden +corpus), OpenCog (temporary oracle, #1582) and MORK (D-ASM-10) each project their +native answer onto F, C, the Pearl question, orientation, the inference mantissa +and the certification ladder, with "not comparable" where an oracle has no such +notion. This is the readout of D-ORACLE (`d-oracle-fidelity-matrix-v1.md`), not a +second harness. Order: D-CGW-1, then one fixture through the two NARS runners +that already build, then the rest. + +**S2 — the wire gate is admission-as-mask.** D-RPF-4 is blocked on four +decisions, one of them "admission as mask" (open-items ledger). `wire` now runs +exactly that: per (S, P) group an `InterpretiveHorizon` with a `[u64; 4]` root +mask, set algebra only, counting after admission (G5). D-NALP-3's revision fold +is the counting half. The wire probe (741 rows, 593 fusions, 8 suspended, 132 +echoes) is measured evidence D-RPF-4 can take for that decision. + +**S3 — three devices into one PCS.** #1571 ships the PCS table and says the A2B +CLUT is unmeasured (`ISS-QUALIA-A2B-CLUT-UNMEASURED`). D-CGW-14 adds OpenPSI's +modulators as a device. D-SMD-4 already forbids reading CE64 bits as qualia +axes. All three are the same probe shape: drive named states, record a device +trace, fit device → PCS, hold one trace out. One probe harness serves the engine +telemetry CLUT and OpenPSI; OpenPSI demands stay goals (approved 2026-10-16). + +**S4 — orientation has two readers, one table.** D-CGW reads 43..45 as the +Haspelmath dative function for text; `moore_tenant` reads a Moore slot for +nonverbal Cartesian data; D-SMD-2 wants grammar topology from Haspelmath maps. +D-CGW-1 leaves open whether Moore and Haspelmath become one code table. Under the +one-meaning rule they must: either one table with both domains' codes, or the +field holds one of them and the other moves to a row lane. + +**S5 — Binder is the one bind surface.** CatsBinder's validity planes (#1588) +show three-valued binding working on a production binder. D-ASM-1b's Atomese +front end should implement `Binder` the same way: an unknown atom name is +`UnknownValue` (the trait never mints), an unbound optional is a validity plane, +and the per-classid label codebook (#1579 §9) sits behind `code`. Share the +trait, never the dictionary (CATS codes are batch-local; atom addresses are +stable). + +**S6 — one address minting path.** D-ASM-12 (content → NodeGuid for atoms), +`wire`'s verse markers and `lance-graph-hydrate` all turn content into addresses. +They should share `mint_for` (V3 tail), not grow three hashers. Not checked: +whether `wire` mints at all or only carries markers. + +**S7 — `syllogize` breaks the contract D-CGW-1 states.** Ledger N1: +"`syllogize` writes bits 50..52 as `0b111` and 53..63 as 0; `execute` writes W +and 59..63 as 0" — a derived edge is born as Astonishment and inherits no +witness or maturation. Under one meaning per field this is a contract violation, +not a style issue, so it belongs on the D-CGW-1 migration list beside the triad +readers. + +**S8 — the triad readers to migrate (census for D-CGW-1).** Calls to +`direction` / `set_direction` / `*_pathological` / `concern_level` on +`CausalEdge64`: `causal-edge/src/edge.rs` 7 (including `compose:808`, +`concern_level:907`), `network.rs:142` (Simpson check), `v2_layout_tests.rs` 4, +`lance-graph-planner/tests/moore_nars16_probe.rs` 3, `cognitive-shader-driver` +examples 4, `staunen_scheduler_probe.rs` 1, `deepnsm-v2/src/wire.rs` 9. The +`moore_tenant.rs:655` hit is `MooreNars16::direction`, a different type. Callers +that pass the triad positionally into `pack(...)` are not caught by this grep and +must be found from `pack`'s call sites. + +## 5. Closed ends, loose ends, fruit + +### Closed since #1579 + +1. zip 9: the workspace resolves (#1580). +2. DOC-WIRE (2), N21, C30 (#1581). +3. X17 rev template; TD-POPCNT (b) (#1582). +4. SAP optional CATS fields bind three-valued (#1588). +5. 115 missing arc entries (#1589). +6. Every gather design marked VIOLATION with the correct plans named (#1590); + D2 / H2 withdrawn with it. +7. D-CGW-0 (#1591); Codex P2 ×2. +8. #1544 and ndarray #364 closed unmerged (L6 done). +9. Decisions taken 2026-10-16 (the decisions are closed; the work is not): + 43..45 is to be amended in the contract to orientation, with the readers + migrated in its own test-first PR (H1, D-CGW-1, still Queued); 46..49 stays + the mantissa and activation is to become a row field (H2, D-CGW-9, Queued); + OpenPSI modulators are to enter qualia, demands not (D-CGW-14, Queued). The + `causal-edge` contract still exposes 43..45 as the S/P/O sign triad today. + +### Low-hanging + +| # | item | repo | check | +|---|---|---|---| +| L1 | board records for #1590 and #1591 (arc + LATEST_STATE); D-CGW-1/-9/-14 rows record the decisions | lance-graph | rides the next PR | +| L2 | narrow `simd.rs:1241` to "fused on every arm except wasm without `relaxed-simd`" and cfg the test, or fuse on wasm | ndarray | run the test on the wasm arm first | +| L3 | lgj: say which tier the artifact is (host-bound `native` or shipped v4), fix the "ndarray pins v3" comment, call `check_build_cpu()` in the handshake | lance-graph-java | needs push approval | +| L4 | `.cargo/config.toml:55-56`: name the avx/v2 arms so the sentence stops reading as "nothing below v3 exists" | lance-graph | **done in this PR** | +| L5 | STATUS rows: D-ASM-11A notes ndarray #364 closed unmerged | lance-graph | — | + +### High-hanging (a session each) + +| # | item | why | gate | +|---|---|---|---| +| H1 | **D-CGW-1 contract PR**: 43..45 = orientation in `layout.rs` / `edge.rs` docs; migrate the S8 readers; give the S/P/O pathology triad its own home; fix `syllogize`/`execute` (S7) | approved; unblocks D-CGW-13 and N1 | field-isolation matrix on 43..45; each migrated reader keeps its old answer through the new home; disable runs red | +| H2 | D-CGW-9: activation as a row field, out of 46..49 | approved | every wire edge decodes through the mantissa decoder as the inference it states | +| H3 | D-RA-2, then N17 absorption in the chosen IR | D1 | `¬(x ∧ (x ∨ y))` no wider than written | +| H4 | triangle closure as layout (replaces D-ASM-11): the pair placed at one coordinate, compared side by side | §3 | == datafrog and the bag oracle on F4; no read at a value-derived position | +| H5 | D-CGW-13 first fixture: ONA + Java OpenNARS on one NAL fixture, projected on CE64 | S1 | two disagreeing oracles never project to equal edges outside not-comparable fields | +| H6 | parity groups for the 18 uncovered facade types | A | one flipped scalar op goes red | +| H7 | aarch64 guard via `AT_HWCAP` | A | dotprod build under `qemu-aarch64 -cpu cortex-a53` reports, no SIGILL | + +### Heavy-hanging (multi-session, owner or ruling needed) + +| # | item | why | +|---|---|---| +| V1 | per-classid label codebook behind `Binder::code` (D-ASM-1/1b) | S5 | +| V2 | D-ASM W1–W3 authorization | ratified, not authorized | +| V3 | D-NALP-5…7 | D4 | +| V4 | SAG-5 rebased on D-CMR | D6 | +| V5 | D-HOLO H8/H9/H11/H12 | pre-registered, not run | +| V6 | D-CGW-14 OpenPSI device profile + the engine CLUT (one harness) | S3 | +| V7 | `lance-graph-cog` + `atomspace-lance` (D-ASM-12/13) | #1582, #1585 | +| V8 | Accelerate split, Kani, bytemuck/zerocopy | PARK | + +## 6. Not searched + +tesseract-rs, MedCare-rs, q2, HubSPO-rs, spear, a2ui-rs, ladybug-rs, lichess-rs +merges (the PR listing for ndarray, OGAR, ruff, tesseract-rs, lance-graph-java, +MedCare-rs and q2 showed nothing merged since 09:00 except the two closures); +X16; `pack(...)` positional triad callers; whether `wire` mints addresses. + +## 7. Harvest ledger (Haiku cards) + +| card | task | result | spot check | +|---|---|---|---| +| substrate-mapper | merge map #1580–#1591 | 12 rows, DONE; noted that #1580 is a second-parent merge and that some D-id hits are tails of `TD-` ids | file counts re-run: #1587 = 17, #1588 = 6 | +| quote-harvester | 10 sites | 9/10 at the stated place; Q1 path in my brief was wrong (`src/hpc/cpu_guard.rs` → `src/cpu_guard.rs`), the card found it and said so | `simd.rs:1241` re-read; #1544 / ndarray #364 `closed_at` re-queried; N1 quote re-read in `LEDGER-REVISION-2026-10-14.md:97` | + +## 8. CE64 as a fixed wire format: identity tenant, edge tenant, the 24×i4 loci (read 2026-10-16) + +Read: `causal-edge/src/layout.rs` (shifts and the coverage assert), `edge.rs` +accessors `activation` / `novelty_wisdom` (`:1112-1150`), +`contract/src/moore_tenant.rs` `from_ce64` / `ce64_upper` (`:196-219`), +`causal_witness.rs:1-330`, `.claude/v3/soa_layout/tenants.md`, +`witness-nibble-lane.md`. + +**Where CE64 lives.** Persisted: value tenant 2 `MaterializedEdges` (4 × u64 per +row). Hot: the MailboxSoA `edges` column. Projected: tenant 20 `MooreNars16` +(one u16 per Moore slot). The row's bytes 16..32 (`EdgeBlock = FacetCascade`) +are a second 4+12 facet, not CE64. + +**Identity vs edge.** The identity of a node is its 16-byte key (classid + 12-byte +facet). CE64 carries identity only as three u8 palette indices (0..23). Read as +a BF16 analogy this stays one global meaning: the field always means "palette +index of S, P, O", and the codebook it indexes is selected by the row's classid +(the class prefix selects the codebook), the way a mantissa's value depends on +the exponent without the mantissa bits changing meaning. Full S/P/O identity +(D-CGW-8, `8 × (u8:u8)` rails) belongs in an identity-side lane (a 128-bit +register tenant has room for exactly 8 rails), never in the edge. + +**Three places that already give one CE64 field a second meaning:** + +| bits | contract (`layout.rs`) | second reading | where | +|---|---|---|---| +| 46..49 | inference mantissa (`INFER_SHIFT`) | "activation" pressure | `edge.rs:1137-1145` (written by #1591: "one field, two vocabularies") | +| 46..49 | inference mantissa | `Energy4` | `moore_tenant.rs:202`, `:215` (`from_ce64` / `ce64_upper`) | +| 50..52 | plasticity (`PLAST_SHIFT`, read by `learn()`) | "novelty → wisdom" rung | `edge.rs:1112-1122` (written by #1591) | + +Under one meaning per field all three are defects, and the D-CGW-1 / D-CGW-9 PR +must remove them, not document them. 50..52 needs a ruling first: the contract +and `learn()` say plasticity, the upper-half doc and the earlier S7 rule say the +Staunen / witness ladder. + +**The 24 i4 loci are the provenance of the CE64 values.** The edge holds the +value (fixed meaning); the CausalWitness lane (tenant 14) holds, for the same row, +WHERE in the ±8 stream window the evidence for that value sits. Grouped: + +| group | loci | CE64 band it is the provenance of | other tenant pointed at | wire fills it? | +|---|---|---|---|---| +| circumstance (TEKAMOLO) | 0–3 | Pearl question 40..42 (Kausal → PO) | 13 Tekamolo | yes | +| meaning grounding | 4–6 S/P/O | payload 0..23 | identity / palette | no | +| grammar (Markov window) | 7 antecedent | orientation 43..45 (the clause span) | — | yes | +| episodic / AriGraph | 8–10 basin, supported-by, supports | topology 59..60, W 53..58 | 15 EpisodicBasin | no | +| reasoning provenance | 11–13 runbook, qualia, meaning level | mantissa 46..49 (rule), — , — | 1 Qualia | no | +| epistemic peers | 14–15 quorum, contradiction | F/C 24..39, certification 61..63 | — | yes | + +This is the co-location rule at work: value and provenance sit at the same row +coordinate in two lanes and are compared side by side, never reached through +each other. Qualia stays out of the edge and enters only as a pointer (locus 12), +which is the "edge is the fixed point, no qualia" rule. + +OPEN: groups 4–6 and 8–13 are unbound in `wire`. The AriGraph group (8–10) +points at long-lived relations through a ±8 window whose referents are usually +not 8 events away (witness-nibble-lane P2); the 32 × i4 extension (D-CGW-7) +would drop the classid from tenant 14, so the reading would have to be declared +the way `SlabReading::Register128` declares registers 16–17. + +## 9. H4 restated: the triangle is an intersection of planes, not a pointer chase (2026-10-16) + +The P-7 framing (`s_dst[rb[a]] == tc[a]`) is an array-of-structs reading: a row +holds a value that names another row, and closing the cycle follows it. In the +SoA substrate nothing points. A relation is a presence plane over a Cartesian +grid, and a tenant is read at its coordinate the same way whether or not it is +"nested", because the address is the coordinate. + +**Shape.** R over (a, b), S over (b, c), T over (a, c), each a presence plane +in its own two axes. A triangle at (a, b, c) is +`R[a][b] ∧ S[b][c] ∧ T[a][c]`: each plane read at the coordinate itself, one +three-input AND (one ternlog) per surviving coordinate. No lane is read at a +position taken from another lane's values, so no closing atom exists to build. + +**Where the work goes.** The cost is in choosing which coordinates to visit, +and that is run intersection inside each plane's own coordinates: for each `a`, +the run of `b` with `R[a][b]`; for each such `b`, the run of `c` with +`S[b][c]` intersected with the run of `c` with `T[a][c]`. The intersections are +computed symbolically first (`fold_ranges`, the D-TELEPORT Schnittpunkte); the +plane AND runs only on what remains. The intersection order is what gives the +worst-case-optimal bound, and the hybrid seek from #1587 belongs here: it seeks +inside one plane's own sorted run, never through another lane. + +**Pre-registered gates (not run):** +- G1 answer: the triangle set equals datafrog and the #1587 bag oracle on F4 and + on the mixed fixture with real triangles. +- G2 no value-derived read: no access in the program has an index computed from + another lane's values (checked on the lowered program, not by review). +- G3 work: coordinates visited stay within the AGM bound on F4 (counted). +- G4 disable runs: drop the T-run intersection and the answer grows to the + semijoin over-approximation; drop the symbolic intersection and the visited + count exceeds G3. + +OPEN: the plane layout for a sparse relation (bitmap per row of `a`, or runs per +`a`), and how a relation whose two axes have different coordinate spaces is +aligned. Both are layout questions, decided by measurement. diff --git a/.claude/board/entries/README.md b/.claude/board/entries/README.md index 9d39394a6..ea282263f 100644 --- a/.claude/board/entries/README.md +++ b/.claude/board/entries/README.md @@ -25,12 +25,13 @@ index row, (3) no duplicate entry id. Checks 1 and 2 are deliberately opposite directions; the stranding this convention prevents shows up in exactly one of them, never both. -361 entries, 2026-08-06 .. 2026-10-16. +362 entries, 2026-08-06 .. 2026-10-16. | date | entry id | finding | file | |---|---|---|---| | 2026-10-16 | `wcoj-probes-1-3` | | [2026-10-16-wcoj-probes-1-3.md](2026-10-16-wcoj-probes-1-3.md) | | 2026-10-16 | `wcoj-closing-atoms-council` | | [2026-10-16-wcoj-closing-atoms-council.md](2026-10-16-wcoj-closing-atoms-council.md) | +| 2026-10-16 | `synergy-map-since-1579` | | [2026-10-16-synergy-map-since-1579.md](2026-10-16-synergy-map-since-1579.md) | | 2026-10-16 | `synergy-map-since-1011` | | [2026-10-16-synergy-map-since-1011.md](2026-10-16-synergy-map-since-1011.md) | | 2026-10-16 | `opencog-oracle-scope` | | [2026-10-16-opencog-oracle-scope.md](2026-10-16-opencog-oracle-scope.md) | | 2026-10-16 | `D-ASM-1` | | [2026-10-16-metta-datalog-assimilation-council-v3.md](2026-10-16-metta-datalog-assimilation-council-v3.md) |