Product · memory correctness
Store a fact that contradicts an old one, and memory now says so — out loud
By Rajamohan Jabbala · July 11, 2026
Most memory layers handle a contradiction in one of two ways. Some silently overwrite the old fact and hope the new one is right. Others keep both and let retrieval pick a winner at random on every read. Both strategies share one property: nobody tells you it happened.
That's a strange default. If you told a colleague "the meeting moved to Friday" and they already had Tuesday written down, you'd expect them to say something. Your agent's memory should meet the same bar.
What shipped
Every write into CLS++ has always been fact-checked against what memory already believes — that check is not new. What's new is that the result stopped being a secret. Store something that collides with an earlier fact, and the write response now carries a contradiction notice:
"This appears to update or contradict something stored earlier: 'Kavya drinks tea'. Both are kept for now — the newer one will rank higher unless you tell me the older one was right."
The notice includes exactly which stored items were contradicted, their text, and a numeric surprise score. Nothing is deleted. The newer fact wins by default because that's usually what "updating" means, but the decision is reversible with one correction — the old fact was never destroyed, only outranked.
How the check actually works
Facts are stored as structured slots: a subject and a relation ("Kavya" + "drinks"). When a new write lands on a slot that's already occupied with a different value, memory computes a surprise score — a divergence between what it believed and what it was just told. A direct negation ("I like coffee" → "I don't like coffee") is treated as a full-strength contradiction, the same as an explicit "actually, that changed."
What it deliberately refuses to do
The failure mode of contradiction detection is false alarms, so the check is conservative on purpose.
No fights over guessed slots
When a slot was inferred heuristically from raw text rather than stated cleanly — the kind of guess that can misread the second word of a name as a verb — the two facts coexist without a fight.
No damaging the wrong fact
When an explicit correction arrives but the subject has several facts on record and it's ambiguous which one is being corrected, memory leaves them all alone rather than damage the wrong one.
Speaks only when the collision is real
A memory layer that cries wolf trains you to ignore it. This one stays quiet unless the same subject and relation genuinely collide, or the new statement directly negates the old.
The numbers, measured honestly
We benchmark this exact behavior. The Memory Integrity Benchmark runs contradiction and supersession scenarios through the same five-axis runner for every system: a fact is stored, later contradicted, and the memory is asked what's true now. Here is CLS++ against OSS mem0 (gpt-4o-mini) and a naive recall baseline on the core scenario set:
| Metric | CLS++ | OSS mem0 | Naive recall |
|---|---|---|---|
| Truth retention (current fact wins) | 80% | 10% | 10% |
| Stale fact surfaced after update | 20% | 90% | 90% |
| Audit trail for the decision | 100% | 0% | 0% |
| Tokens per correct answer | 19 | 261 | 185 |
| LLM calls per scenario | 0 | 2.1 | 0 |
The structural difference: OSS mem0 is additive — on a superseding fact it keeps both memories and returns both on search, deferring the contradiction to your downstream LLM, at one LLM call per write (~2.6s of fact-extraction latency). CLS++ resolves supersession inside the memory layer, deterministically, with zero LLM calls — and the old fact is never destroyed, only outranked.
Read the fine print, because it matters: these numbers are OSS mem0, not mem0's paid platform, which runs a different resolution path. The scenarios are single-valued supersession — mem0's LLM handles multi-valued facts ("I have a dog" + "I have a cat", keep both) correctly today, and we're adding those scenarios so the benchmark stops flattering us. And CLS++ loses one scenario of the ten: "vegetarian" → "eats chicken" is a contradiction you need world knowledge to see, not embedding geometry. We publish the miss because a benchmark that can't embarrass its author isn't one.
Why this matters more than a recall score
An agent that acts on its memory needs to know when its beliefs changed, not just what they currently are. Silent belief revision is how an agent books the Tuesday meeting that moved to Friday — confidently, with a high recall score. The fix isn't a smarter ranking function. It's a memory that says what it noticed, at the moment it noticed it.
Contradict your own memory and watch it answer back.
No signup needed to see it work.
I'm onboarding a handful of design partners building agents on a memory layer. If your agent has ever acted on a fact its user corrected three turns earlier, this is built for exactly that conversation.