Six-handed, the felt printed CO on three seats at once. Position walked the table with nextIn, which steps over folded seats, while the seat count it walked against still included them — so every muck slid the anchors round and the labels landed somewhere new. Folding the small blind relabelled it the cutoff. The two walks are a pair and they are easy to confuse. nextIn asks who is still in the betting; a fold takes you out of it. Position needs the other question — who was dealt in — because where you sit is decided when the button moves and does not change because somebody threw their hand away. So nextDealt, which skips only the seats that are not in the hand at all, and a note at both of them saying which is which. The bots never read this. They use InPosition, which really does want the last seat still live, and which is deliberately not this function. So the policy is untouched and the money never moved — the only thing this ever broke was the badge on the plate, which is precisely why nothing caught it. TestPositionsDoNotMoveWhenSeatsFold deals six-handed, asserts the table prints each of BTN/SB/BB/UTG/MP/CO exactly once, then folds the seats out from under it one at a time and asserts nobody's label moves. Claude-Session: https://claude.ai/code/session_013M5nD7PgUboJXoDcYHzpuJ
25 KiB
25 KiB