chronicle

bitemporal entity history — a clickable playground

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).

Start with a story:

The bitemporal grid

Colour by

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

Resolving…

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.

Loading the chronicle engine…