id: a0cc3cf6624541ba9b5b61aaa75ace97
parent_id: 93796e2862464618b3d41101b4f1c9c0
item_type: 1
item_id: 47031623e2c6451fb36730ffe93380ea
item_updated_time: 1782797658426
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"2026-06-\"],[-1,\"28\"],[1,\"30\"],[0,\".\\\n\\\n---\\\n\\\n\"]],\"start1\":21,\"start2\":21,\"length1\":18,\"length2\":18},{\"diffs\":[[0,\"sion\"],[-1,\" (**18 tests**)\"],[0,\"\\\n\\\n--\"]],\"start1\":481,\"start2\":481,\"length1\":23,\"length2\":8},{\"diffs\":[[0,\"y engine\"],[-1,\"\\\n- ✅ Gen 2:\"],[1,\" +\"],[0,\" KEHU Na\"]],\"start1\":593,\"start2\":593,\"length1\":27,\"length2\":18},{\"diffs\":[[0,\" HU \"],[-1,\"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 t\"],[1,\"+ NG preflop\\\n- ✅ Gen 3: Range-aware equity (single predicted opponent range)\\\n- ✅ Gen 4: Adaptive opponent modelling (EMA observer, three-tier blend, range narrowing)\\\n- ✅ Gen 4: Profile persistence to disk\\\n- ✅ Gen 4: Preflop looseness wired (VPIP-based threshold scaling)\\\n- ✅ Gen 4: VPIP tracking fixed (survivorship bias + to_call computation)\\\n- ✅ Gen 4: `range_tightness_scale` discount removed (double-co\"],[0,\"un\"],[1,\"t\"],[0,\"ing \"],[1,\"fix)\\\n- ✅ Gen 4: Post-discount \"],[0,\"sweep\"],[-1,\"s\"],[0,\" app\"]],\"start1\":613,\"start2\":613,\"length1\":458,\"length2\":456},{\"diffs\":[[0,\"ied \"],[-1,\"to live config\\\n- ✅ **Production**: `cash_nl_g4_live.toml` (ke_hu → short_stack → g4_adaptive_preflop → g4_adaptive_postflop\"],[1,\"(`bet_turn_base=0.40`, `bet_flop_base=0.15`)\\\n- ✅ Gen 4: Opponent features bridge for Gen 5 data collection\\\n- ✅ **Production**: `cash_nl_g4_live.toml` — validated +132.9/hand vs chumps, +0.95/hand vs gen field\\\n\\\n### Open Tuning Items\\\n- [ ] Passive postflop — bot could value-bet more first-in (needs Gen 5 for full fix)\\\n- [ ] Automated sweep → apply pipeline (currently manual winner selection)\\\n- [ ] Range prediction misses (88% hit rate — extreme opponents cause 12% miss\"],[0,\")\\\n\\\n-\"]],\"start1\":1070,\"start2\":1070,\"length1\":131,\"length2\":479},{\"diffs\":[[0,\")\\\n- \"],[-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 d\"],[1,\"BB-check-via-call fix (zero-cost calls detected as checks)\\\n- Raise-by → raise-to fix (parser sends target amount directly)\\\n- Grac\"],[0,\"ef\"],[-1,\"a\"],[0,\"ul\"],[-1,\"ts for ~5 hands after restart\\\n- [ ] **Preflop looseness not wired**: `g4_adaptive_preflop` computes factor b\"],[1,\" shutdown/restart endpoints (`/api/sh\"],[0,\"ut\"],[-1,\" \"],[0,\"do\"],[-1,\"esn't apply it\\\n- [ ] **Passive postflop**: Bot rarely bets first-in postflop (CHECK_DEFAULT)\\\n- [ ] **Range prediction**: 13% miss rate concentrated vs very tight/loose opponents\\\n\\\n### Pending\"],[1,\"wn`, `/api/restart`)\\\n- AllIn executor confirmed working\\\n- DOM debug logging (toggleable via `config.ts`)\\\n\\\n### Open Issues\"],[0,\"\\\n- [\"]],\"start1\":1956,\"start2\":1956,\"length1\":595,\"length2\":303},{\"diffs\":[[0,\" 🔄 \"],[-1,\"FRAMEWORK READY\"],[1,\"TRAINING IN PROGRESS\"],[0,\"\\\n\\\n##\"]],\"start1\":2453,\"start2\":2453,\"length1\":23,\"length2\":28},{\"diffs\":[[0,\"280→512→\"],[-1,\"512\"],[1,\"LN→512→LN\"],[0,\"→256→11+\"]],\"start1\":2698,\"start2\":2698,\"length1\":19,\"length2\":25},{\"diffs\":[[0,\"6→11+1)\\\n\"],[1,\"- Training CLI with GPU/CUDA, class-weighted loss, gradient clipping, cosine LR\\\n- DAgger strategy (teacher fallback + model inference)\\\n\"],[0,\"- Oppone\"]],\"start1\":2718,\"start2\":2718,\"length1\":16,\"length2\":151},{\"diffs\":[[0,\"ence)\\\n- Opponent\"],[-1,\"F\"],[1,\" f\"],[0,\"eatures bridge f\"]],\"start1\":2855,\"start2\":2855,\"length1\":33,\"length2\":34},{\"diffs\":[[0,\"r\\\n- \"],[-1,\"`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, distanc\"],[1,\"Self-play collection + DAgger loop scripts\\\n\\\n### Bugs Found & Fixed (v1–v4 all degenerate)\\\n- ✅ LayerNorm was documented but not implemented → added\\\n- ✅ `engine_action_to_discrete` broken (all bets→BetHalf, all raises→Raise25x) → fixed\\\n- ✅ Opponent features not bridged (60/280 dims zeroed) → bridged\\\n- ✅ Class imbalance → model collapsed to majority class → class-weighted loss\\\n- ✅ Per-batch optimizer recreation destroyed AdamW state → epoch-level LR schedule\\\n\\\n### Next Steps\\\n1. ⬜ Rebuild `train_gen5` with CUDA, retrain v5 on fresh data (~8M transitions)\\\n2. ⬜ Verify v5 non-degeneracy (per-class accuracy, action distribution)\\\n3. ⬜ Evaluate v5 vs Gen 4 in simulation (validation gat\"],[0,\"e)\\\n4.\"],[1,\" ⬜\"],[0,\" Imp\"]],\"start1\":2906,\"start2\":2906,\"length1\":325,\"length2\":698},{\"diffs\":[[0,\"nt (\"],[-1,\"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\"],[1,\"for PPO Phase 2)\\\n5. ⬜ Fix `gen5_pipeline.sh` bash arithmetic bug for DAgger automation\\\n6. ⬜ PPO self-play training loop (curriculum Gen 1→2→3→4)\"],[0,\"\\\n\\\n--\"]],\"start1\":3626,\"start2\":3626,\"length1\":159,\"length2\":152},{\"diffs\":[[0,\"2026-06-\"],[-1,\"28\"],[1,\"30\"],[0,\")\\\n\\\n| Met\"]],\"start1\":3797,\"start2\":3797,\"length1\":18,\"length2\":18},{\"diffs\":[[0,\"al, \"],[-1,\"tuning |\\\n| Total tests | 520\"],[1,\"playing profitably\"],[0,\" |\\\n|\"]],\"start1\":3965,\"start2\":3965,\"length1\":36,\"length2\":26},{\"diffs\":[[0,\"acy | ~8\"],[-1,\"7\"],[1,\"8\"],[0,\"% hit ra\"]],\"start1\":4014,\"start2\":4014,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\" | +\"],[-1,\"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`\"],[1,\"132.9/hand (60k-hand validation) |\\\n| g4_live vs gen field | +0.95/hand (60k-hand validation) |\\\n| Gen 5 models trained | 4 (v1–v4, all degenerate — fixes in code) |\\\n\\\n---\\\n\\\n## Immediate Next Session Priorities\\\n\\\n1. **Rebuild `train_gen5` with CUDA** and retrain v5 on fresh collection data\\\n2. **Verify v5 non-degeneracy** — check per-class accuracy improves for minority actions\\\n3. **Evaluate v5 vs Gen 4** — if model loses, keep Gen 4 as production\\\n4. **Fix `gen5_pipeline.sh`** for automated DAgger iterations\\\n5. **Continue live play** with Gen 4 (profitable, stable)\"]],\"start1\":4054,\"start2\":4054,\"length1\":673,\"length2\":569}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-06-30T05:37:46.366Z
created_time: 2026-06-30T05:37:46.366Z
type_: 13