docs: record the memory API decisions, including the one declined

Keeps the reasoning behind PR #19 next to the code, since none of it is
recoverable from the diff: why memory_get stopped returning the embedding
and tsvector, why memory_patch refuses ambiguous matches rather than
picking one, and why memory_append was dropped as redundant with patch.

Also records P3 (mechanising file->memory mirroring) as DECLINED with its
reasoning and, more usefully, the condition that would reopen it — the
mirror going stale again now that patching is cheap. The evidence we had
pointed at edit cost, which P2 fixed; if drift recurs the cause was
attention instead, and the answer is probably to remove the duplication
rather than build a drift detector for it.

Notes two traps for anyone extending this: content_tsv is a generated
column so full-text search cannot rot after a patch (only the embedding
needs recomputing), and the obvious "does search find the patched text"
acceptance check therefore passes on an implementation that skips
re-embedding entirely.

The brief previously lived outside the repo. Moved rather than copied —
two hand-maintained copies is the exact drift problem described in the
document.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-11 15:10:36 -07:00
co-authored by Claude Opus 5
parent c3bbea5134
commit 6e9628b073
2 changed files with 276 additions and 0 deletions
+14
View File
@@ -655,6 +655,20 @@ the `lint` script is a cheap way to keep it that way.
---
## Design notes
`docs/` holds decision records for changes whose reasoning isn't recoverable
from the diff — what was built, what was deliberately rejected, and what would
reopen a closed question.
- [`docs/memory-api-improvements.md`](docs/memory-api-improvements.md) — why
`memory_get` stopped returning the embedding and tsvector, why `memory_patch`
refuses ambiguous matches instead of guessing, why `memory_append` was
dropped, and why file-mirroring was left as a convention rather than
mechanised.
---
## Troubleshooting
- **`401 claim invalid: aud`** from `/api/mcp` — your MCP client isn't