Summary
Following up on PR #43 (feat(auth): configurable team lead roles for project and squad management), expand the delegation model so Server Managers can authorize both Discord roles and individual Discord members to create and manage projects and squads using unified administrative commands and UI.
Background & Context
PR #43 introduced configurable team lead roles (guild_lead_roles table, /pm admin lead-role, and LeadRolesAdminView). This enabled least-privilege delegation without requiring server-wide Manage Server or Administrator permissions.
However, in many Discord servers and agile groups:
- Managers frequently want to grant project management capabilities to specific trusted individuals, external contractors, or tech leads without the administrative overhead of creating and maintaining a distinct Discord server role.
- Relying solely on server roles for 1–2 individuals causes "role bloat" on user profiles and in Discord guild role lists.
- Providing unified commands and UI for both roles and individual members offers a cohesive, first-class administration experience.
Proposed Capabilities
-
Database Schema & Persistence:
- Add
GuildLeadUserTable (guild_lead_users with composite PK (guild_id, user_discord_id) and created_at).
- Add Alembic migration (
0003_add_guild_lead_users.py).
- Implement
IGuildLeadUserRepository port and PostgresGuildLeadUserRepository adapter.
- Wire repository into
SqlAlchemyUnitOfWork.
-
Domain & Authorization Services:
- Update
AuthService.can_manage_projects(user, guild_id, guild):
- Discord Server Manager (
manage_guild / administrator).
- Authorized Individual Team Lead members (
guild_lead_users).
- Configured Team Lead roles (
guild_lead_roles).
- Active Squad Leads in the guild.
- Add methods
add_guild_lead_user, remove_guild_lead_user, and list_guild_lead_users.
-
Unified Slash Command (/pm admin lead):
- Add unified command:
/pm admin lead action:<add|remove|list> role:<@Role> user:<@Member>
- Allows authorizing/revoking roles, individual members, or both in a single invocation.
- Maintain
/pm admin lead-role as a backwards-compatible alias.
-
Unified Interactive UI (TeamLeadsAdminView):
- Update
/pm menu button to Team Leads.
- Embed native Discord
RoleSelect and UserSelect dropdowns within a single admin portal.
- Render both configured roles and configured individual members in the status embed.
- Auto-wire
guild_lead_user_repo in PmHubView and pinned forum control hubs.
-
Self-Healing on Server Departure:
- Auto-prune
guild_lead_users in on_member_remove if an authorized individual leaves the server.
-
Documentation & Wiki:
- Update
docs/wiki/Teams-and-Authorization.md and docs/wiki/Slash-Commands-Reference.md.
Acceptance Criteria
Summary
Following up on PR #43 (
feat(auth): configurable team lead roles for project and squad management), expand the delegation model so Server Managers can authorize both Discord roles and individual Discord members to create and manage projects and squads using unified administrative commands and UI.Background & Context
PR #43 introduced configurable team lead roles (
guild_lead_rolestable,/pm admin lead-role, andLeadRolesAdminView). This enabled least-privilege delegation without requiring server-wideManage ServerorAdministratorpermissions.However, in many Discord servers and agile groups:
Proposed Capabilities
Database Schema & Persistence:
GuildLeadUserTable(guild_lead_userswith composite PK(guild_id, user_discord_id)andcreated_at).0003_add_guild_lead_users.py).IGuildLeadUserRepositoryport andPostgresGuildLeadUserRepositoryadapter.SqlAlchemyUnitOfWork.Domain & Authorization Services:
AuthService.can_manage_projects(user, guild_id, guild):manage_guild/administrator).guild_lead_users).guild_lead_roles).add_guild_lead_user,remove_guild_lead_user, andlist_guild_lead_users.Unified Slash Command (
/pm admin lead):/pm admin lead action:<add|remove|list> role:<@Role> user:<@Member>/pm admin lead-roleas a backwards-compatible alias.Unified Interactive UI (
TeamLeadsAdminView):/pm menubutton toTeam Leads.RoleSelectandUserSelectdropdowns within a single admin portal.guild_lead_user_repoinPmHubViewand pinned forum control hubs.Self-Healing on Server Departure:
guild_lead_usersinon_member_removeif an authorized individual leaves the server.Documentation & Wiki:
docs/wiki/Teams-and-Authorization.mdanddocs/wiki/Slash-Commands-Reference.md.Acceptance Criteria
0003_add_guild_lead_users.pycreates table with composite PK(guild_id, user_discord_id).AuthService.can_manage_projectsgrants authority to designated individual members./pm admin lead action:add|remove|listworks cleanly for both roles and users./pm menuportal supports adding and removing roles and individual users via unifiedRoleSelectandUserSelectpickers.tests/test_authorization.py,tests/test_cogs.py, andtests/test_menus.py.make check).