Verifiable Pipeline Audit Trail#
This template is the cleanest public proof path in the current toolchain. It generates audit exports, verifies a good file, and demonstrates that tampering is detected both when event data changes and when the Merkle root changes.
What Problem It Solves#
Use this template when you need to answer:
- What does a VEX audit export look like at a high level?
- How do I verify an exported audit file with the public CLI?
- What failure mode do I get if an event changes?
- What failure mode do I get if only the Merkle root changes?
Uses#
- CLI
Prerequisites#
- Rust toolchain
- A clone of the
vexworkspace - The
vexCLI available on yourPATH, or the workspace built locally
Step 1: Generate Evaluation Files#
The workspace includes a purpose-built example generator for CLI verification evaluation:
Expected files:
audit_valid.jsonaudit_tampered.jsonaudit_tampered_root.json
Expected console hints from the generator:
Artifact produced:
- Three audit exports that exercise the current verification path
Step 2: Verify the Known-Good Audit#
Expected output includes:
What this proves:
- Each event hash is internally consistent
- Each chained
previous_hashlink is consistent - The stored Merkle root matches the recomputed root
Step 3: Verify the Tampered Event File#
Expected failure:
What changed:
- The event payload was modified
- The recorded hash was not recomputed
Step 4: Verify the Tampered Root File#
Expected failure:
What changed:
- The events still hash correctly
- The top-level Merkle root was replaced
Optional: Print Event Details#
Use --detailed if you want the first ten events listed after a successful verification:
Expected detail format:
What Artifact Is Produced#
The verification artifact is the CLI result itself:
- success for an intact chain
- deterministic failure for tampered data
- deterministic failure for a tampered Merkle root
Current Limitations#
- This template proves verification and tamper detection. It does not, by itself, stand up a long-running API service.
- The exact JSON export is easiest to obtain through
AuditStore::export()or thegen_audit_cliexample rather than manual authoring. - The CLI verifies integrity of the exported audit chain; it is not a live stream verifier.