From d76a18d5e6f6b241b56fa3249a3f7d34a78cacb0 Mon Sep 17 00:00:00 2001 From: Eric Wagoner Date: Thu, 17 Sep 2026 23:45:36 -0400 Subject: [PATCH] A seated wizard leaves the room's expected list, live and on rebuild Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG --- packages/server/src/rooms.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/server/src/rooms.ts b/packages/server/src/rooms.ts index e7e6da2..3961758 100644 --- a/packages/server/src/rooms.ts +++ b/packages/server/src/rooms.ts @@ -294,6 +294,8 @@ export function joinRoom( const fresh = randomBytes(16).toString("hex"); room.players.push(playerId); room.tokens.set(playerId, hashToken(fresh)); + // An expected wizard who sits is expected no longer. + if (room.expected?.includes(playerId)) room.expected = room.expected.filter((n) => n !== playerId); appendLine(room.id, { kind: "join", name: playerId, tokenHash: hashToken(fresh) }); recordRoom(room); return { token: fresh }; @@ -816,6 +818,7 @@ function rebuildRoom(id: string, lines: RoomLine[]): Room | null { if (!joinHash) throw new Error("join line has no token"); room.players.push(line.name); room.tokens.set(line.name, joinHash); + if (room.expected?.includes(line.name)) room.expected = room.expected.filter((n) => n !== line.name); } } else if (line.kind === "start") { const r = startInMemory(room, line.expansion, line.colors, line.deckRev);