Skip to content

feat(bridge): emit SwapBridge failure_phase, error_code, and hash presence - #9949

Open
Battambang wants to merge 7 commits into
feat/WPN-1877-failure-telemetry-schemafrom
feat/WPN-1877-emit-failure-telemetry
Open

feat(bridge): emit SwapBridge failure_phase, error_code, and hash presence#9949
Battambang wants to merge 7 commits into
feat/WPN-1877-failure-telemetry-schemafrom
feat/WPN-1877-emit-failure-telemetry

Conversation

@Battambang

@Battambang Battambang commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Explanation

Stacked on #9947 (schema + classifiers only). This PR emits the new Mixpanel fields so Failed is no longer a blended “on-chain” rate.

Event What we emit
Quotes Error failure_phase=quote, error_code from the thrown value
Failed (submit catch, before executeSubmitStrategy) broadcast, hashes false
Failed (EVM tx) broadcast or source_execution from source hash
Failed (status poll) destination_execution > source_execution > poll
Submitted both hash flags false (emit is still before submit strategy)
Completed hash flags from status src/dest hashes

Classification uses the code path and hash presence, never error_message.

bridge-status-controller owns submit/poll/EVM emit; bridge-controller owns Quotes Error and Failed property defaults.

After #9947 merges, retarget this PR to main.

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Low Risk
Changes are additive analytics properties on existing events; no transaction, auth, or submission logic is altered beyond what gets sent to metrics.

Overview
This PR turns on the SwapBridge failure telemetry fields introduced in #9947 by populating them on Unified SwapBridge analytics events, using code-path classifiers and tx hash presence—not error_message.

bridge-controller now sends failure_phase=quote and a classified error_code when quote fetch/stream fails, and applies defaults for Failed events from the client (failure_phase, error_code, source_hash_present, destination_hash_present). It exports promoteFailurePhase to bump phase when hashes imply execution progressed past broadcast/poll.

bridge-status-controller sets both hash flags to false on Submitted (still emitted pre-submit). Completed gets hash flags from bridge history status. Failed merges submit/status telemetry: submit errors use getSubmitFailureTelemetry; poll/history failures use getStatusFailureTelemetry plus promoteFailurePhase for combined hash history. EVM failed-tx metrics in getEVMTxPropertiesFromTransactionMeta add hash presence and broadcast vs source_execution phase.

Changelogs and test snapshots/assertions are updated for the new payload shape.

Reviewed by Cursor Bugbot for commit 264a606. Bugbot is set up for automated code reviews on this repo. Configure here.

@Battambang
Battambang marked this pull request as ready for review August 25, 2026 10:02
@Battambang
Battambang requested review from a team as code owners August 25, 2026 10:02
@Battambang
Battambang deployed to default-branch August 25, 2026 10:02 — with GitHub Actions Active

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0ac995f. Configure here.

