跳转到主要内容

WRITING

My Checker Gave 102 Green Ticks. You Opened the File to a Screen Full of Errors

August 2, 20267 min readTianli Zeng
engineeringpostmortemverificationClaude Code
My Checker Gave 102 Green Ticks. You Opened the File to a Screen Full of Errors

I shipped the file with a note: machine-checked, 102 values verified. They opened it to a screen full of errors.

My previous post argued that producing output every run does not mean the output is right. This one is the layer underneath, and it is harder to catch:

I did not just have output. I had an automated check, and the check was green.


1. The green line, and the moment they opened the file

The deliverable was a hydrology calculation workbook. Fourteen sheets, all live formulas — change one parameter and the whole book recomputes, eight charts redraw. Precisely because it moves, I did not trust my eyes.

So I built it an automated check: recompute the entire workbook with a free spreadsheet program, then compare every key number against what my separate engine computes independently.

That day it printed: 102 values all match, not a single error cell.

I shipped the file with that note attached.

The first thing they sent back:

lots of cells say #DIV/0, something's wrong, fix it

Not a few cells. Everything from the middle sheet onward.

That green line was not lying to me. It just was not answering the question I assumed it was answering.

Same file, two verdicts
Left is what I was holding when I shipped. Right is what they saw when they opened it.

2. The nickname I gave a cell collided with another cell's address

Every cell in a spreadsheet has an address. The one in column X, row 1, is called X1.

Writing raw addresses in formulas is unreadable, so spreadsheets let you give a cell a nickname. Call one cell "left offset" and write "left offset" in the formula. Far clearer.

I took the lazy route and used X0, X1, Z0, Z1 as the nicknames.

The problem: the nickname X1 happens to look exactly like an address.

Excel's rule is that a nickname may not look like an address. It does not warn you and it does not fail. It simply reads X1 in the formula as that address, and goes to fetch that cell. That cell is empty.

So the channel geometry came out as zeros, the sample count for the curve fit became zero, a division then had to divide zero by zero, and the error propagated all the way to the last sheet. That is where their screen full of errors came from.

Then why was my check green?

Because the free spreadsheet program I verified with has looser naming rules than Excel. It accepted the nickname, computed what I meant, and all 102 numbers matched.

One formula, two readings
The same formula, read two different ways. The permissive reader is the one that handed me a green line.

I had not verified that file. I had verified how something more agreeable than the real consumer reads that file.

3. Same shape, four times in two days

This was not one lapse. Counting back, the same mistake wore four different faces in two days.

The check I called greenWhat it actually coversWhere the real problem was
Recompute, 102 values matchWhether the arithmetic is rightWhether Excel accepts the notation — nickname collided with an address, screen full of errors
15 of 15 page widgets mountedWhether widgets attachedWhat got painted on the canvas — my hand-rolled cross-section had no axes, water and land the same color
Layout probe passed (not blank, no overflow, not truncated)Whether the page collapsedWhether the layout is usable — text column too narrow, one label clipped in half
Screenshot of the filter funnel: "nothing eliminated"The pixels in that one frameThe end state of a scroll-triggered animation — it never started; the real result was in the page structure

The common thread is one sentence:

Every single time I was holding a green line. That is why self-review cannot catch it — it looks exactly like "I verified this."

Something visibly broken, you fix. Something all green, you take its output and make decisions on it. The second is far more dangerous.

Four gates, four misses
Four gates each covering a slice. All four real problems landed outside every circle.

4. Make each check state what it does not cover, at the moment it reports green

The fix is not "be more careful next time." That is just billing the problem to a future version of me.

First: any check, when it reports green, must also state its coverage boundary.

I changed what it prints. It now says:

✅ 116 values match the engine, no error cells
ℹ️  Coverage boundary: this gate only answers "is the arithmetic right".
    It does NOT cover "will Excel accept this notation" —
    that is a separate static check. Both must run, or the green is fake.

Those five lines are themselves the argument: "I passed" and "you can relax now" are not the same claim, and almost every check only says the first half.

Reporting green with a boundary attached
Same check, only its printed output changed. Zero cost, and it pushes the boundary at me instead of waiting for me to remember.

Second: one thing needs at least two checks that do not overlap.

Arithmetic goes to the recompute. Whether Excel accepts the notation can never come out of a recompute, so it has to be caught before saving: scan every nickname, and refuse to write the file if one looks like an address.

Writing the guard is not the end. I put names like X1 and Z1 back in and ran it for real, confirming they were blocked and no file was written — a guard you have not verified in reverse does not count.

5. One question you can ask yourself anywhere

You do not need to remember the four cases. Just this:

Is the thing I am verifying with the same as the thing that will actually use it?

If not, you are verifying a stand-in. And wherever the stand-in is more agreeable than the real consumer, that is your blind spot — it will not raise an error. It will hand you a green line.

The same shape shows up wearing many outfits:

What I verify withWhat actually consumes itWhere the stand-in is looser
A free spreadsheet program recomputingExcelLooser naming rules
A headless browser taking one screenshotA human who scrollsNever fires scroll animations
A script I wrote to check the answersThe production code pathWritten from my understanding, not its implementation
"Does the file exist" as a deploy checkWhoever opens the pageThe file exists; the contents can be last week's
The gap between the stand-in and the real thing
That middle column is where every one of these incidents actually happened.

The line I keep in front of me:

A check reporting green only tells you that check passed. It does not tell you the thing is right.