v3.21.1
ruvnet/ruflov3.21.1Jul 4, 2026by ruvnet
AI Summary
Fixes two external-reported regressions: broken memory search recall and npx init leaving self-learning as a no-op.
Key Highlights
- Fixed 'memory search' keyword recall and BM25 fusion
- Fixed 'npx ruflo init' to properly resolve memory package path
- Added sidecar file for memory package path resolution
- WAL checkpointing now ensures readers see updates
New Features
- Memory search recall fix
- Init hook resolution fix
Full Release Notes
Two external-reported regression fixes. ## Fixed - **#2558 — `memory search` broken** (keyword recall random, HNSW index 0 vectors). Two defects: the Phase-2 BM25 fusion silently dropped the keyword-coverage floor (IDF collapses on small corpora → docs containing the query word scored below threshold), and WAL-mode writes were never checkpointed so WAL-blind readers saw 0 vectors. Fix: coverage floor + recall-friendly fusion + `wal_checkpoint` on store + accurate `total_vectors`. Search now recalls confirmed-stored entries (targeted, not a dump). 169/169 memory suite. - **#2545 — `npx ruflo init` left self-learning a silent no-op.** `@claude-flow/memory` (optionalDependency) lands in the npx cache, off the project's node_modules walk-up, so the auto-memory hook never resolved it. Fix: init records the resolved path in a `.claude-flow/memory-package.json` sidecar; hook reads it first and now fails LOUD when memory is genuinely absent; `doctor --fix` repairs it. PRs: #2567, #2564