Hiding meetings that produced nothing

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.

17 Aug 2026 · real data: five Meet recordings in Drive, two of them from instant meetings with no calendar event

Two things are tangled here and the mockup should separate them. The toggle is about noise: forty meetings, five recordings. The instant-meeting gap is about correctness: two of those five recordings have no calendar event, so today they produce no row at all — not a dimmed one, not a "Not recorded" one, and not a line in the footer's arithmetic. A toggle cannot fix that, and turning it on would hide the evidence that anything was missing. Panel 3 shows the list once both are addressed.

1 — Today: everything, including what you can't use

Two recorded meetings, one that nobody recorded. At this size it reads fine.

Import from Google Meet
martin@finca342.org
Last 30 days
Filter
MeetingScheduledRecordedSizeStatus
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
3 meetings · 2 recordings · 2 you can fetch

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.

2 — Where the control goes, and what it says

Same state, three shapes. The question is which reads as scope rather than as a setting.

A · Switch in the toolbar

Only with recordings

Reads as a preference that persists. Widest label, and the toolbar is already carrying a window picker and a filter field.

B · Segmented, beside the window picker

RecordedAll meetings

Reads as scope, the same grammar as “Last 30 days”. Two named states, no hidden default. Costs more width than a switch.

C · A filter chip that appears when it bites

Recorded only ×

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.

3 — On by default, with the instant meetings restored

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.

Import from Google Meet
martin@finca342.org
RecordedAll meetings
Last 30 days
Filter
MeetingScheduledRecordedSizeStatus
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
4 meetings · 5 recordings · 5 you can fetch · 1 with no recording hidden

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.