From 44be13bc3cc12d8a5b721741ffadf47a81503e5a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 04:29:27 +0000 Subject: [PATCH] =?UTF-8?q?spec=20v3.1:=20NO=20PINS=20=E2=80=94=20hyperon?= =?UTF-8?q?=20deps=20float=20on=20branch=20main,=20no=20tracked=20lock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit F5 and R-7 named rev 3f76dc4 as a build pin; the decision is no pins: git deps follow the fork's main branch, no rev or tag, and no Cargo.lock is tracked (already the case in both repos; no rev= exists in any manifest). G6's baseline runs at the main head of the run and records the sha. The D-MTP-4 row's "pin bump" item is void: nothing in a manifest ever pinned hyperon, only the spec text. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_017SNHxJYC1MeW3HsyhGZo1E --- .claude/board/STATUS_BOARD.md | 2 +- ...6-10-16-metta-datalog-assimilation-council-v3.md | 4 ++++ .../metta-datalog-assimilation-v1-council-v3.md | 13 +++++++++---- .claude/plans/metta-datalog-assimilation-v1.md | 2 +- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 885f6cc31..a78bbfc8f 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -39,7 +39,7 @@ Plan: `.claude/plans/metta-polyfill-v1.md`. Proposed crate `lance-graph-metta` ( | **D-MTP-1b** | The hop as a range: preimage of `valid`'s runs under a monotone `dst` vs the gather, clustered and scattered | Measured (§6d): R-declared count 0.0001–0.0004 ns/row vs gather 1.3–2.4 at 10⁶ | == datafrog; two disable runs red; costs reported | | **D-MTP-2** | `LanceSpace` (`Space + SpaceMut`) as a named space for the non-recursive Datalog subset; golden corpus rerun — same deliverable as D-ASM-4, flips with it | Queued (not authorized) | the 26-script baseline built and committed FIRST (G6; `hyperon-probe/golden` is absent), then unchanged with facts in `LanceSpace`; refusals counted per kind; whole-conjunction vs per-conjunct calls recorded | | **D-MTP-3** | Recursive Datalog rules → relalg μ through the external driver d′ | Queued (not authorized) | `anc_n` answers identical; no fixpoint state in mask-risc | -| **D-MTP-4** | Fork fix for the expression-width trie panic (≥ 1,024 children), test first; distinct from the id-decoding fix `1ffdbd6` | Fix EXISTS on the fork (corrected 2026-10-16): `5c9afd4` on `ccr-9f3b8075-74u47l-trie-expr-width`, failing tests first (`b5ae248`); `1ffdbd6` is upstream PR trueagi-io#1107 (head == `1ffdbd6`). Both fixes landed on fork `main` via fork PR `AdaWorldAPI/hyperon-experimental#1`, MERGED 2026-10-16 (merge `e55dc61`; local `cargo test -p hyperon-space` 39 passed on the merge, 2 failed at `trie.rs:539` on the tests-only commit `b5ae248`). lance-graph still pins `3f76dc4`, which panics; the pin bump to `e55dc61` is a separate, measured PR and is the operator's call | red before, green after (already on the branch); pin bump to `e55dc61` OPEN | +| **D-MTP-4** | Fork fix for the expression-width trie panic (≥ 1,024 children), test first; distinct from the id-decoding fix `1ffdbd6` | Fix EXISTS on the fork (corrected 2026-10-16): `5c9afd4` on `ccr-9f3b8075-74u47l-trie-expr-width`, failing tests first (`b5ae248`); `1ffdbd6` is upstream PR trueagi-io#1107 (head == `1ffdbd6`). Both fixes landed on fork `main` via fork PR `AdaWorldAPI/hyperon-experimental#1`, MERGED 2026-10-16 (merge `e55dc61`; local `cargo test -p hyperon-space` 39 passed on the merge, 2 failed at `trie.rs:539` on the tests-only commit `b5ae248`). No manifest in lance-graph pins hyperon at all (metta has no hyperon dep yet); the only `3f76dc4` was the spec's R-7 text, struck 2026-10-16 by the NO PINS decision (`branch = "main"`, no tracked lock), so W1's first build takes fork `main` = `e55dc61` with both fixes | red before, green after (already on fork main); no pin to bump | | **D-MTP-6** | datafrog as the exact Rust oracle (probe/test only) | Measured 2026-10-14 (v4): join 10⁶ in 65–69 ns/pair, seeded ancestors 10⁶ in 286–298 ns/tuple; counts match; not yet a committed probe | bag-of-pairs equality with Hyperon and PeTTa | | **D-MTP-5** | PeTTa as second oracle in the probes | Queued (not authorized) | PeTTa/Hyperon divergences recorded, never averaged | diff --git a/.claude/board/entries/2026-10-16-metta-datalog-assimilation-council-v3.md b/.claude/board/entries/2026-10-16-metta-datalog-assimilation-council-v3.md index 6592ee6a1..12865f4b2 100644 --- a/.claude/board/entries/2026-10-16-metta-datalog-assimilation-council-v3.md +++ b/.claude/board/entries/2026-10-16-metta-datalog-assimilation-council-v3.md @@ -39,3 +39,7 @@ FOREIGN fan-out (`Semijoin` mask × `GroupReduce{Count}`), and `Space::query -> spec §10 (v3.1): R-3 limit + G2b split (ii pinned two-sided) + N1c; R-5 `try_query` / counted-empty trait path / `(lance-match …)` grounded op; N4 rewritten; plan §E and D-ASM-5 reworded around the interned term table; D-MTP-2 gate = the 26-script baseline. OPEN (operator): what the adapter answers for a foreign fan-out query in W1–W3 (tagged bag is the written default). + +**Addendum (2026-10-16, NO PINS):** DECISION — git deps float on `branch = "main"`, no `rev`, no tracked `Cargo.lock` (already +gitignored in lance-graph `:15` and the fork `:8`; no `rev =` exists in any `Cargo.toml`). Spec F5/R-7/G6 reworded; the earlier +"pin bump to `e55dc61`" item is void — there was never a manifest pin, only spec text. diff --git a/.claude/plans/metta-datalog-assimilation-v1-council-v3.md b/.claude/plans/metta-datalog-assimilation-v1-council-v3.md index e59a2af93..af2ed708e 100644 --- a/.claude/plans/metta-datalog-assimilation-v1-council-v3.md +++ b/.claude/plans/metta-datalog-assimilation-v1-council-v3.md @@ -29,7 +29,10 @@ F3. Zero copy is a law without escape hatches; a binder never holds atoms, it ho plan §5). F4. The 16-byte key and the 512-byte stride are canon; a tenant may be added, the stride never changes (`CLAUDE.md` § CANON — Minimal SoA node; `v3-envelope-auditor`). -F5. AdaWorldAPI forks only, never crates.io for a forked crate; the lance family excepted (`CLAUDE.md` P0). Pins: hyperon-experimental +F5. AdaWorldAPI forks only, never crates.io for a forked crate; the lance family excepted (`CLAUDE.md` P0). **⊘ v3.1 (DECISION, + 2026-10-16): NO PINS.** Git deps float on the fork's default branch (`branch = "main"`, no `rev`, no `tag`) and no `Cargo.lock` is + tracked (`lance-graph/.gitignore:15`, fork `.gitignore:8` — already so), so every build compiles the latest fork head. The SHAs + below are the heads the inventory was READ at, dated evidence, never a build pin: hyperon-experimental `3f76dc4`, PeTTa `1d19a1d`, ONA `dc4efd0`, OpenNARS Java `4d1bdb0` — MEASURED as the clone heads 2026-10-16 (`git rev-parse --short HEAD` in each clone); datafrog `edd7cfc` (master) per `crates/lance-graph-metta/Cargo.lock` (gitignored, local). F6. Hyperon's interpreter is called, never ported or modified for this; an unsupported shape is never approximated @@ -192,8 +195,8 @@ R-6 **Migration order.** W1 (R-4 binder + R-1b values) and W2 (R-1(a)/(b) loweri files; W3 (R-5) after both. No commit touches `canonical_node.rs`, `facet.rs`, `causal-edge`, relalg, or mask-risc `ir.rs`. R-7 **Deleted/kept/aliased.** Nothing deleted. `join_probe.rs`/`join_range_probe.rs` kept (quack-path precedent; G4 reads them). `lance-graph-metta/src/lib.rs` stub replaced. metta gains deps `hyperon-atom`, `hyperon-space` (`git = "https://github.com/AdaWorldAPI/hyperon-experimental"`, - `rev = "3f76dc4"`, never `branch`, never crates.io — F5, S4 #2, R3 P2), - keeps quack + mask-risc; dev-dep `hyperon` (interpreter) at the SAME rev with `default-features = false` (defaults pull `das` + `branch = "main"` — ⊘ v3.1: was `rev = "3f76dc4"`, struck by the NO PINS decision in F5; never crates.io — S4 #2, R3 P2), + keeps quack + mask-risc; dev-dep `hyperon` (interpreter) on the SAME branch with `default-features = false` (defaults pull `das` from a singnet git source and `pkg_mgmt`). Transitive set read from the fork manifests by S4: common, macros, bitset, unescaper, bimap, smallvec, log — no interpreter crate at `[dependencies]` level; G8b turns that into a `cargo tree` assertion rather than a manifest reading (R1 P2). `crates/lance-graph-metta/Cargo.lock` is gitignored (`.gitignore:15`), as the no-lock rule requires. No CI workflow names `lance-graph-metta` today; a job is a FOLLOW-UP, so G7 is a local gate in this @@ -261,7 +264,8 @@ G5 (W2/3) **`b4_nondeterm` is the ROUTING fixture, not the multiplicity fixture* $x`) is the fold fixture from Hyperon's own corpus. Kill condition rewritten: if `GroupReduce{Count}` cannot reproduce the bag fixture's multiset, the tranche ships counts only and says so. G6 (W3) **`hyperon-probe/golden` is ABSENT on disk (S3 #5); "32/33" is struck.** W3's FIRST step builds and commits the baseline: - the fork's 26 `python/tests/scripts/*.metta` run through the fork's Rust runner at `3f76dc4`, pass/fail recorded per script + the fork's 26 `python/tests/scripts/*.metta` run through the fork's Rust runner at the `main` head of the run (the sha RECORDED + with the result — ⊘ v3.1, was "at `3f76dc4`"; fork main is `e55dc61` today and carries both trie fixes), pass/fail recorded per script BEFORE any `LanceSpace` exists (MEASURED, with the command). Then: that baseline unchanged with facts moved into `LanceSpace`; every LanceSpace answer == Hyperon per CATEGORY (R-8) or a named refusal; inner-space answers counted per kind and DISJOINT from fold answers (S2 #10); PeTTa divergences logged by fixture; whole-conjunction vs per-conjunct call counts recorded. @@ -392,4 +396,5 @@ Conflicts between reviewers: none. Stricter verdict rule not invoked. | P2 plan §E still described the struck tenant; D-ASM-5 row kept it | `metta-datalog-assimilation-v1.md:97-105,132,141,181` | plan §E rewritten around the interned table; D-ASM-5 row, kill condition and ONA row reworded | | P2 D-MTP-2 gate still said "32/33 golden files" | `STATUS_BOARD.md:40` vs G6 | row gate = the 26-script baseline (G6) | | P2 N4 contradicted R-9 | this file | N4 rewritten (above) | +| DECISION (operator, 2026-10-16): no pins; always compile from latest | `.gitignore:15` (lance-graph), fork `.gitignore:8`; no `rev =` in any `Cargo.toml` (`grep`, read) | F5 ⊘ NO PINS; R-7 `branch = "main"`; G6 baseline at the run's main head, sha recorded | Nothing in §3 R-1..R-9 beyond the two ⊘ paragraphs changed; W1–W3 remain NOT authorized. diff --git a/.claude/plans/metta-datalog-assimilation-v1.md b/.claude/plans/metta-datalog-assimilation-v1.md index b484faead..d94875155 100644 --- a/.claude/plans/metta-datalog-assimilation-v1.md +++ b/.claude/plans/metta-datalog-assimilation-v1.md @@ -179,7 +179,7 @@ The target is one unified substrate. It is validated in two passes, in this orde |---|---|---|---|---| | `lance-graph-nal` | OpenNARS Java `4d1bdb0` (`RunNal.java`), ONA `dc4efd0` (`./NAR shell`) | NAL-1/2 fixtures, `revision_points.nal`; truth to one u8 code; argument order bound by rule shape | evidence classes (`INDEPENDENT/DUPLICATE/OVERLAP/NO_PROVENANCE`), W witness, 59..63 written by `pearl::hydrate`/`revise` | a population revision that refuses dependent evidence by class where both originals silently pool it; a statement's epistemic state after an executed intervention, which neither original represents | | `lance-graph-relalg` | `AdaWorldAPI/datafrog` `edd7cfc` (exact Datalog) | bags of tuples at n = 10²..10⁶; `μ` closures | 40..42 as the question asked of a join (SO/PO/SPO/SP) | a join whose pairs carry a Pearl mask and a topology, so a two-hop answer states whether the middle term is a known intermediate | -| `lance-graph-metta` | hyperon-experimental `3f76dc4` (interpreter), PeTTa `1d19a1d` | `b4_nondeterm`, `c1_grounded_basic`, `e1_kb_write`, golden 32/33, `join_n`, `anc_n`; multisets, refusals named | facts assimilated with provenance; `(stv f c)` into F/C; stamp travels as an atom | answers Hyperon panics or times out on (join_10000, anc_800) with identical multisets where it finishes; a `match` whose answer is gated by provenance, which no space in Hyperon or PeTTa can express | +| `lance-graph-metta` | hyperon-experimental `main` (interpreter; read at `3f76dc4`, no pin — ⊘ v3.1 NO PINS), PeTTa `1d19a1d` | `b4_nondeterm`, `c1_grounded_basic`, `e1_kb_write`, golden 32/33, `join_n`, `anc_n`; multisets, refusals named | facts assimilated with provenance; `(stv f c)` into F/C; stamp travels as an atom | answers Hyperon panics or times out on (join_10000, anc_800) with identical multisets where it finishes; a `match` whose answer is gated by provenance, which no space in Hyperon or PeTTa can express | | `lance-graph-ona` (when it exists) | ONA `dc4efd0` (`Term_*`, `Truth_*`, `examples/nal/*.nal`) | `Term_Hash`/`Equal`/`ExtractSubterm` byte parity on the interned heap-ordered term table (⊘ v3.1: not a per-row tenant); sensorimotor fixtures if NAL-7/8 enter scope | compound terms as a tenant addressable by strided match; events as rows with time lanes | a compound-term predicate as one fold over the population where ONA walks concepts one at a time | | `lance-graph-cog` (when it exists) | `trueagi-io/hyperon-miner` (patterns, surprisingness), PeTTa `lib_pln.metta` second, classic `opencog/miner` read-only | mined pattern set and surprisingness on the shared fixture (HY-Q15) | support counted under provenance masks; patterns scored with `NarsTruth` via `arm-discovery` | a mined pattern whose support excludes dependent evidence; attention left to #1497 |