Provenance and Audit Trails
Recording the complete lineage of data and results so that any output can be traced back to its origins and every change is accountable.
What provenance is
Provenance is the recorded history of a piece of data: where it came from, what transformed it, and in what order. An audit trail is the immutable log of who did what and when. Together they answer the question a reviewer always asks: how do I know this number is what you say it is, and where did it come from?
What a good record captures
- Origin of every input dataset and its version
- Every transformation applied, with the code and parameters used
- The order and dependencies of operations
- Who initiated each step and when
- A tamper-evident log so the record cannot be quietly rewritten
Why immutability matters
An audit trail that can be edited without trace is not evidence. Tamper-evidence, often achieved by chaining records with cryptographic hashes so any change breaks the chain, turns a log into something a skeptical party can rely on. The point is not secrecy but detectability: alterations become visible.
import hashlib
def chain(records):
prev = '0'*64
for r in records:
payload = prev + repr(r)
r['hash'] = hashlib.sha256(payload.encode()).hexdigest()
prev = r['hash'] # each entry seals the one before
return records
Provenance versus reproducibility
Provenance tells you the history of a result; reproducibility lets you regenerate it. They reinforce each other: provenance identifies exactly what to re-run, and successful reproduction confirms the provenance is complete. Kronos pairs the two so that a design number and its full lineage travel together.
Kronos framing
For licensing and external review, provenance turns 'trust us' into 'check for yourself.' Every reported design figure links to the data, code, and steps that produced it, which is what makes independent verification possible.