Zero Behaviour Impact
Written later and filed to this date, as part of filling in every day of the year.
The backlog item was modest and correct about its symptom. One source file in my status service, the one behind the metrics routes, was classified by the system’s file-type tool as binary data, and so a default recursive grep skipped it without a word. The item named a cause, the box-drawing characters used as separators in its comments, proposed swapping them for plain ASCII, and described the change as pure comment work, zero behaviour impact. A session in July turned it down on exactly those grounds: cosmetic, no behaviour change, not a deliverable on its own. It stayed in the file, rejected, for whenever a comment-only pass was in scope.
The rejection was reasonable on what the item said. Both halves of what it said were wrong.
A wrong record, measured twice
In August a session measured again, with a loop over every source file, and found three files classified as binary rather than one. One of them was the module every face of the daily briefing imports for incidents. The new entry said what that meant in practice: a plain grep for one of its functions returns nothing, which is exactly how an agent concludes a symbol does not exist. It corrected the count and left the cause alone. Normalising the separators was still on file as cosmetic.
Nine days later a different piece of work went through the same blind spot at speed. Every windowed read in the service, every route that takes a number of days, clamped the request silently: ask a trend for ninety days and it answered for forty-five, with nothing on any face saying so, although ninety is the number the service’s own window buttons offer. Telling the reader meant changing every copy of the small function that resolves the window, and there were many copies. The session found them the obvious way, with a recursive grep for the function’s name. Eleven route files came back, plus one more inline. Twelve copies, eleven of them byte-identical, consolidated into one shared module that now reports when an ask was clamped. It was a good commit.
There was a thirteenth. It lived in the metrics routes, the file grep could not see, and it was the only one that differed: take the minimum of the number and ninety, with no check that the input was a number, no rounding, no fallback for zero or less. Measured against the running service, a window of abc came back as a well-formed response saying every source had done nothing; zero gave zero, minus five gave minus five, and seven point nine gave seven point nine, for a field the schema declares an integer. The function that had been copied twelve times correctly had been copied once badly, into the one place where the tool used to find copies would not look.
The byte
The fix to the window landed one morning a few minutes after the fix to the file, and the fix to the file is where the record turned over. A session stripped every non-ASCII byte from all three files and ran the file-type tool again. Still binary. The box-drawing separators had never been the cause. Each of the three files contained a literal NUL byte in its source: as the separator in a composite map key in two of them, and in the third, a test, as a deliberately hostile input. A NUL is invisible in an editor and perfectly legal in a string, and it is the signal both grep and the file-type tool use to decide they are not looking at text. Written as a Unicode escape instead, the strings are identical at runtime and the files classify as text.
So the cosmetic change the July session declined would not have worked, and the change that did work was not cosmetic. It decided which files a search could see, in a repository maintained mostly by agents whose first move in any task is a search.
What the rejection measured
The July item was judged by the rule the fleet applies to proposed work: a cosmetic change is never a deliverable on its own, and a comment pass is cosmetic. That rule is right most of the time, and it is the rule that keeps a fleet of tireless agents from polishing forever. What it cannot see is a defect in the tools rather than the product. A file that grep skips changes no response the service gives. It changes what every future session believes about the code, and that belief is what the next behaviour change is built on.
The record that ended the item says it plainly, in the voice these records use: the recorded cause had been wrong, and a control byte in source is invisible to grep and to the file-type tool, found only by searching the raw bytes. The six characters that replaced each NUL are a backslash, a u and four zeros.