Vigil
← All news

v0.12.0 — ### Added

- **T-108** Ability DB + classifier + review queue (Phase 1 — unblocks T-105 M-BURST and T-303 M-MIT). - Two new tables (alembic `eb34cac3f775`): `abilities` (XIVAPI metadata keye…

  • T-108 Ability DB + classifier + review queue (Phase 1 — unblocks T-105 M-BURST and T-303 M-MIT).
  • Two new tables (alembic eb34cac3f775): abilities (XIVAPI metadata keyed on ability_game_id, with kind = action|status|unknown) and ability_labels (label, confidence, source ∈ {auto, user}). 14 tables in dev DB.
  • ingest/xivapi.py — paced HTTP client + bootstrap that routes each ability to the right XIVAPI namespace (Action vs Status) based on dominant event type in the events table; handles FFLogs' +1,000,000 status-id offset (fflogs id 1002216 → Status 2216 "The Wanderer's Minuet").
  • analysis/ability_classifier.py — rule-based labeler emitting (label, confidence) across raid_buff / personal_buff / mit_party / mit_boss_debuff / mit_self / damage_down / ignore / unknown. Cleans XIVAPI's HTML + <If(…)> templates before matching. relabel_all() upserts into ability_labels and never overwrites source='user' rows.
  • Three API endpoints: GET /api/abilities/review-queue (low-confidence + missing-label rows), GET /api/abilities/labels (filterable by label), PATCH /api/abilities/{id}/label (user override → source='user', conf=1.0).
  • React Abilities.jsx (new tab in App.jsx) — review-queue list + per-ability label-button row + all-labels filtered view; reads XIVAPI icon URLs directly.
  • scripts/bootstrap_abilities.py live ingest harness (--force, --limit, --skip-fetch flags + summary output).
  • 30 new tests: 13 XIVAPI client (mocked transport, classify_namespace, fetch_one routing, FFLogs status-offset handling), 12 classifier (Rampart / Shake It Off / Reprisal / Feint / Divination / Inner Release / Damage Down / potency-as-ignore), 6 API (review queue, user override, label-vocab validation, 404, filtering, create-on-PATCH). 107 tests total.
  • Live AC against 608 distinct ability IDs in the dev DB's M5S+FRU events: 264 resolved as XIVAPI Actions, 174 as Statuses (post offset-fix), 170 stayed unknown (boss-only mechanics / environmental damage — expected). Classifier auto-labeled 204 at ≥0.85 confidence. Correctly picked up real raid mechanics: Divination / Mage's Ballad / Radiant Finale (raid_buff), Collective Unconscious / Intervention / Troubadour (mit_party), Reprisal (mit_boss_debuff), Rampart / Holy Sheltron / Guardian (mit_self), Damage Down itself.