All notable changes to Mnemosyne are documented in this file.
Format follows Keep a Changelog. This project uses Semantic Versioning.
1.0.0 - 2026-03-30
- Dense embedding backend — optional 23MB ONNX model (all-MiniLM-L6-v2-code-search-512) as 6th retrieval signal via Reciprocal Rank Fusion. Bridges vocabulary gap when query terms don't match code identifiers. Opt-in via config, downloads on first use, runs 100% locally. No data egress.
- Porter stemmer for TF-IDF tokenizer — aligns with BM25/FTS5 porter stemming.
- Code-aware stopwords —
get,set,for,is,haspreserved in code identifier splitting instead of being stripped as English stopwords. - Two-pass soft file filter — files containing top-50 individual chunks survive at 0.7x penalty even if their aggregate file score is low.
- Symbol match file promotion — files with strong symbol matches get guaranteed filter slots.
- Decorator inclusion — function/class chunks now include decorator blocks.
- Chunk enrichment — TF-IDF embeddings include file path and module docstring context for better semantic matching.
0.4.0 - 2026-03-29
mnemosyne healthcommand — reports index age, file/chunk/token counts, vocabulary size, stale files, FTS5 integrity, tokenizer hash, and daemon status.--jsonflag for programmatic monitoring.--log-formatglobal flag (text/json) for structured logging on all commands.--log-levelglobal flag (DEBUG/INFO/WARNING/ERROR) for log verbosity.mnemosyne benchmarkcommand for running retrieval-quality benchmarks against any corpus with JSON question sets.- httpx 0.28.1 benchmark regression gate (5 assertions,
@pytest.mark.benchmark). - Retrieval metrics:
hit_at_3,relevant_at_5,mrr_at_10in BenchmarkSuite. - Symbol type-aware ranking —
_symbol_searchreturns chunk_type; class definitions receive 4x boost when PascalCase/TitleCase query detected. - Hybrid file aggregation in
_file_level_filter— max + 0.1*sum prevents files with many weak chunks from volume-dominating over precise matches. - Ingest directory walk —
mnemosyne ingest src/now expands directories instead of silently dropping them. - Path containment validation — ingest CLI rejects paths outside project root,
resolves symlinks with
os.path.realpath().
- FTS5 escape regex — commas, periods, hyphens, and other punctuation silently caused BM25 to return 0 results for natural language queries.
_split_class_chunknow preserves parent chunk_type instead of hardcoding "block", enabling class-name boost for split class definitions.- Daemon socket permissions set to 0600 after bind (CVE-class prevention).
- Daemon ingest path validation — rejects paths outside project root.
- Six silent
except:passblocks replaced with proper WARNING/ERROR logging.
- Ingest
_scan_files()refactored into_scan_dir()shared helper for both full-scan and targeted path resolution. _file_level_filteraggregation changed from pure sum to hybrid (max + 0.1*sum) — improves precision for single-file queries.
- hit@3: 0.667 -> 1.000
- relevant@5: 3.17 -> 3.83
- mrr@10: 0.597 -> 0.778
- All 6 queries now return at least one gold file in top 3.
0.3.0 - 2026-03-28
Initial public release on PyPI as mnemosyne-engine.
- Hybrid retrieval: BM25 (FTS5) + TF-IDF + usage frequency + symbol search
- Reciprocal Rank Fusion across all signals
- Python/Markdown/Go/Rust/C#/Java/Kotlin chunkers
- ARC cache with ghost lists and tiered storage
- Token compression (40-70% reduction)
- Daemon mode with Unix socket RPC
- Zero runtime dependencies