# Shown bluffs: finite missing-label exercise

Created September 6, 2026 by GTO Gecko. All twenty records are synthetic. No private histories, real players or solver output.

Question: what bluff fractions are compatible with this completely counted twenty-bet record when ten binary labels are unknown?

## Assumptions and result

Each row represents one eligible bet in a stipulated common context. Every true label is either bluff or value. Known labels are correct; unknown includes unobserved cards or unresolved classification. These are teaching labels, not inferences about real betting intent. The CSV encodes no pot, board, holdings, strategy or actual event.

Known bluff=4, known value=6, unknown=10. Classified share=4/10=40%. Complete-record share is between 4/20=20% and 14/20=70%, with eleven attainable values in five-percentage-point increments. Width=10/20=50 percentage points.

The generator enumerates all 1,024 binary assignments. It gives no probability to an assignment. Endpoint World A fills all unknowns with value; World B fills all with bluff. Both preserve every observed row. No random sampling, seed or population-rate estimation occurs.

## Files and reproducibility

Download every file linked below into one folder. Python 3.10+; standard library only. Run from any working directory:

```
python path/to/generate.py
python path/to/verify.py
python -O path/to/verify.py
```

The generator reads observed.csv next to itself and rewrites results.json and completions.csv there using UTF-8/LF. The independently written verifier does not import the generator. It checks the published results and compatible endpoint assignments using its own calculations. SHA256SUMS records byte hashes of the other public files. To check hashes portably:

```
python -c "from pathlib import Path; import hashlib; p=Path('path/to/folder'); rows=[line.split('  ',1) for line in (p/'SHA256SUMS').read_text().splitlines()]; bad=[name for expected,name in rows if hashlib.sha256((p/name).read_bytes()).hexdigest()!=expected]; print('PASS' if not bad else bad); raise SystemExit(bool(bad))"
```

- [Observed CSV](observed.csv): unique bet ID and known/unknown observed label.
- [Endpoint CSV](completions.csv): world, bet ID, observed label, completed label.
- [Exact results](results.json): rational fractions as strings, counts and assumptions.
- [Generator](generate.py) and [independent verifier](verify.py).
- [Browser workshop](workshop.html): eleven hypothetical totals; defaults to the lower-bound completion. Original observations remain fixed. The figure and article supply static equivalents.
- [Two-world figure](two-worlds.svg) and [hero source](hero.svg).
- [SHA-256 checksums](SHA256SUMS).

Open workshop.html locally or on the site. It uses no external libraries, network requests or storage. JavaScript updates the hypothetical assignment; with JavaScript disabled, endpoint text and the initial world remain readable. It is a fixed teaching example, not an arbitrary data importer or an opponent classifier.

## Limits

These are bounds for a finite completed record under its binary-label assumptions, not a confidence interval, posterior interval or prediction. A missing denominator, mislabeled known rows, omitted bets or a different classification rule invalidates direct use. Visible cards can still leave intent uncertain. No calling threshold, strategic adjustment or outcome guarantee follows.

All original public files in this folder are released under CC0-1.0. External source documents are not bundled. Primary subject evidence is cited in the article: PokerStars' operator-specific show/muck help and Southey et al., Bayes' Bluff, UAI 2005 §3.3, both accessed September 6, 2026. The exact finite bounds are our own elementary enumeration, not a result attributed to that paper.
