Remove admin relation from FGA model #4

Open
opened 2026-08-04 02:09:59 +00:00 by ginjiruu · 0 comments
Owner

admin is a phantom role from early modeling — see CONTEXT.md ("Admin"). It is
not a seat and grants the owner the GM's view of the game, which spoils the
surprise of the game once the owner steps out of the GM seat.

Remove the admin relation and rework what depends on it:

  • core.fga: drop guild admin: owner and can_manage: admin; guild management
    is the owner's.
  • campaign.fga: drop campaign admin: owner or admin from guild.

Rebuild the relations against the decided domain rules (CONTEXT.md):

  • can_view: member only.
  • can_play: gm or player.
  • can_manage: gm only (the owner has no game-management powers — the surprise
    principle). Owner reactivation of a dormant campaign is a service-level
    behavior, not a standing can_manage.
  • can_delete: owner only — a GM can never delete a campaign, and deletion
    is never triggered by a GM leaving or the campaign falling dormant.

Regenerate FGA constants (task generate-fga), then task clean-fga +
re-bootstrap to drop stale tuples.

`admin` is a phantom role from early modeling — see CONTEXT.md ("Admin"). It is not a seat and grants the owner the GM's view of the game, which spoils the surprise of the game once the owner steps out of the GM seat. Remove the `admin` relation and rework what depends on it: - `core.fga`: drop guild `admin: owner` and `can_manage: admin`; guild management is the owner's. - `campaign.fga`: drop campaign `admin: owner or admin from guild`. Rebuild the relations against the decided domain rules (CONTEXT.md): - `can_view`: member only. - `can_play`: gm or player. - `can_manage`: gm only (the owner has no game-management powers — the surprise principle). Owner reactivation of a dormant campaign is a service-level behavior, not a standing `can_manage`. - `can_delete`: **owner** only — a GM can never delete a campaign, and deletion is never triggered by a GM leaving or the campaign falling dormant. Regenerate FGA constants (`task generate-fga`), then `task clean-fga` + re-bootstrap to drop stale tuples.
Sign in to join this conversation.
No description provided.