From 936077219cc33c519b59dc2caf94c43dbba4f012 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 04:44:55 +0000 Subject: [PATCH 1/2] board: synergy map since 2026-10-11, status sweep, #1575 record Revises the 2026-10-11 fleet listing (A-F, X1-X19, fruit tables) against 123 merges in lance-graph, ndarray, OGAR and ruff; names the closed ends, the loose ends and the connections between them. Sets ten STATUS rows that still read "In PR" to Shipped, each matched to its merged PR. Records #1575 in PR_ARC and LATEST_STATE, and the Haiku harvest runs in AGENT_LOG. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_011BMJnDBAfzcuQh5HeT39Rh --- .claude/board/AGENT_LOG.md | 7 + .claude/board/LATEST_STATE.md | 5 + .claude/board/PR_ARC_INVENTORY.md | 7 + .claude/board/STATUS_BOARD.md | 20 +- .../2026-10-16-synergy-map-since-1011.md | 208 ++++++++++++++++++ .claude/board/entries/README.md | 3 +- 6 files changed, 239 insertions(+), 11 deletions(-) create mode 100644 .claude/board/entries/2026-10-16-synergy-map-since-1011.md diff --git a/.claude/board/AGENT_LOG.md b/.claude/board/AGENT_LOG.md index 36e1f5780..5bbb91415 100644 --- a/.claude/board/AGENT_LOG.md +++ b/.claude/board/AGENT_LOG.md @@ -1,3 +1,10 @@ +## 2026-10-16 — synergy map since 2026-10-11 (five Haiku harvest cards) + +- substrate-mapper ×3 (merge maps for lance-graph and ndarray/OGAR/ruff; board delta), quote-harvester ×1 (13 stale sites), census-counter ×1 (ndarray counters). Read-only; outputs in the session scratchpad. +- Spot checks: merge counts re-run (97, 9); ten status rows re-read before editing; quotes Q3/Q5/Q6/Q10/Q13 re-read; parity type counts re-run with a wider pattern. +- Misses: census-counter made one out-of-card `send_message` call with a placeholder (failed, nothing sent); quote-harvester used `origin/main` for tesseract-rs as the brief said (its branch is `master`; brief error). No conclusion drawn by any card. +- Result: entry `2026-10-16-synergy-map-since-1011.md`; ten STATUS cells corrected. Written by the orchestrating main thread only. + ## 2026-10-16 — /5plus3 council: metta-datalog-assimilation W1–W3 spec (D-ASM-1..4) - Phase 0: spec v1 by the orchestrator; premise-auditor (Opus) → PREMISE-SPLIT (stamp sub-premise PREMISE-WRONG); six of its code claims re-read and confirmed; spec re-asked as v1.1 before any savant was cast. diff --git a/.claude/board/LATEST_STATE.md b/.claude/board/LATEST_STATE.md index 192eafbb2..087665b15 100644 --- a/.claude/board/LATEST_STATE.md +++ b/.claude/board/LATEST_STATE.md @@ -1,3 +1,8 @@ +## 2026-10-16 — main after #1575 (merged `7b62af48`), #1576 and #1577; synergy map in PR + +- **On `main`:** D-HOLO H14d probe and results (#1575); the metta-datalog council v3 spec (#1576) and its NO PINS amendment (#1577), both from another session, docs only. +- **In PR:** board entry `2026-10-16-synergy-map-since-1011.md` (the 2026-10-11 fleet listing revised against 123 merges) and a status sweep of ten rows that still read "In PR" after their PRs merged. + ## 2026-10-16 — main after #1573 (merged `461bbd1a`); D-HOLO H14c on main - **On `main` (#1573):** D-HOLO H14c probes and results (thought-first reads, Lance 13 masked I/O). Probe code only, no library change. diff --git a/.claude/board/PR_ARC_INVENTORY.md b/.claude/board/PR_ARC_INVENTORY.md index 7c21162c9..e9ff0831b 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 #1575 (merged `7b62af48`, branch `ccr-9f3b8075-74u47l-holo-h14d`, head `175f4374`, 8 commits) — D-HOLO H14d: logic → address mask → masked read → terminal, C only + +- **Added:** `crates/holo-h14d-probe` (excluded from the workspace; stages 1–4, checks 1–8 as tests, CSV main); plan `d-holo-h14d-logic-mask-read-v1` with amendments A1, A2 and results; entry `2026-10-16-d-holo-h14d-logic-mask-read.md` with the raw CSV; STATUS row D-HOLO-H14d; `ISS-RELALG-ABSORPTION-AFTER-DE-MORGAN`. +- **Locked:** the relalg rewrite decides 675 of 2,000 programs with no run and cuts passes 5,898 → 1,065; the address mask costs 2–10 ns per 64-address word; a Lance 13 prefilter scans exactly |R| rows, but bytes fall only for page-local survivors (uniform 1 % 1.00×, clustered 1 % 0.19×); the payload stage scans every word of R (prediction 4 falsified). +- **Deferred / open:** the absorption defect (2 of 2,000 programs widened); page-scale clustering on the write side; an object-storage arm. +- **Confidence:** medium; checks 1–8 green, five disable runs red, v4 only. + ## 2026-10-16 — lance-graph PR #1573 (merged `461bbd1a`, branch `ccr-9f3b8075-74u47l-holo-h14c`, head `e4681f10`, 11 commits) — D-HOLO H14c: thought-first reads, Hamming presence, Lance 13 masked I/O - **Added:** `holo_thought_first_probe` (point projection, mask-risc populations, terminal rows; 10 oracle tests) and the `lane_footprint` instrument in `lance-graph-mask-risc/examples`; `crates/holo-lance-masked-io-probe` (excluded from the workspace: Lance 13 masked reads, stale-map hazard across rewrites); plan `d-holo-h14c-thought-first-v1`, entry `2026-10-15-d-holo-h14c-thought-first.md`, STATUS row D-HOLO-H14c. diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index a78bbfc8f..96da13e68 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -73,7 +73,7 @@ Plan: `.claude/plans/d-cmr-concept-chain-normalization-v1.md`. Parent: D-CMR-RES | D-id | scope | status | gate / falsifier | |---|---|---|---| -| **D-CMR-0** | Plan, identity matrix, inventory, board rows | In PR | docs only; every inventory row cites code | +| **D-CMR-0** | Plan, identity matrix, inventory, board rows | Shipped #1532 (docs) | docs only; every inventory row cites code | | **D-CMR-1** | Set-theory IR core in the contract: `Runs` (∩ ∪ ∖, complement), residual `Res`, measures; pure | Queued | algebra laws vs materialized bitsets as oracle | | **D-CMR-2** | Lowering: runs → extents, residual → predicates per run; measurement levels geometry / optics / etch | Queued (after contract → mask-risc) | == row oracle; `Count` without residual reads zero rows | | **D-CMR-3** | Quack frontend: `Filter` → set IR (extent hoisting falls out) | Queued | identical answers on the quack suite; other-basis range stays residual | @@ -236,8 +236,8 @@ Plan: `.claude/plans/sql-polyfill-r2il-v1.md`. | **D-SQLP-1** | `FoldDialect` moved into a `lance-graph-r2il` crate | Shipped (#1479; workspace-excluded, own CI step; probe 40/40 unchanged, crate 7 tests) | existing `row_bridge.rs` tests unchanged and green; one arity table | | **D-TELEPORT-0** | Source-restricted fold probe: scan/join vs gated gather vs extent; range intersection; sorted-lane crossing point | Shipped (#1484, probe) | every arm equals the oracle on clustered and scattered layouts | | **D-TELEPORT-1** | quack `fold_ranges`: `Range ∧ Range` on one column lowers to the intersected range (empty stays a valid empty range; different columns, `OR`/`NOT` and `lo > hi` left alone) | Shipped (#1487) | one op and `Lowering::Range` for COUNT; 400 seeded conjunctions equal the oracle under both lowerings; disable runs red | -| **D-TELEPORT-2** | Lance 13 source-pruning probe: full scan vs row-range prefilter vs zone map vs B-tree vs index-only COUNT, sorted/partial/periodic/shuffled, with and without NULLs | In PR (probe) | every arm equals the oracle; index COUNT reads no data columns and stays exact after deletes | -| **D-PHOTO-0** | 64 resident populations × 1 Mi addresses: bit-sliced planes vs extents vs u64 signatures vs signature classes; update and spill costs | In PR (probe) | canonical + 20 random expressions equal the oracle under COUNT, Any, SUM and Rows in four regimes | +| **D-TELEPORT-2** | Lance 13 source-pruning probe: full scan vs row-range prefilter vs zone map vs B-tree vs index-only COUNT, sorted/partial/periodic/shuffled, with and without NULLs | Shipped #1489 (probe) | every arm equals the oracle; index COUNT reads no data columns and stays exact after deletes | +| **D-PHOTO-0** | 64 resident populations × 1 Mi addresses: bit-sliced planes vs extents vs u64 signatures vs signature classes; update and spill costs | Shipped #1489 (probe) | canonical + 20 random expressions equal the oracle under COUNT, Any, SUM and Rows in four regimes | | **D-SQLP-2** | First procedures (`filter_lt`, `sum`, `group_sum`, `margin`) as inlined R2IL call sequences (`lance-graph-r2il::procs`); `FoldDialect` wires `IntOr` and adds a fused mode (mask-risc `fuse`) beside the in-place mode | Shipped (#1484; 8 tests, six disable runs red; probe suite unchanged) | scalar-reference parity; disable runs red; both modes keep the same rows, fused holds ternlogs | | **D-SQLP-3** | Benchmark: direct ndarray vs hand-built `Program` vs interpreted procedure | Queued | interpreted ≤ 1.05× hand-built at 65,536 and 1M rows (pre-registered) | | **D-SQLP-4** | Build-time generator: declared procedure → Rust with const-generic opcodes | Queued, gated on D-SQLP-3 | ≤ 1.05× direct ndarray; no interpreter dispatch in the hot loop | @@ -252,9 +252,9 @@ Plan: `.claude/plans/key16-contiguous-match-v1.md`. | D-id | Deliverable | Status | Gate | |---|---|---|---| -| **D-KEY16-0** | Plan + board rows | In PR | — | -| **D-KEY16-1** | `ternary_match_strided16_to_mask` in ndarray's `simd-masking-parity` (strides 16/20/32/512, offsets 0..15, care bytes 12..16, tails) | Queued (ndarray PR) | green on the current kernel on every realization row; a wrong reference turns it red | -| **D-KEY16-2** | `examples/key16_match_probe.rs`: current kernel vs contiguous path vs AVX-512 gather at 65,536 and 1M rows | Queued (ndarray PR) | answers identical before timing; median of 101; avx512 and avx2 reported separately | +| **D-KEY16-0** | Plan + board rows | Shipped #1475 | — | +| **D-KEY16-1** | `ternary_match_strided16_to_mask` in ndarray's `simd-masking-parity` (strides 16/20/32/512, offsets 0..15, care bytes 12..16, tails) | Shipped (ndarray #356) | green on the current kernel on every realization row; a wrong reference turns it red | +| **D-KEY16-2** | `examples/key16_match_probe.rs`: current kernel vs contiguous path vs AVX-512 gather at 65,536 and 1M rows | Shipped (ndarray #356, balanced timing #357); gate verdict for D-KEY16-3/-4 not yet recorded on this board | answers identical before timing; median of 101; avx512 and avx2 reported separately | | **D-KEY16-3** | Stride-16 path in the kernel, facade only | Queued, gated on D-KEY16-2 (≥ 1.5× on avx512 AND avx2, no regression at strides 32/512) | parity green; codegen witness unchanged; two disable runs red | | **D-KEY16-4** | AVX-512 gather for strides > 16, behind the facade | Queued, gated on D-KEY16-2 (≥ 1.2× at strides 32 and 512) | other backends still take the old path, asserted | | **D-KEY16-5** | Consumer verification: mask-risc, quack, dir-sim tests + Identity CI names; dir-sim `subtree` timing before/after | Queued (after the ndarray merge) | no consumer source change; timing recorded with method | @@ -266,7 +266,7 @@ Decision 1(c): observed claims, provisioning conflicts and delivery are three qu | D-id | Deliverable | Status | Gate | |---|---|---|---| | **D-DSV-1** | `validate::provisioning_conflicts`: every present object's claims, separate from `address_owner` / `address_recipient` / `validate` | Shipped (#1477, #1480) | `tests/provisioning.rs`: delivery unchanged, conflict reported, silence half; two disable runs red | -| **D-DSV-2** | A mail-enabled group's secondary SMTP proxies are in the Exchange address space (a group without a primary SMTP address claims them only in the provisioning plane): mail to them reaches the group (`address_owner` / `address_recipient`), and an object sharing one is an `AddressConflict` | In PR | `tests/provisioning.rs`: `mail_to_a_groups_secondary_proxy_reaches_the_group` red before; `a_groups_secondary_proxy_claims_its_address` re-pinned from owner to conflict; `a_non_mail_enabled_groups_proxy_is_only_a_provisioning_claim` red before (Codex P1) | +| **D-DSV-2** | A mail-enabled group's secondary SMTP proxies are in the Exchange address space (a group without a primary SMTP address claims them only in the provisioning plane): mail to them reaches the group (`address_owner` / `address_recipient`), and an object sharing one is an `AddressConflict` | Shipped #1483 | `tests/provisioning.rs`: `mail_to_a_groups_secondary_proxy_reaches_the_group` red before; `a_groups_secondary_proxy_claims_its_address` re-pinned from owner to conflict; `a_non_mail_enabled_groups_proxy_is_only_a_provisioning_claim` red before (Codex P1) | ## D-DSP — dir-sim history that survives a restart (2026-10-11) @@ -280,7 +280,7 @@ Plan: `.claude/plans/dir-sim-persist-v1.md`. | **D-DSP-2** | Lance writer/reader crate for `StoredImage`: logical versions in verifiable append-only batches (one batch = one Lance commit), torn saves refused | Shipped (#1485; `lance-graph-dir-sim-lance`, one batch = one Lance append) | two saves restore to the same reads; missing dataset = empty log; stale writer writes nothing (create and append); torn batch refused at restore; out-of-order batch refused | | **D-DSP-4** | `StoredImage` + `RuleRegistry` (exact `(name, version)`) + `restore_stored` + read-only `History` (decision 2(a)) | Shipped (#1481) | unknown rule refused, never substituted; history still reads; disable runs red | | **D-DSP-3** | `ViewActors` (W-2) + `from_graph` groups (wishlist #19) in dir-sim | Shipped (#1473) | disable runs red | -| **D-DSP-3b** | `GroupRoles::from_policy`: grants read from one version of OGAR `GroupRolePolicy` (decision 4(b)); never-named = unread, all-revoked = read with no roles (5(a)) | In PR | policy test red without `from_policy`; dropping empty groups fails it | +| **D-DSP-3b** | `GroupRoles::from_policy`: grants read from one version of OGAR `GroupRolePolicy` (decision 4(b)); never-named = unread, all-revoked = read with no roles (5(a)) | Shipped #1486 | policy test red without `from_policy`; dropping empty groups fails it | ## D-LBL — labels of a concept, pulled through the plug (2026-10-11) @@ -288,7 +288,7 @@ Plan: `.claude/plans/concept-labels-hotplug-v1.md`. | D-id | Deliverable | Status | Gate | |---|---|---|---| -| **D-LBL-0** | Decision record, board rows, corrections (mapping in the consumer plug; no executor lists) | In PR | — | +| **D-LBL-0** | Decision record, board rows, corrections (mapping in the consumer plug; no executor lists) | Shipped #1472 | — | | **D-LBL-1** | `ogar-vocab` label rows + concept × language `LazyLock` index; seed `0x0103` (de pref Zeiterfassung, de alt Stundenzettel) | Queued (OGAR PR) | one preferred per (concept, tag); roles disjoint; concept in `CODEBOOK` | | **D-LBL-2** | `Activation::with_labels` + `label()` / `alt_labels()`; `OgarAuthority::activate` fills plugged concepts only | Queued | unplugged concept's labels absent; missing language → `None` | | **D-LBL-3** | Build-time activation for customer binaries (generated constants, labels included) | Queued | the binary links only `lance-graph-contract` | @@ -307,7 +307,7 @@ Plan: `.claude/plans/v3-mandatory-hotplug-reading-v1.md`. | **D-HPR-3** | Consumers move (lance-graph, q2, MedCare); `classid_read_mode` deprecated | Queued (2026-10-11 census: MedCare has 0 callers; q2's are offline bake mints; deepnsm-v2 is blocked on a concept mint, not code) | no NEW reading selected through the table (rule 5 keeps stored keys readable) | | **D-HPR-4** | `0x1000` / render prefixes documented as deprecated, kept (no eviction) | Shipped for `0x1000` (#1464; doc notes on `CLASSID_*_V3` + `classid_read_mode`); render prefixes, `NodeGuid::read_mode` and OGAR/q2 sites still carry no note | — | | **D-HPR-5** | Stored legacy keys keep resolving; a `SlabDeclaration` may override for its own data; no forced removal | Holds today (status quo). Caveat: a `SlabDeclaration` overrides `value_schema` only, never the tail, so it cannot protect a V1/V2-tail slab (`hotplug.rs:231-257, 392`) | — | -| **D-HPR-6** | No V1 default for an unknown classid; `guid-v3-tail` not a gate | **6a** In PR (un-gated: `guid-v2-tail`/`guid-v3-tail` are empty names, `new_v2` + the five V3 constants + `codebook` unconditional, the panic arm gone; scope ruled 2026-10-11: the 128-bit opt-in — identity and edge facet as 16×u8, lo = is_a, hi = part_of — is not touched, and the new guard `v3_mint_is_the_128_bit_facet` pins that a V3 mint is byte-identical to `FacetCascade` for key and edge; a byte-swap in `new_v2` turns 2 of its tests red). **6b** Queued — unknown classid → error. Decided 2026-10-11: go, staged after 6a, D-HPR-3 and a stored-classid check | unknown classid → `NoReadingFor` | +| **D-HPR-6** | No V1 default for an unknown classid; `guid-v3-tail` not a gate | **6a** Shipped #1490 (un-gated: `guid-v2-tail`/`guid-v3-tail` are empty names, `new_v2` + the five V3 constants + `codebook` unconditional, the panic arm gone; scope ruled 2026-10-11: the 128-bit opt-in — identity and edge facet as 16×u8, lo = is_a, hi = part_of — is not touched, and the new guard `v3_mint_is_the_128_bit_facet` pins that a V3 mint is byte-identical to `FacetCascade` for key and edge; a byte-swap in `new_v2` turns 2 of its tests red). **6b** Queued — unknown classid → error. Decided 2026-10-11: go, staged after 6a, D-HPR-3 and a stored-classid check | unknown classid → `NoReadingFor` | | **D-HPR-7** | Storage readings leave the concept key: out of `concept_override`, into the slab's `SlabDeclaration` or the owning consumer's plug (O3, decided (a) 2026-10-11) | Shipped (#1474; the five domain arms removed; the domain models differed from plug-and-play only in `value_schema`, which `SlabDeclaration` overrides; tests red before, green after) | a non-Odoo plug of `0x0202` reads `PLUG_AND_PLAY_V3`; Odoo's slab still reads `ERP_V3` | | **D-HPR-8** | A plug that asks only for a reading succeeds (reading is not a capability; decided 2026-10-11) | Shipped (#1474; `OgarAuthority::activate` skips the capability join when `covered` is empty; ids still must be minted; red before the fix with `NoCapabilitiesFor(0x0103)`; disable run turns the twin red) | `[0x0103]` with `covered: &[]` → `Ok`, `PLUG_AND_PLAY_V3`; with a covered capability → refused as today | diff --git a/.claude/board/entries/2026-10-16-synergy-map-since-1011.md b/.claude/board/entries/2026-10-16-synergy-map-since-1011.md new file mode 100644 index 000000000..152bfc95f --- /dev/null +++ b/.claude/board/entries/2026-10-16-synergy-map-since-1011.md @@ -0,0 +1,208 @@ +# 2026-10-16 — Synergy map since the 2026-10-11 fleet listing + +**Status:** OPEN — exploration map. It ratifies nothing; the operator chooses. +**Base listing:** ndarray `.claude/knowledge/coresearch-2026-10-11-simd-fleet.md` +(sections A–F, findings X1–X19, fruit tables). This entry revises every point +of it and adds what the merges since then opened or closed. +**Delta read:** first-parent merges since 2026-10-11 — lance-graph 97 +(#1468–#1577), ndarray 9 (#355–#363), OGAR 12 (#351–#362), ruff 5 (#121–#125). +**Method:** five Haiku harvest cards (merge maps, board delta, quotes, census), +every relied-on item re-read from source on the main thread; ledger at the end. + +## 1. The base listing, point by point + +### A. `fearless_simd` vs `ndarray::simd` + +| point | 2026-10-11 | now | evidence | +|---|---|---|---| +| compile-time dispatch, one realization per build | CLOSED | CLOSED | unchanged | +| runtime dispatch per kernel | CLOSED | CLOSED | startup-only rule held; `cpu_guard_drift.rs` (#360) adds a build-time warning when a target feature has no guard row | +| v4-on-AVX2 SIGILL | CLOSED (exe + library host) | CLOSED; aarch64 still LOOSE | `cpu_guard.rs:318` still says covering aarch64 needs `getauxval(AT_HWCAP)`; the only `getauxval` call reads `AT_PHDR` (`:465`) | +| fixed 512-shaped names | CLOSED | CLOSED | — | +| no SSE tiers | CLOSED | CLOSED | — | +| AVX2 integer polyfills | CLOSED by measurement | CLOSED | — | +| generated backends | PARTIAL | PARTIAL | unchanged (ternlog only) | +| per-level parity tests | PARTIAL, 18 types uncovered | **still 18 uncovered** | type names in `crates/*parity*` on master: U64x8 45, I8x16 28, U32x16 27, I32x16 20, U8x16 17, F32x16 13, F64x8 10, U8x64 1, U32x4 1; none of the 18 listed types appears | +| MSRV | PARTIAL | CLOSED for the toolchain, LOOSE in prose | fleet CI runs 1.99.0 (tesseract `rust.yml:62`); the prose is stale (§X17) | +| one binary everywhere | EXCLUDED | EXCLUDED | — | + +### B. "Three places the CPU leaks back" + +| point | now | +|---|---| +| the build cares | CLOSED (#348, #360) | +| consumers do not inherit ndarray's config | **CLOSED for lance-graph**: default `native` (#1505), per-runner `native` resolution keyed into the cache (#1526), production `x86-64-v4` / `sapphirerapids` (#1529–#1531, ndarray #361). Still LOOSE for lance-graph-java (§X19) | +| runtime dispatch covers some kernels | CLOSED | + +### C. Accelerate mapping — PARK, unchanged. + +### D. Unsafe inventory + +| point | now | +|---|---| +| 4 OOB paths, 212 NEEDS-TF, AMX rung | CLOSED | +| missing `// SAFETY:` | LOOSE: raw count on master 974 `unsafe {` vs 393 `// SAFETY:` (grep of literals, not a coverage measure) | +| CONSOLIDATE / SAFE-API / REMOVABLE | LOOSE, mechanical | +| SAFE-CRATE (`bytemuck`/`zerocopy`) | operator question, unchanged | +| aarch64 guard | LOOSE | +| `is_x86_feature_detected!` sites | LOOSE: 96 sites in 17 files (was 95); not yet classified startup / once / per-call | + +### E/F. Review issues and SSE follow-ups — unchanged (CLOSED / LOOSE as listed). + +### Findings X1–X19 + +| id | now | evidence | +|---|---|---| +| X1 library host | CLOSED (#355) | `cpu-guard-library` CI job | +| X2–X4 ladybug slices | LOOSE, not touched | no ladybug merge in the delta | +| X6 MedCare/q2 v4 on Railway | DECIDED the other way: production is v4 (rules: Railway ~95 % v4, images built at v4/sapphirerapids); the guard reports the rest | D-PROD-V4 | +| X7 psABI | CLOSED as fact; `config-avx512.toml` is the Sapphire Rapids tier and CI compiles both tiers (ndarray #361) | — | +| X11 `mul_add` not bit-identical | **LOOSE and sharper**: `simd.rs:1241` documents "`F32x8::mul_add` is FUSED on every arm", but `simd_wasm.rs:197-199` computes `f32x4_add(f32x4_mul(a,b),c)` without `relaxed-simd` (two roundings) | the test `f32x8_mul_add_is_fused` carries no target cfg (`simd.rs:1247`), so it would fail on wasm32 without `relaxed-simd`; whether any CI row runs ndarray's lib tests there is NOT checked | +| X16 consumer sweep | LOOSE: `ndarray_bridge.rs` raw `_mm256_*` / `_mm512_*` blocks still present, all under `cfg(not(feature = "ndarray-hpc"))` (`:155`…`:449`) | dead in default builds; delete or keep as the no-ndarray fallback is a decision | +| X17 forbidden remedies in records | LOOSE: `ISS-NDARRAY-CANONICAL-COORDINATE-COUPLES-FLEET-MSRV` still lists a pinned `rev` option and a 1.98 table; `CARGO-COMPUTE-SUBSTRATE.md:218` still shows `rev = ""`; lichess-rs `CLAUDE.md:32,60` and `README.md:93-97` say `+1.95`; tesseract `rust.yml:59-60,316` comments say 1.98.1 / "1.95 floor" while the step installs 1.99.0 | docs only | +| X18 two ndarray package ids | LOOSE and wider: OGAR `ogar-encryption` takes `encryption` from ndarray git `branch = "master"`; lance-graph takes ndarray by path; since #1534 lance-graph also takes OGAR by git `main` | PROBE: `cargo metadata` on a lance-graph binary that links `ogar-encryption` / `ogar-auth`, count ndarray ids | +| X19 lgj | LOOSE: `native/lgj-abi/.cargo/config.toml:2-5` still says ndarray "pins v3/AVX2" (it is `native`) and ":35 one known host"; `abi.rs:722-728` still asserts backend ∈ {AVX2, AVX-512}; `check_build_cpu` has 0 hits in lgj-abi | the handshake call from the 2026-10-11 low-fruit table is not done | +| TD-NDARRAY-SIMD-POPCNT-NATIVE | LOOSE: item (b) still proposes runtime detection of VPOPCNTDQ/AMX, which the startup-only rule forbids; the case it describes (host CPUID ≠ compiled features) is what `cpu_guard` now reports | regrade, strike (b) | + +## 2. What the delta added — the arcs + +| arc | shipped | still open | +|---|---|---| +| **Fold path** (R2IL / SQL polyfill) | `FoldDialect` crate (#1479), procedures + fused mode (#1484), r2il a workspace member, OGAR by git (#1534), core depends on the fold path (#1537), range intersection `fold_ranges` (#1487) | D-SQLP-3 benchmark gates -4/-5/-6; D-NALP-9 blocked on D-SQLP-4 | +| **Source pruning** | D-TELEPORT-0/-1/-2, D-PHOTO-0 (#1484/#1487/#1489) | — | +| **Key match** | D-KEY16 plan (#1475), ndarray parity + probe (#356/#357) | D-KEY16-3/-4 gate verdict not recorded here | +| **Class methods / SAG** | D-CMH-1, G1, G1-4a/4b/6, D-SAG-1 (#1504–#1520), then **withdrawn** to `backup/session-011BMJ-2026-10-12` (#1524); D-CMR set-IR plan (#1532) | D-CMR-1…9 all Queued; **D-SAG-5-1…10 are queued against the withdrawn D-SAG-1** | +| **NAL polyfill** | audit (#1495), D-NALP-1/2 (#1525), revision fold (#1538), exact truth codes in `causal_edge::isa::truth` (#1548) | D-NALP-4 lane-terminal question; -5 … -11 Queued; harvest PR #1544 still open "as a reminder" | +| **relalg** | D-RA-1 (#1546); its rewrite decided 675/2,000 programs in H14d | D-RA-2 maintainer decision; `ISS-RELALG-ABSORPTION-AFTER-DE-MORGAN` | +| **D-HOLO** | H1, H5, H6, H6b, H6c, H14, H14b (withdrawn), H14c, H14d — all measured | H8, H9, H11, H12 pre-registered, not run | +| **Thought lanes** | D-HL-5 probes: slot deltas, lane trie, identity sessions, coverage orientation, givens layer (#1564) | D-HL-1 O1/O2/O3/O6; D-HL-2/-3/-4/-6/-7/-8/-9 | +| **WAL** | D-WAL-1…7 (#1562/#1567); one-WAL ruling D-LNC-7 decided | reader wiring of the version clock; 60-min soak (truncated at 27.5 min) | +| **MeTTa / Datalog** | D-MTP-0/1/1b/6 (#1555), `ruff_metta_spo` (ruff #125), inventory + plan (#1574), council v3 (#1576), NO PINS (#1577); D-MTP-4 fix on fork `main` `e55dc61`, taken by W1's first build | D-ASM-1…6 Queued, not authorized; `TD-METTA-NO-CI-LINE-1`; 26-script golden baseline not built | +| **Build tiers** | native default (#1505), per-runner cache key (#1526), production v4 (#1529–#1531), ndarray CI for both production tiers (#361) | lgj (X19) | +| **IAM / directory** (other sessions) | dir-sim persistence and provisioning (#1473–#1488), RBAC one-subject rule, field masks, authorized walk (#1491, #1556–#1559), OGAR group policy / Graph groups / authorized resolve / sealed stream (OGAR #351–#360) | D-PBL-0…7 Queued | +| **Research docs** | Rubicon, PLN×Shannon, Hyperon parity, ONA assimilation, Haspelmath harness, qualia profile, oracle fidelity (#1492–#1500, #1536, #1543, #1545, #1549, #1570, #1571) | `ISS-QUALIA-A2B-CLUT-UNMEASURED` | + +## 3. Closed ends (since 2026-10-11) + +1. `cpu_guard` in library hosts, three OOB paths, AMX rung (ndarray #355). +2. Build-time warning for unguarded target features (ndarray #360); cargo-careful fix (#362). +3. Consumer tier policy: native default, cache keyed to resolved flags, production v4 (lance-graph #1505/#1526/#1529–#1531, ndarray #361). +4. Chained gather withdrawn as a key-read design (ndarray #358 → #359); hops are folded masks. +5. Fold path in core (D-FOLD-CORE-a/b); FoldDialect extracted; range intersection lowering. +6. NAL revision as one grouped fold (D-NALP-3); exact deduction/induction/abduction codes (D-NALP-4 scalar half). +7. WAL question answered: `LanceCycleWriter` stays the default with a capped session cache; MemWAL an option (D-LNC-7). +8. H14d: C's own operation measured; Lance masked reads cut rows always, bytes only when survivors are page-local. +9. Hyperon trie panic fixed on the fork and reachable without a pin (D-MTP-4 + #1577). +10. Supervisor respawn backoff (#1540). +11. Ten stale "In PR" board rows set to Shipped in this PR (D-CMR-0, D-TELEPORT-2, D-PHOTO-0, D-KEY16-0/1/2, D-DSV-2, D-DSP-3b, D-LBL-0, D-HPR-6a), each matched to its merge subject. + +## 4. Loose ends, and the dots that connect them + +**D1 — one set algebra, four spellings.** relalg `Rel` (D-RA-1), the planned +contract set IR `Runs` (D-CMR-1), D-HOLO's interval sets (H6: symbolic cheapest +in all 24 cells) and quack `fold_ranges` (D-TELEPORT-1) all compute ∩ ∪ ∖ over +coordinate runs before a fold. H14d gives the first price: the rewrite decided +34 % of 2,000 programs with zero runs and cut passes 5,898 → 1,065. The hinge is +D-RA-2 ("relalg into the contract set IR, or delete"). Until it is decided the +absorption fix has no agreed home. + +**D2 — one preimage serves four callers.** D-MTP-1b measured the hop as the +preimage of a run set under a monotone map at 0.0001–0.0004 ns/row against +1.3–2.4 for the gather. D-CMR-5 (preimage), D-ASM-2 (Datalog existence half), +D-RA-4 (bounded recursion frontier) and Gremlin `out()` all need exactly this +operation. Nobody owns it as a fold op yet; the D-MTP-1b probe is the oracle. + +**D3 — read masks, clustering and the Lance prefilter.** H14c/H14d: rows +scanned == |R| always, bytes cut only for clustered survivors (0.19× at 1 % +clustered, 1.00× uniform). D-HL-6 (read mask ∧ thinking mask before decode) +needs exactly an ordinal → row-address projection; D-WAL-6's version clock +already turns a point of view into one row range; D-HL-7 (sparse delta write) +decides where new rows land. Connected: the write layout must cluster by the +apertures that will read it, or masked reads stay row-only. The S3 question +lands here too: Lance's cache holds metadata only (source read, P-CACHE-1), so +on object storage every re-read of data is a new request — clustering cuts +requests, not just bytes. + +**D4 — truth.** Exact scalar codes exist (`isa::truth`); revision is a fold; +the Gadamer gate invariants are pinned; D-HL-3 (evidential base, not layer) +and the FirstOfRun rule say independence is a separate contract. Open joint: +D-NALP-4 asks whether populations need a per-row truth lane terminal or can +call the scalar law per survivor. D-NALP-5 (populations) waits on it, and #1544 +stays open only as a reminder of it. + +**D5 — label codebooks.** Council v3 found no production codebook fit and made +`metta::codebook::LabelCodebook` (u16, mints at `add`) W1 scope, following the +quack `Binder::code` contract (`bind.rs:100-102`), which has no production +impl. D-NALP-6 needs a binder over a reverse label index; D-RA-3 needs labels +resolved through "the label codebook". These three are the same population +(data symbols → u16 addresses) and should be one implementation of +`Binder::code`. D-LBL (concept labels per language in `ogar-vocab`) is a +different population — concept ids, not data symbols — and stays separate. + +**D6 — SAG on a withdrawn base.** D-SAG-5-1…10 (rerun SAG parity, ContextSlice, +provenance, policies) are queued against D-SAG-1, which #1524 withdrew. Their +new base is the D-CMR rebuild; until it exists they cannot start. + +**D7 — two ndarray identities** (X18) now on two edges: OGAR git master and +lance-graph path, joined by #1534's OGAR-by-git. A binary that links both +compiles two `ndarray` packages. + +**D8 — doc drift that contradicts rulings** (X11 fused claim, X17, X19, +TD-POPCNT (b), `lance-graph/.cargo/config.toml:55-56` "anything below v3 still +SIGILLs … never build with no target-cpu" while the avx and v2 arms exist and +the guard reports). + +## 5. Fruit + +### Low-hanging (≤ 1 hour each) + +| # | item | repo | why / check | +|---|---|---|---| +| L1 | status sweep — done in this PR (§3 item 11) | lance-graph | each row matched to its merge | +| L2 | #1575 merge record — done in this PR | lance-graph | — | +| L3 | doc fixes: lgj config comment, lance-graph config `:55-56`, tesseract `rust.yml` comments, lichess `+1.95`, `CARGO-COMPUTE-SUBSTRATE.md:218`, MSRV issue `rev` option, TD-POPCNT (b) | lgj, lance-graph, tesseract-rs, lichess-rs | contradict standing rulings; one PR per repo | +| L4 | run `f32x8_mul_add_is_fused` on the wasm arm (`scripts/masking-parity.sh wasm` or the lib tests under wasmtime); if it fails, either fuse there or narrow the doc to "fused except wasm without `relaxed-simd`" | ndarray | expected 2⁻²⁴, unfused gives 0 | +| L5 | lgj: call `check_build_cpu()` in the `Abi` handshake, raise a Java exception; widen `abi.rs:722-728` to the reported arm | lance-graph-java | the warning path exists since #355 | +| L6 | #1544: close it with an ISSUES row carrying the D-NALP-4 question | lance-graph | a reminder PR is a board row in disguise | + +### High-hanging (a session each) + +| # | item | why | probe / gate | +|---|---|---|---| +| H1 | decide D-RA-2, then fix the absorption defect in the chosen IR, test first | D1 | the H14d program `¬(x ∧ (x ∨ y))` rewritten no wider than written; disable run red | +| H2 | preimage as a fold op (D-CMR-5) | D2 | == D-MTP-1b oracle; many-to-one refused; then D-ASM-2 uses it | +| H3 | S3 Titan arm on H14d: same R twice, bytes / requests / RSS, uniform vs clustered | D3 | counts, not milliseconds | +| H4 | clustered write layout for one class (D-HL-7 shape), re-run H14d stage 3 | D3 | bytes ≤ 0.25× at 1 % clustered by construction | +| H5 | parity groups for the 18 uncovered facade types | A | disable: flip one scalar `cmpgt` in a new group, it must go red | +| H6 | X18 probe | D7 | `cargo metadata` ndarray id count == 1 | +| H7 | aarch64 guard via `AT_HWCAP/HWCAP2` | A | dotprod build under `qemu-aarch64 -cpu cortex-a53` reports, does not SIGILL | +| H8 | classify the 96 `is_x86_feature_detected!` sites | D | `simd_caps.rs` once, `bitwise.rs`/`bgz17_bridge.rs` per call must classify correctly | + +### Heavy-hanging (multi-session, needs an owner or a ruling) + +| # | item | why | +|---|---|---| +| V1 | one `Binder::code` implementation for MeTTa, NAL and Datalog labels | D5; decide before D-ASM-1 builds | +| V2 | D-ASM W1–W3 (binder, semijoin existence, bag count, `LanceSpace`) | ratified, not authorized | +| V3 | D-NALP-5…7 (populations, typed surface, OpenNARS parity) | D4 | +| V4 | SAG-5 rebased on the D-CMR rebuild | D6 | +| V5 | D-HOLO H8/H9/H11/H12 | pre-registered, not run | +| V6 | Accelerate core/domain split; Kani; bytemuck/zerocopy | PARK / operator, unchanged | + +## 6. Not searched + +tesseract-rs, MedCare-rs, q2, HubSPO-rs, spear, a2ui-rs, ladybug-rs merges since +2026-10-11 (only lance-graph, ndarray, OGAR and ruff were mapped); the D-KEY16 +probe verdict (ndarray #356/#357 bodies and example output); whether any +lance-graph binary links `ogar-encryption` today; the content of the withdrawn +backup branch beyond its board rows. + +## 7. Harvest ledger (Haiku cards) + +| card | task | result | spot check | +|---|---|---|---| +| substrate-mapper | lance-graph merge map | 97 rows, DONE | count re-run: 97 | +| substrate-mapper | ndarray / OGAR / ruff merge map | 26 rows, DONE | ndarray first-parent re-run: 9 | +| substrate-mapper | board delta (STATUS/ISSUES/TECH_DEBT/entries) | 203 / 3 / 3 / 51, DONE | ten status rows re-read before editing | +| quote-harvester | 13 stale sites | 12/13; tesseract used `origin/main` from the brief (its branch is `master`) — brief error, re-quoted by hand | Q3, Q5, Q6, Q10, Q13 re-read | +| census-counter | ndarray counters | DONE; one stray `send_message` call with a placeholder, which failed and sent nothing (a miss: out-of-card tool use) | parity type counts re-run with a wider pattern; aarch64 lines re-read | diff --git a/.claude/board/entries/README.md b/.claude/board/entries/README.md index f4e1b09ed..98fabe0e7 100644 --- a/.claude/board/entries/README.md +++ b/.claude/board/entries/README.md @@ -25,10 +25,11 @@ 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. -350 entries, 2026-08-06 .. 2026-10-16. +351 entries, 2026-08-06 .. 2026-10-16. | date | entry id | finding | file | |---|---|---|---| +| 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 | `D-ASM-1` | | [2026-10-16-metta-datalog-assimilation-council-v3.md](2026-10-16-metta-datalog-assimilation-council-v3.md) | | 2026-10-16 | `D-HOLO-H14d` | | [2026-10-16-d-holo-h14d-logic-mask-read.md](2026-10-16-d-holo-h14d-logic-mask-read.md) | | 2026-10-15 | `nars-metta-ce64-mapping-inventory` | | [2026-10-15-nars-metta-ce64-mapping-inventory.md](2026-10-15-nars-metta-ce64-mapping-inventory.md) | From 97b744ecbd94bb3c90aa21bb503633e4e6f5fb2d Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 10:13:28 +0000 Subject: [PATCH 2/2] =?UTF-8?q?board:=20synergy=20map=20=E2=80=94=20close?= =?UTF-8?q?=20D7=20(ndarray=20patch=20exists),=20reconcile=20with=20recove?= =?UTF-8?q?ry=20ledger,=20measure=20label=20codebook=20sizes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_011BMJnDBAfzcuQh5HeT39Rh --- .../2026-10-16-synergy-map-since-1011.md | 61 +++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/.claude/board/entries/2026-10-16-synergy-map-since-1011.md b/.claude/board/entries/2026-10-16-synergy-map-since-1011.md index 152bfc95f..b36c0f548 100644 --- a/.claude/board/entries/2026-10-16-synergy-map-since-1011.md +++ b/.claude/board/entries/2026-10-16-synergy-map-since-1011.md @@ -60,7 +60,7 @@ every relied-on item re-read from source on the main thread; ledger at the end. | X11 `mul_add` not bit-identical | **LOOSE and sharper**: `simd.rs:1241` documents "`F32x8::mul_add` is FUSED on every arm", but `simd_wasm.rs:197-199` computes `f32x4_add(f32x4_mul(a,b),c)` without `relaxed-simd` (two roundings) | the test `f32x8_mul_add_is_fused` carries no target cfg (`simd.rs:1247`), so it would fail on wasm32 without `relaxed-simd`; whether any CI row runs ndarray's lib tests there is NOT checked | | X16 consumer sweep | LOOSE: `ndarray_bridge.rs` raw `_mm256_*` / `_mm512_*` blocks still present, all under `cfg(not(feature = "ndarray-hpc"))` (`:155`…`:449`) | dead in default builds; delete or keep as the no-ndarray fallback is a decision | | X17 forbidden remedies in records | LOOSE: `ISS-NDARRAY-CANONICAL-COORDINATE-COUPLES-FLEET-MSRV` still lists a pinned `rev` option and a 1.98 table; `CARGO-COMPUTE-SUBSTRATE.md:218` still shows `rev = ""`; lichess-rs `CLAUDE.md:32,60` and `README.md:93-97` say `+1.95`; tesseract `rust.yml:59-60,316` comments say 1.98.1 / "1.95 floor" while the step installs 1.99.0 | docs only | -| X18 two ndarray package ids | LOOSE and wider: OGAR `ogar-encryption` takes `encryption` from ndarray git `branch = "master"`; lance-graph takes ndarray by path; since #1534 lance-graph also takes OGAR by git `main` | PROBE: `cargo metadata` on a lance-graph binary that links `ogar-encryption` / `ogar-auth`, count ndarray ids | +| X18 two ndarray package ids | CLOSED for lance-graph: OGAR's git-`master` ndarray is patched to the same `../ndarray` by the root and relalg `[patch]` sections | none here; check only an unpatched consumer manifest if one appears | | X19 lgj | LOOSE: `native/lgj-abi/.cargo/config.toml:2-5` still says ndarray "pins v3/AVX2" (it is `native`) and ":35 one known host"; `abi.rs:722-728` still asserts backend ∈ {AVX2, AVX-512}; `check_build_cpu` has 0 hits in lgj-abi | the handshake call from the 2026-10-11 low-fruit table is not done | | TD-NDARRAY-SIMD-POPCNT-NATIVE | LOOSE: item (b) still proposes runtime detection of VPOPCNTDQ/AMX, which the startup-only rule forbids; the case it describes (host CPUID ≠ compiled features) is what `cpu_guard` now reports | regrade, strike (b) | @@ -143,9 +143,13 @@ different population — concept ids, not data symbols — and stays separate. provenance, policies) are queued against D-SAG-1, which #1524 withdrew. Their new base is the D-CMR rebuild; until it exists they cannot start. -**D7 — two ndarray identities** (X18) now on two edges: OGAR git master and -lance-graph path, joined by #1534's OGAR-by-git. A binary that links both -compiles two `ndarray` packages. +**D7 — two ndarray identities** (X18): CLOSED for this repo. OGAR takes +ndarray by git `master`, lance-graph by path, but the root `Cargo.toml` +(`[patch."https://github.com/AdaWorldAPI/ndarray"]`) and the standalone relalg +workspace both patch that git coordinate to the same `../ndarray`, so a +lance-graph build resolves one package. The risk remains only for a consumer +manifest that pulls OGAR by git and ndarray by path without that patch; none is +named here, so nothing is queued. **D8 — doc drift that contradicts rulings** (X11 fused claim, X17, X19, TD-POPCNT (b), `lance-graph/.cargo/config.toml:55-56` "anything below v3 still @@ -174,7 +178,6 @@ the guard reports). | H3 | S3 Titan arm on H14d: same R twice, bytes / requests / RSS, uniform vs clustered | D3 | counts, not milliseconds | | H4 | clustered write layout for one class (D-HL-7 shape), re-run H14d stage 3 | D3 | bytes ≤ 0.25× at 1 % clustered by construction | | H5 | parity groups for the 18 uncovered facade types | A | disable: flip one scalar `cmpgt` in a new group, it must go red | -| H6 | X18 probe | D7 | `cargo metadata` ndarray id count == 1 | | H7 | aarch64 guard via `AT_HWCAP/HWCAP2` | A | dotprod build under `qemu-aarch64 -cpu cortex-a53` reports, does not SIGILL | | H8 | classify the 96 `is_x86_feature_detected!` sites | D | `simd_caps.rs` once, `bitwise.rs`/`bgz17_bridge.rs` per call must classify correctly | @@ -182,7 +185,7 @@ the guard reports). | # | item | why | |---|---|---| -| V1 | one `Binder::code` implementation for MeTTa, NAL and Datalog labels | D5; decide before D-ASM-1 builds | +| V1 | label codebooks: one per classid and space, not one shared (see §9) | D5; measured in §9; decide before D-ASM-1 builds | | V2 | D-ASM W1–W3 (binder, semijoin existence, bag count, `LanceSpace`) | ratified, not authorized | | V3 | D-NALP-5…7 (populations, typed surface, OpenNARS parity) | D4 | | V4 | SAG-5 rebased on the D-CMR rebuild | D6 | @@ -206,3 +209,49 @@ backup branch beyond its board rows. | substrate-mapper | board delta (STATUS/ISSUES/TECH_DEBT/entries) | 203 / 3 / 3 / 51, DONE | ten status rows re-read before editing | | quote-harvester | 13 stale sites | 12/13; tesseract used `origin/main` from the brief (its branch is `master`) — brief error, re-quoted by hand | Q3, Q5, Q6, Q10, Q13 re-read | | census-counter | ndarray counters | DONE; one stray `send_message` call with a placeholder, which failed and sent nothing (a miss: out-of-card tool use) | parity type counts re-run with a wider pattern; aarch64 lines re-read | + +## 8. Reconciled with the recovery ledger (`LEDGER-REVISION-2026-10-16.md`, #1578) + +Another session revised the recovery ledger the same day. Where both list one +item, the ledger id is the one to use; this map keeps only what the ledger does +not carry. + +| this map | ledger id | verdict | +|---|---|---| +| relalg absorption (D1, H1) | N17 | same item; use N17 | +| D3 version clock not wired to a reader, soak cut at 27.5 min | N18 | same item; use N18 | +| D3 clustered write layout, page-bound masked reads (H4) | N19 | same stream; use N19 | +| D4 truth: per-row lane vs scalar law (D-NALP-4) | O25 + K2', O30 | the ledger's evidence root is the larger frame; D-NALP-4 waits on O30 | +| D-ASM authorization, 26-script baseline | N15 → D-ASM | same item | +| D5 one label codebook (V1) | N16 (operand registry) | related, not the same: N16 maps word ids to 8:8:8 operands per epoch; V1 maps symbols to label ids. Kept here, scoped below | +| D2 preimage op, D6 SAG on withdrawn base, X-rows (SIMD, lgj, doc drift) | — | not in the ledger; kept here | +| D7 two ndarray ids | — | closed: the root and relalg `[patch]` sections already resolve one package (codex review, #1579) | + +## 9. Label codebook sizes (measured 2026-10-16) + +Question: can each vocabulary get its own classid and a codebook of at most 256 +entries, so 256-wide methods (u8 index, 256-entry LUT, 4×u64 mask) apply. + +Counted with a token regex over the `.metta` files (strings, comments, +`$variables` and numbers removed; a symbol right after `(` counted as a +functor). This is not the Hyperon parser. + +| vocabulary | measured | fits 256? | +|---|---|---| +| ONA | `ATOMS_MAX 255` (`Config.h:142`, read in #1574); an ONA atom is already a u8 | yes, by construction | +| NAL (ours) | term addresses are u16 (`nal/src/lib.rs` `Statement`); the audit fixture `revision_points.nal` uses 25 atoms; copulas are a 4-variant enum, not labels | per knowledge base, yes; no corpus bound exists | +| MeTTa stdlib (`hyperon-experimental/lib`, 10 files) | 266 symbols | no | +| MeTTa golden scripts (26 files) | 282 symbols in all; 207 not in the stdlib; per script at most 45, at most 26 outside the stdlib; 163 symbols in argument positions, 93 never used as a functor | per script, yes; the 26 together, no | +| MeTTa whole repo (67 files) / PeTTa (541 files) | 835 / 1,823 symbols; largest file 196 / 173 | per file, yes; per corpus, no | +| cog (rung 2–4) | 144 verbs (12×12), 34 tactic recipes, 36 styles = 214 | yes, together | + +Reading: no two corpora fit one 256 codebook together, and MeTTa's stdlib alone +does not. What fits is one codebook per classid, scoped to one knowledge base or +space, with functors going to the class `(f, k)` and only argument symbols +taking label ids. That is the OGAR rule that the class prefix selects the +codebook. It also answers V1: one shared u16 codebook only makes sense if no +vocabulary needs its own treatment, and ONA's fixed u8 atom table already does. + +OPEN: the stdlib's 266 symbols are mostly grounded operations and functors; +which of them would ever take a label id has not been counted with the real +parser.