mancala/docs/specs/game-clock/tasks.md
Halit Aksoy b472c2813c docs: document the game clock
Backend README (GAME_CLOCK_MS), AGENTS.md notes, TODO items for the open points and the mobile release order; game-history R3.3 and R3.4 marked as replaced. Checked end to end in Chrome: moves, a backend restart, a timeout and the replay.
2026-10-16 01:54:01 +03:00

1.8 KiB

Game clock: tasks

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

  • 1. Core types and helpers: GameClock, CLOCK_LOW_TIME_MS, the new optional fields on Game, GameEndMessage, MoveRecord and FinishedGameSummary; getClockTimes, ClockSync, getClockAtMove, formatClock with unit tests; English timeout texts.
  • 2. Clock in the game lifecycle: GameClock.ts, GAME_CLOCK_MS, clock and moveRemainingMs on BackendGame, start, charging moves, refusing late moves, stopping the clock on every ending, clock and serverTime in client messages; unit tests.
  • 3. Scheduled service: endGamesOutOfTime, GameClockScheduler wired in index.ts; remove checkTimeouts, the 10-second timer and the backend's offlineSince; unit tests.
  • 4. Restore and saving: snapshot version 2 and restore of versions 1 and 2, remainingMs and clockInitialMs in game records, migration 002_clock and the repository; unit and integration tests.
  • 5. Web app, live game: useGameClock, GameClockView, clocks in GamePage on desktop and mobile layouts; remove the offline countdown, and with it TURN_TIMEOUT_MS, INACTIVE_TIMEOUT_MS, UserConnectionInfo.offlineSince and OpponentOfflineCountdown from core (the web app uses them until then).
  • 6. Web app, replay: clocks in ReplayView from getClockAtMove.
  • 7. Mobile app: clocks in GameScreen; type check and bundle.
  • 8. End to end and docs: Chrome tests from design.md; README, AGENTS.md and TODO.md (release the mobile update before or with the backend; the out of scope items); mark game-history R3.3 and R3.4 as replaced.