Receipt
The story of one social post: who proposed it, what the rules said, what the client approved, and what was sent. Nothing on this page is editable by the person who wrote the post.
What the post said
Version 1 Published
Testing Backstop, an approval gate for AI-written social posts built on the Buffer API. A human approved this before it was scheduled.
The text and images shown here produce the fingerprint that was recorded when this version was proposed.
Fingerprint: 017455e5dcd77368555f2e418e332b70e2ed70654fa68512c8776eec519127de
What happened
- The person managing the account proposed version 1 (fingerprint 017455e5dcd7).
- Backstop's rules checked version 1 and it passed.
- The client approved version 1 (fingerprint 017455e5dcd7).
- Publishing started (attempt 1). All checks were run again first.
- Scheduled in Buffer.
- Published by Buffer. Open
Check it yourself
Every entry's fingerprint is a SHA-256 hash of its own contents and the previous entry's fingerprint, so changing, deleting or reordering anything breaks every entry after it. You do not have to trust this page: download the raw log and run this program, which uses nothing but Node.
// verify.mjs Usage: node verify.mjs log.json (download log.json from the "raw log" link)
import { createHash } from "node:crypto";
import { readFileSync } from "node:fs";
const canon = (v) =>
v === null || typeof v !== "object" ? JSON.stringify(v)
: Array.isArray(v) ? "[" + v.map(canon).join(",") + "]"
: "{" + Object.keys(v).sort().map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
const { entries } = JSON.parse(readFileSync(process.argv[2], "utf8"));
let prev = "0".repeat(64);
for (const [i, e] of entries.entries()) {
const { hash, ...body } = e;
const ok = e.n === i + 1 && e.prev === prev && createHash("sha256").update(canon(body)).digest("hex") === hash;
console.log("#" + e.n + " " + e.type + ": " + (ok ? "ok" : "BROKEN"));
if (!ok) process.exit(1);
prev = hash;
}
console.log("chain intact, head " + prev);
Write down or screenshot the newest-entry fingerprint above. If entries were ever cut off the end of the record, that is how it would be noticed. The log is tamper-evident, not tamper-proof: someone with full access to the database could rewrite all of it consistently, and a fingerprint you recorded earlier is what would expose that.