Session Summary — 2026-06-17 (D4 fix + value_bet_floor + sweeps)

# Session Summary — 2026-06-17

## Commits (super_marvin)

### Session 1 (early)
1. **`2302459`** — `fix: synthesize missing BB posting + HU preflop loosening`
2. **`e3104d8`** — `fix: add draw_raise_min_strength and bet_adj_max thresholds`
3. **`e7709cb`** — `refactor: expand blind reconciliation + add sweep utility scripts`

### Session 2 (evening — autonomous)
4. **D4 fix** — `live_server/src/table_state.rs`: trivial `to_call` (< SB) guard prevents display-artifact `cur_bet=1001` corruption
5. **Value bet floor** — `holdem_bots/src/cash/thresholds.rs` + `rollout_postflop_base.rs`: new `value_bet_floor` parameter. When `strength > value_bet_floor`, bets first-in regardless of multi-way power adjustment. Structural fix for S1 (passive value betting in multi-way pots).
6. **Production config** — `configs/bots/cash_nl.toml`: `value_bet_floor = 0.65`

## Issues Resolved

| Issue | Status | Fix |
|-------|--------|-----|
| BB posting not captured (D1) | ✅ | Userscript BB synthesis + server reconcile_missing_blinds |
| QJo/QJs fold in HU | ✅ | Gen1 HU loosening block |
| QTs raise with hs=0.083 (S2) | ✅ | `draw_raise_min_strength = 0.15` |
| AQo check top pair on turn (S1) | ✅ | `bet_adj_max = 3.0` + `value_bet_floor = 0.65` |
| Duplicate game_start on re-attach | ✅ | `initialized` guard |
| Duplicate hand blocks / $0 pots (L1) | ✅ | `flushed_to_history` flag |
| Blind reconciliation leaks (L2) | ✅ | sb_seat/bb_seat reset in start_hand |
| Corrupt blinds after reload (D2) | ✅ | localStorage fallback + server reconcile + auto-reload |
| Executor first raise didn't fire (D3) | ✅ | parseAmount k/M suffix fix |
| `cur_bet=1001 to_call=1` off-by-one (D4) | ✅ | Trivial to_call (< SB) guard |

All audit notes deleted.

## Value Bet Floor — Sweep Results

### 30K hands × 2 seeds (10K MC)

| value_bet_floor | Seed 42 | Seed 137 | Avg Delta |
|-----------------|---------|----------|-----------|
| 1.0 (disabled)  | -0.79   | +1.41    | +0.31     |
| 0.75            | +20.75  | +25.24   | +23.00    |
| 0.70            | +32.04  | +37.32   | +34.68    |
| 0.65            | +39.61  | +47.12   | +43.37    |
| 0.60            | +46.49  | +51.20   | +48.85    |

### 100K hands × 2 seeds (CONFIRMED)

| value_bet_floor | Seed 42 | Seed 137 | Avg Delta |
|-----------------|---------|----------|-----------|
| 0.70            | +38.56  | +25.24   | **+31.90** |
| 0.65            | +45.05  | +33.31   | **+39.18** |

### Key Insight
Unlike previous threshold sweeps (which showed seed-dependent variance at 100K), the value_bet_floor improvement is **consistent and robust** across both seeds at 100K. This is because it's a structural change (new decision path), not a parameter tweak. Previous sweeps of existing parameters averaged +0.18 BB/100 at 100K — the value_bet_floor averages +39.18 at 0.65.

## Production Config (cash_nl.toml) — Current State
```toml
mc_samples = 50000
call_turn_base = 0.82
power_callers_weight = 0.3
call_pot_odds_norm = 60.0
raise_cbet_into_raiser = 0.82
npot_raise_ceiling = 0.35
draw_raise_min_strength = 0.15
bet_adj_max = 3.0
value_bet_floor = 0.65    # NEW: structural value betting improvement
```

## Files Changed (uncommitted)
- `live_server/src/table_state.rs` — trivial to_call guard (D4 fix)
- `holdem_bots/src/cash/thresholds.rs` — value_bet_floor field + default + config parsing
- `holdem_bots/src/cash/rollout_postflop_base.rs` — value_bet_floor in get_first_in_action
- `configs/bots/cash_nl.toml` — value_bet_floor = 0.65
- `scripts/sweep_value_bet.sh`, `scripts/sweep_100k_confirm.sh`, `scripts/sweep_flock.sh`

id: d105cf38c62146daa0b7339bdc64aba5
parent_id: 22cdbfc0c00e404c83553543471f45ab
created_time: 2026-06-17T09:02:44.558Z
updated_time: 2026-06-22T11:15:52.016Z
is_conflict: 0
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: 1781686964558
user_created_time: 2026-06-17T09:02:44.558Z
user_updated_time: 2026-06-17T20:27:36.167Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 1782126952016
type_: 1