Status: ready-for-dev
As a player, I want to play additional rounds after the daily word, with words appropriate to my skill level, So that I can keep playing and the challenge adapts to me.
Play Again button: Given I am on Screen 3 after completing or failing a game, when I view the screen, then a Play Again button is visible. ✅ (button exists from 1.2, just needs wiring)
Play Again request: Given I tap Play Again, when the client sends POST /api/play-again { skillMetric: number }, then the server selects a word from the target bank using weighted random selection (near skill level more likely). Response: { wordId }. Client navigates to Screen 2 with empty grid.
Skill from difficulty: Given I complete any game, when the final guess response includes difficulty, then the client recalculates skill metric from lifetime statistics (average attempts weighted by word difficulty) and persists it.
Skill sent on play-again: Given I tap Play Again repeatedly, when I play multiple rounds, then each request sends the latest skill metric. No repeat-word prevention (target set is large enough).
Default difficulty fallback: Given the server has no solver-ranked word bank (all default 3.0), when Play Again selects a word, then selection is effectively random pending solver data from Epic 2.
[ ] Task 1: Implement POST /api/play-again endpoint (AC: 2, 5)
server/src/play-again.ts — weighted random word selection near skill levelserver/src/routes/play-again.ts — POST /api/play-again, returns { wordId }server/src/index.ts[ ] Task 2: Wire Play Again in client (AC: 1, 2, 4)
handlePlayAgain in App.tsx — call POST /api/play-again, reset game state, navigate to Screen 2[ ] Task 3: Implement skill metric calculation (AC: 3)
difficulty on final guess ✅lastDifficulty exposed from useGame hook ✅state.skillMetric persisted in localStorage ✅skillMetric = (skillMetric * (gamesPlayed - 1) + difficulty) / gamesPlayed
Running average of all word difficulties the player has encountered. This converges to the player's true skill over time.
New: server/src/play-again.ts, server/src/routes/play-again.ts
Modify: server/src/index.ts, client/src/App.tsx, client/src/hooks/useGame.ts, client/src/api.ts