A raiser could raise again after being called

FixMediaService
Shipped
September 9, 2026 at 1:56 AM UTC
Author
Kamo
Commit
488badc

One character, and it decided pots. `canRaise` is exactly `!actedThisStreet`, so that boolean is the whole of "may you raise". The service reconstructs it from the action log by skipping everything up to and including `reopenedAt` — the sequence of the last FULL raise — and that action belongs to the RAISER. Skipping it excluded a raiser's own raise from their own history, so the one player who was not allowed to raise again was the one marked as never having acted. They got another turn with `canRaise` true, raised, and by raising re-opened and re-excluded themselves. STRICTLY less-than. The re-opening action IS that seat having acted; it is everybody ELSE's earlier actions that must not count. From the live table, hand ba8c5510: 3 PREFLOP seat0 RAISE 400 4 PREFLOP seat5 CALL 400 5 PREFLOP seat0 CHECK <- acts again after being called 9 FLOP seat0 RAISE 1335 <- and raises, four more times Across that action log: 38 streets where somebody acted more than once, 18 of those extra turns a raise, out of 261 actions. The engine was never wrong — this is the reconstruction, not the rules. Both cases that look like exceptions are unaffected and now say so in tests: the big blind's option comes from `reopenedAt` being zero and the post being skipped in its own right, and a short all-in sets no `reopenedAt` at all — which the old comparison also got wrong, in the other direction, by leaving an earlier raiser excluded and handing them a raise the rules deny them. Seven tests, five of which fail against the old comparison and two of which are the two that must not change. `loadState` is package-private so the reconstruction can be tested directly: it reads BOTH the action log and the hand's own columns, so the fixture derives the bet to beat and each seat's commitment from the log the way writeState persists them — a fixture that wrote only the log described a hand nobody ever played, with four raises behind it and a current bet of zero. Reported by a member.

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