Comment thread packages/bridge-status-controller/src/bridge-status-controller.ts
@cursor
cursor Bot requested review from infiniteflower and micaelae August 25, 2026 10:07
@Battambang

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@8.0.0-preview-0ac995fe6
@metamask-previews/accounts-controller@39.1.0-preview-0ac995fe6
@metamask-previews/address-book-controller@7.1.2-preview-0ac995fe6
@metamask-previews/ai-controllers@0.8.0-preview-0ac995fe6
@metamask-previews/analytics-controller@2.0.0-preview-0ac995fe6
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-0ac995fe6
@metamask-previews/announcement-controller@8.1.0-preview-0ac995fe6
@metamask-previews/app-metadata-controller@2.0.1-preview-0ac995fe6
@metamask-previews/approval-controller@9.0.2-preview-0ac995fe6
@metamask-previews/assets-controller@14.0.0-preview-0ac995fe6
@metamask-previews/assets-controllers@111.1.1-preview-0ac995fe6
@metamask-previews/authenticated-user-storage@3.0.1-preview-0ac995fe6
@metamask-previews/base-controller@9.1.0-preview-0ac995fe6
@metamask-previews/base-data-service@0.1.3-preview-0ac995fe6
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-0ac995fe6
@metamask-previews/bridge-controller@79.3.0-preview-0ac995fe6
@metamask-previews/bridge-status-controller@75.2.0-preview-0ac995fe6
@metamask-previews/build-utils@3.0.4-preview-0ac995fe6
@metamask-previews/chain-agnostic-permission@1.7.0-preview-0ac995fe6
@metamask-previews/chomp-api-service@4.0.0-preview-0ac995fe6
@metamask-previews/claims-controller@0.6.0-preview-0ac995fe6
@metamask-previews/client-controller@1.0.1-preview-0ac995fe6
@metamask-previews/client-utils@2.1.0-preview-0ac995fe6
@metamask-previews/compliance-controller@2.1.0-preview-0ac995fe6
@metamask-previews/composable-controller@12.0.1-preview-0ac995fe6
@metamask-previews/config-registry-controller@3.0.0-preview-0ac995fe6
@metamask-previews/connectivity-controller@0.3.0-preview-0ac995fe6
@metamask-previews/controller-utils@12.3.0-preview-0ac995fe6
@metamask-previews/core-backend@8.1.2-preview-0ac995fe6
@metamask-previews/delegation-controller@3.0.2-preview-0ac995fe6
@metamask-previews/earn-controller@12.2.5-preview-0ac995fe6
@metamask-previews/eip-5792-middleware@3.0.5-preview-0ac995fe6
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-0ac995fe6
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-0ac995fe6
@metamask-previews/eth-block-tracker@15.0.1-preview-0ac995fe6
@metamask-previews/eth-json-rpc-middleware@24.0.0-preview-0ac995fe6
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-0ac995fe6
@metamask-previews/foundryup@1.0.1-preview-0ac995fe6
@metamask-previews/gas-fee-controller@26.3.1-preview-0ac995fe6
@metamask-previews/gator-permissions-controller@5.0.1-preview-0ac995fe6
@metamask-previews/geolocation-controller@1.0.0-preview-0ac995fe6
@metamask-previews/java-tron-up@1.0.0-preview-0ac995fe6
@metamask-previews/json-rpc-engine@10.5.0-preview-0ac995fe6
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-0ac995fe6
@metamask-previews/keyring-controller@27.1.1-preview-0ac995fe6
@metamask-previews/kyc-controller@0.0.0-preview-0ac995fe6
@metamask-previews/local-node-utils@1.0.0-preview-0ac995fe6
@metamask-previews/logging-controller@9.0.0-preview-0ac995fe6
@metamask-previews/message-manager@14.1.2-preview-0ac995fe6
@metamask-previews/messenger@2.0.0-preview-0ac995fe6
@metamask-previews/messenger-cli@0.2.0-preview-0ac995fe6
@metamask-previews/money-account-api-data-service@0.4.0-preview-0ac995fe6
@metamask-previews/money-account-balance-service@2.4.1-preview-0ac995fe6
@metamask-previews/money-account-controller@1.0.0-preview-0ac995fe6
@metamask-previews/money-account-upgrade-controller@3.0.1-preview-0ac995fe6
@metamask-previews/money-account-utils@1.1.0-preview-0ac995fe6
@metamask-previews/multichain-account-service@13.0.2-preview-0ac995fe6
@metamask-previews/multichain-api-middleware@4.0.2-preview-0ac995fe6
@metamask-previews/multichain-network-controller@3.2.3-preview-0ac995fe6
@metamask-previews/multichain-transactions-controller@7.1.2-preview-0ac995fe6
@metamask-previews/name-controller@9.1.2-preview-0ac995fe6
@metamask-previews/network-connection-banner-controller@0.2.0-preview-0ac995fe6
@metamask-previews/network-controller@35.0.1-preview-0ac995fe6
@metamask-previews/network-enablement-controller@6.0.4-preview-0ac995fe6
@metamask-previews/notification-services-controller@26.0.1-preview-0ac995fe6
@metamask-previews/passkey-controller@3.0.0-preview-0ac995fe6
@metamask-previews/permission-controller@13.1.1-preview-0ac995fe6
@metamask-previews/permission-log-controller@5.1.0-preview-0ac995fe6
@metamask-previews/perps-controller@12.2.0-preview-0ac995fe6
@metamask-previews/phishing-controller@17.3.1-preview-0ac995fe6
@metamask-previews/platform-api-docs@0.0.0-preview-0ac995fe6
@metamask-previews/polling-controller@16.0.9-preview-0ac995fe6
@metamask-previews/preferences-controller@23.1.0-preview-0ac995fe6
@metamask-previews/profile-metrics-controller@4.0.3-preview-0ac995fe6
@metamask-previews/profile-sync-controller@29.0.0-preview-0ac995fe6
@metamask-previews/ramps-controller@20.0.0-preview-0ac995fe6
@metamask-previews/rate-limit-controller@7.0.1-preview-0ac995fe6
@metamask-previews/react-data-query@0.2.2-preview-0ac995fe6
@metamask-previews/remote-feature-flag-controller@6.0.0-preview-0ac995fe6
@metamask-previews/sample-controllers@5.0.4-preview-0ac995fe6
@metamask-previews/seedless-onboarding-controller@10.1.1-preview-0ac995fe6
@metamask-previews/selected-network-controller@26.1.6-preview-0ac995fe6
@metamask-previews/sentinel-api-service@1.0.0-preview-0ac995fe6
@metamask-previews/shield-controller@6.0.0-preview-0ac995fe6
@metamask-previews/signature-controller@39.2.9-preview-0ac995fe6
@metamask-previews/smart-transactions-controller@25.1.0-preview-0ac995fe6
@metamask-previews/snap-account-service@2.1.2-preview-0ac995fe6
@metamask-previews/social-controllers@2.7.1-preview-0ac995fe6
@metamask-previews/solana-test-validator-up@1.0.0-preview-0ac995fe6
@metamask-previews/stellar-quickstart-up@0.0.0-preview-0ac995fe6
@metamask-previews/storage-service@1.0.2-preview-0ac995fe6
@metamask-previews/subscription-controller@8.0.0-preview-0ac995fe6
@metamask-previews/transaction-controller@69.5.2-preview-0ac995fe6
@metamask-previews/transaction-pay-controller@26.4.1-preview-0ac995fe6
@metamask-previews/user-operation-controller@41.2.8-preview-0ac995fe6
@metamask-previews/wallet@12.0.1-preview-0ac995fe6
@metamask-previews/wallet-cli@0.0.0-preview-0ac995fe6

