Nine collections in tl;dv's Firestore database return 403 to a query from the wrong account. Users, chats, transcripts, clips, recordings, videos, notes, teams, organizations. The tenth is `meetings`, and a researcher who reported it in January and was still waiting in July pulled 181,874 records out of it: 84,312 unique users, 35,003 email domains, government calls from 23 countries.

The content was locked. The index was not. That is the wrong way around, and not by a little.

In a product that records meetings, the metadata is not a description of the asset. It is an address for it. Each record carries the creator's email, the provider, a timestamp, a recording status, and the conference ID — a joinable Google Meet or Teams room. At any given moment roughly a thousand of those records sit at `status: recording`. A thousand live calls with the door number published.

The researcher took one and walked in: a Malaysian Ministry of Education presentation, 157 participants, a woman at the front of the deck. The tl;dv bot was already in the roster.

Nobody invited me. The Firestore database did.
bobdahacker

This is a property of the product before it is a mistake by one team. A notetaking bot cannot join your call without writing down which call it is joining. The row has to exist, it has to be current, and it has to say where. When a recording was a file you downloaded afterward, the sensitive object was the file, and every instinct the industry has about meeting data was trained on that shape — encrypt at rest, restrict the share link, expire the retention. Now there is a second object. Where this conversation is happening, as it happens. It lives under a schema someone wrote while thinking about scheduling.

A leaked email address tells you someone attended a meeting. A leaked conference ID seats you at it.

The fair objection is that none of this is content. Meetings are private by default; of the 27,334 IDs the researcher sampled, about a thousand were public. There was no mass transcript dump. Severity scoring would read this field list — email, timestamp, status, ID — and rate it low. By the standard that asks what a field contains, that rating is correct.

Ask instead what the field does. It does not describe a room. It opens one, in progress, while everyone inside is working from a participant list they believe is complete. The harm is not retrospective, which is the only kind our breach vocabulary is built for. Nothing was exfiltrated. Somebody was let in.

Nine collections were locked because they hold what people said. The tenth was left open because it only holds where they are saying it. That was the one worth taking.