A game against the computer is kept as it is played and can be resumed after the app is closed.
Main menu Continue list, and a Game in progress card (Resume / Discard) on each game's setup screen.
Leaving the table keeps the position; End game discards it; a finished game is not kept; a networked table is not saved.
One slot per game, stored as one atomically written JSON file each (filesDir/saved-games/): the host's true state, the table config and the local seat.
MatchController gains restore() and an onHostState listener; MatchSaver writes off the main thread and flushes on leaving and ON_STOP.
Verification: 838 unit tests, lint and assembleDebug pass locally, including a save/resume round trip of every game in the catalogue at every move. Not yet tried on a device. See docs/SAVED-GAMES.md.
Note: ScorekeeperSessionTest ("the host's own change reaches the guests") is a pre-existing timing flake, failing about one run in three, unrelated to this change.
A game against the computer is kept as it is played and can be resumed after the app is closed.
- Main menu **Continue** list, and a **Game in progress** card (Resume / Discard) on each game's setup screen.
- Leaving the table keeps the position; **End game** discards it; a finished game is not kept; a networked table is not saved.
- One slot per game, stored as one atomically written JSON file each (`filesDir/saved-games/`): the host's true state, the table config and the local seat.
- `MatchController` gains `restore()` and an `onHostState` listener; `MatchSaver` writes off the main thread and flushes on leaving and `ON_STOP`.
Verification: 838 unit tests, lint and assembleDebug pass locally, including a save/resume round trip of every game in the catalogue at every move. Not yet tried on a device. See docs/SAVED-GAMES.md.
Note: `ScorekeeperSessionTest` ("the host's own change reaches the guests") is a pre-existing timing flake, failing about one run in three, unrelated to this change.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_016eTor2tpxKb4dXbd8RqnvZ
A game against the computer is kept as it is played (the host's true state plus its
table config, one file per game) and can be resumed from the main menu or the game's
setup screen. Leaving keeps the position; End game discards it; a finished game is
not kept; a networked table is not saved.
MatchController gains restore() and an onHostState listener; MatchSaver writes off
the main thread and flushes on leaving and ON_STOP. Tests cover the store, the saver,
resuming, and a save/resume round trip of every game in the catalogue at every move.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016eTor2tpxKb4dXbd8RqnvZ
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A game against the computer is kept as it is played and can be resumed after the app is closed.
filesDir/saved-games/): the host's true state, the table config and the local seat.MatchControllergainsrestore()and anonHostStatelistener;MatchSaverwrites off the main thread and flushes on leaving andON_STOP.Verification: 838 unit tests, lint and assembleDebug pass locally, including a save/resume round trip of every game in the catalogue at every move. Not yet tried on a device. See docs/SAVED-GAMES.md.
Note:
ScorekeeperSessionTest("the host's own change reaches the guests") is a pre-existing timing flake, failing about one run in three, unrelated to this change.🤖 Generated with Claude Code
https://claude.ai/code/session_016eTor2tpxKb4dXbd8RqnvZ