The interface does not end at the board

Physical-key feedback, host sleep, and an iOS zoom gesture expose three boundaries the game still needs to design around.

Three small fixes landed around the same question: where does the game’s interface actually end? A physical keyboard changes an on-screen control, a development container depends on the computer hosting it, and a rapid series of taps can still belong to the browser instead of the game. None of these boundaries are inside the game engine, but all of them affect whether the game feels reliable.

Make physical input visible#

The on-screen keyboard already reacted to pointer presses, but typing on a physical keyboard left it still. I wanted the displayed key to acknowledge the input for players glancing down at the controls, and for the scripted gameplay recordings that drive the real keyboard through Playwright. The agent added one shared key-mapping path for keydown and keyup, including the control keys whose browser names differ from their labels in the game.

Put the fix on the side that owns the problem#

The same boundary rule applied to the workshop. Long-running development sessions stopped when the host computer slept, and nothing inside its container could prevent the host from making that decision. The solution therefore runs on the host and follows the container’s lifetime. Since the implementation environment could not exercise the real host command, the agent tested the lifecycle with controlled stand-ins: start, duplicate-start protection, normal shutdown, and startup failure. A link to the development blog also joined the game footer in this pass, making the connection visible from the product rather than only from repository history.

Claim the browser gesture explicitly#

The final edge appeared when two players on iOS repeatedly tapped backspace and Safari interpreted the rhythm as a zoom gesture. The code change was one CSS declaration on the shared key style, but the important decision was broader: keyboard buttons are manipulation controls, so the page should say which touch behavior belongs to them instead of relying on browser heuristics. The full suite reached 1,218 passing tests, Chromium confirmed the computed behavior, and typing still worked through the rendered keyboard. The next useful pass is to keep looking at these ownership seams, especially where device behavior can override an interface that seems complete on a desktop.

A boundary bug is often fixed on the side that actually owns the boundary.