Six the adversarial review upheld

Fixkamo-internal
Shipped
September 9, 2026 at 1:24 AM UTC
Author
Kamo
Commit
6dab91f

Ten reviewers, three skeptics each. Twelve findings survived; most of the rest were refuted because they had already been fixed. Of the twelve, six were still real after the move list came out — the other six were either already fixed or made moot by removing it. **The pawn bounced on the one moment worth pausing on.** Choosing a piece closed the card and released the pawn, but the position does not change until the server answers — so the pawn slid back down a rank, waited out the round trip, and travelled up again when the frame landed. Measured at 57 pixels of travel that should not exist. The card going and the pawn staying are now two facts, so choosing changes nothing about where the pawn is drawn. **Your own moves bobbed a round trip late.** The lift was applied when the server's frame arrived, and committing a move dropped it immediately — so your piece slid flat, landed, and then rose and fell in place once the frame caught up. The opponent's moves looked right and yours did not, which is the harder version to notice. The optimistic travel lifts its own piece now. **A held piece could not be put down with a mouse.** `activate` has always handled the second click, and the pointer could never reach it: every gesture swallows the click that follows it, and pressing a piece with legal moves always makes a gesture. Escape was the only cancel. The gesture records whether the piece was already up, because `selected` cannot say — the press itself set it. **The promotion buttons were one card-pad left of the pieces they cover.** The pieces are inset by the card's padding and the buttons were at zero, so the right edge of every choice was dead and the left edge belonged to nothing. **The live region went quiet on a repeated sentence, permanently.** It compared against the last thing announced, so a knight returning to where it came from, or a second identical check, was dropped — and never announced again. It compares against the frame now, which is the actual rule: one announcement per position. **The nudge countdown never stopped.** The interval was cleared only when the server changed `nudgeAvailableAt`, which it does only when somebody nudges — so a cooldown that simply ran out left a 1Hz timer re-rendering the whole tool for the rest of the session. And three dependency arrays that were wrong: `homes` read the new promotion state without depending on it and was correct only by the accident of another value changing on the same render. The promotion fix is asserted in the browser rather than in jsdom, because it is geometry and jsdom has none. The probe was checked against the defect before being trusted: 57px with the bug, 0px without.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing