Retry edited offline issue captures with a fresh idempotency key #283

Closed
opened 2026-08-08 08:56:47 +00:00 by timmy · 0 comments
Owner

Problem

Editing a queued offline issue after a permanent validation failure preserves its original idempotency key. Because the server fingerprints the request payload, delivering the corrected payload with that consumed key returns a conflict instead of creating the issue.

Evidence

frontend/issue-outbox.js keeps operationId in update(), and the current edit/retry test explicitly expects the same key before and after changing the title. Historical issue/PR titles and recent commits contain offline capture, durable admission, and retry idempotency work, but no payload-edit key rotation.

Acceptance criteria

  • Changing any delivery field rotates the operation ID while preserving the stable outbox item ID.
  • Saving an identical payload preserves the operation ID.
  • Attention/error state clears after an edit.
  • Durable edits reconcile the replacement before Background Sync registration.
  • Foreground retry delivers the edited payload with the replacement key exactly once.

Implementation must follow strict RED-GREEN TDD.

## Problem Editing a queued offline issue after a permanent validation failure preserves its original idempotency key. Because the server fingerprints the request payload, delivering the corrected payload with that consumed key returns a conflict instead of creating the issue. ## Evidence frontend/issue-outbox.js keeps operationId in update(), and the current edit/retry test explicitly expects the same key before and after changing the title. Historical issue/PR titles and recent commits contain offline capture, durable admission, and retry idempotency work, but no payload-edit key rotation. ## Acceptance criteria - Changing any delivery field rotates the operation ID while preserving the stable outbox item ID. - Saving an identical payload preserves the operation ID. - Attention/error state clears after an edit. - Durable edits reconcile the replacement before Background Sync registration. - Foreground retry delivers the edited payload with the replacement key exactly once. Implementation must follow strict RED-GREEN TDD.
timmy self-assigned this 2026-08-08 08:56:47 +00:00
timmy closed this issue 2026-08-08 09:01:36 +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#283
No description provided.