Mechanical verification

Mechanical verification: claims that come with a re-run

A signature vouches for a claim; it does not show you anything. This page explains the standard we hold verification evidence to, the ladder of claim tiers that standard produces, and links to the exact files in the public repository that carry the evidence, together with the commands that re-run every check.

What mechanical means here

Three properties, all of them checkable by you

Evidence counts as mechanical when three things hold. The claim names the check that produced it, so there is never a verdict floating free of its instrument. The check reads artifacts committed in the public repository, so what it read can be re-read later, byte for byte. And the check is deterministic, so anyone who re-runs it gets the same verdict: pass, fail, or a specific finding, never a matter of taste.

Where a human judgment genuinely exists, chiefly whether a written specification faithfully reads the regulation it claims to implement, we do not paper over it with a signature. The spec is instead validated mechanically: it must reproduce the kernel's committed fixtures, and where a regulator publishes its own worked examples (the APR rules in Regulation Z Appendix J, for instance), the spec must reproduce those too. What remains judgment after that is stated on the claim, not signed away. A signature nobody can audit, from the same party that drafted the spec, adds nothing a third party could distinguish from bulk-signing every spec in the building.

Stacking independent mechanical evidence sources is standard practice where correctness claims have to survive auditors: conformance suites built from the rule-maker's own computed answers (the approach NIST's cryptographic validation program takes), differential testing against an independently built implementation, metamorphic identities that must hold across whole input families, and machine-checked proofs discharged by a small trusted checker. The checks below use all of these.

The claim ladder

Three tiers, each saying exactly what was done

Every formal claim about a kernel carries one of three tier statements, word for word, so the strength of the claim is never implied by vocabulary. These are the tiers; the kernels currently carrying each one are named on the formal-verification evidence guide, and no kernel outside that list carries a formal claim of any kind.

Tier 1 enumeration
Verified by exhaustive enumeration (all N inputs). The kernel's declared input space is finite and small enough to compute completely: every combination is run and checked against a mechanically validated specification, with zero failures. Nothing is sampled; the artifact of the run is the proof.
Establishes the output matches the validated spec for every input in the declared space. The space is stated on the claim, and the count is part of the wording for a reason.
Tier 2 property testing
Property-tested over stated ranges. Properties that must hold for every input, identities, invariants, boundary behavior, are checked over stated ranges by a property floor that runs in CI on every kernel edit. A failure is tagged as a property failure or an oracle disagreement, and a property that can never fail is tracked in a public backlog rather than counted as coverage.
Establishes the properties held everywhere the ranges reached. It is evidence over the ranges, not a proof over all inputs; the ranges are part of the claim.
Tier 3 machine-checked proof
Machine-checked proof (Dafny). The algorithm is ported to Dafny and the Z3 solver discharges stated proof obligations against a specification written from the regulation text directly, never from the kernel's code. The port is then differentially tested against the shipped kernel, because the proof covers the port and the differential covers the gap between port and kernel.
Establishes the stated obligations hold for all inputs, under the proof's assumptions, which are published next to the claim: spec validation status, the port gap, and the pinned prover toolchain.
The claim record fv-status
Which tier each kernel carries is recorded machine-readably in a digest-named JSON file in the repository: per-kernel tier, the scope and assumptions behind it, and a check of the record against the public errata feed. A kernel absent from that file is unassessed, which is a neutral fact, not a negative claim.
Establishes a single answer to "what exactly has been verified", readable by a script instead of by trust.
The evidence

Path by path, in the public repository

Every layer of evidence behind these claims is a file (or a whole directory of files) committed to the public repository. These are the paths, and what each one carries.

Golden fixtures chaingraph/kernels/fixtures
One committed JSON per kernel: fixed inputs together with the exact output the kernel must produce for them. A gate replays every fixture on every change and fails the build if an output moves. Browse the fixtures ↗
Re-run node chaingraph/kernels/golden-parity.test.mjs
The property floor chaingraph/kernels/__proptests__
One property-test file per kernel, plus the shard manifests that staged them, over six hundred files. The runner executes each as its own process and aggregates verdicts; the floor's denominator is derived from git's index, so deleting the directory turns the floor red instead of green. Browse the property files ↗
Re-run node scripts/run-proptests.mjs (zero-dependency Node)
Compute-proof coverage scripts/check-compute-proof-coverage.mjs
The gate behind the Groth16 receipts: it classifies every node's receipt, rejects malformed ones (including a valid seal over a failed run, caught structurally since August 2026), and holds coverage to a committed ratchet baseline that can only improve. Read the gate ↗
Re-run node scripts/check-compute-proof-coverage.mjs --summary
The full gate suite scripts/preflight.mjs
Every hard gate, run in CI order: JS syntax, hash parity, index sync, dead links, count drift, spec conformance, copy rules. This is the same suite CI runs on a pull request, so a change that passes locally passes there. Read the runner ↗
Re-run node scripts/preflight.mjs
Corrections errata.json
A public, dated errata feed, and a page that renders it. The claim records carry a trust check against this feed, so a claim whose basis has been corrected does not silently keep circulating as trusted. Read the errata
Establishes corrections travel with the claims they correct, instead of living in a changelog nobody connects.
The method docs
How the pipeline works end to end, with the same wording as the claims: the formal-verification evidence guide, a seven-panel process explainer, the public note on how the property floor is run and scored, and the methods overview that places all of it next to the other checking mechanisms.
Establishes the same claims are worded the same way on every public surface that makes them.
Run it yourself

Four commands, from a fresh clone

The checks are plain Node with no package installation. Clone the repository and run any of them; each exits zero on pass and non-zero on any failure, which is the whole interface.

git clone https://github.com/PostOakLabs/ainumbers
cd ainumbers

node chaingraph/kernels/golden-parity.test.mjs        # replay every golden fixture
node scripts/run-proptests.mjs                        # run the property floor, every kernel
node scripts/check-compute-proof-coverage.mjs --summary   # compute-proof coverage vs its ratchet
node scripts/preflight.mjs                            # the full gate suite CI runs

The last one drives the complete pipeline and touches more surface than the three above it; the three targeted checks are the fastest way to see the evidence machinery move. Results are deterministic, so your run should match CI's verdict for the same commit.

Where this meets the receipts

Two kinds of evidence, two different questions

Mechanical verification is about the logic: does the kernel compute what its validated specification says, for the inputs the claim covers. The Groth16 receipts are about the execution: was this published output actually produced by running this program. A kernel can carry either, both, or neither, and the coverage gate knows which. Neither kind of evidence substitutes for the other, and a kernel whose fuzzy-matching cost exceeds what in-guest proving can currently handle is the standing example: it carries a machine-checked formal claim and no compute proof, and both facts are stated on its claim record. This evidence does not answer whether the regulation means what its worked examples show, a question neither a machine nor a signature has ever answered, and it stays inside the input spaces and ranges named in each claim. Whether a tool is right for your situation is a different question again; see Terms & Reliance for the full disclaimer.

Sources: on oracle-aware evidence stacking, Chen, Kuo, Liu, and Zhou, Metamorphic Testing: A Review of Challenges and Opportunities, ACM Computing Surveys, 2018. On small trusted checkers, Klein et al., seL4: formal verification of an OS kernel, SOSP 2009, project documentation at sel4.systems. Dafny: Leino, Dafny: an automatic program verifier for functional correctness, 2010, tool and documentation at dafny.org. NIST cryptographic validation program, csrc.nist.gov, accessed September 2026. All statements on this page are as of September 2026.