Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
1bfd0d3
Plan: thought git replays in memory; the write is the Rubicon decision
claude Oct 20, 2026
c4754cd
Plan: strategy branches on Sudoku, judged with jc statistics
claude Oct 20, 2026
add9b1c
Plan: reasoning state, git metadata and replay in a separate table
claude Oct 20, 2026
cf82a9a
Plan: MeTTa strategies run PeTTa-style on datafrog, extracted by ruff
claude Oct 20, 2026
013628f
Plan: the relation part of the metadata table uses the D-MPS-8 layout
claude Oct 20, 2026
9547f17
Plan: thought git as a reusable API; ACT-R, graph-flow-kanban, ogar-l…
claude Oct 20, 2026
b032f86
Plan: lance-graph-supervisor as a parallel driver; kanban_actor stays…
claude Oct 20, 2026
da11af8
Plan: orchestration in phases (loco / ActionDef first, ACT-R later) a…
claude Oct 20, 2026
d81b46d
Plan: lance-graph-flow inherits the LangGraph / LangChain parts of rs…
claude Oct 20, 2026
53dfd70
Plan: OpenPsi for motivation and MeTTa over lance-graph-mork, as late…
claude Oct 20, 2026
fa3ca80
Plan: the abstraction API — datafrog asks, ACT-R chooses (D-TGB-8)
claude Oct 20, 2026
7ecd637
Plan: polyfill, never legacy
claude Oct 20, 2026
b67b5ee
Plan: first runs may call the engine crates directly
claude Oct 20, 2026
c509b51
Plan: kanban planning vocabulary later, speaking Quack-shaped folds
claude Oct 20, 2026
a0673e9
Plan: write path is Rust; datafrog folded via H14d, no gather
claude Oct 20, 2026
5889fcd
Plan: MORK/MeTTa/relalg Datalog as a later possibility
claude Oct 20, 2026
4d21e7a
Plan: put D-TGB-8's falsifier back under D-TGB-8
claude Oct 20, 2026
681185a
Board: D-MPS-7 decided, MORK is MIT
claude Oct 20, 2026
0d08ce3
Plan: a landing writes 59..63 via pearl; MUL gates it; Gadamer separa…
claude Oct 20, 2026
3ec9d3c
Board: cite the MORK owner's MIT confirmation (issue #2)
claude Oct 20, 2026
de0e27d
Board: D-MPS-7 back to OPEN — MIT intent stated, clearance incomplete
claude Oct 20, 2026
4339be7
Board: D-MPS-7 covers using MORK code, not a rewrite
claude Oct 20, 2026
b2c2e1d
Board: the Schnellverschluss is the answer to D-MPS-7
claude Oct 20, 2026
9120978
Plan: MORK's Space verbs as the standard API, our folding underneath …
claude Oct 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .claude/board/STATUS_BOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ Plan `mork-pathmap-schnellverschluss-v1.md`; entry `entries/2026-10-19-mork-path
| D-MPS-4 | upstream MORK: no library-level `jemalloc` global allocator | PROPOSAL | consumer binary sets its own allocator |
| D-MPS-5 | upstream MORK: leapfrog join generic over a cursor provider + reindex hook | PROPOSAL | MORK corpus unchanged on `PathMap<()>` |
| D-MPS-6 | Lance-owned PathMap-trait cursor over a sealed `RelationOrder` | BLOCKED (`RelationOrder` not built) | no copy, or the copy stated |
| D-MPS-7 | licence: no MORK source vendored until a licence is declared (#148 unmerged) | OPEN | probe vendors nothing |
| D-MPS-7 | licence: no MORK source vendored until a licence is declared (#148 unmerged) | OPEN (intent stated, clearance incomplete): MIT intent stated by the maintainer (Adam-Vandervorst, trueagi-io/MORK issue #2, 2025-05-21: "Yes! It's now under MIT."); formal repository-level clearance incomplete: PR #148 "Add MIT License and Cargo manifest metadata" proposed 2026-08-20, still open when observed 2026-10-19. PathMap already advertises MIT Scope (operator, 2026-10-20): the gate covers using MORK code — vendoring, redistributing or translating its source. An independent implementation, written from documented behaviour and checked against our own tests and oracles, is not blocked by it; "openmork" was named as a further option (not located by this session, URL needed). The Schnellverschluss is the design answer to this gate (operator, 2026-10-20: "That's why we implemented it with Schnellverschluss"): MORK is fetched, never vendored; nothing outside `boundary.rs` names it; deleting it is one `Index` variant, two helpers and one `Cargo.toml` line (§3 removal test); and the native arm (D-MPS-8) answers the same join without MORK code. | probe vendors nothing; vendoring waits for #148 or an equivalent LICENSE file in MORK |
| D-MPS-9 | MORK `Space` verbs (`add_sexpr`/`remove_sexpr`/`query_multi`/`transform_multi_multi`/`dump_sexpr`) as the standard API, answered by our folding; MORK as the differential oracle behind the Schnellverschluss; first scope fixed-arity shared-variable patterns, other shapes refused by name (`mork-pathmap-schnellverschluss-v1.md` §7c) | Queued (lab; DECISION 2026-10-20) | answers == MORK (sets) and datafrog (bags) per verb and fixture; disable: silently flatten a nested pattern |

## Plan links for #1601–#1617 (2026-10-20)

Expand Down Expand Up @@ -354,12 +355,16 @@ Plan: `.claude/plans/ce64-hypothesis-layers-v1.md`. Plateau: `.claude/knowledge/
| **D-TGA-4** | land through the revision gate into the next Lance version (D-HL-8) | Queued | landing a thought that is behind is refused |
| **D-TGA-5** | squash_into (partial squash) and blame | Queued | blame returns original sources after slot reuse |
| **D-TGA-6** | MergeQueue | Queued | independent thoughts == landed by hand in FIFO order; a thought reading another negated lands after it; a cycle through negation refused at enqueue |
| **D-TGB-0** | thought git basics: fixtures per Rubicon outcome, `w_slot` reference fixtures, from-scratch oracle (`thought-git-basics-v1.md`) | Queued (lab) | disables written before code |
| **D-TGB-1** | slot pool on the Rubicon crossing: slot taken at `Planning → CognitiveWork`, freed at `Commit`/`Plan`/`Prune` | Queued (lab) | no slot without a live card (no stale branch); crossing refused at 63 taken |
| **D-TGB-0** | thought git basics: fixtures per write-intention outcome, squash-stack and anomaly fixtures, absent-not-zero fixture, from-scratch oracle (`thought-git-basics-v1.md`) | Queued (lab) | disables written before code |
| **D-TGB-1** | slot pool, autonomous: taken by `branch`, freed by `squash`/`discard`/`land` (the write is the Rubicon decision, 2026-10-20) | Queued (lab) | no slot held by a thought whose result was read; at 63 taken unremarkable thoughts squash first, else `branch` refused |
| **D-TGB-2** | `w_slot` lane labels (W = thought layer, not a pointer) qualified by base version / slot generation | Queued (lab) | no live cell carries a landed slot; old-generation edge refused |
| **D-TGB-3** | `Commit` lands one sparse batch through `LanceCycleWriter`; `DurableRef` = dataset + `Ref::Version(branch, version)` | Queued (lab) | empty cycle writes nothing; re-submit reconciles; two branches at version 7 told apart |
| **D-TGB-4** | receipt (base ref, program id, seeds, slot generation) instead of history | Queued (lab) | replay from receipt reproduces writes cell for cell |
| **D-TGB-5** | reads as resident folds: `checkout`/`log`/`diff`/`blame` | Queued (lab) | equal the oracle; durable `diff` equals Lance `delta()` |
| **D-TGB-7** | reusable git API: verb trait + types in the contract, one implementation crate; phase-1 driver `ogar-loco` / `ActionDef`, ACT-R in phase 2; first runs may call the engine crates directly; stack below: datafrog > mask-risc > relalg > r2il | Queued (lab) | driver independence: two drivers with the same decisions give byte-identical cells, receipts, metadata rows |
| **D-TGB-8** | abstraction API: Datalog rules over the metadata table on `datafrog`; ACT-R `Candidate` / intent as the decision vocabulary | Queued (lab, after D-TGB-7) | rule answers == direct scan; recorded intents replayed as verbs reproduce the run byte for byte |
| **D-TGB-9** | kanban planning vocabulary (later): fast API; verbs OPEN; must speak Quack-shaped folds (`Filter` → mask, `Agg` fold, lowered to mask-risc) | Queued (lab, later) | planning answers == hand-written Quack `Query`; no allocation proportional to card count |
| **D-TGB-10** | folded `datafrog` rules: D-TGB-8 rules as H14d stages (normalize/symbolic → address mask → Lance prefilter → terminal) over the metadata table; no gather; recursion stays on `datafrog` until D-MTP-3 | Queued (lab, probe first) | bag of tuples == `datafrog`; costs reported, no threshold before the run |
| **D-TGB-6** | MemWAL `Commit` arm behind a switch, reads stay resident | Queued; waits on D-LNC-7 | enabled only past the D-WAL crossover |
| **D-HL-9** | Hydration budget split sweep | Queued | agreement not flat in k |
| **D-HL-10** | NAL inference ISA: `ogar-nal` loco vocabulary + mask-risc dialect (a vocabulary on the existing IR, ledger R18); detailed as D-NALP | Queued (design; after D-HL-4) | per-op parity with the CE64 register method of the same name; agreement with OpenNARS within D-HL-4's tolerance; no second IR |
Expand Down
2 changes: 1 addition & 1 deletion .claude/board/SUPERSESSION-INDEX.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ coverage instead.
| `persist_cycle` | BLOCKED | — | 12 | 8 | 5 |
| `CognitiveMarkers` | REPURPOSE | `Commit` | 1 | 0 | 0 |
| `DominoCascade` | REPURPOSE | `Commit` | 7 | 1 | 0 |
| `GateDecision` | REPURPOSE | — | 25 | 29 | 26 |
| `GateDecision` | REPURPOSE | — | 25 | 30 | 26 |
| `GateState` | REPURPOSE | — | 14 | 1 | 1 |
| `MergeMode` | REPURPOSE | — | 8 | 14 | 13 |
| `ResonanceDto` | REPURPOSE | `PerturbationDto` | 2 | 12 | 7 |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# 2026-10-20 — Thought git: replay is the API, the write is the Rubicon decision

