Make requests and approval delivery recover safely - #25
Merged
Conversation
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.
Request confirmations now submit once, finite quotas are displayed and enforced correctly, and shows with more than 25 seasons have a complete selector. Approval decisions, notifications and card cleanup recover independently after failures and restarts.
Upgrade: back up the complete data directory before schema revision 6. Existing subscriptions, settings and notification receipts are preserved; interrupted blank claims can recover. Migration does not replay historical decision notifications. Rollback needs the matching pre-upgrade data. See docs/development/operations.md.
Validation: affected Go race tests and vet passed, including revisions 1–5, repeat/rollback, lost Seerr responses and local saves, failed DMs, preference suppression, stale cards, decoded modal payloads, startup/shutdown and maintenance timeouts. The synthetic 20-user lookup benchmark improved from 21.5 ms serial to 5.6 ms with four workers. The final CI gate passed on
a77fa436a384925f55693ad63aee7d7d2cdb817e, including Go checks and Docker; dependency review also passed. Local Go 1.27.1 checks are supplementary to that specified-toolchain gate.Limits: no live Discord server or production Seerr data was used. Discord client layout/keyboard checks remain for a dedicated test server. Discord delivery is at least once: a crash after remote acceptance but before a durable receipt can duplicate a message; known extra cards are retained for cleanup.