Every record has two time axes. Valid time is when a fact was true in the world — you supply it. Transaction time is when chronicle learned it — the system assigns it and never rewrites it. A retroactive correction therefore does not erase the old belief; it opens a new one above it, so “what did we believe in April that March had been?” stays answerable.
Here you drive transaction time yourself with the clock control below, so a write can
be placed at a chosen instant to demonstrate corrections. That is a teaching
affordance only — the real library assigns transaction time from the system clock and
exposes no way for a caller to write it. Attribution works the same way: the
actor is supplied here by you; a real service derives it from the caller's
authenticated identity. Intervals are half-open [from, to); an empty end
means unbounded (an open box to the right on valid time, or to the top —
“current belief” — on transaction time).
The bitemporal grid
Each box is one stored record, spanning its valid interval (→) by
its transaction interval (↑). Click anywhere to ask
Get(validAt, txAt) — the record in force at that point lights up.
As-of explorer
Write a record
The next write lands at this transaction instant.
Field history
How belief about one field evolved over transaction time, at a fixed point in the world — the single-field audit trail.
All versions
The raw log for this entity, via Query. Nothing is ever deleted; a
write closes a belief's transaction interval and opens a new one.