Rendered evidence for PR #6688 — items 4.8 (the dashboard chart goes dead on a single month) and 3.3 (the leasing tab has no date filter).
2026-08-31 · captured from a dev server on branch gera/sean-4-8-range-picker, local data · read-only, nothing written
One line of chart code. ObservabilityChart drew a line from a coordinate list and skipped any series with fewer than two points. The dashboard inspector is months-only, so a one-month window buckets to exactly one point — and the chart rendered nothing.
It was not even the empty state. TrendView's “No data for this range” keys on length === 0, and one is not zero, so the reader got gridlines, an axis label, and silence over a real reading.
Below: Occupancy, expanded, with June 2026 picked in the month grid. Same page, same data, same click path — the halves differ by this diff and nothing else (the AFTER shot is the branch; the BEFORE shot is the branch with ObservabilityChart.tsx reverted to origin/main, so the resolver is held constant and only the chart layer moves).
Measured in the same run: [data-chart-single-point] count 0 before, 1 after; four stroked paths in both (the gridlines and the brush rail), which is why the plot looked plausible rather than broken.
Occupancy is served from the monthly store — one reading per month — so no finer grain can split a single month, and the mark is the whole truth about that window. Where the data does have interior resolution, resolvePlotGranularity re-buckets one grain finer and the chart draws a real line:
| Window | Underlying series | Requested | Plotted at | Points |
|---|---|---|---|---|
| One month | daily readings | month | week | 6 |
| One week | daily readings | month | day | 7 |
| One month | monthly readings | month | month | 1 → mark |
| Four months | daily readings | month | month | 4 → unchanged |
It takes the coarsest grain that draws — weeks, never straight to days — so a months-only surface never quietly starts reading day-over-day. It only ever re-keys points already in the slice; nothing is invented, and a window that genuinely holds one reading resolves back unchanged. Pinned in single-month-not-dead.test.ts, whose cases carry their own positive control (each asserts the requested grain still produces the undrawable single bucket).
One component, one ladder, one persisted value. #6647 taught /leasing to READ a window. The only way to CHANGE it was to expand the card — so a reader looking at the collapsed pipeline had numbers over a window and no control for it.
PERIOD_ORDER with PERIOD_MENU_LABEL's copy — the same rows the chart toolbar offers. No “Specific months…” grid here, deliberately: see below.Not a taste call. These counts are recounted server-side through /api/leasing/stats?period=, whose vocabulary is PeriodKey — and presetToToken('custom') is null for the same reason. A committed span has nothing to be sent as, so the grid would open, take two clicks and an Apply, and change nothing.
The same rule closed two more of these on the dashboard, found while writing the test rather than in review:
sliceNoiSummaryToPreset maps trailing-3-months to “the newest 3 rows” and sends anything it does not recognise — custom included — down a default: break that keeps ALL months. Picking Mar–May rendered all time under a Mar–May label./admin/dev/components — reusable by construction, so it is in the registry with a Preview and a three-shape Variants gallery.DateRangePopover at grain="month" and MonthRangeCalendar — the popover, the rows, the grid. MonthRangePicker composes them; it is not a second picker.RangeIconButton — the chromeless trigger, reused for the icon shape.DateRangePreset + the {from,to} custom range, periodToRange, PeriodKey, WindowToken, useCardWindows, presetForWindow / presetToToken — no second notion of “the selected window” is introduced.MONTHS_ONLY_INSIGHT_DEFAULTS now derives its list from the shared ladder instead of enumerating a parallel one.Local dev data, not production — the numbers are this machine's, and the point is the control and the plot, not the counts. The before/after halves were captured in the same session against the same data with only ObservabilityChart.tsx swapped. The allowSpecificMonths gate on the leasing pill is shown as an absence, which is the honest way to show it: the assertion that it stays absent lives in leasing-hub-date-filter.test.tsx, along with a case that walks the whole ladder to prove no row is a dead one.