Bench / Reading room
The ledger
Evidence that outlives the conversation.
Bench's ledger is a tamper-evident, append-only record of every verdict rendered on every governed change. Each entry stores the full diff, the PASS or VETO ruling, and the SHA-256 hash of every constitution file that ruled, and each entry is chained to its parents by hash. An AI session ends and its context vanishes; the ledger is the part that remains, permanent, traceable, and independently verifiable.
Holdings
- Every verdict is appended, pass and veto alike; the record is complete, not curated.
- Entries are files named by their own hash, forming a DAG that git merges cannot corrupt.
- Verification fails closed on five named defects rather than degrading silently.
- Immutability has exactly one lawful escape: whole-chain retirement, by a human, on the record.
- The claim is tamper-evidence, not tamper-proofness. Evidence you can verify beats a promise you cannot.
Append-only by construction
The ledger is two segments: a frozen legacy array that nothing writes, and one file per entry, named by its own hash, forming a directed acyclic graph. Frozen files cannot conflict; new entries name their parents. There is no merge command, because reconciliation is just the next hash-linked entry: every append names every current tip, so a chain forked by a git merge reconciles itself with the next governed edit.
Naming each file by its own hash makes tampering self-announcing. Alter an entry's content and its name no longer matches its hash; delete one and its children point at a missing parent. The design does not prevent tampering. It guarantees tampering leaves marks.
Verification fails loudly
Walking the chain fails closed on every defect it can detect, each with a name:
- MISSING_PARENT
- ORPHAN_ENTRY
- DUPLICATE_ENTRY
- FILENAME_MISMATCH
- MULTIPLE_GENESIS
A verification that shrugs is worse than none, because it launders a broken chain into a trusted one. Run it yourself on any governed project:
python -m cli verify python -m cli stats
The one lawful escape: retirement
Constraint C-008 forbids editing, reordering, or removing entries under all circumstances. It permits one narrow exception: a whole chain may be retired, never edited, and only when it contains content that must not be published.
Bench's own history exercised it. On 2026-07-24, a globally registered hook had written diffs from unrelated projects into Bench's ledger, so the chain held third-party source that could not be published. The predecessor chain was archived whole and verified before anything moved: 2,471 entries, tip 2176516f. The current chain opens with an anchor entry recording where it went. Retirement cannot be run from inside a Claude Code session; it requires a human at a real terminal, typing a confirmation phrase. The audit trail of that event is itself checkable:
python -m cli audit-retirement
Why an audit trail changes the economics
Without a record, a dispute about what an AI coding tool did reduces to memory and screenshots. With a hash-chained ledger, the question becomes checkable: which change, which verdict, which constitution hash, argued by whom. The full diff of every governed change is on the record, which is also why a governed project should decide deliberately whether its ledger is committed or ignored; committing a ledger to a public repository publishes every diff it recorded.
The ledger is the fourth stage of the procedure: challenge, defend, rule, record. The three stages before it are what give the record meaning, and the record is what makes governance more than a conversation. Implementation source: github.com/Nuralyn/Bench.