Docmancer 0.6.14 completed the local memory loop. Version 0.6.15 tightens the trust layer around it, because a memory system is only useful when it retrieves the right fact, stays silent when evidence is weak, and shows you what needs maintenance.
Weak matches now stay out of context
Memory query and Claude Code or Codex recall hooks now share a normalized 0.05 relevance floor. Reciprocal Rank Fusion still orders candidates, but rank is no longer presented as confidence. If the index has no credible answer, Docmancer returns no memory instead of injecting the nearest unrelated atom.
docmancer memory query "what deployment decisions have we recorded?"
For diagnosis, --min-score 0 exposes weak candidates. That output is useful when tuning retrieval, but it should not be treated as trusted recall.
Retrieval changes have a real gate
The repository now includes twenty sanitised question shapes derived from Claude Code, Codex, and Cursor workflows.
docmancer memory eval \
--dataset tests/fixtures/memory-eval-sanitized-real.jsonl \
--gate
The gate requires at least 85 percent top-one correctness, 95 percent Hit@3, and zero failures for project isolation, forgotten-memory suppression, and current-versus-obsolete conflicts. It also reports Hit@5, MRR, failed cases, and p50/p95 latency so ranking changes can be compared rather than guessed at.
Audit now covers corpus health
docmancer memory audit
The local read-only audit still finds likely secrets before redaction and keeps output masked. It now also compares live sources with the last sync and flags exact cross-source duplicates, oversized sources, and large sources that produce no usable atoms. JSON output includes the complete report for automation.
Preview capture before enabling it
Lifecycle capture remains separate and opt-in. You can now inspect exactly which redacted memory candidates a supported payload would retain without creating a record or changing the index.
docmancer memory capture \
--agent codex \
--input hook-payload.json \
--json
Capture stays local, project-scoped, non-blocking, and disabled until you explicitly install capture hooks. The durable records and tombstones remain authoritative; atoms and vector indexes remain derived local search state.