NodeBackend.ingestBatch() passed string IDs directly to the N-API layer
via Number(e.id), which returns NaN for non-numeric strings (UUIDs, hex
hashes, etc.). The native Rust HNSW silently drops entries with NaN IDs,
causing silent data loss with no error signal.
Fix: Add a bidirectional string↔numeric mapping layer to NodeBackend,
following the same pattern used by HNSWLibBackend in AgentDB:
- resolveLabel(): allocates sequential i64 labels for string IDs
- query(): maps numeric labels back to original string IDs
- delete(): resolves string IDs to labels before calling native layer
- Mappings persisted to {path}.idmap.json sidecar file
Also fixes query() returning numeric labels instead of original string
IDs, and delete() silently failing for non-numeric IDs.
Bumps @ruvector/rvf from 0.1.9 → 0.2.0 (breaking fix).
Closesruvnet/agentic-flow#114
Co-Authored-By: claude-flow <ruv@ruv.net>
The biomarker engine uses 20 SNPs (17 original + LPA rs10455872/rs3798220
+ PCSK9 rs11591147) but README was not updated to reflect the expansion.
Co-Authored-By: claude-flow <ruv@ruv.net>
Update all references from 17 SNPs to 20 SNPs reflecting the
addition of LPA rs10455872/rs3798220 and PCSK9 rs11591147.
Document new gene-biomarker correlations (LPA→Lp(a), PCSK9→LDL)
in synthetic population section. Update module table line counts.
https://claude.ai/code/session_014FpaYVohmyLH5dcBZTgmSY
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
- Add Health Biomarker Engine section to rvDNA README with usage examples
for composite risk scoring, streaming processing, and synthetic populations
- Add biomarker.rs and biomarker_stream.rs to Modules table
- Update test count from 102 to 172 (added biomarker tests)
- Add biomarker benchmark results to Speed table
- Add Welford, CUSUM, and PRS to Published Algorithms table
- Update root README Genomics & Health capabilities (49 → 51 features)
- Add health biomarker engine and streaming biomarkers to root feature table
- Update rvDNA details section with risk scoring and streaming capabilities
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
The pgrx test steps used --no-default-features without passing the pg17
feature, causing linker failures against PostgreSQL symbols. Also escape
bracket notation in doc comments to prevent unresolved intra-doc link
errors.
Co-Authored-By: claude-flow <ruv@ruv.net>
- ruvector-postgres: Add EdgeType import in mincut tests, remove
incorrect Some() wrapping on pgrx default!() test params
- ruvllm: Make ane_ops module available on all platforms (not just macOS)
so tests can reference it unconditionally; fix unused variable warnings
- sona: Add explicit lifetime annotations on RwLockReadGuard/WriteGuard
to fix clippy mismatched_lifetime_syntaxes errors
Co-Authored-By: claude-flow <ruv@ruv.net>
- Add #[allow(unreachable_code)] for NEON fallback in distance/mod.rs (ARM
always returns before the Scalar fallback, causing clippy error on macOS)
- Restructure standalone Dockerfile to use workspace layout so dependency
crates with workspace inheritance (edition.workspace, version.workspace)
can resolve correctly during Docker builds
Co-Authored-By: claude-flow <ruv@ruv.net>
- 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>
Published ruvector-postgres@2.0.4 to crates.io with SPARQL parser
backtrack fix, executor memory leak fix, and catch_unwind safety.
Co-Authored-By: claude-flow <ruv@ruv.net>
Implement trait-based IntelligenceProvider extension point for external
quality signals. Addresses PR #190 proposal (renumbered from ADR-029 to
avoid collision with existing ADR-029-rvf-canonical-format).
- IntelligenceProvider trait with load_signals() and quality_weights()
- FileSignalProvider built-in for JSON file-based signal exchange
- IntelligenceLoader for multi-provider registration and aggregation
- QualitySignal, QualityFactors, ProviderQualityWeights types
- calibration_bias() on TaskComplexityAnalyzer for router feedback
- 12 unit tests (all passing)
Co-Authored-By: claude-flow <ruv@ruv.net>
Include the generated 2.1 MB .rvf binary artifact in repo alongside
the v2.0 optimized example (22 capabilities, zero warnings, Paranoid
policy, audited queries, COW branching, SSN/encoding detection).
Co-Authored-By: claude-flow <ruv@ruv.net>