Bi-Temporal Knowledge Graph: Why Facts Get Invalidated, Not Deleted
Notion, Google Docs, Miro — they all work the same way: new information replaces old. You discover a competitor raised pricing from $8 to $10, so you update the entry. The old figure disappears entirely.
That’s not just a UX problem. The historical context disappears with it. You lose the ability to understand why past decisions were made based on information that’s now known to be wrong.
Two Dimensions of Time
The bi-temporal model tracks two separate timestamps:
valid_at— when a fact became true in reality. “Miro costs $10” has valid_at = March 1stinvalid_at— when it stopped being true. The old “$8” fact gets invalid_at = March 1st — marked, not deletedcreated_at— when you learned it, which might be weeks after the actual change
The gap between valid_at and created_at is “awareness delay” — itself a useful signal worth tracking.
What Happens When Facts Conflict
January: You record “Miro costs $8/month.” System creates an edge with valid_at = January.
March: You learn “Miro raised prices to $10.” The system:
- Finds the existing pricing edge
- Semantic comparison: $8 ≠ $10, same attribute — that’s a contradiction
- LLM confirms: replacement, not addition
- Old edge gets invalid_at = March
- New edge created: $10, valid_at = March
Both facts stay in the database. You can now query: “What changed over three months?” or “What did we believe when we set our own pricing?”
Automated Contradiction Detection
A pipeline fires with each new fact:
- Semantic similarity — compare new fact embeddings against existing ones
- LLM arbitration — supplementary, clarifying, or contradictory?
- Temporal resolution — mark old facts invalid, establish new ones, link contradiction edges
- User alert — surface the conflict with historical context
Temporal Evolution as an Artifact
As invalidations accumulate, a new artifact emerges: the cognitive evolution path. How understanding shifted from February’s 30% growth projection to March’s 12% revision to April’s B2B stagnation assessment. This is genuinely useful for retrospectives.
Decay: Forgetting as a Function
Each node carries a confidence score (0-100) that decays monthly for unconfirmed facts. Repeated mentions reinforce it. Facts that fall below threshold get archived. This mimics how memory actually works — knowledge without reinforcement loses relevance over time.
Where This Architecture Comes From
The design adapts concepts from Graphiti, a three-layer temporal memory system for LLM agents. Extended with decay mechanisms and promotion logic — facts can elevate from project-level to organization-level when they appear across multiple projects.
Knowledge evolves constantly. Databases should evolve with it.
Deleting old facts erases memory. Invalidating them preserves understanding of what changed and why. Those are completely different things.