Skip to content

feat(confirmations): handle hardware wallet retries in footer#40836

Merged
montelaidev merged 7 commits intomainfrom
feat/hardware-wallet-confirmations-14
Mar 16, 2026
Merged

feat(confirmations): handle hardware wallet retries in footer#40836
montelaidev merged 7 commits intomainfrom
feat/hardware-wallet-confirmations-14

Conversation

@montelaidev
Copy link
Copy Markdown
Contributor

@montelaidev montelaidev commented Mar 12, 2026

Description

This is the final pr to enable the usage of hardware wallet error management. It manages the connection lifecycle, permission handling, error states, and provides a clean interface for UI components to interact with hardware wallets.

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Enable hardware wallet error management in send and dapp flow.

Related issues

Related to: https://consensyssoftware.atlassian.net/browse/MUL-1299?atlOrigin=eyJpIjoiZWZlYjE4M2NiOWVmNDk0N2I3MzA4MzMzZTg2M2U1YzYiLCJwIjoiaiJ9

Manual testing steps

  1. Using a ledger account.
  2. Go to https://metamask.github.io/test-dapp/
  3. Click on personal sign or any other signing methods
  4. Disconnect the device
  5. Click on continue.
  6. See Disconnection error
  7. Connect device and click on continue
  8. See Locked device error
  9. Unlock device, don't open eth app and click on continue
  10. See Eth app not open error
  11. Open Eth app and continue
  12. Sign on device.

Screenshots/Recordings

Before

After

Dapp interaction

Screen.Recording.2026-02-11.at.20.45.31.mov

Send

Screen.Recording.2026-02-11.at.10.00.29.AM.mov

Swap/Bridge

Screen.Recording.2026-02-11.at.10.01.58.AM.mov

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Medium Risk
Changes confirmation submit/cancel and navigation behavior for hardware-wallet accounts, including suppressing/handling error modals and retry flows. Medium risk due to impact on core approval/confirmation UX and device-specific edge cases.

Overview
Adds hardware-wallet retry/preflight handling to the confirmations footer. The footer now runs a hardware-wallet preflight before submitting where applicable, can show a dedicated Connect device button when the device isn’t ready, and wraps signature approval submission in hardware-wallet modal handling (including treating user rejected on device as a cancel-and-advance flow).

Improves alert and navigation interactions. The danger confirm modal now marks an unconfirmed danger alert as confirmed on submit, hardware-wallet error modals are suppressed while unconfirmed danger alerts are present, and confirmation pages no longer auto-navigate away while the hardware-wallet error modal is visible (to allow retries). useTransactionConfirm now returns success/failure and shows the hardware-wallet error modal only for retryable device errors.

Updates Storybook/test render helpers to include HardwareWalletErrorProvider, removes LedgerInfo from the confirm page, and expands unit/e2e coverage and baselines to reflect the new hardware-wallet flows.

Written by Cursor Bugbot for commit b1f95cb. This will update automatically on new commits. Configure here.

Preserve hardware wallet error semantics across the RPC boundary and centralize the retry, recovery, and preflight logic so confirmation flows can build on a reusable foundation.

Made-with: Cursor
Apply the shared hardware-wallet error layer to confirmation flows so retry, rejection, and danger-alert handling stay consistent without pulling the whole feature into one oversized PR.

Made-with: Cursor
@montelaidev montelaidev self-assigned this Mar 12, 2026
@montelaidev montelaidev requested a review from a team as a code owner March 12, 2026 09:09
@montelaidev montelaidev added the team-accounts-framework Accounts team label Mar 12, 2026
@github-actions
Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 12, 2026

✨ Files requiring CODEOWNER review ✨

