id: 93796e2862464618b3d41101b4f1c9c0
parent_id: 814f68624106477cb2af7a2445e1e5cc
item_type: 1
item_id: 47031623e2c6451fb36730ffe93380ea
item_updated_time: 1782623923429
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"#\"],[-1,\" Poker Bot & Live Server\"],[0,\" Roa\"]],\"start1\":0,\"start2\":0,\"length1\":29,\"length2\":5},{\"diffs\":[[0,\"oadmap\\\n\\\n\"],[1,\"> \"],[0,\"Updated \"]],\"start1\":3,\"start2\":3,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"026-06-2\"],[-1,\"3\"],[1,\"8\"],[0,\".\\\n\\\n---\\\n\\\n\"]],\"start1\":22,\"start2\":22,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"PLETE\\\n\\\n-\"],[-1,\" ✅\"],[0,\" Simulat\"]],\"start1\":75,\"start2\":75,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"G, MTT\\\n-\"],[-1,\" ✅\"],[0,\" Strateg\"]],\"start1\":134,\"start2\":134,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"sition, \"],[-1,\"15\"],[1,\"**20\"],[0,\" registe\"]],\"start1\":181,\"start2\":181,\"length1\":18,\"length2\":20},{\"diffs\":[[0,\"rategies\"],[1,\"**\"],[0,\"\\\n-\"],[-1,\" ✅\"],[0,\" Gen 1 s\"]],\"start1\":207,\"start2\":207,\"length1\":20,\"length2\":20},{\"diffs\":[[0,\"ules\"],[-1,\" for preflop and postflop\"],[0,\"\\\n-\"],[-1,\" ✅\"],[0,\" Con\"]],\"start1\":247,\"start2\":247,\"length1\":37,\"length2\":10},{\"diffs\":[[0,\"s — \"],[-1,\"82\"],[1,\"**80+\"],[0,\" Pos\"]],\"start1\":276,\"start2\":276,\"length1\":10,\"length2\":13},{\"diffs\":[[0,\"s fields\"],[1,\"**\"],[0,\" with TO\"]],\"start1\":303,\"start2\":303,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"es\\\n-\"],[-1,\" ✅ A/B testing infrastructure\\\n- ✅\"],[0,\" Exp\"]],\"start1\":331,\"start2\":331,\"length1\":41,\"length2\":8},{\"diffs\":[[0,\"eep tool\"],[1,\" (84 params)\"],[0,\"\\\n-\"],[-1,\" ✅\"],[0,\" `hand_r\"]],\"start1\":390,\"start2\":390,\"length1\":20,\"length2\":30},{\"diffs\":[[0,\"e — \"],[-1,\"PT3/\"],[0,\"Poke\"]],\"start1\":431,\"start2\":431,\"length1\":12,\"length2\":8},{\"diffs\":[[0,\"gression\"],[1,\" (**18 tests**)\"],[0,\"\\\n\\\n---\\\n\\\n#\"]],\"start1\":477,\"start2\":477,\"length1\":16,\"length2\":31},{\"diffs\":[[0,\" 2: Gen \"],[-1,\"3\"],[1,\"2-4 Strategy\"],[0,\" Develop\"]],\"start1\":515,\"start2\":515,\"length1\":17,\"length2\":28},{\"diffs\":[[0,\"- ✅ \"],[-1,\"Range-aware equity — `HandRange::init_opponent_range`\\\n- ✅\"],[1,\"Gen 2:\"],[0,\" Mon\"]],\"start1\":576,\"start2\":576,\"length1\":65,\"length2\":14},{\"diffs\":[[0,\"rlo \"],[-1,\"multi-way\"],[1,\"EHS\"],[0,\" equ\"]],\"start1\":595,\"start2\":595,\"length1\":17,\"length2\":11},{\"diffs\":[[0,\"- ✅ \"],[-1,\"Weighted decision scoring — dynamic threshold adjustments\\\n- ✅ 15 Gen3Config parameters\\\n- ✅ **Production baseline** — `cash_nl.toml` = `ng_preflop` + `g3_postflop_rollout`\\\n- ✅ Parameter sweep results (19 params × 2 directions × 2 scenarios)\\\n- ✅ hand_replay validation — 27.3% mismatch rate (all passive; B7 root cause identified)\\\n\\\n**Still tuning:**\\\n- 🔄 B7: bet_adj_cap too high (bot too passive postflop)\\\n- 🔄 B8: num_callers inflation bug\\\n- 🔄 B9: preflop too tight for premiums in SB\\\n\\\n**Pending (Gen 4 direction):**\\\n- [ ] RangePredictor — per-opponent range tracking from observed actions\\\n- [ ] Port missing Java tactics (backAlleyMug, luringBet, scareCardHit)\\\n- [ ] Board texture awareness (connected/monotone/paired detection)\\\n\\\n---\\\n\\\n## Phase 3: Live Integration (Torn) 🔄 ACTIVE\\\n\\\n**Status: Functional — playing live hands.**\"],[1,\"Gen 2: KEHU Nash HU equilibrium (19 tables, +2.97 to +4.46 BB/hand)\\\n- ✅ Gen 2: NG preflop (169-hand ranking tables)\\\n- ✅ Gen 3: Range-aware equity (single predicted opponent range)\\\n- ✅ Gen 3: Pot odds gate in `should_raise` (SPR penalty + equity gate)\\\n- ✅ Gen 4: Adaptive opponent modelling (EMA observer, three-tier blend)\\\n- ✅ Gen 4: Range narrowing with configurable S-curve construction\\\n- ✅ Gen 4: Profile persistence to disk\\\n- ✅ Gen 4: 3 rounds of curve tuning sweeps applied to live config\\\n- ✅ **Production**: `cash_nl_g4_live.toml` (ke_hu → short_stack → g4_adaptive_preflop → g4_adaptive_postflop)\\\n\\\n---\\\n\\\n## Phase 3: Live Integration (Torn) ✅ FUNCTIONAL\"],[0,\"\\\n\\\n##\"]],\"start1\":617,\"start2\":617,\"length1\":836,\"length2\":666},{\"diffs\":[[0,\"pleted\\\n-\"],[-1,\" ✅\"],[0,\" Event-s\"]],\"start1\":1288,\"start2\":1288,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"nt`)\"],[-1,\" — game_start, deal, player_action, waiting_for_action, win, showdown, game_over\\\n- ✅\"],[1,\"\\\n-\"],[0,\" `li\"]],\"start1\":1345,\"start2\":1345,\"length1\":92,\"length2\":10},{\"diffs\":[[0,\"tion\"],[-1,\", inline decisions\\\n- ✅\"],[1,\"\\\n-\"],[0,\" Tor\"]],\"start1\":1422,\"start2\":1422,\"length1\":30,\"length2\":10},{\"diffs\":[[0,\"inds\"],[-1,\", dealer)\\\n- ✅ **Dealer button detection (D4)** — three-layer fix: SB-seat derivation + DOM chip confirmation + server-side corre\"],[1,\")\\\n- Profile persistence (player ID keyed, survives restarts)\\\n- Call mismatch fix (blind reconciliation before non-blind a\"],[0,\"ction\"],[1,\"s)\"],[0,\"\\\n- \"],[-1,\"✅ Blind detection + synthesis (SB/BB/ante, fallback amounts)\\\n- ✅ Action parsing (check/fold/bet/raise/call, raise-by vs raise-to)\\\n- ✅ Pot/stack/wager tracking\\\n- ✅ Hand history logging (PokerTracker-style + per-hand files)\\\n- ✅ Auto sit-in / buy-in\\\n- ✅ Decision d\"],[1,\"Graceful shutdown/restart endpoints (`/api/shutdown`, `/api/restart`)\\\n- Web dashboard (decision history, perf stats, log viewer)\\\n- Replay engine for regression testing (66/77 underpair bugs fixed)\\\n\\\n### Open Issues (from live play)\\\n- [ ] **Cold start waste**: Observer resets to defaults for ~5 hands after restart\\\n- [ ] **Preflop looseness not wired**: `g4_adaptive_preflop` computes factor but doesn't apply it\\\n- [ ] **Passive postflop**: Bot rar\"],[0,\"el\"],[-1,\"a\"],[0,\"y \"],[-1,\"randomization (1-5s)\\\n- ✅ k/M suffix parsing (U3 fixed)\\\n- ✅ seenTexts clearing across hands (U1 fixed)\\\n\\\n### In Progress\\\n- 🔄 Bot strategy tuning vs live play (B7/B8/B9 — see Open Issues Tracker)\\\n- 🔄 Opponent modelling (no per-player range tracking yet — Gen 3 uses generic ranges)\\\n\\\n### Pending\\\n- [ ] U4: Player names containing \\\"flop\\\"/\\\"turn\\\"/\\\"river\\\" misclassifi\"],[1,\"bets first-in postflop (CHECK_DEFAULT)\\\n- [ ] **Range prediction**: 13% miss rate concentrated vs very tight/loose opponents\\\n\\\n### Pending\\\n- [ ] DOM snapshot mode (capture full HTML at each decision for debugging/training)\\\n- [ ] Multi-table support\\\n- [ ] Native desktop scrapers (deferred)\\\n\\\n---\\\n\\\n## Phase 4: Gen 5 Reinforcement Learning 🔄 FRAMEWORK READY\\\n\\\n### Implemented\\\n- 280-dim feature extraction (equity, board, betting, opponents, actions)\\\n- 11-discrete-action space with legality masking\\\n- JSONL transition recorder (thread-safe, bound\"],[0,\"ed\"],[1,\")\"],[0,\"\\\n- \"],[-1,\"[ ] U5: `clickWhenReady` retry doesn't re-validate hand ID\\\n- [ ] U6: Events lost on observer re-attachment\\\n- [ ] D1: Missing ante events (chronic) — pot undercounted\\\n- [ ] Multi-table support\\\n- [ ] Native desktop scrapers (deferred)\\\n\\\n---\\\n\\\n## Phase 4: Reinforcement Learning (future)\\\n\\\nNot started. Depends on Gen 3/4 opponent modelling maturity.\"],[1,\"Candle MLP policy network (280→512→512→256→11+1)\\\n- OpponentFeatures bridge from Gen 4 observer\\\n- `gen5_collect` bot type (Gen 3 teacher + transition recording)\\\n\\\n### Next Steps\\\n1. Wire Gen5 recorder into live server (record transitions alongside Gen 4 decisions)\\\n2. Implement showdown hand recording (revealed cards for range training)\\\n3. Fill OpponentFeatures situational fields (stack_bb, wagered_bb, distance)\\\n4. Implement reward assignment (outcome → per-transition reward)\\\n5. Collect ~500k hands from Gen 3/4 teacher\\\n6. Train Phase 1 imitation model\\\n7. Evaluate against Gen 3/4 in simulation\"],[0,\"\\\n\\\n--\"]],\"start1\":1503,\"start2\":1503,\"length1\":1120,\"length2\":1732},{\"diffs\":[[0,\"026-06-2\"],[-1,\"3\"],[1,\"8\"],[0,\")\\\n\\\n| Met\"]],\"start1\":3255,\"start2\":3255,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"s | \"],[-1,\"15\"],[1,\"20\"],[0,\" |\\\n|\"]],\"start1\":3327,\"start2\":3327,\"length1\":10,\"length2\":10},{\"diffs\":[[0,\"Gen \"],[-1,\"3 (ng_preflop + g3\"],[1,\"4 (g4_adaptive\"],[0,\"_pos\"]],\"start1\":3355,\"start2\":3355,\"length1\":26,\"length2\":22},{\"diffs\":[[0,\"flop\"],[-1,\"_rollout\"],[0,\") |\\\n\"]],\"start1\":3378,\"start2\":3378,\"length1\":16,\"length2\":8},{\"diffs\":[[0,\"s | \"],[-1,\"345+\"],[1,\"520\"],[0,\" |\\\n| \"],[-1,\"Hand replay mismatch | 27.3% (all passive — B7) |\"],[1,\"Range prediction accuracy | ~87% hit rate |\\\n| g4_live vs chump | +253 BB/100 |\\\n| Curve sweep rounds | 3 (7 winners applied) |\\\n\\\n---\\\n\\\n## Immediate Next Session Priorities\\\n\\\n1. **Start live server** and resume play\\\n2. **Trigger hand audits** — replay recent hands through the replay engine to catch regressions\\\n3. **Run parameter sweeps** — continue tuning Gen 4 thresholds:\\\n   - Sweep the passive postflop issue (increase `bet_flop_base`, `strong_hands_fraction`)\\\n   - Sweep range construction parameters (S-curve steepness, narrowing strength)\\\n   - Validate against both chump_bot and flock_bot\\\n4. **Fix cold start** — check for profile files on startup\\\n5. **Wire preflop looseness** — apply VPID-based looseness in `g4_adaptive_preflop`\"]],\"start1\":3447,\"start2\":3447,\"length1\":62,\"length2\":747}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-06-28T05:27:39.030Z
created_time: 2026-06-28T05:27:39.030Z
type_: 13