# Storage

The DB seam: what it loses quietly, and what it reads more of than it needs.

## Dialogue persistence errors are swallowed [#677] {#dialogue}

Costs: restart continuity can vanish with nothing in the log, and a failed
delete can bring stale conversation state back. Current-turn dialogue is
unaffected, which is why this has never been noticed.
Revisit when: a restart is reported as losing context. Sooner if a turn starts
reading dialogue rows back to him.
Workaround: none. The failure is invisible from outside.

## A recall miss scans two whole tables [#681] {#recall}

Costs: every missed recall reads all of `memory_vectors` and then decodes and
sorts every note vector. Not an N+1, and the memory scan is cheap per losing
row on purpose. The duplicated decode is the legacy notes path alone.
Revisit when: the note count makes a miss measurably slow. Also when the two
exclusion filters are proven to agree. `QueryNotes` uses `notHisWordsSQL` and
`Search` uses `memory.NonRecallPrefix`. The fallback cannot go until they match.
Workaround: none needed at today's row counts.
