Problem
Refreshes, wallet events, and provider timeouts can leave users unable to tell whether a vault mutation succeeded or whether retrying is safe.
Objective
Deliver a production-quality improvement to transaction status components and mutation hooks that creates measurable value for correctness, security, reliability, performance, or maintainability.
Implementation scope
- Model submitted, confirming, confirmed, failed, and unknown states from the backend/contract status.
- Persist a safe correlation reference across refreshes and disable unsafe duplicate submissions.
- Provide recovery actions for retryable versus terminal failures.
Acceptance criteria
- A refresh preserves the correct status without automatically duplicating a transaction.
- Retry actions are idempotent and explain when a new signature is required.
- Unknown provider outcomes are surfaced honestly and recoverable.
Required validation
- State-machine unit tests, mocked provider failures, refresh tests, and duplicate-click end-to-end 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 on this issue and explain design tradeoffs.
- Include test evidence, compatibility impact, and migration or rollout notes where relevant.
- 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
Refreshes, wallet events, and provider timeouts can leave users unable to tell whether a vault mutation succeeded or whether retrying is safe.
Objective
Deliver a production-quality improvement to transaction status components and mutation hooks that creates measurable value for correctness, security, reliability, performance, or maintainability.
Implementation scope
Acceptance criteria
Required validation
PR quality bar
Out of scope