Two timelines, not one.
A normal database remembers what is true now. abagraph remembers what was true and when you learned it — two independent clocks on every fact. That separation is what lets an agent rewind to the exact world-state it reasoned over, and explain a past decision honestly.
The window during which a fact is true in the real world. A correction to history changes valid-time without touching when you recorded it — so you can fix the past without lying about when you found out.
The moment the fact entered the store, append-only and immutable. This is the audit axis: it answers “what did the agent actually know when it acted?” — the question every post-mortem starts with.
Every fact carries its receipts.
A fact is not just subject–predicate–object. It ships with a source and a calibrated confidence from 0.00 to 1.00. The score is the sort key for context. Below your threshold, the fact lands as a candidate — held, not surfaced — and the agent abstains rather than guesses.
Where the claim came from, attached at write time. The agent can cite it, a reviewer can audit it, and you can revoke everything a bad source ever asserted in one query.
Not a vibe — a number the pipeline acts on. It ranks context, gates the candidate-hold, and gives the agent a principled reason to say “I’m not sure, please verify.” instead of confabulating.
Contradictions don’t overwrite. They supersede.
When a new fact contradicts an active one, abagraph doesn’t mutate a row. In a single atomic batch it closes the old fact (status Superseded, valid_until stamped) and opens the new one. The old fact never disappears — it just stops being current. Time-travel still sees it.
VP Product → 1 batch
Close + open commit together. There is never a moment with two active roles, or none.
Most predicates hold one active object per subject. Set-valued ones (tags, references) coexist on purpose.
Conflict resolution is scoped to your namespace. One tenant’s truth never supersedes another’s.
The superseded fact stays queryable forever. as_of and audit still find it.
From the whole store to one packet.
Bitemporal time, provenance, and supersede all converge on the call an agent actually makes: build_context. It recalls across vector, graph, relational, and temporal paths, ranks by confidence, collapses superseded facts, and trims to your token budget — one structured, source-cited packet, ready to inject.
{
"tool": "build_context",
"args": {
"seeds": ["acme-corp", "sarah-chen"],
"token_limit": 1200,
"as_of": "now"
}
}
as_of to a past instant and replay the world as it was.Agents that don’t hallucinate stale facts.
Put the four mechanics together and the failure mode disappears. The agent reads only current, high-confidence, source-cited truth — and when it isn’t sure, it says so instead of inventing.
- Reads a stale title nobody ever closed out.
- Can’t cite where the claim came from.
- Acts on a low-confidence guess with full conviction.
- Current truth — the old title was superseded, not surfaced.
- Cites source and confidence inline. Verifiable.
- Below threshold? It abstains and asks you to confirm.
The method is the moat. Build on it.
Bitemporal time, calibrated provenance, atomic supersede, and one-call compaction — in a single embeddable engine, served over MCP. Not a vector index with extras bolted on.