Repository navigation
Summary
Session summaries no longer hallucinate. Three changes address the root causes — unfaithful extraction, lossy transcript truncation, and status-blind decision recording.
What's New
Quote-grounded extraction
Every decision and problem-solved item must now carry a short verbatim quote from the transcript. A deterministic validator (whitespace/case-normalized substring match) drops any item whose quote is missing or fabricated, then strips the quotes before storage. Applied in the single CompositeModelClient.summarize funnel — every provider path is grounded.
Priority-based transcript selection
Replaces the old head+tail 8K char slice that cut the middle of long sessions (where the summarizer then invented what "must have" happened). Turns are now ranked: user turns first, assistant turns by proximity to user turns, tool lines last. Selected turns are re-emitted in original order with [...] gap markers. Tool-only fallback transcripts are never emptied.
Decision status provenance
Decisions are now {text, status} with done | proposed | rejected | open. Renders as Decision (rejected): ... in recall output. Embeds with a status prefix so vectors reflect provenance. Legacy string decisions coerce to {text, status: "done"} at parse time — no migration needed.
What's Changed
Full Changelog: memory-v0.4.2...memory-v0.5.0