id: a87a3786c6c5461f84426d90e99cab4e
parent_id: 66ab07a9518443afb3e4430ff4f038ea
item_type: 1
item_id: 3073fa7641ab4c2f9cb9120a98eaa6e0
item_updated_time: 1785502541578
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"es\\\n\\\n\"],[-1,\"|---|---|\\\n| `g1_short_stack_preflop` | Gen 1 | Push/fold preflop (≤25 BB) — removed from cash config, folds defer to G47 |\\\n| `g1_big_stack_preflop` | Gen 1 | Hand-grouping preflop (≥25 BB) \"],[1,\"> Updated 2026-07-31.\\\n\\\n## Strategy Registry\\\n\\\n| Strategy | Gen | Description |\\\n|---|---|---\"],[0,\"|\\\n| \"]],\"start1\":29,\"start2\":29,\"length1\":197,\"length2\":98},{\"diffs\":[[0,\"flop\"],[-1,\"_sng\"],[0,\"` | \"]],\"start1\":146,\"start2\":146,\"length1\":12,\"length2\":8},{\"diffs\":[[0,\"1 | \"],[-1,\"SNG-specific push/fold |\\\n| `g1_fold_micro_stack` | Gen 1 | Fold when micro-stacked in SNG |\\\n| `g1_steal_from_inactive` | Gen 1 | Steal blinds from sitting-out players |\\\n| `g1_sage_endgame` | Gen 1 | Nash HU push/fold (13×13 tables) |\\\n| `g1_postflop_rules` | Gen 1 | Static rules postflop |\\\n| `ng_preflop` | Gen 2/3 | 169-hand ranking table preflop (ported from Java PreFlopStrategyV1) |\\\n| `g2_postflop_rollout` | Gen 2 | Original EHS postflop baseline |\\\n| `g2_postflop_rollout_v4` | Gen 2 | Nut-aware MC multi-way postflop (previous production) |\\\n| `g2_nash_icm` | Gen 2 | Nash/ICM push/fold for SNG\"],[1,\"Push/fold preflop (≤25 BB) |\\\n| `g1_big_stack_preflop` | Gen 1 | Hand-grouping preflop (≥25 BB)\"],[0,\" |\\\n|\"]],\"start1\":158,\"start2\":158,\"length1\":607,\"length2\":102},{\"diffs\":[[0,\"um (\"],[-1,\"ported from Java, \"],[0,\"19 t\"]],\"start1\":313,\"start2\":313,\"length1\":26,\"length2\":8},{\"diffs\":[[0,\") |\\\n| `g\"],[-1,\"3\"],[1,\"2\"],[0,\"_postflo\"]],\"start1\":326,\"start2\":326,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"Gen \"],[-1,\"3 | Range-aware equity postflop |\\\n| `g4_adaptive_preflop` | Gen 4 | VPIP-adaptive NG preflop looseness |\\\n| `g4_adaptive\"],[1,\"2 | EHS postflop baseline |\\\n| `g3\"],[0,\"_pos\"]],\"start1\":356,\"start2\":356,\"length1\":127,\"length2\":41},{\"diffs\":[[0,\"postflop\"],[1,\"_rollout\"],[0,\"` | Gen \"],[-1,\"4\"],[1,\"3\"],[0,\" | Range\"]],\"start1\":394,\"start2\":394,\"length1\":25,\"length2\":33},{\"diffs\":[[0,\"nge-\"],[-1,\"narrowing + observer-driven postflop — used by G45/G47 |\\\n| `g45_playability_preflop` | Gen 4.5 | Playability-enhanced NG pre\"],[1,\"aware equity post\"],[0,\"flop\"]],\"start1\":424,\"start2\":424,\"length1\":132,\"length2\":25},{\"diffs\":[[0,\"preflop — **\"],[-1,\"current \"],[0,\"production p\"]],\"start1\":506,\"start2\":506,\"length1\":32,\"length2\":24},{\"diffs\":[[0,\" Gen 4.8\"],[1,\"/5\"],[0,\" | Formu\"]],\"start1\":567,\"start2\":567,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"/5 | Formula\"],[-1,\"-based\"],[0,\" postflop wi\"]],\"start1\":575,\"start2\":575,\"length1\":30,\"length2\":24},{\"diffs\":[[0,\"ostflop \"],[-1,\"with\"],[1,\"+\"],[0,\" observe\"]],\"start1\":589,\"start2\":589,\"length1\":20,\"length2\":17},{\"diffs\":[[0,\"ges \"],[-1,\"— **current \"],[1,\"+ RangeNet — **\"],[0,\"prod\"]],\"start1\":611,\"start2\":611,\"length1\":20,\"length2\":23},{\"diffs\":[[0,\"| `gen5_\"],[-1,\"collect\"],[1,\"rl\"],[0,\"` | Gen \"]],\"start1\":654,\"start2\":654,\"length1\":23,\"length2\":18},{\"diffs\":[[0,\"tor \"],[-1,\"(Gen3 teacher \"],[0,\"+ \"],[-1,\"t\"],[0,\"ran\"],[-1,\"sition\"],[1,\"ge\"],[0,\" rec\"]],\"start1\":690,\"start2\":690,\"length1\":34,\"length2\":15},{\"diffs\":[[0,\"rder\"],[-1,\") |\\\n| `gen5_collect_g48` | Gen 5 | RL collector with **G48 formula teacher** (teacher_postflop=\\\"formula\\\") |\\\n| `gen5_rl` | Gen 5 | RL model inference (candle MLP with Gen 4 teacher fallback) |\\\n| `chump_bot` | Baseline | Calling station test opponent |\\\n| `flock_bot` | Baseline | Tight-aggressive test opponent |\\\n| `sng` | Legacy | Legacy SNG composite bot |\\\n\\\n## Production Config Chain\\\n\\\n**G48 Live** (`configs/bots/\"],[1,\" (formula teacher) |\\\n\\\n### Opponent Bots (sanity check / collection)\\\n| Config | Type |\\\n|--------|------|\\\n| `cash_nl_gen2` | Gen 2 (EHS rollout) |\\\n| `cash_nl` | Gen 3 (range equity) |\\\n| `cash_nl_g48` | G48 (formula, no range NN) |\\\n| `g48_tag/nit/lag/station/fish/maniac/reg` | G48 personality variants |\\\n\\\n## Production Config Chain (2026-07-31)\\\n\\\n**Gen 5 / G49** (`cash_nl_g49.toml` / `\"],[0,\"cash\"]],\"start1\":706,\"start2\":706,\"length1\":422,\"length2\":391},{\"diffs\":[[0,\"l` / `cash_nl_g4\"],[-1,\"8\"],[1,\"9\"],[0,\"_live.toml`):\\\n``\"]],\"start1\":1087,\"start2\":1087,\"length1\":33,\"length2\":33},{\"diffs\":[[0,\"1. g\"],[-1,\"47_equity_preflop     → preflop: PEM2 matrix equity + unified score\\\n2. g48_formula_postflop   → postflop: formula score + observer ranges + MC 40K\\\n```\\\n\\\n**G47 Live** (`configs/bots/cash_nl_g47_live.toml`) — fallback:\\\n```\\\nvoting_mode = \\\"first_applicable\\\"\\\n\\\n1\"],[1,\"2_ke_hu_nash          → heads-up Nash equilibrium\\\n2\"],[0,\". g4\"]],\"start1\":1156,\"start2\":1156,\"length1\":263,\"length2\":59},{\"diffs\":[[0,\"   →\"],[-1,\" preflop:\"],[0,\" PEM\"]],\"start1\":1233,\"start2\":1233,\"length1\":17,\"length2\":8},{\"diffs\":[[0,\"uity\"],[-1,\"\\\n2. g4_adaptive\"],[1,\" preflop\\\n3. g48_formula\"],[0,\"_pos\"]],\"start1\":1252,\"start2\":1252,\"length1\":23,\"length2\":31},{\"diffs\":[[0,\"flop   →\"],[1,\" formula\"],[0,\" postflo\"]],\"start1\":1284,\"start2\":1284,\"length1\":16,\"length2\":24},{\"diffs\":[[0,\"postflop\"],[-1,\":\"],[1,\" +\"],[0,\" observe\"]],\"start1\":1301,\"start2\":1301,\"length1\":17,\"length2\":18},{\"diffs\":[[0,\"rver\"],[-1,\"-driven range narrowing → Gen 3 equity\\\n```\\\n\\\n## G48 Scoring Formula\\\n\\\n```\\\ncombined = value_score + ppot_weight × ppot\\\nvalue_score = hs × (1 - npot_weight × npot) + nutredraw_weight × nutpot × (1 - hs) − behind_penalty_w × (1 − hs) × (1 − ppot)\\\n\\\ncall_threshold = (call_base + call_bs_weight × board_strength) / looseness × position_factor\\\n\\\nMultiway cap: required_equity × (1 + margin)\\\n  margin = 0.28/√opp (non-river), 0.15/√opp (river)\\\n```\\\n\\\nLive params: `sizing_base=0.33, bet_base=0.08, ppot_weight=0.75, npot_weight=0.10, behind_penalty_weight=0.15, call_base=0.42, call_bs_weight=0.12, narrow_board_hit_boost=3.0`\"],[1,\" ranges\\\n                           + RangeNet (when range_model_path is set)\\\n```\\\n\\\nG49 = G48 + RangeNet. Without range_model_path, it's identical to G48.\"],[0,\"\\\n\\\n##\"]],\"start1\":1316,\"start2\":1316,\"length1\":622,\"length2\":160},{\"diffs\":[[0,\"les\\\n\\\n###\"],[1,\" Gen 4/5\"],[0,\" Strateg\"]],\"start1\":1483,\"start2\":1483,\"length1\":16,\"length2\":24},{\"diffs\":[[0,\"p.rs` — \"],[-1,\"**\"],[0,\"G47 stra\"]],\"start1\":1561,\"start2\":1561,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"strategy\"],[-1,\"**\"],[0,\" (PEM2 e\"]],\"start1\":1573,\"start2\":1573,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"uity\"],[-1,\" decisions, unified preflop score\"],[0,\")\\\n- \"]],\"start1\":1590,\"start2\":1590,\"length1\":41,\"length2\":8},{\"diffs\":[[0,\"p.rs` — \"],[-1,\"**\"],[0,\"G48 stra\"]],\"start1\":1635,\"start2\":1635,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"strategy\"],[-1,\"**\"],[0,\" (formul\"]],\"start1\":1647,\"start2\":1647,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"mula\"],[-1,\"-based postflop\"],[0,\" + o\"]],\"start1\":1660,\"start2\":1660,\"length1\":23,\"length2\":8},{\"diffs\":[[0,\"es)\\\n\"],[-1,\"- `holdem_bots/src/gen4/adaptive.rs` — G45's adaptive postflop (reference for observer-based ranges)\\\n\"],[0,\"- `h\"]],\"start1\":1680,\"start2\":1680,\"length1\":109,\"length2\":8},{\"diffs\":[[0,\"()`,\"],[-1,\" `NarrowContext`,\"],[0,\" ran\"]],\"start1\":1752,\"start2\":1752,\"length1\":25,\"length2\":8},{\"diffs\":[[0,\"en4/\"],[-1,\"profile.rs` — `PlayerStats`, `PlayerProfile`, three-tier blend, `call_raise_freq`\"],[1,\"range_predictor.rs` — `RangePredictor` — loads RangeNet, predicts ranges\"],[0,\"\\\n- `\"]],\"start1\":1875,\"start2\":1875,\"length1\":89,\"length2\":80},{\"diffs\":[[0,\"en4/\"],[-1,\"storag\"],[1,\"profil\"],[0,\"e.rs` — \"],[-1,\"Profile persistence\"],[1,\"`PlayerStats`, `PlayerProfile`, three-tier blend\"],[0,\"\\\n- `\"]],\"start1\":1972,\"start2\":1972,\"length1\":41,\"length2\":70},{\"diffs\":[[0,\"pers\"],[-1,\" (`build_ranges_and_equity()`, `opponent_street_actions()`)\\\n- `holdem_bots/src/gen4/preflop_equity_matrix.rs` — PEM2 matrix (load, generate, equity lookups)\\\n- `holdem_bots/src/gen4/preflop_opening_range.rs` — Opening range visualization\\\n- `holdem_bots/src/cash/rollout_postflop_base.rs` — shared postflop base (27 methods), `push_when_calling()`, `remaining_stack_share()`\\\n- `holdem_bots/src/cash/rollout_postflop_gen3.rs` — `Gen3Equity`, `compute_gen3_equity`, `compute_equity_with_ranges`\\\n- `holdem_bots/src/common/hand_potential.rs` — PotentialResult (hs, ppot, npot, nutpot, rpot, EHS)\\\n- `holdem_bots/src/common/guardrails.rs` — Equity-based safety override system\"],[1,\"\\\n\\\n### Gen 5 Range Model\\\n- `holdem_bots/src/gen5/range_recorder.rs` — Feature extraction (81 dims), `compute_rich_action_history()`\\\n- `holdem_bots/src/gen5/range_net.rs` — RangeNet network (81→512→512→512→256→169) + trainer\"],[0,\"\\\n- `\"]],\"start1\":2098,\"start2\":2098,\"length1\":676,\"length2\":230},{\"diffs\":[[0,\"src/\"],[-1,\"assembly/regi\"],[1,\"gen5/rl_\"],[0,\"strat\"],[-1,\"ions\"],[1,\"egy\"],[0,\".rs` —\"],[1,\" RL\"],[0,\" str\"]],\"start1\":2340,\"start2\":2340,\"length1\":36,\"length2\":33},{\"diffs\":[[0,\"egy \"],[-1,\"registry\\\n- `holdem_bots/src/cash/thresholds.rs` — PostflopThresholds struct (80+ fields)\\\n\\\n### Gen 5\\\n- `holdem_bots/src/gen5/features.rs` — 290-dim feature extraction\"],[1,\"(teacher mode, transition/range recording)\\\n- `holdem_bots/src/gen5/features.rs` — Feature dimensions (FEATURE_DIM=390, FULL=559)\"],[0,\"\\\n- `\"]],\"start1\":2375,\"start2\":2375,\"length1\":173,\"length2\":136},{\"diffs\":[[0,\" 11-\"],[-1,\"discrete-\"],[0,\"acti\"]],\"start1\":2545,\"start2\":2545,\"length1\":17,\"length2\":8},{\"diffs\":[[0,\"src/\"],[-1,\"gen5/rl_strategy.rs` — RL strategy (teacher fallback + model inference)\\\n- `holdem_bots/src/gen5/network.rs` — Candle MLP policy (behind `gen5_nn` feature)\\\n\\\n### SNG\\\n- `holdem_bots/src/sng/ke_hu_nash.rs` — KEHU20BB Nash HU equilibrium\\\n- `holdem_bots/src/sng/ke_hu_tables.rs` — 19 embedded Nash tables\\\n\\\n### Configs\\\n- `configs/bots/cash_nl_g48.toml` — G48 sim c\"],[1,\"bin/train_gen5_range.rs` — Range model training CLI\\\n\\\n### Shared Infrastructure\\\n- `holdem_bots/src/cash/rollout_postflop_base.rs` — shared postflop base\\\n- `holdem_bots/src/cash/rollout_postflop_gen3.rs` — Gen3 equity, `compute_equity_with_ranges`\\\n- `holdem_bots/src/common/hand_potential.rs` — PotentialResult (hs, ppot, npot, nutpot)\\\n- `holdem_bots/src/assembly/registrations.rs` — strategy registry\\\n\\\n### C\"],[0,\"onfig\"],[1,\"s\"],[0,\"\\\n- `\"]],\"start1\":2661,\"start2\":2661,\"length1\":370,\"length2\":420},{\"diffs\":[[0,\"l_g4\"],[-1,\"8_live\"],[1,\"9\"],[0,\".tom\"]],\"start1\":3100,\"start2\":3100,\"length1\":14,\"length2\":9},{\"diffs\":[[0,\" — G\"],[-1,\"48 live config (MC 40K budget)\"],[1,\"en 5 sim config\"],[0,\"\\\n- `\"]],\"start1\":3111,\"start2\":3111,\"length1\":38,\"length2\":23},{\"diffs\":[[0,\"sh_nl_g4\"],[-1,\"7\"],[1,\"9\"],[0,\"_live.to\"]],\"start1\":3149,\"start2\":3149,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"oml` — G\"],[-1,\"47\"],[1,\"en 5\"],[0,\" live co\"]],\"start1\":3165,\"start2\":3165,\"length1\":18,\"length2\":20},{\"diffs\":[[0,\"nfig\"],[-1,\" (fallback)\"],[0,\"\\\n- `\"]],\"start1\":3185,\"start2\":3185,\"length1\":19,\"length2\":8},{\"diffs\":[[0,\"ots/\"],[-1,\"cash_nl_g47.toml` — G47 config (G47 preflop + G4 adaptive postflop)\\\n- `configs/bots/cash_nl_g45.toml` — G45 config\"],[1,\"gen5_equity_collect.toml` — range data collection\"],[0,\"\\\n- `\"]],\"start1\":3202,\"start2\":3202,\"length1\":122,\"length2\":57},{\"diffs\":[[0,\"### \"],[-1,\"Live Integration\\\n- `poker_protocol/src/lib.rs\"],[1,\"Scripts\\\n- `scripts/sanity_check.sh\"],[0,\"` — \"],[-1,\"canonical wire typ\"],[1,\"mandatory pre-live validation (3 gat\"],[0,\"es\"],[1,\")\"],[0,\"\\\n- `\"],[-1,\"poker_protocol/src/events.rs` — `TableEvent` event-stream protocol\\\n- `live_server/src/main.rs` — Axum gateway bootstrap\\\n- `live_server/src/bot_selection.rs` — profile → bot reso\"],[1,\"scripts/gen5_equity_collect.sh` — range data collection (8 tables)\\\n- `scripts/eval_9max.sh` — 9-max eva\"],[0,\"lu\"],[1,\"a\"],[0,\"tion\"],[-1,\"\\\n- `live_server/src/handlers.rs` — REST endpoints\\\n- `live_server/src/session.rs` — per-table session registry\\\n- `live_server/src/table_state.rs` — event → GameInfo state machine\\\n- `live_server/src/adapter.rs` — engine Action → BotAction mapping\\\n\\\n### Other\\\n- `hand_replay/` — hand replay engine for\"],[1,\" suite\\\n- `scripts/eval_mixed_field.sh` — mixed opponent field evaluation\\\n- `scripts/sweep.sh` — parameter sweep tool\\\n\\\n### Live Integration\\\n- `live_server/src/` — Axum gateway\\\n- `poker_protocol/src/` — wire types\\\n- `hand_replay/` —\"],[0,\" reg\"]],\"start1\":3372,\"start2\":3372,\"length1\":561,\"length2\":429},{\"diffs\":[[0,\" testing\"],[1,\"\\\n\\\n### Data\"],[0,\"\\\n- `data\"]],\"start1\":3808,\"start2\":3808,\"length1\":16,\"length2\":26},{\"diffs\":[[0,\"ry (\"],[-1,\"~8.7 MB, \"],[0,\"giti\"]],\"start1\":3873,\"start2\":3873,\"length1\":17,\"length2\":8},{\"diffs\":[[0,\"\\\n- `\"],[-1,\"models/gen5_v4.safetensors` — trained Gen 5 model\\\n- `scripts/sanity_check.sh` — mandatory pre-live validation\\\n- `scripts/sweep_g48*.sh` — G48 sweep scripts\\\n- `scripts/sweep_unified_g47.sh`, `scripts/sweep_unified_g48.sh` — unified sweeps\\\n\\\n### Userscript (separate project)\\\n- `/home/jan/WebstormProjects/super-marvin-userscripts/` — TamperMonkey script\\\n- `torn/dist/torn.user.js` — built output (v0.1.10)\\\n- `torn/src/config.ts` — exports `DOM_DEBUG`, `DEFAULT_CONFIG`\\\n- `torn/src/table_dom.ts` — DOM parsing\\\n- `torn/src/index.ts`, `parser.ts`, `executor.ts`, `safety.ts`\\\n- `shared/src/client.ts` — HTTP transport to `live_server`\"],[1,\"data/flop_distributions.jsonl` — flop distribution data\\\n- `/home/jan/gen5_data/equity_v3/` — current range data collection\"]],\"start1\":3888,\"start2\":3888,\"length1\":632,\"length2\":126}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-07-31T12:59:41.607Z
created_time: 2026-07-31T12:59:41.607Z
is_locked: 0
type_: 13