id: 46dd8c5a64994fd8a6287b47a949a364
parent_id: 81c461164c654d208a65afe6b5c0fe1e
item_type: 1
item_id: 60976d006f58404387784a6b90ebf04c
item_updated_time: 1782193488550
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\" system.\"],[1,\"\\\n**2026-06-23 live session:** D4 button detection confirmed (see Data Pipeline).\"],[0,\"\\\n\\\nProduc\"]],\"start1\":104,\"start2\":104,\"length1\":16,\"length2\":96},{\"diffs\":[[0,\"88 (\"],[-1,\"STOPPED for overnight sweep\"],[1,\"debug log, audit loop every 10m\"],[0,\").\\\n\\\n\"]],\"start1\":302,\"start2\":302,\"length1\":35,\"length2\":39},{\"diffs\":[[0,\"ng.\\\n\"],[-1,\"- Parameters: bet_adj_cap (0.5-3.0), bet_flop_base (0.35-0.60), call_adj_cap (0.8-2.0), bet_turn_base (0.55-0.78), conti_bet_fold_thresh, semi_bluff thresholds, check_raise_flop, bluff_factor, raise_w_bluff, raise_w_draw\\\n\"],[0,\"- Re\"]],\"start1\":717,\"start2\":717,\"length1\":229,\"length2\":8},{\"diffs\":[[0,\"lay\\\n\"],[-1,\"- Parses hand histories, replays actions, builds GameInfo at each HERO decision\\\n- Compares bot's decision to HERO's actual action (Exact/Aggressive/Passive/Mismatch)\\\n\"],[0,\"- CL\"]],\"start1\":929,\"start2\":929,\"length1\":174,\"length2\":8},{\"diffs\":[[0,\"sion\"],[-1,\"\\\n- Converter script: `scripts/convert_hand.py`\"],[0,\"\\\n\\\n##\"]],\"start1\":1051,\"start2\":1051,\"length1\":54,\"length2\":8},{\"diffs\":[[0,\"ts)\\\n\"],[-1,\"- Specific cases:\\\n  - **99 set → full house** [3d 9d 2d]: bot checks ALL 3 streets (0/4 match)\\\n  - **AA** [6c Jc Qc]: bot checks flop instead of betting (mismatch)\\\n  - **AKo** [flop]: bot checks when hero bets (mismatch)\\\n  - **AJo** [flop]: bot checks when hero bets (mismatch, 2 cases)\\\n\"],[0,\"- Pa\"]],\"start1\":1265,\"start2\":1265,\"length1\":295,\"length2\":8},{\"diffs\":[[0,\"linds)\\\n\\\n\"],[1,\"### D4: Dealer button almost always reported as seat 0 ⚠️ HIGH (NEW, 2026-06-23 live)\\\n**Verified 2026-06-23 live session (20 hands).** The scraper reports `dealer_seat=0`\\\n(hero's seat) in **19/20 hands**; only 1 hand had the correct `dealer=7`.\\\n- **Blinds ARE correctly detected**: `SmallBlind`/`BigBlind` player_actions arrive with\\\n  correct seats + amounts and rotate properly (SB/BB at 0/1 → 8/0 → 7/8 → 6/7 …).\\\n- **The button is the broken piece.** A wrong `button_seat` corrupts all downstream\\\n  position logic: `our_position`, BTN/SB/BB tags, and the position-aware preflop\\\n  thresholds. The bot thinks hero is BTN nearly every hand → loose open-limp/call\\\n  behaviour (e.g. J5s limp-call on a seat the bot labels BTN). Symptom in context:\\\n  `hero=0(BTN…)` + `bb=0` simultaneously (button == big blind, impossible 3+ handed).\\\n- **Correct button is derivable**: clockwise = +1 mod num_seats, so the button is one\\\n  seat before the SB → `button_seat = (sb_seat + num_seats − 1) % num_seats`.\\\n  Confirmed by the one good hand (`dealer=7`, `SB=8`).\\\n- **Likely root cause of the reported \\\"preflop limps with anything\\\".**\\\n- **Fix options:** (a) userscript: fix dealer detection in `parser.ts`; (b) server-side\\\n  reconciliation: derive `button_seat` from the reliably-detected SB seat. (b) is robust\\\n  and lives in this repo (`table_state.rs`).\\\n- Also observed: dead-seat blind skips (SB=0/BB=3, SB=1/BB=3 when an intervening seat\\\n  sits out) — normal poker, but `compute_blind_seats` synthesis would mis-handle them.\\\n\\\n\"],[0,\"---\\\n\\\n## \"]],\"start1\":3792,\"start2\":3792,\"length1\":16,\"length2\":1533},{\"diffs\":[[0,\"\\\n## \"],[-1,\"Test Hands (hand_replay/tests/data/)\\\n\\\n| File | Hand | Key Decision | Issue |\\\n|------|------|-------------|-------|\\\n| qq_overpair.txt | QQ on [6h 7h 3s] | Check flop, fold turn | Overpair not bet |\\\n| a6o_toppair.txt | A6o on [3s As 4c] | Check flop with top pair | Top pair not bet |\\\n| aa_wet_board.txt | AA on [6c Jc Qc] | Check flop (h\"],[1,\"Priority Remaining Fixes\\\n\\\n1. **D4** (deal\"],[0,\"er\"],[-1,\"o\"],[0,\" b\"],[-1,\"ets) | AA not bet on wet board |\\\n| 99_set_fullhouse.txt | 99 on [3d 9d 2d] | Check all streets | Full house not bet! |\\\n| tt_overpair_fold.txt | TT on [8c 8h 4h] | Fold turn to pot bet | Correct fold ✓ |\\\n| ako_flop_raise.txt | AKo | Hero bets flop, bot checks | Strong hand not bet |\\\n| ajo_checkraise_flop.txt | AJo | Hero check-raises | Aggression mismatch |\\\n| ajo_raise_fold.txt | AJo | Hero bets flop, bot checks | Strong hand not bet |\\\n| a6o_preflop_fold.txt | A6o preflop | Hero folds, bot calls | Preflop range mismatch |\\\n\\\n---\\\n\\\n## Priority Remaining Fixes\\\n\\\n1\"],[1,\"utton stuck at 0) — derive button from SB seat (server-side); likely fixes loose preflop\\\n2\"],[0,\". **\"]],\"start1\":6233,\"start2\":6233,\"length1\":912,\"length2\":143},{\"diffs\":[[0,\" config\\\n\"],[-1,\"2\"],[1,\"3\"],[0,\". **U3**\"]],\"start1\":6438,\"start2\":6438,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"parsing\\\n\"],[-1,\"3\"],[1,\"4\"],[0,\". **B1**\"]],\"start1\":6511,\"start2\":6511,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"e AllIn\\\n\"],[-1,\"4\"],[1,\"5\"],[0,\". **U2**\"]],\"start1\":6582,\"start2\":6582,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"setHand\\\n\"],[-1,\"5\"],[1,\"6\"],[0,\". **D1**\"]],\"start1\":6652,\"start2\":6652,\"length1\":17,\"length2\":17}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-06-23T05:47:19.803Z
created_time: 2026-06-23T05:47:19.803Z
type_: 13