Vigil
← All news

v0.14.0 — ### Added

- **T-105** M-BURST 2-minute burst alignment. `analysis/burst.py::burst_alignment_for_report` defines shared **burst windows** from raid-buff cast events (merging overlapping inte…

  • T-105 M-BURST 2-minute burst alignment. analysis/burst.py::burst_alignment_for_report defines shared burst windows from raid-buff cast events (merging overlapping intervals at a fixed 20s default — XIVAPI doesn't expose buff durations cleanly; wiki scrape would refine) and counts per-player how many personal CD activations fired in-window vs. drifted. Action-labeled CDs use cast events; status-labeled CDs use applybuff events targeting the CD owner (split via partition_by_kind).
  • GET /api/reports/{code}/burst returns {raid_buff_ids, personal_buff_ids, window_ms, fights: [{burst_windows, players: [{in_window, drift, in_window_pct, …}]}]}.
  • React: PullDetail now shows a Burst alignment table per pull (color-coded: green ≥80%, grey ≥50%, red <50%).
  • 9 unit tests (tests/test_burst.py) + 2 API smoke (tests/test_burst_api.py). 129 tests total.
  • Live AC on M5S kill pull #11 (483s): 9 burst windows detected (one every ~2 min — matches the cycle), Bard Raging Strikes 100% aligned (120s CD), Paladin Fight or Flight 50% (60s CD fires twice per cycle), Dragoon Lance Charge + Power Surge 40% — numbers match game-mechanics expectations.

Changed

  • T-108 classifier picked up two quality fixes uncovered while wiring T-105: (1) personal_buff with self-only hint bumped from 0.8 to 0.9 so it crosses the auto-high threshold; (2) relabel_all() now runs a name-matching post-pass — a status whose name matches an action labeled raid_buff/mit_party/mit_boss_debuff adopts the same label (Divination status was being mislabeled personal_buff because the status description "Damage dealt is increased." is too terse). Net result: raid_buff coverage 6 → 13, mit_party 9 → 17, personal_buff 17 → 4 (the 13 reassigned were status duplicates of raid buffs that shouldn't have been personal).