intrepidshape/elm-web3 1.4.4 · elm-web3-ui 2.3.1
What is actually proved
Most libraries tell you they are correct. This one shows you the machine output. Every claim below is graded by what a checker actually did — not by what a document says — and CI re-runs every checker on every change.
Four checkers, one honest ledger
A claim earns its grade from the strongest machine that has actually verified it. A Lean proof that does not compile is not a proof; a TLA+ property absent from the model-checker's config was never checked; a test that never ran is a comment. The grades, strongest first:
The fourth checker is the gallery: every state machine rendered, clicked, and redeployed on each release. Formal tools verify what a claim says; a pixel verifies what a user gets — the stack needs both, so we run both.
The coverage, counted
Every invariant in the ledger, bucketed by the strongest verification it has actually received. No bucket borrows from a stronger one — an open obligation stays in its own row until the checker closes it.
The state machines, drawn from the specs
Four state machines run every dapp built on this stack. Each diagram below
is drawn from its TLA+ specification, and every labelled invariant is one
that TLC verified over the full reachable state space of the model. The
same guards exist in the Elm code — the conformance audit maps every
update branch to its spec action, one to one.
Wallet WalletSpec.tla · Web3.Wallet
Transaction TransactionSpec.tla · Web3.Transaction
Sign SignSpec.tla · Web3.Sign
UnguardedSpec and TLC shows that last property breaking —
the id guard is load-bearing, not decorative.
ApprovalFlow ApprovalSpec.tla · Web3.Ui.ApprovalFlow
ApprovalFlowTest. Failure edges to Blocked omitted for
legibility — every in-flight state has one.
How the grades stay true
Every row in the
coverage ledger
is backed by a command you can run yourself — lean on the
proof files, check-tla.sh on the specs, elm-test
on the properties — and CI re-runs all of them on every pull request, so
a claim cannot outlive the thing it claims.
The rules are strict by design: a proof that doesn't compile counts for nothing; a spec property absent from the model-checker's config was never checked; and when a checker and a claim disagree, the claim changes — graded down the same hour, promoted back only when the checker says so. The gallery is the fourth checker: every state machine rendered and clickable, because a pixel is the one reviewer that never extends good faith.