A working month is mostly un-recorded meetings. Showing them all buries the handful of rows that are the point — but hiding them for ever makes a forgotten record button indistinguishable from a session that never happened.
Two recorded meetings, one that nobody recorded. At this size it reads fine.
| Meeting | Scheduled | Recorded | Size | Status | |
|---|---|---|---|---|---|
| Today | |||||
▾test 2 recordings |
15:00 1h 30m | — | — | ||
Recording 1 | — | 13:12 1m 2s |
3.1 MB | ||
Recording 2 | — | 14:12 21s |
5.4 MB | ||
Weekly sync Dana Okonkwo · Priya Raman |
10:00 30m |
— | — | Not recorded | |
Scale is the whole argument. Three rows is comfortable. Thirty days of a real calendar is forty meetings and five recordings, and then this list is 35 rows of grey around 5 rows of signal — the researcher scrolls past their own work.
Same state, three shapes. The question is which reads as scope rather than as a setting.
Reads as a preference that persists. Widest label, and the toolbar is already carrying a window picker and a filter field.
Reads as scope, the same grammar as “Last 30 days”. Two named states, no hidden default. Costs more width than a switch.
Nothing in the chrome until something is hidden, then a dismissible chip — Mail’s idiom. Least clutter at rest; least discoverable when you want it back.
B is the argument I’d make. The toolbar already answers “what am I looking at?” with Last 30 days, and this is the second half of the same sentence. A switch says “setting”; a segmented control says “scope”, and scope is what this is.
What the list should be: five recordings, two of them from meetings that were never in the calendar. The hidden row is named in the footer, not silently dropped.
| Meeting | Scheduled | Recorded | Size | Status | |
|---|---|---|---|---|---|
| Today | |||||
▾test 2 recordings |
15:00 1h 30m | — | — | ||
Recording 1 | — | 13:12 1m 2s |
3.1 MB | ||
Recording 2 | — | 14:12 21s |
5.4 MB | ||
osp-jwrt-wff Martin Storey |
— | 14:21 14s |
3.7 MB | ||
twk-fnyg-myw Martin Storey |
— | 15:02 2m 40s |
28 MB | ||
| Fri 15 Aug | |||||
Banyalbufar discussion Aoife Brennan |
23:00 1h |
22:45 4m 38s |
58 MB | ||
The footer keeps the arithmetic honest. “1 with no recording hidden” is what stops the toggle from becoming the thing it was meant to prevent. Without it, a bug that failed to find a recording would look exactly like a meeting the toggle chose not to show — and that is the failure mode this whole window is written against. The clause disappears when nothing is hidden, so it costs nothing in the ordinary case.
The instant-meeting rows are not a mockup flourish — they are the reason to do this in the right order. Two of five real recordings have no calendar event. Today they produce no row, no dimmed row, and no contribution to the footer’s counts, because the Meet listing walks the calendar and hangs recordings off events. Ship the toggle first and default it on, and the window will look tidier while still being 40% short — with the tidiness supplying the alibi. Invert the listing first (list conference records by time, join the calendar on afterwards, the shape Teams already uses), then the toggle is a comfort rather than a cover.
Open question the inversion raises. A conference record carries a
space, not a meeting code, so joining a record back to its calendar event needs
either an extra spaces.get per record or a time-overlap join like the Teams
adapter’s. The first is exact and costs a call; the second is free and fuzzy. Worth deciding
before writing it, because it is the same class of choice that produced the
.first bug.