Skip to content

feat(contract): D-MBX-A6-P2 — Rubicon kanban lifecycle enforcement + ExecTarget strategy tag#439

Merged
AdaWorldAPI merged 31 commits into
mainfrom
claude/sleepy-cori-aRK2x
May 30, 2026
Merged

feat(contract): D-MBX-A6-P2 — Rubicon kanban lifecycle enforcement + ExecTarget strategy tag#439
AdaWorldAPI merged 31 commits into
mainfrom
claude/sleepy-cori-aRK2x

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented May 30, 2026

Copy link
Copy Markdown
Owner

D-MBX-A6 Phase 2 — Rubicon kanban lifecycle enforcement + planner exec-target tag

Builds on #437 (D-MBX-A6-P1, merged). The schedule-layer spine that the ractor SoA owner drives and the planner candidate-generation emits into — all in the zero-dep lance-graph-contract.

Added

  • KanbanColumn::next_phases() + can_transition_to() — the Rubicon lifecycle DAG as a contract-level, testable invariant:
    Planning ─▶ CognitiveWork ─▶ Evaluation ─▶ { Commit | Plan | Prune }
       └▶ Prune (pre-Rubicon Libet veto)            └ Plan ─▶ Planning (re-deliberate)
    
  • KanbanColumn::is_absorbing() — disambiguates cycle-end columns (Commit calcify / Prune drop, tombstone now) from Plan (terminal decision that re-deliberates back to Planning). The ractor driver tombstones iff absorbing; the cycle-end commit/SLA decision (board LE-3) hooks here. (Fixes the latent is_terminal-vs-has-successor ambiguity a reviewer would flag.)
  • MailboxSoaOwner::try_advance_phase() — checked default method: validates the edge against the DAG, returns KanbanMove on a legal transition or RubiconTransitionError on an illegal one (no mutation). Lifecycle enforcement the ractor lifecycle driver uses — illegal transition is a typed error, not silent corruption.
  • ExecTarget { Native, Jit, SurrealQl, Elixir } — the planner JIT-adjacent execution-target (strategy) tag, now a field on KanbanMove. Resolves the deferred NOTE from feat(contract): D-MBX-A6 Phase 1 — planner⟷ractor⟷surreal meta-DTO (kanban + soa_view + StepDomain::Kanban) #437. Distinct from the planner's 16 composable planning strategies — this names where the precipitated plan runs (native engine / Cranelift-JITson kernel / lowered SurrealQL / Elixir-like template).

Invariants

  • Contract [dependencies] stays empty (zero-dep). KanbanMove is still Copy and ≤ 16 B (const _ size assertion holds with the new ExecTarget field).

Verification

  • cargo test -p lance-graph-contract489 lib tests (+4 new: lifecycle DAG, absorbing-vs-terminal, try_advance_phase enforcement, ExecTarget default) + all integration suites green.
  • cargo check clean on lance-graph-planner, cognitive-shader-driver, lance-graph-supervisor (the KanbanMove field addition is handled in the soa_view fake-impl; no exhaustive-match breakage).
  • cargo machete clean; touched files rustfmt-clean (pinned 1.95.0).

Board hygiene (same PR)

STATUS_BOARD.md D-MBX-A6-P2 row + EPIPHANIES.md entry.

Next (deferred, P3)

The consumer side: impl MailboxSoaOwner for MailboxSoA<N> (ractor-owned, in cognitive-shader-driver) wiring try_advance_phase into the actual lifecycle, and planner candidate-gen emitting KanbanMoves with the selected ExecTarget.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Selectable execution backend for kanban moves (Native, JIT, SurrealQL, Elixir).
    • Phase transitions now validated with legality checks and clear error feedback on invalid moves.
  • Documentation

    • Added an end-to-end completion roadmap, expanded architectural epiphanies and loose-ends, and refreshed the current-state/status board entries.

Review Change Stack

@coderabbitai

coderabbitai Bot commented May 30, 2026

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds Rubicon lifecycle enforcement: DAG-based Kanban transition helpers, an ExecTarget tag on KanbanMove, a RubiconTransitionError type, MailboxSoaOwner::try_advance_phase() that rejects illegal transitions without mutation, expanded crate re-exports, and related documentation updates.

Changes

Rubicon Lifecycle Enforcement

Layer / File(s) Summary
Kanban transition contract and types
crates/lance-graph-contract/src/kanban.rs
KanbanColumn gains is_absorbing, next_phases, and can_transition_to. KanbanMove adds exec: ExecTarget; ExecTarget enum and RubiconTransitionError type with Display added. Tests updated for transition legality, absorbing semantics, and ExecTarget defaults.
MailboxSoaOwner phase validation
crates/lance-graph-contract/src/soa_view.rs
Adds try_advance_phase(&mut self, to) -> Result<KanbanMove, RubiconTransitionError> that gates advance_phase on can_transition_to and returns RubiconTransitionError on illegal edges without mutating. FakeSoa tests populate ExecTarget::Native; new unit test covers rejection of illegal transitions and acceptance of legal ones.
Public API surface
crates/lance-graph-contract/src/lib.rs
Crate root re-exports expanded to include ExecTarget and RubiconTransitionError alongside KanbanColumn and KanbanMove.
Status and design documentation
.claude/board/D-MBX-COMPLETION-MAP.md, .claude/board/EPIPHANIES.md, .claude/board/LATEST_STATE.md, .claude/board/STATUS_BOARD.md
Add D-MBX completion map and prepend epiphanies describing the contract slice; update LATEST_STATE and STATUS_BOARD to mark D-MBX-A6-P1 shipped and D-MBX-A6-P2 in PR; enumerate loose ends and execution checklist.

Sequence Diagram

sequenceDiagram
  participant Client
  participant MailboxSoaOwner
  participant KanbanColumn
  Client->>MailboxSoaOwner: try_advance_phase(to)
  MailboxSoaOwner->>KanbanColumn: can_transition_to(to)
  alt legal
    MailboxSoaOwner->>MailboxSoaOwner: advance_phase(to)
    MailboxSoaOwner-->>Client: Ok(KanbanMove{ exec })
  else illegal
    MailboxSoaOwner-->>Client: Err(RubiconTransitionError{from,to})
    Note over MailboxSoaOwner: no state mutation
  end
Loading

Possibly related PRs

  • AdaWorldAPI/lance-graph#437: Introduced Phase-1 kanban/SoA contracts that this PR extends with Rubicon transition legality, ExecTarget, and try_advance_phase.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 Hops checked, moves aligned,

