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.
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 claim
Evidence
Status
Every headline, hint, and trend exposes its true scope
Matched desktop before and after captures, API query inspection, focused render test, and the scope table
Covered
The subtitle no longer makes a false blanket 30-day promise
Desktop comparison shows the old blanket statement and the proposed mixed-scope description
Covered
Narrow layouts preserve distinguishing scope text
320-pixel browser capture plus measured 320-pixel document and main scroll widths with no horizontal overflow
Covered
Sparkline accessible names state the seven-day period
Browser accessibility inspection and focused assertions for all four data-driven SVG labels
Covered
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.BeforeImplementation d643958ff at the same viewport and with the same controlled data: each value, hint, and trend is scoped.After
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
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.
Card
Headline scope
Secondary scope
Trend scope
Revenue
Last 30 days
Transactions in the last 30 days
Last 7 days
Customers
Total customers, all time
New in the last 30 days
Last 7 days
Bookings
Last 30 days
Cancel rate in the last 30 days
Last 7 days
Memberships
Records with active status
New and churned in the last 30 days
Last 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.