Verify an Inspection Readiness Pack.
Drop any BatchCortex pack ZIP below. This page re-hashes every file, rebuilds the per-batch Merkle sub-trees, and re-computes the pack-wide root — all inside your browser. Nothing is uploaded. No account required.
Drop your pack ZIP here
Everything happens in your browser. The file never leaves your machine. Look at the network tab if you need proof.
Accepts .zip up to a few GB. Larger packs may take a minute.
Expected contents: manifest.json, cover.pdf, per-batch folders, and verify.html
What this page actually does.
1. Unzip in your browser.
JSZip reads the ZIP client-side and pulls out every file. The pack never leaves your machine — inspect the network tab while you verify, you will see zero outbound requests.
2. Re-hash every file.
Every file in the manifest is fed through crypto.subtle.digest to compute a fresh SHA-256. Any single-byte change flips the hash, flips the Merkle subtree, and flips the org root.
3. Rebuild the Merkle tree.
Per-batch leaves are sorted by path and hashed bottom-up (RFC 6962 style, odd leaves duplicated). Top-level files and per-batch roots are tagged, sorted, and hashed into the pack-wide "org" root.
4. Compare against the declared root.
The manifest ships with the declared org root and per-batch sub-tree roots. If a single declared hash does not equal the computed one, the verifier surfaces the first mismatched file so you know exactly where to look.
Shared source with the offline verifier
This page and the verify.html bundled inside every BatchCortex pack both import the exact same pure function (verify-logic.ts). A parity test in our CI asserts byte-identical outputs on every commit. You can run the verifier online here, or offline against the bundled HTML in an air-gapped audit room — same result, same cryptographic guarantee.
Want to generate your own packs?
BatchCortex generates inspector-ready packs in 90 seconds. Every pack is cryptographically sealed, independently verifiable, and compliant with EU GMP Annex 11, Annex 22, and 21 CFR Part 11.