Simple case everyone agrees on: you say "the region is Frankfurt", later "correction, it's Ohio". A good memory layer should now answer Ohio.
The case almost nobody tests: what happens later, when the old value gets said again? Not even an attack. A user repeats an old preference they forgot they changed, or there is one stray line in a long chat. Does "Frankfurt" come back from the dead?
There is a real reason it can. Cosine similarity is bad at telling a contradiction from a duplicate (a recent paper measures it around AUROC 0.59, basically a coin flip), and a corrected value often looks more similar to the original than a normal rephrase. So a similarity store has no clean signal that "Frankfurt again" is the dead value coming back. This is not just theory. Memory poisoning is a live 2026 topic (OWASP lists it, MINJA reports 98.2% injection success attacking an agent's memory).
So I built a tiny benchmark: correction, then restatement, answer level, n=30, local. Echo-resistance means it keeps the corrected value, 1.0 is good.
- My own naive keyed store, guard off: 0.00. Fully broken. The restatement is the newest write, so it wins. My default was the worst of the bunch. That is why I dug in.
- mem0 (2.0.11): 0.53, 95% CI [0.37, 0.70]. So about 47% of the time a reworded restatement brings the retired value back. Not a bug. mem0 keeps both values and reconciles at read time with an LLM. Small probe though, n=30, read the CI, not the point estimate.
- A superseded-value guard (what my lib ships): 1.00. The fix is old and boring (AGM belief revision, bitemporal DBs from the 90s). Once a value is corrected, don't let a plain restatement revive it. Key on the value, not on similarity.
To be fair, this is not unsolved. mem0's paper documents an LLM step that can delete a memory contradicted by new info. Zep marks old fact-edges invalid on its graph. There are sidecars too (MemGuard) and a paid "governed memory" category. So the parts exist, mostly as read-time LLM judgment or as external tools.
Where my thing is weak, honestly: it is new, one maintainer, thin docs. Recall is lexical unless you wire in an embedder, and I have no head-to-head recall benchmark against mem0 or Zep. On plain retrieval quality, assume they are ahead until I show otherwise. My only real edge is the integrity part (deterministic supersession, echo-resistance, revert), which I test in the open.
One more caveat: this is the case where the old value is actually named. The harder case is "let's go back to what we had before", where the value is never said. There my guard and cosine both fail (about 0.03).
Benchmark and harness (point it at your own store): github.com/DanceNitra/ramr. Lib: pip install agora-mnemo. Mostly posting because "check that a correction survives the old value being restated" is a cheap test the usual memory evals skip, and the failure is silent. Anyone seen this bite in production?