@MetaMask/confirmations (11 files, +1022 -154)
  • 📁 ui/
    • 📁 pages/
      • 📁 confirmations/
        • 📁 components/
          • 📁 confirm/
            • 📁 footer/
              • 📄 footer.stories.tsx +6 -3
              • 📄 footer.test.tsx +590 -75
              • 📄 footer.tsx +162 -41
        • 📁 confirm/
          • 📁 stories/
            • 📄 utils.tsx +4 -1
            • 📄 confirm.tsx +0 -2
        • 📁 confirmation/
          • 📁 stories/
            • 📄 util.js +16 -13
            • 📄 confirmation.js +11 -3
        • 📁 context/
          • 📁 confirm/
            • 📄 index.tsx +19 -1
        • 📁 hooks/
          • 📁 alerts/
            • 📁 transactions/
              • 📄 useNonContractAddressAlerts.test.ts +42 -6
          • 📁 transactions/
            • 📄 useTransactionConfirm.test.ts +151 -5
            • 📄 useTransactionConfirm.ts +21 -4

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 12, 2026

Builds ready [93b950a]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account2802772832283283
total2802772832283283
Confirm Txconfirm_tx6017593660684660436068
total6017593660684660436068
Bridge User Actionsbridge_load_page22918327134262271
bridge_load_asset_picker25924127915274279
bridge_search_token7627587673762767
total1254121013033212661303
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup14451211182411614851673
load1199988151310312421381
domContentLoaded118998114769612351363
domInteractive3016118212682
firstPaint212651496242218374
backgroundConnect21719248529218240
firstReactRender19124752032
initialActions2010224
loadScripts99179112599410261160
setupStore1373461526
numNetworkReqs362793183083
Power User HomeuiStartup59102153182583173682314381
load13581150235416613861666
domContentLoaded13341137233415613631633
domInteractive38192133534124
firstPaint25086877121318449
backgroundConnect2256300148563023296011193
firstReactRender28195773138
initialActions105113
loadScripts1098927199714111241356
setupStore1676091732
numNetworkReqs21312635544225322
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2192192200219220
srpButtonToSrpForm97969819798
confirmSrpToPwForm23222302323
pwFormToMetricsScreen16161601616
metricsToWalletReadyScreen17161811718
doneButtonToHomeScreen64361168329660683
openAccountMenuToAccountListLoaded292629162933729332933
total394839463952339523952
Onboarding New WalletcreateWalletToSocialScreen2192182211220221
srpButtonToPwForm1181111308124130
createPwToRecoveryScreen999099
skipBackupToMetricsScreen42394534445
agreeButtonToOnboardingSuccess17171701717
doneButtonToAssetList5074965148513514
total90988992713910927
Asset DetailsassetClickToPriceChart605478105578
total605478105578
Solana Asset DetailsassetClickToPriceChart503468156268
total503468156268
Import Srp HomeloginToHomeScreen23712165275321524412753
openAccountMenuAfterLogin59456996569
homeAfterImportWithNewWallet2323226924075523392407
total4618456946433546434643
Send TransactionsopenSendPageFromHome34284783047
selectTokenToSendFormLoaded31293523235
reviewTransactionToConfirmationPage743642923115765923
total818702981117876981
SwapopenSwapPageFromHome99901066103106
fetchAndDisplaySwapQuotes268626832689226872689
total278927872790127902790
🌐 Dapp Page Load Benchmarks

Current Commit: 93b950a | Date: 3/12/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±38ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 734ms (±36ms) 🟢 | historical mean value: 742ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 81ms (±11ms) 🟢 | historical mean value: 84ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 38ms 1.02s 1.33s 1.07s 1.33s
domContentLoaded 734ms 36ms 713ms 1.01s 758ms 1.01s
firstPaint 81ms 11ms 64ms 172ms 88ms 172ms
firstContentfulPaint 81ms 11ms 64ms 172ms 88ms 172ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 5.18 MiB (100%)
  • ui: 8.3 MiB (100%)
  • common: 11.07 MiB (100%)

