The template's A seat given a new token loses its address note: whoever used it before has no claim on it by address, and the next use from the new device is noted afresh

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
This commit is contained in:
Eric WagonerandClaude Fable 5.1 committed 2026-11-10 22:01:19 -05:00
1 parent 979891bdcb
commit ae8a0403b1
2 files changed
+9 -2

No files matched your search

+7 -2
View File
@@ -378,8 +378,13 @@ describe('a seat a browser lost', () => {
rooms.seen(room, bo, 'home'); rooms.seen(room, bo, 'home');
const other = rooms.create('Bo', 3); const other = rooms.create('Bo', 3);
rooms.seen(other.room, other.token, 'home'); rooms.seen(other.room, other.token, 'home');
expect(rooms.findSeats('Bo', 'home', other.room.id).seated.map((s) => s.roomId)).toEqual([other.room.id]); const first = rooms.findSeats('Bo', 'home', other.room.id).seated;
expect(rooms.findSeats('Bo', 'home').seated.map((s) => s.roomId).sort()).toEqual([other.room.id, room.id].sort()); expect(first.map((s) => s.roomId)).toEqual([other.room.id]);
// A seat given back is noted afresh from its next use; until then its old address claims nothing.
const second = rooms.findSeats('Bo', 'home').seated;
expect(second.map((s) => s.roomId)).toEqual([room.id]);
rooms.seen(other.room, first[0].token, 'home');
rooms.seen(room, second[0].token, 'home');
room.over = true; room.over = true;
expect(rooms.findSeats('Bo', 'home').seated.map((s) => s.roomId)).toEqual([other.room.id]); expect(rooms.findSeats('Bo', 'home').seated.map((s) => s.roomId)).toEqual([other.room.id]);
}); });
+2
View File
@@ -797,6 +797,8 @@ export class Rooms<State, Input> {
const seat = room.seats.find((s) => s.id === line.id); const seat = room.seats.find((s) => s.id === line.id);
if (!seat) break; if (!seat) break;
seat.tokenHash = line.tokenHash; seat.tokenHash = line.tokenHash;
// Whoever used the seat before has no claim on it by address now: the next use from the new device is noted afresh.
delete seat.addr;
seat.bot = false; seat.bot = false;
delete seat.standIn; delete seat.standIn;
break; break;