id: bfc4f723ff2c475a8bf7c4814a69b28f
parent_id: c9a2bd29538043afa782840112a74655
item_type: 1
item_id: 47031623e2c6451fb36730ffe93380ea
item_updated_time: 1784263355285
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"07-1\"],[-1,\"6\"],[1,\"7\"],[0,\" (rev \"],[-1,\"4\"],[1,\"5\"],[0,\").\\\n\\\n\"]],\"start1\":26,\"start2\":26,\"length1\":16,\"length2\":16},{\"diffs\":[[0,\"t×(1-hs)\"],[1,\" - behind_penalty_w×(1-hs)×(1-ppot)\"],[0,\"`\\\n  - ca\"]],\"start1\":1199,\"start2\":1199,\"length1\":16,\"length2\":51},{\"diffs\":[[0,\"sigmoid\\\n\"],[1,\"- Per-opponent PFR/VPIP for reraise/call paths (with table-level fallback)\\\n\"],[0,\"- **Conf\"]],\"start1\":1880,\"start2\":1880,\"length1\":16,\"length2\":91},{\"diffs\":[[0,\"2026-07-\"],[-1,\"08\"],[1,\"16\"],[0,\")\\\n- ✅ Fi\"]],\"start1\":2024,\"start2\":2024,\"length1\":18,\"length2\":18},{\"diffs\":[[0,\"nts\\\n\"],[-1,\"\\\n### Live Performance (2026-07-08 session)\\\n- **~65 hands at Ballsy II (12.5K/25K)**\\\n- Big wins: T4 two pair +21.2M, A9 trips +12.97M, QTo two pair +6.49M, QQ overpair +1.84M\\\n- **~42.5M total winnings** from value hands\\\n- Concern: ATo called 4.5M (187BB) preflop facing multiple all-ins — G47 threshold too low for huge bets\\\n\\\n### Open Tuning Items\\\n- [x] **G47 preflop: tighten threshold for very large bets** (ATo 187BB call issue) — DONE (2026-07-16): already resolved by domination-tax scaling (`rpot_domination_weight` + `dom_scale` capped 4× for large raises). Reproduction t\"],[1,\"- ✅ G47 call-path sizing narrowing (`call_range` narrows by bet sizing)\\\n- ✅ G48 KK overplay on Ace-high boards — board-hit boost (narrow_board_hit_boost=3.0)\\\n- ✅ Per-player loosen\"],[0,\"es\"],[-1,\"t\"],[0,\"s \"],[-1,\"hardened into regression guards (`replay_ato_facing_4bet` → Fold).\\\n- [x] **G47 call-path sizing narrowing** — DONE (2026-07-16): `call_range` now narrows by bet sizing (same formula as reraise path). Fixes AJs calling a 78BB UTG shove (hand #22 Periodic II — TomBriant KK). Regression test `replay_ajs_facing_shove`. Root cause: VPIP measures general looseness, not shove-range width.\\\n- [x] **G48 KK overplay on Ace-high boards** — DONE (2026-07-16): added board-hit weighting to range narrowing (narrow_board_hit_boost=3.0). KK hs drops 0.647->0.129 flop, 0.183 river (below bet threshold). Flop Raise->Check, River Bet->Check. Also fixed parallel test registration race (register_bot_type idempotent). Sanity passed all gates.\\\n- [ ] Wire per-opponent PFR into G47 equity lookup (currently table-level only)\"],[1,\"(`aggressor_vpip()` keys off bettor's individual VPIP)\\\n- ✅ Per-opponent PFR in G47 reraise path (was table-level)\\\n- ✅ RaiseBelowMinimum fix (BB rounding clamp in raise sizing)\\\n- ✅ Draw-heavy board trap guard (`board_is_drawy()` in gen3 + formula_postflop)\\\n- ✅ Deep-stack overbet allin fix (raise to opponent effective stack, not full shove)\\\n- ✅ Behind-penalty in value_score (behind_penalty_weight=0.15)\\\n\\\n### Open Tuning Items\"],[0,\"\\\n- [\"],[-1,\" \"],[1,\"x\"],[0,\"] \"],[1,\"~~\"],[0,\"Post\"]],\"start1\":2421,\"start2\":2421,\"length1\":1406,\"length2\":626},{\"diffs\":[[0,\"trix\"],[-1,\" (extend PEM2 to common board textures)\\\n- [x] Per-player looseness (use individual VPIP instead of table VPIP) — DONE (2026-07-16): G48 `opp_looseness()` now keys off the bettor's individual VPIP (`aggressor_vpip`), falling back to table VPIP when first-in. Thresholds now match the per-player range equity in `build_ranges_and_equity`.\"],[1,\"~~ — DEFERRED (MC rollouts are fine for live play)\\\n- [x] All 2026-07-16 tuning items complete (see above)\"],[0,\"\\\n- [\"],[-1,\" \"],[1,\"x\"],[0,\"] Ch\"]],\"start1\":3061,\"start2\":3061,\"length1\":349,\"length2\":118},{\"diffs\":[[0,\"ump_bot \"],[-1,\"`\"],[0,\"RaiseBel\"]],\"start1\":3179,\"start2\":3179,\"length1\":17,\"length2\":16},{\"diffs\":[[0,\"imum\"],[-1,\"` root cause\"],[1,\" — DONE (BB rounding clamp)\"],[0,\"\\\n\\\n--\"]],\"start1\":3200,\"start2\":3200,\"length1\":20,\"length2\":35},{\"diffs\":[[0,\"r v0.1.1\"],[-1,\"0\"],[1,\"1\"],[0,\" — DOM p\"]],\"start1\":3460,\"start2\":3460,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"s/`\\\n\"],[-1,\"\\\n### Open Issues\\\n- [ ] DOM snapshot mode (capture full HTML at each decision for debugging/training)\"],[1,\"- ✅ **DOM snapshot mode** — `dom_snapshot` on `waiting_for_action` + `raw_text` on `player_action` events. Userscript captures table HTML (gated by `window.__marvinDomDebug = true`). Server logs snapshots to per-hand decision logs.\\\n- ✅ Raise amount regex fix (k/M suffix handling in parser.ts)\\\n- ✅ Corrupt blinds false positive fix (silent when sb/bb non-zero but not yet seen)\\\n- ✅ Raise tolerance fix (1% → 5% for Torn chip denomination rounding)\\\n\\\n### Open Issues\"],[0,\"\\\n- [\"]],\"start1\":3741,\"start2\":3741,\"length1\":108,\"length2\":472},{\"diffs\":[[0,\"ing \"],[-1,\"⏸️ PAUSED\"],[1,\"🔄 IN PROGRESS\"],[0,\"\\\n\\\n> \"]],\"start1\":4320,\"start2\":4320,\"length1\":17,\"length2\":22},{\"diffs\":[[0,\"ion \"],[-1,\"STOPPED — focus on G47/G48 optimization first\"],[1,\"RESUMED with G48 teacher (2026-07-17)\"],[0,\".\\\n\\\n#\"]],\"start1\":4359,\"start2\":4359,\"length1\":53,\"length2\":45},{\"diffs\":[[0,\"256→\"],[-1,\"11+1\"],[1,\"3+5+1 multi-head\"],[0,\")\\\n- \"]],\"start1\":4671,\"start2\":4671,\"length1\":12,\"length2\":24},{\"diffs\":[[0,\"(v11 = best \"],[1,\"deployed \"],[0,\"model, +27.9\"]],\"start1\":4909,\"start2\":4909,\"length1\":24,\"length2\":33},{\"diffs\":[[0,\"hand\"],[-1,\" real performance\"],[1,\")\\\n- ✅ **G48 teacher wiring** — `teacher_postflop` config field: `\\\"formula\\\"` → `FormulaPostflopGen48`, `\\\"adaptive\\\"` → `AdaptivePostflopGen4`\\\n\\\n### Data Collection (2026-07-17)\\\n- **Short-handed batch (3-6 handed)**: COMPLETE — 24.1M transitions from 10M hands (39GB)\\\n- **Full-ring batch (7-8 handed)**: RUNNING — 8 tables × 1.25M hands, ETA ~23h\\\n- Combined target: ~44M transitions covering full Torn seat distribution\\\n- Teacher: G47 preflop (PEM2) + G48 postflop (formula, 10K MC budget for collection speed)\\\n- Config: `gen5_collect_g48.toml` (mirrors `cash_nl_g48_live.toml`)\\\n- Scripts: `gen5_collect_g48.sh` (short-handed), `gen5_collect_g48_fullring.sh` (full-ring\"],[0,\")\\\n\\\n#\"]],\"start1\":4953,\"start2\":4953,\"length1\":25,\"length2\":673},{\"diffs\":[[0,\"mitation\"],[1,\" (G4.5 teacher)\"],[0,\" | 45-46\"]],\"start1\":5813,\"start2\":5813,\"length1\":16,\"length2\":31},{\"diffs\":[[0,\"|\\\n| \"],[-1,\"**\"],[0,\"v11\"],[-1,\"**\"],[0,\" | 3\"]],\"start1\":5868,\"start2\":5868,\"length1\":15,\"length2\":11},{\"diffs\":[[0,\"U | \"],[-1,\"**\"],[0,\"45.2%\"],[-1,\"**\"],[0,\" | \"],[-1,\"**Current\"],[1,\"Previous\"],[0,\" best\"],[-1,\"**\"],[0,\" (+2\"]],\"start1\":5908,\"start2\":5908,\"length1\":36,\"length2\":29},{\"diffs\":[[0,\" v12\"],[-1,\" | Class weights | 45.5% | Marginal improvement |\\\n\\\n### Next Steps (when resumed)\\\n1. ⬜ Update `gen5_c\"],[1,\"-v13 | G47 teacher, class weights | 97.6% action, 76.6% sizing | Plateaued — teacher quality ceiling |\\\n| **v14** | **G48 teacher, ~44M transitions** | **TBD** | **Next: train after collection** |\\\n\\\n### Next Steps\\\n1. ✅ Wire G48 as teacher (`teacher_postflop = \\\"formula\\\"`)\\\n2. ✅ Collect short-handed data (24.1M transitions)\\\n3. ⏳ C\"],[0,\"ollect\"],[-1,\"_\"],[1,\" \"],[0,\"full\"],[-1,\"` to use **G48 as teacher**\\\n2\"],[1,\"-ring data (~20M transitions, running)\\\n4\"],[0,\". ⬜ \"]],\"start1\":5956,\"start2\":5956,\"length1\":148,\"length2\":386},{\"diffs\":[[0,\"n v1\"],[-1,\"3\"],[1,\"4\"],[0,\" on \"],[-1,\"new\"],[1,\"merged G48 teacher\"],[0,\" tra\"]],\"start1\":6346,\"start2\":6346,\"length1\":16,\"length2\":31},{\"diffs\":[[0,\"sitions\\\n\"],[-1,\"3\"],[1,\"5\"],[0,\". ⬜ Eval\"]],\"start1\":6378,\"start2\":6378,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"luate v1\"],[-1,\"3\"],[1,\"4\"],[0,\" vs G48 \"]],\"start1\":6394,\"start2\":6394,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"ulation\\\n\"],[-1,\"4\"],[1,\"6\"],[0,\". ⬜ PPO \"]],\"start1\":6417,\"start2\":6417,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"plateaus\"],[1,\" again\"],[0,\")\\\n\\\n---\\\n\\\n\"]],\"start1\":6460,\"start2\":6460,\"length1\":16,\"length2\":22},{\"diffs\":[[0,\"2026-07-\"],[-1,\"08\"],[1,\"17\"],[0,\")\\\n\\\n| Met\"]],\"start1\":6498,\"start2\":6498,\"length1\":18,\"length2\":18},{\"diffs\":[[0,\"t v0.1.1\"],[-1,\"0\"],[1,\"1\"],[0,\" |\\\n| MC \"]],\"start1\":6786,\"start2\":6786,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"tests | \"],[-1,\"28\"],[1,\"49\"],[0,\" hand re\"]],\"start1\":6933,\"start2\":6933,\"length1\":18,\"length2\":18},{\"diffs\":[[0,\"sts + 47\"],[-1,\"7\"],[1,\"8\"],[0,\" lib tes\"]],\"start1\":6958,\"start2\":6958,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"n 5 \"],[-1,\"best model | v11, eval_acc=45.2%, +27.9 chips/hand\"],[1,\"transitions | 24.1M (short-handed done) + ~20M (full-ring in progress)\"],[0,\" |\\\n|\"]],\"start1\":6995,\"start2\":6995,\"length1\":58,\"length2\":78},{\"diffs\":[[0,\" session\"],[1,\"s |\"],[0,\" 2026-07\"]],\"start1\":7078,\"start2\":7078,\"length1\":16,\"length2\":19},{\"diffs\":[[0,\"-08 \"],[-1,\"| ~65 hands, \"],[1,\"(\"],[0,\"~42.\"]],\"start1\":7097,\"start2\":7097,\"length1\":21,\"length2\":9},{\"diffs\":[[0,\"winnings\"],[1,\"), 2026-07-16 (clean, no issues)\"],[0,\" |\\\n\\\n---\\\n\"]],\"start1\":7109,\"start2\":7109,\"length1\":16,\"length2\":48},{\"diffs\":[[0,\"\\\n1. \"],[-1,\"~~Fix G47 preflop large-bet threshold~~ ✅ DONE (2026-07-16) — ATo folds large 4-bets; regression tests added (`replay_ato_facing_4bet`, `replay_a9o_facing_3bet`, `replay_k8o_btn_iso`)\\\n2. ~~Per-player looseness~~ ✅ DONE (2026-07-16) — G48 thresholds now use the bettor's individual VPIP (was table-level); `aggressor_vpip()` with graceful fallback. Live server rebuilt & restarted.\\\n3. ~~Fix G47 call-p\"],[1,\"**Wait for full-ring collection** (~23h, auto-running) → merge both batches\\\n2. **Train v14** — `train_gen5_multi <merged> 30 1024 1e-4 models/postflop_v14.safetensors --street postflop` (needs `--features gen5_nn`)\\\n3. **Evaluate v14** vs G48 in simulation — target: beat G48 or m\"],[0,\"at\"],[1,\"c\"],[0,\"h \"],[-1,\"sizing~~ ✅ DONE (2026-07-16) — call_range narrows by bet sizing; AJs folds 78BB shove. Regression test `replay_ajs_facing_shove`.\\\n4\"],[1,\"with lower latency\\\n4. **PPO fine-tuning** if v14 imitation plateaus (REINFORCE/PPO on RL-sampled transitions)\\\n5\"],[0,\". **\"]],\"start1\":7195,\"start2\":7195,\"length1\":543,\"length2\":403},{\"diffs\":[[0,\"g** \"],[-1,\"of G48 postflop —\"],[1,\"— keep\"],[0,\" watch\"],[1,\"ing\"],[0,\" for \"],[-1,\"fold/call patterns with medium hands (live_server + 10-min audit loop running)\\\n5. **Re-run sweeps** as profile data accumulates\\\n6. **Postflop exploration** — postflop equity matrix (extend PEM2 to board textures) or learned postflop\"],[1,\"reconciliation warnings, test DOM snapshot mode\\\n6. **Update `gen5_rl.toml`** deploy config to point at v14 multi-head model + norm.json\\\n\"]],\"start1\":7612,\"start2\":7612,\"length1\":264,\"length2\":160}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-07-17T04:46:45.652Z
created_time: 2026-07-17T04:46:45.652Z
type_: 13