Live Audit — Open Issues Tracker

# Live Audit — Open Issues Tracker

Updated 2026-06-23 (session 2).
Production bot: `cash_nl.toml` = `ng_preflop` + `g3_postflop_rollout`.
Server: `live_server` on 127.0.0.1:8088 (debug log).

---

## D4 — Dealer button almost always reported as seat 0 ✅ FIXED & VERIFIED

**Root cause:** React renders dealer chip AFTER blind messages → `snap.dealerSeat` always `undefined` at `buildGameStart()`.

**Fix (three layers):**
1. SB-seat derivation (parser.ts) — button = previous active player CCW from SB
2. DOM chip confirmation (index.ts) — `confirmed_dealer_seat` sent with `waiting_for_action`
3. Server correction (table_state.rs) — corrects `button_seat` + `is_dealer` before `decide()`

**Also fixed:** `hero_position_label()` counts dealt-in players (excludes SittingOut). Now running (server restarted this session).

**Committed:** super_marvin `8b330e1`, userscripts `d203f4d`.

---

## Hands Audit Notebook

Detailed analysis in **Hands Audit** notebook (`56a8e67a02b64db68edbe5e58fb205c6`).

---

## STILL OPEN — Bot Strategy

### B7: Bot too passive postflop (range model too tight) — PARTIALLY ADDRESSED
**Root cause:** Gen 3 opponent ranges are binary (0/1) with tight cutoff → win_prob underestimated → folds top pair.
**Hand evidence:** Hand #175 (KJo top pair fold, win_prob=0.217 vs 0.245 pot odds), Hand #159 (AhTd pair+flush draw fold), Hand #29 (ATs flop fold at 18:1).
**This session:** Added `range_looseness=0.30` + `range_floor=0.03` — widens opponent ranges to model loose tables. Committed `d641780`.
**Still needed:** Lower `bet_adj_cap` from 2.0 → 1.0-1.5 for multi-way pots.

### B9: Preflop too tight for premiums in SB
Hand #3: AQo folded at 4:1 pot odds. ng_preflop SB thresholds too conservative.

### B8: `num_callers` counts ALL calls (incl. SB post + limpers)
File: `strategy_bot.rs:119-122`. Inflates call threshold.

### B1: All-in without stack/sizing awareness
File: `rollout_postflop_gen3.rs:1040`.

---

## STILL OPEN — Userscript

### U5: `clickWhenReady` retry doesn't re-validate hand ID
Fold click sometimes doesn't register → hero stays in hand (Hand #167: bot folded but hero called $9000).

### U6: Events lost on observer re-attachment

---

## STILL OPEN — Data Pipeline

### D1: Missing ante events (chronic) — pot undercounted
### D2: Timestamp-based hand IDs (recurring)

---

## RESOLVED

- [x] **D5: Stale hole cards across hands** — Fixed: `lastHeroCards` tracking in parser.ts (commit `c38af6e`, v0.1.5)
- [x] **U4: Player names containing "flop"/"turn"/"river"** — Fixed: word-boundary regex (commit `c38af6e`, v0.1.5)
- [x] **D4: Dealer button stuck at seat 0** — SB derivation + chip confirmation + server correction
- [x] **U3: k/M suffix raise parsing** — `parseAmount` handles k/M suffixes
- [x] **U1: seenTexts never cleared** — `resetHand()` clears seenTexts
- [x] **D3: SB amount=0** — Client-side SB synthesis + server-side derivation
- [x] **Range too tight (table-adaptive)** — `range_looseness` + `range_floor` params (commit `d641780`)
- [x] **powf(0) raise gate** — `aggression_adjustment()` floors to 1.0
- [x] **B3: Suited one-gappers** — ng_preflop uses 169-hand ranking tables
- [x] **B4: 93.5% fold rate facing postflop bets** — `call_adj_cap=1.2`
- [x] **B5: 85% check rate when first-in** — `bet_adj_cap=2.0` (still needs further lowering)
- [x] **B6: SB completion too tight** — 0.60 threshold
- [x] **Preflop re-raise pot odds** — `reraise_potodds_call_ratio`
- [x] **f64::MAX sentinel** — Fixed
- [x] **action_commits_me cost** — Fixed
- [x] **Rigid 50% pot bet sizing** — Dynamic sizing
- [x] **sweep_mode in production** — `sweep_mode = false`
- [x] **U2 (partial)** — forceFlush synthesizes SB+BB

---

## Production Config (cash_nl.toml — Gen 3)

| Parameter | Value | Purpose |
|-----------|-------|---------|
| call_base | 0.50 | Base call threshold |
| call_adj_cap | 1.2 | Call threshold adjustment cap |
| bet_adj_cap | 2.0 | ← **still needs lowering (B7)** |
| bet_flop_base | 0.52 | Flop betting threshold |
| bet_turn_base | 0.70 | Turn betting threshold |
| raise_base | 0.80 | Value raise threshold |
| **range_looseness** | **0.30** | Medium-tier hands at 30% weight |
| **range_floor** | **0.03** | Min 3% weight for all hands |
| sweep_mode | false | Production mode |

---

## Priority Remaining Fixes

1. **B7** (bet_adj_cap) — lower from 2.0 → 1.0-1.5
2. **B8** (num_callers) — count only post-last-raise callers
3. **B9** (preflop premiums SB) — check ng_preflop thresholds
4. **U5** (clickWhenReady) — re-validate hand ID on retry
5. **B1** (all-in sizing) — stack-depth check
6. **D1** (missing antes) — pot accuracy

id: 60976d006f58404387784a6b90ebf04c
parent_id: 1246bbc3bb4948fc8329079b84b4ae3d
created_time: 2026-06-22T10:20:30.824Z
updated_time: 2026-06-23T15:55:03.244Z
is_conflict: 0
latitude: 0.00000000
longitude: 0.00000000
altitude: 0.0000
author: 
source_url: 
is_todo: 0
todo_due: 0
todo_completed: 0
source: joplin-desktop
source_application: net.cozic.joplin-desktop
application_data: 
order: 1782123630824
user_created_time: 2026-06-22T10:20:30.824Z
user_updated_time: 2026-06-23T15:55:03.244Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 0
type_: 1