★ MASTER-HANDOFF Gen 6 — Wiederaufnahme nach ~10 Tagen (alles hier)

# GEN 6 — MASTER-HANDOFF FÜR WIEDERANNAHME IN ~10 TAGEN (2026-09-18, vor Rechner-Shutdown)

**Diese Note ist der Einstiegspunkt. Reihenfolge: diese Note → ggf. verlinkte Einzelnotes → Memory.**

## 1. Wo wir stehen (eine Zeile)
Kandidat **`cash_nl_r6r1`** validiert (River+Turn-Enumeration, Pool +9.11±2.07 gepaart vs ov5, Gen2-Gap geschlossen, keine negative Zelle); Distillation komplett gebaut aber Deployment abgelehnt (Net verlor gegen Lehrer); Commit-Stand **a92289e**, Repo clean.

## 2. Commit-Kette dieser Phase (alle gepusht? — Remote hunnius ist read-only-Mirror, Push ggf. manuell prüfen)
```
26e982c Phase 1 River-Enumeration          5de9548 stab_frac-Knob (Sweep-Plateau)
cc884df 2a+2b Raise-Branch+Multiway        1b758fa Flop hinter Flag
61f88b4 Iter 3 OOP-Stab-Modell             4fbfa3f Raises hinter Flags
b7b41b9 Iter 4 Turn-Rollout (KANDIDAT!)    c5e88fa Kalibrierung hinter Flag
378e6b5 Action-Only-Recorder-Tap           6b81efe Rollout-Label-Recorder
137eed7 v24-Sammelskript                   9da77a8 Distillations-MVP (Extraktor+GBM)
e009f09 Batch-3-Kohorten                   0741794 Candle-Trainer train_gen6_ev
68c5291 SEED_OFFSET                        a92289e Net-Kandidat r6r1n (abgelehnt)
```

## 3. Der Kandidat
- **`configs/bots/cash_nl_r6r1.toml`** = ov5 + `river_rollout = true` — verhält sich exakt wie b7b41b9-Validierung
- Validierung: gepaart vs ov5, Cash-out 200BB, 60K×5 Liner + 30K×5 Pool: **Gen1 +0.26 / Gen2 +0.36 (abs +0.09) / G4 +0.08 / Pool +9.11±2.07**
- Sanity vs ov5-Referenz: identische Pass/Fail-Zellen (dokumentierte Gen-5-Limits in 75BB-Geometrie), Format-Matrix ≥ ov5 überall
- Alle Experimente hinter Flags (Default AUS, jede einzeln empirisch abgelehnt): `river_rollout_flop`, `river_rollout_raises` (+`cash_nl_r6r2` mit Kalibrierung), `river_rollout_calibrated_marginals`, `river_rollout_net_path` (+`cash_nl_r6r1n`)

## 4. Distillation — Stand und Diagnose
- **Pipeline komplett und committet:** Recorder (Action-Only-Tap + Rollout-EV-Labels, Collector-unabhängig) → `scripts/evnet_prepare.py` (35 Features) → GBM-Baseline (`scripts/evnet_baseline.py`, 95.8% Regel-Replay; True-EV-Replay 100% = Metrik validiert) → `train_gen6_ev` (Candle convert+train, GPU: features `gen5_nn gen5_cuda`, `CUDA_COMPUTE_CAP=89`)
- **Korpus:** `/home/jan/gen5_data/equity_v24{,b,c,d}` — **1.155M Rollout-Labels**, 13M+ Action-Records; Sammeln mit `scripts/v24_collect.sh` (SEED_OFFSET pro Batch! z. B. +900000), Record-Bench: 0% Overhead
- **Modelle:** `/home/jan/gen5_data/evnet_v1/` — evnet_v2 (1.03M Train, val-MAE 0.0954, Bet-Kanäle 0.056-0.082, Replay 95.6%)
- **Deployment ABGELEHNT** (Batterie ab11): Gen1 −0.53, Gen2 −0.09, G4 −0.12, **Pool −2.66±1.51** (unter ov5!) — das Net verliert gegen seinen Lehrer
- **Diagnose:** Runtime-Feature-Shift — Training auf Korpus-Features (exakte vs-Reveal-Potenziale, echte opp_size), Runtime mit 2 Approximationen (range-gewichtete Potenziale, opp_size=0.4-Proxy) → Net leicht OOD; Replay-Metrik maß in-distribution
- **Fix-Pfad (erster Schritt nach Reboot):** Runtime-Parität — Korpus mit runtime-identischen Features re-labeln (Potenziale aus der Range-Pipeline + echte opp_size statt OpponentContext), evnet_v3 trainieren, gepaarte A/B vs r6r1. Fällt es wieder durch: Net als **Blatt-Evaluator im Nested-Rollout (Gen 7)** einsetzen — dort ersetzt es den teuren Lehrer, nicht den billigen.

