Address review on the export manifest

↗ view on GitHub · Andy · 2026-07-31 · 18a00513

- canonicalize rejects non-plain objects. A Date serialised as {}, a
  Buffer enumerated its indices, a Map became {}. None can reach a
  manifest body today, but a silently wrong serialisation is the same
  failure class as the non-finite number already rejected, and every
  digest rests on this function.
- Validate MANIFEST_SIGNING_KEY at boot. A malformed key previously
  surfaced when a user's first export failed; it now stops startup with
  the same message, and a working key logs its key id.
- Bulk copy takes size_bytes from the bytes being hashed rather than
  inheriting it from the active version, so size and content_sha256
  always describe the same content. A verifier that stats a file before
  hashing it should not see a size that disagrees with the hash.
- README notes that soft-deleted versions stay in the manifest. Dropping
  them would weaken the attestation, but it makes their filenames and
  timestamps visible to anyone with project access, which is worth
  stating rather than leaving to be discovered.
Repository open-legal-products/mike
Author Andy <102524336+b1rdmania@users.noreply.github.com>
Authored
Parents 562a8139
Stats 5 files changed , +50 , -1
Part of Add tamper-evident project exports

Capture this commit into my fork

Download a Markdown prompt that tells Claude how to port this exact commit into your working tree. Run it via claude -p < capture-commit-18a00513.md from inside the repo you want the change in.

⬇ Download capture-commit-18a00513.md