Enovari
Log in Download →

Zep alternative — how contradictions are handled

Zep invalidates the older fact.
Enovari leaves both open until someone writes why.

Zep builds a temporal graph and gives every fact four timestamps, so when a newer statement arrives the older one can be marked no longer valid. Enovari does not perform that step. It opens a contradiction row, leaves it unresolved, and both notes stay in the store — and settling it later is a deliberate act with a written reason attached, not a side effect of saving something. That is the whole difference, and it is a real disagreement about what a memory is for. Every claim about Zep below carries the page it was read from and the day, and quotes Zep’s own words wherever the argument turns on them.

You told it one thing in March and the opposite in August. What should it believe in September?

help.getzep.com/facts · help.getzep.com/how-graph-creation-works · read 2026-09-07, re-checked 2026-09-14

Conflicting AI memories

One fact, two futures.

  1. 12 MARYou tell it the deploy target is the staging box.
  2. 27 AUGYou tell it the deploy target is the customer’s VPC.

Zep — the older fact is closed off

Each extracted fact is compared to existing edges: duplicates merge, and contradictions invalidate older facts rather than leaving conflicting truths side by side. help.getzep.com/how-graph-creation-works · read 2026-09-07, re-checked 2026-09-14

The old fact is not deleted by that step. It keeps four timestamps — created_at, valid_at, invalid_at, expired_at — and the agent is handed the window it was true in: (2024-11-14 02:03:58+00:00 - present). Zep hedges it in their worked example, where Zep attempts to invalidate the older fact. Two of those four timestamps exist to record when Zep found out, separately from when the thing was true — a bi-temporal model Enovari does not have. help.getzep.com/facts · read 2026-09-07, re-checked 2026-09-14

Enovari — both stay, and the argument is filed

Neither note is closed, dated out, or marked superseded. A contradiction row is opened with a status of unresolved, and both notes stay in the store until a person or an agent settles it on purpose.

Settling it is a named act. The resolver takes three verbs — dismiss (both valid), supersede_a, supersede_b — it rejects anything else, and it will not take the call at all without a written explanation. Blank does not count, and neither does a space. Superseding is available here. It is just never something the software did while you were not looking.

ld_resolve_contradiction — the published tool contract and the shipping resolver · read 2026-09-07

Neither of these is the safe one. Zep’s answer gives an agent one current fact and the dates it held for, which is what you want when the world genuinely moved on and the newer statement is simply correct. Ours gives an agent two facts and no ruling, which is what you want when the disagreement is the interesting part — when one of the two is a mistake somebody has to notice, not a fact the world simply moved past.

Cost of holding contradictions open

What our answer costs.

the bill three items read 2026-09-07

A row nobody closes stays open. In the whole shipping build there is exactly one statement that changes a contradiction’s status, and it is the resolver — so something has to call it, and nothing else ever will. Holding a disagreement open is only a virtue if somebody eventually walks up to it, and the design does nothing to make anybody walk up to it. Calling an untended pile “preserved history” would be a nicer word for a backlog.

A contradiction you file by hand can only ever be dismissed. When a person or an agent files one deliberately, it is stored as a self-pair — the row points at the same note twice. There is no second memory to keep, so the two supersede verbs have nothing to act on: the resolver refuses the call and leaves the row open rather than marking it resolved and doing nothing. That is the right refusal and it is still a limit. Superseding works on the disagreements the store found by itself; on the ones you raised, your only verb is dismiss.

ld_contradict · ld_resolve_contradiction · read 2026-09-07

Nothing decides at the moment of writing. An agent that reads two contradictory memories has to do something about it, and Enovari will not have done it in advance. Between the write that disagreed and the resolution that settles it, the store answers with both notes and no ruling — and that gap is as long as nobody is looking. If what you need is one current answer carrying the window it was true in, without anyone being asked, Zep is built for that and this is not.

Zep publishes a limit of its own in the same spirit — on matching entities it says Entity resolution is best-effort and that it prefers to under-merge rather than fuse the wrong two things. help.getzep.com/how-graph-creation-works · read 2026-09-07, re-checked 2026-09-14

All three items above are the same fault seen from three sides: this design moves work onto a person. That is the invoice, and it does not come with a discount. What it buys is a store in which a supersession is a verb somebody chose and a reason somebody wrote, or it does not happen. The exception: a note marked short-lived, or given an expiry date, is archived once it lapses.