- 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>
Add PCSK9 R46L loss-of-function variant (NEJM 2006: OR 0.77 CHD,
0.40 MI) as a protective cardiovascular SNP with negative weights.
Include PCSK9→LDL-C biomarker correlation (15-21% lower LDL in
carriers). Refactor gene-biomarker correlations from match to
additive if-chain so multiple gene effects can stack on the same
biomarker (e.g., APOE raises LDL while PCSK9 R46L lowers it).
Panel expanded to 20 SNPs.
https://claude.ai/code/session_014FpaYVohmyLH5dcBZTgmSY
Add rs10455872 (OR 1.6-1.75/allele CHD) and rs3798220 (OR 1.49-1.54/allele)
from 2024 LPA meta-analyses. Include Lp(a) biomarker reference (0-75 nmol/L)
and gene-biomarker correlation in population model. Separate NUM_ONEHOT_SNPS
(17) from NUM_SNPS (19) to preserve 64-dim vector layout with LPA encoded
in summary dimension 63.
https://claude.ai/code/session_014FpaYVohmyLH5dcBZTgmSY
Structural improvements from deep code review:
- Consolidate 5 parallel arrays (SNP_WEIGHTS, HOM_REF, HOM_ALT, HET,
ALLELE_FREQS) into single SnpDef struct array — eliminates entire class
of parallel-array misalignment bugs
- Cache category_meta() with LazyLock — avoids per-call Vec allocation
(critical in generate_synthetic_population hot path)
- Hoist Normal::new out of inner loop in generate_readings — pre-compute
distributions per biomarker instead of per-step*per-biomarker
- Add clinically meaningful lower bounds: LDL normal_low 0→50 mg/dL
(critical_low 25), Triglycerides normal_low 0→35 mg/dL (critical_low 20)
- Optimize RingBuffer::clear from O(capacity) to O(1) — head/len reset
is sufficient since push overwrites before read
- Use NUM_SNPS const for vector encoding bounds instead of magic number 51
All 172 tests pass, zero clippy warnings for rvdna.
https://claude.ai/code/session_014FpaYVohmyLH5dcBZTgmSY
Evidence-based refinements from peer-reviewed clinical research:
- TP53 rs1042522 (Pro72Arg): hom_ref 0.10→0.00 — CC/Pro/Pro is not
independently risk-associated; prior non-zero baseline was unjustified
- BRCA2 rs11571833 (K3326X): het 0.25→0.20 — aligned with iCOGS
meta-analysis OR 1.28 for breast cancer (Meeks et al., JNCI 2016,
76,637 cases / 83,796 controls)
- NQO1 rs1800566 (Pro187Ser): het 0.20→0.15, hom_alt 0.45→0.30 —
aligned with comprehensive meta-analysis OR 1.18 for TT vs CC
(Lajin & Alachkar, Br J Cancer 2013, 92 studies, 21,178 cases);
larger 2022 meta-analysis (43,736 cases) found no overall association
Validated unchanged weights against SOTA evidence:
- APOE rs429358: OR 3-4x het, 8-15x hom (Belloy JAMA Neurology 2023)
- SLCO1B1 rs4363657: OR 4.5/allele, 16.9 hom (SEARCH/NEJM; CPIC 2022)
- COMT×OPRM1 interaction: confirmed p=0.037 (orthopedic trauma study)
All 48 tests pass (33 unit + 15 integration).
https://claude.ai/code/session_014FpaYVohmyLH5dcBZTgmSY
- Run cargo fmt --all to fix formatting in 362 files across the entire workspace
- Add PGDG repository for PostgreSQL 17 in CI test-all-features and benchmark jobs
- Add missing rvf dependency crates to standalone Dockerfile for domain-expansion
- Add sona-learning and domain-expansion features to standalone Dockerfile build
- Create npu.rs stub for ruvector-sparse-inference (fixes rustfmt resolution error)
Co-Authored-By: claude-flow <ruv@ruv.net>
DNA crate (rvdna):
- Add ruvector-solver dependency with forward-push feature
- New kmer_pagerank module: KmerGraphRanker uses Forward Push PPR to
rank sequences by structural centrality in k-mer overlap graphs
- New solver_bench benchmark suite with 3 groups:
A) Localized relevance via Forward Push PPR (20-200x speedup)
B) Laplacian solve for denoising via Neumann/CG (10-80x speedup)
C) Cohort-scale label propagation via CG solver
- README: add DNA Solver Benchmarks section with dataset citations
(GIAB, NA12878, 1000 Genomes), graph construction docs, benchmark
tables, and reproducibility instructions
Quantum crate (prime-radiant-category):
- Add ruvector-solver dependency with neumann/cg features
- SparseMatrix: replace O(nnz) COO Vec with O(1) HashMap entries,
add to_csr_f64() and spmv_f64() using solver CsrMatrix
- ComplexMatrix: add Jacobi eigenvalue algorithm for real-symmetric
matrices (much more stable than power iteration + deflation),
add to_csr_real() and is_real_valued() helper methods
- DensityMatrix: add SpectralDecomposition cache, purity_fast() via
Frobenius norm O(n²) vs O(n³), static eigenvalue helpers
- SimplicialComplex: add graph_laplacian_csr() for spectral analysis
- SolverBackedOperator: sparse quantum operator using CsrMatrix SpMV
for 40-60 effective qubit scaling (vs ~33 with dense matrices)
- New quantum_solver_bench: SpMV scaling, eigenvalue convergence,
memory scaling benchmarks from 10 to 30 qubits
All 362 tests pass (81 quantum + 102 DNA + 179 solver).
https://claude.ai/code/session_01TiqLbr2DaNAntQHaVeLfiR
Rename dna-analyzer-example to rvdna across all source files, tests,
and benchmarks. Add crates.io metadata (repository, docs, keywords).
Publish rvdna v0.1.0 to crates.io and @ruvector/rvdna v0.1.0 to npm
with NAPI-RS platform loader, JS fallbacks, and TypeScript definitions.
Also publishes workspace deps at v2.0.2: ruvector-math, ruvector-core,
ruvector-filter, ruvector-collections, ruvector-graph, ruvector-gnn.
Co-Authored-By: claude-flow <ruv@ruv.net>
Smith-Waterman: rolling 2-row DP replaces 3 full (Q+1)*(R+1) matrices.
Only prev+curr rows for H/E, single scalar for F. Memory drops from
~600KB to ~12KB for 100x500bp alignment, fitting L1 cache. Traceback
matrix retained (tb==0 encodes stop condition, no full H needed).
K-mer encoding: zero-allocation canonical hashing eliminates Vec alloc
per k-mer in MinHash::sketch() via dual MurmurHash3 (fwd + rc strands).
types.rs to_kmer_vector: rolling polynomial hash computes O(1) per
k-mer instead of O(k). Removes leading nucleotide, shifts, adds
trailing in constant time using precomputed 5^(k-1).
Benchmarks (100bp query x 500bp ref / k=11):
kmer/encode_1kb: 4.1µs → 2.3µs (1.78x)
kmer/encode_100kb: 364µs → 199µs (1.83x)
smith_waterman: 416µs → 386µs (1.08x, 10x less memory)
full pipeline: 1.98ms → 1.52ms (1.30x end-to-end)
95 tests pass, zero failures.
https://claude.ai/code/session_013B6stXbYwAkWHbE16sjUrq