Releases: rendro/sediment
v0.5.1
v0.5.0
What's new
Full CLI access to all tools
All 4 MCP tools (store, recall, list, forget) are now available as CLI subcommands, so you can use Sediment directly from the terminal without an MCP client.
sediment store "preferred test framework is pytest"
sediment store - # read from stdin
sediment recall "what test framework?"
sediment list --scope global
sediment forget <id>--jsonflag: All commands support--jsonfor machine-readable output, making it easy to integrate with scripts and pipelines--scopeon list: Filter byproject,global, orall- Stdin support:
sediment store -reads content from stdin
Other changes
replace_idparameter on store: Atomically replace an existing item, preserving graph lineage and recording validation (#55)
Install / upgrade
cargo install sediment-mcp
# or via Homebrew
brew upgrade sedimentv0.4.4
What's new
- Multi-model embedding support: Select from 4 embedding models via
SEDIMENT_EMBEDDING_MODELenv var:all-MiniLM-L6-v2(default, 384-dim)e5-small-v2(384-dim)bge-small-en-v1.5(384-dim)bge-base-en-v1.5(768-dim)
- Asymmetric query/document embeddings: Models that use prefixes (e5, bge) now apply the correct prefix for queries vs documents
- Dynamic embedding dimensions: Support for both 384-dim and 768-dim models
- SHA-256 integrity verification for all model artifacts (weights, tokenizer, config)
Benchmarks
Updated BENCHMARKS.md with results from 6 systems (1,000 memories, 200 queries):
| Metric | Sediment | ChromaDB | Mem0 | MCP Memory Svc | Basic Memory | MCP Server Mem |
|---|---|---|---|---|---|---|
| R@1 | 50% | 47% | 47% | 38% | 9% | 1% |
| MRR | 62% | 61% | 61% | 49% | 10% | 2% |
| Recency@1 | 100% | 14% | 14% | 10% | 0% | 0% |
| Dedup | 99% | 0% | 0% | 0% | 0% | 0% |
all-MiniLM-L6-v2 remains the default — tied with bge-base-en-v1.5 on quality but ~2x faster.
v0.4.3
What's Changed
Safety & Correctness Fixes
- Fix consolidation merge deleting items when supersedes edge creation fails
- Fix non-atomic delete ordering — item deleted first, orphaned chunks are benign
- Cap stdin drain loop at 100MB to prevent indefinite blocking
- Fix panic on multi-byte UTF-8 characters in chunk overlap calculation
- Fix stale FTS index — rebuild with
.replace(true)before each search - Fix consolidation TOCTOU race by reusing fetched items instead of double-fetch
- Reduce trust_bonus edge coefficient from 0.02 to 0.005 to prevent ranking collapse
- Add empty content/query validation
- Clamp RetryConfig max_attempts to minimum 1
Performance
- Add composite indexes on graph_edges
(from_id, edge_type)and(to_id, edge_type) - Cap co-access query at LIMIT 50
- Lazy AccessTracker — only opened for recall, not store/list/forget
- Guard chunk merge pass against exceeding max_chunk_size
Cleanup
- Remove dead code: -91 lines across 11 files
- Move test-only helpers behind
#[cfg(test)] - Remove unused
_filtersparam fromlist_items - Fix ChunkResult offset docstrings (byte offsets, not character positions)
- Remove CHANGELOG.md (GitHub releases serve as changelog)
- Fix CLAUDE.md database terminology (Two-Database Hybrid)
Full diff: v0.4.2...v0.4.3
v0.4.2
What's Changed
Retrieval Quality
- Power-law FTS boost: replace linear BM25-normalized boost with power-law scaling, concentrating boost on top FTS hits while staying grounded in actual BM25 relevance scores
- Tuned parameters via grid search (
FTS_BOOST_MAX=0.12,FTS_GAMMA=2.0) — R@1: 45.5%, R@5: 78.0%, MRR: 59.3%, nDCG@5: 57.4% - FTS params overridable via env vars in bench builds for parameter sweeps
Latency
- Batch chunk-to-item lookups (~30-60ms savings at 1,000 items)
- Raise brute-force vector search threshold to 5,000 rows for better accuracy on small tables
- Combined decay query: merge access + validation count lookups into single SQLite query
v0.4.1
Changes
- Replace RRF (Reciprocal Rank Fusion) with additive FTS boost in
search_items(), recovering ~10pp on Recall@1 - The additive boost (
0.08 / (1 + fts_rank)) preserves vector similarity magnitude while using FTS as a targeted keyword tie-breaker
Benchmark (1000 memories, 200 queries)
| Approach | Recall@1 | Recall@5 | MRR |
|---|---|---|---|
| Additive boost (0.08) | 46.5% | 73.0% | 59.2% |
| RRF (K=60) | 37.0% | 73.5% | 53.2% |
v0.4.0
What's Changed
Search Quality Improvements
- Exact vector search for small databases (<5000 rows):
bypass_vector_index()avoids lossy IVF_PQ quantization at small scale;refine_factor(10)for larger databases recovers ranking accuracy - Reciprocal Rank Fusion replaces hand-tuned FTS boost: standard RRF (k=60) fuses vector similarity ranking with full-text keyword ranking, replacing the benchmark-specific additive constant.
SearchResult.similaritypreserves clean vector similarity for downstream decay scoring. - Cross-project penalty increased from 5pp to 12.5pp: different-project items get 0.875x penalty (was 0.95x), better balancing project isolation vs cross-project discoverability
Other
- Added
benchfeature flag for benchmark tooling (created_atoverride on store)
v0.3.3
What's Changed
Git-based project identity
Project IDs are now derived from the git repo's initial (root) commit hash, so the same repo cloned anywhere gets the same project_id. Non-git directories fall back to a random UUID.
Automatic migration
When an existing UUID-based project gains a git root commit, stored items are migrated in-place — LanceDB items and graph nodes are updated to the new ID on the next server startup.
Shallow clone safety
Shallow clones are detected via git rev-parse --is-shallow-repository and fall back to UUID to avoid using a truncated history's root commit.
Other fixes
- Improved SQL string sanitization (
*/stripping to prevent comment injection) - Fixed
rustfmtandclippywarnings across the codebase
Full Changelog: v0.3.2...v0.3.3
v0.3.2
Bump version to 0.3.2 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>