Immutability and versioning

Nothing on trac is overwritten. Every change to a model or dataset creates a new version rather than replacing what came before, and every calculation is captured as a permanent, reproducible record. This is the foundation that everything else in the platform — audit, lineage, and repeatability — is built on.

Model versioning

Model code is never copied into the platform. Each version corresponds to a specific commit in the source repository, and all previous versions remain accessible — see Virtualised deployment for how this works.

Data versioning

Internal storage is write-once: trac has sole write access, and every write adds a new version rather than modifying data in place. Previous versions of a dataset remain queryable at any time.

Calculation contracts

Every RunModel or RunFlow job creates a metadata record — a calculation contract — specifying the exact model version, input data versions, and parameter values used. Because everything it references is immutable, resubmitting the same contract always reproduces the same result.

Because objects and jobs are permanently versioned and cross-referenced, the full history of any object — what created it, when, and from what inputs — remains queryable indefinitely. This is what the platform calls intrinsic governance: auditability, repeatability, and self-documentation as a consequence of how execution works, rather than something enforced through separate controls.