v0.30.0 — ### Added — T-303 M-MIT mitigation audit
- `analysis/mit_audit.py::mit_audit_for_fight()` — for each raidwide cast in a fight, joins `strat_config.mit_plan` (T-301) and checks whether each planned mit ability fired withi…
analysis/mit_audit.py::mit_audit_for_fight()— for each raidwide cast in a fight, joinsstrat_config.mit_plan(T-301) and checks whether each planned mit ability fired within[cast_ts - 15s, cast_ts + 3s](cast or applybuff/refreshbuff event suffices). Outputs per-raidwide planned-slot list withfiredbool +fired_at_ts+fired_source_id.mit_audit_summary()rolls up to fight-level stats:raidwide_count,with_plan/missing_plan,planned_slots_total,missed_mits_total,mit_hit_rate.- API:
GET /api/fights/{id}/mit-audit(full) +GET /api/fights/{id}/mit-audit/summary. - React
MitAuditpanel inPullDetail— per-raidwide row showing planned slots colored green (✓) or red (✗) by fire status, "no plan" greyed out when strat_config doesn't cover that mechanic-occurrence. - 7 new tests (covers mit-fired-in-window / missed / no-plan / no-raidwides / summary). 253 tests total.
- Will feed T-304 fault disambiguation: a raidwide death with mits down = mit-failure root; mits up = cascade from earlier death.