SOP-07 — Daily self-audit and timestamp anchoring

Owner: Owner-operator (Document Owner and Records Owner for every SOP; no delegate exists). Version 2026-10-08 · effective 2026-09-20 · reviewed every 180 days · last reviewed 2026-10-08 · next review due 2027-04-06.

Purpose

Prove each day that the registry has not been altered and that each day's receipts existed by that day.

Scope

All non-withdrawn registry rows; the daily archive digest.

Procedure

  1. Daily job (armed by Sentinel if missing after 11:00 UTC): recompute SHA-256 of every stored body and compare with the registry hash; any mismatch is a Class B incident.
  2. Build the day's archive: the sorted list of the day's receipt hashes and its digest; submit the digest to OpenTimestamps calendars; store the .ots proof when returned; re-submit on later days until a Bitcoin attestation exists.
  3. Publish the run at /audit (Daily Replay) with counts, mismatches, the archive digest and the proof state. A proof pending is shown as pending, never as attested.
  4. Serve the proof per hash at /api/public-record/archive-hash/prove/{sha256}; anyone may verify with an OpenTimestamps client.
  5. Known-answer drill (weekly, plus on demand): draw one row at random from each held file (LEIE entity, SAM firm, state entity, OFAC non-individual, UFLPA), build an ordinary receipt for the printed name, and publish at /case-studies whether that row printed (found / NOT FOUND / source did not answer) with receipt id and hash. A NOT FOUND or pipeline error opens a Corrections ticket. Draws skip names that read as individuals even where the file labels the row an entity; any such name already drawn is withheld on the public page (SOP-05).

Records this procedure produces — and who keeps them current

RecordWhereUpdated byUpdate triggerRetentionPublic
Self-audit rundb.self_audit_runssystemdailyindefiniteTrue
Day archive + .ots proofdb.archive_dayssystemdaily; re-submission until attestedindefiniteTrue
Known-answer drill rundb.known_answer_runssystemweekly + on demandindefiniteTrue

Evidence

/audit · /verify · /case-studies

Change log

DateChange
2026-10-06Written as SOP.
2026-10-06Known-answer drill added to this SOP (it ran since 2026-10-06 without a written procedure). First production run drew a state row labelled 'entity' whose name reads as an individual → draws now skip person-like names; such names are withheld on /case-studies.
2026-10-08Each daily self-audit entry now carries a detached Ed25519 signature over its entry_hash under the platform key (DID document, SOP-11); /api/audit/verify checks chain and signatures and counts earlier unsigned entries as predating the key.

Quality Manual · All SOPs · Records Register