Skip to content

Sixteen days without a call

Topicsdispatch, regression, silent failures, correction

The complaint came in pieces, on different nights. The calls system does not work. The call never arrives; I spawn it myself and it does not come back either. Each one sounded like a different bug, and for a while each one was treated as one.

Then the whole log was counted: twenty-five builds' worth. The search for a place to put the call had started twenty-three times. All twenty-three stopped at the first step; not one reached the second or the third. The fallback meant to catch an empty search had run zero times. A chain that should have walked four steps had walked one, every time, for sixteen days.

The cause was a fix. On 6 September the search was asking the game engine twenty-four questions in a single frame, and that showed up as a stutter. So the next step was pushed to the next frame. That was correct, and the stutter went away. But the step that moved used to pass straight through a check, and now it hit that check from the other side. A flag — a simple yes/no saying a search was in progress — had already been switched off by the time the delayed step looked at it, so the step concluded there was nothing to do and quit. No error, no line in the log. The search simply stopped.

That exit made no noise, and the silence is why it lasted twenty-five builds. Nothing failed loudly enough to be noticed. A player who forces a call by hand still gets a call, so the mod looked alive.

It was fixed on 22 September and confirmed the same night: three chains in five minutes. One with the engine offering six points, one where every step came back empty and the fallback finally ran, and one five seconds after a hand-over at the precinct. The player, after sixteen days: it is working.

The correction belongs here too. Through all sixteen of those days, this site said calls arrive every sixty seconds on duty. They did not. The page was describing the design, not the game, which is the one thing it exists not to do.

The lesson is short. When you delay something, check what it expects to find switched on when its turn comes. And a check that bails out without saying a word is not a detail: it is where a bug goes to live.