Base automatically changed from feat/hardware-wallet-shared-foundation-14 to main March 12, 2026 14:52
"createPasswordDetailsSocial": {
"message": "Losing this password means losing wallet access on all devices, $1",
"description": "$1 is the text 'MetaMask can't reset it.'"
"message": "Losing this password means losing wallet access on all devices, "
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Locale removes $1 placeholder breaking styled warning text

Medium Severity

The createPasswordDetailsSocial message had its $1 placeholder removed, but the consumer in create-password-form.tsx (line 115) still calls t('createPasswordDetailsSocial', [...]) with a React element for $1. Since $1 no longer exists in the message string, the colored warning text "MetaMask can't reset it." is silently dropped and never rendered. Users see only "Losing this password means losing wallet access on all devices, " with a trailing comma and no warning.

Additional Locations (1)
Fix in Cursor Fix in Web

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 12, 2026

Builds ready [4968d55]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account2772702835282283
total2772702835282283
Confirm Txconfirm_tx6078605761102160946110
total6078605761102160946110
Bridge User Actionsbridge_load_page26722432437293324
bridge_load_asset_picker21617326036258260
bridge_search_token75370878428782784
total1235115812955212661295
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup15021246194611515811664
load12611040169011313431431
domContentLoaded12521031166511113341408
domInteractive2917139222485
firstPaint1616947295228382
backgroundConnect22220329516226255
firstReactRender18124042025
initialActions106123
loadScripts1047830145910911281206
setupStore1373251521
numNetworkReqs362785173379
Power User HomeuiStartup61212281176912960646914319
load12951127208614813261584
domContentLoaded12761117207114513031568
domInteractive37201973033119
firstPaint214801215163269347
backgroundConnect2480386144522973358011022
firstReactRender26184852836
initialActions106112
loadScripts1056916179013610881324
setupStore16658101935
numNetworkReqs16910930144183272
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2202172232220223
srpButtonToSrpForm92919319393
confirmSrpToPwForm22222202222
pwFormToMetricsScreen15151601516
metricsToWalletReadyScreen16151601616
doneButtonToHomeScreen61058564425623644
openAccountMenuToAccountListLoaded293529332937129352937
total3903388439181439153918
Onboarding New WalletcreateWalletToSocialScreen2212172253222225
srpButtonToPwForm1101071132112113
createPwToRecoveryScreen989099
skipBackupToMetricsScreen39384013940
agreeButtonToOnboardingSuccess16151711717
doneButtonToAssetList49948152617499526
total89987792418907924
Asset DetailsassetClickToPriceChart82699298992
total82699298992
Solana Asset DetailsassetClickToPriceChart1243919353164193
total1243919353164193
Import Srp HomeloginToHomeScreen2338226024176524012417
openAccountMenuAfterLogin493662105662
homeAfterImportWithNewWallet2318223223915723392391
total4661462746852546854685
Send TransactionsopenSendPageFromHome442177246777
selectTokenToSendFormLoaded35244594245
reviewTransactionToConfirmationPage1083796149624711691496
total1169915160825612621608
SwapopenSwapPageFromHome752512841103128
fetchAndDisplaySwapQuotes269126832700726962700
total2766270828284827992828
🌐 Dapp Page Load Benchmarks

Current Commit: 4968d55 | Date: 3/12/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.06s (±48ms) 🟡 | historical mean value: 1.04s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 748ms (±44ms) 🟢 | historical mean value: 730ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 84ms (±13ms) 🟢 | historical mean value: 82ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.06s 48ms 1.03s 1.40s 1.10s 1.40s
domContentLoaded 748ms 44ms 718ms 1.05s 785ms 1.05s
firstPaint 84ms 13ms 64ms 176ms 104ms 176ms
firstContentfulPaint 84ms 13ms 64ms 176ms 104ms 176ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 58 Bytes (0%)
  • ui: -5.49 KiB (-0.06%)
  • common: 185 Bytes (0%)

matthewwalsh0
matthewwalsh0 previously approved these changes Mar 12, 2026
Copy link
Copy Markdown
Member

@matthewwalsh0 matthewwalsh0 Mar 12, 2026

Choose a reason for hiding this comment

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

Given all this new logic should only introduce risk to the hardware wallet flow, I'll approve this given it's gone through a few iterations also.

But due to the amount of new branches and complexity in the footer, I'd strongly recommend we encapsulate all the core confirm logic into useConfirmActions so it also returns a onSubmit as well as onCancel.

Then we could create a dedicated file for the DefaultFooter rendering, plus an entirely new component (and file) such as HardwareFooter that would encapsulate the entire hardware wallet footer lifecycle, but avoid duplication via also using useConfirmActions and useAlerts as needed.

If we need to influence the default confirmation logic directly, we can add generic optional props and callbacks to useConfirmationActions so it can be extended but still decoupled.

That way the two flows are hopefully more decoupled, and its far easier for the hardware flow to be maintained in isolation, without creating this one monolithic component that overlaps logic, rendering, and the hardware wallet lifecycle.

The other files seem much lighter and logical, mostly just avoiding navigating if we're showing the new modal.

Copy link
Copy Markdown

@cursor cursor bot left a comment

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.

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

}
});