## 5. Nächste Schritte in Reihenfolge (nach Reboot)
1. Maschine an, `git log --oneline -3` prüfen (erwartet: a92289e oben), Korpora auf /home prüfen
2. **Runtime-Parity-Re-Labeling** (Abschnitt 4) → evnet_v3 → A/B vs r6r1 (`/tmp/kilo/parta_ab11_run.sh` als Muster, Bot-Name ersetzen — Skripte liegen gesichert in `/home/jan/gen5_data/pause_backup/`, /tmp wird beim Reboot gelöscht!)
3. Bei Gewinn: Distillation ersetzt Enumeration → Gen-6-Endstrecke (Live-Transfer-Constraint: live-beobachtete Frequenzen als Net-Input, Held-Out-Persönlichkeiten; Entry-Gates: Vorgänger + Varianten in 1v1/3v3/4v4/5v5 schlagen, volles Sanity)
4. Parallel: Gen-7-Design umgesetzt (Nested Enumeration / Hand-zu-Ende, DeepStack-Muster) — Note `531f50e3`

## 6. Infra-Fakten (kurz)
- A/B-Batterie-Muster: `/home/jan/gen5_data/pause_backup/parta_ab11_run.sh` (und alle Vorgänger dort); Geometrie: 4v5 Cash-out 200BB, Seeds 42/200/1337/7777/31415, ov5-Referenzen `/tmp/kilo/partb_baseline` (ACHTUNG: /tmp weg nach Reboot → ov5-Referenzen neu generieren oder Batterie-Skript-Baselinepart neu laufen lassen!)
- Build-Befehle: Sim `CUDA_COMPUTE_CAP=89 cargo build --release --features gen5_cuda --bin holdem_bots`; mit Net: features `"gen5_nn gen5_cuda"`; Trainer ebenso; **cargo test baut NICHT die Sim-Binary** (Parse-Key-Änderungen brauchen echten Rebuild — Lehre aus dieser Woche)
- Gates-Rhythmus: Unit-Tests → HARRINGTON_BOT=<bot> hand_tests (37/37) → 1000-Hand-Self-Play → gepaarte Batterie vs ov5
- Recorder-Env: `EQUITY_RECORDER_PATH`, `EQUITY_RECORDER_MAX_SAMPLES`, `RANGE_RECORDER_MAX_SAMPLES`; Rollout-Debug: `RIVER_ROLLOUT_DEBUG=1 RUST_LOG=holdem_bots=debug`

## 7. Die 6 Tuning-Lektionen (nicht wiederholen!)
Lokal korrektere Modellteile schlagen das validierte Ensemble nicht (Flop, Raises×3, Kalibrierung×2, Net): das alte Call-Überpreisen kompensierte den groben Raise-Back-Zweig; Einzelpreiseung ohne Partner verliert überall. Kalibrierung nur end-to-end oder gar nicht. Gen1-Blutung bei Raises ist strukturell (step-funktionales Verhalten × Modellannahmen), nicht preisbar.

## 8. Verwandte Notes
Wochen-Abschluss `f63207b9` · v24-Design `8120e647` · EV-Net-Design `e502bf85` · Gen-7-Design `531f50e3` · Kalibrierungs-Verdict `8308d1d8` · v23b-Befunde `5078f8f2`/`5d43ffe8`

id: 7ff58b9470f4466693fcd06c54998518
parent_id: f68035c61cde4435a9c920d625430815
created_time: 2026-09-18T16:15:58.040Z
updated_time: 2026-09-18T16:15:58.040Z
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: 1789748158040
user_created_time: 2026-09-18T16:15:58.040Z
user_updated_time: 2026-09-18T16:15:58.040Z
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