Commit graph

2341 commits

Author SHA1 Message Date
ruvnet
757f4fa226 feat(examples): connectome-fly SOTA example + ADR-154
- ADR-154: embodied connectome runtime on RuVector (graph-native,
  structural coherence analysis, counterfactual cuts, auditable).
  Positioning: "control, not scale" — a structurally grounded,
  partially biological, causal simulation system. Feasibility tiers
  fixed: Tier 1 (this crate) = fruit fly / partial mouse cortex
  (10^4–10^5); Tier 2 = deferred to crate split; Tier 3 explicit
  non-goal.

- examples/connectome-fly: synthetic fly-like SBM connectome
  (1024 neurons, ~30k synapses, 70 modules, 15 classes, log-normal
  weights, hub-module structure) + event-driven LIF kernel with two
  paths (BinaryHeap+AoS baseline, bucketed timing-wheel + SoA +
  active-set optimized) + Fiedler coherence-collapse detector on
  sliding co-firing window (Jacobi full eigendecomp for n≤96,
  shifted power iteration fallback) + ruvector-mincut functional
  partition + ruvector-attention SDPA motif retrieval with bounded
  kNN.

- Acceptance criteria (ADR-154 §3.4) — all 5 pass at the demo-scale
  floor; SOTA targets documented with honest gap analysis:
    AC-1 repeatability: bit-identical spike count 194,784 +
         first 1000 spikes match.
    AC-2 motif emergence: precision@5 proxy = 0.600 (SOTA 0.80).
    AC-3 partition alignment: class_hist L1 = 1.545; mincut ARI ≈ 0
         vs greedy baseline 0.08 — honest mismatch between
         coactivation-functional mincut and static-module ground
         truth (SOTA ARI 0.75 is for the production static path).
    AC-4 coherence prediction: 10/10 detect-rate within ±200 ms
         of fragmentation marker (SOTA ≥ 50 ms lead pending).
    AC-5 causal perturbation: z_cut = 5.55, z_rand = 1.57 —
         targeted-cut effect HITS the SOTA 5σ bound; random-cut
         is 0.57σ above the 1σ bound. Core differentiating claim
         holds at demo scale.

- Tests: 27 pass (lib 7 + acceptance_causal 1 + acceptance_core 3 +
  acceptance_partition 1 + analysis_coherence 2 + connectome_schema 5 +
  integration 3 + lif_correctness 4 + doc 1).

- Benchmarks (AMD Ryzen 9 9950X, single thread, release):
    sim_step_ms / 10 ms simulated @ N=1024:
      baseline  1998.6 µs (±17.1)
      optimized  511.6 µs (±2.1)     → 3.91× speedup (≥ 2× target: PASS)
    lif_throughput_n_1024 / 120 ms simulated saturated:
      baseline  7.49 s, optimized 7.39 s → 1.01× (active-set collapses
      in saturated regime; documented in BENCHMARK.md §4.4).
    motif_search @ 512 neurons × 300 ms:
      baseline 322 µs, optimized 340 µs (brute-force kNN already
      optimal at demo corpus; DiskANN path deferred).

- BENCHMARK.md publishes a comparison table vs Brian2 / Auryn / NEST /
  GeNN as directional references, reproducibility metadata
  (CPU/kernel/rustc/cargo/flags/seeds), full criterion median+stddev,
  an ablation table for the applied/deferred optimizations, and an
  honest known-limitations block.

- Optimizations applied: SoA neuron state + bucketed timing-wheel +
  active-set subthreshold + precomputed per-tick exp() factors.
  Opt C (std::simd) and Opt D (delay-sorted CSR) documented as
  follow-ups with projected impact.

- File-size discipline: every source file < 500 lines (largest:
  lif/engine.rs at 348). Source LOC: 2772; tests 816; benches 213.

- Rust only. No MuJoCo / NeuroMechFly bindings. No consciousness /
  upload / digital-person language. No modifications to existing
  crates — only the workspace Cargo.toml members list is extended
  to include the new example.

