Defaults an absent check to a passing number. The badge is green and the claim is fictional.
receipts, not screenshots
Every number names the command that actually ran.
proofpage executes your repo's real test, typecheck, build and lint commands, then writes one self-contained HTML page from what happened. A check that did not run gets no number at all.
✓ zero dependencies ✓ zero JavaScript in output ✓ Node 22+
⚠ working tree was DIRTY — uncommitted changes may not be in the commit above
54 pass · 0 fail — parsed from a real node:test summary, 7.87s
output shape unrecognised — recorded as unparsed, and deliberately not scored
no such script in this repo
no number printed2 of 2 discovered checks passed. The third row is what most tools would render as 0.
--checkthe refusal
A zero you did not measure is a lie with a number on it.
Three tools, one repo, one missing typecheck script. Only the third tells you the truth about what it knows.
Silently drops the row. You cannot tell a check that passed from one that was never wired up.
The absence is the finding. Every rule here is a test in the repo, not a policy in a README.
enforced mechanically
Four laws, each pinned by a fixture that violates exactly it.
proofpage --check <file> re-runs all four against any page, including one you did not generate.
01 A check that did not run shows nothing — not zero
0 is a measurement; printing it for "unknown" is the exact lie this tool exists to prevent.
02
Unrecognised output is marked unparsed, with the reason
node:test and tsc shapes are unambiguous enough to parse. proofpage's own lint script renders as unparsed rather than being handed a score it did not earn.03 A dirty tree is stated next to the commit SHA
04
Every <details> ships open, because print drops the closed ones
two commands
Generate it, then let CI verify it.
$ npx proofpage --out proof.html
✓ npm test exit 0 54 pass · 0 fail
✓ npm run lint exit 0 unparsed
· npm run typecheck did not run
wrote proof.html (18 KB, 0 network requests)
$ npx proofpage --check proof.html
✓ 4 of 4 structural rules hold
exit codes
0 everything measured passed 1 a check failed — this is the CI signal 2 used wrongly, so nothing was measured and nothing is claimedstated up front
What it will not tell you.
Whether your tests are any good
A green proofpage over a suite of empty tests is an honest report of a worthless suite. It measures that the commands ran, not that they were worth running.
Counts outside node:test and tsc
Vitest, Jest and pytest summary shapes are not parsed yet. Those rows are labelled unparsed rather than guessed at.
Anything about another commit
It is a snapshot, not a monitor — and the page names the exact commit and working-tree state it measured.