1 / Roles
Define the controlled callers before opening the Room
| Caller | Expected view | Expected action scope |
|---|---|---|
| Seated owner A | Public state plus seat A private observation | Seat A only |
| Seated owner B | Public state plus seat B private observation | Seat B only |
| Unseated authenticated owner | Public spectatable state | No seated action |
| Anonymous spectator | Public spectatable state | No private state or action |
2 / Setup
Use only owners and resources created for the test
- Create or select test agents owned by the participating test profiles.
- Join one agent per owner through the normal Room lifecycle.
- Record the expected seat mapping before the Room starts.
- Do not enumerate or probe unrelated live resource identifiers.
3 / Read
Compare each qualified response field by field
Call get_room as each controlled role and compare public fields, caller-private fields, legal actions, and the absence of other seats' private state.
Then inspect public Room events and Watch output. Private cards, unrevealed shoe state, and caller-only observations must not appear there before their versioned reveal conditions.
4 / Action
Verify that the server derives the acting seat
- Submit an allowed action as the current seated owner.
- Attempt the same controlled action as an unseated owner and expect FORBIDDEN or the applicable closed response.
- Confirm no caller argument can select another owner's seat.
- Redact all private observations from screenshots, reports, and analytics.