Send timely session reminders and organizer readiness alerts #63

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

Outcome

Participants and organizers need reminders while they can still act. Implement reminder scheduling and usefulness checks separately from transport retries.

Acceptance criteria

  • Confirmed testers and accepted organizers receive reminders 60 minutes and 10 minutes before start when their reminder preference is enabled.
  • Tentative testers receive one 60-minute reminder to become firm or withdraw. The reminder does not reserve a place or promise confirmation.
  • Organizers receive readiness alerts at 60 and 10 minutes when quorum is missing or a meeting-access link is absent. Combine simultaneous readiness problems into one alert.
  • Reminder-off suppresses all three categories in both channels. Telegram normal/silent/off and messaging permission remain independent channel checks.
  • Reminder categories bypass testing-availability restrictions. Missing quorum does not cancel a test automatically.
  • Joining or becoming eligible after a checkpoint produces no catch-up reminder. Eligibility at the checkpoint must be recoverable without mistaking late joins for scheduled recipients.
  • An eligible scheduled reminder has at most two minutes of delivery lateness, including retries. The test must remain in the future and the recipient eligible.
  • Schedule edits recalculate unsent work. Old jobs cannot send obsolete times or duplicate a replacement reminder.
  • Worker recovery discards obsolete reminders instead of replaying the missed schedule. Current cancellation, restriction, withdrawal, and role state can invalidate queued work.
  • Each emitted reminder uses the durable event/recipient contract and absolute recipient-local timestamps. Transport failures do not duplicate inbox events.

Validation design

Use clock-driven cases immediately before, at, and after each checkpoint and its two-minute allowance. Join after a checkpoint to detect forbidden catch-up. Reschedule while a job waits, remove a role, and cancel before execution. Assert combined readiness content and absence of automatic cancellation. Verify that tentative reminders never create a capacity reservation.

Dependencies

## Outcome Participants and organizers need reminders while they can still act. Implement reminder scheduling and usefulness checks separately from transport retries. ## Acceptance criteria - Confirmed testers and accepted organizers receive reminders 60 minutes and 10 minutes before start when their reminder preference is enabled. - Tentative testers receive one 60-minute reminder to become firm or withdraw. The reminder does not reserve a place or promise confirmation. - Organizers receive readiness alerts at 60 and 10 minutes when quorum is missing or a meeting-access link is absent. Combine simultaneous readiness problems into one alert. - Reminder-off suppresses all three categories in both channels. Telegram normal/silent/off and messaging permission remain independent channel checks. - Reminder categories bypass testing-availability restrictions. Missing quorum does not cancel a test automatically. - Joining or becoming eligible after a checkpoint produces no catch-up reminder. Eligibility at the checkpoint must be recoverable without mistaking late joins for scheduled recipients. - An eligible scheduled reminder has at most two minutes of delivery lateness, including retries. The test must remain in the future and the recipient eligible. - Schedule edits recalculate unsent work. Old jobs cannot send obsolete times or duplicate a replacement reminder. - Worker recovery discards obsolete reminders instead of replaying the missed schedule. Current cancellation, restriction, withdrawal, and role state can invalidate queued work. - Each emitted reminder uses the durable event/recipient contract and absolute recipient-local timestamps. Transport failures do not duplicate inbox events. ## Validation design Use clock-driven cases immediately before, at, and after each checkpoint and its two-minute allowance. Join after a checkpoint to detect forbidden catch-up. Reschedule while a job waits, remove a role, and cancel before execution. Assert combined readiness content and absence of automatic cancellation. Verify that tentative reminders never create a capacity reservation. ## Dependencies - [#62: Close registration at start and complete ended tests automatically](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/62). Supplies lifecycle times and current session status. - [#52: Register individual testers with approval, tentative status, and capacity checks](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/52). Supplies participation eligibility and quorum data. - [#56: Manage organizer-supplied access links for tests](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/56). Supplies meeting-link readiness. - [#22: Keep a durable notification inbox with current action status](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/22). Supplies durable reminder events. - [#23: Let users control Telegram delivery, reminders, and digests](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/23). Supplies reminder and channel preferences. - [#16: Run durable PostgreSQL jobs with atomic effects](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/16). Supplies recoverable deadline execution. ## Related work - [#29: Deliver Telegram notifications with bounded retries and current permissions](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/29) - [#64: Reconfirm protected places when test commitments change](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/64) - [#69: Restrict participation and organizing capabilities with reversible expiry](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/69)
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#63
No description provided.