**Status:** DECISION (operator, 2026-10-20) for the principle; WORKING-MODEL for the kanban mapping and the anomaly predicate. **Basis:** the operator's words (quoted in `thought-git-basics-v1.md` § "Correction: replay is the API, the write is the Rubicon decision") and the implementation read the same day (`alpha.rs`, `alpha_tunnel.rs`, `givens_layer_probe`, `thought_layers_probe`, the split-tunnel doc).

- One fold ≈ 1.7 ns, so one write buys 10⁶–10⁸ folds (operator: 233–350 ms per write; measured here: 1.7 ms floor, 5.8–10.5 ms `LanceCycleWriter` commit, 336 ms Lance scan).
- 99.9 % of thought git operations (branch, write, diff, status, squash, discard, replay) are autonomous in-memory heuristics with no Lance call.
- A thought without anomaly is squashed onto the stack and work continues on a new branch. Anomaly signals already in code: contradiction records, regressions (`visits > 1`), cold/hot surprise (`expected.xor(attended)`), divergence between thoughts (`differs`).
- Landing into Lance is the conscious Heckhausen Rubicon decision, taken when the result is satisfactory. A kanban card tracks the write intention, not the branch.
- Presence decides what is written: an absent lane is unknown (the NaN case), never zero; agreement with a given is not stored; a contradiction is a record, never a stored value.
- Rebase is replay of the receipt on the new base; v1 needs no recursion driver.
- "Satisfactory" is measured by automated hypothesis testing: each strategy is a branch on the same Sudoku fixture, compared and synthesized with `jc` statistics (an R-style API, interface OPEN). Engines in parallel: act-r, metta, nal, relalg, mask-risc exist; cog (Hyperon) and ona do not yet. First the strategies on Sudoku, then the 115 rows of `nal_inventory.tsv` as MeTTa programs.
- D-TGB-0 and D-TGB-1 re-specified; the old "slot taken at the Rubicon crossing" is struck.

