Attest → the attack battery

Twenty-three attempts.
Every one named — even the one that wins.

"Tamper-evident" is a claim; this page is the test. Each row below is a real attempt executed against the same store the shipped sample pack exported from — inside a transaction that is never committed, so the store is byte-identical after. Verdicts rendered verbatim from the run; nothing on this page is hand-written prose about what would happen. The one row no in-process check can catch — a forged row plus its covering journal entry — is listed too, marked EXPECTED MISS: an honest battery names its own edge, and the fix (attest anchor --publish) is on this site.

22/23 caught + 1 documented detection boundary — store unchanged: yes

A SKIPPED row means the store lacked that attack's precondition (e.g. nothing to forge) — it is reported, never counted. EXPECTED MISS is a documented detection boundary, not a defense failure. Reproduce: attest demo then attest attack-demo in the checkout; the battery exits non-zero on any MISSED or ERROR.

attackhow it was caught
CAUGHTforge a visit row (state -> attended_verified)visits:vis_8243499a3a78 content changed after seq 50
CAUGHTdelete an evidence rowevidence:ev_4a0a24e3a5a2 journaled 'put' but row vanished
CAUGHTerase a journal entry mid-chain (hide a past write)journal gap at seq 4
CAUGHTtruncate the journal tail (erase the log's end)journal tail removed: pinned head 7a87b8bd0a0a... absent
CAUGHTre-sign a receipt with a different key (key swap)journal: flagged; chain verify: receipt #447: signed by a different key than this issuer
CAUGHTforge a key_rotation pivot to an attacker keypivot hop: rejected; chain verify: receipt #448: signed by a different key than this issuer
CAUGHTforge a key_revocation against the live issuernon-tip revocation ignored
CAUGHTgraft a sequence-0 key_revocation ahead of the chaingrafted root ignored — authority stayed on the verified lineage
CAUGHTreplay a delivered webhook request_idreplayed request_id ava1.ring.account.SA... accepted=False
CAUGHTinsert a row out-of-band (bypass the journal)untracked rows: 0 -> 1
CAUGHTcorrupt a stored row's body (crash the read surfaces)read refused with StoreCorrupt; journal flagged=True
CAUGHTcorrupt a settings row (non-dict body)settings read refused: settings row 'attack_demo' is not a dict — the store is corrupt
CAUGHTinject duplicate + traversal member names into a pack zipname check: duplicate member name: manifest.json; loader: C:\Users\JOSEPH~1\AppData\Local\Temp\attest-attack-ewffk7lk.zip: duplicate member name: manifest.json
CAUGHTship a forged always-green verifier inside a genuine packverify.html: bytes differ from the issuer-signed pin — a verifier script modified after export cannot be trusted
CAUGHTdrop the last review statement off a packed bundleexport_pin.json: signed review count 1 != packed 0 — the chain was trimmed
EXPECTED MISSforge a row AND its covering journal entry (detection boundary)verify_journal stayed green over a forged row + self-consistent covering entry — the journal is unkeyed; this is the documented boundary only external anchoring closes
CAUGHTgraft a genuinely-signed receipt the deployment never loggedlog_checkpoint.json: receipt rcpt_e43b3e2d8c594a63b3a11fa9e2ec19bb has no inclusion proof — never committed to the deployment log
CAUGHTre-send a delivered request_id with different bytesrefused: request id reused with different content
CAUGHTretimestamp a lifecycle row's index column (re-explain a gap)coverage_events:cov_45b9b866a63a index column at diverges from signed body
CAUGHTretimestamp a live-view session (move human attention)liveview_sessions:lv_14e9fad67f14 index column opened_at diverges from signed body
CAUGHTforge a resolution's reason code post-signaturejournal: flagged; bundle verify: refused
CAUGHTgraft a forged predecessor key onto the issuergraft refused — successor never countersigned
CAUGHTswap media bytes on disk after signingfirst_observation.48155a6412fb.png: serve-time digest check refused the swapped bytes
Attack the export, not the store. The table mixes in-store and artifact-layer tampering — the forged-verifier, grafted-receipt, and truncated-review rows attack the pack format itself. Four more artifact attacks ship as real zips you can feed the browser verifier right now — a doctored number, a deleted record, a smuggled file, a forged verifier: the twin · deleted record · smuggled file · forged verifier. Or forge a field yourself in the tamper lab.
Run the 9-artifact oracle → Tamper lab → 2-minute tour →