You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Atomic writes: entry files are written to a temp file and swapped in with os.replace, so a crash mid-write can no longer corrupt the store.
Corrupt-store protection: record_* / update_entry / deprecate_entry refuse to write when an entry file exists but cannot be parsed. Previously a corrupt file read as empty and the next record silently replaced the entire history with one entry.
update_entry enforces the v0.4 schema: structured fields are min-length validated on update, so entries cannot be hollowed out after recording.
Retrieval
Opt-in semantic blend (semantic.enabled in config, local Ollama + nomic-embed-text): hit@5 80% -> 93%, MRR 0.63 -> 0.88 on the held-out eval split. Fail-safe: falls back to lexical ranking if Ollama is unreachable.
Opt-in MMR diversity reordering so near-duplicate entries do not crowd the token budget.
evals/: retrieval eval harness, labeled datasets, and results.
Budget packing skips oversized entries instead of stopping at the first one that does not fit; recency scoring clamped against future timestamps.
Hooks
SessionStart now runs the post-compaction snapshot comparison itself (SessionStart fires with source compact before any Stop, so the injected report was previously one compaction stale) and injects a one-line quality-scan nudge -- the model-visible surface for verify_quality, since PreCompact stdout never reaches the model.
pre_compact.py / post_compact.py import resolution and the quality scan from server.py, removing duplicated keep-in-sync copies.
Packaging & CI
semantic_index.py and hooks/commit_capture_reminder.py now ship in the wheel/sdist (both were missing from 0.4.0 -- semantic retrieval silently fell back to lexical on pip installs).
CI matrix extended to Windows (atomic-write path is OS-sensitive).