- MeTTa strategies run PeTTa-style: compiled to relational clauses that execute on `datafrog` instead of SWI-Prolog; `ruff_metta_spo` extracts and classifies each rule under PeTTa's natives; `hyperon-experimental` is optional, for the interpreter-only rest and as a cross-check.
- Reasoning state (relalg, Datalog, datafrog), git metadata (PR entries) and replay receipts live in one separate table keyed by (data dataset, data version, thought id), so the data table and the metadata table do not depend on each other's schema. OPEN: the two writes are two Lance versions and not atomic together; data first, then metadata, and a missing metadata row is detected at replay.

OPEN: the anomaly predicate and thresholds; what "satisfactory" means for a write; card granularity.

**Addendum (operator, 2026-10-20):** "Du kannst alternativ gerne direkt die crates ansprechen das ist für das Internet Timing erstmal besser". DECISION: first runs may call the engine crates (act-r, datafrog, relalg, mask-risc, metta, nal) directly; the verb trait stays the target and they move behind it once it exists. Polyfill-never-legacy is unaffected. Plan: `thought-git-basics-v1.md`, section "Addressing the crates directly is allowed first".

**Addendum (operator, 2026-10-20):** "Kanban sollte später planungs Vokabular mit einer schönen schnellen effektiven API erhalten. Was lasse ich gerne offen. Es muß aber auch quack shaped folding polyfill methods verstehen". DECISION: D-TGB-9, later; vocabulary OPEN; fixed that planning questions are Quack-shaped folds (filter → mask, `Agg` fold, lowered to mask-risc), `PhaseCensus` as precedent.

