ruvector/crates
rUv e2350b759f
fix(core): HNSW correctness fixes, k=0 guard, sorted results, cross-integration helpers (v2.2.3) (#502)
* fix(core): correctness + safety fixes in HNSW/flat index + cross-integration helpers (v2.2.3)

Correctness fixes:
- hnsw: `DistanceFn::eval` now clamps distance to 0.0 — prevents hnsw_rs
  internal BinaryHeap assertion panic when floating-point rounding yields a
  marginally-negative cosine/euclidean distance for near-identical vectors
- hnsw: `set_ef_search` was a silent no-op; now correctly writes to
  `config.ef_search` so callers can tune recall at query time
- hnsw: `search_with_ef` clamps `ef_search` to `max(ef_search, k)` to
  prevent silent under-recall when ef_search < k (hnsw_rs constraint)
- hnsw: `search_with_ef` now explicitly returns an empty slice for k=0
  instead of forwarding to hnsw_rs which may panic
- hnsw: `search_with_ef` returns early (empty slice) when index is empty
  to avoid hnsw_rs BinaryHeap `.peek().unwrap()` panic on zero-element index
- hnsw: results are now explicitly sorted by ascending distance; hnsw_rs
  does not guarantee this order in all code paths
- hnsw: deserialization rebuilds the HNSW graph in index order
  (sorted by idx) and uses an O(n) HashMap lookup instead of O(n^2)
  linear search over the vectors vec during restore
- flat: added k=0 guard (returns empty slice, no panic)
- flat: switched sort to `sort_unstable_by` with a `partial_cmp` fallback
  to handle NaN distances gracefully and improve throughput on large sets

API improvement:
- types: `HnswConfig::default()` now uses `max_elements=1_000_000` (was
  10_000_000) and `m=16/ef_construction=100` to avoid excessive upfront
  memory allocation in the common case; large-index callers can still
  set `max_elements` explicitly

New module:
- integration: `FannAdapter` and `SemanticSearchAdapter` — thin wrappers
  that make ruvector-core directly usable from ruv-FANN (layer-embedding
  storage + retrieval) and sparc (semantic file search by embedding query).
  Includes `normalize()` and `cosine_similarity()` free-standing utilities.

Tests (4 new integration, 3 new unit):
- test_hnsw_search_k_zero: k=0 returns empty, no panic
- test_hnsw_results_sorted_ascending: verifies window[i].score <= window[i+1].score
- test_hnsw_set_ef_search_updates_config: set_ef_search writes through to config
- test_hnsw_search_with_ef_clamps_to_k: ef < k still returns results
- flat: test_flat_index_k_zero, test_flat_index_results_sorted
- integration: FannAdapter and SemanticSearchAdapter roundtrip tests

Version bump: 2.2.2 → 2.2.3

Co-Authored-By: claude-flow <ruv@ruv.net>

* style: cargo fmt ruvector-core
2026-05-23 03:37:35 -04:00
..
agentic-robotics-benchmarks feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-core feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-embedded feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-mcp feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-node feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-rt feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
cognitum-gate-kernel chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
cognitum-gate-tilezero chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
hailort-sys hailo: NPU pipeline pool exploration + bridge cache/health parity (iter 234-249) (#418) 2026-05-04 09:56:26 -04:00
mcp-brain chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
mcp-brain-server fix(npm): update stale ruvector peer deps and fix TS syntax error (#492) 2026-05-22 02:33:45 -04:00
mcp-gate style: apply rustfmt across entire codebase 2026-01-28 17:00:26 +00:00
micro-hnsw-wasm feat(quality): ADR-144 monorepo quality analysis — Phase 1 critical fixes (#336) 2026-04-06 21:19:13 -04:00
neural-trader-coherence style: apply cargo fmt formatting 2026-03-12 20:57:18 -04:00
neural-trader-core feat: add neural-trader-wasm crate with WASM bindings and ADR-086 2026-03-08 16:17:58 +00:00
neural-trader-replay style: apply cargo fmt formatting 2026-03-12 20:57:18 -04:00
neural-trader-strategies chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
neural-trader-wasm style: apply cargo fmt formatting 2026-03-12 20:57:18 -04:00
prime-radiant fix: 9-issue cleanup batch + regression-guard CI workflow (#466) 2026-05-16 12:14:49 -04:00
profiling Reorganize repository structure 2025-11-19 20:53:37 +00:00
ruos-thermal feat(ruvector-hailo): NPU embedding backend + multi-Pi cluster (ADRs 167-170) (#413) 2026-05-04 08:30:40 -04:00
ruQu chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-algorithms chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-exotic chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-wasm fix(rvagent-cli, ruqu-wasm): unblock 2 PR #388 test failures 2026-04-26 00:14:39 -04:00
ruvector-acorn feat(wasm): publish @ruvector/rabitq-wasm and @ruvector/acorn-wasm to npm (#394) 2026-04-26 23:10:39 -04:00
ruvector-acorn-wasm feat(wasm): publish @ruvector/rabitq-wasm and @ruvector/acorn-wasm to npm (#394) 2026-04-26 23:10:39 -04:00
ruvector-attention chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attention-cli fix: migrate attention/dag/tiny-dancer to workspace versioning and fix all dep version specs 2026-02-23 13:29:46 +00:00
ruvector-attention-node chore: Update attention NAPI-RS binaries for all platforms 2026-04-26 00:47:37 +00:00
ruvector-attention-unified-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attention-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attn-mincut chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-bench chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-cli fix(mcp): route tracing output to stderr to prevent JSON-RPC stdio corruption (#470) 2026-05-22 01:30:56 -04:00
ruvector-cluster chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-cnn docs(sdk): add deep planning review for ruvector Python SDK 2026-04-25 20:28:54 -04:00
ruvector-cnn-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-cognitive-container fix: format all files, add EXO crate READMEs, convert path deps to version deps 2026-02-27 16:21:14 +00:00
ruvector-coherence chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-collections chore(workspace): cargo fmt — mechanical whitespace fix across 427 files 2026-04-24 10:44:02 -04:00
ruvector-consciousness chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-consciousness-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-core fix(core): HNSW correctness fixes, k=0 guard, sorted results, cross-integration helpers (v2.2.3) (#502) 2026-05-23 03:37:35 -04:00
ruvector-crv chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-dag chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-dag-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-decompiler chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-decompiler-wasm feat(decompiler): WASM Louvain pipeline — npx now produces 589+ modules 2026-04-03 15:25:23 +00:00
ruvector-delta-consensus chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-graph chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-index chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-diskann fix(diskann): seed test RNGs to fix flaky test_diskann_basic (#397) 2026-04-27 01:53:18 -04:00
ruvector-diskann-node chore(workspace): cargo fmt — mechanical whitespace fix across 427 files 2026-04-24 10:44:02 -04:00
ruvector-dither chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-domain-expansion chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-domain-expansion-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-economy-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-exotic-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-filter fix(filter): bump recursion_limit to 4096 to fix lib test E0275 2026-04-26 02:25:09 -04:00
ruvector-fpga-transformer chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-fpga-transformer-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-gnn fix(gnn): replace thread_rng with seeded StdRng for faster layer init (#495) 2026-05-22 02:59:07 -04:00
ruvector-gnn-node fix(gnn): remove broken linux-arm64-musl target from build matrix (#491) 2026-05-22 02:00:54 -04:00
ruvector-gnn-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph fix: 9-issue cleanup batch + regression-guard CI workflow (#466) 2026-05-16 12:14:49 -04:00
ruvector-graph-node feat(graph-node): add deleteNode/deleteEdge/deleteHyperedge API — closes #427 2026-05-06 09:52:26 -04:00
ruvector-graph-transformer chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph-transformer-node chore: Update graph transformer NAPI-RS binaries for all platforms 2026-04-26 00:53:18 +00:00
ruvector-graph-transformer-wasm chore: Update graph transformer NAPI-RS binaries for all platforms 2026-04-26 00:53:18 +00:00
ruvector-graph-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-hailo fix: 9-issue cleanup batch + regression-guard CI workflow (#466) 2026-05-16 12:14:49 -04:00
ruvector-hailo-cluster docs(ruvllm, hailo-cluster): add sparse attention + Hailo-10H sections 2026-05-06 11:50:35 -04:00
ruvector-hyperbolic-hnsw feat(prime-radiant): Universal Coherence Engine with Sheaf Laplacian AI Safety (#131) 2026-01-22 21:27:27 -05:00
ruvector-hyperbolic-hnsw-wasm feat(training): RuvLTRA v2.4 Ecosystem Edition - 100% routing accuracy (#123) 2026-01-20 20:08:30 -05:00
ruvector-kalshi chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-learning-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-math chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-math-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-metrics feat(quality): ADR-144 monorepo quality analysis — Phase 1 critical fixes (#336) 2026-04-06 21:19:13 -04:00
ruvector-mincut test(mincut): #[ignore] flaky test_delete_tree_edge — real bug in WitnessTree (#396) 2026-04-26 23:10:12 -04:00
ruvector-mincut-brain-node fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
ruvector-mincut-gated-transformer chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-mincut-gated-transformer-wasm fix: resolve compilation errors across workspace 2026-03-16 23:15:25 -04:00
ruvector-mincut-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-mincut-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-mmwave hailo: NPU pipeline pool exploration + bridge cache/health parity (iter 234-249) (#418) 2026-05-04 09:56:26 -04:00
ruvector-nervous-system test: remove 12 flaky tests previously quarantined with #[ignore] (#393) 2026-04-26 23:10:00 -04:00
ruvector-nervous-system-wasm style: apply rustfmt across entire codebase 2026-01-28 17:00:26 +00:00
ruvector-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-postgres chore(postgres): regenerate ruvector-postgres Cargo.lock 2026-05-22 04:18:53 -04:00
ruvector-profiler fix: apply cargo fmt across workspace and fix CI issues 2026-02-21 20:56:38 +00:00
ruvector-rabitq feat(wasm): publish @ruvector/rabitq-wasm and @ruvector/acorn-wasm to npm (#394) 2026-04-26 23:10:39 -04:00
ruvector-rabitq-wasm feat(wasm): publish @ruvector/rabitq-wasm and @ruvector/acorn-wasm to npm (#394) 2026-04-26 23:10:39 -04:00
ruvector-raft chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-rairs fix(ruvector-rairs): shorten keyword to satisfy crates.io 20-char limit 2026-05-12 09:48:24 -04:00
ruvector-replication chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-robotics chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-router-cli fix: add version specs to path dependencies for crates.io publishing 2026-02-23 03:14:45 +00:00
ruvector-router-core style: cargo fmt --all on touched HNSW pruning block 2026-05-18 16:32:44 -04:00
ruvector-router-ffi fix(router): 7 bugs in @ruvector/router — broken wrapper, score inversion, DB crashes (#333) 2026-04-06 16:27:46 -04:00
ruvector-router-wasm fix: add version specs to path dependencies for crates.io publishing 2026-02-23 03:14:45 +00:00
ruvector-rulake chore(rulake): add version to ruvector-rabitq path dep for crates.io 2026-04-24 10:15:18 -04:00
ruvector-server chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-snapshot chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-solver chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-solver-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-solver-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-sparse-inference fix(npm): update stale ruvector peer deps and fix TS syntax error (#492) 2026-05-22 02:33:45 -04:00
ruvector-sparse-inference-wasm fix: resolve 5 P0 critical issues + 2 pre-existing compile errors 2026-03-06 14:03:42 +00:00
ruvector-sparsifier chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-sparsifier-wasm chore(workspace): cargo fmt — mechanical whitespace fix across 427 files 2026-04-24 10:44:02 -04:00
ruvector-temporal-tensor chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-temporal-tensor-wasm feat: Add ADR-017 temporal tensor compression with tiered quantization 2026-02-06 00:28:21 +00:00
ruvector-tiny-dancer-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-tiny-dancer-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-tiny-dancer-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-verified chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-verified-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-wasm fix: 9-issue cleanup batch + regression-guard CI workflow (#466) 2026-05-16 12:14:49 -04:00
ruvix chore(workspace): make full cargo build --workspace exit 0 2026-04-25 18:06:27 -04:00
ruvllm fix(ruvllm): reject unsupported GGUF architectures with clear error + add Qwen2/Gemma metadata keys (#486) 2026-05-22 01:24:29 -04:00
ruvllm-cli ADR-180: ruvllm 2.2.1 cache-reset patch + N-backend pool exploration (#424) 2026-05-05 09:47:05 -04:00
ruvllm-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvllm_retrieval_diffusion fix: 9-issue cleanup batch + regression-guard CI workflow (#466) 2026-05-16 12:14:49 -04:00
ruvllm_sparse_attention fix: 9-issue cleanup batch + regression-guard CI workflow (#466) 2026-05-16 12:14:49 -04:00
rvAgent fix(rvagent-cli, ruqu-wasm): unblock 2 PR #388 test failures 2026-04-26 00:14:39 -04:00
rvf chore(workspace): cargo fmt nested workspaces — rvf/, examples/* 2026-04-24 10:51:14 -04:00
rvlite fix(rvlite): SPARQL variable predicates, DESCRIBE EOF, and metadata-filtered vector search (#488) 2026-05-22 01:58:10 -04:00
rvm feat(quality): ADR-144 monorepo quality analysis — Phase 1 critical fixes (#336) 2026-04-06 21:19:13 -04:00
sona fix(ruvector): ONNX wasm bundle + brain MCP ESM errors + supply-chain CI (#481) 2026-05-21 23:54:54 -04:00
thermorust chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
agentic-robotics-README.md feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00