Skip to content

Commit c7149ea

Browse files
authored
Merge pull request #631 from AdaWorldAPI/claude/v3-substrate-migration-review-o0yoxv
V3 W1b LIVE: WAL batch writer implemented (4 probes green), M15 rename, temporal deinterlace synthesis, live oracle measurements
2 parents 9a6df2a + 563f560 commit c7149ea

12 files changed

Lines changed: 143 additions & 70 deletions

File tree

.claude/board/EPIPHANIES.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2026-07-02 — E-V3-ORACLE-LIVE-1: W3c oracle node measured LIVE — graph-flow overhead is 1-2 ms against an 8.4-8.7 s LLM round trip
2+
**Status:** FINDING (live run, rig 0.39 xai provider, 3 calls ~$0.02; harness in session scratchpad, reproducible)
3+
4+
Live numbers (this container, via HTTPS proxy, XAI_API_KEY): T1 direct grok-3-mini connectivity smoke 2958 ms ("OK"). T2/T3: the W3c oracle-node shape — a graph_flow::Task whose run() consults a rig agent (grok-4-0709, max_tokens 64, FailureTicket pronoun-disambiguation prompt) — executed through GraphBuilder + FlowRunner + InMemorySessionStorage: e2e 8660/8406 ms, API 8658/8405 ms, **framework overhead 2/1 ms**. Both runs Completed; the oracle answered the disambiguation correctly ("it" = the board, animacy reasoning). Verdict: the orchestration layer costs SIX orders of magnitude less than the oracle call it wraps — W3c's budget is purely the LLM round trip (seconds), reinforcing oracle-frequency-only (never per-transition) and the two-speed split. Ergonomics: the whole oracle node is ~30 lines; three frictions: rig-core's lib name is rig_core (not rig), .agent() needs the rig_core::client::CompletionClient trait in scope, errors map via graph_flow::GraphError::TaskExecutionFailed. Operator references folded: (a) rs-graph-llm IS the LangGraph-inspired Rig-integrated stateful/interruptible handler by design (author's framing; the queue-vs-state debate in that thread is answered in V3 by the kanban board being BOTH — WAL intent log + state); (b) GraphRAG-rs (automataIA/graphrag-rs) noted as RAG-side prior art with native LanceDB/Arrow support, Leiden, LightRAG, cAST tree-sitter chunking — candidate reference for the retrieval stages, not a dependency decision; (c) test-bench delta: planner serve.rs (Axum, OpenAI-compatible /v1/chat/completions, JITSON behind it) can serve as a LOCAL zero-cost oracle endpoint via rig's openai-compatible provider + graceful retry — the self-hosted langgraph test bench for CI (no external key, no spend).
5+
16
## 2026-07-02 — E-V3-TEMPORAL-DEINTERLACE-1: temporal.rs is the read side of the WAL ruling — replay = a read at a pinned QueryReference
27
**Status:** FINDING (operator pointer to planner temporal.rs; unifies M24 + M25 with the deinterlace machinery)
38

.claude/board/LATEST_STATE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ Membrane consumers can now pull BOTH halves of a render `classid` BBB-safely fro
100100

101101
| PR | Merged | Title | What it added |
102102
|---|---|---|---|
103+
| **#630** | 2026-07-02 | V3 W1 START: preflight deltas + WAL writer probes + adoption scan + D-PERT-1 + temporal synthesis | Fable-5 ten-point preflight (M24 board=WAL, W6a baseline inversion, W3 oracle ratchet, W2 probe-first reorder) + operator rulings folded live: zero-copy sink (cast = descriptor never bytes, flush via NodeRowPacket::as_le_bytes), "melden macht frei" (stacked casts never refused — 4 ignored probes define W1b green), temporal.rs deinterlace = the READ side (replay = QueryReference::at + deinterlace; M24/M25/time-travel are ONE mechanism; ack carries LanceVersion). Landed code: batch_writer skeleton + 4 probes; contract::classid_scan (771 green); D-PERT-1 rename (462 green). Audits: planner-SoA type-real/wiring-dormant (M15 GateDecision rename BLOCKING before W2); M7 corrected (NodeRowPacket IS production SoaEnvelope, codex P2); graph-flow benched ~0.4-0.5us/step (two-speed confirmed); M25 KanbanSessionStorage design (graph-flow-kanban envelope exists — wire don't invent). Merge `9a6df2a1`. |
103104
| **#629** | 2026-07-02 | V3 SUBSTRATE consolidated entry point (`.claude/v3/`) + ractor ownership attestation | `.claude/v3/` tree shipped: README (orientation), INTEGRATION-PLAN (W0–W6), COMPONENT-MAP (reuse/repurpose/retire), ENTROPY-MILESTONES (N→1 ledger), MODULE-TABLE (per-file census core/contract/planner), soa_layout/ (LE contract, tenant lanes, consumer map, routing), knowledge/ (substrate primer, mailbox-kanban model, sonnet-worker-guardrails), agents/BOOT.md (4 V3 cards); `/v3` skill + `/v3-audit` command; CLAUDE.md/BOOT.md ★ entrypoint. Review sharpenings folded: LE byte-order range-scan caveat, 3-shape legacy corpus scanner (incl. `0xAAAA_DDCC`), ractor helper-scope ruling (NOT messaging — slow; helper only: spawn/supervision/occasional control RPC). Ownership compile attestation: `KanbanActor<O: MailboxSoaOwner>` `type State = O`, owner MOVES in at pre_start; 22 supervisor tests green on the AdaWorldAPI ractor fork. Merge `28f17cd7`. |
104105
| **#628** | 2026-07-02 | classid canon:custom half-order flip EXECUTED (P0+P1+P2) | `CLASSID_ORDER = CanonHigh` live: canon `domain:appid` HIGH / custom LOW (`0x0701_1000` = `0x07:01::1000`); ONE flippable composition + `classid_canon_compat` (mint-forward both-forms reader — RBAC authorizes pre-flip rows, no re-bake); new-form mint constants + `CLASSID_*_LEGACY` aliases; hhtl dual-form fold; OGAR#95 reconciled (prefix = custom half, values unchanged); ogar pin → `19373a2` (OGAR #147 lockstep). Fleet: OGAR #147 + MedCare #180 + woa-rs #177 merged; q2 #71 + op-nexgen #68 open. Merge `6858118b`. |
105106
| **#627** | 2026-07-02 | classid canon:custom flip TRIGGERED (doc-only) | Operator ruling recorded + `classid-canon-custom-flip-v1.md` ACTIVE: canon `domain:appid` → hi u16, custom (`0x1000` temporary marker) → lo; `0x0701_1000` / `0x07:01::1000`; OSINT low byte = appid space (zero vocab rows, OGAR #146 67→65 fuse balanced); q2 gate WAIVED; ISSUES ×4 resolved/ruled; codex P2 guards locked (class_id via `classid_canon(id)` never `as u16`; legacy keys demote not retire). Merge `c8e1ec4`. |

.claude/board/PR_ARC_INVENTORY.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,22 @@
3535
3636
---
3737

38+
## #630 lance-graph: V3 W1 START — preflight deltas, WAL-shaped writer probes, adoption-scan baseline, D-PERT-1, temporal synthesis
39+
40+
**Status:** MERGED 2026-07-02 (merge commit `9a6df2a1`), branch `claude/v3-substrate-migration-review-o0yoxv`.
41+
42+
**Added:** `lance-graph-planner::batch_writer` skeleton (`BatchWriter<P>`, `CastId`; todo! bodies) + 4 ignored probes in `tests/w1_probes.rs` (ahead-ordering, kill-after-cast replay, delegation miss-then-hit, stacked-casts-never-refused) — W1b green = fill bodies + un-ignore; `contract::classid_scan` (`ClassidForm` mirroring `classid_canon_compat`, `count_adoption`, 10 tests, zero bit math); D-PERT-1 (`ResonanceDto``PerturbationDto`, 8 files, deprecated alias; perspectival awareness_dto untouched); plan Addenda 1-8 + entropy rows M24 (board = WAL) / M25 (KanbanSessionStorage); rs-graph-llm sibling branch carries `dispatch_bench.rs`.
43+
44+
**Locked:** cast = DESCRIPTOR never bytes; sink flushes via `NodeRowPacket::as_le_bytes` (zero-copy incl. through the writer); **melden macht frei** — the writer NEVER refuses stacked casts (WAL entries, natural coalescing via live-store reads); **temporal.rs is the read side** — replay = `QueryReference::at(v, rung)` + `deinterlace` (M24 crash-replay = M25 session-replay = time-travel, ONE mechanism); W1b `ack` carries the assigned `LanceVersion` (CastId↔LanceVersion = the WAL↔temporal join); M15 GateDecision rename BLOCKING before any planner→kanban emission; rig = oracle-frequency only (2 history clones/call); graph-flow = replayable orchestration layer (~0.4-0.5 µs/step measured), ExecTarget keeps the hot path.
45+
46+
**Corrections shipped in-arc:** M7 premise ("zero production SoaEnvelope impls") FALSE — `NodeRowPacket<'a>` (canonical_node.rs:1275) is the live Lance byte path (codex #630 P2; surfaces ruled complementary); Addendum-6 mutation-freeze retracted by operator ruling (Addendum-7).
47+
48+
**Deferred:** W1b implementation (fill todo!s, un-ignore probes, ack-with-LanceVersion reshape); W6a CLI wrapper + real-corpus t₀ (no classid-keyed corpora in container); W2b real-owner KanbanActor probe; M21 canon-node-bytes extraction; KanbanSessionStorage impl (W3b).
49+
50+
**Docs:** `.claude/v3/INTEGRATION-PLAN.md` Addenda 1-8; EPIPHANIES E-V3-PREFLIGHT-1 (+CORRECTION), E-V3-KANBAN-SESSION-1, E-V3-PLANNER-SOA-AUDIT-1, E-V3-GRAPHFLOW-BENCH-1, E-V3-TEMPORAL-DEINTERLACE-1; ops: AdaWorldAPI/burn 403 build wall on rs-graph-llm/rig workspace roots.
51+
52+
**Confidence (2026-07-02):** HIGH — contract 771 + thinking-engine 362 + shader-driver 100 green; probes compile (4 ignored by design); codex threads resolved + reacted.
53+
3854
## #629 lance-graph: V3 SUBSTRATE consolidated entry point — `.claude/v3/` tree + mailbox-kanban doctrine + ractor ownership attestation
3955

4056
**Status:** MERGED 2026-07-02 (merge commit `28f17cd7`), branch `claude/v3-substrate-migration-review-o0yoxv`.

.claude/board/STATUS_BOARD.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ Plan: `.claude/v3/INTEGRATION-PLAN.md` (stub: `.claude/plans/v3-substrate-integr
77
| D-V3-W0a | `.claude/v3/` tree (README, plan, COMPONENT-MAP, ENTROPY-MILESTONES, MODULE-TABLE, soa_layout/*) | docs | Shipped (this PR) | complete: 7/7 mappers synthesized; MODULE-TABLE = 304/304 files (21/21 census chunks); soa_layout 5/5 docs |
88
| D-V3-W0b | V3 awareness layer (knowledge docs, v3-* agent cards, /v3 skill, /v3-audit command, CLAUDE.md+BOOT.md entrypoints) | docs | Shipped (this PR) | 4 knowledge docs, 4 cards, skill+command registered |
99
| D-V3-W1a | SoaEnvelope::mailbox_owner() ownership stamp | lance-graph-contract | Shipped | this branch; 775 contract tests green |
10-
| D-V3-W1b | Ahead-firing batch writer (cast pairing + AHEAD KanbanMove at cast) | planner-adjacent | In progress | W1 STARTED 2026-07-02; WAL-shaped per preflight addendum (M24: cast = intent record) |
11-
| D-V3-W1c | Delegation cache (cast id vs envelope stamp) | batch writer | In progress | W1 STARTED 2026-07-02; collapses into W1b writer (M24) |
10+
| D-V3-W1b | Ahead-firing batch writer (cast pairing + AHEAD KanbanMove at cast) | planner-adjacent | In PR | W1 STARTED 2026-07-02; WAL-shaped per preflight addendum (M24: cast = intent record) |
11+
| D-V3-W1c | Delegation cache (cast id vs envelope stamp) | batch writer | In PR | W1 STARTED 2026-07-02; collapses into W1b writer (M24) |
1212
| D-V3-W1d | MailboxId minting path (non-zero owners, uniqueness debug_assert) | contract | In progress | W1 STARTED 2026-07-02 |
1313
| D-V3-W1e | Probes: ahead-update ordering + delegation miss | contract/planner | In PR | W1 STARTED 2026-07-02; probe lands FIRST (probe-first gate) + kill-after-cast replay test (M24) |
1414
| D-V3-W2a | Per-mailbox kanban board as TENANT | contract | Queued | field-isolation matrix mandatory |

.claude/v3/ENTROPY-MILESTONES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
| M12 | 2 budget concepts (elevation `PatienceBudget` per-strategy vs the −550_000 µs Libet anchor per-cycle) | one budget allocator (elevation extended as the 550 ms scheduler, W2d) | elevation reads/writes the Libet anchor; doc cross-ref both ways | QUEUED (W2d) |
3838
| M13 | 2 "OGAR action" concepts (elixir_template::OgarAction enum vs contract `action::ActionDef`+CapabilityExecutor RBAC gate) | keep BOTH (different jobs) — collapse the NAME ambiguity via explicit disambiguation in every doc/brief | guardrails §2 row (done) + compiled-templates.md disambiguation; grep unqualified "OGAR action" in briefs = zero | IN-FLIGHT (doc-side done this PR) |
3939
| M14 | 3 `BindSpace` concepts (shader-driver singleton SoA; ladybug 8:8 dispatch table; graph/spo/merkle store) + stale "BindSpace" prose | scoped names; shader singleton RETIRES (M4); prose sweep to MailboxSoA vocabulary | grep bare `BindSpace` in doc comments describing per-mailbox mechanisms = zero | QUEUED (doc sweep + W7) |
40-
| M15 | 2 `GateDecision` types (mul::{Flow,Hold,Block} live kanban gate vs collapse_gate::{gate,merge} write-merge) — the documented GATE-1 clash + 3 "CollapseGate" vocabulary users | rename the write-merge one (e.g. `WriteMergeGate`) and/or the dispersion op (`ResonanceDispersionGate`); mul::GateDecision keeps the name | grep `GateDecision` resolves to ONE type per import; cycle_accumulator GATE-1 note closed | RULING-NEEDED (rename choice) |
40+
| M15 | 2 `GateDecision` types (mul::{Flow,Hold,Block} live kanban gate vs collapse_gate::{gate,merge} write-merge) — the documented GATE-1 clash + 3 "CollapseGate" vocabulary users | rename the write-merge one (e.g. `WriteMergeGate`) and/or the dispersion op (`ResonanceDispersionGate`); mul::GateDecision keeps the name | grep `GateDecision` resolves to ONE type per import; cycle_accumulator GATE-1 note closed | RESOLVED 2026-07-02: planner-local renamed MulGateDecision + deprecated alias (M15 worker; contract kanban gate keeps name; collapse_gate FLOW_XOR confirmed a THIRD distinct type, engine_bridge consumer) — grep GateDecision now resolves uniquely per import |
4141
| M16 | 3 independently-invented fail-closed deferral patterns (RuntimeError::NotImplemented / EquivalenceClass::Failure-note / CompileError::NotImplemented) | one documented convention (not a new abstraction) | a §-note in compiled-templates.md naming the pattern; new deferrals cite it | QUEUED (doc-only) |
4242
| M17 | 2 control-flow vocabularies with a FALSE 1:1 claim (graph-flow NextAction×6 vs template linear-only) | honest mapping: Step↔Task + ogar_name()↔Task::id(); control flow closed by StepMask/ControlSignal (W3a/b) | adapter tests replay a template with WaitForInput/End/GoTo semantics; compiled-templates.md corrected (this PR) | IN-FLIGHT (doc corrected; code W3) |
4343
| M18 | 2 lifecycle vocabularies (planner sigma chain Ω→Δ→Φ→Θ→Λ vs KanbanColumn 6 phases) with no documented mapping | a documented mapping (or an explicit "orthogonal" ruling) | one table in mailbox-kanban-model.md; both modules cross-ref it | RULING-NEEDED |

.claude/v3/INTEGRATION-PLAN.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,3 +328,20 @@ Operator: "check temporal.rs for a deeper understanding." Verified against
328328
dispatchable = time-admitted AND data-ready — the standing rule
329329
"updates reprioritize, never gate" holds because a data-blocked row is
330330
dropped from the PROJECTION, not refused at the writer.
331+
332+
### Addendum-9 2026-07-02 — W3c oracle measured LIVE + the self-hosted test bench
333+
334+
- **Live numbers** (rig xai, grok-4-0709 oracle through FlowRunner):
335+
framework overhead **1-2 ms** vs **8.4-8.7 s** LLM round trip. W3c's
336+
budget IS the LLM call; orchestration is free. Full data:
337+
E-V3-ORACLE-LIVE-1.
338+
- **Test-bench delta (operator):** wire rig's OpenAI-compatible provider
339+
at the planner's serve.rs (`/v1/chat/completions`, JITSON behind it)
340+
as the LOCAL oracle for CI — zero external spend, no key, graceful
341+
retry wrapping for a typical langchain-style bench. Lands with W3b's
342+
KanbanSessionStorage tests.
343+
- **References:** rs-graph-llm's stated design (LangGraph-inspired,
344+
Rig-integrated, interruptible-by-design, step-by-step default) matches
345+
the W3b role exactly; the thread's queue-vs-stateful debate is resolved
346+
in V3 by the kanban board being both (M24 WAL + state). GraphRAG-rs
347+
noted as RAG prior art (native LanceDB/Arrow, Leiden, LightRAG, cAST).

crates/lance-graph-planner/src/api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ use crate::selector::StrategySelector;
7474
use crate::traits::*;
7575

7676
// Re-export key types for ergonomic API
77-
pub use crate::mul::gate::GateDecision as Gate;
77+
pub use crate::mul::gate::MulGateDecision as Gate;
7878
pub use crate::mul::SituationInput;
7979
pub use crate::thinking::style::{FieldModulation, ScanParams, ThinkingCluster, ThinkingStyle};
8080
pub use crate::thinking::ThinkingContext;

0 commit comments

Comments
 (0)