id: 042a0ca1aa6b46d784605610d8a28da7
parent_id: ed915e76f0204692a737cd7725785c8c
item_type: 1
item_id: d632cea3d15f4323bbac7eda687f2467
item_updated_time: 1787493032611
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"licy\"],[-1,\"\\\n\\\n## Two tiers\\\n\\\n### Full Sanity Check (strategy changes, sweep optimizations, new features)\\\n\\\nRun: `scripts/sanity_check.sh <bot_config_name>`\\\n\\\nAll three gates MUST\"],[1,\" + Optimization Protocol\\\n\\\n> Vollständige Policy: Gates, Hotfix-Ausnahmen, bekannte offene Issues, Optimierungs-Protokoll (2026-08-23 ergänzt).\\\n\\\n## Sanity Gates (vor jeder Live-Promotion)\\\n`scripts/sanity_check.sh <bot>` — ALLE Gates müssen\"],[0,\" pass\"],[1,\"en\"],[0,\":\\\n\"],[-1,\"\\\n\"],[0,\"1. **\"],[-1,\"Hand tests** — All hand replay tests pass (`cargo test --release -p hand_replay`)\\\n2. **\"],[1,\"Gate 1**: Harrington-Replays (`HARRINGTON_BOT=<bot>` cargo test hand_replay, inkl. NN-Pfad)\\\n2. **Gate 2**: 1000-Hände-\"],[0,\"Self\"],[-1,\"-\"],[0,\"play\"],[-1,\" a\"],[1,\"-A\"],[0,\"udit\"],[-1,\"** — 1000 hands vs mixed chump/flock table:\\\n   - No panics or fatal errors\\\n   - Guardrail fires reviewed (low count acceptable, investigate patterns)\\\n   - Both candidate instances profitable\\\n3. **Performance vs field** — Positive BB/100 (3 seeds × 1000 hands each) against:\\\n   - Gen 2 (`cash_nl_gen2`)\\\n   - Gen 3 (`cash_nl`)\\\n   - Gen 4.5 (`cash_nl_g45`)\\\n   - Gen 4.7 (`cash_nl_g47`)\\\n   - Flock (`flock_bot`)\\\n   - Chump (`chump_bot`)\\\n   - Mixed field (all of the above togeth\"],[1,\"\\\n3. **Gate 3**: vs. alte Generationen (4 CAND + 5 OPP × 5000h × 5 Seeds): Gen2/Gen3/G48/TAG/Nit\\\n4. **Gate 4**: Mixed Table\\\n5. **Gate 5**: Cross-Generation-Championship — CAND muss **Platz 1** sein (Jan, 2026-08-22: „Live-Bar = Turnier-Sieg\\\"; vorher ≥G48)\\\n6. **Gate 6**: Format-Matrix 1v1/3v3/4v4 vs. 10 Gegnern inkl. chump/flock; Zelle fail < −0.5 BB/100\\\n\\\nDazu: **Dominanz-Matrix** (`scripts/dominance_matrix.sh`, Pre-Gen6-Qualitätsbar): 17 Gegner × 1v1/3v3/4v4/5v5 + Heritage-Feld. Vollständige Fehlerfreiheit vor Gen-6-Start.\\\n\\\n## Hotfix-Pfad (Live-Bug ohne vollständige Gates)\\\nHand-Tests (Gate 1) + 1 neue Regression + 1000-Hände-Selfplay-Audit.\\\n\\\n## Bekannt offen (#[ignore])\\\n- `replay_harrington_7_6` (KK River Value-Bet vs capped Line — sequence-aware Ranges nötig)\\\n- 4_5_99: Policy-Entscheidung ausstehend (Turn-Barrel ohne eq_cc-Gate; Harrington sagt Check; als Meinungsdifferenz dokumenti\"],[0,\"er\"],[1,\"t\"],[0,\")\\\n\\\n##\"],[-1,\"# Hotfix Sanity Check (urgent live-play bug fixes)\\\n\\\nRequired before deploying a hotfix:\\\n\\\n1. **Hand tests** — All existing hand replay tests pass\\\n2. **New regression test** — At least one new hand replay test covering the observed issue\\\n3. **Self-play audit** — 1000 hands self-play, no panics, no guardrail anomalies\\\n\\\nFull performance sweep NOT required for hotfixes — the fix should be targeted and narrow.\\\n\\\n## Continuous Improvement\\\n\\\n- Hand test cases are continuously expanded — add new regression hands for any live-play issue discovered\\\n- If a hotfix passes but later causes regressions, add a full sanity check to the next regular update\\\n\\\n## Script Details\\\n\\\n`scripts/sanity_check.sh` implements the full \"],[1,\" Optimierungs-Protokoll (Jan, 2026-08-23)\\\nFür jede neue Version/Generation:\\\n\\\n1. **Reihenfolge = Backward Induction**: River zuerst, dann Turn, dann Flop, dann Preflop. Innerhalb einer Street: Bet zuerst, dann Raise, dann Call. Terminale Entscheidungen zuerst messen — frühere Streets werden gegen bereits korrekte Downstream-Politik optimiert.\\\n2. **Coordinate Descent**: Parameter einzeln sweepten, iterieren bis keine Verbesserung außerhalb des Rauschens (Noise-Floor: 50K×3 Seeds ≈ ±1 BB/100; SE-überschreitende Deltas only; feste Seeds). **Ausnahme Bundles**: eng gekoppelte Knob-Paare (z.B. value_bet_floor × bet_adj_max) gemeinsam sweepten — einzeln unsichtbar.\\\n3. **Mess-Reihenfolge**: (a) Baseline der Generation selbst (Self-Play/Stabilität), (b) Sweep vs. Referenz-Gegner, (c) Sanity vs. alten Bots, (d) Dominanz-Matrix/Championship. Self-Play allein ist blind für symmetrische Leaks (g55/g58-Lektion) — mindestens ein unähnlicher Gegner (Gen2/Chump) als Guard.\\\n4. **Stereotypen-Invariante**: Abgeleitete Persönlichkeiten (TAG/Station/Whale...) MÜSSEN alle s\"],[0,\"ch\"],[1,\"l\"],[0,\"ec\"],[-1,\"k. For hotfixes, run steps 1-2 manually:\\\n\\\n```bash\\\n# Step 1: Hand tests\\\ncargo test --release -p hand_replay\\\n\\\n# Step 2: Add a new hand test for the issue, then re-run\\\n\\\n# Step 3: Self-play audit\\\nRUST_LOG=warn nice -n 19 ionice -c 3 ./target/release/holdem_bots --bot-dir configs/bots <selfplay_config.toml>\\\n# Check: grep for \\\"guardrail\\\\|panic\\\\|ERROR\\\" in output\\\n```\\\n\"],[1,\"hter sein als der Default (single-dimensionale Verschlechterungen). Schlägt eine Ableitung den Default, ist der Default nicht optimal → zurück in den Sweep.\\\n5. **Knob-Semantik vor dem Sweep verifizieren** (Wirkrichtung, aktiver Code-Pfad — dead-knob-Sweeps messen Rauschen; Beispiel call_turn_base in Kurz-Pots vor dem OTB-Gate-Fix).\\\n\\\n## Infra\\\n- A/B: `/tmp/kilo/run_ab_parallel.sh <cand> <opp> <tag> <hands> <seeds...>` (MAX_PARALLEL=15)\\\n- Isolation Gen2: `/tmp/kilo/isolate_gen2.sh <bot>` (4 CAND + 5 Gen2 × 5000h × 5 Seeds)\\\n- Championship beliebig: `/tmp/kilo/champ_any.sh <bot> [hands]`\\\n- Benchmarks: `scripts/gen2_benchmark.sh <bot_type> <label> [hands] [seeds...]` (Duelle + 4way + 8way + 3v3/5v4/4v5 vs Flock/Chump/Gen1)\\\n- Sweep: `scripts/gen2_sweep.sh`\"]],\"start1\":34,\"start2\":34,\"length1\":1839,\"length2\":3122}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-08-23T13:56:36.474Z
created_time: 2026-08-23T13:56:36.474Z
is_locked: 0
type_: 13