id: 2ad32133fde8450ca23bbf777b6ba402
parent_id: 
item_type: 1
item_id: 3073fa7641ab4c2f9cb9120a98eaa6e0
item_updated_time: 1783540414869
title_diff: "[{\"diffs\":[[1,\"Strategy Registry & Key Files\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":29}]"
body_diff: "[{\"diffs\":[[1,\"# Strategy Registry (22 types)\\\n\\\n| Registration Name | Generation | Description |\\\n|---|---|---|\\\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) |\\\n| `g1_short_stack_preflop_sng` | Gen 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 |\\\n| `g2_ke_hu_nash` | Gen 2 | KEHU20BB Nash HU equilibrium (ported from Java, 19 tables) |\\\n| `g3_postflop_rollout` | Gen 3 | Range-aware equity postflop |\\\n| `g4_adaptive_preflop` | Gen 4 | VPIP-adaptive NG preflop looseness |\\\n| `g4_adaptive_postflop` | Gen 4 | Range-narrowing + observer-driven postflop — used by G45/G47 |\\\n| `g45_playability_preflop` | Gen 4.5 | Playability-enhanced NG preflop |\\\n| `g47_equity_preflop` | Gen 4.7 | PEM2 matrix equity preflop — **current production preflop** |\\\n| `g48_formula_postflop` | Gen 4.8 | Formula-based postflop with observer ranges — **current production postflop** |\\\n| `gen5_collect` | Gen 5 | RL data collector (Gen3 teacher + transition recorder) |\\\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## Key Files\\\n\\\n### Strategy Implementation\\\n- `holdem_bots/src/gen4/equity_preflop.rs` — **G47 strategy** (PEM2 equity decisions, unified preflop score)\\\n- `holdem_bots/src/gen4/formula_postflop.rs` — **G48 strategy** (formula-based postflop + observer ranges)\\\n- `holdem_bots/src/gen4/adaptive.rs` — G45's adaptive postflop (reference for observer-based ranges)\\\n- `holdem_bots/src/gen4/range_builder.rs` — `build_opponent_range_v2()`, `NarrowContext`, range construction\\\n- `holdem_bots/src/gen4/observer.rs` — `Observer` — EMA-based opponent tracker\\\n- `holdem_bots/src/gen4/profile.rs` — `PlayerStats`, `PlayerProfile`, three-tier blend\\\n- `holdem_bots/src/gen4/storage.rs` — Profile persistence\\\n- `holdem_bots/src/gen4/mod.rs` — Shared range-building helpers (`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/cash/rollout_postflop_base.rs` — shared postflop base (27 methods)\\\n- `holdem_bots/src/cash/rollout_postflop_gen3.rs` — `Gen3Equity`, `compute_gen3_equity`, `compute_equity_with_ranges`\\\n- `holdem_bots/src/cash/rollout_postflop_v3.rs` — production Gen 2 V3 strategy\\\n- `holdem_bots/src/cash/ng_preflop.rs` — NG preflop (169-hand table-based)\\\n- `holdem_bots/src/common/hand_rankings.rs` — 169-hand ranking tables\\\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\\\n- `holdem_bots/src/assembly/registrations.rs` — strategy 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\\\n- `holdem_bots/src/gen5/actions.rs` — 11-discrete-action space + legality masking\\\n- `holdem_bots/src/gen5/recorder.rs` — JSONL transition recorder\\\n- `holdem_bots/src/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### Experiment GUI\\\n- `holdem_bots/src/gui/api.rs` — REST API handlers\\\n- `holdem_bots/src/gui/config_gen.rs` — dynamic TOML generation for sweeps\\\n- `holdem_bots/src/gui/runner.rs` — subprocess simulation runner\\\n- `holdem_bots/src/gui/static/index.html` — SPA frontend\\\n\\\n### Configs\\\n- `configs/bots/cash_nl_g48.toml` — G48 sim config\\\n- `configs/bots/cash_nl_g48_live.toml` — G48 live config (20K MC budget)\\\n- `configs/bots/cash_nl_g47.toml` — G47 config (G47 preflop + G4 adaptive postflop)\\\n- `configs/bots/cash_nl_g45.toml` — G45 config\\\n- `configs/bots/cash_nl_gen2.toml` — Gen 2 config\\\n- `configs/bots/cash_nl.toml` — Gen 3 config\\\n- `configs/live_bots.toml` — bot auto-detection profiles\\\n- `configs/live_server.toml` — live_server gateway config\\\n\\\n### Live Integration\\\n- `poker_protocol/src/lib.rs` — canonical wire types\\\n- `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 resolution\\\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 regression testing\\\n- `data/preflop_equity_matrix.bin` — PEM2 binary (~8.7 MB, gitignored)\\\n- `models/gen5_v2.safetensors` — trained Gen 5 model\\\n- `scripts/sanity_check.sh` — mandatory pre-live validation\\\n- `scripts/sweep_g48_postflop.sh` — G48 postflop sweep\\\n- `scripts/sweep_g48_preflop.sh` — G48 preflop sweep\\\n- `scripts/sweep_g47_postflop.sh` — G47 postflop sweep\\\n\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":5740}]"
metadata_diff: {"new":{"id":"3073fa7641ab4c2f9cb9120a98eaa6e0","parent_id":"659da65d964344fc89e6b4eafac0098c","latitude":"0.00000000","longitude":"0.00000000","altitude":"0.0000","author":"","source_url":"","is_todo":0,"todo_due":0,"todo_completed":0,"source":"joplin-desktop","source_application":"net.cozic.joplin-desktop","application_data":"","order":1783424712429,"markup_language":1,"is_shared":0,"share_id":"","conflict_original_id":"","master_key_id":"","user_data":"","deleted_time":0},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-07-16T07:16:43.368Z
created_time: 2026-07-16T07:16:43.368Z
type_: 13