The one finding worth keeping: for facts that keep changing, working out what’s true at read time beats deciding it at write time. That is the opposite of how most memory systems, mine included, are built.
Claude Code, Cursor, and every other coding agent start each session from zero. The decision you made last week, the value a constant actually settled on after three revisions, the approach you already tried and rejected: all of it gone when the context window resets. So I built Engram, a persistent memory layer that captures durable facts from your sessions, keeps them current as they change, and resurfaces the right ones next time.
What was supposed to make it more than a wrapper around a vector database was identity maintenance. When a fact changes, when the cache TTL goes from 300 seconds to 600 to 900, the old value has to stop surfacing. Engram did this with subject-key supersession: a later fact with the same subject retired the older one at write time. The storage underneath was unremarkable. Postgres held the source of truth, Qdrant did hybrid retrieval, and a graph handled associative recall. Supersession was the part I was betting on.
I set one rule for the project: let measurement decide. Ship nothing as “it works” without a benchmark that could prove it doesn’t. That rule is why this is a post-mortem and not a launch.


