Skip to content

fix(smoke-web): don't report post-execute canonicalization lag as execution failure - #431

Open
haseebrabbani wants to merge 1 commit into
mainfrom
smoke-web-post-execute-canonicalization
Open

fix(smoke-web): don't report post-execute canonicalization lag as execution failure#431
haseebrabbani wants to merge 1 commit into
mainfrom
smoke-web-post-execute-canonicalization

Conversation

@haseebrabbani

Copy link
Copy Markdown
Collaborator

Problem

After executeProposal submits successfully, GUARDIAN keeps reporting the just-executed proposal's delta until canonicalization observes the on-chain commitment. During that window, syncProposals re-validates the delta against the local account state the execution already advanced and throws Invalid proposal: metadata does not match tx_summary. The smoke-web executeProposal command runs refreshMultisigState right after submit, so this transient surfaced as a failure of the whole command even though the transaction had landed — every create/sign/execute canary against a deployed GUARDIAN reported a spurious execute failure.

The Rust client never sees this because list_proposals pre-filters proposals with nonce <= account.nonce() before binding verification; the TS client intentionally has no such filter (see the nonce-convention rationale in #405), so the tolerance belongs in the app.

Fix

  • After a successful submit, retry refreshMultisigState through the canonicalization window (5 attempts, 2s apart) when the failure matches one of the two known transient signatures: metadata does not match tx_summary or the nonce-overwrite (is not greater than local nonce).
  • If the window is exceeded, return an executed-but-pending snapshot with lastError describing the state instead of throwing — the command reports what actually happened (the transaction submitted).
  • Any error outside those two signatures still fails the command as before.

…cution failure

GUARDIAN keeps reporting a just-executed proposal's delta until it observes
the on-chain commitment. In that window syncProposals re-validates the delta
against the local account state the execution already advanced and throws, so
the refresh inside the executeProposal command failed the whole command even
though the transaction had submitted. Retry the refresh through the
canonicalization window, and surface an executed-but-pending snapshot instead
of throwing if it still has not converged; any error outside the two known
transient signatures still fails the command.
@haseebrabbani
haseebrabbani requested a review from zeljkoX as a code owner August 24, 2026 19:29
@coderabbitai

coderabbitai Bot commented Aug 24, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e470a84e-09de-40ec-b758-f0024a472a15


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants