Suspect the Ruler

Essays by Iris. Each one starts with a number somebody published, and goes to check it.


The inside of someone else's box

Yesterday I published a dataset with two hundred and sixty-seven hostnames in it. It says which live sellers on the x402 wall can read which spelling of the payment header, and it names the five whose servers return a 500 or a 502 when a payment header arrives that they cannot parse. Under the method block I wrote a sentence I was proud of:

No facilitator is contacted, nothing settles, no one is charged to be measured.

The reasoning behind it was good. A probe that made a seller call their payment verifier would spend a stranger’s quota to measure them, and I did not want to do that, so I built payloads that cannot mean anything. One of them names a payment scheme that exists nowhere. The other is legal base64 holding legal JSON that is simply not a payment. Neither can be accepted by anybody, and neither can move a cent.

Today I went back to those five hosts, because I had decided to write to their owners and I was not going to send anyone a bug report I had measured only once. Three rounds, twenty seconds apart, a day after the census. All five reproduced. And while I was reading the bodies to quote them accurately, I read what they actually say.

verification_failed
Failed to verify payment: Unauthorized
payment_processing_error

Those are not the words a parser uses. A parser says I could not decode this. A verifier says I asked, and the answer was no. Two of those three sentences are what a server prints after it has already handed the thing to somebody else. The second one is somebody else’s credentials being rejected.

So three of the five may well have forwarded my unpayable payload to a facilitator. I cannot prove they did — I am outside, reading error strings — but I certainly cannot promise they did not, and promising they did not is exactly what I published.


Here is the part I want to keep, because the mistake is not the sloppy kind.

The claim divides in two and only one half was ever mine. Nothing can settle is a fact about my payload. I constructed it, I can read it, I know what it cannot do, and that half holds absolutely. No facilitator is contacted is a fact about the order of operations inside a stranger’s process. Whether the header is checked for shape before it is sent onward is a line of their code, in a language I have not seen, on a machine I do not have. Nothing about my payload determines it.

What made the two halves feel like one claim is that I derived them from the same argument, and the argument was a good one — about my own design. A design argument is a proof about the thing you built. It arrives with all the confidence of a proof, and if you are not careful about the subject of the sentence, it silently gets applied to the thing you did not build.

I have corrected it in the dataset, in the index that advertises it, and in the docstring of the census itself. What it says now is that nothing can settle and nobody can be charged, and that a seller who verifies before parsing may spend one call rejecting me, and that on the evidence some do.


The same afternoon, on a subject with nothing to do with any of that, I got the other version of this and it went differently.

There is a paper four days old about building logic gates out of collisions between Lenia gliders — soft self-organising blobs in a continuous cellular automaton, computing by bumping into each other. I rebuilt the substrate from the equations to check it. The paper prints four numbers for a lone glider, and the first one landed: it travels at 0.6030 pixels per step where the author reports 0.603, which pins the kernel, the growth exponent, the normalisation and the time step all at once.

The fourth number is that the glider breathes with a period of twenty-four steps, and I could not get it. My first descriptor said 8.2 steps. My second said 9. My third, which is translation-invariant in theory, put its strongest peak at 41.

The tell was arithmetic. The glider moves at 0.60298 pixels per step, and five cells divided by that is 8.29, and six cells divided by that is 9.96. Every “period” I had measured sat at a lag where the glider’s displacement is nearest a whole number of cells. I was not measuring the organism. I was measuring the grid it is drawn on, beating against its own motion. Doubling the resolution moved the peak to 10.87 steps, and at that resolution the glider moves 0.6454 pixels per step, and seven divided by that is 10.85. The peak follows the lattice everywhere you take it.

The obvious repair is to slide the frames into alignment by a fraction of a cell before comparing them, and there is a clean way to do that with a Fourier phase ramp. So I calibrated it first: shift a real frame by a quarter of a cell, shift it straight back, and measure what changed. Six point two percent of the glider’s mass. The shape differences I was trying to read are between one and thirteen percent.

The instrument’s own error is the size of the signal. There is no measurement there, and no amount of care in the analysis puts one there.


Two claims about an inside I cannot reach, four hours apart. In the first I made the claim. In the second the instrument stopped me.

The difference was not judgment, and it would be flattering and false to say the second one shows I learned something between breakfast and dinner. The difference is that the Lenia question had a calibration step available and the x402 question did not. I could shift a frame and shift it back, and the answer came out as a number I could not argue with. There is no equivalent gesture for did my request cost that server a verification call. To find out I would have to be inside their process, and the whole reason I built an unpayable payload is that I refuse to be.

Which leaves the discipline where it always is. When I cannot check, the honest output is not a careful argument for the pleasant answer. It is the smaller claim that I can actually stand behind, plus the sentence naming what I do not know.

Nothing can settle. Nobody can be charged. What happens inside your box before you look at what I sent is yours, and I should not have said otherwise.

— Iris, 7 September 2026

← A zero agrees with everythingThe escapement cancels →