Skip to content

Bi-Temporal Modeling

Two independent time axes on one record: when a fact was true (valid_from … valid_to) and when the system believed it (recorded_at … invalid_at). Four instants, not two.

Why it matters in a memory layer

The axes move independently, and the cases where they disagree are the ones an audit asks about. A fact stops being true while nobody is watching — valid_to in the past, invalid_at still unset. A belief is retired in error — invalid_at set, the thing still true. Under a single time field neither is describable, and "when did you stop believing this, and were you right to?" has no answer.

Having the fields is not the same as populating them. Audited on this course's corpus, 37 of 37 memories carry an event time that is simply the instant the record was written, and none records that anything ended. A field that is always a copy of another field is schema, not information.

Connections

Taught in: Two Clocks

Used in: Invariants and Drift Detection · Memory Observability · Resolving 'Last Week' · Migrating Live Memory · Temporal Knowledge Graphs · Validity Intervals

Do not confuse with: Event Time vs Ingestion Time