conf 0.70what we believed then, about then
Every fact in InvariantDB carries two clocks. One tracks when it was true in the world. The other tracks when the system learned it. They move independently — because reality and record-keeping move independently.
That's why the same query, at different clocks, returns four different answers — and every one of them is correct. What did we believe at the time? What do we believe now? What was true then? What is true now? One line of Cypher, four provable answers, one audit chain that doesn't move.
“What did the system know at that time?” Drag the two sliders. The top one moves recorded time — when the system learned the fact. The bottom one moves valid time — when the fact was true in the world. Watch the same Cypher query return different answers at different clocks. The audit chain doesn't move.
The same query. belief-99 was revised on 2026-06-01 — from HIGH_RISK to LOW_RISK after KYC completed. Ask what the system knew before the revision → HIGH_RISK 0.70. Ask what it knew after → LOW_RISK 0.95. Both are true. Both are provable. The chain never rewrites.
Most databases track one clock — now. That's fine for a shopping cart. It falls apart the moment someone asks “why did we act on this?” six months later. InvariantDB tracks both clocks natively, on every fact.
The customer's KYC status became verified on 2026-06-01. That's a fact about the world — it happened whether or not any system captured it in the same instant.
Valid time answers “what was true then?” You can backdate it, forward-date it, and slice a fact's validity window without touching the audit trail.
The KYC document didn't arrive at the risk service until 2026-06-03 at 14:22 UTC — two days later. That's a fact about our record-keeping, not the world.
Recorded time answers “what did we know?” It's monotonic, append-only, and hash-chained. You cannot rewrite what the system knew — you can only append a new revision.
Pin recorded time and slide valid time. Pin valid time and slide recorded time. Do both. That's the four quadrants of bitemporal — and it's what separates an audit-grade store from a snapshot-and-hope-for-the-best one.
conf 0.70conf 0.70conf 0.70conf 0.95AT VALID and AT RECORDED
Two clauses, one Cypher pattern each. Attach either or both to a MATCH pattern. The engine rewinds the store to that clock before pattern matching begins.
MATCH pattern — they immediately follow the pattern and rewind the store before the pattern is executed. They do not attach to WITH, WHERE, or RETURN. Put filters and projections after the clock clauses.
The scenario every regulated team lives with. Auditor walks in. Points at a decline. Wants to know: why did the system decide that? On March 5 the risk service returned HIGH_RISK. On June 1, after KYC, the same customer is LOW_RISK. Both facts live in InvariantDB. Neither one erases the other.
Ask the store to rewind to March 5. The KYC document hadn't arrived yet. belief-99 was on revision 1, backed by two source episodes. The service returned HIGH_RISK with 0.70 confidence — and the decline queue kicked in.
Ask the store with no clock clause. It returns the latest revision — the one recorded after KYC verified the customer on June 1. Confidence is 0.95. The old revision is still there, still queryable, still hash-chained. Nothing was overwritten.
The interactive demo. Drag the March 5 scrubber, watch the same Cypher line reconstruct what the system knew at that instant. No signup.