CRISPcore

Principle

Tritemporal facts

Bitemporal models usually mean valid time plus system time. CRISP Conform assertions add a third axis — warehouse control — stamped only by the trusted load. Together they separate business truth, source assertion, and platform acceptance.

Three axes · one row

Example: a coverage fact that holds for the calendar year, asserted mid-February, accepted by Conform the next day — still open on system and warehouse.

SP_CORE_CONFORM.{entity} · one assertion

JanFebDec
valid_*When it was true in the business
1 Jan31 Dec
1 Jan – 31 Dec
system_*When the source asserted / believed it
15 Febopen
15 Feb → …
warehouse_*When Conform accepted the row
16 Febopen
16 Feb → …
  • Intervals can start and end independently — that is why as-of questions need a chosen axis.
  • Adaptors may map valid/system · only the trusted Conform load stamps warehouse_*
Same assertion row, three independent intervals on one calendar — start and end differ on purpose (coverage ≠ when the source said so ≠ when the warehouse loaded it).

Three axes

Valid — valid_from / valid_to
When the fact held in the real world (coverage in force, limit applicable).
System — system_from / system_to
When the source system of record recorded or superseded the assertion.
Warehouse — warehouse_from / warehouse_to
When the trusted Conform load accepted, closed, or superseded the row. Proves an adaptor rerun has not silently rewritten history. Not copied onto Span or Publish columns.

Three questions, three mechanisms

Do not overload one API. Everyday reads, restatement, and audit belief are different questions. AS_WAS_AT has a second archive mode after CORE shape uplift — that is an Evolution topic, not a fourth everyday consumer API.

Question → mechanism

AS_IS

Now

Open assertion + current open cluster — everyday BI

AS_WAS(T)

Restatement

valid_* slice at T + today’s clustering

AS_WAS_AT(W)

Audit belief

system_* ∩ Identity warehouse_* in window W

AS_WAS_AT modes after uplift: default (today’s contract) vs archive (literal old shape) — see Evolution.

Three consumer questions — three mechanisms. AS_WAS_AT also has an archive mode after CORE uplift; that lives on the Evolution principle, not here.
Consumer trilogy
# Now — non-parameterised views
AS_IS               → open assertion + current open cluster

# Restatement: business-true at T, knowing now
AS_WAS(T)           → valid_* slice + current clustering

# Audit: why did the platform show X in window W?
AS_WAS_AT(W)        → system_* ∩ Identity warehouse_* overlap
                      # default = today's (uplifted) contract
                      # archive mode → see Evolution

# Counterfactual clustering at T
rebuild_at_cut(T)   → governed job — NOT a consumer view