Announce matching tests once and combine deferred discoveries into digests #55

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

Outcome

Testers should discover relevant tests during their available hours without repeated announcements. Implement recipient selection, deferral, and one digest at the start of an allowed window.

Acceptance criteria

  • Discovery remains disabled until the tester configures availability. Both the whole expected test interval and the delivery time must fit the shared effective schedule.
  • New relevant sessions during allowed hours can produce individual announcements. Outside allowed hours, retain candidates for reevaluation at the next allowed window.
  • Reevaluate cancellation, start, registration availability, capacity, ignores, and current availability before emitting a deferred announcement. Discard obsolete candidates.
  • Do not announce sessions with no unreserved places. Confirmed places and reservations consume capacity. Tentative testers do not. No maximum means unlimited capacity.
  • Any ignored accepted organizer suppresses discovery, including a co-organizer. The browsing show-all switch does not override this rule.
  • At the start of an allowed window, combine deferred, still-relevant sessions into one digest rather than individual backlog messages.
  • Disabling digests discards deferred recommendations. It does not disable individual announcements for new matching sessions during allowed hours.
  • Emit at most one discovery announcement per recipient and test. Edits and reopened places do not repeat it for an already notified recipient.
  • A previously full or unsuitable test can receive its first announcement after becoming eligible. Discarded deferred candidates do not count as announced.
  • Duplicate job execution cannot create another announcement event. Retries of that event remain subject to the separate Telegram delivery policy.
  • Important updates about existing commitments bypass availability and discovery deduplication. They still honor the Telegram channel preference.

Validation design

Model eligibility transitions across full, free, ignored, cancelled, started, and revised availability states. Assert exact digest membership and recipient/test uniqueness under concurrent execution. Disable digests while candidates wait, then verify no backlog replay and no falsely consumed first-announcement opportunity. Exercise daylight-saving transitions and overnight boundaries using the effective availability schedule.

Dependencies

## Outcome Testers should discover relevant tests during their available hours without repeated announcements. Implement recipient selection, deferral, and one digest at the start of an allowed window. ## Acceptance criteria - Discovery remains disabled until the tester configures availability. Both the whole expected test interval and the delivery time must fit the shared effective schedule. - New relevant sessions during allowed hours can produce individual announcements. Outside allowed hours, retain candidates for reevaluation at the next allowed window. - Reevaluate cancellation, start, registration availability, capacity, ignores, and current availability before emitting a deferred announcement. Discard obsolete candidates. - Do not announce sessions with no unreserved places. Confirmed places and reservations consume capacity. Tentative testers do not. No maximum means unlimited capacity. - Any ignored accepted organizer suppresses discovery, including a co-organizer. The browsing show-all switch does not override this rule. - At the start of an allowed window, combine deferred, still-relevant sessions into one digest rather than individual backlog messages. - Disabling digests discards deferred recommendations. It does not disable individual announcements for new matching sessions during allowed hours. - Emit at most one discovery announcement per recipient and test. Edits and reopened places do not repeat it for an already notified recipient. - A previously full or unsuitable test can receive its first announcement after becoming eligible. Discarded deferred candidates do not count as announced. - Duplicate job execution cannot create another announcement event. Retries of that event remain subject to the separate Telegram delivery policy. - Important updates about existing commitments bypass availability and discovery deduplication. They still honor the Telegram channel preference. ## Validation design Model eligibility transitions across full, free, ignored, cancelled, started, and revised availability states. Assert exact digest membership and recipient/test uniqueness under concurrent execution. Disable digests while candidates wait, then verify no backlog replay and no falsely consumed first-announcement opportunity. Exercise daylight-saving transitions and overnight boundaries using the effective availability schedule. ## Dependencies - [#44: Create private test drafts and publish complete announcements](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/44). Supplies published test times and accepted organizers. - [#52: Register individual testers with approval, tentative status, and capacity checks](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/52). Supplies registration availability and occupancy. - [#28: Edit recurring availability with date overrides and overnight slots](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/28). Supplies effective availability windows. - [#21: Let testers hide ignored organizers from ordinary discovery](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/21). Supplies organizer-ignore matching. - [#22: Keep a durable notification inbox with current action status](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/22). Supplies durable announcement events. - [#23: Let users control Telegram delivery, reminders, and digests](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/23). Supplies digest and channel preferences. - [#16: Run durable PostgreSQL jobs with atomic effects](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/16). Supplies window-boundary scheduling and reevaluation. ## Related work - [#54: Open Quorum on a filtered list of upcoming tests](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/54) - [#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#55
No description provided.