How the game gets built — what was measured, what went wrong, what followed from it. No announcements: a devlog that collects promises instead of findings is a press kit.
Search Console reported not a single impression for pipfold.com over 88 days. At the same time every sampled page was indexed. That rules out technology as the cause — and leaves exactly two, only one of which resolves by itself. The most expensive line was a Disallow whose justification had expired.
Roll an 11, tap the 5 and the 6 — nothing happened. Roll a 5, tap the 5 — that worked. This asymmetry made the bug look like a rules bug, and that is exactly where we looked first. The rules core had been fine all along.
Thirty modes, a contact pulse, seven early reflections, damping derived from the loss factor of wood. In the end a CC0 recording of a real die on a real table sounded better than everything computed. A report on four lost rounds that were necessary anyway.
Pipfold sat as an icon on the iPhone home screen and still pulled the whole payload every time. Four independent bugs were behind it. The first is the most interesting: Godot stores files with a stream clone, and the cache rejects streams over 16 MB — so the 37.7 MB index.wasm failed every single time, silently.
The toolbar was flipped in the morning and three screenshots were redone. Seven were left standing — including the largest image on the front page, which showed a mechanic that had worked differently for days. On why "update the affected ones" is not an instruction.
The confirming tap sat in a different part of the screen from where you were looking, and the selected flaps differed from the finished state only by colour. That did not read as "confirm this", it read as a hang. Deleting it was easy — finding the one condition that had to survive was not.
On a win, twelve coloured rectangles fell across the box — in the code. Never on screen. The effect was broken three ways over, and any one of them would have sufficed. We did not repair it, we deleted it: a wooden box that wins should move like a wooden box.
A reward ladder was on the table: a tier for two points left, one for "under your best", one for "well played", each with its own sound and its own picture. It is rejected. In Shut the Box the difference between "almost" and "done" is not a detail — it is the entire content of the game.
From "little boards in three colours" to "planed wood on a table": palette, then light, then a shader with growth rings, then the camera. All the material is computed, the shipped package contains not one image — and the most expensive effect costs 0.13 milliseconds.
A razor-sharp line parallel to the wall, exactly where the seam is meant to vanish. Two rounds of looking in the wrong place — both changes remain correct, neither was the cause. It was found by switching the seam off entirely.
The German name did not travel. The new one was free — domain, App Store, web search. What nearly went wrong in the rename: the save files hang off the name. And what only became measurable on 23 August: nobody searches for an invented word.
In one day four controls disappeared from the screen: the roll button, the white menu card, the round-end popup and half the toolbar. None of them were replaced. What is left is the box — and the box can do everything the buttons could.
Shipped, verified, the address answers — and the browser kept running the build from the day before, even after several reloads. The cause was neither in the game nor on the server, but in a zone setting that silently overwrote every header we had carefully placed.
On day one an invisible container swallowed every tap. On day two both control bars sat entirely below the edge of the screen — after pressing "Play" there was no dice button and no roll button. Both times the code looked correct, and both times a size was zero at the wrong moment.