Problem
A double click, refresh, or provider timeout can submit the same transfer more than once.
Objective
Deliver a production-quality improvement to send form, mutation state, and navigation recovery that creates measurable value for correctness, security, reliability, performance, or maintainability.
Implementation scope
- Bind a canonical request fingerprint and idempotency key to the exact payload; persist only a safe operation reference; reconcile after navigation.
Acceptance criteria
- One user intent creates at most one transfer; refresh restores status; conflicting edited payload requires a new intent.
Required validation
- Double-click, refresh, timeout, navigation, and changed-payload integration tests.
- Existing tests and CI remain passing.
- Add regression coverage for the original failure mode.
- Do not weaken, delete, or skip unrelated tests to obtain a green build.
PR quality bar
- Keep the PR focused and explain design tradeoffs, compatibility impact, and test evidence.
- Avoid typo-only, documentation-only, cosmetic-only, or unrelated refactor submissions.
Out of scope
- Broad rewrites not required by the acceptance criteria.
- Changes to unrelated services, contracts, or user flows.
Problem
A double click, refresh, or provider timeout can submit the same transfer more than once.
Objective
Deliver a production-quality improvement to send form, mutation state, and navigation recovery that creates measurable value for correctness, security, reliability, performance, or maintainability.
Implementation scope
Acceptance criteria
Required validation
PR quality bar
Out of scope