# Slow-playing: exact river casebook

Created 2026-09-05 by GTO Gecko. Synthetic educational inputs; no user data or proprietary solver output. Article: https://gtogecko.com/blog/slow-playing-poker

## Question and method

How often does a specified weaker Hold'em hand overtake a specified strong hand on the river? Does completing a flush necessarily change the winner?

Four turn fixtures each expose two Hero cards, two opponent cards and four board cards. Enumerate every remaining card in a standard 52-card deck once, for 44 rivers per fixture and 176 outcome records. River probabilities are uniform conditional on those eight cards and no other known dead cards. Unknown burn or discarded cards are not separately exposed; integrating over unknown cards preserves the uniform marginal river distribution under this model. No random simulation, seed, iterations or sampling error applies.

For each river, evaluate every five-card subset of each player's seven cards and take the highest rank. Compare the full rank including kickers. Wins receive a pot share of one, ties one-half, losses zero. The JSON fraction uses denominator 88: (2*wins + ties)/88. Fractions are intentionally not reduced. No ties occur in the four main fixtures; independent evaluator checks include ties.

## Inputs and outputs

- `cases.json`: four frozen inputs. Cards use 2–9,T,J,Q,K,A and c,d,h,s for clubs, diamonds, hearts, spades.
- `generate.py`: Python 3.10+ standard-library generator; no packages, network or account needed. It rewrites only `results.json` and `rivers.csv` beside itself.
- `results.json`: four summaries and all 176 outcomes, including exact rank vectors for both hands. Categories ascend from 0 (high card) to 8 (straight flush).
- `rivers.csv`: the same 176 outcomes with ID, river, result and best-hand categories.
- `verify.mjs`: independent Node.js 20+ implementation. It does not import the generator or reuse its five-card enumeration approach. It checks the frozen inputs, every river, ranks, summary lists, CSV and manifest; also exercises independent evaluator fixtures and rejects corrupted data in memory.
- `free-card-comparison.svg`: original accessible visual. Its nine tiles per row represent flush-completing club rivers, **not all 44 rivers**. Different starting boards/hands are compared. Crosses mean Hero loses; checks mean Hero wins. Text supplies the result without relying on color.
- `MANIFEST.sha256`: SHA-256 for every other file in this directory, with LF line endings for text files.
- `README.md`: this method and reproduction note; keep it beside the other seven files.

`opponent_flush_cards` means the opponent's best final hand category is exactly flush. It is not a general improvement score, a prediction of paying a bet, or evidence about real opponents.

## Reproduce in a clean folder

Download all eight files above into one new folder, keeping their names. Save actual raw files, not HTML pages. From that folder run:

```text
node verify.mjs
python generate.py
node verify.mjs
```

The first verification checks the downloaded package. Regeneration should preserve the two generated files byte for byte, so the sealed manifest still passes. A modified case is deliberately rejected by the fixed-case verifier; this package certifies the published casebook, not arbitrary hand input. The optional `--skip-manifest` flag is for development only and is not a full publication verification.

## Hand checks and results

| Fixture | Wins / ties / losses | Losing cards |
|---|---|---|
| Straight vs set | 34 / 0 / 10 | Remaining ace (quads), or any remaining jack, ten or deuce (full house) |
| Set vs flush draw | 37 / 0 / 7 | 3c,4c,5c,6c,8c,Tc,Jc |
| Full house vs flush draw | 44 / 0 / 0 | None |
| Same full house vs trips | 43 / 0 / 1 | 7c |

In the set fixture, 2c and 7c complete the opponent's flush but give Hero a full house or quads. Thus nine flush completions produce only seven losses. In the full-house/draw fixture, all nine completed flushes lose. Changing that opponent to 7h6h produces one winning river for the opponent. These are controlled conditional contrasts, not random samples of strategic situations.

## Limits

This is a card enumeration, not an equilibrium solve or betting EV model. No pot, stack, position-dependent policy, action sequence, range weights, rake, tournament prizes, bounties, multiway opponents or future bet sizes are modeled. The article's illustrative decision is an in-position turn check behind; positions do not affect these exposed-card outcomes. Main fixtures all start with Hero ahead, which must not be assumed in actual hidden-card play.

The probability of being overtaken is not the causal cost of checking. An opponent could call a bet and see the same river; an improved second-best hand might never pay. Actual action values require justified ranges and response policies. No gambling result, optimal slowplay frequency or exact GTO Gecko scenario availability follows from this casebook.

## Sources and reuse

Accessed 2026-09-05:

- PokerStars Hold'em rules: https://www.pokerstars.com/poker/games/texas-holdem/
- PokerStars hand rankings: https://www.pokerstars.com/poker/games/rules/hand-rankings/

The article links original strategy analyses separately. Numeric outputs are generated from the inputs above rather than copied from those analyses. Code, synthetic data and SVG in this directory were created for this article by the GTO Gecko team; readers may reuse this bundle with attribution to the article. No third-party images or proprietary solution data are included.
