An announce that throws must not roll back the buy-in

FixMediaService
Shipped
September 10, 2026 at 12:25 AM UTC
Author
Kamo
Commit
19305ba

`announceToConversation` runs INSIDE the transaction that seats the host and charges them — unlike `announceTable`, which the controller calls after the fact. The two writes inside it were guarded and the session LOOKUP was not, so a read that failed would propagate, undo the seat row whose existence is the idempotency key protecting that charge, and leave a wallet debited for a table that no longer exists. To report that a chat message could not be written. The whole body is guarded now, which is what the class has always claimed: a table nobody was told about is recoverable — the invitee has the event on their own Hold'em topic and the table is in the lobby. The test also pins the shape of the announcement: ONE card however many people are asked, because a card is a way in to the table and a room needs one of them, and one notification EACH, because that one is addressed to a person.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing