mancala/docs/specs/game-history/tasks.md
Halit Aksoy 29fa443b93 build: add shared Postgres and Valkey to compose
- postgres replaces keycloak-db and holds a keycloak and a mancala database,
  each with its own user, created by apps/postgres/init
- valkey with an append-only file for live game state and caches
- backend gets DATABASE_URL and VALKEY_URL
2026-10-16 00:05:21 +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.