**Addendum (operator, 2026-10-20):** "Internes Timing" (correcting "Internet Timing"): direct crate calls are for runtime cost, not schedule. "Ein schreibpfad braucht rust, keine API … Der kommt dagegen schon <> git/kanban": landing is concrete Rust, triggered by a kanban card, leaving its receipt in the metadata table. "datafrog > quack / folding RISC simd": the measured 8–15× Semijoin lowering rests on gather, forbidden since 2026-10-16; the allowed route is H14d's four stages (join is the layout). Recursion stays on `datafrog` until D-MTP-3. New D-TGB-10 (probe).

**Addendum (operator, 2026-10-20: "Mork hat die MIT Entscheidung bereits auf dem Board bestätigt"):** D-MPS-7 is decided, MIT. The board record the operator refers to was not found by this session in `.claude/` on main or in Linear P-EXO-3; the operator's words are the cited source. MeTTa over `lance-graph-mork` and MORK/MeTTa/relalg Datalog are no longer licence-blocked.

**Addendum (operator, 2026-10-20):** "Causaledge64 hydrate.rs pearl::hydrate / Ce64 59..63 / MUL meta uncertainty Layer / Contradiction<> revision (Gadamer". WORKING-MODEL in the plan: a landing writes 59..63 (`EpistemicState5`) through `pearl::hydrate` (topology only) and `pearl::revise` (certification only, never lowered); the MUL kanban gate decides whether the write crosses the Rubicon; `GadamerRevision` separates a preserved contradiction from a fusion by a new independent root, so replayed inherited material can never raise certification.

**Correction to the D-MPS-7 addendum:** the source is found. Adam-Vandervorst, trueagi-io/MORK issue #2 "License", 2025-05-21: "Yes! It's now under MIT." (https://github.com/trueagi-io/MORK/issues/2; PR #148 follows up on it). The earlier sentence "not found by this session" was a search restricted to this repo and Linear.

