Summary
When a room already holds MAX_PLAYERS humans, the server emits room-full and
the client sets its status text to "That room is full." — and then nothing. The
player is connected, in no room, looking at an arena that will never populate,
with no button, no retry and no explanation of what to do next.
Why it matters
This is the failure mode of a successful session. Sixteen people is the cap, and
the seventeenth is by definition someone who was invited — they followed a link a
friend sent, and the game appears to have simply not worked.
Reproduce
- Fill a room to sixteen humans (or use
?fill=16 and take the last seat).
- Open the same
?room=<id> in another client.
- Observe the status line and nothing else.
Suggested approach
The pieces are already there — room-full carries the roomId, and
online/room.ts can mint a fresh id and rewrite the address bar — so this is
mostly a UI decision:
- Say what happened plainly, in the React overlay rather than the canvas status
line, which is easy to miss.
- Offer the one useful action: start a new room, which is a fresh uuid and a
reload.
- Possibly offer to retry the same room, since a seat may free up.
Definition of done
- A player turned away sees a modal explaining it and can act without touching
the URL bar.
verify-modes.mjs gains a mode that fills a room and asserts the seventeenth
client is told, rather than left hanging.
Notes
Found while adding uuid-addressed rooms. The room-full message was added in the
same change specifically so this state would not be silent on the wire — the
client half is what is missing.
Summary
When a room already holds
MAX_PLAYERShumans, the server emitsroom-fullandthe client sets its status text to
"That room is full."— and then nothing. Theplayer is connected, in no room, looking at an arena that will never populate,
with no button, no retry and no explanation of what to do next.
Why it matters
This is the failure mode of a successful session. Sixteen people is the cap, and
the seventeenth is by definition someone who was invited — they followed a link a
friend sent, and the game appears to have simply not worked.
Reproduce
?fill=16and take the last seat).?room=<id>in another client.Suggested approach
The pieces are already there —
room-fullcarries theroomId, andonline/room.tscan mint a fresh id and rewrite the address bar — so this ismostly a UI decision:
line, which is easy to miss.
reload.
Definition of done
the URL bar.
verify-modes.mjsgains a mode that fills a room and asserts the seventeenthclient is told, rather than left hanging.
Notes
Found while adding uuid-addressed rooms. The
room-fullmessage was added in thesame change specifically so this state would not be silent on the wire — the
client half is what is missing.