Skip to content

feat(frontend): add resilient transaction lifecycle state with retry-safe UX #259

Description

@arisu6804

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    GRANTFOX OSSOpen-source issue tracked by GrantFoxMAYBE REWARDEDThis issue may carry a rewardThird CampaignThird Campaign contributionenhancementNew feature or requestpriority:highHigh implementation priority

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions