v0.33.0 — ### Added — T-306 M-CONS consistency per mechanic
- `analysis/consistency.py::consistency_for_encounter()` walks every canonical mechanic in `fight_model`, finds each occurrence in our pulls (boss cast event), and checks whether…
analysis/consistency.py::consistency_for_encounter()walks every canonical mechanic infight_model, finds each occurrence in our pulls (boss cast event), and checks whether any active-player death lands within[cast_ts, cast_ts + 5s]. An occurrence is "clean" iff no deaths in that window.- Output sorted worst-first (lowest clean_rate) so the prog-worthy mechanics surface to the top — "we cleared P4 Pandora's Knight 8/15 pulls, that's where to drill next."
- Watchlist-scoped (same "ours" semantics as T-205) — public field reports don't pollute.
- API:
GET /api/encounters/{id}/consistency. - 5 new tests (per-mechanic clean rate / sort order / no-fight_model edge / no-watchlist edge / our-pulls count). 269 tests total.