Handeware Enterprise

Enterprise / Notes / Falsifiable proofs

Engineering note

A proof that cannot fail is worthless.

Handeware engineering · August 2026

Every organization has a test that has been green for three years and guards nothing. It passes when the system works and it passes when the system is broken, and nobody notices, because a guard that passes both ways is a false statement everyone trusts. When the product is the guard, that failure mode stops being an embarrassment and becomes fraud.

The specific danger of a verification product

Our proof says a modeled replacement matches recorded reality. There is an obvious way to build that badly: make the comparison lenient, let ambiguity resolve toward agreement, and ship something that says PASS for every customer on every estate. It would demo beautifully. Nobody would catch it for a year — because a PASS is exactly what everyone in the room is hoping for, and confirmation bias does the rest.

So the property we actually have to hold is not "the proof passes on good estates." It is "the proof fails on bad ones, for the right reason." That is a testable property, and we test it directly.

Mutation testing the harness

A mutation test breaks something on purpose and asserts the guard notices. Ours seed one realistic corruption at a time into either the model or the history, then require two things: the verdict flips to DIVERGED, and the specific finding category is populated — because a proof that fails for the wrong reason is only accidentally right. Then the untouched baseline is re-proven, to be sure the harness has not simply become a machine that says DIVERGED.

Seeded corruptionReal-world analogueRequired finding
Drop one dependency edge from the graphA dependency the model missedmissing — jobs history ran that the engine never reached
Flip a job's recorded status to FAILUREA night that went badlystatus_mismatch, plus containment_break for what ran downstream
Move a start time before its prerequisite endedA force-start, or a wrong dependencyorder_finding, naming both jobs
Append a downstream job to a failure nightSomebody released the hold at 3 a.m.containment_break, naming the job
Remove a job's history row entirelyAn incomplete exportunexpected — the engine would run what history shows idle
Add a job history knows and the model does notA chain outside the modeled sliceCoverage gap; the day cannot pass

Beyond the hand-written cases, a generator builds twenty-five random job graphs with matching clean histories — all must PASS — and then the same twenty-five each carrying one seeded violation — all must DIVERGE. It is deterministic from a fixed seed, with no wall-clock anywhere, so a failure reproduces exactly rather than "sometimes on Tuesdays".

All of it runs in continuous integration on every change, alongside a gate that executes the real command-line tool against a deliberately corrupt fixture and fails the build if the exit code is not 2. If our proof ever loses the ability to say no, we find out before you do.

Check our work in about a minute

Do not take the previous section on faith — the entire point is that you should not have to. Run a proof that passes, then lie to it:

# 1. a clean window — expect PASS, exit 0
handeware-prove ./estate/wire_eod.jil --history ./history.csv --out ./proof-clean

# 2. append one lie: a job that "ran" downstream of a failure
cp ./history.csv ./history-lie.csv
echo "WIRE_EOD_GL_POST,2026-03-10,SU,20:00:00,20:04:00" >> ./history-lie.csv

# 3. re-prove — expect DIVERGED, exit 2, naming that job
handeware-prove ./estate/wire_eod.jil --history ./history-lie.csv --out ./proof-lie
echo $?

If step three does not diverge and name the job, the tool is broken and you should stop using it — including on our own published artifacts, which are exactly this experiment run in public: the passing proof and the diverging one.

Where this discipline came from

Not from theory. Our engineering rules were each bought with a real failure: a pipeline that reported success because output was piped into another command and the exit code was swallowed; a verification that passed against source while the shipped artifact was stale; guard tests that passed in both directions. The rule that survived is the one that applies here — break the thing it guards and watch it fail, then restore it and watch it pass. Anything less and you have a green checkmark, not a guarantee.

Which is the whole business, really. Anyone can produce a document that says PASS. The question a control function should ask any vendor holding one is simple: show me it saying no.

See both verdicts

The same estate, one appended lie apart. Published together, on purpose.

Read the evidence →