Mechanical verification: what it means and how to re-run it
Every formal claim on this site names the check that produced it, and every check can be re-run by anyone with a clone of the public repository. This page explains what mechanical evidence means here, walks through the evidence files for each of the five kernels that carry a formal claim, and lists the commands that re-run every check.
What counts as mechanical evidence
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.
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 itself. An unauditable signature from the same party that drafted the spec would add nothing a third party could distinguish from signing every spec automatically, so the evidence has to stand on its own.
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 three claim tiers
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.
enumerationproperty testingmachine-checked prooffv-statusWhere each piece of evidence lives
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.
chaingraph/kernels/fixturesnode chaingraph/kernels/golden-parity.test.mjschaingraph/kernels/__proptests__node scripts/run-proptests.mjs (zero-dependency Node)gatescripts/check-compute-proof-coverage.mjs is 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 ↗node scripts/check-compute-proof-coverage.mjs --summaryscripts/preflight.mjsnode scripts/preflight.mjserrata.jsonThe five evidenced kernels, file by file
Five kernels carry a formal claim, and the evidence guide states each claim's wording. This section walks through the evidence files behind each one: what to open, what the file actually contains, and the command that re-runs it. Links go to GitHub, and the same paths work in a local clone.
art-157 enumeration- Open the floor file. The header states the class, the kernel digest at authoring time, and that the file imports the kernel's own
compute()read-only with zero dependencies. - Inside, the kernel's LEGAL table (3 prior states by 8 action types) is copied verbatim as a declared constant, and check P1 drives all 24 combinations through
compute(), comparingaction_legaland theallowedlist against that table cell by cell. - Open the fixtures file: named vectors, each carrying inputs (
policy_parameters), the expectedoutput_payload, and agolden_hash. The fixture oracle replays each vector before the properties run. - The same shape appears in the pilot record, which states the claim tier and the kernel digest the claim was made against.
node chaingraph/kernels/__proptests__/art-157-emir-lifecycle-event-validator.proptest.mjsart-27 enumeration- Two files matter: the full enumeration sweep and the pilot record.
- The sweep's header explains its own history: the original 2026-08-09 pilot ran from a harness outside the repository, so the sweep was ported in-repo to be re-runnable by anyone. The
.exhaustive.mjssuffix deliberately keeps this 312 sweep out of the property floor's trial-sampling glob. - Inside: 12 questions with three answers each are looped over completely, 531,441 states, and an independent oracle (
specExpected()) recomputes the grade from the raw answers in a deliberately different way from the kernel's own loop, so a bug shared by both implementations would still surface as a divergence. Fourteen boundary states are checked on top of the grid. - The sweep is wired into preflight as its own step, so every push to main re-runs all 531,441 cases.
node chaingraph/kernels/__proptests__/art-27-agentic-readiness-diagnostic.exhaustive.mjsart-335 property testing- Open the floor file; for this kernel the floor file is the evidence, and the checks are named for the property each one enforces.
- P1 is monotonicity:
back_end_dti_pctnever decreases as other monthly debts rise, with income held fixed. P2 is boundedness plus fixed-threshold tier agreement: the reported tier must match the band the ratio falls in. P3 is a metamorphic identity: scaling income and debts by the same factor leaves both percentages unchanged. P4 forces floating-point boundary inputs at the ULP level. - Each property runs over the file's
TRIALSconstant of 10,000 randomized trials from a hand-rolled deterministic PRNG, and the fixture oracle replays the kernel's committed vectors from the fixtures file first.
node chaingraph/kernels/__proptests__/art-335-compute-dti-ratios.proptest.mjsart-215 machine-checked proof- Three places to look: the floor file, the pilot record, and the fv-status entry. The Dafny model is not vendored into the repository; its result, the pinned toolchain (Dafny 4.11.0, Z3 4.12.1 and 4.14.1), and the known divergence with its measured size are stated in the records.
- Inside the floor file: a fixture-oracle gate over the committed vectors (five of them, in the fixtures file), then P1 convergence-or-report, where every trial either converges or reports no rate and a silent guess is a failure, P2 termination, and P3 a differential: the kernel's converged rate must match a rate re-derived independently from the (b)(8) residual at the reported rate.
- The differential leg is where the real finding came from: the pilot's differential surfaced an odd-days compounding divergence (0.456 percentage points at 387.9% APR), the kernel was fixed, and the re-run differential now agrees to under 0.0001 percentage points across the APR range exercised.
node chaingraph/kernels/__proptests__/art-215-reg-z-appendix-j-apr.proptest.mjsart-376 hand proof + property testing- Two files: the floor file and the pilot record. The record's
classandlabelfields carry the verbatim tier wording, and itskernel_digest_at_authoringis recomputed live by the badge gate, which drops the badge if the kernel drifts. - The formal claim is a hand proof of loop termination and of the Wagner-Fischer edit-distance recurrence; the pilot record states plainly that it never ran through a proof assistant.
- The floor file exercises the properties behind that proof: P1 termination, running the dynamic program over string lengths from 0 to 2,000; P2 boundedness, the score staying inside [0,100] over 3,000 trials; P3 symmetry,
score(A,B)equalingscore(B,A)under symmetric Levenshtein; and P4 forced categorical boundaries such as empty inputs. - This kernel is the standing case of complementarity: its string-matching cost exceeds what in-guest zk proving can currently handle, so it carries a formal claim and no compute receipt, and both facts are stated on its records.
node chaingraph/kernels/__proptests__/art-376-score-payee-name-match.proptest.mjsFour 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.
How this relates to the Groth16 receipts
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 the payee-matching kernel above is the standing example: it carries a formal claim and no compute proof, and both facts are stated on its records. 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; 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.