Skip to content

v0.5.0: Data integrity, semantic retrieval, hook fixes

Choose a tag to compare

@jarmstrong158 jarmstrong158 released this 02 Jul 23:55

Data integrity

  • 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).
  • 104 tests passing (14 new).