bug-postmortem

  1. Daily Challenge Across Devices

    Keeping a signed-in player's daily challenge progress consistent across devices via a merge strategy, not an overwrite, plus fixing the races that exposed the need for it.

  2. A Warning for a Word Already Gone

    The already-used hint flashed on a word the player could no longer edit, because the check that decided whether to show it never looked at what phase the game was actually in.

  3. The Cheapest Part Was Already Installed

    Three CI hangs on the same day, one nearly three hours long, traced to an unbounded apt-get for Chromium system deps on a slow package mirror, fixed by reusing an already-installed container image.

  4. A Mock That Imported the Real Thing

    A flaky error-reporting test traced to a mock factory that quietly resolved the real Sentry package under full-suite load, and the audit for the same pattern elsewhere.

  5. The status that was never written

    The stats page showed zero PvP games because its query filtered on a status the PvP service had never actually written, plus a new high score stat and a tab reorder.

  6. Five fixes, one revert

    An architecture review turns an hour of live firefighting on the PvP presence module into an explicit state machine, then finds the same missing structure on the client side.

  7. Not a bug this time

    Cutting the E2E suite's billed CI cost by fixing an idle CPU core and moving tests to cheaper layers, then chasing down two loose ends, one real and one a false alarm.

  8. The first thing it caught

    Client-side error monitoring finally gives the solo maintainer visibility into what breaks in players' browsers, and catches a real bug within hours of shipping.

  9. Four pixels on the first letter

    The Daily word input jumped four pixels when its first letter appeared because one nested row had no height before it held a letter cell.

  10. The game was still there

    A player replaying the Daily Challenge who switched tabs mid-game came back to the previous attempt's recap instead of the game still running underneath it.