Offer available places to waiting testers with explicit acceptance #58

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

A full test needs a queue that cannot overbook or treat an unanswered invitation as participation. Deliver waiting-list entry, organizer selection, reserved offers, and deadline processing as one seat-offer workflow.

Acceptance criteria

  • Only firm testers enter the waiting list. Tentative interest grants neither a queue position nor a place.
  • Queue order uses server-recorded entry time. Withdrawal and rejoining create a new position. Returning from tentative to firm while full uses a new timestamp.
  • In automatic mode, a vacancy goes to the first eligible waiting tester. In manual mode, an organizer selects the waiting tester.
  • Both modes require explicit offer acceptance. Issuing an offer reserves a seat but does not confirm attendance or increase quorum.
  • Show reservations separately and include them in occupancy and capacity-reduction checks.
  • Set the response window when issuing an offer. Allow twelve hours when start is at least twenty-four hours away, one hour when at least one hour away, otherwise ten minutes.
  • Expiry is no later than scheduled start. Display the exact deadline in the recipient's named timezone with the offset applicable to that instant.
  • Acceptance confirms only the intended tester while the offer remains current and eligible. Stale, replaced, expired, or wrong-recipient actions cannot allocate a seat.
  • Decline or expiry releases the reservation and removes the person from the active queue. Preserve the outcome without an organizer-rejection ban.
  • The tester may explicitly rejoin at the end while registration is open. Automatic mode offers the vacancy to the next tester. Manual mode awaits organizer selection.
  • Early closure preserves previously issued offers but stops new offers. At start, offers expire and no further offers issue.
  • Emit offer and outcome events atomically with domain changes. Delayed and repeated jobs recheck current state and cannot duplicate seats or offers.

Validation

Check exact twenty-four-hour and one-hour boundaries and start-capped deadlines. Race expiry against acceptance, two selections against one vacancy, and duplicate jobs against queue advancement. Use real PostgreSQL transactions plus a small independent domain model for occupancy and queue order. Inspect stale-action API errors and browser deadline presentation.

Dependencies

A full test needs a queue that cannot overbook or treat an unanswered invitation as participation. Deliver waiting-list entry, organizer selection, reserved offers, and deadline processing as one seat-offer workflow. ## Acceptance criteria - Only firm testers enter the waiting list. Tentative interest grants neither a queue position nor a place. - Queue order uses server-recorded entry time. Withdrawal and rejoining create a new position. Returning from tentative to firm while full uses a new timestamp. - In automatic mode, a vacancy goes to the first eligible waiting tester. In manual mode, an organizer selects the waiting tester. - Both modes require explicit offer acceptance. Issuing an offer reserves a seat but does not confirm attendance or increase quorum. - Show reservations separately and include them in occupancy and capacity-reduction checks. - Set the response window when issuing an offer. Allow twelve hours when start is at least twenty-four hours away, one hour when at least one hour away, otherwise ten minutes. - Expiry is no later than scheduled start. Display the exact deadline in the recipient's named timezone with the offset applicable to that instant. - Acceptance confirms only the intended tester while the offer remains current and eligible. Stale, replaced, expired, or wrong-recipient actions cannot allocate a seat. - Decline or expiry releases the reservation and removes the person from the active queue. Preserve the outcome without an organizer-rejection ban. - The tester may explicitly rejoin at the end while registration is open. Automatic mode offers the vacancy to the next tester. Manual mode awaits organizer selection. - Early closure preserves previously issued offers but stops new offers. At start, offers expire and no further offers issue. - Emit offer and outcome events atomically with domain changes. Delayed and repeated jobs recheck current state and cannot duplicate seats or offers. ## Validation Check exact twenty-four-hour and one-hour boundaries and start-capped deadlines. Race expiry against acceptance, two selections against one vacancy, and duplicate jobs against queue advancement. Use real PostgreSQL transactions plus a small independent domain model for occupancy and queue order. Inspect stale-action API errors and browser deadline presentation. ## Dependencies - [#52: Register individual testers with approval, tentative status, and capacity checks](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/52). Provides firm registrations and transactional seat allocation. - [#16: Run durable PostgreSQL jobs with atomic effects](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/16). Provides recoverable deadlines and atomic offer events. ## Related work - [#61: Change registration mode and close registration before start](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/61) - [#64: Reconfirm protected places when test commitments change](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/64) - [#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#58
No description provided.