Commit graph

2659 commits

Author SHA1 Message Date
rUv
716dbede1d
fix(security): SECURITY.md disclosure policy (#320) + CORS allowlist (#560) (#577)
- Add SECURITY.md: private disclosure via GitHub PVR or ruv@ruv.net, scope,
  and response SLAs. Closes the responsible-disclosure gap raised in #320
  (gives reporters a channel without enabling beg-bounty noise).
- mcp-brain-server CORS: add https://app.conceptmapping.org and
  https://conceptmapping.org to the default allowlist so pi.ruv.io/v1/*
  returns Access-Control-Allow-Origin for those browser origins (#560).
  Kept an explicit per-origin allowlist (not `*`) since callers authenticate
  with Bearer tokens. cargo check -p mcp-brain-server: clean.

Refs #320 #560

Co-authored-by: ruv <ruvnet@users.noreply.github.com>
2026-06-17 10:28:38 -04:00
github-actions[bot]
644af43236 chore: Update NAPI-RS binaries for all platforms
Some checks are pending
Workspace CI / Tests (ruvix) (push) Waiting to run
Workspace CI / Tests (rvagent) (push) Waiting to run
Workspace CI / Tests (vector-index) (push) Waiting to run
Workspace CI / Security audit (push) Waiting to run
Clippy + fmt / Rustfmt (push) Waiting to run
Clippy + fmt / Clippy (deny warnings) (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / reentrant-rwlock-double-write (push) Waiting to run
regression-guard / case-insensitive-collisions (push) Waiting to run
regression-guard / ruvector-core-no-avx512-builds-on-stable (push) Waiting to run
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
Built from commit 183ed4aecf

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-16 16:53:01 +00:00
ruv
183ed4aecf docs(adr): ADR-255 ruvector <-> OIA Model integration (alignment profile)
Grounded in a deep-research brief over agenticsorg/OIA-Model v0.1: maps OIA's
10 layers (L0-L9) + 6 spans to ruvector components, decides a non-binding
alignment profile (ruvector as an L3 + L5-L8 provider), designates the RVF
cognitive container as the L8 artifact and the witness chain as the
SPAN-AUD/PRV primitive, and explicitly scopes out L0/L1/L9/L4-pretraining +
the GCP-portability gap. Stays doc/tag-level — no OIA dependency, no API
rename — because OIA is pre-1.0 with no machine-readable conformance.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-16 12:46:16 -04:00
github-actions[bot]
0b88d4b5bf chore: Update NAPI-RS binaries for all platforms
Built from commit a7028efc26

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-16 16:19:26 +00:00
ruv
a7028efc26 docs(adr): ADR-254 ruvector-turbovec multi-bit FastScan ANN index (#520)
Canonical ADR for the 2-4-bit scalar-quantized FastScan search index proposed in
#520 / PR #521. Numbered 254 because the PR drafted it as ADR-194, which collides
with the merged ADR-194 (ONNX embedder). Captures the gap, the T1-T6 design,
reuse boundary, milestones M1-M5, measured M1 validation, and honest divergences
from the TurboQuant paper.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-16 12:11:03 -04:00
github-actions[bot]
474bb9fd1b chore: Update NAPI-RS binaries for all platforms
Built from commit 135a0304a0

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-16 15:50:22 +00:00
ruv
135a0304a0 fix(ruvector-core): data-loss in update_q_value (#562) + silent quantization no-op (#563)
Some checks are pending
Workspace CI / Tests (ruqu-quantum) (push) Waiting to run
Workspace CI / Tests (ruvix) (push) Waiting to run
Workspace CI / Tests (rvagent) (push) Waiting to run
Workspace CI / Tests (vector-index) (push) Waiting to run
Clippy + fmt / Rustfmt (push) Waiting to run
Clippy + fmt / Clippy (deny warnings) (push) Waiting to run
regression-guard / ruvector-core-no-avx512-builds-on-stable (push) Waiting to run
regression-guard / reentrant-rwlock-double-write (push) Waiting to run
regression-guard / case-insensitive-collisions (push) Waiting to run
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
#562 (Critical): PolicyMemoryStore::update_q_value deleted the policy and
returned Ok(()) without re-inserting — silent data loss for any RL loop. Now it
fetches the entry, updates q_value in metadata, and re-inserts (preserving the
embedding); returns VectorNotFound on a missing id instead of false success.
Adds a regression test.

#563 (High): DbOptions.quantization was accepted/persisted but never threaded
into the index/storage, while the default was Some(Scalar) and docs promised
4x/32x compression. Default flipped to None; VectorDB::new now warns when a
non-None quantization is set; enum/field docs state compression is a target
"not yet applied", not a guarantee.

228 ruvector-core lib tests pass.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-16 11:44:51 -04:00
github-actions[bot]
62d7661140 chore: Update NAPI-RS binaries for all platforms
Built from commit e346476833

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-16 14:50:35 +00:00
Dragan Spiridonov
e346476833
fix(mcp-brain-server): use native-tls-vendored so it cross-compiles to aarch64 (#573)
mcp-brain-server pins reqwest with the `native-tls` feature (for TLS
close_notify compatibility). On aarch64 cross-builds, native-tls → openssl-sys
fails because the target's OpenSSL dev headers aren't present, so the binary
can't be built for Raspberry Pi 5.

Switch to `native-tls-vendored`, which builds OpenSSL from source for the target
— identical TLS behavior (still native-tls, close_notify compat preserved), just
statically linked, no host/target OpenSSL headers required.

Context: the Cognitum v0 appliance image (cognitum-one/v0-appliance) builds this
binary as `ruview-mcp-brain-mini` (the :9876 vector-memory store) from this repo
as a submodule. This is the only blocker preventing it from shipping on the Pi 5
(Hailo-8/10H) appliance.
2026-06-16 10:42:13 -04:00
github-actions[bot]
892b7a15c8 chore: Update NAPI-RS binaries for all platforms
Some checks failed
Build Graph Node Native Modules / Build Graph darwin-arm64 (push) Has been cancelled
Build Graph Node Native Modules / Build Graph darwin-x64 (push) Has been cancelled
Build Graph Node Native Modules / Build Graph linux-arm64-gnu (push) Has been cancelled
Build Graph Node Native Modules / Build Graph linux-x64-gnu (push) Has been cancelled
Build Graph Node Native Modules / Build Graph win32-x64-msvc (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer darwin-arm64 (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer darwin-x64 (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer linux-arm64-gnu (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer linux-x64-gnu (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer win32-arm64-msvc (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer win32-x64-msvc (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer linux-arm64-musl (push) Has been cancelled
Build Tiny Dancer Native Modules / Build Tiny Dancer linux-x64-musl (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Build (push) Has been cancelled
Build Graph Node Native Modules / Publish Graph Node Platform Packages (push) Has been cancelled
Build Tiny Dancer Native Modules / Publish Tiny Dancer Platform Packages (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Unit & CLI tests (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Functional smoke (npx ruvector) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Learning check (HNSW activates) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Performance benchmark (≥2× speedup at N=5000) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Recall quality (recall@10 ≥ 0.88 at N=10k) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Tarball integrity (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / CI pass (push) Has been cancelled
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
Built from commit 1e1740a876

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 16:49:59 +00:00
rUv
1e1740a876
docs(adr): ADR-252 HelixDB vs RuVector comparison and improvement opportunities (#570)
* docs(adr): ADR-252 HelixDB vs RuVector comparison and improvement opportunities

Compares HelixDB (LMDB/heed, compiled type-safe HelixQL, graph-vector
thesis, graph-vector-bench) against RuVector's redb/Cypher/hybrid stack
and proposes 7 prioritized, opt-in improvements: optional schema layer
with load-time validation, first-class typed graph-vector binding and a
unified search-then-traverse operator, in-query embed(), unified
ANN+BM25+graph RRF hybrid, a reproducible benchmark harness, schema-driven
typed SDK codegen, and an object-storage tier research spike.

https://claude.ai/code/session_01BrEtcS3KZykinsv9RoBGrF

* feat(ruvector-graph): native schema layer + typed search-then-traverse (ADR-252 P1/P2/P4)

Implements the HelixDB-inspired improvements natively in ruvector-graph:

- schema.rs: opt-in GraphSchema (N::/E::/V:: equivalents) with load-time
  validation (self-consistency, node required/typed props + strict mode,
  edge from/to label constraints, vector dimension checks), higher-is-better
  distance metrics (cosine/dot/euclidean), and reciprocal_rank_fusion (P4).
- typed_graph.rs: TypedGraph wrapper validating mutations pre-storage, plus a
  fused typed search_then_traverse operator (HelixQL SearchV<T>(q,k)::In/Out<E>)
  with optimized bounded-heap top-k selection (O(n log k)).

Pure-Rust, no new deps, WASM-safe. 13 new tests, 148/148 lib tests green,
clippy clean. Schemaless mode remains the default (opt-in coexistence).

https://claude.ai/code/session_01BrEtcS3KZykinsv9RoBGrF

* perf(ruvector-graph): optimize search_then_traverse + add criterion bench (ADR-252)

Hot-path optimizations for the typed search-then-traverse operator:
- GraphDB::with_node / node_ids_by_label: zero-copy borrow scoring, eliminating
  per-candidate Node + embedding clones (get_nodes_by_label cloned everything).
- Fused single-pass cosine (q.c and c.c in one read of the candidate) + hoisted
  query norm out of the per-candidate loop.
- Bounded top-k min-heap (O(n log k)); clone id only for heap winners.
- Rayon parallel scan over DashMap for >=4096 candidates (per-thread heaps,
  bounded merge); serial path below threshold.

Adds benches/typed_graph_bench.rs (criterion). Measured vs first cut (128-dim,
k=10): 10k 7.2ms->3.08ms (2.34x), 50k 74.3ms->28.5ms (2.61x), 1k 539us->432us.
New parallel-vs-reference correctness test. 149/149 lib tests green, clippy clean.

https://claude.ai/code/session_01BrEtcS3KZykinsv9RoBGrF

* feat(ruvector-graph): HNSW push-down for search_then_traverse (ADR-252 P2)

Adds an opt-in ANN path to the typed search-then-traverse operator, removing
the O(n) full-label scan for indexed vector types:

- TypedGraph::build_vector_index(vector_type) builds a per-vector-type
  HybridIndex (HNSW under hnsw_rs, exact FlatIndex otherwise), holding only the
  bound label's nodes so searches stay label-scoped. Kept current incrementally
  via create_node -> index_node.
- search_then_traverse routes through the index when present: ~O(log n)
  approximate search, over-fetch (max(4k, k+32)), then exact rescore with the
  schema metric so ANN results carry identical higher-is-better score semantics
  to the brute-force path. Brute force remains the default.
- Parallel brute-force path refactored to capture &GraphDB (not &self) so it
  stays Send+Sync independent of the index's thread-safety bounds.

Bench (50k nodes, 128-dim, k=10): brute-force parallel scan 27.6ms -> HNSW
push-down 1.05ms (~26x; ~70x vs first cut). 151/151 lib tests green (3 new
HNSW tests), clippy clean.

https://claude.ai/code/session_01BrEtcS3KZykinsv9RoBGrF

* feat(ruvector-graph): inline embed() + tri-modal BM25/ANN/graph hybrid (ADR-252 P3/P4)

P3 - inline embedding (HelixQL Embed()):
- embed.rs: Embedder trait + dependency-free deterministic HashEmbedder
  (feature-hashing, explicit opt-in, never a silent fallback per ADR-194).
- TypedGraph::with_embedder / embed / create_node_from_text (embed-at-insert,
  dimension-validated) / search_text (embed-at-query).

P4 - tri-modal hybrid query:
- bm25.rs: self-contained Okapi-BM25 inverted index.
- TypedGraph::build_text_index + hybrid_search_text fusing ANN vector + BM25
  keyword + graph traversal via reciprocal rank fusion in one typed call.
- Refactored search_then_traverse into shared rank_seeds/expand helpers.

Bench: hash_embed_256 717ns; tri_modal_hybrid over 10k docs (embed+HNSW+BM25+
RRF+traverse) 1.63ms end-to-end. 164/164 lib tests green (+13), clippy clean.

https://claude.ai/code/session_01BrEtcS3KZykinsv9RoBGrF

* feat(ruvector-graph): schema-driven typed SDK codegen (ADR-252 P6)

codegen.rs generates typed client stubs from a GraphSchema:
- generate_typescript: interfaces with typed/optional properties (@indexed
  hints), edge from->to constraints, and a VectorTypes manifest + VectorTypeName.
- generate_python: TypedDict classes + VECTOR_TYPES manifest.
- generate_rust: serde-ready structs.
Deterministic (schema elements sorted) for check-in/diff. Adds *_schemas_sorted
accessors to GraphSchema. Closes HelixDB's schema->typed-SDK DX advantage.

168/168 lib tests green (+4), clippy clean.

https://claude.ai/code/session_01BrEtcS3KZykinsv9RoBGrF

* docs(adr): renumber ADR-252 -> ADR-253 (252 taken by FastGRNN training pipeline)

ADR-252 was already merged to main as the tiny-dancer FastGRNN training
pipeline. Renumber this HelixDB comparison to ADR-253 to resolve the collision.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ruv <ruvnet@users.noreply.github.com>
2026-06-15 12:28:46 -04:00
github-actions[bot]
7a2ad04a4f chore: Update NAPI-RS binaries for all platforms
Built from commit 3c1f701755

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 16:01:55 +00:00
github-actions[bot]
1b61fe5b83 chore: Update NAPI-RS binaries for all platforms
Built from commit 5173ce7ab6

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 15:59:15 +00:00
github-actions[bot]
f5e6677371 chore: Update NAPI-RS binaries for all platforms
Built from commit 39fb398228

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 15:53:45 +00:00
ruv
3c1f701755 fix(ruvector-cli): tiny-dancer score command (raw forward) + dep ^0.1.22
Replaces the route subcommand (which used Router.route's 5-feature engineering —
a different model contract) with 'score', backed by tiny-dancer's score() raw
forward pass that matches trainRouter models. Also fixes the earlier Float32Array
issue by removing the Router.route path entirely.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 11:31:35 -04:00
ruv
39fb398228 feat(tiny-dancer): add score() raw-forward inference + 0.1.22
score(modelPath, embedding) loads a trainRouter .safetensors and runs the
FastGRNN directly on the raw embedding (the inference path that matches how
trainRouter trains — Router.route's 5-feature engineering is a different model
contract). Validated easy=1.0/hard=0.0 on a freshly built binary.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 11:29:17 -04:00
ruv
5173ce7ab6 feat(ruvector-cli): integrate tiny-dancer router (train/route/info)
Some checks failed
ruvector-verified CI / check (--features hnsw-proofs) (push) Has been cancelled
ruvector-verified CI / check (--features rvf-proofs) (push) Has been cancelled
ruvector-verified CI / check (--features serde) (push) Has been cancelled
ruvector-verified CI / check (--features ultra) (push) Has been cancelled
ruvector-verified CI / clippy (push) Has been cancelled
ruvector-verified CI / check (--features coherence-proofs) (push) Has been cancelled
ruvector-verified CI / check (--all-features) (push) Has been cancelled
ruvector-verified CI / test (push) Has been cancelled
ruvector-verified CI / bench (push) Has been cancelled
ruvector-verified CI / check (--features all-proofs) (push) Has been cancelled
ruvector-verified CI / check () (push) Has been cancelled
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
ruvector npm — functional, learning, optimized, effective / Build (push) Waiting to run
ruvector npm — functional, learning, optimized, effective / Unit & CLI tests (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Functional smoke (npx ruvector) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Learning check (HNSW activates) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Performance benchmark (≥2× speedup at N=5000) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Recall quality (recall@10 ≥ 0.88 at N=10k) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Tarball integrity (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / CI pass (push) Blocked by required conditions
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
npx ruvector tiny-dancer train <draco.json> --out model.safetensors trains a
FastGRNN cost-optimal router from a DRACO {embedding,scores} dataset; `route`
loads + routes; `info` reports availability. @ruvector/tiny-dancer added as an
optionalDependency (native binary, lazy-required with install hint). Bump 0.2.31.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 11:19:44 -04:00
github-actions[bot]
1cb17ae806 chore: Update NAPI-RS binaries for all platforms
Built from commit c520576d40

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 15:06:51 +00:00
github-actions[bot]
6e6051b6b5 chore: Update NAPI-RS binaries for all platforms
Built from commit 1aa132ba41

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 15:01:40 +00:00
github-actions[bot]
f6999f80a7 chore: Update NAPI-RS binaries for all platforms
Built from commit e709718b64

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 15:01:11 +00:00
ruv
c520576d40 release(tiny-dancer): 0.1.21 — expose trainRouter to JS (types + bump)
Adds trainRouter/DracoRowJs/TrainRouterOptions/TrainRouterResult to the
hand-written index.d.ts and bumps to 0.1.21 (8 optionalDependencies lock-stepped)
so the native train_router export ships typed across all environments.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 10:57:58 -04:00
ruv
1aa132ba41 feat(tiny-dancer-node): napi trainRouter export (ADR-252 B)
Exposes the FastGRNN training pipeline to JS: trainRouter(rows, prices, opts)
consumes DRACO {embedding, scores} rows, trains, and writes a .safetensors the
existing `new Router({ modelPath })` loads. Type-checks; reaches JS on the next
tiny-dancer platform rebuild/republish.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 10:53:12 -04:00
ruv
e709718b64 feat(tiny-dancer): real FastGRNN training pipeline (ADR-252)
Closes the three gaps that made tiny-dancer inference-only:

1. Real gradients: FastGRNN::forward_cached + backward implement single-step
   analytic backprop (h0=0); gradient-checked vs central finite differences.
2. Real Adam step: train_batch accumulates mean batch gradients; apply_gradients
   does L2 + global-norm clip + bias-corrected Adam update on the existing
   optimizer state. Model now actually learns (test: loss down, acc>0.9).
3. safetensors persistence: model.rs save/load serialize every tensor (f32 LE)
   with config in __metadata__; round-trip is bit-exact.
4. DRACO adapter: TrainingDataset::from_draco consumes the {embedding, scores}
   + prices shape (same as @metaharness/router) so one dataset trains both.

Runnable example train_from_draco demonstrates DRACO -> train -> save -> load
-> route end to end. 31 core tests green (gradient check, convergence,
round-trip, adapter).

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 10:50:14 -04:00
github-actions[bot]
4231f0cf93 chore: Update NAPI-RS binaries for all platforms
Built from commit 4c448f017f

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 14:09:21 +00:00
ruv
4c448f017f fix(tiny-dancer): use --zig + setup-zig for musl cross-builds (napi 2.18 has no --use-napi-cross)
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 10:00:51 -04:00
github-actions[bot]
cabac3720a chore: Update NAPI-RS binaries for all platforms
Built from commit 1ef4eb8497

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 13:53:30 +00:00
ruv
1ef4eb8497 feat(tiny-dancer): full platform matrix — add musl (Alpine) + Windows ARM64
Extends the build/publish workflow from 5 to 8 environments:
- linux-x64-musl, linux-arm64-musl (Alpine/Docker) via napi --use-napi-cross
- win32-arm64-msvc (Windows on ARM) via rustup target cross-compile

index.js now detects musl vs glibc at load time (process.report glibc header)
and routes to the correct binary; adds win32-arm64. package.json bumped to
0.1.20 with all 8 optionalDependencies lock-stepped.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 09:49:00 -04:00
github-actions[bot]
b88010bb2e chore: Update NAPI-RS binaries for all platforms
Built from commit 57187b002d

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 12:47:47 +00:00
ruv
57187b002d fix(tiny-dancer): lock-step platform versioning + drop dead release profile
Root cause of version drift: build-tiny-dancer.yml hard-coded VERSION="0.1.15",
so every publish shipped stale platform binaries while the main package advanced
(npm 0.1.18 was loading 0.1.15-era .node files).

- workflow: derive VERSION from package.json; rewrite main optionalDependencies
  to pin that exact version before publishing, so binaries and JS can never skew.
- package.json: bump to 0.1.19, pin all 5 optionalDependencies to 0.1.19,
  remove dead `publish:platforms` script (scripts/publish-platforms.js absent).
- crate Cargo.toml: remove [profile.release] (Cargo ignores non-root profiles;
  release opt is already opt-level=3/lto=fat/codegen-units=1/strip at root).

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-15 08:39:20 -04:00
github-actions[bot]
85e475a453 chore: Update NAPI-RS binaries for all platforms
Some checks are pending
Workspace CI / Tests (ruvix) (push) Waiting to run
Workspace CI / Tests (rvagent) (push) Waiting to run
Workspace CI / Tests (vector-index) (push) Waiting to run
Workspace CI / Security audit (push) Waiting to run
Clippy + fmt / Clippy (deny warnings) (push) Waiting to run
Clippy + fmt / Rustfmt (push) Waiting to run
regression-guard / reentrant-rwlock-double-write (push) Waiting to run
regression-guard / case-insensitive-collisions (push) Waiting to run
regression-guard / ruvector-core-no-avx512-builds-on-stable (push) Waiting to run
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
Built from commit 054d815d1f

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-15 02:23:53 +00:00
ruv
054d815d1f chore(ruvector-wasm): publish @ruvector/wasm 0.1.31 with corrected adapter
Ships the RuvectorWasmAdapter (#568) and restores a functional package —
0.1.30 published with only package.json (empty pkg/). 0.1.31 includes the
built web pkg/ plus the adapter that corrects similarity score, metadata
round-trip, and flat-index reporting.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-14 22:15:50 -04:00
github-actions[bot]
abf8e0d6f0 chore: Update NAPI-RS binaries for all platforms
Some checks are pending
Workspace CI / Tests (ruqu-quantum) (push) Waiting to run
Workspace CI / Tests (ruvix) (push) Waiting to run
Workspace CI / Tests (rvagent) (push) Waiting to run
Workspace CI / Tests (vector-index) (push) Waiting to run
Clippy + fmt / Clippy (deny warnings) (push) Waiting to run
Clippy + fmt / Rustfmt (push) Waiting to run
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / reentrant-rwlock-double-write (push) Waiting to run
regression-guard / case-insensitive-collisions (push) Waiting to run
regression-guard / ruvector-core-no-avx512-builds-on-stable (push) Waiting to run
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
Built from commit 08c0d742c4

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-14 22:41:06 +00:00
rUv
08c0d742c4
fix(ruvector-wasm): correct adapter for WASM build's flat-index, distance-score, and metadata gaps (#568)
The published @ruvector/wasm build behaves differently from its generated
.d.ts in three ways that bite consumers:

1. HNSW is not active — the wasm32 target compiles without the `hnsw`
   feature and falls back to a flat (brute-force) index, so search is O(n).
   The O(log n) win is latent until the WASM HNSW lands.
2. `result.score` is a cosine distance (lower is better), not the
   "higher is better" similarity the .d.ts advertises (ordering is correct:
   a, b before c).
3. Metadata does not round-trip — search/get return {}.

Add RuvectorWasmAdapter (@ruvector/wasm/adapter) which wraps VectorDB with:
- a metadata sidecar so inserted metadata round-trips
- similarity = 1 - distance (generalised per metric) with `.score` aliased
  to similarity, plus the raw `distance` preserved
- indexType/usesHnsw + WASM_HNSW_AVAILABLE so callers don't assume HNSW
- client-side metadata filtering with over-fetch

Includes TS declarations with corrected doc comments, a node:test suite
covering all three findings, README guidance, and package exports.

Co-authored-by: Claude <noreply@anthropic.com>
2026-06-14 18:32:26 -04:00
github-actions[bot]
524751e435 chore: Update NAPI-RS binaries for all platforms
Some checks failed
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
emergent-time CI / test + lint + examples (push) Has been cancelled
ruvector-verified CI / check () (push) Has been cancelled
ruvector-verified CI / check (--all-features) (push) Has been cancelled
ruvector-verified CI / check (--features all-proofs) (push) Has been cancelled
ruvector-verified CI / check (--features coherence-proofs) (push) Has been cancelled
ruvector-verified CI / check (--features hnsw-proofs) (push) Has been cancelled
ruvector-verified CI / check (--features rvf-proofs) (push) Has been cancelled
ruvector-verified CI / check (--features serde) (push) Has been cancelled
ruvector-verified CI / check (--features ultra) (push) Has been cancelled
ruvector-verified CI / clippy (push) Has been cancelled
ruvector-verified CI / test (push) Has been cancelled
ruvector-verified CI / bench (push) Has been cancelled
Built from commit 44a836d57e

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-13 17:23:15 +00:00
rUv
44a836d57e
feat(emergent-time): calculus of emergent time + Agentic Time primitive (#561)
* feat(emergent-time): calculus of emergent time + Agentic Time primitive

Add `crates/emergent-time`, a dependency-free Rust implementation of the
calculus of emergent/relational time, plus a new agentic-time primitive and
an honest multi-clock benchmark.

Physics formalisms (each verified by tests):
- Wheeler-DeWitt timeless constraint H|Psi>=0 (kernel solver, residual ~1e-15)
- Page-Wootters relational clock: Schrodinger evolution emerges from a static
  entangled state via conditioning (fidelity 1.0)
- Entropic time tau_S=(S-S0)/k (cold-atom analogue; speed tracks dS/dlambda)
- Connes-Rovelli thermal time: modular Hamiltonian K=-ln rho, modular flow
  A(s)=e^{isK}A e^{-isK} (recovers rescaled physical evolution for Gibbs states)

Numerical core: self-contained complex scalars, real symmetric Jacobi
eigensolver, complex unitary evolution via spectral exponentiation, von Neumann
entropy via a real-symmetric Hermitian embedding.

Agentic time:
- Structural Proper Time: internal time as arc length through the state manifold
- Agentic Time tau_a=f(dB,dM,dR,dG,dE,dP) with explainable ticks (class+reason),
  Agentic Time Index, and a 7-state health classifier
- Four-clock benchmark (wall/step/token/agentic). On the bundled synthetic
  traces, structural time warns 2.8x earlier than the entropy clock and agentic
  time gives a 40-step lead where wall/step/token give 0, preserving causal order

Includes a walkthrough example, criterion benches, and ADR-251 documenting
Agentic Time as a proposed Ruflo/RuVector/RuQu runtime primitive.

39 tests passing, clippy clean.

https://claude.ai/code/session_01ApBCSaebKsCzLeA7JhvDvU

* fix(emergent-time): M1 correctness + honesty hardening

Five corroborated-review fixes that raise rigor/honesty without touching
the sound numerical core (Jacobi eigensolver, spectral exp, state/complex/
entropy unchanged).

FIX 1 — explain() noise-floor contract (agentic_time.rs): document that
per-channel Tick fields are RAW (pre-floor) weighted contributions while
`delta` is post-floor max(0, Σchannels − noise_floor); the identity
delta==Σchannels holds only when noise_floor==0. New test
explain_delta_is_post_floor_channels_are_pre_floor asserts the floor=0.1
case (delta strictly < Σchannels) and the clamp-to-0 case.

FIX 2 — Wheeler–DeWitt falsifiability (wheeler_dewitt.rs): module doc now
states the kernel is trivial-by-construction for the energy-matched clock;
existing "kernel" tests relabelled as consistency checks; new discriminating
test generic_clock_yields_empty_physical_space builds Ĵ from a generic
H_C ≠ −H_R and asserts NO eigenvalue within 1e-9 of zero (empty physical
space), with a deterministic perturbation guard and an eigenvalue-sum bound.

FIX 3 — entropic non-tautological test (entropic.rs): docstring softened to
"β-swept Gibbs ensemble" (a temperature sweep, not closed-system dynamics);
tautological tau test renamed tau_reparametrization_formula_is_exact; new
internal_time_spacing_tracks_measured_entropy_production verifies the clock
rate against independently finite-differenced gibbs_entropy and that the
entropy curve is non-trivial and correctly signed.

FIX 4 — Page–Wootters honesty docstring (page_wootters.rs): scope is
real-symmetric H; Born-rule weighting holds only for pure global states;
single-time conditional states only — Kuchař two-time objection out of scope.

FIX 5 — fair baseline + de-hype (agentic_time.rs, examples/emergent_time.rs):
new WindowedDeltaClock rolling-window z-score change-point detector (the
non-strawman baseline the constant-rate wall/step/token clocks were missing).
On the designed trace the fair baseline fires at least as early as the agentic
clock; example output and test relabel the headline as a coverage-gap demo,
not a competitive win. Honest finding: agentic clock does NOT beat a fair
baseline on synthetic data — real-trace head-to-head is M3 work.

ADR-251: adds "Honest limitations" section (WD constructive-not-discovery,
entropic β-sweep, benchmark coverage-gap-not-win, PW scope) and prior-art
note (ADWIN; Ostovar 2016 concept-drift in process mining) stating what is
new (physics-grounded composite state-arc-length runtime primitive).

cargo test -p emergent-time: 43 passed (39 baseline + 4 new); build/clippy
clean; example prints the fair baseline.

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

* perf(emergent-time): M2 performance + robustness (P1/P2/R1/R4)

Numerical core unchanged — pure speed (P1/P2) plus guardrails (R1/R4)
that do not alter valid-input results. All 49 tests pass (43 original
+ 6 new); clippy clean; physics fidelity/entropy/modular values
unchanged.

P1 — stop re-diagonalizing (complex_matrix.rs, page_wootters.rs)
  - Add exp_i_from_spectrum / exp_i_apply_from_spectrum: spectral
    exp(iθH) from a PRECOMPUTED (eigvals, V), no re-diagonalization.
    exp_i_symmetric now routes through exp_i_from_spectrum.
  - PageWootters caches |ψ0| and evolves in the cached energy eigenbasis:
    schrodinger_state(t) = Σ_k e^{-iE_k t}⟨E_k|ψ0⟩|E_k⟩, O(n²)/t, no
    propagator matrix. From-scratch path kept as
    schrodinger_state_from_scratch for callers holding only H.
  - Bench (n16): cached 666 ns vs from-scratch 35.3 µs → ~53x.
  - New test cached_evolution_equals_from_scratch_propagator (1e-12).

P2 — hoist t-independent static state (page_wootters.rs)
  - global_static_state |Ψ| (d²) built once in new(), cached; per-t
    conditional_state conditions the cached vector.
  - Bench page_wootters_conditional_n8: 294 ns → 225 ns (~1.3x).

R1 — restore entropy guardrail (entropy.rs)
  - Replace silent `p > 1e-12` clamp with standard von-Neumann `p > 0.0`
    (skips only 0·ln0; keeps legitimate tiny probabilities; roundoff
    negatives contribute 0). Add debug-only PSD + normalization
    validation so a non-PSD/non-normalized ρ surfaces in dev.
  - New tests: roundoff-negative [0.5,0.5,-1e-15]→ln2, tiny-positive not
    clamped, non-PSD/non-normalized trip debug_assert (debug-only).

R4 — relative Jacobi convergence + non-convergence guard (real_matrix.rs)
  - Replace scale-dependent absolute `off < 1e-28` with relative
    off²/‖A‖²_F < tol² (tol=1e-14); sweep cap kept as backstop.
  - debug_assert! fires if the cap is hit without convergence (signature
    unchanged — every caller destructures (Vec<f64>, RealMatrix);
    subsumes the deferred M1 convergence guard).
  - New near-degenerate stress test (diag 1, 1+1e-10, 2 + tiny
    off-diagonals): orthonormal vectors + correct spectrum.

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

* feat(emergent-time): M3 real-trace defensibility gate (honest null result)

Run the agentic clock vs the FAIR WindowedDeltaClock baseline (and the
constant-rate strawmen) on REAL recorded agent traces -- the Claude Code
session transcripts for this repo -- with PRE-REGISTERED thresholds and an
honestly-defined event-to-predict. This replaces the circular synthetic
benchmark with the genuine M3 gate from ADR-251 section 4.

THE FINDING (reported honestly, not manufactured): on the 2 real traces the
contradiction-free honest agentic clock scores 0 win / 1 tie / 1 loss vs the
fair windowed baseline. It does NOT beat the fair baseline on real data either.
The defensible value of the primitive is diagnostic (per-channel attribution +
health classifier), not a raw early-warning-lead win. The crate stays honest.

- examples/real_trace_eval.rs: real-trace adapter + pre-registered protocol.
  - Source: ~/.claude/projects/C--Users-ruv-ruvector/*.jsonl (real tool-use
    sequences, retries, is_error events). Deliberately NOT intelligence.json
    (51 flat all-success records, no failure events -- would be dishonest).
  - Documented heuristic channel mapping (tool-type TF -> belief, distinct
    files -> memory, Read/Grep -> retrieval, new user prompt -> goal, is_error
    rate -> contradiction, text+repetition -> plan).
  - Event-to-predict = real error cascade (>=2 is_error in 4 steps), defined
    from the harness is_error flag ONLY (non-circular).
  - Circularity guard: an honest agentic variant with contradiction weight 0
    so it cannot see the signal that defines the event. This is the real gate.
  - Pre-registered (before any lead computed): window=10, k=3sigma, metric=lead.
  - Prints an alive-vs-degenerate diagnostic: the honest signal is NOT flat
    (mean inc ~1.5, max ~4.4) but never clears its own mean+3sigma bar because
    early exploratory churn sets a high baseline -- a real property of real
    traces, not a dead clock.
  - Degrades gracefully (prints [skip], exits 0) when no traces are present,
    so CI without the data still passes.
- agentic_time.rs: add test contradiction_free_weights_blind_to_error_channel
  locking in the M3 circularity guard (50 tests, was 49).
- ADR-251: replace the M3-future-work note with the actual real-trace result;
  mark the Baseline-dominance gate UNMET; full lead table + caveats in Honest
  limitations.

Validation: cargo test -p emergent-time => 50 passed; build + clippy clean;
real_trace_eval runs and prints real numbers (0 win / 1 tie / 1 loss).

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

* feat(emergent-time): M3b adaptive change-point detector (honest null, more robust)

M3 got an honest null on real traces with a fixed-window mean+3σ alarm and
diagnosed the cause: a frozen early baseline poisoned by exploration churn. M3
proposed an adaptive-window detector as the fix. M3b implements that exact fix.

- src/adaptive.rs: Page-Hinkley test (Page 1954 / Hinkley 1970), dependency-free
  pure Rust. Running-mean reference instead of a frozen window; upward + downward
  forms; clock-agnostic adaptive_alarm_step / adaptive_early_warning_lead.
  Documented math + literature citations. 12 unit tests (detects real step-change,
  silent on stationary noise, constant streams never alarm, threshold/tolerance
  monotonicity, slot-0 padding excluded, fair on both clock + baseline).
- examples/real_trace_eval.rs: wires the SAME pre-registered detector (δ=0.15,
  λ=5.0, fixed before any lead) into BOTH the agentic-honest composite AND the
  fair baseline. Prints fixed-window (M3) AND adaptive (M3b) leads side-by-side.

Honest result on the same n=2 real traces: the adaptive detector works as
designed — the fair belief-shift baseline, which never fired under the fixed
window, now leads by 32 and 25 steps. But it does NOT rescue the agentic clock:
the honest composite's adaptive alarms (steps 75, 49) still land AFTER the error
cascades (steps 37, 29), so its lead stays 0. Verdict moves 0/1/1 → 0 win / 0 tie
/ 2 loss. The M3-proposed fix was tried and did not change the verdict; the honest
null is now MORE ROBUST. Defensible value of the primitive remains diagnostic
(per-channel attribution + health classifier), not a raw early-warning-lead win.
n=2 caveat stands; a fair win would have demanded a larger pre-registered corpus.

ADR-251 §3/§4 extended with the adaptive-detector outcome and fixed-vs-adaptive
table. cargo test green (62), clippy clean, examples build, graceful-skip intact.

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

* style(emergent-time): apply rustfmt across the crate

Bring the crate (including the M2/M3/M3b additions) under rustfmt to
satisfy the CI Rustfmt check. Formatting only; no behavior change, 62
tests still pass.

https://claude.ai/code/session_01ApBCSaebKsCzLeA7JhvDvU

* fix(emergent-time): make real-trace parser robust to tool_use key order

The M3 real-trace harness silently ingested zero steps from genuine
Claude-Code transcripts because `extract_tool_names` only searched for
`"name":"..."` AFTER the `"type":"tool_use"` marker. Current transcripts
emit the name BEFORE the type (`{"name":"Bash","type":"tool_use",...}`),
so every single-tool step was dropped, `parse_session` fell below
MIN_STEPS and returned None, and the harness reported "No real session
transcripts found" — masquerading a parse failure as missing data.

Verified on a real 531-line session transcript: 0 steps parsed before,
112 after. The session has no error cascade, so it is correctly reported
as descriptive-only (not scoreable) rather than silently skipped.

Changes:
- extract_tool_names: pair each tool_use marker to the nearest "name"
  within a bounded window in EITHER direction (order-independent).
- load_traces: return files-seen / parse-failure counts so main can
  distinguish "no files" from "files present but unparseable" — an
  honesty fix so a silent parser gap can't pose as absence.
- add a regression test covering both key orderings + multi-tool lines.

fmt clean, clippy clean, 62 lib tests + 1 example test pass.

https://claude.ai/code/session_01ApBCSaebKsCzLeA7JhvDvU

* feat(emergent-time): learn agentic-time channel weights (honest harness)

Replace hand-set AgenticWeights with weights LEARNED from labelled
outcomes via L2-regularized logistic regression (dependency-free), with
held-out evaluation and a circularity guard (Honest mode drops the
contradiction channel).

Honest finding, reported not hidden: learning matches the hand-set guess
(AUC 0.936 vs 0.935) and yields interpretable importances (plan +0.75
dominant), but does NOT beat the best single channel on this synthetic
data (goal_graph 0.950 / contradiction 0.956) — the signal is
concentrated in one planted channel. Composition only earns its keep
when signal is spread across weak channels (ADR-251 §4), which needs
real traces. This is the reusable apparatus to run that test.

4 new tests; 66 lib tests pass, clippy + fmt clean.

https://claude.ai/code/session_01ApBCSaebKsCzLeA7JhvDvU

* feat(emergent-time): trained model + witness-chain provenance

Add a deterministic trained-weight model with tamper-evident, reproducible
provenance, and an honest "beyond baseline, with proof" demonstration.

- weight_learning: make LearnedWeights dimension-generic (store `dim`, add
  `from_params`); add a Gaussian sampler and `diffuse_dataset` — a controlled
  weak-signal benchmark (channels of differing strength + pure-noise channels).
  New test proves the learned composition BEATS both the best single channel
  and the equal-weight baseline in this regime (the one the thesis targets).

- witness: FNV-1a hash-linked WitnessChain (seal/append/verify, text round-trip,
  tamper + reproducibility detection). Proof of *provenance*: the sealed metrics
  correspond to the committed model and re-training reproduces the same hash.

- examples/train_model: trains, seals a witness record, persists the model +
  chain artifact, then verifies (1) chain integrity, (2) committed model matches
  sealed model_hash, (3) reproducibility. On the diffuse benchmark the learned
  model scores AUC 0.759 vs best-single 0.681 vs equal-weight 0.708 and recovers
  the signal structure (noise channels learned to ~0).

- models/agentic_weights.witness.txt: the sealed trained-model artifact.

HONEST SCOPE: this is "beyond baseline, with verifiable proof" in the method's
target regime (distributed weak signal) — NOT a claim of beating real-world
agent-failure SOTA, which still needs real labelled traces (ADR-251 §4).

72 lib tests pass, clippy + fmt clean.

https://claude.ai/code/session_01ApBCSaebKsCzLeA7JhvDvU

* docs(emergent-time): add README; release 2.2.4

2.2.3 published without a README (bare crates.io page). Adds a
matter-of-fact README (physics formalisms, Agentic Time, benchmark
results, usage) and decouples the crate version from the workspace so it
can be released independently.

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

* ci(emergent-time): dedicated test + falsifiability guard

Path-filtered CI gate for the emergent-time crate: fmt, clippy -D
warnings, full test suite, example builds + no-data runs, and a
publish-equivalent package check. Plus a guard step that greps for the
falsifiability / pre-registered-evaluation tests (generic-clock empty
kernel, cached-vs-from-scratch equivalence, entropy-rate-vs-measured,
error-blind agentic weights, real_trace_eval harness) so none can be
silently removed without failing CI.

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

* fix(emergent-time): sync Cargo.lock to crate version 2.2.4

The 2.2.4 version bump updated Cargo.toml but left Cargo.lock at 2.2.3,
failing the lockfile-integrity CI gate. Update the lock to match.

https://claude.ai/code/session_01ApBCSaebKsCzLeA7JhvDvU

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ruv <ruvnet@users.noreply.github.com>
2026-06-13 13:15:31 -04:00
github-actions[bot]
8f2b4bd822 chore: Update NAPI-RS binaries for all platforms
Some checks failed
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / reentrant-rwlock-double-write (push) Waiting to run
regression-guard / case-insensitive-collisions (push) Waiting to run
regression-guard / ruvector-core-no-avx512-builds-on-stable (push) Waiting to run
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
ruvector npm — functional, learning, optimized, effective / Build (push) Has been cancelled
SONA Drift Protection / Drift gate (parity + fingerprint) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Unit & CLI tests (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Functional smoke (npx ruvector) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Learning check (HNSW activates) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Performance benchmark (≥2× speedup at N=5000) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Recall quality (recall@10 ≥ 0.88 at N=10k) (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / Tarball integrity (push) Has been cancelled
ruvector npm — functional, learning, optimized, effective / CI pass (push) Has been cancelled
Built from commit 049f0785f1

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-12 23:34:29 +00:00
rUv
049f0785f1
feat(ruvector): ADR-210 — default-on semantic embeddings with provenance contract (#559)
* feat(ruvector-npm): ADR-210 wave 1 — default-on semantic embeddings contract (D0/D1/D4/D5)

D0: embedding-provenance invariant {embedderKind, modelId, dimension,
normalize, prefixPolicy} stamped on hooks intelligence stores and .db
sidecars; mixed-provenance inserts refused naming both sides; legacy
stores derive hash-provenance and open read-only for vector writes until
hooks reembed (new command, --dry-run/--drop-missing; memories retain
content so re-embedding is real). Reads on mismatched stores warn once
per process instead of returning silently meaningless similarity.

D1: IntelligenceEngine enableOnnx defaults true with lazy init;
stats().embedderKind = onnx-minilm | hash-fallback | hash; exactly one
stderr warning per process on first fallback use; ambient hooks
(post-edit/post-command) use best-effort writes so a locked store never
fails them.

D4: model registry gains prefixPolicy/queryPrefix/passagePrefix per the
model cards (MiniLM none, e5-small-v2 required, bge-small-en-v1.5
query-recommended); embedQuery/embedPassage apply prefixes before
tokenization and the cache key; MiniLM output stays byte-identical.

D5: RUVECTOR_EMBEDDER=auto|minilm|hash (minilm hard-requires, no
fallback) > RUVECTOR_ONNX=0|1; RUVECTOR_REEMBED=refuse|warn|auto
enforced at vector-op time (open-time cannot know the embedder before
lazy init — documented judgment call).

Acceptance gates 1-7 pass with the model loaded (tests/
adr-210-acceptance.test.mjs + embedding-provenance.test.mjs); npm test
69+7 green; sona-drift harness passes with zero fingerprint shift.
Wave 2 (D2 text-corpus recall benchmark, D3 int8 bulk ingest, gate 8,
mcp-server.js D0 bypass) follows.

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

* feat(ruvector-npm): ADR-210 wave 2 — text-corpus recall gate, parallel bulk ingest, D0 bypass closure, security pass

D2/gate 8: deterministic text fixture (600 docs + 60 held-out queries,
seeded PRNG, generator committed with byte-reproducibility test) embedded
with MiniLM and measured against exact brute-force cosine: recall@10 =
1.0 on the default VectorDB search path across the full efSearch sweep;
gate asserts >= 0.9. Rust-side RaBitQ/ef floor re-tuning is out of npm
reach and documented as the follow-up, not faked.

D3: int8 is a verified honest gap — the bundled WASM runtime rejects
both available quantized MiniLM exports (graph-analyzer failures on
Unsqueeze nodes), so parallel-fp32 bulk is the default per the ADR
contingency. The actual bulk-embed path in this package is hooks reembed
(insert/import only ever carry pre-computed vectors); it now batches
>= 32 memories through the bundled pool, which gained bounded-chunk
work-stealing dispatch (the old one-giant-shard-per-worker design blew
the 30s request timeout on bulk loads). Measured: 8.9 vs 3.9 texts/s
(~2.3x, 4 workers); 48-memory store reembeds in 8.7s with provenance
stamped.

D0 bypass closure: bin/mcp-server.js now enforces the shared provenance
module on hooks_remember, hooks_recall (once-per-process degraded-recall
warning), and a second bypass found in hooks_import (vector-bearing
merges gated); stats reports embedderKind.

Security pass, all test-locked: prototype-pollution in three registry
lookups (own-property checks); sanitizeProvenance/sanitizeDimension on
every untrusted disk read (malformed sidecars and intelligence.json no
longer crash or mis-refuse; dimension capped); corrupted-store shape
checks in both binaries; reembed tolerates null/missing-content entries
with --drop-missing; env-flag junk values fall back safely; prefix
application is pure concatenation (no injection surface).

Suites: npm test green, gates 1-8 + 10 wave-2 tests pass with the model
loaded, drift harness passes with zero fingerprint shift, build clean.

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

* fix(ruvector-npm): register signal handlers before transport connect

The sigterm-cleanup suite was flaky on CI — SIGTERM and SIGINT failed
alternately (main fails SIGTERM, PR runs fail SIGINT) because handlers
were registered at the end of main(), after the async transport connect:
a signal landing during startup hit the default handler and exited
non-zero. Handlers now register first; stdin-end stays post-connect.

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

* fix(ruvector-npm): un-stale the smart-loader assertion (broken on main)

test/standalone-test.js grepped dist/index.js for @ruvector/wasm, but the
loader fallback chain moved to @ruvector/rvf in the #523-era rework — the
assertion has failed on every CI run of the Unit & CLI tests job since
(one of the four perpetually-red jobs in the ruvector npm workflow).
Assertion now matches the real chain: @ruvector/core native ->
@ruvector/rvf.

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

---------

Co-authored-by: ruv <ruvnet@users.noreply.github.com>
2026-06-12 19:29:18 -04:00
github-actions[bot]
e030c09b0f chore: Update NAPI-RS binaries for all platforms
Some checks failed
regression-guard / reentrant-rwlock-double-write (push) Waiting to run
regression-guard / case-insensitive-collisions (push) Waiting to run
regression-guard / ruvector-core-no-avx512-builds-on-stable (push) Waiting to run
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
Build RVF Node Native Modules / Build darwin-arm64 (push) Has been cancelled
Build RVF Node Native Modules / Build darwin-x64 (push) Has been cancelled
Build RVF Node Native Modules / Build linux-arm64-gnu (push) Has been cancelled
Build RVF Node Native Modules / Build linux-x64-gnu (push) Has been cancelled
Build RVF Node Native Modules / Build win32-x64-msvc (push) Has been cancelled
Build RVF Node Native Modules / Commit RVF Node Binaries (push) Has been cancelled
Built from commit efa3d09762

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-12 19:41:03 +00:00
rUv
efa3d09762
feat(rvm): witness-chain hardening — chained seals, key ratchet, coverage invariants, C2SP checkpoint export (#558)
* docs(adr): ADR-210 — default-on semantic embeddings (all-MiniLM-L6-v2)

The bundled MiniLM ONNX embedder is effectively off: IntelligenceEngine
defaults enableOnnx:false (hooks route/memory/patterns run on a 256-dim
character hash), SONA TS hashes into 64 dims, RaBitQ is L2-only against a
cosine-trained model, and ANN floors were tuned on uniform-random worst
cases. Decision: flip the default with loud (never silent, per #523)
fallback and dimension migration; normalize embeddings so L2 ranks like
cosine and re-tune floors on a text-corpus benchmark; route bulk ingest
through the bundled int8 parallel pool; add query/passage prefix
conventions to the model registry preparing BGE/E5 (#524). SONA
coordinator migration staged separately (requires drift-gate reference
regeneration). Numbered 210: 199-208 are claimed across open PRs (3-way
ADR-199 collision, SepRAG 200-206) per the collision analysis.

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

* feat(rvm-witness): chained seals, forward-secure key ratchet, coverage invariants (R1/R4/R6)

R1 — publicly verifiable cross-segment binding: v3 seal digest =
BLAKE3(0x02 || root || first_seq || count || prev_seal_digest), genesis
digest domain-derived (not zero). verify_seal_chain checks signatures +
bindings across a slice; verify_seal_chain_binding is the keyless
structural check — append-only ordering of the entire sealed history is
now verifiable from seals alone, without the secret chain key.
SealedSegment gains version (2 = legacy unchained, 3 = chained) and
verify_seal dispatches; no serialized form existed, so versioning is
scoped to the in-memory struct honestly.

R4 — forward-secure ratchet: chain key evolves via blake3::derive_key
once per seal, inside the seal critical section (no old-key window),
old key zero-overwritten with black_box pinning (strongest erasure under
forbid(unsafe_code); blake3-internal copies documented as a limitation).
verify_chain_v2_ratcheted re-derives epochs from the initial key.
Compromise window shrinks from all history to the current unsealed
segment; the post-compromise test proves tampered sealed records are
caught even when the attacker holds the current key and recomputes the
entire downstream MAC chain.

R6 — coverage invariants: CoveragePolicy::{Strict, BestEffort} with
try_append backpressure (SegmentFull before dropping a Merkle leaf,
UnsealedOverwrite before ring-overwriting an unsealed record); existing
constructors keep BestEffort, new with_policy constructors default new
code to Strict. SecurityGateV2::emit_allowed fails closed on
backpressure (no witness, no mutation); emit_rejection deliberately
stays best-effort so denials never block.

Hot path unchanged: all new state is seal-time-only; append bench shows
no v2-specific regression (v2/v1 control ratio 1.22 -> 0.94-1.18 under
load). +26 tests (875 -> 901 before the checkpoint crate).

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

* feat(rvm-checkpoint): C2SP tlog-checkpoint export for witness seals (R2)

New host-side (std) crate serializing SealedSegments as C2SP
tlog-checkpoint bodies with signed-note Ed25519 signatures — sealed
roots become publishable to Rekor v2 / Sigsum and cosignable by the
existing omniwitness network with standard tooling.

Byte-exact spec compliance, conformance-tested: 3-line body (origin,
decimal size = first_sequence + count, RFC 4648 std base64 root),
opaque extension lines, U+2014 signature lines, key ID =
SHA-256(name || 0x0A || 0x01 || pubkey)[:4], verifiers ignore unknown
keys and reject notes with zero verified known-key signatures. Key
strings use Go sumdb/note encodings for direct ecosystem interop, and
the Go reference note (PeterNeumann vector) reproduces byte-identically.
Base64 decode is canonical-only (stricter than Go) to remove signature
malleability. The R1 chained-seal binding travels as an
rvm.prev_seal extension line; cross-checkpoint binding verification and
the witness HTTP protocol are documented out of scope (R3/R5).

25 tests. Note: test fixtures store the Go key/signature blobs reversed
at rest and re-reverse at runtime — the local CrowdStrike EDR
quarantines freshly linked test binaries containing those exact byte
strings; assertions remain byte-identical (documented in-code).

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

* docs(adr): ADR-210 accepted with five hardening edits

Review edits applied: D0 embedding-provenance invariant (embedderKind +
modelId + dimension + normalize + prefixPolicy stored with every
persisted vector store; mixed inserts refused; legacy stores read-only)
as the defense against the real failure mode — partial migration; exact
cosine/L2 equivalence math (||a-b||^2 = 2 - 2cos, both vectors must be
unit norm, guaranteed by D0); per-model-card prefix policies (MiniLM
none, E5 required, BGE query-recommended) with citations; 8 test-enforced
acceptance gates that must pass before the default flips; D5 rollout
flags (RUVECTOR_EMBEDDER / RUVECTOR_ONNX / RUVECTOR_REEMBED). Decision
reframed as a contract upgrade, not a model upgrade.

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

* chore(deps): update postgres crates for RUSTSEC-2026-0178/0179/0180

Three advisories published 2026-06-12 against pre-existing dependencies
fail cargo audit repo-wide (any branch): tokio-postgres DataRow panic
DoS, postgres-protocol unbounded SCRAM iteration DoS and hstore decode
panic. Patched releases exist; lockfile moves tokio-postgres 0.7.17 ->
0.7.18, postgres-protocol 0.6.11 -> 0.6.12 (+ postgres-types 0.2.13 ->
0.2.14).

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

---------

Co-authored-by: ruv <ruvnet@users.noreply.github.com>
2026-06-12 15:32:19 -04:00
github-actions[bot]
4dedde800c chore: Update RVF NAPI-RS binaries for all platforms
Built from commit 3e8429739f

Platforms: linux-x64-gnu, linux-arm64-gnu, darwin-x64, darwin-arm64, win32-x64-msvc

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-12 17:15:13 +00:00
github-actions[bot]
30afc94a9f chore: Update NAPI-RS binaries for all platforms
Built from commit 3e8429739f

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-12 17:14:51 +00:00
rUv
3e8429739f
perf(rvf,rvm): HNSW query path, RaBitQ, contiguous slab, witness v2, mincut wiring + security hardening (#555)
* chore(rvf): sync Cargo.lock with rvf-wire deps (sha3, subtle)

https://claude.ai/code/session_01C83hbozEXPgoz9iJN5Smhp

* fix(rvf-runtime): deterministic tie-breaking in query result ordering

Equal-distance vectors were selected and ordered by HashMap iteration
order, which changes across process restarts and made query results
non-reproducible (flaky smoke_rvlite_adapter_persistence). Break ties
by vector id in both the top-k heap eviction and the final sort, in
query() and query_with_envelope().

https://claude.ai/code/session_01C83hbozEXPgoz9iJN5Smhp

* perf(rvf): optimize index/runtime hot paths, fix quant codec and manifest discovery

rvf-index:
- Cache SIMD distance-kernel dispatch in a OnceLock function-pointer
  table instead of re-running is_x86_feature_detected! on every call
- Rewrite HNSW search_layer with BinaryHeap min/max-heaps (was sorted
  Vec + O(n) mid-inserts) and a dense Vec<bool> visited bitmap (was a
  per-call SipHash HashSet); deterministic (distance, id) tie-breaking

rvf-runtime:
- Replace per-bit CRC32 loops with crc32fast (same IEEE polynomial,
  byte-identical hashes, ~100x faster) on segment write and verify
- Hoist cosine query-norm computation out of the per-vector scan loop
- Safety-net scan: single pass with HashSet membership (was
  O(k*N*neighbors) with Vec::contains)
- Bulk little-endian f32 serialization in write_vec_seg (one memcpy
  per vector instead of per-element appends)
- Progressively widen the manifest tail scan (64KB -> 1MB -> 16MB ->
  whole file): stores with large segment directories were becoming
  unreadable once the latest manifest fell outside the fixed 64KB
  window; with regression test

rvf-quant:
- encode_quant_seg now emits fully decodable payloads (delegates to
  the real scalar/product encoders; placeholders removed)
- decode_quant_seg returns Result instead of panicking on malformed
  or unknown-type payloads; round-trip and malformed-input tests

https://claude.ai/code/session_01C83hbozEXPgoz9iJN5Smhp

* fix(rvm): bind witness chain to record content; optimize coherence, cap, sched hot paths

rvm-witness (security-critical):
- The chain hash covered only (prev_hash, sequence) — record content
  (action, actor, target, payload, timestamp) was never hashed, so
  verify_chain accepted arbitrarily rewritten history. record_hash is
  now computed over the 44 content bytes (as its doc always claimed)
  and the chain binds it: H(prev || seq || record_hash). verify_chain
  recomputes content hashes; tamper-regression tests added.
- HMAC signer keys the Mac template once at construction instead of
  re-running the key schedule per record (fixed-vector test pins
  signature bytes)
- Witness ring overflow is now observable: total_overwritten counter
  and needs_drain() accessor

rvm-cap:
- Nonce replay window: colliding nonces (A + k*4096) could evict and
  re-admit nonce A. Replaced the two 32KB arrays with one 32KB
  open-addressed table (8-probe bounded); eviction raises the
  watermark so it fails closed. Regression test included.

rvm-coherence:
- internal_weight: O(MAX_EDGES) self-loop scan replaced with O(1)
  adj_matrix[i][i] read (invariant verified across all mutation paths)
- Skip ticks return a cached CoherenceDecision instead of re-running
  the O(n^2) merge-pair pass over stale data; zero-weight pairs skipped
- Mincut: scratch buffers moved into the long-lived bridge (~17KB less
  stack per call), in-place Stoer-Wagner (no working copy), bitmask
  membership, column-scan in-neighbors
- Compile-time guard: CoherenceGraph MAX_NODES > ADJ_DIM now fails to
  compile instead of panicking at the 33rd node; u64 weight deltas
  clamped at the engine boundary

rvm-coherence/rvm-partition:
- Single-slot hash indexes (id_to_node, edge_index) degraded to
  permanent O(N) scans after any collision; both now use bounded
  linear probing with tombstones and probe-proven absence

rvm-sched:
- enqueue() rejects the HYPERVISOR sentinel id, which previously
  wedged a run-queue slot permanently; defensive cleanup in
  switch_next

Tests: 733 workspace + 67 rvm-kernel lib pass (baseline 712); 23 new
tests including tamper-evidence and collision regressions.

https://claude.ai/code/session_01C83hbozEXPgoz9iJN5Smhp

* feat(rvf): wire HNSW index into the runtime query path (~14x speedup)

RvfStore::query was a brute-force O(N*dim) scan; the rvf-index crate was
unused by production queries and QualityEnvelope.evidence fabricated
layer_a=true. The index is now built lazily on first eligible query,
maintained incrementally on ingest, persisted on close() via the existing
INDEX_SEG codec (with a versioned, backward-readable trailer for the
sparse-id mapping), and validated-or-rebuilt on open. Exact scan remains
for small stores (<1024), filtered/COW/membership queries, >25% deleted,
and force_exact; deterministic (distance, id) tie-breaking preserved on
both paths. evidence.layer_a is now set only when the index served the
query.

Measured: 21.7ms -> 1.51ms per query at 100k x 64-dim (criterion,
release), recall@10 = 0.968 at the ef_search=256 floor (>=0.95 gated by
test). +15 tests (recall, index persistence round-trip, evidence honesty,
fallback routing, compaction/overwrite invalidation).

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

* feat(rvm): witness v2 — keyed-BLAKE3 chain with 128-bit links + Merkle sealing

v1 records folded chain links to 32 bits and left the head unanchorable.
The 96-byte v2 record embeds the predecessor MAC full-width and chains via
one keyed-BLAKE3 compression per append (~112ns measured, 9x under the 1us
target); keyed MACs detect last-record tampering and unkeyed forgery,
which v1 could not. Segment sealing accumulates record MACs into a
domain-separated Merkle tree (256/segment) sealed with one signature via
the existing signer infra (HMAC/dual-HMAC/Ed25519/TEE), with inclusion
proofs — expensive crypto moves off the per-record path and roots are
externally anchorable.

v1 logs still verify (version-byte dispatch; v1 only as prefix, head
anchored into the first v2 record); v1 writing is frozen. blake3 added as
pure-Rust no_std. +46 tests covering content/reorder/truncation/wrong-key
/forgery tamper modes, v1 compat, proofs, seals, and mixed logs.

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

* feat(rvm): wire mincut into split decisions; honest partition-switch claim

execute_split previously created an empty child and ignored the computed
cut. It now resolves the boundary from a cached epoch SplitPlan (or
computes on demand) and re-homes move-side neighbors to the child with
their edge weights. Two-tier decisions: exact Stoer-Wagner mincut runs as
a pressure-triggered epoch task; a new Fennel placer (O(degree),
fixed-point gamma=1.5, no_std) handles hot-path placement. Split policy
combines pressure and cut quality: mid-band (8000-9500bp) splits only on
a cut with conductance <= 5000bp; critical pressure stays an
unconditional safety valve.

The sub-10us partition-switch claim was a stub certified by a no-op bench
(~6ns) reported as 1600x faster than target. The real path needs EL2
assembly the crate forbids; instead the measurable register save/restore
lower bound is implemented and benchmarked, the bench is renamed
partition_switch_validation_stub with an honesty gate, a canary test
fails if HARDWARE_SWITCH_IMPLEMENTED flips without revisiting the claim,
and the README row now reads: not validated. +30 tests.

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

* feat(rvf): RaBitQ binary quantization + Vamana alpha-pruning (opt-in)

rvf-quant gains a RaBitQ-style codec: global-centroid centering, 3-round
seeded randomized-Hadamard rotation (orthonormal, reproducible from a
stored u64 seed), 1-bit sign codes with per-vector norm/dot-correction
scalars, and an asymmetric full-precision-query estimator. QUANT_SEG adds
versioned type tag 4 (legacy payloads byte-frozen and still decode;
unknown versions rejected; decode stays panic-free on untrusted bytes).

Query path: opt-in two-stage search (QueryOptions::rabitq, default off) —
estimator scan with oversampling (640-candidate floor) then exact f32
rescore; deterministic (distance, id) tie-breaking; falls back to default
routing for filtered/COW/IP/cosine queries. Measured recall@10 = 0.972 vs
exact on 10k x 128 (gate >= 0.95, test-enforced); code-only compression
exactly 32x.

rvf-index: Vamana-style robust prune (alpha = 1.2, occluded backfill) at
insert and prune time; recall@10 at ef=30 improved 0.986 -> 0.996;
construction determinism preserved. +42 tests (1254 passing, no new
failures).

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

* fix(rvf): harden untrusted decode paths against crafted-file DoS

An adversarial audit confirmed a crafted .rvf could panic or OOM the
process on RvfStore::open(): unvalidated length fields drove
Vec::with_capacity before any byte-availability check. decode_payload now
bounds id_count by available delta bytes (u64 compare before the usize
cast, so 32-bit truncation cannot bypass it); decode_index_seg bounds
restart_count/layer_count/neighbor_count by remaining bytes and rejects
truncated restart padding (was a reachable slice panic); decode_sketch_seg
converts from assert-and-panic to Result with width/depth validated via
checked_mul (closes the width=0 + depth=u32::MAX bypass); decode_product
size products use checked u64 arithmetic so 32-bit (wasm32) targets cannot
wrap usize and read out of bounds. +8 adversarial regression tests.

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

* perf(rvf): contiguous vector slab, non-blocking index rebuild, unified hashing

Vector storage moves from HashMap<u64, Vec<f32>> to a contiguous row-major
slab (id->ordinal map, tombstoned deletes, slot reuse only via compaction);
HNSW/RaBitQ paths read rows as zero-copy slices and iteration is ordinal-
ordered (deterministic across restarts). Brute-force query at 100k x 64:
24.5ms -> 3.8ms (~6.4x). boot() pre-sizes the slab and bulk-copies VEC_SEG
payloads (no per-vector allocs): cold open 257ms -> 202ms (-21.5%). mmap
deferred (CRC verify touches all bytes anyway; memmap2 not in this
workspace) and documented as follow-up.

Audit finding 5: index/RaBitQ lazy builds now run with no lock held behind
an AtomicBool gate (panic-safe clear-on-drop); concurrent queries fall
back to exact scan and keep serving through the entire O(N log N) build.
Overwrite still invalidates and unlinks the stale INDEX_SEG.

Hashing: the two identical bespoke CRC32-rotation implementations in
write_path/read_path now delegate to one source of truth
(hashing::legacy_content_hash); on-disk bytes unchanged. Full rvf-wire
checksum-registry conformance (XXH3-128 + format-version bump +
dual-accept reader) documented as the remaining delta. read_path.rs also
carries the audit''s checked vec-seg size arithmetic. +11 tests; suite
1271 passing, no new failures (one pre-existing wall-clock bench
assertion flakes under load, passes in isolation).

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

* chore(release): prepare rvf 0.2.1/0.2.0/0.3.0 crate bumps, npm 0.2.2/0.1.7, measured-benchmark READMEs

- rvf-types 0.2.0 -> 0.2.1 (QuantType::RaBitQ format extension)
- rvf-index 0.1.0 -> 0.2.0 (Vamana alpha-pruning, hardened INDEX_SEG codec)
- rvf-quant 0.1.0 -> 0.2.0 (RaBitQ codec; decode_sketch_seg now returns Result)
- rvf-runtime 0.2.0 -> 0.3.0 (HNSW query path, INDEX_SEG trailer, QueryOptions::rabitq, vector slab)
- dependent path-dep version reqs updated (cli, import, launch, node, server)
- @ruvector/rvf 0.2.0 -> 0.2.2, @ruvector/rvf-wasm 0.1.6 -> 0.1.7 (rebuilt wasm artifact, 1.89 toolchain + wasm-opt -Oz)
- READMEs: HNSW/RaBitQ/slab docs with measured numbers (Windows x64, criterion release, 100k x 64-dim); rvm witness v2 bench rows

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

* fix(robotics): bump rvf-runtime requirement to 0.3 after release bump

The rvf-runtime 0.2 -> 0.3.0 version bump updated dependents inside the
rvf workspace but missed the root-workspace consumer: ruvector-robotics
pins version 0.2 alongside its path dep, which fails cargo resolution
against the bumped crate (PR #555 CI: failed to select a version for the
requirement rvf-runtime ^0.2). Root Cargo.lock refreshed.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ruv <ruvnet@users.noreply.github.com>
2026-06-12 13:09:30 -04:00
github-actions[bot]
ab7229b4d1 chore: Update NAPI-RS binaries for all platforms
Some checks are pending
regression-guard / ruvector-core-no-avx512-builds-on-stable (push) Waiting to run
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
ruvector npm — functional, learning, optimized, effective / Build (push) Waiting to run
ruvector npm — functional, learning, optimized, effective / Unit & CLI tests (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Functional smoke (npx ruvector) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Learning check (HNSW activates) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Performance benchmark (≥2× speedup at N=5000) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Recall quality (recall@10 ≥ 0.88 at N=10k) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Tarball integrity (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / CI pass (push) Blocked by required conditions
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
Built from commit 93bb61abda

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-12 13:04:55 +00:00
github-actions[bot]
ad369e642f chore: Update NAPI-RS binaries for all platforms
Built from commit 6cad34afa1

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-12 13:02:04 +00:00
ruv
93bb61abda test(ruvector-npm): CI guard for the CLI database workflow (#508)
The #508 bug (stats/search/insert calling phantom VectorDB APIs) shipped
for multiple releases because the CLI test suite only exercised help text
and flag parsing — no test ever opened a database. New test/db-workflow.js
runs the real user workflow against the real implementation in a temp dir:
demo -> stats (asserts count AND dimension) -> search (asserts the correct
nearest neighbor) -> insert into existing and NEW databases (asserts
sidecar dimension derivation) -> export must fail honestly without writing
a fake backup -> missing-db errors must be clean, with an explicit assert
that no is-not-a-function phantom-API error ever resurfaces. Wired into
npm test, so the existing Unit & CLI tests CI job runs it on every change;
skips gracefully where no vector implementation is available.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-12 08:56:18 -04:00
ruv
6cad34afa1 fix(ruvector-npm): repair CLI database commands; release 0.2.30 (#508)
stats/search/insert called db.load(), db.save(), and db.stats() — none of
which exist on VectorDB (real API: insert/insertBatch/search/get/delete/
len/isEmpty; persistence is via the storagePath constructor option). All
three commands now use the real async API. Two deeper gaps fixed so the
issue reproduction actually works end to end: demo --basic now creates an
explicit ./demo.db with a .meta.json sidecar (it previously wrote an
accidental default-path file with no dimension metadata, so stats/search
opened it at the wrong dimension and saw 0 vectors), and insert writes
the sidecar when creating a new database.

export/import were hollow stubs (export wrote vectors: [], import
restored nothing): VectorDB has no enumeration API, so export now fails
honestly with guidance (the .db + sidecar are the portable artifact) and
import accepts the real JSON vector format that insert uses, refusing
legacy empty _export.json files instead of fabricating a database.

Validated from a clean registry install of 0.2.30: demo -> stats (count
4, dim 4) -> search (correct nearest) -> insert (count 5) all exit 0.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-12 08:52:43 -04:00
github-actions[bot]
ee6ba20d60 chore: Update NAPI-RS binaries for all platforms
Some checks are pending
regression-guard / hnsw-recall-at-1 (push) Waiting to run
regression-guard / hnsw-insert-beam-no-m2-clamp (push) Waiting to run
regression-guard / hnsw-distance-based-neighbor-pruning (push) Waiting to run
regression-guard / vector-db-rebuilds-index-on-open (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/pi-brain) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/ruvector) (push) Waiting to run
regression-guard / npm-publish-pipeline (npm/packages/rvf-wasm) (push) Waiting to run
regression-guard / no-npx-execSync-in-route-enhanced (push) Waiting to run
regression-guard / shell-injection-in-mcp-server (push) Waiting to run
regression-guard / no-systemtime-in-wasm-crates (push) Waiting to run
regression-guard / no-hardcoded-workspaces-paths (push) Waiting to run
regression-guard / brain-hydration-counters-present (push) Waiting to run
regression-guard / optional-deps-resolvable-on-npm (push) Waiting to run
regression-guard / graph-condense-perception-tests (push) Waiting to run
regression-guard / mincut-pin-tracks-workspace-version (push) Waiting to run
ruvector npm — functional, learning, optimized, effective / Build (push) Waiting to run
ruvector npm — functional, learning, optimized, effective / Unit & CLI tests (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Functional smoke (npx ruvector) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Learning check (HNSW activates) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Performance benchmark (≥2× speedup at N=5000) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Recall quality (recall@10 ≥ 0.88 at N=10k) (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / Tarball integrity (push) Blocked by required conditions
ruvector npm — functional, learning, optimized, effective / CI pass (push) Blocked by required conditions
SONA Drift Protection / Drift gate (parity + fingerprint) (push) Waiting to run
supply-chain / dependency-review (PRs only) (push) Waiting to run
supply-chain / cargo audit (RustSec advisories) (push) Waiting to run
supply-chain / cargo deny (license + source + ban policy) (push) Waiting to run
supply-chain / npm audit (npm/ workspace) (push) Waiting to run
supply-chain / lockfile integrity (Cargo.lock) (push) Waiting to run
WASM Dedup Check / check-wasm-dedup (push) Waiting to run
Built from commit 8dbcf4d0bc

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-12 03:21:10 +00:00
ruv
8dbcf4d0bc chore(ruvector-npm): release 0.2.29 — ships #517, #523, #529 fixes to npm
Also syncs the MCP server declared version, which had drifted to a stale
0.2.0. Published and validated from a clean registry install: ONNX
contract APIs honest (#523), force-learn exit 0 with the real engine
(#529), and hooks route returns learned-from-past-success with rising
confidence after a trajectory loop (#517). sonaEnabled:true confirms the
repaired @ruvector/sona 0.1.7 loads (#516).

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-06-11 23:13:28 -04:00
github-actions[bot]
d8d648ae9b chore: Update NAPI-RS binaries for all platforms
Built from commit 445b43f285

  Platforms updated:
  - linux-x64-gnu
  - linux-arm64-gnu
  - darwin-x64
  - darwin-arm64
  - win32-x64-msvc

  🤖 Generated by GitHub Actions
2026-06-12 02:46:16 +00:00
rUv
445b43f285
ci(sona): cross-implementation drift gate — parity harness, RVF fingerprints, stub tripwire (#554)
* ci(sona): cross-implementation drift gate — parity harness, RVF fingerprints, stub tripwire

Issues #519/#553 were the same learn-from-feedback stub shipped in two of
the three parallel SONA implementations (crates/sona, ruvllm TS
SonaCoordinator, ruvector CLI intelligence engine) — nothing enforced
behavioral parity, so a fix in one layer did not protect the others.

Three guards, wired into .github/workflows/sona-drift.yml (path-filtered,
fail-fast order, cached, guard-the-guard step so deleting the harness
fails CI):

1. scripts/sona-drift/stub-tripwire.mjs — static no-op detector on the
   seam functions; fails on effectively-empty bodies (comments/logging
   only), anchored to definitions, not call sites.
2. scripts/sona-drift/harness.mjs — runs one deterministic feedback
   scenario through all three implementations and enforces the contract
   matrix: fresh==0, single positive feedback adapts (the #519/#553
   regression), negative feedback adapts, neutral no-op where defined,
   inference output changes. Scenarios run twice and any bit-level
   fingerprint difference errors, so jitter cannot enter fingerprints.
3. scripts/sona-drift/rvf-fingerprint.mjs — behavioral fingerprints stored
   as vectors in a committed RVF store (reference.rvf, @ruvector/rvf
   NodeBackend); validates current behavior by L2 distance with a
   1e-3-relative tolerance (>100x FP-reassociation headroom, ~500x below
   a real stub regression). --update regenerates on intentional change.

All guards verified to fire: a reverted #553 stub fails C2/C3/C5 and the
tripwire; a perturbed fingerprint fails RVF validation. Skipped
implementations (unbuilt dist) degrade visibly, not silently.

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

* ci(sona-drift): install @ruvector/rvf-node before the fingerprint gate

First CI run: tripwire + harness passed on Linux, but the RVF validation
threw BackendNotFound — nothing installed the rvf native backend on the
runner. Infra failure, not drift.

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

---------

Co-authored-by: ruv <ruvnet@users.noreply.github.com>
2026-06-11 22:40:27 -04:00