id: 912c1620b7f44ca78628c4ffb188ba1c
parent_id: a39724a7002d46e981e659739677f4f1
item_type: 1
item_id: 60976d006f58404387784a6b90ebf04c
item_updated_time: 1782146919858
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"n 3 \"],[-1,\"production switch + bet sizing improvement\"],[1,\"call/bet aggression fixes + sweep\"],[0,\"s.\\\n\\\n\"]],\"start1\":63,\"start2\":63,\"length1\":50,\"length2\":41},{\"diffs\":[[0,\" bot\"],[-1,\" is now\"],[1,\":\"],[0,\" `ca\"]],\"start1\":114,\"start2\":114,\"length1\":15,\"length2\":9},{\"diffs\":[[0,\"ollout`.\"],[1,\"\\\nServer: `live_server` on 127.0.0.1:8088.\"],[0,\"\\\n\\\n---\\\n\\\n#\"]],\"start1\":166,\"start2\":166,\"length1\":16,\"length2\":57},{\"diffs\":[[0,\"aise_pot\"],[-1,\"_\"],[0,\"odds_cal\"]],\"start1\":459,\"start2\":459,\"length1\":17,\"length2\":16},{\"diffs\":[[0,\"tio`\"],[-1,\" in big_stack_preflop\"],[0,\"\\\n- [\"]],\"start1\":479,\"start2\":479,\"length1\":29,\"length2\":8},{\"diffs\":[[0,\"40%)\"],[-1,\" with ±10% jitter and 15% sizing swap\\\n- [x] **sweep_mode = true in production** — Fixed: `sweep_mode = false` in cash_nl.toml\"],[1,\"\\\n- [x] **sweep_mode = true in production** — Fixed: `sweep_mode = false`\\\n- [x] **B4: 93.5% fold rate facing postflop bets** — Fixed: added `call_adj_cap=1.2` to limit multi-way call threshold exponent (was effectively 2.25+, now capped at 1.2). Sweep confirmed cap 1.0 best (+2.43), 1.5 most consistent (+1.81).\\\n- [x] **B5: 85% check rate when first-in postflop** — Fixed: added `bet_adj_cap=2.0` to limit multi-way bet threshold exponent (was num_active-1 = up to 8, now capped at 2.0). Sweep confirmed cap 2.0 best (+3.03).\\\n- [x] **B6: SB completion too tight** — Fixed: `determine_limp_cards_threshold` now returns 0.60 (top 60%) when `to_call <= bb/2` (SB completion). Q5o-type hands now playable.\"],[0,\"\\\n\\\n--\"]],\"start1\":740,\"start2\":740,\"length1\":133,\"length2\":709},{\"diffs\":[[0,\".rs:\"],[-1,\"978\"],[1,\"1040\"],[0,\"` (G\"]],\"start1\":1584,\"start2\":1584,\"length1\":11,\"length2\":12},{\"diffs\":[[0,\"pth.\"],[-1,\" Deep-stacked this is catastrophic high-variance.\"],[0,\" Nee\"]],\"start1\":1788,\"start2\":1788,\"length1\":57,\"length2\":8},{\"diffs\":[[0,\"old \"],[-1,\"still too tight vs small bets\\\n**Status:** Partially improved by Gen 3 weighted call system. Still needs verification with live data. The Gen 2 pot-odds formula at `rollout_postflop_base.rs:671` only reduces threshold to ~0.43 at 15:1 odds\"],[1,\"vs small bets — needs live verification\\\nThe `call_adj_cap` fix should address the 93.5% fold rate. Needs more live data to confirm\"],[0,\".\\\n\\\n-\"]],\"start1\":1874,\"start2\":1874,\"length1\":246,\"length2\":138},{\"diffs\":[[0,\"nds\\\n\"],[-1,\"**File:** `parser.ts:242, 574` — `resetHand()` clears everything except `seenTexts`\\\n**Impact:** Repeated actions across hands silently dropped.\\\n\\\n### U2: `forceFlush` race — game_start before blind messages\\\n**File:** `parser.ts:411-443`, `index.ts:456`\\\n**Impact:** Server synthesizes blinds with wrong amounts.\\\n\\\n### U3: k/M suffix raise parsing failure ⚠️ CRITICAL\\\n**File:** `parser.ts:141-142` — regex `[\\\\d,]+` stops before k/M\\\n**Impact:** `\\\"$5k to $10k\\\"` parsed as `$5 to $10`. Catastrophic for large bets.\\\n\\\n### U4: Player names containing \\\"flop\\\"/\\\"turn\\\"/\\\"river\\\" misclassified\\\n**File:** `parser.ts:172-176`\\\n**Impact:** Player \\\"Turner\\\" has all actions misclassified as street deals.\\\n\\\n### U5: `clickWhenReady` retry doesn't re-validate hand ID\\\n**File:** `executor.ts:96-114`\\\n**Impact:** Can click action from hand N in hand N+1.\\\n\\\n### U6: Events lost on observer re-attachment\\\n**File:** `index.ts:304-317`\\\n**Impact:** Messages in React re-render gap permanently lost.\"],[1,\"### U2: `forceFlush` race — game_start before blind messages (⚠️ 134 warnings in current log)\\\n### U3: k/M suffix raise parsing failure ⚠️ CRITICAL\\\n### U4: Player names containing \\\"flop\\\"/\\\"turn\\\"/\\\"river\\\" misclassified\\\n### U5: `clickWhenReady` retry doesn't re-validate hand ID\\\n### U6: Events lost on observer re-attachment\"],[0,\"\\\n\\\n--\"]],\"start1\":2120,\"start2\":2120,\"length1\":972,\"length2\":327},{\"diffs\":[[0,\"nic)\"],[-1,\"\\\n**Impact:** P\"],[1,\" — p\"],[0,\"ot u\"]],\"start1\":2514,\"start2\":2514,\"length1\":22,\"length2\":12},{\"diffs\":[[0,\"hand\"],[-1,\" → wrong pot odds, wrong bet sizing.\\\n\"],[0,\"\\\n###\"]],\"start1\":2547,\"start2\":2547,\"length1\":45,\"length2\":8},{\"diffs\":[[0,\"ng)\\\n\"],[-1,\"**Root cause:** `game_started` not parsed before hero's turn fires.\\\n\\\n### D3: SB amount=0 in synthesized blinds\\\n**Root cause:** `self.small_blind` is 0 when server synthesizes the blind.\\\n\\\n---\\\n\\\n## STILL OPEN — Edge Cases\\\n\\\n### M1: `inferBlindSeats` mutates stable seat assignments\\\n### M2: `readSeatName` fails on wrapped names (styled player names)\\\n### M3: Infinite reload loop possible (no backoff/max count)\\\n### M4: Hero name hardcoded (`heroName: \\\"Bolsa\\\"`)\"],[1,\"### D3: SB amount=0 in synthesized blinds\\\n\\\n---\\\n\\\n## STILL OPEN — Edge Cases\\\nM1-M4 (see below)\\\n\\\n---\\\n\\\n## Parameter Sweep Results (2026-06-22)\\\n\\\n### Round 1: Production baseline vs 4 variants (3 seeds × 10k hands)\\\n| Variant | Avg Profit/Hand | Notes |\\\n|---------|----------------|-------|\\\n| **S1 (baseline)** | **+2.81** | Best, most consistent |\\\n| S3 (looser) | +1.63 | High variance |\\\n| S5 (bigger bets) | +1.02 | |\\\n| S4 (check-raise agg) | +0.84 | Very high variance |\\\n| S2 (tighter) | +0.42 | |\\\n\\\n### Round 2: call_adj_cap sweep (3 seeds × 10k hands)\\\n| Cap | Avg Profit/Hand | Notes |\\\n|-----|----------------|-------|\\\n| 1.0 | **+2.43** | Best avg, high variance |\\\n| 1.5 | +1.81 | Most consistent |\\\n| 1.2 | (production) | Chosen balance |\\\n| 3.0 | +1.32 | Worst (confirms old behavior was too tight) |\\\n\\\n### Round 3: bet_adj_cap sweep (3 seeds × 10k hands)\\\n| Cap | Avg Profit/Hand | Notes |\\\n|-----|----------------|-------|\\\n| **2.0** | **+3.03** | Best, most consistent |\\\n| 4.0 | +1.73 | High variance |\\\n| 1.5 | +1.60 | Too aggressive |\\\n\\\n---\\\n\\\n## Production Config (cash_nl.toml)\\\n\\\n| Parameter | Value | Purpose |\\\n|-----------|-------|---------|\\\n| call_base | 0.50 | Base call threshold |\\\n| call_ppot_base | 0.32 | Draw calling threshold |\\\n| call_w_draw | 0.80 | Draw weight for call threshold |\\\n| call_w_pot_odds | 0.78 | Pot odds adjustment weight |\\\n| call_adj_cap | 1.2 | Max multi-way call exponent |\\\n| bet_adj_cap | 2.0 | Max multi-way bet exponent |\\\n| bet_flop_base | 0.52 | Flop betting threshold |\\\n| bet_turn_base | 0.70 | Turn betting threshold |\\\n| raise_base | 0.80 | Value raise threshold |\\\n| raise_w_bluff | 0.30 | Bluff raise discount |\\\n| raise_w_draw | 0.50 | Draw raise discount |\\\n| bet_value_fraction | 0.67 | Dry board value sizing |\\\n| bet_wet_fraction | 0.75 | Wet board sizing |\\\n| bet_bluff_fraction | 0.40 | Bluff sizing |\\\n| sweep_mode | false | Live entropy randomization |\"],[0,\"\\\n\\\n--\"]],\"start1\":2593,\"start2\":2593,\"length1\":464,\"length2\":1895},{\"diffs\":[[0,\"ity \"],[-1,\"Fix Order\"],[1,\"Remaining Fixes\"],[0,\"\\\n\\\n1.\"]],\"start1\":4499,\"start2\":4499,\"length1\":17,\"length2\":23},{\"diffs\":[[0,\"tion\"],[-1,\"\\\n6. **B2** (pot odds) — verify with live Gen 3 data, tune if needed\\\n7. **U5/U6** (stale click / lost events) — executor + observer fixes\"]],\"start1\":4841,\"start2\":4841,\"length1\":140,\"length2\":4}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-06-22T16:57:18.979Z
created_time: 2026-06-22T16:57:18.979Z
type_: 13