Fixed on branch fix/revoke-notice-team-standing, commit 9b723a5, deployed to edge and verified on the process: GET /api/version returns 9b723a5.
The notice is Paul's wording:
> The explicit permission is removed, but since \<address\> is on the > team, they still have access.
The person is named, and that is not decoration. Revoking the grant also takes them off the list below, so an unnamed sentence would refer to somebody the owner can no longer see anywhere on the screen.
The member id travels in the query; the address does not. An email address in a request line is an email address in the platform edge's access logs — the same leak the share-link token was moved out of in 3b8870a, four commits earlier on this run. An id is already in every revoke form's hidden field on this screen. The address is read back from the row, and only after checking the sheet genuinely still admits that member, because the id came from a URL.
Paul's question is what found the real defect, and it is bigger than this notice. He asked what the point of the notice was. Measuring rather than defending it:
BEFORE revoke: role="viewer" mayWrite=false AFTER revoke: role="editor" mayWrite=true
roleFor consults the explicit grant first and falls back to team standing only when no grant row exists — so an explicit grant is the only way to hold a teammate below editor, and "Remove" deletes it. A button labelled Remove, styled as a danger action, grants edit access.
Ruled by Paul, 2026-09-01: the sentence changes, the behaviour stays. Filed as its own issue rather than closed over, because a notice that describes an escalation politely is still an escalation, and this is exactly the kind of thing §14 exists to stop from being rediscovered in three months.
Closing this one. make test green including -race; not reviewed, per AGENTS.md §Review.