await resolveApprovalWithHardwareWalletHandling();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Transaction state reset before hardware wallet retry completes

Low Severity

When onTransactionConfirm catches a retryable hardware wallet error and returns false, the finally block in footer's onSubmit still runs resetTransactionState(), clearing the custom nonce value in Redux. If the user then retries via the hardware wallet error modal, customNonceValue is empty, so the retry uses a default nonce instead of the user-specified one.

Additional Locations (1)
Fix in Cursor Fix in Web

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 13, 2026

Builds ready [f01bd45]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account2762672919283291
total2762672919283291
Confirm Txconfirm_tx603460266040560376040
total603460266040560376040
Bridge User Actionsbridge_load_page22521224010230240
bridge_load_asset_picker2562542571257257
bridge_search_token76375078112766781
total1266121613294313041329
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup14551261187710714771647
load1200100714899612321381
domContentLoaded1192100114649312251376
domInteractive2918102212592
firstPaint156691214128205302
backgroundConnect21419628514216241
firstReactRender21145762232
initialActions106124
loadScripts99580712499210231172
setupStore1464261723
numNetworkReqs393192164076
Power User HomeuiStartup5946223215239262768449368
load13311145180413013541644
domContentLoaded13111127176012413431626
domInteractive42212133537128
firstPaint21688496100284410
backgroundConnect214030111818245429756050
firstReactRender27185262937
initialActions105113
loadScripts1081915151911411061364
setupStore197213211935
numNetworkReqs1566830645163260
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2182172191218219
srpButtonToSrpForm92929319393
confirmSrpToPwForm22222202222
pwFormToMetricsScreen15151601516
metricsToWalletReadyScreen16161601616
doneButtonToHomeScreen59758361212612612
openAccountMenuToAccountListLoaded2908289429261229092926
total3876385338901538903890
Onboarding New WalletcreateWalletToSocialScreen2192172222221222
srpButtonToPwForm1081061101109110
createPwToRecoveryScreen1081321313
skipBackupToMetricsScreen39384013940
agreeButtonToOnboardingSuccess17161701717
doneButtonToAssetList634491737113731737
total1027883113011311301130
Asset DetailsassetClickToPriceChart835112528102125
total835112528102125
Solana Asset DetailsassetClickToPriceChart933914837110148
total933914837110148
Import Srp HomeloginToHomeScreen2201215722644022022264
openAccountMenuAfterLogin56525935959
homeAfterImportWithNewWallet1632462244889723702448
total40142932470272445864702
Send TransactionsopenSendPageFromHome49151073675107
selectTokenToSendFormLoaded29233453334
reviewTransactionToConfirmationPage91888096233962962
total102498910834210831083
SwapopenSwapPageFromHome12911115516130155
fetchAndDisplaySwapQuotes268926862694326902694
total2809277328422328242842
🌐 Dapp Page Load Benchmarks

Current Commit: f01bd45 | Date: 3/13/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±41ms) 🟡 | historical mean value: 1.06s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 731ms (±38ms) 🟢 | historical mean value: 745ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 80ms (±11ms) 🟢 | historical mean value: 85ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 41ms 1.01s 1.33s 1.08s 1.33s
domContentLoaded 731ms 38ms 704ms 1.00s 763ms 1.00s
firstPaint 80ms 11ms 64ms 176ms 88ms 176ms
firstContentfulPaint 80ms 11ms 64ms 176ms 88ms 176ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 58 Bytes (0%)
  • ui: -5.48 KiB (-0.06%)
  • common: 20 Bytes (0%)

