v0.22.0 — ### Added
- **T-206** M-CART failure cartography. `analysis/cartography.py::cartography_for_encounter()` walks all ingested fights for an encounter and aggregates deaths by **killing boss a…
- T-206 M-CART failure cartography.
analysis/cartography.py::cartography_for_encounter()walks all ingested fights for an encounter and aggregates deaths by killing boss ability, cross-referencing each ability against the persistedfight_model(T-202) for phase + mechanic label (T-203). Uses the stricter "active players" filter from T-203 so non-player target IDs (from masterData leakage on Ultimates) don't pollute counts. - Bucket fields:
ability_game_id, ability_name, deaths, fights_affected, fight_model_phase, fight_model_label, non_attributable. Sorted by death count desc. GET /api/encounters/{id}/cartography.- 6 new tests (synthetic 5-player wipe + non-attributable bucket + sort + totals + unknown-encounter + live M5S AC). 190 tests total.
- Live AC on M5S (45W/38K, 134 deaths): top "real" killing ability = 45942 (7 deaths in 5 fights), Sustained Damage DoT = 10 deaths in 3 fights. 95 deaths (71%) bucket as non-attributable — the FFLogs sourceID=-1 / killing_ability_game_id=null cascade-death pattern noted way back in T-007. M-FAULT Mode 2 (T-302) will untangle those.