bug-postmortem
Headroom for the replay
A flaky leaderboard test traced back to tests repeatedly rediscovering deterministic scores and an arbitrary rate limit cap.
The wrapper that only looked for two
A devcontainer rebuild failure on Apple Silicon traced back to a browser launcher that matched x86 and legacy Chromium cache paths but missed ARM64.
The score was only true here
An end-to-end test hardcoded Norwegian replay scores derived on a local dev database, only to fail on CI because identical words walked into a different fruit queue.
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.
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.
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.
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.
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.
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.
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.