Change evidence report

Dashboard metric scope labels

PR 1999 removes a false blanket 30-day claim from the CRM dashboard and labels each headline, secondary value, and sparkline with the period or status its API query actually represents. The evidence compares the same controlled report data at the merge-base and implementation head, then verifies the scope-bearing copy remains visible without horizontal overflow at a 320-pixel viewport.

Range
bb82b0a98 (merge-base with main)…d643958ff (captured implementation head)
Source state
fix/1971-dashboard-metric-scopes at d643958ff, pushed as draft PR #1999; this report is the following evidence-only commit
Generated

Reviewer brief

Outcome and scope

Every dashboard overview card now states what period or status it measures

Revenue and bookings identify their last-30-day window, total customers identifies its all-time scope, memberships identifies the API's active-status predicate, every secondary value names its 30-day window, and every sparkline has both a visible Last 7 days caption and a scoped accessible name. The page subtitle now describes mixed-scope metrics without assigning one period to all of them.

What the captures prove

Both desktop captures use the same 1440 by 1000 viewport and sanitized controlled API responses. Browser request inspection observed 30-day report queries from 2026-07-27 through 2026-08-25 and seven-day trend queries from 2026-08-19 through 2026-08-25. The narrow capture uses the same proposed response data at 320 pixels. It proves rendering and layout, not production data quality or deployment.

Claim map

Evidence coverage

Each material changed behavior or state maps to direct evidence or an explicit gap.

Behavior or claimEvidenceStatus
Every headline, hint, and trend exposes its true scopeMatched desktop before and after captures, API query inspection, focused render test, and the scope tableCovered
The subtitle no longer makes a false blanket 30-day promiseDesktop comparison shows the old blanket statement and the proposed mixed-scope descriptionCovered
Narrow layouts preserve distinguishing scope text320-pixel browser capture plus measured 320-pixel document and main scroll widths with no horizontal overflowCovered
Sparkline accessible names state the seven-day periodBrowser accessibility inspection and focused assertions for all four data-driven SVG labelsCovered

Observed change

Review evidence

Evidence is grouped by the reviewer question each item addresses.

CRM dashboard overview

Screenshot

The same metrics now carry their actual scopes

The merge-base labels only the values and makes one page-level 30-day claim. The proposed dashboard moves the period or status into every headline and hint, and adds a visible seven-day caption above every sparkline.

Merge-base bb82b0a98 at 1440 by 1000: mixed-scope cards under one 30-day subtitle.Before
Dark CRM dashboard showing Revenue, Customers, Bookings, and Active memberships cards without per-card periods under a subtitle claiming the last 30 days
Implementation d643958ff at the same viewport and with the same controlled data: each value, hint, and trend is scoped.After
Dark CRM dashboard showing explicit last 30 days, all time, active status, and Last 7 days labels across all four overview cards

Responsive overview cards

Screenshot

Scope text remains visible at 320 pixels

The single-column layout preserves long headline and hint text with normal wrapping. Browser measurements reported a 320-pixel viewport, document scroll width, and main scroll width, so the page introduces no horizontal overflow.

Implementation d643958ff at a 320-pixel viewport, showing the four scope-bearing cards.After
Narrow dark CRM dashboard with stacked metric cards whose scope labels and hints remain visible

API-backed scope contract

Table

Each displayed phrase matches the query semantics

The dashboard uses one 30-day summary range, one seven-day trend range, an unbounded customer total, and a status-only membership count.

CardHeadline scopeSecondary scopeTrend scope
RevenueLast 30 daysTransactions in the last 30 daysLast 7 days
CustomersTotal customers, all timeNew in the last 30 daysLast 7 days
BookingsLast 30 daysCancel rate in the last 30 daysLast 7 days
MembershipsRecords with active statusNew and churned in the last 30 daysLast 7 days

Confidence

Validation

Pass

Focused dashboard behavior

15 DashboardPage tests passed with 129 assertions, including the API-backed visible scope contract and all four seven-day accessible summaries

Pass

CRM type safety

The @sauna-crm/crm typecheck completed successfully

Pass

Focused style check

Biome checked the changed DashboardPage source and focused test without diagnostics

Pass

Real browser desktop and narrow verification

The CRM dashboard rendered against controlled report boundaries at 1440 and 320 pixels; every scope was visible, all four SVG names included the last seven days, and narrow document and main scroll widths matched the 320-pixel viewport

Pass

Independent review

Independent review identified an inaccurate now claim for status-only memberships and brittle class-order assertions. Both were corrected before this evidence capture.

Limits

Known issues, risks, and gaps

The remaining coupling is explicit and test-protected

Visible periods follow fixed dashboard presets The dashboard currently requests fixed 30-day summaries and seven-day sparklines. A future preset change must update the visible phrases and focused contract test together.

Captures use controlled report responses Sanitized responses make the before and after layouts directly comparable. API route inspection and focused tests establish semantics separately; the images do not claim production data correctness.