Most SDK failures are safe stops: the recovery data is malformed, the proving files are untrusted, the note is spent, or the fee changed while proving. Keep the current input, explain the failed check, and let the user correct it.

Reconcile before retrying

An RPC or wallet timeout can hide whether submission reached the chain. Query the original hash when you have one, then check the exact deposit commitment or withdrawal nullifier before marking the operation complete.

Submission uncertain

The starter has no automatic resend path. That keeps a slow RPC response from turning into a duplicate value-moving request.

Expected progress

Use a small set of states that match what the integration is actually doing:
  1. Checking proving files
  2. Preparing proof
  3. Recovery saved
  4. Ready to submit
  5. Submission uncertain
  6. Confirmed or reverted
For errors emitted by each protocol stage, see Failure boundaries.