id: 9d2a0e1a63c547f5971d70908c140ac8
parent_id: 26a8091588274c35aaeb345baffc09cc
item_type: 1
item_id: ec1518e71453490f8fe5ab75cff7180c
item_updated_time: 1786810617888
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"15, \"],[-1,\"evening\"],[1,\"late\"],[0,\")\\\n\\\n>\"]],\"start1\":32,\"start2\":32,\"length1\":15,\"length2\":12},{\"diffs\":[[0,\"7 + \"],[-1,\"action-likelihood corrector.** Live since 2026-08-15. Commits 0609ebb..0b18e88 pushed to origin.\\\n\\\n## Current State\\\n\\\n**G51 (`cash_nl_g51_live`, DEFAULT in live_bots.toml)** — corrector: `P(hand|actions,board) ∝ P(actions|hand) × P(hand)` after RangeNet prior. XpotTable per street (exact hs + 128 runouts, 4ms warm), hand-fit curves, range-width invariant. Fixes KK-overplay class. Sim-neutral vs g50 (−0.29 BB/100 h2h).\\\n\\\n### MAJOR FINDING (2026-08-15): Harrington board parser bug\\\n`extract_bracket_cards` took the FIRST bracket on `*** TURN *** [board] [card]` lines → the flop's last card was duplicated as the turn card. **Every multi-street Harrington turn/river validation since the suite's creation ran on corrupted boards** (phantom paired board → inflated hero equity). Fixed in 0b18e88 (extract LAST bracket).\\\n\\\nConsequences with correct boards:\\\n- `4_5_99` river-fold assertion NOW PASSES (99 correctly folds river bet on real board)\\\n- Two genuine strategy gaps unmasked (#[ignore] open items):\\\n  * **4_5_99 turn**: 99 barrels turn at hs 0.40 vs mono-flop check-call (flush-heavy caller range; npot_weight 0.10 too low)\\\n  * **7_6 river**: KK checks river vs capped line (turn donk + river check after scare Ace; needs line-aware capping)\\\n- g50-NN additionally fails a2o_river + 99_twopair; **g51 passes both** — more evidence for the promotion\\\n\\\n### Sanity Gate 1 closed (0b18e88)\\\nGate 1 now runs `--features holdem_bots/gen5_nn` — the production NN path was never tested by sanity before. g51: all gates pass (Gate 1: 51 tests, 0 fail, 2 ignored-open).\\\n\\\n## G51 eval summary\\\n- Sanity: Gen2 +0.6, Gen3 +1.0, G48 +1.7, TAG +1.5, Nit +0.1, Mixed +0.4\\\n- h2h vs g50: −0.29 BB/100 (dead heat); 9-max specialists ~1-5 below g50 (on-distribution cost)\\\n\\\n## Code review (pre-commit, 2026-08-15)\\\nFixed: chips/BB unit bug in street_bet_ratios (all ratios saturated at clamp), NN-blend + corrector were nested inside narrow_enabled gate (silent disable risk), unguarded short boards, inert knob removed, config clone removed, named constants, +2 tests. Open: NN-returns-None empty-range fallback.\\\n\\\n## Next Steps\\\n1. **4_5_99 turn barrel fix** — npot weighting vs flush-heavy caller ranges (mono boards); threshold sweep + sanity\"],[1,\"corrector + eq_cc value-bet gate.** Deployed live (persistent server, 56b99f0). Commits 58e3456 (NN fallback), 56b99f0 (eq_cc gate).\\\n\\\n## New this session: eq_vs_continue decision math\\\n\\\n**The math**: a bet's value term is `(2·eq_cc − 1)·bet` vs the range that CONTINUES — raw hs assumes callers ≈ current range, collapsing on monotone flops/capped lines (4_5_99 class).\\\n\\\n- `gen4/decision_math.rs`: `continuing_range()` filters a range by P(continue|hand,size,freq) via corrector likelihood curves (call/bet_likelihood public); `equity_vs_continue()` = hero equity vs filtered range, heads-up enumeration. `ContinueFilter::{Call, CallOrRaise, None}` — one primitive for bet/raise/(future) call paths. Designated FutureActionNet swap point.\\\n- `Gen3Equity.eq_vs_call` computed heads-up in `build_ranges_and_equity` when corrector on.\\\n- First-in value bets gated on `eq_cc ≥ eq_cc_min` (0.52, TOML, 0=off); bluff path exempt.\\\n- **4_5_99 PASSES** (un-ignored): turn bet vetoed at eq_cc=0.25 vs hs=0.40; river fold ✓.\\\n- **7_6 kept ignored** (agreed): KK river thin-value vs capped line — range-accuracy defect (needs sequence-aware modeling / offline likelihood fit); not a leak, one missed bet in a specific line pattern.\\\n- eq_cc_min swept 0.48/0.56 vs TAG+Fish: flat (seed noise), 0.52 retained.\\\n- Validation: 523 lib tests, Harrington 52+1ign, sanity 10/10 (TAG +2.0), 9-max neutral, h2h g50 neutral.\\\n\\\n## Live status\\\n- Server persistent (survives session reloads), pid tracked, `cash_nl_g51_live` default (eq_cc_min=0.52 in config)\\\n- Config-reload kill risk: mitigated by persistent lifetime; reconnect is automatic anyway\\\n\\\n## Next Steps\\\n1. EquityNet (#1) — next multi-day project (planning session first)\"],[0,\"\\\n2. \"],[-1,\"**\"],[0,\"7_6\"],[-1,\" river value-bet** — line-aware capping (turn donk + river check = capped); may need corrector extension or FutureActionNet\\\n3. **EquityNet (idea #1)** — range-conditioned equity histogram on equity_v5_2m4, replaces multiway MC\\\n4. **RangeNet v18 Tier-2** — per-combo Xpot profile as 169 extra inputs\\\n5. **Live data fine-tune** — Torn VPIP 0.6-0.7 vs sim 0.08-0.40\\\n6. NN-returns-None fallback (empty-range risk)\\\n\\\n## Sim Speed / Infra\\\nMultiway postflop = bottleneck (9 Fish_nn 4.8 h/s). eval_9max.sh parallel (8×4). A/B harness `/tmp/kilo/run_ab_parallel.sh`. KK replay: `replay_kk_overplay_variants` (#[ignore]).\\\n\\\n## Models\\\n- `models/range_v17.s\"],[1,\": offline likelihood fit from equity_v5_2m4 → sequence-aware capping\\\n3. FutureActionNet (#4) replaces curves in equity_vs_continue\\\n4. Live data fine-tune of RangeNet\\\n5. Call-path eq_cc (knob-gated, off) \"],[0,\"af\"],[-1,\"e\"],[0,\"te\"],[-1,\"nsors` — production (85-dim, 4.35% top-1, 24.2% top-10)\\\n- `models/abandoned_gen6/` — PreflopNet/PPO archive\"],[1,\"r live soak of bet path\"],[0,\"\\\n\\\n##\"]],\"start1\":82,\"start2\":82,\"length1\":2992,\"length2\":1946}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-08-15T16:25:32.969Z
created_time: 2026-08-15T16:25:32.969Z
is_locked: 0
type_: 13