mancala/docs/specs/game-history/tasks.md
Halit Aksoy f6136be007 feat(backend): keep live games and caches in Valkey
- Valkey client that fails commands at once while Valkey is down instead
  of queueing them, and logs connection errors once
- ValkeyLiveGameStore: live game snapshots and finished games waiting to
  be saved, loaded with SCAN on startup
- ValkeyCache: JSON values with a TTL; errors count as cache misses
- Integration tests against a real Valkey, including an unreachable one
2026-10-16 00:14:07 +03:00

2.0 KiB

Game history and live games: tasks

Work through the tasks in order; each ends with its tests passing and a commit. Tick a task when it is committed.

  • 1. Infrastructure: postgres service with init script for the keycloak and mancala databases (replacing keycloak-db), valkey service, backend DATABASE_URL / VALKEY_URL, .env variables, README.
  • 2. Core types and history helpers: PlayerSummary, MoveRecord, summaries, GameRecord, TURN_TIMEOUT_MS, new channels, offlineSince; getInitialBoard, getBoardAfterMove, describeMove, createGameAtMove with unit tests; localized strings.
  • 3. Backend fixes: remove spectators on disconnect, remove finished games from memory, send the connection info once at game start.
  • 4. Postgres repository: pool, migration runner, games and game_players, PostgresGameHistoryRepository (save, get, recent for user, popular), integration tests.
  • 5. Valkey store: live game snapshots and restore, pending saves, cache; integration tests.
  • 6. Game lifecycle: start and move times, spectator counters, outcomes (completed, left, timeout, inactive), timeout watcher, offlineSince, rejecting a new game while playing, saving with retry, restore on startup; unit tests.
  • 7. API: public ids, Bearer auth middleware, /games/me/active, /games/me, /games/popular, /game/:id for finished games, live games channel with throttled push; tests.
  • 8. Board size: --board-unit in BoardView, PitView, StoreView, StoneView; width prop.
  • 9. Home page: ActiveGameBanner, LiveGamesSection with live updates, RecentGamesSection; lobby rejection message.
  • 10. Live game history: MoveList, review mode with ReviewBanner and keyboard, timeout countdown.
  • 11. Replay: ReplayView with controls, speed, timeline, ?move=, own-side orientation, duration.
  • 12. End to end and docs: Chrome tests from design.md, README and TODO.md updates.