Sim ↔ Godot Parity Audit (B2)
Generated: 2026-07-10. Re-run python3 scripts/audit_hustler_damage.py and python3 scripts/verify_enemy_deck_parity.py to refresh.
Scope
Validate Jul 9 combat fidelity fixes (e8ea5c5 damage accounting, 8ac1b1f enemy AI) before any .tres balance changes.
Family-tier enemy decks
verify_enemy_deck_parity.py (healthcare Family strict set):
| Enemy | Status |
|---|---|
| The Son (Junior Associate) | All 5 cards OK |
| Nurse Sister | Checked in strict set |
| Junior Dev / UX Designer (AI) | Checked in strict set |
Son AI sanity: first card = Unchecked Math (10 dmg), not Server Overclock. Matches Enemy.cs GetCardScore + Aggressive personality.
Non-Family healthcare enemies have 16 card-stat mismatches (mostly dmg tuples in sim vs absent in .tres loader). These do not affect Family F1/F2 balance work; flag for a later card-loader pass.
Hustler damage accounting
audit_hustler_damage.py (10 sampled F1 trials, seed 7):
- F1 win rate: 290/300 via full
simulate_run(matches gold-standard report). - Block carry depletes per card during the player turn.
- Enemy hits use remaining
player.blockafter self-damage (Turn 1 example: 17 raw vs block 12 → 5 HP lost). - Kill turns use HP delta (no double-apply on Burnout lethal).
- Ideal T1 lines differ from greedy in some hands (FDA-first vs Overclock-first) but all audited trials still win.
Jul 9 cliff — confirmed fidelity, not content nerfs
| Snapshot | Pooled clear | Mean battles |
|---|---|---|
| 2026-07-08 | 16.3% | ~10.5 |
| 2026-07-09 post-fix | 0.67% | ~5.6 |
Git bisect (100 trials): e8ea5c5 → 1.2%, 8ac1b1f → 1.7%. Starter .tres nerfs are not the cause.
Open parity gaps (do not block A2 metric, track separately)
- MidTier+ enemy card loader — 16 healthcare non-Family mismatches; sim uses hardcoded
CARDSfallbacks. - Glitch vs block — playstyle audit notes opponent glitch may not reduce block in sim (pre-existing).
- Manual Godot spot-check — recommended for Son T1/T2: confirm block-after-self-damage and Unchecked Math opener in live build.
Ruling
Proceed with sim-first balance on faithful model. Use A2 metric (ideal combat + greedy shop) as the tuning target. No .tres changes until ideal-combat clear rates are baselined and any open Godot discrepancies above are spot-checked.
Commands
python3 scripts/audit_hustler_damage.py
python3 scripts/verify_enemy_deck_parity.py
python3 scripts/run_simulator.py --sector healthcare --trials 100 --seed 7 --combat-policy ideal
python3 scripts/test_ideal_combat.py