← All reports

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):

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)

  1. MidTier+ enemy card loader — 16 healthcare non-Family mismatches; sim uses hardcoded CARDS fallbacks.
  2. Glitch vs block — playstyle audit notes opponent glitch may not reduce block in sim (pre-existing).
  3. 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