/calendar reads one month

The building-wide calendar reads the padded month grid for every source, opens on today, pages by month, and kind mode names the days it covers.

23 Sept 2026 · branch feat/building-calendar-reads-index · captured against propflow-stage · at 9b8e912db7

Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.

1 · 1 · No ?month= — opens on today's month, today's day selected

With no ?month= the page reads the month containing the buildings' own today and opens the agenda on today (the Today badge beside the date), not on the first day with events. That day is guaranteed to be inside the read.

Asserted in the captured DOM — September 2026 · Wednesday, September 23, 2026. The month header is the current month and the agenda is on today. Bound to the capture date (2026-09-23): a re-run on another day must update these two strings, and a red here then reads as the date, not a defect.

1 · No ?month= — opens on today's month, today's day selected
Opens on today.

2 · 2 · The month arrows are a server navigation

From ?month=2026-03, Next month pushes ?month=2026-04 and the server reads that month's padded grid. Today is not in April, so the agenda opens on the 1st, a day the read covers.

Asserted in the captured DOM — April 2026 · Wednesday, April 1, 2026. After the arrow, the header is October and the selected day is the 1st of the month read.

2 · The month arrows are a server navigation
One arrow click forward.

3 · 3 · Kind mode is scoped to the month read, and says so

Picking the Move-in chip lists move-ins for the padded October grid only, and the heading names the range (Sunday-first: Sep 27 – Nov 7). It no longer claims to span every month; the arrows are how an operator asks for another one.

Asserted in the captured DOM — Move-ins · Sep 27 – Nov 7 · Back to the day. The kind heading carries the read range.

3 · Kind mode is scoped to the month read, and says so
Kind mode, October.

4 · 4 · Kind mode's empty state names the days it checked

A month with no move-ins: the empty state says No move-ins on the books, May 30 – Jul 10, a claim about the days read, never about all time.

Asserted in the captured DOM — No move-ins on the books, May 30 – Jul 10. The empty state carries the read range.

4 · Kind mode's empty state names the days it checked
Kind mode, empty, June 2027.

Not captured: the partial banner

The warning banner appears only when a tour window comes back short (an index key the read-back did not return, or a truncated window). Stage can't be made to do that without faking rows, so it is pinned by BuildingCalendarClient.window.test.tsx and load-building-calendar.test.ts instead of a capture.

PropFlow Docs