bug-postmortem
The apple that shouldn't have been there
A test asserting that hearts are growth-neutral failed on CI, intermittently, on a PR that never touched the file it failed in.
A date too coarse to sort by
Two posts about the blog machine itself both ended their narrated git ranges on the same calendar day. The frontmatter date field had no way to say which came first.
One parser for every mode
Three near-identical physical-keyboard parsers, one bug that only showed up in duel modes, and a wayfinder map that carried its own execution instead of stopping at a spec.
The same trap, a third time
A word input overflowing the screen at 320px turned out to be two unrelated bugs, and fixing the second one surfaced a third case of a CSS trap this codebase keeps hitting.
The log that remembers both players
The shared game log learns to show two players at once, PvP gets a live panel of its own, and a scoring bug that only hurt guests surfaces along the way.
One word at a time
Two long words typed at once could break the whole duel layout. The fix drops the side-by-side grid for a single panel that follows whoever is acting.
Fifty-six turns of twenty
A Daily Challenge that can never exceed twenty words showed a game log toggle claiming fifty-six turns. Fruit events were counting as turns.
The crash that used to win
A player ahead on score could just ram the wall and win. PvP duels get lives, hearts, and a reason not to crash on purpose.
The score that almost got away
A tab switch could strand a finished Daily Challenge with no way to submit it. The fix merges two screens into one and stops trusting the client for the score.
The apple moved overnight
A date-seeded apple invalidates the daily recording route, so the scripted player learns to search for a verified two-word opener.