# bb/100 and hourly results: reproducible fixtures

Created September 27, 2026 for https://gtogecko.com/blog/poker-bb100-hourly.
These are three authored examples, not player records, sampled outcomes or a poker strategy model. No random seed is applicable.

## Question and conventions

How can normalized big-blind results and currency results have opposite signs? What changes when two tables share the same clock?

All records describe completed no-limit cash play in USD. The big blind is constant within each row. Net cash is after assumed pot rake and before rewards, tips, travel, taxes and other expenses. No staking, currency conversion or cash-out product is modeled. Hands and times are supplied exactly. Minute offsets share one clock within each independent example. Elapsed time means the union of occupied intervals, excluding gaps; table-hours means their summed lengths. No row is missing.

For each row, net bb = net USD / big blind USD. For a selected case, sum row bb before dividing by total hands and multiplying by 100. bb/hour and USD/hour divide their respective totals by elapsed hours. The same-stake control holds big-blind results fixed while changing the stakes and dollar results; it is a separate constructed record.

## Files and reproduction

Keep the files in one directory. Requires Python 3 and Node.js 18 or later, using only their standard libraries.

```text
python generate.py
node verify.mjs
node build-explorer.mjs
```

`inputs.json` holds three fixtures and six rows. `generate.py` calculates exact rational values and writes `results.json` and `sessions.csv`; fractions are strings rather than rounded decimals. `verify.mjs` independently checks the fixed fixtures, row conversions, aggregates, CSV and minute-set elapsed time. It includes deliberate corruption controls. It does not import the generator or certify arbitrary personal records or an app.

`build-explorer.mjs` builds `explorer.html` from the result file. Open the HTML locally to step through the three cases. It has no external assets, network requests, data entry or storage; the optional article link opens the website. With JavaScript disabled all three examples are visible. Print always includes all cases.

To regenerate into a separate directory without overwriting the bundled outputs:

```text
python generate.py generated
node build-explorer.mjs generated
```

The HTML builder reads the verified `results.json` beside its source. To build from newly generated results, put the scripts and inputs in a clean folder and run the first three commands there. Compare file hashes with `SHA256SUMS` before and after reproduction. The checksum manifest excludes itself.

## Literal answers

- Mixed stakes: +60bb, −$30, 1,200 hands, 6 elapsed hours, +5bb/100, +10bb/hour and −$5/hour.
- Same-stake control: +60bb, +$60, 1,200 hands, 6 hours, +5bb/100, +10bb/hour and +$10/hour.
- Simultaneous tables: +10bb, +$20, 200 hands, 1 elapsed hour and 2 table-hours; +5bb/100, +10bb/elapsed hour and +$20/elapsed hour.

## Evidence and limitations

The definitions are established: PokerTracker's current BB/100 unit documentation and official support explanation were accessed September 27, 2026:

- https://docs.pokertracker.com/pt4/tutorials/reports-stats-and-filters/bb100-versus-bb100/
- https://www.pokertracker.com/forums/viewtopic.php?f=58&t=105256

The particular records and shared-clock exercise are original teaching materials. Exact bookkeeping establishes no stable win rate, sample adequacy, profitable strategy, multi-table benefit or future income. A verified fixture cannot discover omitted hands, intervals or charges in real records. No installed tracker or GTO Gecko release was tested for these calculations.
