v0.18.0 — ### Added
- **T-104** Cross-pull consensus timeline (boss-side only, PLAN §3 Invariant 3). `analysis/consensus.py::consensus_timeline_for_encounter(session, encounter_id)` reads every inges…
- T-104 Cross-pull consensus timeline (boss-side only, PLAN §3 Invariant 3).
analysis/consensus.py::consensus_timeline_for_encounter(session, encounter_id)reads every ingested kill of the encounter, runs T-103 phase segmentation per pull, and for each phase clusters boss casts byability_game_id. An ability is canonical ifoccurrence_rate ≥ 0.70(PLAN-spec default). Median relative-t and a half-IQR variance proxy describe the timing distribution. Player casts are filtered via thecombatantstable. GET /api/encounters/{id}/consensusexposes the per-encounter canonical timeline.- React
ConsensusTimelinecomponent inPullDetail(collapsed by default) — per-phase canonical-ability table sorted by median time. - Phase 1 of PLAN is now complete. All 6 Phase-1 tasks (T-101, T-103, T-104, T-105, T-106, T-107, T-108) shipped.
- 8 new tests (6 unit + 2 API smoke). 166 tests total.
- Live AC nailed FRU's deterministic structure: 11 ingested FRU kills produce a 6-phase consensus. The boss is essentially frame-deterministic — most canonical abilities recur at 100% with ±0.1s variance. A few abilities show high variance (±21s on ability 40149 in P0) — likely position-dependent reactions; future M-INFER refinements could disambiguate.
Data
- Ingested 10 additional public FRU kills via a one-off
scripts/ingest_fru_kills.pyso the consensus algorithm had ≥3 pulls per encounter to operate on. Dev DB now carries 11 FRU kill fights with events (~100k events of boss casts + damage).