**Correction (operator, 2026-10-20), D-MPS-7:** the "DECIDED: MIT" above overstated it. Facts: PR #148 "Add MIT License and Cargo manifest metadata" proposed 2026-08-20; still open on 2026-10-19; PathMap already advertises MIT; MORK's maintainer stated MIT intent (issue #2, 2025-05-21), but formal repository-level clearance is incomplete. D-MPS-7 is back to OPEN; vendoring waits for #148 or an equivalent LICENSE file.


**Addendum (operator, 2026-10-20):** "we want to use our own folding algorithm anyway and just use it to standardize the API". DECISION: MORK is not rewritten; its `Space` verbs are the API shape, our folding answers them, MORK stays the oracle (D-MPS-9, mork plan §7c). Measured MORK size: kernel 15,435 lines, expr 6,544, linalg 6,858.
3 changes: 2 additions & 1 deletion .claude/board/entries/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

386 entries, 2026-08-06 .. 2026-10-20.
387 entries, 2026-08-06 .. 2026-10-20.

| date | entry id | finding | file |
|---|---|---|---|
| 2026-10-20 | `thought-git-replay-api-write-rubicon` | | [2026-10-20-thought-git-replay-api-write-rubicon.md](2026-10-20-thought-git-replay-api-write-rubicon.md) |
| 2026-10-20 | `relstore-quack-petgraph-plan` | | [2026-10-20-relstore-quack-petgraph-plan.md](2026-10-20-relstore-quack-petgraph-plan.md) |
| 2026-10-20 | `D-RST` | | [2026-10-20-relstore-geometry-not-graph-api.md](2026-10-20-relstore-geometry-not-graph-api.md) |
| 2026-10-20 | `recursive-perspective-rebinding` | | [2026-10-20-recursive-perspective-rebinding.md](2026-10-20-recursive-perspective-rebinding.md) |
Expand Down
24 changes: 23 additions & 1 deletion .claude/plans/mork-pathmap-schnellverschluss-v1.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,28 @@ The Schnellverschluss does not touch the witness. Switching the backend between

**What this does not cover.** Cyclic bodies: the triangle `R(a,b), S(b,c), T(a,c)` needs two variables co-addressed at once, which a one-variable domain cannot give. The 256 × 256 tile of D-RMAP-1A §8 does it for a small focus only, and nothing here covers large domains. Chain joins: stepping from `y` results to `z` slots over a large domain would need a scatter, which stays forbidden. Enumeration and the count's `Σ_y |R_y| · |S_y|` are plain loops; only the intersection runs on mask-risc, which delegates to `ndarray::simd`.

## 7c. MORK's API as the standard surface, our folding underneath (DECISION, operator, 2026-10-20)

Operator: "Given that we want to use our own folding algorithm anyway and just use it to standardize the API". MORK is not rewritten. Its public `Space` verbs become the API shape lance-graph offers, and our own folding answers them; MORK stays behind the Schnellverschluss as the differential oracle. No MORK code is copied, only the verb set is matched (D-MPS-7 gates code, not the shape of an interface).

**The verb set, read from `kernel/src/space.rs` (trueagi-io/MORK `main`, cloned 2026-10-20):**

| MORK verb | what it does | our side |
|---|---|---|
| `add_sexpr` / `remove_sexpr (r, pattern, template)` | load facts, each matched by `pattern` and stored as `template` | write lanes and presence planes of a relation (D-MPS-8 layout) |
| `query_multi (pattern, effect)` | every binding of `pattern` over the space | H14d stages: normalize → address mask → masked read → terminal |
| `transform_multi_multi (pattern, template, add)` | rewrite matches of `pattern` into `template` | one fold per step; to a fixpoint once relalg μ exists (D-MTP-3) |
| `dump_sexpr (pattern, template)` | emit matches through a template | terminal over the address mask |
| `load_csv` / `load_json` / `load_jsonl` | ingest with a pattern / template pair | ingest into lanes; not needed first |

Neo4j loaders, symbol and tree backup/restore and the parsers are out of scope.

