# 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. - [x] 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. - [x] 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. - [x] 3. **Scheduled service**: `endGamesOutOfTime`, `GameClockScheduler` wired in `index.ts`; remove `checkTimeouts`, the 10-second timer and the backend's `offlineSince`; unit tests. - [x] 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. - [x] 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). - [x] 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.