The scan told the story precisely. Of 326 saves, 13 players were above the unlock level. Six of them had bought the truck garage, which is the second building in the chain. Zero had the depot, and therefore zero owned a truck. People had paid for the garage and then stood at a door that would not open.
One of them wrote to me: "I cannot build the new shipping centre. I thought my level was below 200, turns out it is above."
One flag, two meanings
The build system has a flag meaning "only one of these may exist". A different part of the code had started reading the same flag as "do not open a placement ghost, buy it immediately", because until then every single-copy item happened to be an instant purchase.
The new depot was the first item to be both single-copy and physically placed on the map. The flag routed the click into the instant-purchase branch. That branch matched an item against a chain of identifiers, and the depot's name was not in it. No branch matched, and the click fell off the end of the function in silence.
Of eighteen items carrying that flag, seventeen were in the chain. The one missing name was the only item with a real footprint, which is to say the only one where the two meanings came apart.
If you find yourself giving a flag a second meaning, give the second meaning its own list. The chain became a lookup table, and an unmatched entry now falls through to placement rather than to nothing. When the error has a direction, point it at the harmless side.
What the checks said
That release passed the module syntax check, passed the save-loading verifier that replays real player files, and passed a full balance measurement across two large saves. All three were green, and none of them clicks a button.
The thing that eventually found it was four lines: click the card, then assert that a build ghost now exists. Once that existed, three more bugs surfaced immediately behind the first, all of them invisible until someone could actually reach the second step:
- After placing the depot the ghost stayed in hand, so a second click would have burned another 2.5 billion.
- The card never switched to "installed", because the palette refresh only updated prices and left a stale listener attached.
- The truck card counted the wrong fleet and displayed "76/40 in fleet".
None of these are hard bugs. They were simply beyond a door nobody had walked through.
The lock that looked identical to the unlock
The player's sentence, "I thought my level was below 200", pointed at a second failure I would not have looked for. Locked, the card read 🔒 Level 200. Unlocked, it read Level 200. The only difference was a padlock glyph.
So a player who had passed the requirement still saw the requirement, clicked, got nothing, and drew the only available conclusion: they had not met it. The badge now describes what the building does once unlocked, because a requirement you have already satisfied is not information any more.
The same mistake wearing other clothes
Once I started looking for controls that do nothing, the game had a small collection.
A status label shaped like a button. A completed objective showed the word tamam inside a green rounded box. In Turkish that word is an affirmative, the thing you say to confirm, so it reads as "OK" on a button. A player pressed it, nothing happened, and they reported that the OK button was broken. The reward had already been paid automatically. It now reads "✓ done", and the lesson is that a status must not be dressed as a control in any of the languages you ship.
A button hidden because a robot exists. When automated dispatch was enabled, the manual "load now" button was not drawn, on the reasoning that the robot would handle it. The robot does not handle every case: stock can arrive late, a departure window can close. Players were watching an order die with nothing to press. The button is back whenever the stock genuinely exists. The question to ask of any automation is if the robot does not do it, can the player?
A ceiling the panel did not draw. Two facility bonuses saturated around level three, but the saturation lived inside their own formulas rather than in the shared cap table the interface reads. So the panel never printed "maximum", the purchase was never refused, money left the account and nothing changed. Reported by a player who had read the documentation: "no matter how much I upgrade, the current value does not increase."
An icon with no name. A row of filters was three bare icons above a heading that named a category rather than an action. A 15-pixel ball of yarn is not identifiable, and knowing what you are switching off is a precondition for switching it off. Every chip carries its label now. The tooltip stayed, but a control cannot depend on hover, because on a phone there is no hover.
One more, from the same release
The new depot's Turkish name was already taken by an existing facility. Two buildings answered to the same words, one costing 2.4 million and the other 2.5 billion. The English names were distinct, which is exactly why I missed it: distinct in the source language does not mean distinct after translation. Any new name now gets grepped from the translation side.
The rule
A missing feature is honest. A player sees nothing, wants something, asks for it. A dead control is a lie the interface tells: it promises an action, absorbs the click, reports nothing, and the player concludes the fault is theirs. They do not file a bug for that. They stop.
Thirteen players reached that building. None of them could buy it, and only one of them told me.