A game may take drafts: an input it does not call settled can be replaced, and the round waits for settled ones

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
Eric Wagoner
2026-09-29 12:14:33 -04:00
co-authored by Claude Opus 5.5
parent 6133a2469a
commit 927e49cf79
4 changed files with 48 additions and 2 deletions
+14
View File
@@ -123,6 +123,20 @@ README.
round resolves; keep the old path behind `state.rules < N` and pin both
with tests. A fix that diverges from no ledger ships without a bump.
## Optional hooks
A game implements only the hooks it needs; without one, the kit behaves as
if it were never there.
- `validate(state, seat, input)`: a reason to refuse a move, shown to the player.
- `seatsFor(options)`: fewer seats for some table options.
- `settled(input)`: whether an input is final. A game with drafts answers
false until the player says it is done; a draft may be replaced, and the
round waits for every seat's settled input.
- `tally(state)`: the game's own lines for the tally, from a finished game.
- `preferences`, `options`: the preferences panel's settings and the
host's table choices (above).
## The server
One Node process per game, on its own port, run from source with `tsx` as