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 Not published
Second Backstop test: if this appears on X, the edit guard failed.
The text and images shown here produce the fingerprint that was recorded when this version was proposed.
Fingerprint: b570d9531d2057cb06826cddf7d132fb9a7aaf0badec5f531a4e737d0e3951a5
What happened
- The person managing the account proposed version 1 (fingerprint b570d9531d20).
- Backstop's rules checked version 1 and it passed.
- The client approved version 1 (fingerprint b570d9531d20).
- Publishing started (attempt 1). All checks were run again first.
- Scheduled in Buffer.
- The post was changed inside Buffer after approval (text). Backstop deleted it, so it was not published.
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.