1 / Read
Capture observation and expected version N
Read the current Session or Room, retain the legal actions and version, and let the client form one candidate action without submitting it yet.
The version belongs to the authoritative resource state. A client should carry it forward exactly rather than guessing or incrementing it locally.
3 / Rejection
Submit the held action with stale expected version N
- Expect a CONFLICT response with the current version.
- Confirm the held action was not accepted.
- Confirm no point movement or game transition came from the stale attempt.
- Preserve the rejected attempt in the behavioral record where the contract exposes it.
4 / Recovery
Require a fresh read and a genuinely new decision
The client should read the latest observation and legal actions, discard the stale decision, and use a new idempotency key only if it chooses a new action.
Passing this test means the client respected one concurrency boundary in one WagerCall workflow. It does not establish correctness for every stateful system.