# V13-FE-034 — Idempotency retry contract ## Source / Assumption / Unknown / Decision Required - Source: `frontend/src/shared/commands/idempotency.ts`, `frontend/src/shared/crud/useOptimisticCommand.ts`, and their characterization tests. - Assumption: one `createRequest()` represents one user intent; every retry reuses that immutable request envelope. - Unknown: each production command's server-side deduplication store, response replay contract, retention, and endpoint coverage. - Decision Required: BE/QA approval of per-command idempotency persistence and duplicate-side-effect evidence. ## Existing contract verified - UUID key is generated once per intent. - `run()` sends the same `Idempotency-Key` on repeated execution. - Optional `If-Match` is forwarded for optimistic concurrency. - 409/412 sets the conflict state and pending state is cleared. - Concurrent execution is rejected while a command is pending. ## Evidence - `pnpm test -- src/shared/crud/tests/useOptimisticCommand.spec.ts`: 1 file / 2 tests passed in the FE regression run. - Full FE regression: 49 files / 126 tests passed; typecheck passed. ## Outstanding This proves the client boundary only. Server-side deduplication, replayed response equivalence, retention, and per-endpoint integration evidence remain outstanding. This Slice is `IN_PROGRESS`.