Invite acceptance flow — invites are no longer auto-claimed on sign-in.
Migration 20260610000200: invitee RLS (read/decline own invites by email),
space_name denormalized onto invites, accept_space_invite() RPC, and
space_invites added to Realtime. The old claim_space_invites() is dropped.
NotificationsBell (components/NotificationsBell.tsx) — bell in the TopBar
with a live count badge; lists pending invites to Accept (joins the space and
switches to it) or Decline. Built to extend to comments later.
members.ts gained listMyInvites / acceptInvite / declineInvite;
inviteByEmail now records the space name and rejects self-invites.
Changed
Share is now a dropdown (components/SharePopover.tsx) anchored to its
button, matching the sign-in popover — replaces the centered ShareDialog.
Revoke / role-change errors are surfaced in the popover instead of being
swallowed (the likely reason revoke "didn't work" was a silent failure);
removeMember / revokeInvite / inviteByEmail now log error details.
useWorkspace drops auto-claim and exposes reloadSpaces() (used after
accepting an invite).
Notes
accept_space_invite is an intentional authenticated-only SECURITY DEFINER
RPC (self-guards via auth.uid()/auth.jwt()) — expected advisor warning.