Bridge the gap between "stores knowledge" and "learns from knowledge":
- Background training loop (tokio::spawn, 5 min interval) runs SONA
force_learn + domain evolve_population when new data arrives
- POST /v1/train endpoint for on-demand training cycles
- `ruvector brain train` CLI command with --json support
- `brain_train` MCP tool for agent-triggered training
- Vote dedup: 24h TTL on ip_votes entries, author exemption from IP check
- ADR-082 updated, ADR-083 created
Results: Pareto frontier grew 0→24 after 3 cycles. SONA activates
after 100+ trajectory threshold (natural search/share usage).
Publish ruvector@0.2.11.
* feat: proxy-aware fetch + brain API improvements — publish v0.2.7
Add proxyFetch() wrapper to cli.js and mcp-server.js that detects
HTTPS_PROXY/HTTP_PROXY/ALL_PROXY env vars, uses undici ProxyAgent
(Node 18+) or falls back to curl. Handles NO_PROXY patterns.
Replaced all 17 fetch() call sites with timeouts (15-30s).
Brain server API:
- Search returns similarity scores via ScoredBrainMemory
- List supports pagination (offset/limit), sorting (updated_at/quality/votes), tag filtering
- Transfer response includes warnings, source/target memory counts
- New POST /v1/verify endpoint with 4 verification methods
Co-Authored-By: claude-flow <ruv@ruv.net>
* feat: brain server bug fixes, GET /v1/pages, 9 MCP page/node tools — v0.2.10
Fix proxyFetch curl fallback to capture real HTTP status instead of
hardcoding 200, add 204 guards to brainFetch/fetchBrainEndpoint/MCP
handler, fix brain_list schema (missing offset/sort/tags), fix
brain_sync direction passthrough, add --json to share/vote/delete/sync.
Add GET /v1/pages route with pagination, status filter, sort.
Add 9 MCP tools: brain_page_list/get/create/update/delete,
brain_node_list/get/publish/revoke (previously SSE-only).
Polish: delete --json returns {deleted:true,id} not {}, page get
unwraps .memory wrapper for formatted display.
112 MCP tools, 69/69 tests pass. Published v0.2.10 to npm.
Co-Authored-By: claude-flow <ruv@ruv.net>
Brain commands now use direct pi.ruv.io fetch (PR #233), so
@ruvector/pi-brain is no longer needed as a peer dependency.
Co-Authored-By: claude-flow <ruv@ruv.net>
Replace requirePiBrain() + PiBrainClient with direct fetch() calls to pi.ruv.io.
All 13 brain CLI commands and 11 brain MCP tools now work out of the box with
zero extra dependencies. Includes 30s timeout on all brain API calls.
- Run cargo fmt across entire workspace
- Create README.md files for all 9 EXO-AI crates
- Convert path dependencies to crates.io version dependencies for publishing
- Add [patch.crates-io] to exo workspace for local development
Co-Authored-By: claude-flow <ruv@ruv.net>
Clippy fixes (8 warnings → 0):
- Replace 5 manual Default impls with #[derive(Default)]
- Use .clamp() instead of .min().max() chain
- Use .is_some_and() instead of .map_or(false, ...)
- Add type alias for complex return type in scene_graph_to_adjacency
P0 correctness fixes from code review:
- Fix NaN panic: use unwrap_or(Ordering::Equal) in cognitive_core think()
- Fix integer overflow: use checked_mul in OccupancyGrid::new
- Fix potential unwrap: use map_or in domain_expansion score_avoidance
Co-Authored-By: claude-flow <ruv@ruv.net>
SpatialIndex: replace Vec<Vec<f32>> with flat Vec<f32> buffer for cache
locality and zero per-point heap allocation; use squared Euclidean
distance in kNN/radius search (defer sqrt to final k results); fuse
cosine distance into single loop.
Clustering: add union-by-rank to union-find preventing tree
degeneration (O(α(n)) amortized); add #[inline] on hot helpers.
A* planning: add closed set (HashSet) to avoid re-expanding nodes;
reuse neighbor buffer to eliminate per-expansion Vec allocation;
pre-allocate HashMap capacity; add #[inline] on helpers.
Perception: defer sqrt in bounding_sphere (compare squared distances,
one sqrt at end); defer sqrt in scene graph edge construction (filter
on squared threshold); add #[inline] on dist_3d.
Sensor fusion: pre-allocate merged vectors from total eligible cloud
size. Anomaly detection: fuse distance + statistics into single pass
using Welford's online algorithm (eliminates one full data pass).
All 281 tests pass.
https://claude.ai/code/session_01H1GkTK5z9ppVVQDQukjBsY
New `rvf` feature flag enables the `ruvf::RoboticsRvf` wrapper that
bridges point clouds, scene graphs, trajectories, Gaussian splats, and
obstacles into the RuVector Format (.rvf) for persistence and similarity
search.
RoboticsRvf supports:
- pack_point_cloud (dim 3)
- pack_scene_objects / pack_scene_graph (dim 9)
- pack_trajectory (dim 3)
- pack_gaussians (dim 7) — converts PointCloud→GaussianSplatCloud→RVF
- pack_obstacles (dim 6)
- query_nearest (kNN via HNSW index)
- open/open_readonly/close lifecycle
9 unit tests covering create, ingest, query, reopen, dimension mismatch,
and empty data rejection. Also fixes unused import warnings in integration
tests. All 290 tests pass across default, domain-expansion, and rvf features.
https://claude.ai/code/session_01H1GkTK5z9ppVVQDQukjBsY
- ExoTransferOrchestrator.package_as_rvf(): serializes all TransferPriors,
PolicyKernels, and CostCurves into a 64-byte-aligned RVF byte stream
- ExoTransferOrchestrator.save_rvf(path): convenience write-to-file method
- Enable ruvector-domain-expansion rvf feature in exo-backend-classical
- 3 new RVF tests: empty packager, post-cycle magic verification, save-to-file
- substrate.rs: fill pattern field from returned search vector (r.vector.map(Pattern::new))
- README: document 5-phase transfer pipeline, RVF packaging, updated
architecture diagram, 4 new Key Discoveries, 3 new Practical Applications
All 0 failures across full workspace test suite.
https://claude.ai/code/session_019Lt11HYsW1265X7jB7haoC
- vector.rs: convert exo_core::Filter Equal conditions to ruvector HashMap
filter; store and round-trip _pattern_id in metadata
- substrate.rs: implement BettiNumbers, PersistentHomology, SheafConsistency
for hypergraph_query using VectorDB stats
- anticipation.rs: implement TemporalCycle pre-fetching via sinusoidal
phase encoding
- crdt.rs: add T: Display bound to reconcile_crdt; look up score from
ranking_map by format!("{}", result)
- thermodynamics.rs: rust,ignore → rust,no_run
- ExoTransferOrchestrator: new cross-phase wiring module in
exo-backend-classical that runs all 5 integration phases in a single
run_cycle() call (bridge → manifold → timeline → CRDT → emergence)
- transfer_pipeline_test.rs: 5 end-to-end integration tests covering the
full pipeline (single cycle, multi-cycle, emergence, manifold, CRDT)
All 0 failures across full workspace test suite.
https://claude.ai/code/session_019Lt11HYsW1265X7jB7haoC
New modules for ruvector-robotics:
- bridge/gaussian: GaussianSplat types, PointCloud→Gaussian conversion, vwm-viewer JSON export
- planning: A* pathfinding on OccupancyGrid with octile heuristic, potential field velocity commands
- mcp/executor: ToolExecutor dispatching ToolRequests to perception pipeline and spatial index
- perception/sensor_fusion: multi-sensor cloud fusion with timestamp alignment and voxel downsampling
Rewrites integration tests to use actual crate APIs instead of local reimplementations,
eliminating ~280 lines of false-positive test code. Adds 15 benchmark groups covering
all new modules (Gaussian conversion, A* planning, potential fields, sensor fusion, MCP execution).
All 270+ tests pass including domain-expansion feature.
https://claude.ai/code/session_01H1GkTK5z9ppVVQDQukjBsY
Phase 2 — exo-manifold/src/transfer_store.rs
TransferManifold stores (src, dst) transfer priors as 64-dim deformable
patterns via ManifoldEngine::deform. Sinusoidal domain-ID hashing gives
meaningful cosine distances for retrieve_similar.
Phase 3 — exo-temporal/src/transfer_timeline.rs
TransferTimeline records transfer events in the temporal causal graph.
Each event is linked to its predecessor so the system can trace full
transfer trajectories. anticipate_next() returns CausalChain +
SequentialPattern hints.
Phase 4 — exo-federation/src/transfer_crdt.rs
TransferCrdt propagates transfer priors across the federation using
LWW-Map (cycle = timestamp) + G-Set for domain discovery. Merges are
idempotent and commutative. promote_via_consensus runs PBFT Byzantine
commit before accepting a prior.
Phase 5 — exo-exotic/src/domain_transfer.rs
StrangeLoopDomain implements the Domain trait: self-referential tasks
whose solutions are scored by meta-cognitive keyword density.
CollectiveDomainTransfer couples CollectiveConsciousness with
DomainExpansionEngine — arm rewards flow into the substrate and
collective Φ serves as the cycle quality metric.
EmergentTransferDetector wraps EmergenceDetector to surface non-linear
capability gains from cross-domain transfer.
All 4 crates gain the ruvector-domain-expansion path dep. 36 new tests,
all green alongside the existing suite.
https://claude.ai/code/session_019Lt11HYsW1265X7jB7haoC
- Remove unsafe pointer aliasing in BehaviorTree::tick(), use safe
disjoint field borrowing instead (P0)
- Fix usize underflow in score_scene_graph when expected_objects < 2 (P0)
- Fix cluster ID overflow in reference_solution for PointCloudClustering (P0)
- Fix NaN handling in MaxDistEntry::cmp — NaN treated as maximally
distant so it gets evicted from kNN heap first (P1)
- Clamp cosine_distance output to prevent negative values from
floating-point rounding (P1)
- Change search_radius to return Ok(Vec::new()) for empty index instead
of Err(EmptyIndex) for correct semantics (P1)
- Add debug_assert guards for empty slices in bounding_sphere and
cluster_to_object (P1)
- Remove dead PipelineConfig.spatial_search_k field (P2)
- Use serde_json::from_value instead of to_string+from_str roundtrip
in domain_expansion for better performance (P2)
All 257 tests pass.
https://claude.ai/code/session_01H1GkTK5z9ppVVQDQukjBsY