Repository navigation
Conversation
A member who cancels after the close time keeps their waiting-list entry, but nothing stopped a later freed seat from being handed to that declined member: promotion eligible them on auto_rsvp alone, so someone who said "I can no longer attend" could be re-confirmed and emailed by another member's cancellation. The seat could end up spent past the freeze on a member who will not attend. promote_next now considers only invitations whose attending flag is still undecided. A declined invitation (attending false) stays on the printed list for the security handover but is never auto-promoted; the excluder handoff the previous commit carried is not needed since a cancelling member is already declined by the time promote_next runs. Accepted invitations with a lingering entry are skipped too. The admin removal path shares the same rule through WaitlistPromotionConcerns, collapsing the difference where member rejects kept the entry while admin removals destroyed it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the residual seat-wasting path from #3003: a member who cancels after the close time keeps their waiting-list entry, and nothing stopped a later freed seat from being handed back to them.
Problem
Let X be a member who is attending and also holds a waiting-list entry (reachable through admin overrides or data carried over from before the self-promotion fix). If X cancels after the close time, the entry stays. A later cancellation by member Y promotes on
auto_rsvpalone, so X can be re-confirmed as attending and emailed "your attendance has now been confirmed" despite having just said they cannot attend. If X does not show, the seat is spent and, past the 3.5-hour freeze, it cannot be filled again.The two removal paths also disagreed: a member reject kept the rejecter's entry while an admin removal destroyed the removed member's entry.
Change
WaitingList.promote_nextnow considers only invitations whoseattendingflag is still undecided. The eligibility rule is "declined means parked": the entry stays on the printed list for the security handover, but is never auto-promoted. A cancelling member is already declined by the time promotion runs, so theexcluding:parameter from #3003 is no longer needed and is removed. Accepted invitations with a lingering entry are skipped too.The member reject path and the admin removal path now share one rule through
WaitlistPromotionConcerns.Review notes
:invitationand addsworkshop_invitations.attending IS NULL. Worth re-readingpromote_nextin full, including theSKIP LOCKEDpop that follows.State model behind the rule
attendingon invitationnilfalsetrue