id: d50ddef40dd34b99ad497ac757109bb3
parent_id: 38c788074c2e4ed49bf13e01c35a5e61
item_type: 1
item_id: 60976d006f58404387784a6b90ebf04c
item_updated_time: 1782632811565
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"26-06-28\"],[1,\" (session 2)\"],[0,\". Produc\"]],\"start1\":48,\"start2\":48,\"length1\":16,\"length2\":28},{\"diffs\":[[0,\" 🔄 \"],[-1,\"Open | Bot rarely bets first-in postflop. Most first-in decisions default to CHECK. Needs higher\"],[1,\"Partial |\"],[0,\" `bet_\"],[-1,\"flop\"],[1,\"turn\"],[0,\"_base\"],[-1,\"` /\"],[1,\"=0.58`,\"],[0,\" `st\"]],\"start1\":307,\"start2\":307,\"length1\":122,\"length2\":39},{\"diffs\":[[0,\"tion\"],[-1,\"`. |\\\n| **S2**\"],[1,\"=0.30` applied. Further improvement needs Gen 5 learned betting. |\\\n| ~~S2~~\"],[0,\" | \"],[1,\"~~\"],[0,\"Cold\"]],\"start1\":361,\"start2\":361,\"length1\":24,\"length2\":88},{\"diffs\":[[0,\"aste\"],[1,\"~~\"],[0,\" | \"],[-1,\"🔄 Open | Observer resets to Gen 3 defaults for ~5 hands after restart, even with profile files on disk. Fix: check loaded profile `hands_observed` on startup. |\\\n| **S3**\"],[1,\"✅ **Resolved** | `update_table_info()` loads table profile from disk; `on_hand_start()` loads player profiles with `hands_observed` intact. Verified in code: cold-start check at `hands_observed >= 5` passes when profiles exist. |\\\n| ~~S3~~\"],[0,\" | \"],[1,\"~~\"],[0,\"Pref\"]],\"start1\":457,\"start2\":457,\"length1\":184,\"length2\":256},{\"diffs\":[[0,\"ired\"],[1,\"~~\"],[0,\" | \"],[-1,\"🔄 Open | `g4_a\"],[1,\"✅ **Fixed** | Added `looseness_mult` to `NgPreFlopConfig`; `A\"],[0,\"daptive\"],[-1,\"_p\"],[1,\"P\"],[0,\"reflop\"],[-1,\"` comput\"],[1,\"Gen4::get_action` now appli\"],[0,\"es VPIP-\"],[-1,\"based\"],[1,\"driven\"],[0,\" loo\"]],\"start1\":732,\"start2\":732,\"length1\":62,\"length2\":129},{\"diffs\":[[0,\"ess \"],[-1,\"factor but doesn't apply it to NG preflop thresholds (TODO at `adaptive_preflop.rs:120`)\"],[1,\"to open-raise + limp thresholds\"],[0,\". |\\\n\"]],\"start1\":864,\"start2\":864,\"length1\":96,\"length2\":39},{\"diffs\":[[0,\"pen | 87\"],[1,\".9\"],[0,\"% hit ra\"]],\"start1\":946,\"start2\":946,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"rate\"],[-1,\" concentrated misses vs v\"],[1,\". Weight map sweep (14 variants) shows minimal improvement via paramet\"],[0,\"er\"],[-1,\"y\"],[0,\" t\"],[-1,\"ight/loose opponents. S-curve c\"],[1,\"uning (±2/hand). Needs Gen 5 range-prediction NN. |\\\n| **S5** | Gen 5 opponent features not bridged | 🔄 Open | `compute_features()` passes empty opponent_stats. Bridge Gen 4 PlayerStats → OpponentFeatures. |\\\n| **S6** | Gen 5 no reward assignment | 🔄 Open | Transiti\"],[0,\"on\"],[1,\" \"],[0,\"struct\"],[-1,\"ion may need per-VPIP-tier parameters. |\\\n\\\n### Fixed Issues (2026-06-27)\\\n\\\n| ID | Issue | Fix |\\\n|---|---|---|\\\n| ~~B1~~ | All-in without stack/sizing awareness | Pot odds gate in `should_raise()`: large bet penalty + SPR penalty + hard equity gate (hs<0.60 → threshold≥0.65) |\\\n| ~~B7~~ | Bot too passive postflop | `range_tightness_scale=0.8` compensates for narrowed ranges. 3 rounds of c\"],[1,\" lacks reward field. Needed for PPO self-play. |\\\n\\\n### Fixed Issues (2026-06-28 session 2)\\\n\\\n| ID | Issue | Fix |\\\n|---|---|---|\\\n| ~~S3~~ | Preflop looseness not wired | `looseness_mult` field in NgPreFlopConfig + per-decision config clone in AdaptivePreflopGen4 |\\\n| ~~S2~~ | Cold start resets profiles | Verified already handled by disk loading in observer.rs |\\\n\\\n### Fixed Issues (2026-06-27)\\\n\\\n| ID | Issue | Fix |\\\n|---|---|---|\\\n| ~~B1~~ | All-in without stack/sizing awareness | Pot odds gate in `should_raise()` |\\\n| ~~B7~~ | Bot too passive postflop | C\"],[0,\"urve\"]],\"start1\":962,\"start2\":962,\"length1\":463,\"length2\":910},{\"diffs\":[[0,\"weep\"],[-1,\"s\"],[0,\" tun\"],[-1,\"ed thresholds.\"],[1,\"ing,\"],[0,\" `be\"]],\"start1\":1874,\"start2\":1874,\"length1\":27,\"length2\":16},{\"diffs\":[[0,\"se=0.58`\"],[-1,\".\"],[0,\" |\\\n| ~~B\"]],\"start1\":1899,\"start2\":1899,\"length1\":17,\"length2\":16},{\"diffs\":[[0,\"ixed\"],[-1,\": `num_callers` now\"],[1,\" to\"],[0,\" onl\"]],\"start1\":1953,\"start2\":1953,\"length1\":27,\"length2\":11},{\"diffs\":[[0,\"ly count\"],[-1,\"s\"],[0,\" callers\"]],\"start1\":1963,\"start2\":1963,\"length1\":17,\"length2\":16},{\"diffs\":[[0,\"ers \"],[-1,\"who answered the\"],[1,\"of\"],[0,\" las\"]],\"start1\":1976,\"start2\":1976,\"length1\":24,\"length2\":10},{\"diffs\":[[0,\"s()`\"],[-1,\" runs before every non-blind preflop action\"],[0,\" |\\\n|\"]],\"start1\":2072,\"start2\":2072,\"length1\":51,\"length2\":8},{\"diffs\":[[0,\"ranges |\"],[-1,\" Gen 4\"],[0,\" S-curve\"]],\"start1\":2110,\"start2\":2110,\"length1\":22,\"length2\":16},{\"diffs\":[[0,\"ion \"],[-1,\"with configurable narrowing + looseness \"],[0,\"|\\\n\\\n#\"]],\"start1\":2142,\"start2\":2142,\"length1\":48,\"length2\":8},{\"diffs\":[[0,\"### \"],[-1,\"19-param sweep (initial)\\\nTop 5: `nut_draw_ppot_thresh` +4.60, `call_turn_small_bet` +4.44, `rope_a_dope_otb` +3.57\"],[1,\"Gen 4 opponent model sweep (2026-06-28, thresholds fixed)\\\n14 variants × 3 seeds × 20k hands. Best: `narrow_center_offset=0.3` (+2/hand).\\\nAll weight map params within ±2/hand of baseline. **Conclusion: model is accurate;\\\nthreshold scaling is the real lever.**\\\n\\\n### Gen 3/4 config comparison (2026-06-28)\\\nGen 4 dominates Gen 3 by 70% (148 vs 86 vs chumps). `cash_nl_g4_loose` best vs\\\ncalling stations (+2 over live). Loose/tight spread: Gen 3 = 17 pts, Gen 4 = 2 pts.\"],[0,\"\\\n\\\n##\"]],\"start1\":2398,\"start2\":2398,\"length1\":122,\"length2\":473},{\"diffs\":[[0,\"ep (\"],[-1,\"3 rounds\"],[1,\"2026-06-27\"],[0,\", ap\"]],\"start1\":2889,\"start2\":2889,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"ent)\"],[-1,\"\\\n- g4_live vs flock: +2.2 BB/100 (3/10 seeds crashed due to flock_bot raise bug — now fixed)\"],[0,\"\\\n\\\n--\"]],\"start1\":3348,\"start2\":3348,\"length1\":100,\"length2\":8},{\"diffs\":[[0,\"0\\\nra\"],[-1,\"ise_w_protection = 0.35\\\nbluff_hs_max = 0.05\\\nsemi_bluff_max_bet_ratio = 0.30\\\nrange_looseness = 0.05\\\nrange_use_scurve = true\\\nscurve_steepness_mult = 0.3\\\nscurve_floor = 0.05\\\nnarrow_strength_mult = 1.0\\\nnarrow_center_offset = 0.2\\\nrange_tightness_scale\"],[1,\"nge_tightness_scale = 0.8\\\nnarrow_center_offset = 0.2\\\nnarrow_strength_mult = 1.0\\\nscurve_steepness_mult = 0.3\\\nbluff_hs_max = 0.05\\\nrange_looseness\"],[0,\" = 0.\"],[-1,\"8\"],[1,\"05\"],[0,\"\\\n```\"]],\"start1\":3606,\"start2\":3606,\"length1\":260,\"length2\":158},{\"diffs\":[[0,\"\\\n1. \"],[-1,\"Start live server, resume play\\\n2. Trigger hand audits — replay recent hands through replay engine\\\n3. Run parameter sweeps targeting S1 (passive postflop):\\\n   - Increase `bet_flop_base` (0.30 → 0.35-0.40)\\\n   - Increase `strong_hands_fraction` (0.30 → 0.35-0.40)\\\n   - Sweep `bet_adj_cap` (currently 2.0, try 1.5)\\\n4. Fix S2 (cold start) and S3 (preflop looseness)\"],[1,\"Deploy `cash_nl_g4_loose` as default for calling-station tables\\\n2. Sweep EMA half-life (100 → 50/75) for faster opponent adaptation\\\n3. Activate Gen 5 data collection (fix G5-1/G5-2/G5-3)\\\n4. Focus threshold scaling sweeps, not weight map shape\\\n\"]],\"start1\":3798,\"start2\":3798,\"length1\":364,\"length2\":247}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-06-28T07:47:39.172Z
created_time: 2026-06-28T07:47:39.172Z
type_: 13