Campaigns are adventurer-owned; guild affiliation is optional #6

Open
opened 2026-08-05 02:10:28 +00:00 by ginjiruu · 0 comments
Owner

The model (CONTEXT.md "Campaign owner", "Guild") now says a campaign is owned by
the adventurer who created it — the guild never owns a campaign, and a campaign
may exist standalone. The code and FGA still treat the guild as the campaign's
owner/tenant.

Changes:

  • campaigns.guild_id becomes optional; a campaign can have no guild.
  • FGA campaign#guild becomes an optional affiliation, not an ownership root.
    Guild-gated powers (can_create_campaign, guild membership as the standing
    invitation to join) apply only to campaigns affiliated with a guild.
  • Campaign creation: any adventurer may create a standalone campaign; creating
    one within a guild requires guild membership.
  • Ownership and lifecycle semantics are unchanged: owner = creator, immutable,
    can_delete: owner, last-GM-step-down → dormant.

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

The model (CONTEXT.md "Campaign owner", "Guild") now says a campaign is owned by the adventurer who created it — the guild never owns a campaign, and a campaign may exist standalone. The code and FGA still treat the guild as the campaign's owner/tenant. Changes: - `campaigns.guild_id` becomes optional; a campaign can have no guild. - FGA `campaign#guild` becomes an optional affiliation, not an ownership root. Guild-gated powers (`can_create_campaign`, guild membership as the standing invitation to join) apply only to campaigns affiliated with a guild. - Campaign creation: any adventurer may create a standalone campaign; creating one within a guild requires guild membership. - Ownership and lifecycle semantics are unchanged: owner = creator, immutable, `can_delete: owner`, last-GM-step-down → dormant. Regenerate FGA constants, then `task clean-fga` + re-bootstrap to drop stale tuples.
Sign in to join this conversation.
No description provided.