Mailbox waits, no state unkind.
Exec tags hum, the DAG approves,
Transitions tested, tidy grooves.
A carrot cheer for clean-up moves.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title precisely captures the two main changes: Rubicon kanban lifecycle enforcement and the ExecTarget strategy tag, both of which are primary features added in the contract changes.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/sleepy-cori-aRK2x

Comment @coderabbitai help to get the list of available commands and usage tips.

AdaWorldAPI pushed a commit that referenced this pull request May 30, 2026
…h, gating OQs

Maps the whole unified-soa-convergence arc to completion: what's shipped (A1/A6-P1)
vs in-PR (A6-P2 #439) vs queued; the dependency DAG; the critical path
(A6-P3 -> A2 -> A3 -> A5 -> D-MBX-7 -> D-MBX-9 -> D-MBX-12); the gating open
questions (OQ-11.6 surreal fork blocks the D-MBX-9 payoff); LE-1..4 + EW64 fold-in;
recommended autonomous order (D-MBX-11 mechanical, then A6-P3 consumer wiring).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/board/D-MBX-COMPLETION-MAP.md:
- Line 15: The fenced code block starting at the shown fence in
D-MBX-COMPLETION-MAP.md is missing a language tag (triggering MD040); update the
opening fence to include a language identifier (for example change ``` to
```text) so the block is labeled (e.g., use "text" if it’s plain output),
leaving the block content and closing fence unchanged.

In `@crates/lance-graph-contract/src/kanban.rs`:
- Around line 148-168: Add an implementation of the Error trait for
RubiconTransitionError to match crate convention: add an empty impl
core::error::Error for RubiconTransitionError block (do not change the existing
Display impl), mirroring how CodecParamsError implements core::error::Error and
avoiding adding std::error::Error unless other types in this crate for the same
error category also implement std::error::Error (see
WidgetRenderError/CodecParamsError for reference).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: dbda1b19-bf8f-4d37-8856-b3868fa97d14

📥 Commits

Reviewing files that changed from the base of the PR and between 9161bd7 and b499e4d.

📒 Files selected for processing (7)
  • .claude/board/D-MBX-COMPLETION-MAP.md
  • .claude/board/EPIPHANIES.md
  • .claude/board/LATEST_STATE.md
  • .claude/board/STATUS_BOARD.md
  • crates/lance-graph-contract/src/kanban.rs
  • crates/lance-graph-contract/src/lib.rs
  • crates/lance-graph-contract/src/soa_view.rs

Comment thread .claude/board/D-MBX-COMPLETION-MAP.md Outdated
Comment thread crates/lance-graph-contract/src/kanban.rs
AdaWorldAPI pushed a commit that referenced this pull request May 30, 2026
…D040 fence tag (CodeRabbit #439)

- RubiconTransitionError now impls core::error::Error (empty block), matching the
  crate convention (cam::CodecParamsError) so it composes with ? / Box<dyn Error>.
- D-MBX-COMPLETION-MAP.md: language-tag the DAG fence (markdownlint MD040).
- Board: E-VERSION-ARC-IS-THE-KANBAN finding (the mailbox Lance version timeline IS
  the kanban arc for free; consume via surreal LIVE subscription like a GitHub
  CI/PR subscription; witness pointer = (mailbox_id, lance_version); D-MBX-9
  collapses to subscription-wiring, substrate-free).

489 lib tests green; kanban rustfmt-clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/board/EPIPHANIES.md:
- Around line 7-15: The markdown table block currently isn't surrounded by blank
lines which triggers MD058; edit the EPIPHANIES.md content so there is an empty
line immediately before the line starting with "**The consumption pattern..."
and an empty line immediately after the closing table markup (the line with the
last table row or the paragraph that follows the table) so the table is
separated by blank lines and satisfies markdownlint MD058.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f6f236ba-fb1c-4637-8996-2c6b8839b6e6

📥 Commits

Reviewing files that changed from the base of the PR and between b499e4d and 53cfe0e.

📒 Files selected for processing (3)
  • .claude/board/D-MBX-COMPLETION-MAP.md
  • .claude/board/EPIPHANIES.md
  • crates/lance-graph-contract/src/kanban.rs
✅ Files skipped from review due to trivial changes (1)
  • .claude/board/D-MBX-COMPLETION-MAP.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/lance-graph-contract/src/kanban.rs

Comment thread .claude/board/EPIPHANIES.md
AdaWorldAPI pushed a commit that referenced this pull request May 30, 2026
…8 table blank-lines (CodeRabbit #439)

- E-SUBSTRATE-IS-THE-SCHEDULER: surreal time-series/LIVE over the version arc is a
  cheap planner->execution scheduler firing back INTO the mailbox. Completes the
  substrate<->mailbox loop (outbound = E-VERSION-ARC free kanban; inbound = surreal
  schedules next advance_phase). Two-clock decoupling for free; ExecTarget::SurrealQl
  made literal (scheduled query = trigger + backend).
- D-MBX-COMPLETION-MAP: D-MBX-9 reframed as a bidirectional subscription (not a build).
- MD058: blank lines around tables in both new EPIPHANIES entries (swept both, not
  one-at-a-time, to stop the markdownlint round-trip).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
AdaWorldAPI pushed a commit that referenced this pull request May 30, 2026
…i4-32D style -> tau -> JITson/Cranelift template -> KernelHandle); recipes are what styles select

Corrects the recipe-centric framing. Grounded: contract::thinking = 36 styles/6 clusters,
each mapped to a tau macro address for JIT; contract::jit = JitTemplate -> JitCompiler
(ndarray Cranelift) -> KernelHandle -> StyleRegistry cache. Full substrate pipeline (all
shipped, unwired into planner): i4-32D style -> tau -> JITSON template -> Cranelift ->
native KernelHandle; style also selects the recipe/Tactic. Grounds #439's ExecTarget::Jit
(= jit.rs path) and ::Elixir (= recipe_kernels interpreted layer). Minimal slice should wire
STYLE SELECTION first, then recipe/kernel dispatch. Re-centering the in-flight Opus map.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
claude added 18 commits May 30, 2026 22:34
…W64 coref pointer, cold SPO+AriGraph unify, Rubicon commit, BindSpace consumers)

E-DUPLICATION-IS-INTRINSIC-VS-TEMPORAL: the fixed-SoA 'duplicate' = intrinsic awareness
(CE64/gestalt) vs temporal belief-state arc (EW64/witness) = AriGraph Es/Ee = SoA1:SoA2;
TD-RESONANCEDTO-DUP-1 is name-it-not-collapse-it. LE-1 EW64 as relativ-pronoun witness
pointer (DeepNSM>Markov>grammar, no bundling); LE-2 unify cold SPO + cold AriGraph
(EW64 = cheap witness pointer); LE-3 mailbox-cycle-end Rubicon commits SPO-W to cold +
SLA/goalstate; LE-4 Odoo/OWL business substrate = other session. + BindSpace consumer map.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…get strategy tag

Schedule-layer spine for the ractor SoA owner + planner candidate-gen:
- KanbanColumn::{next_phases, can_transition_to} — the Rubicon lifecycle DAG
  (Planning->CognitiveWork->Evaluation->{Commit|Plan|Prune}; Planning->Prune Libet
  veto; Plan->Planning re-deliberate; Commit/Prune absorbing).
- KanbanColumn::is_absorbing — cycle-END (Commit/Prune, tombstone) vs Plan
  (terminal decision that re-deliberates); ractor driver tombstones iff absorbing
  (LE-3 cycle-end commit/SLA hooks here).
- MailboxSoaOwner::try_advance_phase — checked default; legal edge -> KanbanMove,
  illegal -> RubiconTransitionError (no mutation). Lifecycle enforcement is now a
  contract-level testable invariant the ractor driver uses.
- ExecTarget{Native,Jit,SurrealQl,Elixir} on KanbanMove — planner JIT-adjacent
  execution-target tag (resolves the #437 deferred NOTE; KanbanMove still <=16 B).

Zero-dep preserved; 489 contract lib tests (+4); planner/shader-driver/supervisor
cargo-check clean. Board: STATUS_BOARD D-MBX-A6-P2 + EPIPHANIES (same commit).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…h, gating OQs

Maps the whole unified-soa-convergence arc to completion: what's shipped (A1/A6-P1)
vs in-PR (A6-P2 #439) vs queued; the dependency DAG; the critical path
(A6-P3 -> A2 -> A3 -> A5 -> D-MBX-7 -> D-MBX-9 -> D-MBX-12); the gating open
questions (OQ-11.6 surreal fork blocks the D-MBX-9 payoff); LE-1..4 + EW64 fold-in;
recommended autonomous order (D-MBX-11 mechanical, then A6-P3 consumer wiring).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…D040 fence tag (CodeRabbit #439)

- RubiconTransitionError now impls core::error::Error (empty block), matching the
  crate convention (cam::CodecParamsError) so it composes with ? / Box<dyn Error>.
- D-MBX-COMPLETION-MAP.md: language-tag the DAG fence (markdownlint MD040).
- Board: E-VERSION-ARC-IS-THE-KANBAN finding (the mailbox Lance version timeline IS
  the kanban arc for free; consume via surreal LIVE subscription like a GitHub
  CI/PR subscription; witness pointer = (mailbox_id, lance_version); D-MBX-9
  collapses to subscription-wiring, substrate-free).

489 lib tests green; kanban rustfmt-clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…8 table blank-lines (CodeRabbit #439)

- E-SUBSTRATE-IS-THE-SCHEDULER: surreal time-series/LIVE over the version arc is a
  cheap planner->execution scheduler firing back INTO the mailbox. Completes the
  substrate<->mailbox loop (outbound = E-VERSION-ARC free kanban; inbound = surreal
  schedules next advance_phase). Two-clock decoupling for free; ExecTarget::SurrealQl
  made literal (scheduled query = trigger + backend).
- D-MBX-COMPLETION-MAP: D-MBX-9 reframed as a bidirectional subscription (not a build).
- MD058: blank lines around tables in both new EPIPHANIES entries (swept both, not
  one-at-a-time, to stop the markdownlint round-trip).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…lot/4096 surface

Grounded read (file:line agent map): polyglot frontends (Cypher/GQL/Gremlin/SPARQL)
ARE wired to one LogicalOperator IR, but (1) '4096 surface' is 4 distinct uses of the
magic number with NO canonical type, and (2) frontend->4096->SoA does NOT exist (IR is
string-keyed end-to-end; DeepNSM's 4096 vocab runs parallel, unintegrated). SQL=backend
only, NARS=truth-only (no parser), GEL=absent. Real shippable slice = the polyglot
IR-conformance loop (grounds the untested hub via the existing conformance harness),
then sequenced P-B unify-4096 / P-C NARS-frontend / P-D frontend->4096->SoA.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…raph, BEAM-analogous), NOT a query dialect

Corrects my 'GEL absent' misread (I pattern-matched to EdgeDB's rebrand; wrong).
Per user: GEL is their coinage = a graph substrate representing ANY language in
graph form, analogous to OTP/BEAM. Repositions GEL as the IR/substrate layer
(what frontends lower INTO), not a frontend. The BEAM analogy is already partly
built: ractor = BEAM actor model in Rust; ExecTarget::Elixir = the BEAM-analogous
exec path; version arc = the GEL execution trace; SoA = GEL state. GEL is the NAME
for the D-MBX convergence, not a new component. Notes holograph 'GEL=global
execution layer' as adjacent prior-art to reconcile.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…user pointer to planner path)

Verified arena.push counts: Gremlin(37)+SPARQL(31) transpile to LogicalOp IR
in-strategy; Cypher(0)+GQL(0) feature-detect then build via shared ArenaIR (#2).
Two IR-construction routes converging on one LogicalOp arena that NOTHING asserts
agree — exactly the gap the polyglot conformance loop (P-A) closes (GQL only flips
feature bits today). 4096-in-planner = AutocompleteCache 64x64 heads (NOT deepnsm
COCA-4096); parser->4096 join = cache/convergence.rs (the same half-built p64-drift
terminus). Revises P-A to assert both dialect- AND route-equivalence.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…ned for efficiency, not 4 magic numbers

Corrects my E-POLYGLOT-4096-IS-CONJECTURAL 'four unrelated 4096s' claim. Per user:
the surfaces (COCA vocab, 64x64 attention heads, BindSpace 16x256, distance matrix)
were deliberately aligned to the 0xFFF/12-bit address width so a parsed symbol /
vocab rank / head / SoA slot co-index WITHOUT translation (the efficiency reason).
CAM addressing invariant: content -> fixed-width address -> every layer indexes by it.
Still-true: end-to-end frontend->0xFFF->SoA resolution is not yet called (string-keyed
IR; convergence.rs partial) — but alignment makes wiring it cheap. Reframes P-B from
'merge 4 things' to 'declare the 0xFFF width as one canonical 12-bit type'.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…process layer

Answers the transport question from ractor source: local actor msg = Box<dyn Any>
pointer-move over Tokio mpsc + downcast (message.rs:62,102), ZERO serialize; gRPC
(protobuf+HTTP/2+socket) is strictly slower and is LAB-ONLY (lab-vs-canonical:52-54,
feature-gated, tonic optional). ractor's own distributed path = raw TCP serialize
(ractor_cluster), not gRPC. The gRPC/Ballista/Flight + CAM/0xFFF occurrences are the
cross-PROCESS movement layer where CAM = the compact 12-bit/6-byte wire form. Maps to
inside(Tokio-Baton)/outside(cluster-TCP or Flight-CAM); gRPC=outside+lab, never inside.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…ept-for-concept to the D-MBX arc

Cloned adaworldapi/firefly read-only (public, outside authorized scope). It's a runnable
GEL substrate (any-lang->1.25KB Hamming node->executor; RUBBERDUCK/PYTHONIC/JAVELIN/RUSTLER
compilers) + the OUTSIDE-transport prototype. CORRECTION: transport is Redis-streams mRNA,
NOT gRPC (the gRPC framing is the analog). FireflyPacket (80B LE header + 1250B 10K-Hamming
4-zone + ctx) = the serialized cross-process Baton; addresses route / payload rides = '0xFFF
as transport'. Independent convergence on hot-parallel/commit-single (RISC inv 4), backpressure
(inv 8), 4-signature decomposition (= SoA column families), witness-as-trace (ttl/hop/trace=R4).
Open: 256-bit SHA addr vs 12-bit 0xFFF; Redis-mRNA vs cluster-TCP vs Flight-CAM; trinity vs
unify-on-Lance. Kept read-only ref; not in push scope.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…x planning substrate; distribution = one gRPC packet (BEAM location transparency)

The planning-substrate answer for D-MBX-A6-P3: plan = a packet hopping a node-graph
(firefly model), each hop = phase commit = version, trace = witness arc, ExecTarget =
how each node runs. Punchline: because the substrate IS packet-based, the in-mailbox
plan state is already a complete serializable execution context, so cross-server
distribution = serialize once + gRPC hop to another instance (location transparency,
the BEAM/ractor model). Reconciles with E-RACTOR-WANTS-TOKIO-NOT-GRPC: inside hop =
move struct zero-serialize; outside hop = serialize ONCE at the boundary. Records the
5 design forks (DTO shape, 0xFFF-vs-SHA addr width, by-ref-not-copy SoA per R1,
wire format, routing table) + the minimal PlanPacket first slice.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…ser: 'just brainstorming')

Right-size the status: it's adjacent inspiration to remember, not a ratified build
plan. The 5 forks + PlanPacket slice are sketch options, not a commitment.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…DTOs exist, wiring missing)

Grounded: contract::recipes (34 Recipe catalogue) + recipe_kernels (34 Tactic kernels,
'Elixir-like layer') EXIST; planner references NEITHER (verified gap). Consumer DTOs ready:
callcenter membrane, ontology OntologyRegistry (OGIT classes on SoA), rbac Policy/evaluate.
Chain to wire: recipe -> candidate -> rbac gate -> ontology resolve -> membrane commit.
This IS the Elixir-like template layer made real, part of D-MBX-A6-P3. Opus design map in
flight for dep directions + minimal first slice + rbac-gate placement.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…i4-32D style -> tau -> JITson/Cranelift template -> KernelHandle); recipes are what styles select

Corrects the recipe-centric framing. Grounded: contract::thinking = 36 styles/6 clusters,
each mapped to a tau macro address for JIT; contract::jit = JitTemplate -> JitCompiler
(ndarray Cranelift) -> KernelHandle -> StyleRegistry cache. Full substrate pipeline (all
shipped, unwired into planner): i4-32D style -> tau -> JITSON template -> Cranelift ->
native KernelHandle; style also selects the recipe/Tactic. Grounds #439's ExecTarget::Jit
(= jit.rs path) and ::Elixir (= recipe_kernels interpreted layer). Minimal slice should wire
STYLE SELECTION first, then recipe/kernel dispatch. Re-centering the in-flight Opus map.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…the planning substrate

The thinking-style planning substrate: a PlanStrategy (#18 in default_strategies)
that resolves the active ThinkingStyle -> cluster() -> mechanism -> selects which of
the 34 recipe_kernels Tactics fire over a ThoughtCtx built from PlanContext markers.
The style SELECTS the recipe (by cluster->mechanism), not a hardcoded id list; it also
carries the tau() JIT address (grounds ExecTarget::Jit). Mirrors the mul::escalation
precedent (thin planner module over zero-dep contract substrate). Planner already deps
contract; no new edge; contract stays zero-dep.

First slice: runs style-selected recipes over ThoughtCtx (the substrate the planner did
not consume before); LogicalPlan passes through unchanged. Deferred: i4-32D style-vector
argmax decode, Outcome->Candidate/KanbanMove, tau->JIT compile, membrane commit.

3 new tests + 192 planner lib green; rustfmt-clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
@AdaWorldAPI AdaWorldAPI force-pushed the claude/sleepy-cori-aRK2x branch from 46d8716 to fe1d6fb Compare May 30, 2026 22:35
claude added 4 commits May 30, 2026 22:42
…ical i4-32D style home but stale+orphaned; #439 StyleStrategy correctly on live recipes/recipe_kernels (adjacent, not wrong)

Three recipe modules disambiguated: recipe.rs (i4-32D StyleRecipe->PersonaRecipe->JIT,
the canonical style substrate) vs recipes.rs (34 tactics) vs recipe_kernels.rs (34 Tactic
impls) + ontology OdooStyleRecipe (#433 renamed to avoid collision). The rot: recipe.rs's
D-ATOM-1 blocker LANDED (contract::atoms real: I4x32/Atom/CANONICAL_ATOMS[33]) but recipe.rs
never migrated off I4x32Stub/AtomStub AND isn't exported in lib.rs -> dead code. #439 wired
the LIVE recipes/recipe_kernels (correct shippable choice); canonical-home migration =
scoped follow-up D-MBX-A6-P3b (council-gated per #433). #439 stands as-is.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…or insight, not a guardian of who may think

Per user: the council multiplies thinking (spawn savant lenses to GENERATE reframings),
it does not police recording. LAND/REVISE/REJECT = synthesis output, not permission.
Fixes the two places I framed it as a gate (P3b 'gate it through' + the 'council-pending'
process note). Findings are deposited priors; the council is an amplifier to invoke, not a
checkpoint to clear. P3b can proceed without it.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…M-SYN) — ratification = determinism firewall, council = catalyst

Two of my earlier session entries reused the gate misframing. D-ARM-SYN ratification is
the determinism firewall (nondeterministic-stays-upstream), not the brainstorm-council.
Remaining 'council-gated' strings are pre-session or the E-SOA-VIEW status line; left
intact (append-only) and superseded by the top-of-file correction.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…ssthrough theater; map the real style->PlannerDTO->truth-gated-Rubicon wiring

Catalyst council surfaced: (1) honest correction — StyleStrategy::plan() discards its
Outcome/ThoughtCtx (dead-store no-op), resolve_style ignores thinking_style (constant
DEFAULT), try_advance_phase is dead (no real MailboxSoaOwner impl), exec/Libet test-only;
my commit overstated a passthrough. (2) don't revive recipe.rs (4 savants: Jirak-uncited
thresholds, 32v33, fifth-column drift, cross-crate cascade). (3) keystone = I4x32->argmax->
ThinkingStyle->cluster->tau->KernelHandle (the deferred decode IS the spine; no StyleRecipe).
(4) PlannerDTO is drift; canonical home = D-MBX-A6 KanbanMove output. (5) Rubicon gates DAG-only,
truth (f,c) latent-unwired (TruthGate/counterfactual_ready zero callers). Next build: argmax
decode + plan() emits KanbanMove + truth-gate the transition; PROBE R-GATE first.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
claude added 9 commits May 30, 2026 23:03
…lity not validity; 'truth' is a wisdom marker; validity is conferred externally at/after Commit

The substrate's (f,c) is reliability machinery (confidence = accumulated-evidence
coefficient, Cronbach/ICC/Jirak family); it never measures validity (ground-truth
correspondence) — NARS is non-axiomatic, Stockfish is the external validity oracle.
Reliability necessary-but-not-sufficient for validity; substrate can be confidently
wrong. 'Truth' = the wisdom/settledness axis (phi^-1 ceiling = permanent humility)
mislabeled. Splits the Rubicon gate: RELIABILITY gate hot (Evaluation->Commit on f/c+SD,
crystallize), VALIDITY gate cold (post-commit, Stockfish/GoBD/reciprocal/FailureTicket).
Corrects R-GATE to probe reliability-thresholding, validity stays the external post-commit gate.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…ility_of R-GATE measurable, honest passthrough

Fixes the no-op the council's brutally-honest-tester caught in D-MBX-A6-P3a:
- resolve_style now DECODES the 23D style vector (dominant axis -> ThinkingStyle),
  killing the constant-DEFAULT_STYLE bug (selection was identical for every query).
- reliability_of(style,ctx) -> f32: the R-GATE measurable (style-selected recipes ->
  accumulated confidence). Reliability/settledness, NOT validity (external, post-commit;
  per E-RELIABILITY-NOT-VALIDITY).
- plan() honestly labeled pure-passthrough: computes reliability, emits nothing (no faked
  KanbanMove pre-A6-overhaul). Dead-store theater removed.
Probe-first (reviewers' rule): r_gate_reliability_varies_by_style asserts Analytical vs
Creative select distinct mechanisms (non-cosmetic) BEFORE any gate field; +decode test
+honest-passthrough test. 5 style_strategy + full planner lib green; fmt clean pre-commit.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…tuned Rubicon (f,c)/SD thresholds with measured Cronbach/ICC/Spearman/Pearson

Follows E-RELIABILITY-NOT-VALIDITY: (f,c) is a reliability coefficient, so calibrate it
with real reliability stats instead of hand-tuning. The crates exist: thinking-engine/
cronbach.rs (cronbach_alpha + bands, doc says it already 'replaces the BF16 heuristic with
empirical test'), jc spearman_rho, codebook_pearson, calibrate_lenses (ICC), bgz-tensor
cam_pq_calibrate/quality. Resolves the iron-rule-savant VIOLATES-I-NOISE-FLOOR-JIRAK
(uncited 0.2/0.8/0.15/0.35). Float-boundary preserved: calibrate OFFLINE-float in
thinking-engine -> emit frozen bands -> contract const (cited) -> hot Rubicon reads integer.
Zero-dep boundary respected (contract carries the calibrated const, not the calc).
Makes R-GATE rigorous: measured-band-changes-outcome, not 'styles differ'. Direction, not
yet built; sequenced after R-GATE live-trace probe.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…tive: reliability = required-rung/checklist coverage over a knowns/unknowns SoA bitmask (AND-test, one cycle), no float/corpus

User's cheap alternative to psychometric calibration: reliability becomes structural+prior
= coverage of a normalized eval set. 10-rung ladder (rung:u8 ALREADY on ThoughtCtx/SPO/
CausalEdge64, E-LADDER doctrine) = depth axis; per-domain class_id-keyed checklist (HHTL-
inherited) = eval axis; knowns/unknowns = presence bitmask (cognitive-risc-classes N3).
Commit=required&known==required (SIMD AND+popcount, one cycle); Plan=named known-unknowns
remain; Prune=unsatisfiable. DISSOLVES the 0.2/0.8/0.15/0.35 threshold problem (no calibrate,
no Jirak) -> retires the iron-rule VIOLATES. Unknown-unknowns stay the cold Stockfish validity
gate (checklist-completeness audit). Reuses rung+bitmask+class_id(#439); no float, no
thinking-engine dep -> lighter than the psychometric slice. Complementary: cheap hot gate +
psychometric offline audit.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
… = per-domain checklist = Odoo D-Atoms (one object); #433 built half of it

User unification: the checklist IS the reasoning template; in Odoo = tax/billable/account
fields. Grounded in #433 odoo_blueprint/style_recipe.rs: DAtom catalogue (FiscalCtx/Money/
ApplyRate/Tax/Law/...) = the checklist items as real variants; OdooStyleRecipe.atoms =
which items a template REQUIRES; the 5-lit/6-dark split = the knowns/unknowns coverage
bitmask already present. Reliability = required atoms LIT (required & known == required).
Elixir open/closed = add-field(data) vs add-template(structure). CORRECTS my earlier
'OdooStyleRecipe = unrelated codegen' filing — it's the domain-instance face of the
template-as-checklist; other domains write their own D-Atom catalogue. Cheap gate reads
#433's atoms wholesale, no new checklist type.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…SIBILITIES (P1-P11) for council+brutal recalibration

Possibility menu (not a committed sequence) for the reliability/checklist/template arc:
P1 cheap coverage gate, P2 R-GATE probe, P3 StyleStrategy emit, P4 MailboxSoaOwner impl,
P5 argmax-decode keystone, P6 delete recipe.rs, P7 reconcile 4-way recipe surface,
P8 psychometric offline audit, P9 lance bump, P10 polyglot conformance, P11 class_id->checklist.
Each cites its session finding + size/deps/risk. Council + brutal reviewers recalibrate next.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…rc — keystone is M1 Tactic::requires()->AtomMask (extraction not construction)

Panel (cascade-impact + brutally-honest-tester + creative-explorer) converges: the
keystone is the UNLISTED M1 = Tactic::requires()->AtomMask (the 34 kernels each already
declare a latent checklist via which ThoughtCtx fields apply() reads; reify it -> P1/P7/P11
derived). Corrections: P2's witness corpus doesn't exist (build it first); P5 P0-blocked
(I4x32 pack/unpack todo!() + 32-vs-33 fork); P3/P4 AP6 theater (zero prod callers); P1 dups
recipes::Coverage; P6 cosmetic (recipe.rs never compiles in); P9 still blocked; P10 off-arc.
Added M2 (completeness/unknown-unknown auditor) + M3 (version-arc scheduler). Recalibrated
order: M1 -> P2+corpus -> M2.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
… checklist made data; reliability=coverage)

The panel-recalibrated keystone of reliability-checklist-arc-v1. Adds ThoughtField (8-field
enum) + ThoughtMask(u8, zero-dep: of/has/len/covered_by) + NON-defaulted Tactic::requires();
all 34 tactics declare which ThoughtCtx fields their apply() reads (audited from bodies; 4
algebraic constant-only tactics legitimately empty). covered_by (required&known==required) =
the reliability-coverage gate. Reliability is a DECLARED ACCESSOR not a constructed gate
(extraction not construction) -> makes P1/P7/P11 derived. Non-defaulted + teeth-test
(requires_masks_are_varied_not_a_constant_stub: exactly-4-empty, >=8 distinct) = no silent
theater. 9 recipe_kernels + full contract lib green; fmt clean pre-commit. Board: STATUS_BOARD
D-MBX-A6-P3-M1 + EPIPHANIES shipped entry.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…it assertion (CI #439)

clippy::erasing_op on recipe_kernels.rs:1074: `m.0 & !0xFF` where m.0:u8 is always 0
(a u8 can't hold bits above 0xFF). The 'no stray high bits' guard was meaningless on a
u8; the real invariant (len() <= 8) is already asserted. Removed the tautological line.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
AdaWorldAPI pushed a commit that referenced this pull request May 30, 2026
… + auto-resolve

User instruction: "create the integration plan as a list of possibilities,
then use the council and brutally honest review to recalibrate, then continue
autoattended autonomous decision making and auto resolve."

Composed `post-438-integration-options-v1.md` with 8 options + 6 combinations.
Spawned 4 council reviewers in parallel (Opus, single main-thread turn) with
identical brief but diverse lenses:

  R1 (architectural-fit)         — B+C conditional on N1 class_id paired pass + u16
  R2 (prior-art / drift)          — B+H; REJECTS C as re-litigating user-owned forks;
                                    flags AriGraph hot↔cold bridge as the missing
                                    integration target the options doc never named
  R3 (integration-coordination)   — B+D; REJECTS C — in-flight collision with #439
                                    on lance-graph-contract (31 commits, unstable,
                                    KanbanMove const _ ≤16B size assertion)
  R4 (brutal-critic / bias-hunter)— B+G; REJECTS C as ego-shipping; tier-set spec
                                    disagreement = SPEC FREEZE, not Claude-session;
                                    cites session pattern of 3 prior hallucinations

Auto-resolve per options-doc §5:
- B unanimous (4/4) → EXECUTED (2 stale-citation fixes this commit)
- C: 3/4 reject → NOT EXECUTED
- OD-1/2/3 + canonical-spec-self-disagreement → escalated to ISSUES.md as
  explicit SPEC-OWNER decisions (R2+R4 unanimous framing)
- R2's AriGraph-bridge finding → captured as EPIPHANY (new, missed by all
  prior session work): the discovery_origin byte's natural home is a column
  on the AriGraph hot↔cold bridge, not the mailbox-SoA byte
- G (chess bring-up): 2/4 endorse → queued to STATUS_BOARD as D-CHESS-BRINGUP-1
  (NOT executed on this branch per R1 "needs its own branch + freeze-decision
  authority"); unblocked by #436's Rust Aerial+ (user-flagged 2026-05-30)
- D (help #439): 1/4 → below threshold, not executed
- H (cargo clean, 3.3G): flagged for user, not auto-executed (workflow not
  architecture)

Fixed stale citations in own docs:
- discovery-origin-provenance-reconciliation §8: specs are on main now
  (via main commits d1635db, 93ac046, a16d0f4, 45276eb), not on a
  separate cognitive-risc-core branch as v1 of the doc claimed pre-rebase
- odoo-blueprint-survival-dossier §7 "Concrete next moves": Wave 1 went
  D-ARM-13/14 via #436/#438, not D-ARM-1/2 as originally planned

Documentation only. No code or in-flight contract modified. Contract carrier
work (D-ARM-1/D-ARM-2/D-MBX-A6-P3) explicitly held until the spec owner
reconciles the canonical tier-set disagreement and the user picks
proposer-id width (OD-1).

https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
@AdaWorldAPI AdaWorldAPI merged commit 5263f10 into main May 30, 2026
6 checks passed
AdaWorldAPI pushed a commit that referenced this pull request May 30, 2026
… + auto-resolve

User instruction: "create the integration plan as a list of possibilities,
then use the council and brutally honest review to recalibrate, then continue
autoattended autonomous decision making and auto resolve."

Composed `post-438-integration-options-v1.md` with 8 options + 6 combinations.
Spawned 4 council reviewers in parallel (Opus, single main-thread turn) with
identical brief but diverse lenses:

  R1 (architectural-fit)         — B+C conditional on N1 class_id paired pass + u16
  R2 (prior-art / drift)          — B+H; REJECTS C as re-litigating user-owned forks;
                                    flags AriGraph hot↔cold bridge as the missing
                                    integration target the options doc never named
  R3 (integration-coordination)   — B+D; REJECTS C — in-flight collision with #439
                                    on lance-graph-contract (31 commits, unstable,
                                    KanbanMove const _ ≤16B size assertion)
  R4 (brutal-critic / bias-hunter)— B+G; REJECTS C as ego-shipping; tier-set spec
                                    disagreement = SPEC FREEZE, not Claude-session;
                                    cites session pattern of 3 prior hallucinations

Auto-resolve per options-doc §5:
- B unanimous (4/4) → EXECUTED (2 stale-citation fixes this commit)
- C: 3/4 reject → NOT EXECUTED
- OD-1/2/3 + canonical-spec-self-disagreement → escalated to ISSUES.md as
  explicit SPEC-OWNER decisions (R2+R4 unanimous framing)
- R2's AriGraph-bridge finding → captured as EPIPHANY (new, missed by all
  prior session work): the discovery_origin byte's natural home is a column
  on the AriGraph hot↔cold bridge, not the mailbox-SoA byte
- G (chess bring-up): 2/4 endorse → queued to STATUS_BOARD as D-CHESS-BRINGUP-1
  (NOT executed on this branch per R1 "needs its own branch + freeze-decision
  authority"); unblocked by #436's Rust Aerial+ (user-flagged 2026-05-30)
- D (help #439): 1/4 → below threshold, not executed
- H (cargo clean, 3.3G): flagged for user, not auto-executed (workflow not
  architecture)

Fixed stale citations in own docs:
- discovery-origin-provenance-reconciliation §8: specs are on main now
  (via main commits d1635db, 93ac046, a16d0f4, 45276eb), not on a
  separate cognitive-risc-core branch as v1 of the doc claimed pre-rebase
- odoo-blueprint-survival-dossier §7 "Concrete next moves": Wave 1 went
  D-ARM-13/14 via #436/#438, not D-ARM-1/2 as originally planned

Documentation only. No code or in-flight contract modified. Contract carrier
work (D-ARM-1/D-ARM-2/D-MBX-A6-P3) explicitly held until the spec owner
reconciles the canonical tier-set disagreement and the user picks
proposer-id width (OD-1).

https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
AdaWorldAPI pushed a commit that referenced this pull request May 31, 2026
Full-breadth integration spec wiring D-MBX kanban contract through
witness commit (D-ATOM-5), surreal LIVE -> Rubicon kanban flip,
ExecTarget backends, head2head two-view superposition in the shader
driver, EW64-Markov Hebbian prefetch, language->SPO landing (D-LWS),
and BindSpace decommission. Grounded against current main (#437/#439/
#444/#445) + two recon passes; flags the two hard blockers (lance-7
witness API, surreal fork dep / OQ-11.6) and the stale-branch caveat.

https://claude.ai/code/session_01PLf95mURCY96TvKBFvSWEQ
AdaWorldAPI pushed a commit that referenced this pull request Jun 16, 2026
…oaOwner cherry-pick + LanceVersionScheduler + SurrealMailboxView (D-PG-6)

Lands four tasks from the shortest-unblocking-path list surfaced after
PR #497-#501 + the AdaWorldAPI/surrealdb fork bump (lance/lance-index =7.0.0,
lancedb =0.30.0, ndarray exact-rev). All four meet at the single contract
trait `MailboxSoaView`, closing the cascade in one commit (E-UNBLOCK-CASCADE-1).

## Task 3 — `NiblePath::{from_guid_prefix, prefix}` (zero-dep, foundational)

Ontology-side keystone follow-up of PR #498's `classid → ReadMode` LE contract.
The 20-nibble `classid(8) | HEEL(4) | HIP(4) | TWIG(4)` prefix overflows the
16-nibble MAX_DEPTH: the deterministic fold drops the canon-reserved high u16
of classid (root-first pack: `classid_lo(4) | HEEL(4) | HIP(4) | TWIG(4)`),
returning None when the fold would be lossy. `prefix(d)` is the O(1) ancestor
view; `prefix(d).is_ancestor_of(self)` holds for every d ≤ self.depth (the
routing-cache view of a deeper class path).

  +7 tests in `hhtl::tests`; contract lib 619 → 632 green.

## Task 2 — `impl MailboxSoaView + MailboxSoaOwner for MailboxSoA<N>`

Cherry-pick of jolly-cori-clnf9 commit 463d71b (integrated-cognitive-planner-v1
§2 Seam #3, +149 LOC). Adds `pub phase: KanbanColumn` field + zero-copy
repr(transparent) slice impls (edges_raw, meta_raw) + the in-RAM Rubicon
driving-loop test (`test_in_ram_driving_loop_walks_rubicon_to_commit`). The
contract spine (#437/#439) now drives an actual loop end-to-end — no surreal,
no ractor bus needed for the in-process case.

  +1 driving-loop test; cognitive-shader-driver lib 85 → 86 green.

## Task 1 — `LanceVersionScheduler` over `VersionedGraph::versions()`

D-MBX-9-IN core impl (the CI-gated twin of the contract slice shipped 2026-05-31).
Lives in `crates/lance-graph/src/graph/scheduler.rs`. Wraps a `VersionedGraph` +
inner `VersionScheduler<S = NextPhaseScheduler>` and exposes:

- `drive_once(view, exec)`           — read current Lance version, lower to a move
- `drive_at_latest(view, exec)`      — fold `versions().last()` into a move
- `current_dataset_version()`        — typed `DatasetVersion` over nodes head

Closes `E-SUBSTRATE-IS-THE-SCHEDULER`'s OUT-direction end-to-end. The OUT
direction stays propose-not-dispose (R1): returned `KanbanMove` is for the
caller's `MailboxSoaOwner::try_advance_phase` to apply.

  +5 tests with real on-disk tempdir Lance (no mocks).

## Task 4 — `SurrealMailboxView<'a>` (D-PG-6 contract slice)

Read-only `MailboxSoaView` adapter the SurrealQL projection populates via
`from_columns(...)` — pure zero-copy borrow over the kv-lance scan's byte
buffers. Imports `MailboxSoaView` but NOT `MailboxSoaOwner` (compile-time
enforcement of `kanban.rs:1-21` "surreal=project-read-only, callcenter=commit").

`read_via_kv_lance()` returns the new typed `SurrealContainerError::BlockedColdBuild`
until the surrealdb fork dep in `Cargo.toml` is uncommented — kept off by default
to avoid the ~10 min cold surrealdb build for contributors who don't need it.
The contract surface is available today; the integration is one Cargo.toml edit
+ a SurrealQL projection body in `view.rs`.

  +4 tests; new `lance-graph-contract` dep in surreal_container/Cargo.toml;
  BLOCKED(C) marker flipped to RESOLVED.

## What this unblocks

- **D-MBX-9-IN-impl** — SHIPPED (the contract trait now has a Lance-backed implementor).
- **D-MBX-A6-P3** — still queued, BUT Seam #3 (the in-RAM loop) is now in-tree;
  a downstream session can wire the emit-side without depending on the unmerged
  jolly branch.
- **D-PG-6 (Rubicon kanban VIEW)** — contract slice SHIPPED; impl-side gated on
  `BlockedColdBuild` flip-on (one Cargo.toml uncomment + projection body).
- **Identity-architecture v1 §3 P-SCOPE-CLASSIFY** — solved (the bijection-width
  fix is deterministic + ancestor-preserving + falsifiable by tests).

## Tests + clippy

- lance-graph-contract:   **632** (+7 hhtl)
- cognitive-shader-driver: **86** (+1 driving-loop)
- lance-graph::scheduler:  **5** (new module, real Lance tempdir)
- surreal_container::view: **4** (new module)

All clippy `-D warnings` clean on the new files. Pre-existing lints in
lance-graph-ontology / lance-graph-planner / ndarray_bridge.rs are out of
session scope.

## Board hygiene (mandatory rule)

- LATEST_STATE.md — Contract Inventory PREPEND for the new types.
- EPIPHANIES.md — E-UNBLOCK-CASCADE-1: three independent landings converge on
  one trait surface, closing four queued deliverables in one commit.
- AGENT_LOG.md — task-by-task summary with test counts.

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI pushed a commit that referenced this pull request Jun 16, 2026
…oaOwner cherry-pick + LanceVersionScheduler + SurrealMailboxView (D-PG-6)

Lands four tasks from the shortest-unblocking-path list surfaced after
PR #497-#501 + the AdaWorldAPI/surrealdb fork bump (lance/lance-index =7.0.0,
lancedb =0.30.0, ndarray exact-rev). All four meet at the single contract
trait `MailboxSoaView`, closing the cascade in one commit (E-UNBLOCK-CASCADE-1).

## Task 3 — `NiblePath::{from_guid_prefix, prefix}` (zero-dep, foundational)

Ontology-side keystone follow-up of PR #498's `classid → ReadMode` LE contract.
The 20-nibble `classid(8) | HEEL(4) | HIP(4) | TWIG(4)` prefix overflows the
16-nibble MAX_DEPTH: the deterministic fold drops the canon-reserved high u16
of classid (root-first pack: `classid_lo(4) | HEEL(4) | HIP(4) | TWIG(4)`),
returning None when the fold would be lossy. `prefix(d)` is the O(1) ancestor
view; `prefix(d).is_ancestor_of(self)` holds for every d ≤ self.depth (the
routing-cache view of a deeper class path).

  +7 tests in `hhtl::tests`; contract lib 619 → 632 green.

## Task 2 — `impl MailboxSoaView + MailboxSoaOwner for MailboxSoA<N>`

Cherry-pick of jolly-cori-clnf9 commit 463d71b (integrated-cognitive-planner-v1
§2 Seam #3, +149 LOC). Adds `pub phase: KanbanColumn` field + zero-copy
repr(transparent) slice impls (edges_raw, meta_raw) + the in-RAM Rubicon
driving-loop test (`test_in_ram_driving_loop_walks_rubicon_to_commit`). The
contract spine (#437/#439) now drives an actual loop end-to-end — no surreal,
no ractor bus needed for the in-process case.

  +1 driving-loop test; cognitive-shader-driver lib 85 → 86 green.

## Task 1 — `LanceVersionScheduler` over `VersionedGraph::versions()`

D-MBX-9-IN core impl (the CI-gated twin of the contract slice shipped 2026-05-31).
Lives in `crates/lance-graph/src/graph/scheduler.rs`. Wraps a `VersionedGraph` +
inner `VersionScheduler<S = NextPhaseScheduler>` and exposes:

- `drive_once(view, exec)`           — read current Lance version, lower to a move
- `drive_at_latest(view, exec)`      — fold `versions().last()` into a move
- `current_dataset_version()`        — typed `DatasetVersion` over nodes head

Closes `E-SUBSTRATE-IS-THE-SCHEDULER`'s OUT-direction end-to-end. The OUT
direction stays propose-not-dispose (R1): returned `KanbanMove` is for the
caller's `MailboxSoaOwner::try_advance_phase` to apply.

  +5 tests with real on-disk tempdir Lance (no mocks).

## Task 4 — `SurrealMailboxView<'a>` (D-PG-6 contract slice)

Read-only `MailboxSoaView` adapter the SurrealQL projection populates via
`from_columns(...)` — pure zero-copy borrow over the kv-lance scan's byte
buffers. Imports `MailboxSoaView` but NOT `MailboxSoaOwner` (compile-time
enforcement of `kanban.rs:1-21` "surreal=project-read-only, callcenter=commit").

`read_via_kv_lance()` returns the new typed `SurrealContainerError::BlockedColdBuild`
until the surrealdb fork dep in `Cargo.toml` is uncommented — kept off by default
to avoid the ~10 min cold surrealdb build for contributors who don't need it.
The contract surface is available today; the integration is one Cargo.toml edit
+ a SurrealQL projection body in `view.rs`.

  +4 tests; new `lance-graph-contract` dep in surreal_container/Cargo.toml;
  BLOCKED(C) marker flipped to RESOLVED.

## What this unblocks

- **D-MBX-9-IN-impl** — SHIPPED (the contract trait now has a Lance-backed implementor).
- **D-MBX-A6-P3** — still queued, BUT Seam #3 (the in-RAM loop) is now in-tree;
  a downstream session can wire the emit-side without depending on the unmerged
  jolly branch.
- **D-PG-6 (Rubicon kanban VIEW)** — contract slice SHIPPED; impl-side gated on
  `BlockedColdBuild` flip-on (one Cargo.toml uncomment + projection body).
- **Identity-architecture v1 §3 P-SCOPE-CLASSIFY** — solved (the bijection-width
  fix is deterministic + ancestor-preserving + falsifiable by tests).

## Tests + clippy

- lance-graph-contract:   **632** (+7 hhtl)
- cognitive-shader-driver: **86** (+1 driving-loop)
- lance-graph::scheduler:  **5** (new module, real Lance tempdir)
- surreal_container::view: **4** (new module)

All clippy `-D warnings` clean on the new files. Pre-existing lints in
lance-graph-ontology / lance-graph-planner / ndarray_bridge.rs are out of
session scope.

## Board hygiene (mandatory rule)

- LATEST_STATE.md — Contract Inventory PREPEND for the new types.
- EPIPHANIES.md — E-UNBLOCK-CASCADE-1: three independent landings converge on
  one trait surface, closing four queued deliverables in one commit.
- AGENT_LOG.md — task-by-task summary with test counts.

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI pushed a commit that referenced this pull request Jun 22, 2026
Full-breadth integration spec wiring D-MBX kanban contract through
witness commit (D-ATOM-5), surreal LIVE -> Rubicon kanban flip,
ExecTarget backends, head2head two-view superposition in the shader
driver, EW64-Markov Hebbian prefetch, language->SPO landing (D-LWS),
and BindSpace decommission. Grounded against current main (#437/#439/
#444/#445) + two recon passes; flags the two hard blockers (lance-7
witness API, surreal fork dep / OQ-11.6) and the stale-branch caveat.

https://claude.ai/code/session_01PLf95mURCY96TvKBFvSWEQ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants