Gen5 Session 2026-07-28: Range Model Bug + Sanity Check Fix

## Key Findings

### 1. Sanity Check 20 BB Bug (FIXED)
The sanity check (`scripts/sanity_check.sh`) used `starting_chips = 20000` (20 BB) while gen5 models were trained at 75 BB. This caused catastrophic losses (-628 to -2506 BB/100) because the NN was making decisions for a stack depth it was never trained on.

**Fix**: Changed to `starting_chips = 75000` (75 BB) in all sanity check sim configs. After fix, self-play shows +4562 and +1270 BB/100 (was -628 and -2506).

### 2. range_v9b Catastrophic (DISABLED)
range_v9b causes a train/inference mismatch. The postflop v6 was trained on data with inconsistent range features (different range models across datasets). When range_v9b is properly loaded at inference time, it poisons the action model's decisions.

**Test vs Gen3 (3000 hands, seed 42):**
- v6 WITHOUT range: **+614 BB/100** ✓
- v6 WITH range_v9b: **-384 BB/100** ✗
- v10_teacher WITHOUT range: +328 BB/100
- v10_teacher WITH range_v9b: -106 BB/100

**Fix**: Disabled `range_model_path` in `gen5_play.toml`. Config now: preflop v10 + postflop v6 + no range model.

### 3. Teacher Postflop v10_teacher (corr=0.660, WORSE play)
Trained from scratch on teacher-only data (g48_diverse + sp_bb_v8 = 9M transitions, 1.57M postflop). Higher correlation (0.660 vs v6's 0.533) but worse play (+328 vs +614 BB/100 vs Gen3).

**Confirms**: Correlation metric unreliable for postflop model selection. v6 remains best.

### 4. Best Configuration
- **Preflop**: gen5_preflop_v10 (corr=0.904)
- **Postflop**: gen5_postflop_v6 (corr=0.533)
- **Range**: DISABLED
- **Stack**: 75 BB

### 5. Sanity Check Sample Size Issue
1000 hands is too variance-prone for gen5's aggressive play. Gen3 shows -38 BB/100 in 3000 hands (sanity) vs +93 in 9000 hands (eval). Need to either increase hands or use 9-max eval as the real gate.

## Background Tasks Running
1. **9-max eval** (preflop v10 + postflop v6, no range, 75 BB) — definitive test
2. **Teacher v12 collection** — 500K hands with G48 formula + inverse-weighted opponents
3. **Sanity check** — completing Gate 3 (informational, limited by sample size)

## Next Steps
- If 9-max eval confirms 8/10 positive: gen5_play is ready for live promotion
- To use range_v9b properly: need to collect consistent range_v9b data and train a new postflop from scratch
- Teacher v12 data will provide more native 559-dim teacher samples for future training

id: b48119a25877487d9cd59e2660454dfd
parent_id: 2c8da247905946c3aa19eb4936e16323
created_time: 2026-07-28T05:27:17.719Z
updated_time: 2026-07-28T05:27:17.719Z
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: 1785216437719
user_created_time: 2026-07-28T05:27:17.719Z
user_updated_time: 2026-07-28T05:27:17.719Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 0
is_locked: 0
extracted_resource_ids: 
type_: 1