QA plan — dashboard overview
This document lists scenarios, not new verification results; prior suite counts are a prior baseline only.
G1 — owner/admin, schedule org
- One greeting/header and one session list. Order is Action Center → Today/tasks → growth/revenue/leads trends → coaching roster when applicable.
- No Pulse strip, standalone KPI strip, or Reports snapshot on Overview.
- Seed the full 20-rule catalog and check severity/count ordering. Empty populations yield explicit all-clear. Use the Insights QA matrix for every rule’s boundary.
- Today shows the whole org-local day, including dimmed ended sessions after the last class. A future class without a workout shows its amber chip.
- Pending tasks use the open queue; clicking a row opens the existing detail sheet. Long classes/tasks lists scroll inside their own panel.
- Growth requires analytics permission; revenue additionally requires finance permission and an active provider; leads requires leads management. A missing capability does not render a false zero chart.
G2 — coach and member roles
- Coach HTTP Insights request succeeds with only the seven operations/engagement rules; finance, members, and leads rules are not evaluated. Coach Today requests succeed; no false coach-403 expectation.
- Coach sees permitted task/schedule work, not restricted business trends or Reports data requests.
- In coaching mode, one roster header contains due-today, seven-day completion, and needs-attention metrics; there is no separate KPI strip.
- Member is routed to member home and cannot access the staff Insights feed.
- Keep tool scope separate:
analytics.org_insightsis currently owner/admin registered even though the HTTP Action Center feed admits coaches.
G3 — delivery modes and members context
- Coaching-only org: no class panel; tasks remain if permitted and coaching roster appears after applicable trends.
- Mixed org: schedule and coaching surfaces both appear; schedule-only members must not enter the active coaching-enrollment roster.
- No active programs: retain the scheduling empty state and Programs fallback.
- Members ribbon requires analytics permission and shows total roster with commercial donut, trained this week, new this month, churned this month, and applicable imported/at-risk callouts. No Ending soon tile.
- Donut selection filters the roster in place. The
endingbucket/filter remains separate from open cancellation request/notice cases.
G4 — destinations
- A Reports failure does not alter the Action Center or trends.
- The Action Center emits actual task links:
tab=not_completed&type=manual_refundtab=not_completed&type=payment_follow_uptab=not_completed&type=cancellation_review
- Direct-load/reload/back/forward hydrates supported task filters and
/dashboard/payments?tab=debt. Unknown payment tab falls back to Transactions.tab=overdueis not supported; the overdue row links to the open queue sorted by due date rather than inventing a filter. - Named session samples carry valid program UUID, real org-local date, and session UUID through Schedule to the real program schedule tab/week/detail. Missing/invalid program context falls back to Programs; invalid optional date/session fields are dropped. No global schedule queue is implied.
- Null root hrefs render nonlinks; bounded named member/session samples work where supplied. Overdue-task samples stay informational.
- Open retention-case headline and SLA metadata count cases; a person with two cases appears once in the sample but contributes two cases. The cancellation action opens Tasks, not the Members ending roster.
- Reports KPIs appear only at
/dashboard/analytics, gated byanalytics:view. Direct links usetab=attendance|revenue|retentionand preservefrom/to/classTypeId/method/months/asOf; the seven API/CSV projections remain intact. See Reports QA.
G5 — queues and Ask Spotter
- Check-ins row expands its existing inline review queue; review actions update through the existing workflow.
- Missing forms expands the existing outstanding-forms queue.
- Ask Spotter is separate from row/sample navigation and sends localized prompt plus insight ID/count and insight subject. Later unrelated messages do not inherit stale selection context.
G6 — locales and evidence boundaries
- Check en/he/ru labels, plurals, names, all-clear, chips and URL language prefixes. Hebrew uses logical-start severity rails and appropriate arrows.
- Record the actual viewport with browser evidence. An 800×600 browser smoke is not full desktop/mobile responsive coverage.
- Record whether the API used a private local clone. Do not call local browser/API evidence a production smoke or imply migrations were applied.
- Final runtime verification is recorded separately; this documentation cleanup does not run tests, builds, lint, formatters, or performance checks.