oficina / suite Public

Meet: a call participant who arrives by link writes media, a name and chat, and ruling 15 has no shape for that Question open

Oficina is getting a video-calling app, working name Meet. Its core gesture is the one every calling product has: make a meeting, send the link, the other person clicks and is in the call. Under the doctrine as written, that gesture is forbidden, and it needs a ruling before the app's spec can be written.

Where it collides

Ruling 15 gives an item three rungs plus one orthogonal capability: a read-only link. It then says every write has a named actor, a member or a guest who signed in and took a grant. Anonymous link editing was rejected by Sheets ruling 12 and rejected again in revision 3.

Sheets built the strict reading of that into code. internal/sheets/handlers_link.go renders a link viewer the scriptless table rather than the live grid, so a link holder is never in the fan-out, and Sheets §8.3 rules that a link viewer gets no presence cursor and no name in the presence stack, because presence is a write to shared awareness state.

A participant who arrives at a call by link publishes a camera and microphone track, a display name, and chat messages, to everyone in the room. Every one of those is a write to shared state. Presence in a call is not a side feature; it is the product. So a read-only link buys a call nothing, and the only shape ruling 15 permits is the Docs commenter link: the link carries you to sign-in, sign-in mints a guest grant, and from there you are a named actor.

The two shapes on the table

A. Sign in to join. The doctrine allows this today with no amendment. Every participant, member or outsider, signs in before joining. An outsider takes a guest grant scoped to that one meeting. The link is a capability to obtain that grant, exactly how Docs builds its commenter link. Cost: the product loses "click and you're in". A person you are meeting for the first time has to complete a magic-link round trip on their phone before they see your face. Benefit: no new vocabulary, every participant has a name the team can trust, ruling 9 holds without a footnote, and the roster and custody rules apply unchanged.

B. An ephemeral participant. A new shape, ruled here and cited by Meet: a link to a live session may admit a participant who is named only by what they typed, for the life of that session, and nothing they write survives it. That is the honest description of what every calling product does. It would need the doctrine to say what makes a session ephemeral (no write outlives the room), how the team sees such a participant (a display name marked as unverified, never on a roster, never a directory row), and that a host admits them (a waiting room), so the write has a named actor at one remove. Cost: a fourth kind of actor, and the first place the doctrine describes state that is not at rest. Benefit: the product works the way people expect a calling product to work.

What Meet would do under each

Under A, the join page is the sign-in page with the meeting sqid as the return path, and the P2P media plane is unchanged. Under B, the join page is the pre-join screen, the host sees a knock, and the signalling server holds the participant's chosen name only in memory.

Neither changes the media plane, the P2P design, or the platform questions filed beside this on carlos/platform. This is purely a doctrine question, and it is the one decision the app's spec cannot be written without.

What I recommend

A, with the waiting room built anyway. It keeps the doctrine whole, and a magic link on a phone is a smaller cost than it sounds when the alternative is a fourth actor kind that only one app uses. If B turns out to be the product Paul wants, it should be ruled as a numbered ruling with its own row in §1 and an Appendix A entry, not inferred by Meet.

---

Filed by 🤖 from the Meet brainstorming session. Meet is not started; this blocks its spec.

Ruled by Paul, 2026-09-06: A. Every participant signs in. An outsider who follows a meeting link takes a guest grant scoped to that one meeting, the granted rung under ruling 15, the same shape as the Docs commenter link. No new actor kind, no amendment to ruling 15.

Repo name also settled: oficina/meet.

Meet's spec will cite this discussion and ruling 15 in its Consumed suite rulings section. The doctrine needs an Appendix A.6 entry for Meet when the spec merges; this stays open until that lands.

Overnight coordinator located the existing Meet design/session0a97951c. It is still a proposal, with no repo created. Preserving signed-in guests, meeting scheduling A with two-hour guest-grant expiry, cap4 P2P, SSE+POST signalling, ephemeral chat, scriptless room management, and named agent drive surface. The final accepted platform stage4a contract is base64-wrapped CARLOSRELAY JSON elements with region/urls/key/usernamesuffix, HMAC-SHA256 over expiry:suffix, hard four-hour credential expiry and pre-expiry ICE restart; no CARLOSRELAYINCARNATION variable or initial three-field credentials. Original owner has this exact contract. Initial notes claiming suite importability is blocked are stale: current Memoria builds against suite60b01a8 successfully. Deployment/browser verification must use isolated canaries; the earlier proposal's localhost-only two-tab test cannot establish Internet connectivity. No unrelated Claude session has been restarted, no Meet repo visibility decision or spec approval has been invented. These are preserved inputs for reviewed implementation under the user's overnight authorization.