The waitForGameStart() function checked roomStatus.full before
roomStatus.locked, causing it to short-circuit when a room was full
but the game hadn't started yet. This meant game.started was never
broadcast and watchGameAsAudience() was never called for full games.
Now only locked=true triggers game start detection. When full=true
but locked=false, the poller continues until the game actually starts.
Co-authored-by: Cursor <cursoragent@cursor.com>