Manage test co-organizers through accepted invitations #47

Open
opened 2026-11-01 20:12:06 +00:00 by viacheslavshuka · 0 comments

Several organizers can edit one test and manage its roster. The owner controls assignments, while invitees choose whether to accept.

Acceptance criteria

  • Each test has one owner, initially its creator. Only the owner controls ordinary organizer invitations and removals.
  • An invitation grants no permissions until the intended recipient accepts. Accepted organizers can edit test details and manage registrations.
  • At most one invitation is pending for a person and test. The owner can withdraw it. Invitations expire after seven days without automatic reminders or resending.
  • After decline, another invitation requires the recipient to initiate reconsideration.
  • Invitations emit in-app and Telegram notification events. Notification delivery does not accept the role.
  • A non-owner co-organizer may leave without approval. The current owner has no Leave action.
  • When the owner removes a co-organizer, require a short private reason and end that co-organizer's permissions immediately. Voluntary departure requires no reason.
  • The removed person, remaining organizers, and moderators may see the reason. Registered testers receive only the organizer-change notice.
  • Notify the removed organizer and include the private removal reason. Notify remaining organizers after departure or removal.
  • Notify registered testers when a published test has not ended. Their notification excludes the private reason.
  • Retain creator identity, role intervals, eligible-role history, and removal history. Later departure or removal does not erase earned activity credit.

Validation

Test wrong-recipient acceptance, concurrent invitation creation, expiry and acceptance races, and removal followed by a stale edit. Check reason privacy separately from public organizer-change notices. Verify that no owner departure leaves assignment control undefined.

Verify notification delivery to the removed person, remaining organizers, and eligible testers. Repeated event processing must not create duplicate inbox records.

Dependencies

Several organizers can edit one test and manage its roster. The owner controls assignments, while invitees choose whether to accept. ## Acceptance criteria - Each test has one owner, initially its creator. Only the owner controls ordinary organizer invitations and removals. - An invitation grants no permissions until the intended recipient accepts. Accepted organizers can edit test details and manage registrations. - At most one invitation is pending for a person and test. The owner can withdraw it. Invitations expire after seven days without automatic reminders or resending. - After decline, another invitation requires the recipient to initiate reconsideration. - Invitations emit in-app and Telegram notification events. Notification delivery does not accept the role. - A non-owner co-organizer may leave without approval. The current owner has no Leave action. - When the owner removes a co-organizer, require a short private reason and end that co-organizer's permissions immediately. Voluntary departure requires no reason. - The removed person, remaining organizers, and moderators may see the reason. Registered testers receive only the organizer-change notice. - Notify the removed organizer and include the private removal reason. Notify remaining organizers after departure or removal. - Notify registered testers when a published test has not ended. Their notification excludes the private reason. - Retain creator identity, role intervals, eligible-role history, and removal history. Later departure or removal does not erase earned activity credit. ## Validation Test wrong-recipient acceptance, concurrent invitation creation, expiry and acceptance races, and removal followed by a stale edit. Check reason privacy separately from public organizer-change notices. Verify that no owner departure leaves assignment control undefined. Verify notification delivery to the removed person, remaining organizers, and eligible testers. Repeated event processing must not create duplicate inbox records. ## Dependencies - [#44: Create private test drafts and publish complete announcements](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/44). Provides tests and initial ownership. - [#16: Run durable PostgreSQL jobs with atomic effects](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/16). Provides durable invitation expiry and atomic events. ## Related work - [#50: Transfer test and material ownership only after recipient acceptance](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/50) - [#51: Schedule another test from a previous test](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/51) - [#71: Show tester and organizer activity rankings from recorded participation](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/71) - [#22: Keep a durable notification inbox with current action status](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/22) - [#29: Deliver Telegram notifications with bounded retries and current permissions](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/29)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
viacheslavshuka/quorum#47
No description provided.