**Sizes measured (Rust lines, upstream `main`):** `kernel` 15,435 (of which `main.rs` 6,491 examples/CLI, `space.rs` 2,033, `leapfrog.rs` 3,919), `expr` 6,544, `linalg` 6,858, `interning` + `frontend` + `experiments` 4,709. A façade matching the verbs is far smaller than any of these, because the execution is ours.

**Bounded first scope:** patterns of fixed arity whose variables are shared between atoms (the joins D-MPS-8 already answers). Anything else is refused by name, never approximated: nested patterns, a variable repeated inside one atom, cyclic bodies (they need `EqU32ViaLane` / `RunsMeet`, ratified but not authorized), and multiplicities where MORK is set-only (`Refusal::SetOnly`).

**Falsifier:** for every verb and fixture, the façade's answer equals MORK's through `boundary.rs` (as sets, since MORK stores sets) and datafrog's (as bags where multiplicity matters); a refused shape is refused by name on both arms. Disable: let the façade answer a nested pattern by flattening it silently; the oracle must then disagree.

## 8. Deliverables

| D-id | Item | Status | Gate / evidence |
Expand All @@ -181,7 +203,7 @@ The Schnellverschluss does not touch the witness. Switching the backend between
| D-MPS-4 | Upstream (MORK): do not enable PathMap `jemalloc` in a library dependency (leave the allocator to binaries) | PROPOSAL | a consumer binary can set its own allocator |
| D-MPS-5 | Upstream (MORK): `UnifyJoin` / `query_multi_leapfrog` generic over a cursor provider + reindex hook | PROPOSAL | MORK's own differential corpus unchanged on `PathMap<()>` |
| D-MPS-6 | Lance-owned PathMap-trait cursor over a sealed `RelationOrder` view | BLOCKED: `RelationOrder` is not built (D-RMAP PROPOSED) | must show no copy, or state the copy it needs |
| D-MPS-7 | Licence: no MORK source moved into or redistributed from lance-graph until MORK declares a licence (PR #148 unmerged) | OPEN | the probe fetches MORK and vendors nothing |
| D-MPS-7 | Licence: no MORK source moved into or redistributed from lance-graph until MORK declares a licence (PR #148 unmerged) | OPEN (intent stated, clearance incomplete): MIT intent stated by the maintainer (Adam-Vandervorst, trueagi-io/MORK issue #2, 2025-05-21: "Yes! It's now under MIT."); formal repository-level clearance incomplete: PR #148 "Add MIT License and Cargo manifest metadata" proposed 2026-08-20, still open when observed 2026-10-19. PathMap already advertises MIT. ⊘ Struck 2026-10-20: "DECIDED: MIT" — it overstated the state; the intent is the maintainer's, the repository does not yet carry it Scope (operator, 2026-10-20): the gate covers using MORK code — vendoring, redistributing or translating its source. An independent implementation, written from documented behaviour and checked against our own tests and oracles, is not blocked by it; "openmork" was named as a further option (not located by this session, URL needed). The Schnellverschluss is the design answer to this gate (operator, 2026-10-20: "That's why we implemented it with Schnellverschluss"): MORK is fetched, never vendored; nothing outside `boundary.rs` names it; deleting it is one `Index` variant, two helpers and one `Cargo.toml` line (§3 removal test); and the native arm (D-MPS-8) answers the same join without MORK code. | the probe fetches MORK and vendors nothing; vendoring waits for #148 or an equivalent LICENSE file |
| — | Native lance-graph arm for this join | ~~BLOCKED by the no-gather ruling~~ MEASURED as a probe (§7b); not admitted until the D-RMAP-1 BIND membrane review | a co-addressed producer for the input shape (`src/join.rs`); 8 + 2 tests vs the oracle; 7 guards disable-verified |
| D-MPS-8 | Versioned relationship table: one shared-variable domain, per-side generations, side reseal, filter planes per thought, star on one variable | MEASURED, probe | §7b; cyclic bodies and chain joins over large domains open |

Expand Down
Loading
Loading