Make mobile issue capture idempotent across retries #177

Closed
opened 2026-08-07 07:48:30 +00:00 by rockachopa · 0 comments
Member

Evidence

Mobile issue capture keeps its draft after retryable failures and invites retry, while the backend imposes a five-second deadline around issue creation. If Gitea commits before a delayed/lost response, retrying can create duplicate assigned issues. Current single-flight protection only covers simultaneous clicks in one loaded page; no historical issue, PR, or recent commit covers idempotent creation.

User impact

A persisted operation key and server-side bounded result registry make issue capture safe across ambiguous timeouts, repeated taps, and page reloads without duplicate Gitea issues.

Acceptance

  • Same key and payload coalesce concurrent requests into one upstream create and replay the confirmed result.
  • Same key with a changed payload is rejected before mutation.
  • Creation continues through caller timeout/cancellation so a retry can recover the confirmed issue.
  • Mobile draft persists its operation key through ambiguous failure/reload and clears it only after confirmed success.
  • Registry retention is TTL- and size-bounded.
  • Focused behavioral tests and the full suite pass.
## Evidence Mobile issue capture keeps its draft after retryable failures and invites retry, while the backend imposes a five-second deadline around issue creation. If Gitea commits before a delayed/lost response, retrying can create duplicate assigned issues. Current single-flight protection only covers simultaneous clicks in one loaded page; no historical issue, PR, or recent commit covers idempotent creation. ## User impact A persisted operation key and server-side bounded result registry make issue capture safe across ambiguous timeouts, repeated taps, and page reloads without duplicate Gitea issues. ## Acceptance - Same key and payload coalesce concurrent requests into one upstream create and replay the confirmed result. - Same key with a changed payload is rejected before mutation. - Creation continues through caller timeout/cancellation so a retry can recover the confirmed issue. - Mobile draft persists its operation key through ambiguous failure/reload and clears it only after confirmed success. - Registry retention is TTL- and size-bounded. - Focused behavioral tests and the full suite pass.
timmy was assigned by rockachopa 2026-08-07 07:48:30 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#177
No description provided.