中文
Spec · Ratified

POFA Permission Matrix

Ratified 2026-11-05. This document fixes the rules first; implementation is scheduled separately. Every item carries its real status — nothing planned is presented as shipped.

Four principles

Roles and credentials

RoleCredentialHow it is obtainedStatus
OrganizerManage codeGenerated when the event is created, stored hashed; 8 wrong tries in 10 minutes triggers brute-force throttling, correct tries never countLive
AssistantAssistant keyIssued by the organizer in the console, stored hashed; the organizer can reset it to revokeNew in this spec · To build
Referee deskNo credential of its ownOpens via the event link, reads public data, checklist state stays on the device; score writes still go through the consoleLive (read-only form)
Player · unboundLight claim (tap your name on the roster)Tap to claim, no password; enough to read and speak, never to change stateLive
Player · boundGoogle account bound to player_idOne roster identity binds one Google account, first come first served; the organizer can unbind with the manage code as a fallback; a verified email is also bound as the recovery anchorDecided 2026-11-03 · To build
Spectator / big screenNonePublic links. Note: the tournament ID in a screen link is an address, not a credential — it only has read paths, so it is not a permission surfaceLive
Calling recoveryrt tokenCalling actions only, 48-hour expiry, stored hashedVerification live Issuance pending repair

The MCP server follows the same table: organizer tools require the manage code (same column as the organizer), player tools are public reads. Platform back-office surfaces (docs / ideas / import) use a separate X-API-Key, unrelated to tournament permissions, and are outside this matrix.

The matrix

ActionOrganizerAssistantPlayer · unboundPlayer · boundSpectator / screen
View draw, schedule, roster✓✓✓✓✓
View calling status✓✓✓✓✓
Edit event settings (name, venue, contact, format)✓————
Lock / unlock the event✓————
Edit roster (add, remove, rename players)✓————
Generate draw / reschedule matches✓————
Enter scores, advance winners✓✓———
Calling actions (call, skip, re-call, and the rest)✓✓———
Broadcast / send notifications, reply as the organizer✓————
Raise an appeal / reply in a thread (own thread only)——✓✓—
Check in, withdraw, confirm a score (own matches only) Decided · To build———✓—
Read the activity log✓————
Delete the event✓————
Issue / reset the assistant key New · To build✓————

Unbound players' appeals and replies are rate-limited (reads 300/hour, writes 60/hour, bucketed per event and direction), and a player's replies are visible only to the organizer and that player, while organizer replies are visible to everyone — visibility is part of permission too.

Where the assistant key stops (the new part)

Out of scope for this matrix

POFA · Permission Matrix v1 · Ratified 2026-11-05 · 中文版