…classifiers

Add FailurePhase and SwapBridgeErrorCode plus helpers so a follow-up emit can classify failures from the code path and hash presence, without parsing error_message. No Mixpanel payloads change in this commit.
…ields

Quote fetch is pre-tx, so the changelog should not list source_hash_present or destination_hash_present on Quotes Error.
…sence

Wire Quotes Error, submit Failed, EVM Failed, poll Failed, Submitted, and Completed to the classifiers from #9947. Mixpanel can now split quote vs broadcast vs source vs dest vs poll without parsing error_message.
…ed hash presence

Promote broadcast, poll, or unknown to source_execution when history already has a source hash, so Mixpanel does not report a pre-broadcast failure after a source hash exists.
@Battambang
Battambang force-pushed the feat/WPN-1877-emit-failure-telemetry branch from 70a6371 to 18c3a0d Compare August 26, 2026 12:21
Quote fetch is pre-tx, so the emit changelog should not list source_hash_present or destination_hash_present on Quotes Error.
@Battambang

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@8.0.0-preview-264a60683
@metamask-previews/accounts-controller@39.1.1-preview-264a60683
@metamask-previews/address-book-controller@7.1.2-preview-264a60683
@metamask-previews/ai-controllers@0.8.0-preview-264a60683
@metamask-previews/analytics-controller@2.0.0-preview-264a60683
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-264a60683
@metamask-previews/announcement-controller@8.1.0-preview-264a60683
@metamask-previews/app-metadata-controller@2.0.1-preview-264a60683
@metamask-previews/approval-controller@9.0.2-preview-264a60683
@metamask-previews/assets-controller@14.0.2-preview-264a60683
@metamask-previews/assets-controllers@111.1.3-preview-264a60683
@metamask-previews/authenticated-user-storage@3.0.2-preview-264a60683
@metamask-previews/base-controller@9.1.0-preview-264a60683
@metamask-previews/base-data-service@1.0.0-preview-264a60683
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-264a60683
@metamask-previews/bridge-controller@79.3.1-preview-264a60683
@metamask-previews/bridge-status-controller@75.2.1-preview-264a60683
@metamask-previews/build-utils@3.0.4-preview-264a60683
@metamask-previews/chain-agnostic-permission@1.7.0-preview-264a60683
@metamask-previews/chomp-api-service@4.0.1-preview-264a60683
@metamask-previews/claims-controller@0.6.1-preview-264a60683
@metamask-previews/client-controller@1.0.1-preview-264a60683
@metamask-previews/client-utils@2.1.1-preview-264a60683
@metamask-previews/compliance-controller@2.1.0-preview-264a60683
@metamask-previews/composable-controller@12.0.1-preview-264a60683
@metamask-previews/config-registry-controller@3.1.0-preview-264a60683
@metamask-previews/connectivity-controller@0.3.0-preview-264a60683
@metamask-previews/controller-utils@12.3.0-preview-264a60683
@metamask-previews/core-backend@9.0.0-preview-264a60683
@metamask-previews/delegation-controller@3.0.2-preview-264a60683
@metamask-previews/earn-controller@12.2.6-preview-264a60683
@metamask-previews/eip-5792-middleware@3.0.5-preview-264a60683
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-264a60683
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-264a60683
@metamask-previews/eth-block-tracker@15.0.1-preview-264a60683
@metamask-previews/eth-json-rpc-middleware@24.0.1-preview-264a60683
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-264a60683
@metamask-previews/foundryup@1.0.1-preview-264a60683
@metamask-previews/gas-fee-controller@26.3.2-preview-264a60683
@metamask-previews/gator-permissions-controller@5.0.2-preview-264a60683
@metamask-previews/geolocation-controller@1.0.0-preview-264a60683
@metamask-previews/java-tron-up@1.0.0-preview-264a60683
@metamask-previews/json-rpc-engine@10.5.0-preview-264a60683
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-264a60683
@metamask-previews/keyring-controller@27.1.1-preview-264a60683
@metamask-previews/kyc-controller@0.0.0-preview-264a60683
@metamask-previews/local-node-utils@1.0.0-preview-264a60683
@metamask-previews/logging-controller@9.0.0-preview-264a60683
@metamask-previews/message-manager@14.1.2-preview-264a60683
@metamask-previews/messenger@2.0.0-preview-264a60683
@metamask-previews/messenger-cli@0.2.0-preview-264a60683
@metamask-previews/money-account-api-data-service@0.4.1-preview-264a60683
@metamask-previews/money-account-balance-service@2.4.3-preview-264a60683
@metamask-previews/money-account-controller@1.0.0-preview-264a60683
@metamask-previews/money-account-upgrade-controller@3.0.2-preview-264a60683
@metamask-previews/money-account-utils@1.1.0-preview-264a60683
@metamask-previews/multichain-account-service@13.0.2-preview-264a60683
@metamask-previews/multichain-api-middleware@4.0.3-preview-264a60683
@metamask-previews/multichain-network-controller@3.2.4-preview-264a60683
@metamask-previews/multichain-transactions-controller@7.1.2-preview-264a60683
@metamask-previews/name-controller@9.1.2-preview-264a60683
@metamask-previews/network-connection-banner-controller@0.2.1-preview-264a60683
@metamask-previews/network-controller@36.0.0-preview-264a60683
@metamask-previews/network-enablement-controller@6.0.5-preview-264a60683
@metamask-previews/notification-services-controller@26.0.1-preview-264a60683
@metamask-previews/passkey-controller@3.1.0-preview-264a60683
@metamask-previews/permission-controller@13.1.1-preview-264a60683
@metamask-previews/permission-log-controller@5.1.0-preview-264a60683
@metamask-previews/perps-controller@12.2.0-preview-264a60683
@metamask-previews/phishing-controller@17.4.0-preview-264a60683
@metamask-previews/platform-api-docs@0.0.0-preview-264a60683
@metamask-previews/polling-controller@16.0.9-preview-264a60683
@metamask-previews/preferences-controller@23.1.0-preview-264a60683
@metamask-previews/profile-metrics-controller@4.0.3-preview-264a60683
@metamask-previews/profile-sync-controller@29.0.0-preview-264a60683
@metamask-previews/ramps-controller@20.0.0-preview-264a60683
@metamask-previews/rate-limit-controller@7.0.1-preview-264a60683
@metamask-previews/react-data-query@1.0.0-preview-264a60683
@metamask-previews/remote-feature-flag-controller@6.0.0-preview-264a60683
@metamask-previews/sample-controllers@5.0.6-preview-264a60683
@metamask-previews/seedless-onboarding-controller@10.1.1-preview-264a60683
@metamask-previews/selected-network-controller@26.1.7-preview-264a60683
@metamask-previews/sentinel-api-service@1.0.1-preview-264a60683
@metamask-previews/shield-controller@6.0.1-preview-264a60683
@metamask-previews/signature-controller@39.2.10-preview-264a60683
@metamask-previews/smart-transactions-controller@25.1.1-preview-264a60683
@metamask-previews/snap-account-service@2.1.2-preview-264a60683
@metamask-previews/social-controllers@2.7.2-preview-264a60683
@metamask-previews/solana-test-validator-up@1.0.0-preview-264a60683
@metamask-previews/stellar-quickstart-up@0.0.0-preview-264a60683
@metamask-previews/storage-service@1.0.2-preview-264a60683
@metamask-previews/subscription-controller@8.0.1-preview-264a60683
@metamask-previews/transaction-controller@69.6.1-preview-264a60683
@metamask-previews/transaction-pay-controller@27.0.0-preview-264a60683
@metamask-previews/user-operation-controller@41.2.9-preview-264a60683
@metamask-previews/wallet@12.0.2-preview-264a60683
@metamask-previews/wallet-cli@0.0.0-preview-264a60683

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant