Register individual testers with approval, tentative status, and capacity checks #52

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

Testers need one authoritative participation record across the website and bot. Deliver the registration and roster workflow with explicit approval, commitment, and seat states.

Acceptance criteria

  • Each tester registers through their own account and occupies at most one tester place per test. Organizers cannot enroll arbitrary users.
  • Website and bot application calls address the same record. Chat text and plus-sign messages do not create registrations.
  • Automatic mode approves a new request automatically. Manual mode requires organizer approval.
  • Approval and firm availability are separate. Tentative registrations and unapproved requests neither reserve seats nor count toward quorum.
  • An ordinary firm request becomes confirmed on approval when capacity exists, without another acceptance step. Approval cannot overbook a full test.
  • Display confirmed, tentative, and reserved counts separately. Reaching minimum quorum does not close remaining places. Organizer presence alone does not count as tester participation.
  • Confirmed testers can become tentative and release their seat while retaining approval. Becoming firm again checks current capacity.
  • A maximum can be absent. Capacity changes cannot reduce it below quorum or the total of confirmed places and active reservations. Never evict testers to reduce capacity.
  • Testers can withdraw before start without approval. Notify organizers. The application records later departure separately and preserves attendance and familiarity history.
  • Organizer rejection requires a short reason private to the tester and organizers. Rejection prevents another application for that test until an organizer reverses it.
  • Approval and rejection emit durable notifications for the affected tester in the same transaction as the state change. Rejection notifications preserve the reason's privacy.
  • These notifications appear in the inbox even when reminders are disabled. Telegram delivery honors the tester's normal, silent, or off setting and messaging permission.
  • Signed-in viewers see organizers, confirmed testers, and approved tentative testers. Pending and waiting identities remain private to the person and test organizers.
  • API writes use current transactional PostgreSQL state. The interface shows success only after server confirmation and does not replay offline booking writes.

Validation

Use domain state transitions for approval versus availability. Race final-seat requests, approval, tentative conversion, capacity reduction, and withdrawal with independent database connections. Assert seat limits and absence of unintended registrations after rejected actions. Check roster response privacy for each viewer role. Exercise the website with two clients and inspect generated API contracts.

Check inbox creation after approval and rejection. Repeat event processing and require one record per event and recipient. Test reminder-off, Telegram-off, and rejection-reason privacy.

Dependencies

Testers need one authoritative participation record across the website and bot. Deliver the registration and roster workflow with explicit approval, commitment, and seat states. ## Acceptance criteria - Each tester registers through their own account and occupies at most one tester place per test. Organizers cannot enroll arbitrary users. - Website and bot application calls address the same record. Chat text and plus-sign messages do not create registrations. - Automatic mode approves a new request automatically. Manual mode requires organizer approval. - Approval and firm availability are separate. Tentative registrations and unapproved requests neither reserve seats nor count toward quorum. - An ordinary firm request becomes confirmed on approval when capacity exists, without another acceptance step. Approval cannot overbook a full test. - Display confirmed, tentative, and reserved counts separately. Reaching minimum quorum does not close remaining places. Organizer presence alone does not count as tester participation. - Confirmed testers can become tentative and release their seat while retaining approval. Becoming firm again checks current capacity. - A maximum can be absent. Capacity changes cannot reduce it below quorum or the total of confirmed places and active reservations. Never evict testers to reduce capacity. - Testers can withdraw before start without approval. Notify organizers. The application records later departure separately and preserves attendance and familiarity history. - Organizer rejection requires a short reason private to the tester and organizers. Rejection prevents another application for that test until an organizer reverses it. - Approval and rejection emit durable notifications for the affected tester in the same transaction as the state change. Rejection notifications preserve the reason's privacy. - These notifications appear in the inbox even when reminders are disabled. Telegram delivery honors the tester's normal, silent, or off setting and messaging permission. - Signed-in viewers see organizers, confirmed testers, and approved tentative testers. Pending and waiting identities remain private to the person and test organizers. - API writes use current transactional PostgreSQL state. The interface shows success only after server confirmation and does not replay offline booking writes. ## Validation Use domain state transitions for approval versus availability. Race final-seat requests, approval, tentative conversion, capacity reduction, and withdrawal with independent database connections. Assert seat limits and absence of unintended registrations after rejected actions. Check roster response privacy for each viewer role. Exercise the website with two clients and inspect generated API contracts. Check inbox creation after approval and rejection. Repeat event processing and require one record per event and recipient. Test reminder-off, Telegram-off, and rejection-reason privacy. ## Dependencies - [#44: Create private test drafts and publish complete announcements](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/44). Provides published tests and their capacity settings. - [#47: Manage test co-organizers through accepted invitations](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/47). Provides roster-management permissions. - [#22: Keep a durable notification inbox with current action status](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/22). Provides durable inbox creation for approval and rejection events. - [#23: Let users control Telegram delivery, reminders, and digests](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/23). Provides channel and category settings for participation notifications. ## Related work - [#61: Change registration mode and close registration before start](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/61) - [#58: Offer available places to waiting testers with explicit acceptance](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/58) - [#62: Close registration at start and complete ended tests automatically](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/62) - [#67: Show group familiarity and apply the previous-tester admission setting](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/67)
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#52
No description provided.