Proofs & checkout
Selectively reveal one file without exposing the rest, and reconstruct the exact code of any snapshot from a single, signature-bound bundle.
Selective-disclosure proofs
Because the state is a Merkle tree, you can prove that specific files were part of a signed snapshot while every other file stays an opaque, salted hash. Name one or more files and get a single self-contained proof:
kveritas prove report.pdf src/train.py configs/train.yaml # -> writes one self-contained kveritas-proof.json kveritas verify-proof kveritas-proof.json # -> VERIFIED src/train.py (run 2, train) # VERIFIED configs/train.yaml (run 1, preprocess)
The proof reveals only those files' contents; everything else appears only as commitments. It embeds the report's signed seal, so verify-proof checks it on its own - no report needed alongside it. It works across every run of a session.
report.pdf.provkey.json is a local keystore written next to the report at seal time. It holds real paths and salts and powers prove - keep it private and do not share it.Verify in the browser
A proof is a single self-contained file, so a non-technical reviewer can check it with no tools. Drop it on kveritas.org/verify and it shows, for each revealed file, a VERIFIED badge and the file's contents. You can also drop several separate proof files at once and it verifies each.
Checkout bundle
Sealing at --disclosure open writes one bundle, report.pdf.kvbundle.zip, that can reconstruct the code at any snapshot. For a multi-run session, all runs are merged into that single uploadable zip.
kveritas checkout report.pdf.kvbundle.zip run_end /tmp/out --report report.pdf # multi-run: select a run and snapshot kveritas checkout report.pdf.kvbundle.zip run2:train /tmp/out --report report.pdf
The bundle contains the source contents (content-addressed and deduplicated), a manifest per snapshot, and an index. It never contains datasets, weights, or withheld files.
Tamper-evidence
Signed with RSA-PSS over the canonical data; any change breaks the data hash.
Its hash is bound inside the signed report, so a modified bundle is rejected.
Every object is re-hashed against its manifest on checkout, so a swapped file is caught even without the report.
Verify a bundle
Always pass --report to checkout so the bundle is checked against the signature. On the web verifier, upload the report together with the bundle and the Source Bundle check reads MATCH.