Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
11e2390
docs(adr): ADR-029 EXO-AI multi-paradigm integration architecture
claude Feb 27, 2026
4061e1b
feat(exo-core): ADR-029 Phase 1 canonical primitives — CoherenceRoute…
claude Feb 27, 2026
9dea263
feat(exo): ADR-029 neuromorphic + quantum backends, experiments 01 & 03
claude Feb 27, 2026
95e3ff3
feat(exo): ADR-029 Phase 2 genomic bridge + sparse TDA + causal emerg…
claude Feb 27, 2026
31a0beb
feat(exo): ADR-029 Phase 3 — ExoLearner + coherent federation commit
claude Feb 27, 2026
64c1519
perf(exo): review & optimize — zero warnings, Kuramoto O(n²)→O(n), K-…
claude Feb 27, 2026
ebf5e4c
feat(exo): integrate ruvector-domain-expansion into exo-backend-class…
claude Feb 27, 2026
7b1c6e5
chore(exo): update Cargo.lock for ruvector-domain-expansion dependency
claude Feb 27, 2026
554214b
feat(exo): implement Phases 2-5 of ruvector-domain-expansion integration
claude Feb 27, 2026
bc71837
feat(exo): resolve 5 TODOs, add cross-phase orchestrator and e2e tests
claude Feb 27, 2026
0b6d54e
feat(exo): add RVF packaging, fix pattern retrieval, update README
claude Feb 27, 2026
3b5048c
feat(thermorust): add thermodynamic neural-motif crate
claude Feb 27, 2026
e923045
feat: add ruvector-dither crate and integrate thermorust+dither into exo
claude Feb 27, 2026
54399f5
fix: resolve P0 safety issues in ruvector-dither, thermorust, and exo-ai
ruvnet Feb 27, 2026
41c9b69
docs: add README files for ruvector-dither and thermorust crates
ruvnet Feb 27, 2026
9f63ae0
docs: add ruvector-dither, thermorust, and ruvector-robotics to root …
ruvnet Feb 27, 2026
42a5c47
fix: format all files, add EXO crate READMEs, convert path deps to ve…
ruvnet Feb 27, 2026
57b6675
chore: publish EXO-AI crates v0.1.1 with bug fixes and READMEs
ruvnet Feb 27, 2026
c2db75d
Merge remote-tracking branch 'origin/main' into claude/exo-ai-capabil…
ruvnet Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions .github/workflows/thermorust-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: thermorust CI

on:
push:
paths:
- "crates/thermorust/**"
- ".github/workflows/thermorust-ci.yml"
pull_request:
paths:
- "crates/thermorust/**"
- ".github/workflows/thermorust-ci.yml"

env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-D warnings"

jobs:
test:
name: Test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt

- name: Cache cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-thermorust-${{ hashFiles('crates/thermorust/Cargo.toml') }}
restore-keys: ${{ runner.os }}-cargo-thermorust-

- name: Check formatting
run: cargo fmt --package thermorust -- --check

- name: Clippy
run: cargo clippy --package thermorust --all-targets -- -D warnings

- name: Build
run: cargo build --package thermorust

- name: Run tests
run: cargo test --package thermorust