@sonarqubecloud
Copy link
Copy Markdown

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 13, 2026

Builds ready [b1f95cb]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account29126432522305325
total29126432522305325
Confirm Txconfirm_tx6029600460652360306065
total6029600460652360306065
Bridge User Actionsbridge_load_page25420830837287308
bridge_load_asset_picker27125929113273291
bridge_search_token7687627755775775
total1294124513665013431366
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup14121199171210214411605
load116697714159712081357
domContentLoaded115997414099511901353
domInteractive2916115212485
firstPaint1526840777200280
backgroundConnect20719125513210237
firstReactRender20134352129
initialActions107124
loadScripts96877112099510061152
setupStore1365371524
numNetworkReqs393187163180
Power User HomeuiStartup5484227717445269463219542
load13311122324028913251644
domContentLoaded13101116322428313051560
domInteractive39201873234110
firstPaint225831567186272340
backgroundConnect207331114285228128715081
firstReactRender28186973136
initialActions108113
loadScripts1090920299827610801337
setupStore1585971728
numNetworkReqs1338027142133252
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2192172212221221
srpButtonToSrpForm94919529595
confirmSrpToPwForm22212202222
pwFormToMetricsScreen15151501515
metricsToWalletReadyScreen16151601616
doneButtonToHomeScreen63161667224619672
openAccountMenuToAccountListLoaded2914289329462229352946
total393139243936539363936
Onboarding New WalletcreateWalletToSocialScreen2232192263223226
srpButtonToPwForm1191131255123125
createPwToRecoveryScreen999099
skipBackupToMetricsScreen41404314243
agreeButtonToOnboardingSuccess18171911919
doneButtonToAssetList54548061951577619
total9658951039529901039
Asset DetailsassetClickToPriceChart865314736102147
total865314736102147
Solana Asset DetailsassetClickToPriceChart10910112310123123
total10910112310123123
Import Srp HomeloginToHomeScreen2292223523725022902372
openAccountMenuAfterLogin60576436464
homeAfterImportWithNewWallet2362234323751223652375
total4688464547564346954756
Send TransactionsopenSendPageFromHome29273223032
selectTokenToSendFormLoaded31214273442
reviewTransactionToConfirmationPage1178859142419413061424
total1245922147219213601472
SwapopenSwapPageFromHome1287916532159165
fetchAndDisplaySwapQuotes269226852700526922700
total2812276428553228142855
🌐 Dapp Page Load Benchmarks

Current Commit: b1f95cb | Date: 3/13/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.09s (±46ms) 🟡 | historical mean value: 1.06s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 748ms (±43ms) 🟢 | historical mean value: 745ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 87ms (±14ms) 🟢 | historical mean value: 85ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.09s 46ms 1.05s 1.40s 1.14s 1.40s
domContentLoaded 748ms 43ms 716ms 1.05s 788ms 1.05s
firstPaint 87ms 14ms 72ms 212ms 96ms 212ms
firstContentfulPaint 87ms 14ms 72ms 212ms 96ms 212ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 58 Bytes (0%)
  • ui: -5.48 KiB (-0.06%)
  • common: 20 Bytes (0%)

@montelaidev montelaidev enabled auto-merge March 16, 2026 10:20
@montelaidev montelaidev added this pull request to the merge queue Mar 16, 2026
Merged via the queue into main with commit 562d138 Mar 16, 2026
182 of 183 checks passed
@montelaidev montelaidev deleted the feat/hardware-wallet-confirmations-14 branch March 16, 2026 13:07
@github-actions github-actions bot locked and limited conversation to collaborators Mar 16, 2026
@metamaskbot metamaskbot added the release-13.24.0 Issue or pull request that will be included in release 13.24.0 label Mar 16, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.24.0 Issue or pull request that will be included in release 13.24.0 size-XL team-accounts-framework Accounts team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants