Don't.
Every claim Recourse makes about a commitment is arithmetic a counterparty can run on its own machine. Credentials are what you offer when the thing itself cannot be checked.
Five things you can establish without asking us.
Each one says what it proves and what it does not. The second half is the part that matters: a check whose limits are unstated is a check you cannot rely on, because you do not know what it was covering.
- 01
The terms you signed are the terms being counted against.
Canonicalize the terms document per RFC 8785 and hash it with SHA-256. Compare it to the terms hash in the commitment. Two implementations that agree on canonical JSON get the same 64 characters or the document changed.
Does not prove: that the terms are fair, or that either party will honour them.
- 02
The history of this commitment has not been edited.
Every event carries the hash of the one before it and a signature over its own hash. Replay the chain, recompute each hash, and check each signature against the key published at /.well-known/recourse-keys.json.
Does not prove: that the history is complete. A chain with the last three events removed still verifies perfectly.
- 03
The statement you were sent is the statement that was issued.
Recompute the statement hash from the JSON you received and find that same hash in the commitment's event stream, in a statement.issued event that is part of the verified chain.
Does not prove: that the units in it are real. A claimed-basis statement counts what a vendor submitted; nothing has verified it.
- 04
Nothing has been removed from the log since the last checkpoint.
Keep a checkpoint — a signed claim of the log's size and Merkle root at a moment. Check any later checkpoint against it with a consistency proof. If a single past entry changed or disappeared, the arithmetic fails.
Does not prove: that we showed you the same log we showed your counterparty.
- —
We are not showing two different logs to two different parties.
Independent witnesses countersign each checkpoint they observe. Two checkpoints for the same size with different roots then become evidence anyone can hold, and there is no innocent explanation for it.
Not available yet. anything yet — no witness has been appointed, and until one is, a split view is undetectable from outside.
A hash chain stops you rewriting your history. It does not stop us.
Two attacks are available to whoever operates a signed log, and neither is visible from inside it. We can drop the last events from a stream and re-sign — what remains verifies perfectly. And we can show one party one history and another party a different one; each verifies alone, and the two are never compared.
Neither is fixed by a policy, an audit, or a promise. They are fixed by publishing a signed commitment to the whole log at a moment in time, and letting anyone check that today’s log still contains yesterday’s, unchanged. That is what a checkpoint is, and it is the same construction Certificate Transparency uses to keep certificate authorities honest.
recourse.dev/log
41
9f2b…c104
2026-08-28T00:00:00.000ZOrigin, entry count, Merkle root, time. Signed over exactly those bytes, so what is signed is what you can read — no canonicalization step to disagree about.
Nobody should grade their own homework in private.
These are the properties the build enforces on every change. They are not a quality claim — they are the specific things that would break loudly if they stopped being true.
What is not measured: verification accuracy, because there is no verification engine to measure. When there is one, its agreement rate against human adjudication belongs on this page, per standard and per period, including the periods where it did badly.
We are not paid more for one answer than the other.
The metering fee is charged on units metered, whether they counted or not, and never as a share of value released. A fee that arrived only when an outcome was upheld would give the party deciding disputes a financial interest in upholding them. Rejecting a unit is paid work, so we are not paid to accept.
The rules are data, versioned and public, and a ruling cites the code it applied. You can read the rule before you agree to be measured by it, and read the same file afterwards to see whether it was applied.