Reconfirm protected places when test commitments change #64

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

A changed start or longer planned duration can invalidate a tester's availability. Preserve their place temporarily while requesting an explicit response.

Acceptance criteria

  • Changing the actual start instant requires confirmed testers to reconfirm. A display-timezone change or unchanged instant does not create a new commitment.
  • Increasing duration before start requires reconfirmation. Shortening duration sends an update without reconfirmation.
  • Preserve organizer approval and reserve the existing place while reconfirmation is pending. Unreconfirmed testers do not count toward quorum.
  • Atomically emit one actionable reconfirmation event for each affected tester with the new terms and deadline. Persist it with the schedule and reservation changes.
  • The event creates an inbox item even when reminders are disabled or Telegram is off. Telegram delivery honors messaging permission and channel preferences.
  • Use twelve hours when the new start is at least twenty-four hours away, one hour when at least one hour away, otherwise ten minutes.
  • Cap the deadline at the new start. Show the new commitment and exact deadline in the recipient's saved timezone with applicable offsets.
  • Acceptance restores confirmed status. Decline or expiry releases the place without a rejection ban. Returning requires an explicit new signup.
  • Replace outstanding waiting-list offers after rescheduling. Preserve the selected tester's reservation and queue priority, but issue a new-time offer with a fresh deadline.
  • A replaced offer emits its updated notification action. Earlier actions cannot accept the superseded terms.
  • Obsolete offer and reconfirmation actions cannot accept an old schedule. Further edits recheck the current schedule and reservation state.
  • Start-time and duration edits repeat overlap warnings against visible published non-cancelled tests before save. Touching intervals do not overlap. Warnings do not block saving.
  • During a running test, extending duration updates expected end and notifies participants without resetting attendance or making participants tentative.
  • Enforce the saved-version conflict behavior, current permissions, and current transactional capacity on schedule writes.

Validation

Race rescheduling, offer acceptance, reconfirmation expiry, and completion jobs. Check repeated edits, unchanged instants, shorter versus longer duration, DST transitions, and exact deadline boundaries. Assert preserved capacity without quorum inflation and no acceptance of superseded actions. Test website explanation and explicit confirmation.

Use actual schedule-edit operations and completion jobs for the duration-extension race. A completion job for the old end must not finish the extended test.

Verify one actionable inbox item per reconfirmation event despite repeated processing. Test reminder-off and Telegram-off without losing the inbox action or extending its deadline.

Dependencies

A changed start or longer planned duration can invalidate a tester's availability. Preserve their place temporarily while requesting an explicit response. ## Acceptance criteria - Changing the actual start instant requires confirmed testers to reconfirm. A display-timezone change or unchanged instant does not create a new commitment. - Increasing duration before start requires reconfirmation. Shortening duration sends an update without reconfirmation. - Preserve organizer approval and reserve the existing place while reconfirmation is pending. Unreconfirmed testers do not count toward quorum. - Atomically emit one actionable reconfirmation event for each affected tester with the new terms and deadline. Persist it with the schedule and reservation changes. - The event creates an inbox item even when reminders are disabled or Telegram is off. Telegram delivery honors messaging permission and channel preferences. - Use twelve hours when the new start is at least twenty-four hours away, one hour when at least one hour away, otherwise ten minutes. - Cap the deadline at the new start. Show the new commitment and exact deadline in the recipient's saved timezone with applicable offsets. - Acceptance restores confirmed status. Decline or expiry releases the place without a rejection ban. Returning requires an explicit new signup. - Replace outstanding waiting-list offers after rescheduling. Preserve the selected tester's reservation and queue priority, but issue a new-time offer with a fresh deadline. - A replaced offer emits its updated notification action. Earlier actions cannot accept the superseded terms. - Obsolete offer and reconfirmation actions cannot accept an old schedule. Further edits recheck the current schedule and reservation state. - Start-time and duration edits repeat overlap warnings against visible published non-cancelled tests before save. Touching intervals do not overlap. Warnings do not block saving. - During a running test, extending duration updates expected end and notifies participants without resetting attendance or making participants tentative. - Enforce the saved-version conflict behavior, current permissions, and current transactional capacity on schedule writes. ## Validation Race rescheduling, offer acceptance, reconfirmation expiry, and completion jobs. Check repeated edits, unchanged instants, shorter versus longer duration, DST transitions, and exact deadline boundaries. Assert preserved capacity without quorum inflation and no acceptance of superseded actions. Test website explanation and explicit confirmation. Use actual schedule-edit operations and completion jobs for the duration-extension race. A completion job for the old end must not finish the extended test. Verify one actionable inbox item per reconfirmation event despite repeated processing. Test reminder-off and Telegram-off without losing the inbox action or extending its deadline. ## Dependencies - [#57: Preserve bookings and prevent stale overwrites when test details change](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/57). Provides saved-version conflict handling. - [#52: Register individual testers with approval, tentative status, and capacity checks](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/52). Provides confirmed places and approval. - [#58: Offer available places to waiting testers with explicit acceptance](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/58). Provides current offers and reservations to replace. - [#62: Close registration at start and complete ended tests automatically](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/62). Provides the actual completion jobs required for schedule-edit and duration-extension race validation. ## Related work - [#63: Send timely session reminders and organizer readiness alerts](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/63) - [#22: Keep a durable notification inbox with current action status](https://code.viacheslavshuka.com/viacheslavshuka/quorum/issues/22)
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#64
No description provided.