gabrielwang.ai ← back to the workshop
Edition 018 · interactive demo

Under-counting is silent.

Any operation that runs on paper eventually asks software to read it — dockets, tickets, shift sheets, photographed and sent to a chat group each evening. The failure everyone prepares for is the wrong number. The failure that actually happens is the missing one: a row that never arrives makes no ratio wrong, breaks no total it was never part of, and leaves every consistency check reporting normal. Bend the handwriting below and watch it happen — then switch on the second axis and watch it become findable.

Honest-AI note. The parser here is a real one and really runs: the toggles rewrite the text the way handwriting actually varies, and the numbers you see are what the pattern extracts. Two things worth saying plainly. First, the list of variants is never finished — every one fixed this week is replaced by a new one next week, which is why the answer is not a better pattern. Second, reading is non-deterministic: the same photograph read twice can yield different results, so one failed read is not a conclusion about the document — it is a reason to read it again and keep the version that survives the checks.

Fictional depot The parser really runs Runs in your browser No live model call

Bend the handwriting

Tuesday's fuel sheet, as read

#What the line saysWe readPump moved

The second axis

What the checks found

01You cannot enumerate the variants

Every fix lands one shape of handwriting; next week brings another. A week of parse failures here were all writing variants and none were logic errors. Treat the pattern as a best effort, and put the reliability somewhere else.

02Put the defence on a second axis

Self-consistency cannot find what never arrived. A source that is independent of the reading — the writer's own total, the pump's meter, the count of sheets sent — is what turns "something is off" into "row four, and here is the number".

03Count in both directions

Rows in the database against sheets in the group, both ways. A whole class of data failing to arrive is invisible from inside the data — and the log line will say success, truthfully, about the part it did take.

Plain-language key (second axis, self-consistency, totaliser, non-deterministic reading)
Second axis
Any source that does not depend on the reading being right — a handwritten total, a meter, a count of documents. It is the only thing that can catch a silent omission.
Self-consistency
Checks a dataset can run on itself. Useful for contradictions, blind to absences.
Totaliser
The running counter on a pump. Because it only ever increases, the difference across an issue is an independent measurement of that issue.
Non-deterministic reading
The same image, read twice, can produce different results. So a failed read tells you about the read, not about the document — read again and keep the version the checks accept.