Provenance & privacy
Every run is recorded as a signed timeline of content-addressed snapshots - what the working set looked like at run start, at each phase, and at run end, and what changed between them. You choose, per run, how much of it is revealed.
The provenance timeline
At each boundary K-Veritas hashes the tracked source files into a Merkle root and links it to the previous one, forming a tamper-evident chain. The result is a timeline you can read (what happened, when, what changed) that is bound into the report signature - so it cannot be edited after sealing. It is shown on the report's PDF and in the web verifier.
Disclosure levels
Set the level at init. It controls what the report reveals - never what is committed (integrity is always bound).
| redacted (default) | File names are stable pseudonyms (file#1, file#2). No names, no content. Proves what changed and when without exposing code or filenames. |
| names (--show-names) | Real file names, still no file content bundled. |
| open (--disclosure open) | Real names plus a checkout bundle: the code contents, so anyone can reconstruct any snapshot. |
kveritas init # redacted (default) kveritas init --show-names # real file names, no content kveritas init --disclosure open # names + checkout bundle
What a redacted report never contains
No source code, no file names, no datasets, no model weights, no command line, and no salt. The attestation server is zero-knowledge - it only ever receives a hash to sign. Leaf hashes are salted with a per-file key that stays on your machine, so a published hash cannot be guessed back to known content.
Withholding files: .kveritasignore
Put patterns in a .kveritasignore file (gitignore-style) to keep files out of any bundle - e.g. a secrets directory or a proprietary module:
# .kveritasignore secrets/ *.key proprietary_model.py
A withheld file is still committed as a hash-only leaf, so its integrity is bound and it is listed in the report as withheld - you can never silently drop a file. Its content never enters a bundle and cannot be reconstructed by checkout. Secrets like.env and key files are excluded by default.
Its hash is in the signed tree.
It appears in the report's withheld list.
Its contents are in no report and no bundle.
Reading the report
On kveritas.org/verify a sealed experiment shows a Provenance Timeline (with the disclosure level and a withheld panel), Attested Artifacts, and, for multi-run sessions, every run. The CLI prints the same tree with kveritas verify report.pdf.