Do NOT push.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-21 23:27:11 -04:00
ruvnet
92429a82a5 research(connectome): initial 8-doc deep-dive on RuVector as embodied connectome substrate
Coordinator master plan plus 7 specialist writeups covering 4-layer
architecture, FlyWire ingest / graph schema, event-driven Rust LIF
kernel, NeuroMechFly + MuJoCo embodiment bridge, live analysis layer
(mincut / sparsifier / spectral coherence / DiskANN trajectories /
counterfactual surgery), prior-art differentiation, and positioning
rubric; closes with a phased implementation plan with go/no-go gates.
Framing binding: graph-native embodied connectome runtime, not upload
or consciousness.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-21 20:36:29 -04:00
github-actions[bot]
b08085d91d chore: Update attention NAPI-RS binaries for all platforms
Some checks failed
Build GNN Native Modules / Build GNN darwin-arm64 (push) Has been cancelled
Build GNN Native Modules / Build GNN darwin-x64 (push) Has been cancelled
Build GNN Native Modules / Build GNN linux-arm64-gnu (push) Has been cancelled
Build GNN Native Modules / Build GNN linux-arm64-musl (push) Has been cancelled
Build GNN Native Modules / Build GNN linux-x64-gnu (push) Has been cancelled
Build GNN Native Modules / Build GNN linux-x64-musl (push) Has been cancelled
Build GNN Native Modules / Build GNN win32-x64-msvc (push) Has been cancelled
Build Native Modules / Build darwin-arm64 (push) Has been cancelled
Build Native Modules / Build linux-arm64-gnu (push) Has been cancelled
Build Native Modules / Build darwin-x64 (push) Has been cancelled
Build Native Modules / Build win32-x64-msvc (push) Has been cancelled
Build Native Modules / Build linux-x64-gnu (push) Has been cancelled
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
Workspace CI / Rustfmt (push) Has been cancelled
Workspace CI / Cargo check (push) Has been cancelled
Workspace CI / Clippy (push) Has been cancelled
Workspace CI / Tests (push) Has been cancelled
Workspace CI / Security audit (push) Has been cancelled
WASM Dedup Check / check-wasm-dedup (push) Has been cancelled
Benchmarks / Compare with Baseline (push) Has been cancelled
Build Attention Native Modules / Commit Built Binaries (push) Has been cancelled
Build Attention Native Modules / Publish Attention Platform Packages (push) Has been cancelled
Build GNN Native Modules / Commit Built GNN Binaries (push) Has been cancelled
Build GNN Native Modules / Publish GNN Platform Packages (push) Has been cancelled
Build Native Modules / Commit Built Binaries (push) Has been cancelled
Build RVF Node Native Modules / Commit RVF Node Binaries (push) Has been cancelled
Built from commit c82183f859

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

  🤖 Generated by GitHub Actions
2026-04-21 20:45:57 +00:00
github-actions[bot]
e86d3e17e1 chore: Update NAPI-RS binaries for all platforms
Built from commit c82183f859

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

  🤖 Generated by GitHub Actions
2026-04-21 20:44:54 +00:00
github-actions[bot]
349f7f9757 chore: Update GNN NAPI-RS binaries for all platforms
Built from commit c82183f859

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

Generated by GitHub Actions
2026-04-21 20:43:23 +00:00
github-actions[bot]
5324d17d02 chore: Update RVF NAPI-RS binaries for all platforms
Built from commit c82183f859

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

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-21 20:31:20 +00:00
github-actions[bot]
c82183f859 chore: Update NAPI-RS binaries for all platforms
Built from commit bf727c68b6

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

  🤖 Generated by GitHub Actions
