Execute proposal flow#511
Conversation
…e interceptor to guardian
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 46577df. Configure here.
|
|
||
| print('executing proposal id: ${widget.proposal.id}'); | ||
| print('msig: ${widget.msig.accountId}'); | ||
| print('signer: ${signer.accountId}'); |
There was a problem hiding this comment.
Debug print left in execute sheet
Low Severity
The execute confirmation sheet calls print for fee loading and submission with proposal id, multisig address, and signer id. That mirrors temporary debugging, not the debugPrint pattern used on the approve sheet, and can leak account identifiers in production logs.
Reviewed by Cursor Bugbot for commit 46577df. Configure here.
|
|
||
| removePendingMultisigExecution(ref, pending.id); | ||
| await reconcileIndexedExecution(ref, msig, pending); | ||
| return true; |
There was a problem hiding this comment.
Execution poll ignores extrinsic outcome
Medium Severity
Execution polling clears pending state when the proposal’s indexer status is executed, without checking that this user’s submit extrinsic succeeded. If another signer executes first, the local pending row is dropped even when the user’s extrinsic later fails on-chain, so no submit-failure feedback and a wasted fee are possible.
Reviewed by Cursor Bugbot for commit 46577df. Configure here.
|
Review complete. Here's my assessment of PR #511 — Execute proposal flow. OverviewAdds the end-to-end multisig execute path: confirm sheet → Should fix before merge1. Leftover debug 2. polkadart:
output_dir: lib/generated
chains:
- planck: wss://a1-planck.quantus.cat
+ planck: ws://127.0.0.1:9944This looks like local-dev config that leaked in — the 3. Exact duplicate test group — Worth discussing4. Silent drop of a failed execution (Bugbot's medium finding is valid) — in 5. Fee-estimate failure swallowed — 6. DRY: execute sheet is a ~190-line near-copy of the approve sheet — 7. Deploy-order dependency on the indexer — Minor
What looks good
Items 1–3 are quick fixes I'd block on; item 4 is a judgment call but at minimum deserves a log/toast given the "no silent failures" principle. |
…Network/quantus-apps into beast/execute-proposal-flow
n13
left a comment
There was a problem hiding this comment.
Review (agent-assisted, diffed against multisig-implementation)
Verdict: GTG — no blockers found; two minor, non-blocking notes.
Minor
-
Logout doesn't clear pending execution state —
mobile-app/lib/services/logout_service.dartclearspendingTransactionsProviderandpendingMultisigCreationsProvider, but not the new in-memorypendingMultisigExecutionsProvider(the same gap already exists for the pending proposals/approvals providers, so this extends a pre-existing pattern). After logout + re-login in the same process, stale "Executing…" rows could survive and execution pollers tied to the old session keep running. -
Possible false "executed by another signer" toast — in
_tryResolveExecutionTimeout(multisig_execution_polling_service.dart), when the proposal status isexecutedbutsearchExecutedByExtrinsicHashreturns null, theexecutedByOthertoast is always shown. That branch is also reachable when this user's own execution succeeded but account-history indexing is still lagging past the poll timeout — the code comment acknowledges "most likely". Consider softening the copy or rechecking once more before asserting someone else executed it.
Checked and fine
MultisigApprovalToastListenerexhaustively handles allMultisigExecutionToastKindvalues includingexecutedByOther.- Execute submit path (
executeProposal/_submitExecuteBackground) cleans up pending state and surfaces a toast on submit failure; optimistic state + indexer polling mirrors the existing approve flow.


Summary
Note
Medium Risk
Touches on-chain submission and balance-affecting execute flows with new polling paths; multisig creation preflight no longer reserves deposit, which can change whether creation is allowed vs the old app.
Overview
Adds an end-to-end multisig execute path after approvals hit threshold: confirm sheet (fee estimate + local auth),
TransactionSubmissionService.executeProposalwith optimistic pending state, indexer polling/reconciliation, and UI on proposal detail, activity rows, and error toasts—mirroring the existing approve flow.Proposal detail & lists now branch on status: Execute when
isReadyToExecute, Approve otherwise, with pending “Executing…” states; terminal proposals show an AT timestamp fromupdated_atinstead of expiry. Open proposals sort byupdated_at; live proposal resolution checks past proposals too.SDK / chain metadata (spec 129) is regenerated: multisig creation deposit and dissolve APIs are dropped from models, preflight, and activity detail; creation cost is pallet + network fees only.
MultisigServicegains build/estimate/submit formultisig.execute. GraphQL andMultisigProposaluseupdated_atfor ordering and activity timestamps. Generated pallets also pick up reversible-transfers guardian renames and other runtime doc/type updates bundled in the regen.i18n adds execute-related strings (EN/ID) and tightens insufficient-balance copy for multisig creation.
Reviewed by Cursor Bugbot for commit 46577df. Configure here.