From dc7088502e9e8ed0ec8322e332692a31b630d36c Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 10 Oct 2026 16:04:32 +0000 Subject: [PATCH 1/2] mask-risc: name ndarray by its canonical git coordinate; root patches it to the sibling The relative path ../../../ndarray leaves the checkout, so a git consumer of lance-graph-quack (which depends on mask-risc) could not resolve ndarray at all. That is CARGO-COMPUTE-SUBSTRATE rule 5. The root [patch."https://github.com/AdaWorldAPI/ndarray"] points the coordinate back at ../ndarray, so this workspace keeps one ndarray identity and no network for it (cargo tree -d unchanged from main). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PPcakjk7ioQsnasmNDtc5z --- Cargo.toml | 7 +++++++ crates/lance-graph-mask-risc/Cargo.toml | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 7ce890c2c..d644aaf2d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -396,6 +396,13 @@ object_store = { version = "0.14", features = ["aws"] } # Full measurement + the target geometry: .claude/knowledge/CARGO-COMPUTE-SUBSTRATE.md ndarray = { path = "../ndarray" } +[patch."https://github.com/AdaWorldAPI/ndarray"] +# The same sibling checkout for crates that name the canonical git coordinate +# (today `lance-graph-mask-risc`, so that git consumers of Quack can build). +# Without this, a member on the git coordinate would resolve a second ndarray +# package beside the path one (CARGO-COMPUTE-SUBSTRATE rule 9). +ndarray = { path = "../ndarray" } + # Dev/test debuginfo OFF (operator, 2026-08-18: "Cargo Debug*=0 or so makes it # much smaller and faster"). Measured incident the same day: full debuginfo # test binaries grew target/ to 17 GB and killed the linker with SIGBUS on a diff --git a/crates/lance-graph-mask-risc/Cargo.toml b/crates/lance-graph-mask-risc/Cargo.toml index 2973f6c4a..36d1da45a 100644 --- a/crates/lance-graph-mask-risc/Cargo.toml +++ b/crates/lance-graph-mask-risc/Cargo.toml @@ -8,8 +8,16 @@ description = "The one mask-RISC evaluator/fuser above ndarray::simd — a plan # `ndarray` is the T1 facade every op delegates to — the SAME coordinates the # planner uses (`std` only: `simd_masking_ops` sits behind it). No contract dep: # `Planes::masks` is `&[&[u64]]`, so an `AlphaMask` caller passes `words()`. +# +# The canonical git coordinate, not a relative path (CARGO-COMPUTE-SUBSTRATE +# rule 5): a `path = "../../../ndarray"` here leaves the checkout, so a git +# consumer of this crate (or of `lance-graph-quack`, which depends on it) +# fails with "no matching package named `ndarray`". Inside this workspace the +# root `[patch."https://github.com/AdaWorldAPI/ndarray"]` points the same +# coordinate back at the sibling checkout, so local builds keep one ndarray +# package identity and need no network for it. [dependencies] -ndarray = { path = "../../../ndarray", default-features = false, features = ["std"] } +ndarray = { git = "https://github.com/AdaWorldAPI/ndarray", branch = "master", default-features = false, features = ["std"] } [dev-dependencies] # D-RPF-0 (`tests/resident_ce64_predicate.rs`): the CE64 accessors are the From aef63af80ee140e2fb5d89b62eda4ae904babf44 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 10 Oct 2026 16:06:18 +0000 Subject: [PATCH 2/2] Standalone workspaces using mask-risc patch the ndarray git coordinate too r2il-mask-abi-probe, glove-parity, sap, d-diamond-1-probe and dir-sim are their own workspace roots, so the root [patch] does not reach them. Without the same patch they would fetch ndarray by git, and d-diamond-1-probe (which path-deps ndarray directly) would carry two ndarray identities. cargo tree -i ndarray now shows the one sibling checkout in each. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PPcakjk7ioQsnasmNDtc5z --- crates/d-diamond-1-probe/Cargo.toml | 6 ++++++ crates/lance-graph-dir-sim/Cargo.toml | 6 ++++++ crates/lance-graph-glove-parity/Cargo.toml | 6 ++++++ crates/lance-graph-sap/Cargo.toml | 6 ++++++ crates/r2il-mask-abi-probe/Cargo.toml | 18 ++++++++++++------ 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/crates/d-diamond-1-probe/Cargo.toml b/crates/d-diamond-1-probe/Cargo.toml index 2a8a32f6a..8c6dd7243 100644 --- a/crates/d-diamond-1-probe/Cargo.toml +++ b/crates/d-diamond-1-probe/Cargo.toml @@ -20,3 +20,9 @@ ndarray = { path = "../../../ndarray", default-features = false, features = ["st [profile.release] debug = 1 + +# mask-risc names ndarray by its canonical git coordinate; point it at the +# sibling checkout so this workspace has one ndarray identity and needs no +# network for it (same patch as the lance-graph root). +[patch."https://github.com/AdaWorldAPI/ndarray"] +ndarray = { path = "../../../ndarray" } diff --git a/crates/lance-graph-dir-sim/Cargo.toml b/crates/lance-graph-dir-sim/Cargo.toml index 1e7094222..da58f5bf1 100644 --- a/crates/lance-graph-dir-sim/Cargo.toml +++ b/crates/lance-graph-dir-sim/Cargo.toml @@ -28,3 +28,9 @@ ogar-dir-core = { path = "../../../OGAR/crates/ogar-dir-core" } ogar-dir-sim = { path = "../../../OGAR/crates/ogar-dir-sim" } ogar-ad = { path = "../../../OGAR/crates/ogar-ad" } ogar-az = { path = "../../../OGAR/crates/ogar-az" } + +# mask-risc names ndarray by its canonical git coordinate; point it at the +# sibling checkout so this workspace has one ndarray identity and needs no +# network for it (same patch as the lance-graph root). +[patch."https://github.com/AdaWorldAPI/ndarray"] +ndarray = { path = "../../../ndarray" } diff --git a/crates/lance-graph-glove-parity/Cargo.toml b/crates/lance-graph-glove-parity/Cargo.toml index 9cebe5687..505fb0bef 100644 --- a/crates/lance-graph-glove-parity/Cargo.toml +++ b/crates/lance-graph-glove-parity/Cargo.toml @@ -18,3 +18,9 @@ lance-graph-quack = { path = "../lance-graph-quack" } [dev-dependencies] lance-graph-mask-risc = { path = "../lance-graph-mask-risc" } lance-graph-sap = { path = "../lance-graph-sap" } + +# mask-risc names ndarray by its canonical git coordinate; point it at the +# sibling checkout so this workspace has one ndarray identity and needs no +# network for it (same patch as the lance-graph root). +[patch."https://github.com/AdaWorldAPI/ndarray"] +ndarray = { path = "../../../ndarray" } diff --git a/crates/lance-graph-sap/Cargo.toml b/crates/lance-graph-sap/Cargo.toml index c7a5075be..a6257a3d1 100644 --- a/crates/lance-graph-sap/Cargo.toml +++ b/crates/lance-graph-sap/Cargo.toml @@ -13,3 +13,9 @@ lance-graph-mask-risc = { path = "../lance-graph-mask-risc" } lance-graph-quack = { path = "../lance-graph-quack" } hmac = "0.12" sha2 = "0.10" + +# mask-risc names ndarray by its canonical git coordinate; point it at the +# sibling checkout so this workspace has one ndarray identity and needs no +# network for it (same patch as the lance-graph root). +[patch."https://github.com/AdaWorldAPI/ndarray"] +ndarray = { path = "../../../ndarray" } diff --git a/crates/r2il-mask-abi-probe/Cargo.toml b/crates/r2il-mask-abi-probe/Cargo.toml index 8c0d091e0..ff42ac33c 100644 --- a/crates/r2il-mask-abi-probe/Cargo.toml +++ b/crates/r2il-mask-abi-probe/Cargo.toml @@ -6,9 +6,9 @@ publish = false description = "W0B: the mask-ABI differential at the R2IL seam. Proves ogar-r2il's CallMask algebra and lance-graph-mask-risc's agree BIT-IDENTICALLY over the same borrowed words — and nothing more. NOT a Quack<->R2IL bridge: CallMask indexes call slots inside ONE body (<=180), mask-risc indexes rows of a projection (~64K). Same algebra, different index spaces; the row bridge is W0C — `tests/row_bridge.rs`, which carries a factored join predicate as loco program data under its own vocabulary, lets loco INTERPRET it into a mask-risc Program, and executes that fused. No population crosses; the result is bit-identical to quack's lowering." # Its OWN workspace root. Excluded from lance-graph's so no ordinary -# workspace test pays for the OGAR sibling checkout, and so `ndarray`'s -# escaping `../../../ndarray` path (reached through mask-risc) still resolves -# from its own manifest dir. Same shape as `helix` / `symbiont`. +# workspace test pays for the OGAR sibling checkout. Same shape as `helix` / +# `symbiont`. (mask-risc now names ndarray by git; the patch at the end of +# this file points that back at the sibling checkout.) [workspace] [dependencies] @@ -20,9 +20,9 @@ lance-graph-mask-risc = { path = "../lance-graph-mask-risc" } # bit-for-bit. Consumed, never delegated to — the probe compares RESULTS. lance-graph-quack = { path = "../lance-graph-quack" } # The oracle in THIS probe — deliberately not yet the delegating side. Reached -# by PATH, not git: mask-risc path-deps `ndarray` at `../../../ndarray`, a -# path that leaves its own workspace and can never resolve through a cargo git -# checkout, so the differential cannot live on the OGAR side. The direction +# by PATH, not git. Until 2026-10-10 mask-risc path-depped `ndarray` at +# `../../../ndarray`, which no cargo git checkout could resolve, so the +# differential could not live on the OGAR side. The direction # here matches `crates/symbiont`'s existing `../../../OGAR/crates/...` deps. ogar-r2il = { path = "../../../OGAR/crates/ogar-r2il" } ogar-loco = { path = "../../../OGAR/crates/ogar-loco" } @@ -36,3 +36,9 @@ lance-graph-contract = { path = "../lance-graph-contract" } # one contract identity — the local one — rather than two. [patch."https://github.com/AdaWorldAPI/lance-graph"] lance-graph-contract = { path = "../lance-graph-contract" } + +# mask-risc names ndarray by its canonical git coordinate; point it at the +# sibling checkout so this workspace has one ndarray identity and needs no +# network for it (same patch as the lance-graph root). +[patch."https://github.com/AdaWorldAPI/ndarray"] +ndarray = { path = "../../../ndarray" }