2026-04-21 14:09:34 +00:00
rUv
bf727c68b6 Merge pull request #366 from ruvnet/feat/ruvector-kalshi
feat(kalshi): ruvector-kalshi + neural-trader-strategies (ADR-151)
2026-04-21 10:04:29 -04:00
ruvnet
19a3ca0cba Merge main into feat/ruvector-kalshi; renumber kalshi ADR 151→153
Main recently merged ADR-151 (Miller-Rabin prime optimizations, PR #358)
and ADR-152 is reserved for Obsidian Brain Plugin (ADR-SYS-152), so
renumber the kalshi integration ADR to 153 to avoid collision.

- Rename docs/adr/ADR-151-kalshi-neural-trader-integration.md →
  docs/adr/ADR-153-kalshi-neural-trader-integration.md
- Update 5 references: workspace Cargo.toml comment, the two kalshi
  crate descriptions, the lib.rs doc-comment, and the ADR title line.
- Resolve .gitignore: keep both trailing additions (.kalshi + bench_data/).

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-21 10:03:23 -04:00
ruvnet
3c24715348 feat(kalshi): three live example runners + brain wired into paper_trade
New cargo examples under crates/ruvector-kalshi/examples/:

- list_markets.rs
  Authenticated GET /markets against the live API. Tested against
  api.elections.kalshi.com — returned 100 real markets (sports parlays,
  cross-category bundles), proving the REST + sig path end-to-end.

- stream_orderbook.rs
  Live WebSocket consumer. Uses ws_client::reconnect_forever +
  FeedDecoder and prints canonical MarketEvents. Configurable via
  argv tickers, KALSHI_MAX_EVENTS (default 50), KALSHI_WS_URL.

- live_trade.rs
  Full live execution runner: WS -> FeedDecoder -> Strategy ->
  CoherenceChecker -> RiskGate -> RestClient::post_order. Triple-
  gated — requires KALSHI_ENABLE_LIVE=1, KALSHI_CONFIRM_LIVE=yes, and
  a non-zero KALSHI_MAX_ORDERS cap before any signed request is
  emitted. Conservative defaults: 0.10 Kelly fraction, 10_000¢
  bankroll, 5% position cap, 2% daily-loss kill, 500 bps min edge.
  Verified to fail-closed without the env flag.

paper_trade.rs:
- Now async (#[tokio::main]) to enable brain I/O in the fill path.
- When BRAIN_ENABLE=1, loads BRAIN_API_KEY from env or gcloud secret
  BRAIN_SYSTEM_KEY and calls BrainClient::share per approved order.
- Run output unchanged: 7 intents / 1 coherence block / 6 approvals /
  6 receipts / 4 replay segments / 3 retrievable.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 17:10:32 -04:00
ruvnet
174d679a34 feat(strategies): real ruvector-attention SDPA imbalance path
AttentionScalper now supports a scaled-dot-product attention path when
AttentionScalperConfig::use_sdpa = true. Levels are encoded as
[size_log, side_sign, depth_idx_norm, 1.0] and fed into
ruvector_attention::ScaledDotProductAttention with a fixed pressure
query. The context vector's sign component becomes the signed
imbalance.

- neural-trader-strategies depends on ruvector-attention (default
  features disabled so it stays portable).
- sdpa_imbalance() guards NaN/empty inputs and returns 0 on error, so a
  misconfigured attention layer cannot corrupt downstream decisions.
- Geometric-decay path remains the default and is unchanged.
- 2 new tests: heavy YES → YES intent, heavy NO → NO intent, both via
  the SDPA path end-to-end.

26 strategy tests pass (was 24). ruvector-kalshi 36 tests pass.
paper_trade example unchanged: 6 fills, 4 replay segments, 6 witness
receipts.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 16:57:49 -04:00
ruvnet
4f9d4ee062 feat(kalshi): wire neural-trader-coherence + neural-trader-replay
neural-trader-strategies:
- Depend on neural-trader-coherence.
- New coherence_bridge module: CoherenceChecker wraps a CoherenceGate
  and returns CoherenceOutcome::{Pass, Block} around an Intent. On gate
  error we fail closed (never authorize actuation). simple_context()
  builds a plausible GateContext from a rolling price window.
- Re-export CoherenceDecision, CoherenceGate, GateConfig, GateContext,
  RegimeLabel, ThresholdGate, CoherenceChecker, CoherenceOutcome.
- 3 new tests (24 total): healthy context passes, low mincut blocks,
  simple_context correctly classifies volatile regime.

ruvector-kalshi:
- Depend on neural-trader-coherence and neural-trader-replay.
- examples/paper_trade.rs rewritten to include coherence pre-check and
  replay storage:
    FeedDecoder → MarketEvent
      → ExpectedValueKelly.on_event
      → CoherenceChecker.check (ThresholdGate tuned for Kalshi depth)
      → RiskGate.evaluate
      → intent_to_order → NewOrder
      → ReservoirStore.maybe_write(ReplaySegment)
      → InMemoryReceiptLog.append_receipt(WitnessReceipt)
  Observed depth is carried across frames so ticker/trade events
  inherit the mincut floor from the last snapshot. CUSUM uses only
  trade/ticker mids, not per-level snapshot prices.
- Run result: 7 intents emitted, 1 coherence-blocked, 6 risk-approved,
  6 witness receipts, 4 replay segments stored and retrievable.

Tests: 60 unit (36 + 24). Live /exchange/status smoke still green.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 16:52:20 -04:00
ruvnet
8503968988 perf(kalshi): Arc-share signer internals; cache REST sig path
Signer:
- api_key now Arc<str>, signing_key now Arc<SigningKey<Sha256>>. Clone
  is O(1) (atomic fetch_add) instead of a 2048-bit RSA deep-copy.
  Measured at 75 ns/iter in release (1M iters) — previously bound by
  RsaPrivateKey::clone which deep-copies BigUint fields.

RestClient:
- base_url + pre-computed base_path stored as Arc<str>; sig_path_for()
  formats against the cached base_path instead of reqwest::Url::parse
  on every request. Measured at 14 ns/iter — the old path was a full
  URL parse + to_string per call.
- RestClient::clone is also O(1) as a consequence.

Benchmark example:
- examples/bench_signing.rs reports clone / sign / sig_path numbers.
  Release numbers on the real Kalshi PEM:
    signer.clone      75.5 ns
    sign_with_ts      0.78 ms (1284 sig/s — RSA-PSS floor)
    sig_path_for      13.9 ns

All 57 unit tests, paper_trade example, and live /exchange/status
smoke test pass on the optimized paths.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 16:33:05 -04:00
ruvnet
c051b56e82 feat(kalshi): live WS, brain integration, coherence/attention strategies, CI
ruvector-kalshi:
- ws_client: tokio-tungstenite + futures-util. connect() signs upgrade
  with RSA-PSS-SHA256; subscribe() sends a typed command; pump_frames()
  routes every text frame through FeedDecoder into an mpsc<MarketEvent>
  channel; reconnect_forever() does exponential backoff up to 30s.
- brain: pi.ruv.io client. SharedMemory::market_resolution builds a
  redacted pattern memory; BrainClient::share POSTs with Bearer auth to
  /v1/memories. Debug never leaks key material.
- URL migration: Kalshi moved from trading-api.kalshi.com to
  api.elections.kalshi.com; defaults updated. GCS secret bumped.
- tests/live_smoke.rs: #[ignore]-gated GET /exchange/status. Verified
  live response: 200 OK, {"exchange_active":true,"trading_active":true}.

neural-trader-strategies:
- coherence_arb: pair-wise price divergence arbitrage. Configure
  (reference, mirror) symbol ids; emit YES buy on mirror when the price
  gap exceeds min_divergence_bps. Quarter-Kelly sizing.
- attention_scalper: multi-level order-book imbalance with geometric
  level decay and EMA smoothing; emits a short YES or NO position when
  the smoothed signal crosses abs_threshold. Deterministic, no ML dep.

CI:
- .github/workflows/kalshi-nightly.yml: unit tests, offline validator,
  paper-trade example, and live /exchange/status smoke under --ignored.

Tests: 57 unit (ruvector-kalshi 36, neural-trader-strategies 21) + 1
live smoke. All green against the real Kalshi endpoint.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 16:29:02 -04:00
ruvnet
a161870e7c feat(kalshi): rate limiter, cancel/amend orders, paper-trade example
ruvector-kalshi additions:
- rate_limit: async token bucket (burst 20, 10/s) gating every REST call
- rest: cancel_order (DELETE) and amend_order (POST); live-flag gated
- strategy_adapter: Intent -> NewOrder conversion (YES/NO price routing)
- examples/paper_trade.rs: end-to-end WS frame -> MarketEvent -> Intent ->
  RiskGate -> NewOrder with paper ledger. Runs offline; validated.
- tests: 31 unit tests (was 23) — added rate-limit + cancel/amend/adapter

neural-trader-strategies:
- re-export ExpectedValueKellyConfig and RejectReason from the root
- 13 unit tests green

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 16:15:48 -04:00
ruvnet
ff0f5bc4fa feat(kalshi): ruvector-kalshi + neural-trader-strategies (ADR-151)
New crate ruvector-kalshi: RSA-PSS-SHA256 signer (PKCS#1/#8), GCS/local/env
secret loader with 5-min cache, typed REST + WS DTOs, Kalshi→MarketEvent
normalizer (reuses neural-trader-core), transport-free FeedDecoder,
reqwest-backed REST client with live-trade env gate, and an offline
sign+verify example that validates against the real PEM.

New crate neural-trader-strategies: venue-agnostic Strategy trait, Intent
type, RiskGate (position cap, daily-loss kill, concentration, min-edge,
live gate, cash check), and ExpectedValueKelly prior-driven strategy.

36 unit tests pass across both crates. End-to-end offline validation
confirmed against the real Kalshi PEM via both local and GCS sources.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 15:25:01 -04:00
github-actions[bot]
3f74d6f272 chore: Update NAPI-RS binaries for all platforms
Built from commit 4641d7a64e

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

  🤖 Generated by GitHub Actions
2026-04-20 18:34:34 +00:00
github-actions[bot]
2183fc8dfc chore: Update NAPI-RS binaries for all platforms
Built from commit 855d8faec4

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

  🤖 Generated by GitHub Actions
2026-04-20 18:33:55 +00:00
github-actions[bot]
ea1801ecc2 chore: Update NAPI-RS binaries for all platforms
Built from commit c01361cba5

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

  🤖 Generated by GitHub Actions
2026-04-20 18:32:52 +00:00
rUv
4641d7a64e fix(esm): add .js extensions to dist module specifiers (#343)
fix(esm): add .js extensions to dist module specifiers for Node.js ESM compatibility
2026-04-20 14:28:59 -04:00
rUv
3de568613d fix(docs): correct ADR cross-references in ADR-006 (#355)
fix(docs): correct ADR cross-references in ADR-006 Related field
2026-04-20 14:28:56 -04:00
rUv
855d8faec4 feat(collections): PIAL Phase 0 — Miller-Rabin primality kernel + prime tables (#358)
feat(collections): PIAL Phase 0 — Miller-Rabin primality kernel + prime tables
2026-04-20 14:28:43 -04:00
rUv
c01361cba5 bench: comprehensive quantization method comparison (8 methods, 3 datasets) (#362)
bench: comprehensive quantization method comparison (8 methods, 3 datasets)
2026-04-20 14:28:10 -04:00
github-actions[bot]
3cd990a416 chore: Update NAPI-RS binaries for all platforms
Built from commit 03f6486413

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

  🤖 Generated by GitHub Actions
2026-04-20 18:24:20 +00:00
github-actions[bot]
6c5b72ceef chore: Update NAPI-RS binaries for all platforms
Built from commit 36a36d69e3

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

  🤖 Generated by GitHub Actions
2026-04-20 18:20:52 +00:00
ruv
03f6486413 chore(npm): patch bump packages for security overrides (#346)
Bump consumer-facing npm packages after adding overrides for
vulnerable transitive deps (node-forge, flatted, picomatch, lodash,
brace-expansion). Thanks @Avi-Bendetsky for the fix.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 14:14:43 -04:00
rUv
36a36d69e3 security: fix vulnerable transitive npm dependencies (#346)
security: fix vulnerable transitive npm dependencies
2026-04-20 14:12:51 -04:00
github-actions[bot]
fb5aa6b811 chore: Update NAPI-RS binaries for all platforms
Built from commit 24d92f2388

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

  🤖 Generated by GitHub Actions
2026-04-20 18:12:05 +00:00
github-actions[bot]
b677c7b1cb chore: Update NAPI-RS binaries for all platforms
Built from commit baf75513d1

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

  🤖 Generated by GitHub Actions
2026-04-20 17:59:49 +00:00
github-actions[bot]
dae62ac0a6 chore: Update GNN NAPI-RS binaries for all platforms
Built from commit baf75513d1

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

Generated by GitHub Actions
2026-04-20 17:58:49 +00:00
ruv
24d92f2388 chore: bump workspace to v2.2.0, sona to v0.2.0
Version bump for new features from #364:
- ruvector-graph: delete_edges_batch, has_edge, get_edges_for_nodes, FloatArray
- ruvector-core: zero-copy insert_batch (impl AsRef)
- ruvector-gnn: ndarray 0.17.2
- ruvector-sona: MicroLoRA set_weights + coordinator persistence

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 13:56:53 -04:00
rUv
baf75513d1 feat: performance batch — delete_edges_batch, zero-copy insert_batch, FloatArray, get_edges_for_nodes, has_edge (#364)
feat: performance batch — delete_edges_batch, zero-copy insert_batch, FloatArray, get_edges_for_nodes, has_edge
2026-04-20 13:54:09 -04:00
ruv
65888ef432 chore(gnn): remove commented-out workspace ndarray line
The workspace pins ndarray 0.16 while ruvector-gnn needs 0.17.2.
Keep the explicit version pin and remove the stale comment to avoid
confusion. Other crates still use workspace ndarray (0.16) safely.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 13:49:31 -04:00
github-actions[bot]
8710ccc1d3 chore: Update NAPI-RS binaries for all platforms
Built from commit 0c28352e5c

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

  🤖 Generated by GitHub Actions
2026-04-20 17:25:10 +00:00
rUv
0c28352e5c feat(brain): DiskANN + AIDefence + geo-spatial brain capabilities (#363)
* feat(brain): DiskANN vector index, AIDefence, content resolution, geo-spatial support

Brain server updates for ruOS v1.1.0:
- DiskANN Vamana graph index (replaces brute-force at 2K+ vectors)
- AIDefence inline security scanning on POST /memories
- Content resolution from blob store on GET /memories/:id and search
- Search dedup by content_hash with over-fetch (k*8, min 40)
- Security scan endpoint: POST /security/scan, GET /security/status
- List pagination with offset parameter and total count
- Spatial memory categories: spatial-geo, spatial-observation, spatial-vitals
- Blob write on create_memory (was missing — content lost)

Validated: 3,954 memories, 100% vectorized, 23ms search, zero drift,
6/6 AIDefence tests, 0 errors over 3 days continuous operation.

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

* fix(brain): resolve merge conflict markers in Cargo.toml and Cargo.lock

Unresolved <<<<<<< / ======= / >>>>>>> markers blocked all CI
(cargo check, clippy, rustfmt, tests, security audit, native builds).

Keep both sides: ruvbrain-sse + ruvbrain-worker bins from upstream
and the new mcp-brain-server-local bin from this branch. Lock file
retains both ruvector-consciousness and rusqlite dependencies.

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

---------

Co-authored-by: ruvnet <ruvnet@gmail.com>
2026-04-20 13:18:21 -04:00
kiki-kanri
fc9c9cd37a feat(ruvector-graph): add has_edge(from, to, edge_type) for O(out_degree) existence check 2026-04-20 17:30:32 +08:00
Michael O'Boyle
a1a04a3570 bench: comprehensive quantization method comparison (8 methods, 3 datasets)
First benchmark comparing all ruvector-core quantization methods against
TurboQuant on standard vector search datasets. 8 configurations, 3 datasets
(GloVe d=200, SIFT d=128, PKM d=384), 3 trials per config with variance.

Key findings:
- Int4 beats TurboQuant MSE on recall at 8x compression (91.2% vs 89.6% R@1)
- QJL correction hurts recall for vector search (9-41% loss)
- PQ with 8 subspaces fails at d=200 (18.2% R@1)
- TurboQuant MSE 3-bit fills unserved 10.7x compression tier (82.0% R@1)
- QuantizedVector::distance() never called during HNSW search

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 21:37:14 -04:00
kiki-kanri
191275b262 chore(ruvector-graph): generalize delete_edges_batch to accept impl AsRef<str>
Matches delete_edge API symmetry. Allows &[String], &[&str], &[Box<str>] etc.
2026-04-19 13:32:17 +08:00
kiki-kanri
e04b780c66 feat(ruvector-graph): add delete_edges_batch for single-transaction edge deletion
GraphDB and GraphStorage: add delete_edges_batch(ids: &[EdgeId]) -> Result<usize>
- Single transaction for all deletes (vs N transactions in sequential delete_edge loop)
- Returns count of edges actually deleted (skips IDs not found)
- Updates edge_type_index and adjacency_index in single pass
- All 17 edge tests pass
2026-04-19 13:27:45 +08:00
kiki-kanri
9e08b74c1a feat(ruvector-graph): add PropertyValue::FloatArray for zero-overhead embedding storage
- Add FloatArray(Vec<f32>) variant to PropertyValue enum
- Add float_array() constructor and From<Vec<f32>> impl
- Update extract_embedding to prefer FloatArray (direct clone, no conversion)
- Fallback to legacy Array(Float/Integer) format for backward compat
- Add test_neo4j_float_array_property and test_float_array_constructor
- property_value_strategy proptest now covers FloatArray
- Remove dead property.rs (shadow PropertyValue with Bool/Int variants)
2026-04-19 13:09:43 +08:00
kiki-kanri
55c3804dbe feat(ruvector-graph): add get_edges_for_nodes with fused callback API
- AdjacencyIndex: add get_edges_for_nodes(node_ids) -> Vec<EdgeId>
- AdjacencyIndex: add for_each_outgoing_edge callback API (eliminates intermediate Vec<EdgeId> allocation for hot paths)
- Graph: get_edges_for_nodes uses for_each_outgoing_edge fused implementation (N string allocs eliminated)
- Add unit tests for both APIs (len=2/1/0/unknown cases)
- Add integration test in edge_tests.rs
2026-04-19 01:17:35 +08:00
kiki-kanri
f16530dc84 feat(ruvector-core): insert_batch accept impl AsRef<[VectorEntry]> for zero-copy borrows
- VectorDB::insert_batch now takes impl AsRef<[VectorEntry]> instead of Vec<VectorEntry>
- Enables zero-copy batch inserts when caller passes &vec reference
- Maintains backward compatibility with owned Vec<T> call sites
- Unblocks P3-26: eliminates clone hack in upsert_vectors.rs
2026-04-18 23:09:38 +08:00
kiki-kanri
2d0ce8bd9a feat(sona): add MicroLoRA set_weights for external persistence
- MicroLoRA::set_weights(down, up) -> Result<(), String> with dimension validation
- LoopCoordinator::get_micro_lora_weights() -> (Vec<f32>, Vec<f32>)
- LoopCoordinator::restore_micro_lora_weights(down, up) -> Result<(), String>
- 6 unit tests covering valid/wrong-dim set and coordinator roundtrip
2026-04-18 22:35:52 +08:00
kiki-kanri
f38a12369a chore(gnn): bump ndarray version 2026-04-18 19:51:30 +08:00
Ofer Shaal
241738c986 docs(adr): ADR-151 + PRD §6 — Phase 0 findings, revised perf targets, Grok review
Phase 0 implementation revealed that the original PRD §6 targets
(50 ns / 200 ns for is_prime_u64 worst case) were structurally
unachievable in safe Rust on Apple-silicon. Apples-to-apples competitor
benchmark in the same binary on the same machine measured num-prime
0.4.4 at 884 ns vs ours at 15.63 µs — ~17.7× headroom recoverable via
Montgomery reduction in Phase 0.1, but not the ~300× the original target
implied. The 50 ns figure was a pre-implementation estimate that did not
survive contact with measured hardware.

ADR-151 (docs/adr/ADR-151-miller-rabin-prime-optimizations.md)
- Status promoted from "Proposed" to "Accepted (Phase 0 landed
  2026-04-16; performance targets revised)".
- New "Phase 0 Findings (2026-04-16)" section documenting what landed,
  measurements vs original targets, num-prime competitor baseline, the
  revised target band, and Phase 0.1 scope (Montgomery only).
- Explicit rejection of swapping to the empirical 7-witness set:
  Sinclair-12 is theorem-proven across all u64; the 7-witness sets in
  the literature are empirically tested up to 2^64 but not proven, and
  swapping invalidates the A014233(11) canary in the pseudoprime test.

PRD §6 (docs/research/miller-rabin-optimizations/PRD.md)
- Revision header noting the relaxation.
- is_prime_u64(p) worst-case row updated to ≤ 1 µs (was 50 ns) M-series
  / ≤ 4 µs (was 200 ns) WASM.
- New §6.1 "Empirical findings (Phase 0)" with the measurement table
  and the num-prime baseline data.

GROK-REVIEW-REQUEST.md (new, 424 lines)
- Self-contained briefing used to obtain external Grok review of the
  Phase 0 design and Phase 0.1 plan: §1 binding context, §2 implementation
  embedded verbatim, §3 measurements + competitor baseline, §4 four-section
  ask (correctness, perf plan ranked, architecture, validation
  methodology), §5 response format. Constraints block forbids
  "just use num-prime" answers and pins the canary witness set.
2026-04-16 14:41:02 -04:00
Ofer Shaal
12bfcefb18 feat(collections): Phase 0 — Miller-Rabin primality kernel + prime tables (PIAL)
Lands the deterministic Sinclair-12 Miller-Rabin u64 kernel and build-time
prime tables under crates/ruvector-collections/, per ADR-151.

Implementation
- src/primality_kernel.rs: shared MR core (mulmod via u128, powmod, witness
  loop, prev/next prime). Single source of truth — include!d from both build.rs
  and src/primality.rs to keep the build script and runtime kernel byte-identical.
- src/primality.rs: public API — is_prime_u32/u64, prev/next_prime_u64,
  prev_prime_below_pow2(k), next_prime_above_pow2(k), ephemeral_prime(seed).
  Probabilistic is_prime_u128 gated behind --feature unstable-u128 with
  Russian-peasant mulmod, mod_add overflow-safe addition, and LCG-seeded
  witness selection.
- build.rs: emits PRIMES_BELOW_2K[57] / PRIMES_ABOVE_2K[57] for k ∈ [8, 64].
  ABOVE[64] is a 0 sentinel (no u64 prime > 2^64); k=64 BELOW special-cases
  via mr_prev_prime_u64(u64::MAX).

Tests (76 pass; cross-check 0.00s)
- tests/primality_pseudoprimes.rs: pinned A014233 strong pseudoprimes
  (entries 4, 5, 11) so any witness-set regression — including dropping
  base-37 — fails loudly. SPP_FIRST_11 = 3_825_123_056_546_413_051 is the
  canary for base-37 detection.
- tests/table_cross_check.rs: re-validates all 114 emitted table entries
  against MR + sweep_odds_strictly_between (iterates the prime gap, not the
  range — so even k=63 finishes instantly).
- Doc tests + 7 inline unit tests including u128 M_89 smoke.

Benches (criterion, M-series)
- is_prime_u64 worst case (u64::MAX − 58): 15.63 µs (3 runs ±2%)
- prev_prime_below_pow2 k=32 shard router: 7.48 ns
- next_prime_u64 ~1e9: 11.44 µs
- next_prime_u64 2^61 − 1 general path: 7.83 µs

Empirical floor finding: re-running with num-prime 0.4.4 in the same binary
on the same hardware measured num_prime::is_prime64(u64::MAX − 58) at 884 ns
vs ours at 15.63 µs — confirming the 50 ns PRD target was structurally
unachievable in safe Rust (~17.7× headroom recoverable via Montgomery in
Phase 0.1, but not 300×). PRD §6 and ADR-151 amended in a follow-up commit.
2026-04-16 14:40:37 -04:00
Ofer Shaal
6c0daaf018 docs(adr): ADR-151 + PRD — Miller-Rabin prime optimizations (PIAL)
Adds the binding ADR and full PRD for the Prime-Indexed Acceleration
Layer (PIAL): a single ~250-LoC Miller-Rabin primality utility in
crates/ruvector-collections that unblocks five independent prime-aware
optimizations across hashing, sharding, sketching, and the pi-brain
witness chain.

Use cases:
  * Shard-router prime modulus  — closes ADR-058 finding #6
  * HNSW prime-bucket adjacency — micro-hnsw-wasm, hyperbolic-hnsw
  * Certified-prime LSH modulus — sparsifier, attn-mincut
  * Witness-chain ephemeral primes — pi-brain brain_share payload
  * Anti-aliasing prime strides — sparsifier sampler

Generation strategy combines a compile-time table of primes near 2^k
(fast path, ~1ns) with a Miller-Rabin descent fallback (~250ns). The
table is generated by build.rs from the MR implementation and
cross-checked against MR in CI, so MR remains the source of truth.

Includes HANDOFF.md with Phase 0 deliverables for the next session.
ADR and PRD pin acceptance criteria, performance targets, and a
six-phase rollout (each phase ships as a separate PR).
2026-04-16 12:34:47 -04:00
Sebastian Ricaldoni
e973346ba5 fix(docs): correct ADR cross-references in ADR-006 Related field
The Related field incorrectly referenced ADR-003 as KV Cache and
ADR-005 as LoRA Adapter Loading. In the actual repo:
- ADR-003 is SIMD Optimization Strategy
- ADR-004 is KV Cache Management (correct target)
- ADR-005 is WASM Runtime Integration (correct name)

No LoRA Adapter Loading ADR exists; ADR-005 (WASM) is the genuine
related decision for memory management concerns.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 13:20:47 -03:00
github-actions[bot]
b02635cd25 chore: Update NAPI-RS binaries for all platforms
Built from commit 358a04f8d2

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

  🤖 Generated by GitHub Actions
2026-04-14 22:20:12 +00:00
Reuven
358a04f8d2 fix(brain): rebuild graph after Firestore hydration completes
Root cause: Firestore hydration runs in background tokio::spawn but
the initial graph rebuild runs synchronously on the EMPTY memory vec
before hydration finishes. Result: 0 nodes/edges until next 6h cron.

Fix: Chain graph rebuild to the hydration task using Arc<RwLock<Graph>>.
After deploy: graph should show 1M+ edges within ~30s of startup.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-14 18:16:00 -04:00