Changelog

Every release. Every edit shown.

Edit one, and it shows. Each release is checked against its text as first published (pinned from git on 2026-10-07). Corrections are shown, not hidden.

8 of 9 match their pinned hash

2026.08.31 corrected 2026-09-07 It said the row-level-security migration was complete, on every query. It was not; /security always said it was partial.

  1. 2026-10-192026.10.19

    /migrate/openai-evals previews an OpenAI Evals import in the browser before you sign up.

    seq 9 · f38711817f2b… ← 93f9f315bdfc…

  2. 2026-10-172026.10.17

    Run ids beginning demo- or sample- are now refused at ingest: they are reserved for Runback's own sample runs.

    seq 8 · 93f9f315bdfc… ← 46b2415547d0…

  3. 2026-09-072026.09.07

    Community edition published and tagged v0.1.0; replay and the audit ledger are free on every plan; database row-level security enforced.

    seq 7 · 46b2415547d0… ← 42254c75fdba…

  4. 2026-09-012026.09.01.2

    Published clause-by-clause regulatory maps for six more frameworks.

    seq 6 · 42254c75fdba… ← 4fa97a75498e…

  5. 2026-09-012026.09.01.1

    Added a live public verification badge for the audit ledger.

    seq 5 · 4fa97a75498e… ← 4e1fd980b95d…

  6. 2026-09-012026.09.01

    Live hover tooltips on every dashboard chart; removed remaining static/placeholder data.

    seq 4 · 4e1fd980b95d… ← 38e9307e7152…

  7. 2026-08-312026.08.31.2

    Published a measured onboarding number instead of an unmeasured claim.

    seq 3 · 38e9307e7152… ← 29be73a016d3…

  8. 2026-08-312026.08.31.1

    Shipped Go SDK Phase 1: event capture, redaction, and cassette hash-chaining.

    seq 2 · 29be73a016d3… ← cd359afd6ab9…

  9. 2026-08-312026.08.31

    Advanced the tenant-isolation (RLS) migration and added session revocation.

    seq 1 · cd359afd6ab9… ← genesis

    text of 2026-09-01: 7e59a376a019… · corrected 2026-09-07 to cd359afd6ab9…

Recompute it

Check it yourself with one command.

Recompute the changelog chainShell
curl https://runback.dev/api/changelog | node -e '
const crypto = require("crypto");
const sha256 = s => crypto.createHash("sha256").update(s).digest("hex");
function canonical(v) {
  if (v === null || typeof v !== "object") return JSON.stringify(v) ?? "null";
  if (Array.isArray(v)) return "[" + v.map(canonical).join(",") + "]";
  return "{" + Object.keys(v).sort().filter(k => v[k] !== undefined)
    .map(k => JSON.stringify(k) + ":" + canonical(v[k])).join(",") + "}";
}
let data = "";
process.stdin.on("data", c => data += c);
process.stdin.on("end", () => {
  const { entries, pins } = JSON.parse(data);
  let prev = "";
  for (const e of entries) {
    const { seq, prev_hash, entry_hash, ...release } = e;
    if (prev_hash !== prev || sha256(prev + canonical(release)) !== entry_hash) {
      console.error("BROKEN at seq", seq); process.exit(1);
    }
    const pin = pins[release.version], h = sha256(canonical(release));
    if (!pin || h !== (pin.corrected ? pin.corrected.hash : pin.hash)) {
      console.error("EDITED at seq", seq); process.exit(1);
    }
    prev = entry_hash;
  }
  console.log("chain intact;", entries.length, "entries match their pins");
});'
Honest limits

What this page does not claim.

  • Not a git logThese are curated, customer-facing release notes, not a raw git log — a chain over a summary we wrote is not proof the summary is complete.
  • Pins live with the textThe pinned hashes are literals in the same repository as the releases. An edit to a release fails here until someone also changes its pin, and that change is a diff in our git history, which is private. Archive /api/changelog if you want your own copy to hold us to.
  • Chain history2026-09-07: 2026.09.07 was inserted at the head of the chain instead of the tail, which re-hashed every earlier entry. 2026-10-07: Moved to the tail, in date order. Chained hashes served before this date differ; content pins do not. 2026-10-07: Content pins computed from git history for every release.
  • No timestampingThere is no independent time-stamping on these entries the way there is for audit-log checkpoints (RFC 3161 witnessing, a public transparency log). This chain proves internal consistency — that nothing here was silently altered — not that it existed by a given date beyond git's own commit history.