bench-check:
name: Benchmarks compile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Check benchmarks compile
run: cargo bench --package thermorust --no-run
16 changes: 16 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ members = [
"crates/ruvector-graph-transformer-node",
"examples/rvf-kernel-optimized",
"examples/verified-applications",
"crates/thermorust",
"crates/ruvector-dither",
"crates/ruvector-robotics",
"examples/robotics",
]
Expand Down
34 changes: 34 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1567,6 +1567,7 @@ let syndrome = gate.assess_coherence(&quantum_state)?;
| [ruvector-sparse-inference-wasm](./crates/ruvector-sparse-inference-wasm) | WASM bindings for sparse inference | [![crates.io](https://img.shields.io/crates/v/ruvector-sparse-inference-wasm.svg)](https://crates.io/crates/ruvector-sparse-inference-wasm) |
| [ruvector-hyperbolic-hnsw](./crates/ruvector-hyperbolic-hnsw) | HNSW in hyperbolic space (Poincaré/Lorentz) | [![crates.io](https://img.shields.io/crates/v/ruvector-hyperbolic-hnsw.svg)](https://crates.io/crates/ruvector-hyperbolic-hnsw) |
| [ruvector-hyperbolic-hnsw-wasm](./crates/ruvector-hyperbolic-hnsw-wasm) | WASM bindings for hyperbolic HNSW | [![crates.io](https://img.shields.io/crates/v/ruvector-hyperbolic-hnsw-wasm.svg)](https://crates.io/crates/ruvector-hyperbolic-hnsw-wasm) |
| [ruvector-dither](./crates/ruvector-dither) | Deterministic golden-ratio and pi-digit dithering for quantization (`no_std`) | [![crates.io](https://img.shields.io/crates/v/ruvector-dither.svg)](https://crates.io/crates/ruvector-dither) |

### FPGA & Hardware Acceleration

Expand All @@ -1588,13 +1589,46 @@ let syndrome = gate.assess_coherence(&quantum_state)?;
| [ruvector-exotic-wasm](./crates/ruvector-exotic-wasm) | Exotic AI primitives (strange loops, time crystals) | [![crates.io](https://img.shields.io/crates/v/ruvector-exotic-wasm.svg)](https://crates.io/crates/ruvector-exotic-wasm) |
| [ruvector-attention-unified-wasm](./crates/ruvector-attention-unified-wasm) | Unified 18+ attention mechanisms (Neural, DAG, Mamba SSM) | [![crates.io](https://img.shields.io/crates/v/ruvector-attention-unified-wasm.svg)](https://crates.io/crates/ruvector-attention-unified-wasm) |
| [micro-hnsw-wasm](./crates/micro-hnsw-wasm) | Neuromorphic HNSW with spiking neurons (11.8KB WASM) | [![crates.io](https://img.shields.io/crates/v/micro-hnsw-wasm.svg)](https://crates.io/crates/micro-hnsw-wasm) |
| [thermorust](./crates/thermorust) | Thermodynamic neural motif engine — Ising/soft-spin Hamiltonians, Langevin dynamics, Landauer dissipation | [![crates.io](https://img.shields.io/crates/v/thermorust.svg)](https://crates.io/crates/thermorust) |

**Bio-inspired features:**
- **Spiking Neural Networks (SNNs)** — 10-50x energy efficiency vs traditional ANNs
- **BTSP Learning** — Behavioral Time-Scale Synaptic Plasticity for rapid adaptation
- **MicroLoRA** — Sub-microsecond fine-tuning for per-operator learning
- **Mamba SSM** — State Space Model attention for linear-time sequences

### Cognitive Robotics

<details>
<summary>Perception, planning, behavior trees, and swarm coordination for autonomous robots</summary>

| Crate | Description | crates.io |
|-------|-------------|-----------|
| [ruvector-robotics](./crates/ruvector-robotics) | Cognitive robotics platform — perception, A* planning, behavior trees, swarm coordination | [![crates.io](https://img.shields.io/crates/v/ruvector-robotics.svg)](https://crates.io/crates/ruvector-robotics) |

**Modules:**

| Module | What It Does |
|--------|--------------|
| **bridge** | OccupancyGrid, PointCloud, SensorFrame, SceneGraph data types with spatial kNN |
| **perception** | Scene-graph construction from point clouds, obstacle detection pipeline |
| **planning** | A* grid search (octile heuristic) and potential-field velocity commands |
| **cognitive** | Perceive-think-act-learn loop with utility-based reasoning |
| **domain_expansion** | Cross-domain transfer learning via Meta Thompson Sampling and Beta priors |

**Key features:** 290 tests, clippy-clean, `no_std`-friendly types, optional `domain-expansion` feature flag for cross-domain transfer, pluggable `PotentialFieldConfig` for obstacle avoidance, Byzantine-tolerant swarm coordination via `ruvector-domain-expansion`.

```rust
use ruvector_robotics::planning::{astar, potential_field, PotentialFieldConfig};
use ruvector_robotics::bridge::OccupancyGrid;

let grid = OccupancyGrid::new(100, 100, 0.1);
let path = astar(&grid, (5, 5), (90, 90))?;
let cmd = potential_field(&[0.0, 0.0, 0.0], &[5.0, 3.0, 0.0], &[], &PotentialFieldConfig::default());
```

</details>

### Self-Learning (SONA)

| Crate | Description | crates.io |
Expand Down
19 changes: 9 additions & 10 deletions crates/cognitum-gate-kernel/src/canonical_witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,7 @@ impl CactusNode {
// Compile-time size check: repr(C) layout is 12 bytes
// (u16 + u16 + u8 + u8 + 2-pad + u32 = 12, aligned to 4)
// 256 nodes * 12 = 3072 bytes (~3KB), fits in 14.5KB headroom.
const _: () = assert!(
size_of::<CactusNode>() == 12,
"CactusNode must be 12 bytes"
);
const _: () = assert!(size_of::<CactusNode>() == 12, "CactusNode must be 12 bytes");

/// Arena-allocated cactus tree for a single tile (up to 256 vertices).
///
Expand Down Expand Up @@ -329,7 +326,8 @@ impl ArenaCactus {
let node_v = comp_to_node[cv];
let node_p = comp_to_node[cp];

if node_v < 256 && node_p < 256
if node_v < 256
&& node_p < 256
&& cactus.nodes[node_v as usize].parent == CactusNode::NO_PARENT
&& node_v != cactus.root
{
Expand Down Expand Up @@ -390,10 +388,8 @@ impl ArenaCactus {
for adj in neighbors {
let eid = adj.edge_id as usize;
if eid < graph.edges.len() && graph.edges[eid].is_active() {
weight_sum =
weight_sum.saturating_add(FixedPointWeight::from_u16_weight(
graph.edges[eid].weight,
));
weight_sum = weight_sum
.saturating_add(FixedPointWeight::from_u16_weight(graph.edges[eid].weight));
}
}
if weight_sum < min_weight {
Expand Down Expand Up @@ -902,7 +898,10 @@ mod tests {
g.recompute_components();

let cactus = ArenaCactus::build_from_compact_graph(&g);
assert!(cactus.n_nodes >= 2, "Single edge should have 2 cactus nodes");
assert!(
cactus.n_nodes >= 2,
"Single edge should have 2 cactus nodes"
);

let partition = cactus.canonical_partition();
// One vertex on each side
Expand Down
2 changes: 1 addition & 1 deletion crates/cognitum-gate-kernel/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ pub mod canonical_witness;

#[cfg(feature = "canonical-witness")]
pub use canonical_witness::{
ArenaCactus, CanonicalPartition, CanonicalWitnessFragment, CactusNode, FixedPointWeight,
ArenaCactus, CactusNode, CanonicalPartition, CanonicalWitnessFragment, FixedPointWeight,
};

use crate::delta::{Delta, DeltaTag};
Expand Down
16 changes: 13 additions & 3 deletions crates/cognitum-gate-kernel/tests/canonical_witness_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,20 @@ mod bench {
println!("\n=== Canonical Witness Fragment (64 vertices) ===");
println!(" ArenaCactus build: {:.1} µs", avg_cactus_us);
println!(" Partition extract: {:.1} µs", avg_partition_us);
println!(" Full witness: {:.1} µs (target: < 50 µs)", avg_witness_us);
println!(" Fragment size: {} bytes", std::mem::size_of::<CanonicalWitnessFragment>());
println!(
" Full witness: {:.1} µs (target: < 50 µs)",
avg_witness_us
);
println!(
" Fragment size: {} bytes",
std::mem::size_of::<CanonicalWitnessFragment>()
);
println!(" Cut value: {}", ref_f.cut_value);

assert!(avg_witness_us < 50.0, "Witness exceeded 50µs target: {:.1} µs", avg_witness_us);
assert!(
avg_witness_us < 50.0,
"Witness exceeded 50µs target: {:.1} µs",
avg_witness_us
);
}
}
Loading
Loading