c0f4074a5d
Nineteen of the twenty findings were open, and they lived in an untracked audit.md at the repo root that no next session would have read. The one that is closed, the unauthenticated mavgpud proxy, went out as V-673. The report is now a frozen measurement under docs/evals/, dated and never edited again — including when a finding it names gets fixed. The live state moved to docs/caveats/, one entry per limit, each carrying its Vikunja id and the condition that makes it worth fixing. A caveat with no revisit trigger is a complaint, so every entry has one. Closing a limit deletes its entry rather than editing the measurement that found it. Two directory indexes come with it. docs/CLAUDE.md states the tier rule the repo already followed by convention: living docs corrected in place, evals frozen by date, caveats deleted when fixed. docs/caveats/CLAUDE.md indexes the nineteen by claim and severity, because an index of filenames adds nothing a directory listing does not. Tasks V-675 through V-693 carry the plans. The doc line and the tracker now join in both directions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ESv8hqNPseYt1CnotZpqDz
31 lines
1.4 KiB
Markdown
31 lines
1.4 KiB
Markdown
# 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.
|
|
|
|
## The reminder transition is a lost update [#678] {#reminders}
|
|
|
|
Costs: a concurrent fire and cancel both succeed and the last writer wins.
|
|
Medium today because cancellation has no surface. High the moment V-622 adds
|
|
one, and V-622 does not describe this invariant.
|
|
Revisit when: V-622 starts, whichever comes first.
|
|
Workaround: none, but the window is small while nothing can cancel.
|
|
|
|
## 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.
|