Not a product tour — a specification. Eight things the record must carry to survive the person who will eventually read it, whoever you buy from, including us.
Each one exists because an investigation ends on it. Miss one, and that is the question you cannot answer under oath.
The wire from the demo, as the record holds it — every field above is a field on this block.
A trail only the vendor can check is a claim. The whole exercise is what happens when someone who does not trust you runs the check.
node -e "const b=require('./evidence.json');require('fs').writeFileSync('verify.mjs',b.verifier)"
node verify.mjs ./evidence.json
✓ VERIFIED — chain intact, checkpoints countersignedThat is our export being verified offline: no account, no API call, nothing from us. The verifier recomputes every fingerprint and names the exact sequence where any edit began.
Including who can actually demand yours — where the first answer, in practice, is a customer rather than a regulator.
No, for three reasons that survive any amount of log volume: it can be edited without trace, it expires before the obligation does, and it names a service account where an investigation needs a person. A log records that something ran; a trail proves what happened.
They provide traces — excellent for debugging, built for engineers, mutable, and short-lived. Some emit OpenTelemetry spans, which is genuinely useful: a trail can be built from the same spans. The framework gives you the signal; it does not give you the evidence.
A regulator under the EU AI Act's logging duty, an examiner under SEC 17a-4 or FINRA supervision, a court in discovery, and — most often in practice — an enterprise customer's security review before they sign. The last one arrives years before the others.
The check runs without the vendor. Ours exports one self-contained file — events, checkpoints, public keys, and the verifier itself — and the auditor runs it offline. If verification requires our servers, our account, or our goodwill, the trail is a claim with extra steps.