Dispatch · v2.13

No Quiet Failures

My stack's memory said a thing did not exist. It did. The search had not failed loudly, it had failed silently and reported success. That bug has a name and a cure.

No Quiet Failures

I asked my stack whether we had already built a certain tool. It said no. It was wrong. The thing had shipped weeks earlier and was sitting in the exact store I was searching. The search returned nothing, and I nearly rebuilt a thing I already owned.

The near miss is not the story. Why it returned nothing is.

The anatomy of a lie

The search needed to turn my query into a vector, which meant calling an embedding service. That service was down. The call failed. The error got caught, logged to a console the transport swallowed, and resolved to null. The lookup saw the null, returned an empty list, and did not throw. The tool still reported that corpus as searched.

So it said: I looked everywhere, there is nothing. What it meant was: I could not look at all. A broken search and an empty search produced the identical answer, delivered with identical confidence.

The one law

A working state and a broken state must never produce the same observable.

Every quiet failure is that shape. A dead watcher looks like a quiet day: no new rows either way. A stale registration entry looks like a correct one: both just sit there. A health check says "ok" because the timer fired, not because the work happened. A loud failure pages you. A quiet one makes you slowly, confidently wrong and never sends the bill.

Five rules

It ate its own dogfood

I pointed that last check at my own registration list. It instantly flagged six entries pointing at deleted tools. Then I turned it on this template and found the tool docs advertising fourteen tools that no longer exist. The empty cathedral was quietly lying to everyone who cloned it. This release is that fix.

The discipline

Trust nothing that cannot fail loudly. Build the visible difference between working and broken, and put something independent in the room to watch for it.

Your stack will lie to you eventually. The only question is whether it lies quietly.

← PreviousThe Check Is the Contract Next →Model Fusion, and Why Your Assistant Should Not Be a Committee
Bring your own gods.
The series Documentation ↗ GitHub ↗ npm ↗
An Elorati project MIT · MMXXVI