diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index 1856a2ab5..5d5e6ecbb 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -39,6 +39,22 @@ build, so the ruling additionally binds consolidation as a hard filter (re-anchor or surgically re-run any finding citing rustynum/symbiont). Deltalake removal ratified in the same exchange ("we don't need deltalake"). +**Drift cleanup executed (same day, on the operator's "absolute no-go"):** +audit result — A1's research report: 0 citations (clean); the Java/Panama +arc: zero involvement (ndarray::simd enforced throughout); merged docs +carried exactly one live symbiont citation (the lotus audit §3 candidate +row, now ⊘-struck) + CLAUDE.md's two symbiont-as-binding-consumer lines +(now ⊘-annotated). Live-code drift found and FIXED: +`lance-graph-cognitive`'s `rustynum_accel` shim was name-only (zero +rustynum dependency — it delegated to `ndarray::hpc::bitwise`); renamed +`simd_accel` (module + file + 11 call sites) and rerouted through the +sanctioned `ndarray::simd::hamming_distance_raw` re-export. Default +compile green; the `wip` feature's pre-existing not-yet-compiling state +carries zero errors naming the rename. Historical provenance comments +("replacing rustynum as of 2026-03-22", ndarray's port-history docs) kept +— the no-go bans USE, not history. Board history entries citing symbiont +stay append-only, superseded by this entry. + **Same-day factual correction (operator-pointed, verified at source):** the "no DF-54 deltalake exists" premise holds only for crates.io RELEASES (deltalake-core <= 0.32.4 / DF ^53). delta-io/delta-rs **main** already pins diff --git a/CLAUDE.md b/CLAUDE.md index 862b9bee7..a4c4176a6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -968,7 +968,7 @@ Architecture: Dependency chain: ladybug-rs ──► lance-graph-contract (traits) - in-tree ──► lance-graph-contract (planner / callcenter / smb-bridge / symbiont) + in-tree ──► lance-graph-contract (planner / callcenter / smb-bridge; symbiont ⊘ DEPRECATED 2026-08-18, operator no-go) lance-graph──► ndarray (default dep, with fallback) ``` @@ -1230,7 +1230,7 @@ YAML card → 23D vector → ThinkingStyle(36) → FieldModulation(7D) → ScanP ``` WHO DEPENDS ON lance-graph-contract: - in-tree — planner, callcenter, smb-bridge, symbiont (the BINDING consumers) + in-tree — planner, callcenter, smb-bridge (the BINDING consumers; symbiont ⊘ DEPRECATED 2026-08-18, operator no-go — dormant excluded crate, never live surface) ladybug-rs — Planner + CamPq + OrchestrationBridge (crewai-rust / n8n-rs — EVICTED 2026-06-21, operator-directed; superseded by ladybug-rs + the in-tree thinking-engine. NO LONGER binding consumers — the diff --git a/crates/lance-graph-cognitive/Cargo.lock b/crates/lance-graph-cognitive/Cargo.lock index c3e8d22a5..cedb0b75f 100644 --- a/crates/lance-graph-cognitive/Cargo.lock +++ b/crates/lance-graph-cognitive/Cargo.lock @@ -25,18 +25,6 @@ dependencies = [ "libc", ] -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - [[package]] name = "arrow-array" version = "58.4.0" @@ -101,20 +89,6 @@ dependencies = [ "serde", ] -[[package]] -name = "blake3" -version = "1.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures", -] - [[package]] name = "bumpalo" version = "3.20.2" @@ -174,27 +148,12 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - [[package]] name = "crunchy" version = "0.2.4" @@ -469,7 +428,6 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" name = "ndarray" version = "0.17.2" dependencies = [ - "blake3", "matrixmultiply", "num-complex", "num-integer", diff --git a/crates/lance-graph-cognitive/src/core_full/fingerprint.rs b/crates/lance-graph-cognitive/src/core_full/fingerprint.rs index 0ff4c9898..bfc2e902c 100644 --- a/crates/lance-graph-cognitive/src/core_full/fingerprint.rs +++ b/crates/lance-graph-cognitive/src/core_full/fingerprint.rs @@ -136,7 +136,7 @@ impl Fingerprint { /// Hamming distance to another fingerprint #[inline] pub fn hamming(&self, other: &Fingerprint) -> u32 { - super::rustynum_accel::hamming_distance(self, other) + super::simd_accel::hamming_distance(self, other) } /// Similarity (0.0 - 1.0) diff --git a/crates/lance-graph-cognitive/src/core_full/mod.rs b/crates/lance-graph-cognitive/src/core_full/mod.rs index 25abf7e5e..04ec76898 100644 --- a/crates/lance-graph-cognitive/src/core_full/mod.rs +++ b/crates/lance-graph-cognitive/src/core_full/mod.rs @@ -5,12 +5,12 @@ mod fingerprint; mod scent; pub mod vsa; -pub mod rustynum_accel; +pub mod simd_accel; pub use buffer::BufferPool; pub use fingerprint::Fingerprint; pub use scent::*; -pub use rustynum_accel::{HammingEngine, batch_hamming, hamming_distance, simd_level}; +pub use simd_accel::{HammingEngine, batch_hamming, hamming_distance, simd_level}; pub use vsa::VsaOps; /// Dense embedding vector diff --git a/crates/lance-graph-cognitive/src/core_full/scent.rs b/crates/lance-graph-cognitive/src/core_full/scent.rs index c25c356b9..088775dce 100644 --- a/crates/lance-graph-cognitive/src/core_full/scent.rs +++ b/crates/lance-graph-cognitive/src/core_full/scent.rs @@ -521,8 +521,8 @@ fn timestamp() -> u64 { .unwrap_or(0) } -// NOTE: SIMD-optimized scent scan is handled via rustynum runtime dispatch. -// No compile-time SIMD gates needed — rustynum detects AVX-512/AVX2 at runtime. +// NOTE: SIMD-optimized scent scan is handled via ndarray::simd runtime dispatch. +// No compile-time SIMD gates needed — the ndarray polyfill detects AVX-512/AVX2 at runtime. #[cfg(test)] mod tests { diff --git a/crates/lance-graph-cognitive/src/core_full/rustynum_accel.rs b/crates/lance-graph-cognitive/src/core_full/simd_accel.rs similarity index 99% rename from crates/lance-graph-cognitive/src/core_full/rustynum_accel.rs rename to crates/lance-graph-cognitive/src/core_full/simd_accel.rs index a9d07e3d7..b3d29cb31 100644 --- a/crates/lance-graph-cognitive/src/core_full/rustynum_accel.rs +++ b/crates/lance-graph-cognitive/src/core_full/simd_accel.rs @@ -13,7 +13,7 @@ //! ## Usage //! //! ```rust,ignore -//! use ladybug::core::rustynum_accel::*; +//! use ladybug::core::simd_accel::*; //! //! let fp = Fingerprint::from_content("hello"); //! let pc = fingerprint_popcount(&fp); // VPOPCNTDQ when available diff --git a/crates/lance-graph-cognitive/src/lib.rs b/crates/lance-graph-cognitive/src/lib.rs index a267f0343..71c25e260 100644 --- a/crates/lance-graph-cognitive/src/lib.rs +++ b/crates/lance-graph-cognitive/src/lib.rs @@ -86,29 +86,29 @@ pub mod storage { } /// Compatibility module mirroring ladybug-rs `crate::core::*`. -/// Modules reference `crate::core::Fingerprint`, `crate::core::rustynum_accel::*`, etc. +/// Modules reference `crate::core::Fingerprint`, `crate::core::simd_accel::*`, etc. pub mod core { pub use super::Fingerprint; pub use super::Embedding; pub const DIM: usize = super::FINGERPRINT_BITS; pub const DIM_U64: usize = super::FINGERPRINT_U64; - /// Compatibility shim for rustynum SIMD acceleration. + /// SIMD acceleration shim (renamed from the retired rustynum_accel name, 2026-08-18 operator no-go). /// Maps to ndarray::hpc::bitwise. - pub mod rustynum_accel { + pub mod simd_accel { pub fn hamming_distance(a: &[u8], b: &[u8]) -> u64 { - ndarray::hpc::bitwise::hamming_distance_raw(a, b) + ndarray::simd::hamming_distance_raw(a, b) } pub fn slice_hamming(a: &[u64], b: &[u64]) -> u64 { let a_bytes: Vec = a.iter().flat_map(|w| w.to_le_bytes()).collect(); let b_bytes: Vec = b.iter().flat_map(|w| w.to_le_bytes()).collect(); - ndarray::hpc::bitwise::hamming_distance_raw(&a_bytes, &b_bytes) + ndarray::simd::hamming_distance_raw(&a_bytes, &b_bytes) } pub fn batch_hamming(query: &[u8], database: &[u8], vec_len: usize) -> Vec { let n = database.len() / vec_len; (0..n).map(|i| { let start = i * vec_len; - ndarray::hpc::bitwise::hamming_distance_raw(query, &database[start..start + vec_len]) + ndarray::simd::hamming_distance_raw(query, &database[start..start + vec_len]) }).collect() } pub fn simd_level() -> &'static str { "ndarray" } diff --git a/crates/lance-graph-cognitive/src/search/hdr_cascade.rs b/crates/lance-graph-cognitive/src/search/hdr_cascade.rs index 1c2c7c9f5..c10fe38c2 100644 --- a/crates/lance-graph-cognitive/src/search/hdr_cascade.rs +++ b/crates/lance-graph-cognitive/src/search/hdr_cascade.rs @@ -78,10 +78,10 @@ const DEFAULT_INHIBIT: u32 = 5000; /// Compute exact Hamming distance. /// -/// Uses runtime-dispatched AVX-512 VPOPCNTDQ via rustynum. +/// Uses runtime-dispatched AVX-512 VPOPCNTDQ via ndarray::simd. #[inline] pub fn hamming_distance(a: &[u64; WORDS], b: &[u64; WORDS]) -> u32 { - crate::core::rustynum_accel::slice_hamming(a, b) as u32 + crate::core::simd_accel::slice_hamming(a, b) as u32 } /// Compute 1-bit sketch: which chunks differ at all? @@ -147,8 +147,8 @@ pub fn sketch_8bit_sum(sketch: &[u8; WORDS]) -> u32 { sketch.iter().map(|&b| b as u32).sum() } -// NOTE: All SIMD dispatch is handled by rustynum-core at runtime. -// The hamming_distance() function above delegates to rustynum_accel::slice_hamming() +// NOTE: All SIMD dispatch is handled by ndarray::simd at runtime. +// The hamming_distance() function above delegates to simd_accel::slice_hamming() // which uses AVX-512 VPOPCNTDQ -> AVX2 Harley-Seal -> scalar POPCNT. // No compile-time SIMD gates needed. diff --git a/crates/lance-graph-cognitive/src/spo/gestalt.rs b/crates/lance-graph-cognitive/src/spo/gestalt.rs index ef396bb6e..1177c79be 100644 --- a/crates/lance-graph-cognitive/src/spo/gestalt.rs +++ b/crates/lance-graph-cognitive/src/spo/gestalt.rs @@ -319,9 +319,9 @@ pub fn detect_bundling( gate: &ndarray::hpc::kernels::SigmaGate, ) -> Option<(BundlingType, u32, u32, u32)> { // Per-plane Hamming distance - let s_dist = crate::core::rustynum_accel::slice_hamming(center_a_s, center_b_s) as u32; - let p_dist = crate::core::rustynum_accel::slice_hamming(center_a_p, center_b_p) as u32; - let o_dist = crate::core::rustynum_accel::slice_hamming(center_a_o, center_b_o) as u32; + let s_dist = crate::core::simd_accel::slice_hamming(center_a_s, center_b_s) as u32; + let p_dist = crate::core::simd_accel::slice_hamming(center_a_p, center_b_p) as u32; + let o_dist = crate::core::simd_accel::slice_hamming(center_a_o, center_b_o) as u32; // "Close" = Evidence level or better (2σ below noise) let close = gate.evidence; diff --git a/docs/lotus/LOTUS-FRONTIER-AUDIT.md b/docs/lotus/LOTUS-FRONTIER-AUDIT.md index d23fccb0e..20b64aad4 100644 --- a/docs/lotus/LOTUS-FRONTIER-AUDIT.md +++ b/docs/lotus/LOTUS-FRONTIER-AUDIT.md @@ -183,7 +183,7 @@ with it. | `hhtl::NiblePath`, `FAN_OUT=16` | lance-graph core | Production 16-ary router; the doctrine already says *"HHTL is the deterministic PLACE (16-ary); helix is the RESIDUE"* | | `CurveRuler` stride-4-over-17 | helix | **The shipped comma** — triple-falsified positive (DFT anti-aliasing ev7b; `comma_quorum` N_eff 11.00/12 vs 1.00 without; `comma_awareness`). D-QUANTGATE names it the mandatory quantized-layer phase generator | | `basin_placement_learning` 75.8% | probe | **Overclaim flag (INFERENCE):** the measured 75.8% is a BINARY split, not 4-ary — `E-BASIN-IS-A-NODE` cites it wider than the measurement supports; re-grade before reuse | -| `symbiont::domino::morton4` | symbiont | Real 4×4 bijective Morton, but SIMD-lane-scoped; not a placement authority | +| `symbiont::domino::morton4` | symbiont | ⊘ STRUCK 2026-08-18 (operator no-go: symbiont DEPRECATED per the #879/#911/#912/#913 arc) — was: real 4×4 bijective Morton, SIMD-lane-scoped, not a placement authority. Not a candidate; kept as census history only | | thinking-engine `domino.rs` | thinking-engine | FALSE LEAD — name collision, unrelated mechanism | | Feistel / XorShift mixers | — | ABSENT from the workspace; a comma design needing one imports new code |