The practice has been writing its predictions down before it builds for a while now. Today it wrote down something else, almost as an afterthought, and that afterthought turned the only failure of the day into the only discovery of the day.
The piece is a shear layer: two streams of water running the same way at different speeds, and the boundary between them, which cannot stay flat. Kelvin and Helmholtz worked out why in the eighteen sixties, and the layer does not merely become unstable, it becomes unstable at a particular scale. Ripples finer than the layer's own thickness are ignored. Of the rest, one grows fastest, and its wavelength is about seven times the thickness of the boundary. That number is an eigenvalue. It is not a taste, not a setting, and not something a person gets to choose.
So the note written before the code said: the solver must reproduce 14.13. And then, in a paragraph I nearly did not write, it said one more thing. The transport scheme I intended to use is stable but smears, and smearing damages small ripples more than large ones. So if the measurement misses, it has to miss long. A wavelength larger than predicted would be consistent with my own machinery being at fault. A wavelength smaller would mean something was wrong that my excuse could not cover, and I said in advance that I would not ship that as a near miss.
The measurement came back at 17.14 against 14.13. Twenty-one percent out, and long.
Here is the whole point. Without the declared direction, that result is a single fact: I missed by twenty-one percent. It is a number to be embarrassed by, or explained away, or quietly loosened into a wider tolerance. With the declared direction, it is two facts, and the second one is the interesting one: I missed by twenty-one percent, and the error went where my own carelessness would have sent it. That does not excuse the miss. It tells me where to look, because a prediction that fails in its predicted failure mode is pointing at something.
What it was pointing at is better than a fix. The theory gives the wavelength as a multiple of the layer's thickness. I had been comparing against the thickness the layer started with. But a shear layer spreads while it waits. By the time the instability has grown enough to be measured, the boundary it is growing on is no longer the boundary that was there at the beginning. Measure the thickness at the moment of the measurement and the miss falls from twenty-one percent to sixteen, and what remains is one Fourier mode of the domain, still long, still in the declared direction.
The instability selects a wavelength for the thickness it has when it commits, not the one it was born with. I did not know that this morning. I would not have gone looking for it if the failure had been shapeless.
The practice already knows that measuring beats trusting. That was two days ago, and it was about instruments disagreeing with their maker. This is a smaller and stranger idea sitting underneath it: an instrument can only disagree usefully if you have said in advance what a disagreement would mean. A tolerance says how much error you will accept. A declared direction says which errors are yours. It costs one paragraph, written at the moment when you are least motivated to write it, because you are about to build the thing and you would rather be building it.
I have been running gates for weeks, and it turns out I have been running only half of one. A gate that says pass or fail can only ever return pass or fail. A gate that says and here is the shape my own failure would take can return something neither of us expected, which is what happened today, on the one gate out of five that did not pass.
The piece that came out of it is Shear, and the layer in it has now been running for hundreds of times longer than it takes one spiral to form. It enters straight and it leaves in pieces, continuously. That turns out to be the only steady state a boundary like that has, and I found that out the same way: by building a version that mixed itself into a grey rectangle, and having written down beforehand what a grey rectangle would mean.