v1.8.0 — consumer Home as per-encounter prog dashboard
Per the v1.7.1 dev/user split, non-dev users land on Home with a generic 5-stat grid (or onboarding for first-timers) — none of the wipe / fault / mit / DPS signal surfaces unless…
Why
Per the v1.7.1 dev/user split, non-dev users land on Home with a generic 5-stat grid (or onboarding for first-timers) — none of the wipe / fault / mit / DPS signal surfaces unless they drill into a specific pull via Reports. The consumer goal stated by the user this session: keep inputting reports → graph progress → see what gimmick is killing us the most → see who's contributing to wipes, with manual prog points kept prominent for ACT-down days. v1.8.0 rebuilds the consumer Home around that goal. Ships 1 of 3 in a planned sequence (mit-audit aggregate and job-filterable DPS comparison follow in v1.9.0 and v1.10.0).
Added — consumer Home, per-encounter
- New non-dev Home layout (web/src/Home.jsx) — for users with at least one watched-and-ingested report, Home is now a per-encounter prog dashboard with three sections:
- Encounter picker in the header: dropdown when multiple encounters watched (auto-defaults to the most recently watched); pill chip when only one. Total pulls / kills / wipes / kill rate strip below.
- "Where we are" —
ProgPointspanel with a copy hint that calls out manual entry for ACT-down days (post-patch period before the ACT plugin updates). - "What's killing us" — top-N wipe mechanics, sorted by death count, watchlist-scoped (new endpoint param below). Phase + mechanic type pill (raidwide / tankbuster / aoe_party / enrage). Non-attributable cascade-of-cascade death count surfaced as a footnote so M-FAULT context is clear.
- "Who's contributing to wipes" — per-player root / cascade / wipes / score from
fault_aggregate. If no fault data yet, shows a single "Analyse all N wipes" button that bulk-computes fault scores for every watched wipe of the active encounter.
- Onboarding flow unchanged for users with zero watched reports — same welcome + 2 numbered cards from v1.7.1.
- Dev Home unchanged — all-ingested snapshot retained for me (full reports/pulls/kills/wipes/kill-rate grid).
Added — backend scope filter + new endpoints
cartography_for_encounter(static_id=...)param (analysis/cartography.py) — restricts the aggregate to fights from reports in that static's watchlist. Default (unset) keeps the legacy field-wide view for T-208 Compare. The watchlist filter uses a SELECT subquery onwatched_reports.codeso cross-static rows are invisible (same multi-static isolation model as v1.6.0).GET /api/encounters/{id}/cartography?watched_only=true— wires the param to the API. Defaultfalse(legacy behaviour).GET /api/me/encounters— auto-detects the active encounter for the current static. Returns{active, encounters: [{encounter_id, pulls, kills, wipes, latest_end_time}]}sorted by latest_end_time desc, tiebroken by pull count. Drives the Home encounter picker.POST /api/encounters/{id}/fault-scores/compute-all— bulk-computes T-302 fault scores for every watched wipe of an encounter (skips kills; idempotent per the per-fight replace incompute_fault_scores_for_fight). Replaces the per-pull "compute" workflow on PullDetail for the consumer use case where you want the whole encounter analysed at once.
Tests
- 3 new in tests/test_cartography.py: scoped vs. unscoped behaviour proves cross-static isolation; empty-watchlist static returns empty results (not all-fights).
- 4 new in tests/test_my_encounters.py: empty-watchlist returns null active; single-encounter picks itself as active; multi-encounter active = most recently watched (proven by recency beating pull count); foreign-static reports don't leak.
- 408 tests passing (401 → 408, +7). No regression.
Operator notes
- No new env vars. No schema migration (uses existing
watched_reports/fights/fault_scorestables). - Server restart picks up the new endpoints; React bundle picks up automatically (StaticFiles reads from disk per request).
- Non-dev users who already had watched data now see the new Home on next refresh.