Faultline
Graph Hacks · Track 02 · Built on FalkorDB

git for
agent memory.

Blame, diff, bisect and test what your AI agents remembered. Faultline stores every fact with its source, its time, and the edges that corrected or contradicted it — so you can see why an answer changed.

14 node labels20+ relationship types1 graph per tenant0 silent overwrites
faultline · project-atlasas of 15 Oct 09:00
SUPERSEDESsource-design-001source-change-002source-runbook-003source-slack-004region-acurrentregion-bcurrentPriyadisputedJordandisputedAtlas

01Design note records deploy_region = region-a

Agents repeat stale facts

Memory stores overwrite or summarize. When the deploy region was corrected, nothing records that the old answer was ever believed.

Nobody can say why

A changed answer has no diff. You can't reconstruct what the agent knew, or which source moved it.

Handoffs flatten doubt

The next agent gets a confident summary. The unresolved on-call dispute silently disappears.

The toolkit

The verbs you use on code, for what your agents remember.

Every command is a graph query against FalkorDB. Click any line to run it on the live Project Atlas graph.

How the graph does the work

Delete an edge and the answer changes.

FalkorDB isn't a picture of the memory. It is the memory. As-of retrieval needs the SUPPORTED_BY edge, and status comes from SUPERSEDES and CONFLICTS_WITH edges visible at the cutoff.

  • Remove SUPPORTED_BY — region-b is no longer a source-backed answer.
  • Remove SUPERSEDES — both regions stay current, and Faultline refuses to choose.
  • Restore both — the original answer comes back, byte for byte.
Run the ablation live
as_of_retrieval.cypher
MATCH (a:Assertion)-[:ABOUT]->(e:Entity)
WHERE a.observed_at <= $as_of
MATCH (a)-[:SUPPORTED_BY]->(s:Source)
RETURN a.id, a.value, s.id, s.trust_tier,
[(a)-[:SUPERSEDES]->(old) | old.id] AS supersedes,
[(new)-[:SUPERSEDES]->(a) | new.id] AS superseded_by,
[(a)-[:CONFLICTS_WITH]-(other) | other.id] AS conflicts

Benchmark

1,213 questions. Same data. Different memory.

400 generated memory stories (corrections, conflicts, unreviewed notes), questions asked before, between and after each note. Every method reads the same rows from FalkorDB; only Faultline uses the edges.

Key-value store

last write wins, no history

17.8%

216 / 1,213 correct

future values
413
untrusted
93
conflicts
0/91

Log, latest reviewed line

strongest baseline

92.5%

1,122 / 1,213 correct

future values
0
untrusted
0
conflicts
0/91

Faultline

FalkorDB edges + policy

100.0%

1,213 / 1,213 correct

future values
0
untrusted
0
conflicts
91/91
as-of read p50 4.7 ms at 17,100 nodesbisect 9 probes for 512 notesgpt-oss-20b: 46/50 with raw notes, 50/50 with Faultline evidencememory regression tests in CI on every push

Synthetic stories, so this shows the memory semantics hold end to end through the graph, not intelligence. A log that keeps only reviewed notes ties Faultline on plain corrections. Full results, scale and the LLM run are on the Bench page. Reproduce with make benchsuite.

See why the answer changed.

Scrub through Project Atlas, replay a question across snapshots, and hand the task to another agent with the dispute intact.