-
Notifications
You must be signed in to change notification settings - Fork 5.4k
release: 13.11.0 #38069
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
release: 13.11.0 #38069
+36,831
−9,960
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Version Bump After Release This PR bumps the main branch version from 13.10.0 to 13.11.0 after cutting the release branch. ### Why this is needed: - **Nightly builds**: Each nightly build needs to be one minor version ahead of the current release candidate - **Version conflicts**: Prevents conflicts between nightlies and release candidates - **Platform alignment**: Maintains version alignment between MetaMask mobile and extension - **Update systems**: Ensures nightlies are accepted by app stores and browser update systems ### What changed: - Version bumped from `13.10.0` to `13.11.0` - Platform: `extension` - Files updated by `set-semvar-version.sh` script ### Next steps: This PR should be **manually reviewed and merged by the release manager** to maintain proper version flow. ### Related: - Release version: 13.10.0 - Release branch: release/13.10.0 - Platform: extension - Test mode: false --- *This PR was automatically created by the `create-platform-release-pr.sh` script.* <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Bumps version in `package.json` from `13.10.0` to `13.11.0`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9fa8cd3. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>
This PR is to add sidepanel/popup icon to the DS component library. It also fixes an edge case with the Advanced Settings `Show extension in full-size view` button where users who have turned sidepanel on after enabling this will see sidepanel by default. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry:null ## **Related issues** Fixes: [https://consensyssoftware.atlassian.net/browse/CEUX-684](https://consensyssoftware.atlassian.net/browse/CEUX-684) ) ## **Manual testing steps** 1. In storybook, check sidepanel icon 2. Go to popup view or sidepanel and check the icon in global menu ## **Screenshots/Recordings** ### **Before** NA ### **After** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. -->   ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds popup/sidepanel icons to the design system, uses them for the view toggle in the global menu, and enables the full-size opening behavior from sidepanel too. > > - **Design System / Icons**: > - Add `app/images/icons/popup.svg` and `app/images/icons/sidepanel.svg`. > - Expose `IconName.Popup` and `IconName.Sidepanel` in `ui/components/component-library/icon/icon.types.ts`. > - **Global Menu** (`ui/components/multichain/global-menu/global-menu.tsx`): > - Replace viewport toggle to use `IconName.Popup`/`IconName.Sidepanel` and `isSidePanelDefault` logic; update metrics payload and close behavior. > - Add divider after notifications section. > - **Routing / Behavior** (`ui/pages/routes/routes.component.tsx`): > - Extend "Show extension in full-size view" to trigger when in `ENVIRONMENT_TYPE_SIDEPANEL` as well as popup. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 592283c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: ameliejyc <amelie.chan@gmail.com>
….10.0 (#37804) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This PR aims to add metrics for transaction shield. - `shield_result_response_latency_ms`: latency to receive response from Shield Upgrading `@metamask/shield-controller` from `^1.2.0` to ` ^2.1.0`, to support tracking latency of the requests. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37804?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: MetaMask/MetaMask-planning#6136 ## **Manual testing steps** 1. Start the app 2. Switch to Sepolia network 3. Mint some USDC on sepolia on [this smart contract](https://sepolia.etherscan.io/token/0xaa6e4b8e84a2c0957c8a8efb12a64d2f06700142#writeContract) (at least 80 for annual plan, 96 for monthly). 4. Import the token manually in the assets list 5. Navigate to Settings > Transaction Shield 6. Select pay with crypto, and Continue 7. The confirmation screen should appear and new shield properties should be added to the transaction/signature events 8. Check Segment ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds shield_result_response_latency_ms to transaction/signature event fragments, introduces getCoverageMetrics selector, updates tests, and bumps @metamask/shield-controller to ^2.1.0. > > - **Alerts/Telemetry**: > - `useShieldCoverageAlert` now records `shield_result_response_latency_ms` (from `metrics.latency` or `"N/A"`) in event fragments. > - Pulls metrics via new selector `getCoverageMetrics`; refines `getShieldResult` default handling and effect dependencies. > - **Selectors**: > - Add types `CoverageStatusResult`, `CoverageMetrics` and helper `getFirstCoverageResult`. > - Implement `getCoverageMetrics` and refactor `getCoverageStatus` to use shared helper. > - **Tests**: > - Extend `useShieldCoverageAlert.test` to assert latency propagation for tx/signature paths and various statuses. > - Add comprehensive tests for `getCoverageMetrics` and edge cases in `getCoverageStatus`. > - **Dependencies**: > - Upgrade `@metamask/shield-controller` to `^2.1.0`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit bab9a95. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR adds new events tracking for the segment ~ - `Shield Eligibility Cohort Assigned` - `Shield Eligibility Cohort Timeout` - `Shield Priority Support Clicked` [](https://codespaces.new/MetaMask/metamask-extension/pull/37822?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: added new events for shield eligibility and priority support ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds new Shield metrics events (cohort assigned/timeout, priority support clicked, error state clicked), integrates tracking in UI flows and cohort logic, and updates tests/mocks accordingly. > > - **Metrics/Events**: > - Add `MetaMetricsEventName` entries: `ShieldPrioritySupportClicked`, `ShieldEligibilityCohortAssigned`, `ShieldEligibilityCohortTimeout`, `ShieldErrorStateClicked` in `shared/constants/metametrics.ts`. > - Introduce `ShieldErrorStateActionClickedEnum`, `ShieldErrorStateLocationEnum`, `ShieldErrorStateViewEnum` in `shared/constants/subscriptions.ts`. > - **Hooks/Utils**: > - Extend `useSubscriptionMetrics` with `captureShieldEligibilityCohortEvent`, `captureCommonExistingShieldSubscriptionEvents`, `captureShieldErrorStateClickedEvent`; add supporting types and formatter `formatCaptureShieldEligibilityCohortEventsProps`. > - Refactor usages to common capture method for billing history opened and payment method updated in `useSubscription.ts`. > - **Cohort Flow**: > - In `ui/contexts/shield/shield-subscription.tsx`, include `modalType` in cohort assignment; emit `ShieldEligibilityCohortAssigned` and `ShieldEligibilityCohortTimeout` events. > - **UI Integrations**: > - `ui/components/multichain/global-menu/global-menu.tsx`: track `ShieldPrioritySupportClicked` when support is clicked with priority tag. > - `ui/components/app/toast-master/toast-master.js`: `ShieldPausedToast` logs `ShieldErrorStateClicked` on CTA/dismiss with payment metadata. > - `ui/pages/settings/transaction-shield-tab/transaction-shield.tsx`: on membership error actions, log `ShieldErrorStateClicked` (banner/Settings context). > - **Tests/Mocks**: > - Update E2E mocks and tests to include `modalType` and structured eligibility payload in `mock-e2e.js` and `shield-entry-modal.spec.ts`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 33278b3. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…into metrics should...` (#37834) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** There are 2 Sentry requests happening: one transaction type and one event type, that match with our mock. The test is flaky as sometimes we get the transaction instead the event one (those can happen in any order), and it doesn't contain the expected properties (ie exception). With this change, we make sure we are always grabbing the event type one, so then the properties we assert is always there <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37834?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Filter mocked Sentry requests to event envelopes ("{"type":"event"}") to stabilize flaky Sentry error tests. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c5a6372. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…37749) ode is enabled <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37749?quickstart=1) This PR adds the total available fiat value when user switch to fiat mode. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Change available value text to total fiat value when fiat mode is enabled ## **Related issues** Fixes: MetaMask/MetaMask-planning#6203 ## **Manual testing steps** 1. Go to send 2. Switching from fiat to token should also change the available balance text ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="409" height="621" alt="Screenshot 2025-11-12 at 15 21 29" src="https://github.com/user-attachments/assets/b9326698-326c-4359-bdbc-f7536bd35e69" /> ### **After** <img width="408" height="618" alt="Screenshot 2025-11-12 at 15 16 11" src="https://github.com/user-attachments/assets/f8d2a54e-dbd0-42ad-a8c6-5eff22004ef5" /> ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [X] I’ve included tests if applicable - [X] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Displays available balance in fiat when fiat mode is on (and token otherwise), updating tests accordingly. > > - **Send Amount UI (`ui/pages/.../amount.tsx`)**: > - Add memoized `balanceDisplayValue` to render available balance in fiat (`getFiatDisplayValue(...) available`) when in fiat mode, and token balance otherwise. > - Replace inline balance text with `balanceDisplayValue`; utilizes `t('available')`. > - **Tests (`amount.test.tsx`)**: > - Update assertions to expect `"$ 20.00 available"` in fiat mode and `"10.023 NEU available"` by default. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit dd0b4b5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> In this PR, Updated Transaction Shield UI Bugs. Jira Link: - https://consensyssoftware.atlassian.net/browse/SUBS-759 - https://consensyssoftware.atlassian.net/browse/SUBS-760 - https://consensyssoftware.atlassian.net/browse/SUBS-765 - https://consensyssoftware.atlassian.net/browse/SUBS-754 - https://consensyssoftware.atlassian.net/browse/SUBS-756 Figma Link: - https://www.figma.com/design/HTAO1SrmixV4ppv7qIvLoa/Metamask-Transaction-Shield?node-id=14740-209891&m=dev - https://www.figma.com/design/agblIyQvyxSoqGMjQDAPBK/Transaction-Shield?node-id=277-14&p=f&t=apuyU6XgEuw694p7-0 [](https://codespaces.new/MetaMask/metamask-extension/pull/37722?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Used feature flag to only show this change when sidepanel flag is enabled for chrome. Updated button on wallet creation successful page from 'Done' to 'Open wallet'. ## **Related issues** Fixes: ## **Manual testing steps** 1. Open extension 2. Create wallet and validate Transaction Shield from settings. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> <img width="382" height="938" alt="Screenshot 2025-11-14 at 3 58 50 PM" src="https://github.com/user-attachments/assets/b709385d-4179-49da-8c85-56d591594761" /> ![Uploading Screenshot 2025-11-14 at 4.45.54 PM.png…]() ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Updates Transaction Shield copy and i18n, improves responsive layouts and theming, replaces the entry modal animation with a static image, and renames the billing action to “Manage billing.” > > - **Frontend UI/Styles**: > - **Shield Entry Modal (`ui/components/app/shield-entry-modal/`)**: Replace animation with static image (`transaction-shield-modal.png`), add responsive title/spacing, full-height body, and new `shield-entry-modal-sheild-image` styles. > - **Settings Layout (`ui/pages/settings/index.scss`)**: On small screens, modules use flex column with scroll; similar adjustments in sidepanel selected view. > - **Transaction Shield Tab (`ui/pages/settings/transaction-shield-tab/`)**: Add light-theme inactive background (`--shield-membership-inactive-light`) with new modifier class; remove forced dark theme; minor styling. > - **Claims Form (`claims-form.tsx`)**: Add padding/margins, keep only section headers (remove descriptive subtext), retain dividers. > - **Shield Plan (`ui/pages/shield-plan/`)**: Tweak plan card padding/gaps and responsive price font; move spacing from props to CSS. > - **Colors (`ui/css/utilities/colors.scss`)**: Add `--shield-membership-inactive-light`. > - **i18n (`app/_locales/en*/messages.json`)**: > - Update copy: `shieldTxDetails1Title` to "Up to $10,000 transaction protection"; billing action to `"Manage billing"`. > - Remove unused: `shieldClaimIncidentDetailsDescription`, `shieldClaimPersonalDetailsDescription`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1b81792. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR updates - Shield confirmation msgs, copywriting - add marketing deep link for shield - Fixes confirmation release blocker introduced by side panel changes [here](#37778) - Enables shield flag in all builds - Fixes paused state subscription release blocker [](https://codespaces.new/MetaMask/metamask-extension/pull/37829?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: update Shield confirmation msgs ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> <img width="489" height="949" alt="Screenshot 2025-11-14 at 2 10 26 PM" src="https://github.com/user-attachments/assets/14db38bc-5f9f-440e-8ff7-c5b9533764f1" /> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Updates Shield copy and paused-state UX, refactors metrics with common props and new restart tracking, adds deep link to show entry modal, classifies approve tx, and enables the Shield feature flag. > > - **Shield UX copy & i18n**: > - Replace “membership” with “plan” across Shield strings; refine coverage/renewal/tooltips; split paused-state messages/actions by payment type; minor text tweaks (e.g., Save 17%). > - **Metrics**: > - Add `getShieldCommonTrackingProps`; update all Shield capture hooks to use it. > - Replace `ShieldErrorStateClicked` with `ShieldMembershipErrorStateClicked` and adjust event emissions. > - Move subscription restart request tracking from background to UI (`captureShieldSubscriptionRestartRequestEvent`). > - **Deep links & Settings**: > - Add `SHIELD_QUERY_PARAMS.showShieldEntryModal`; when true, route to `SETTINGS_ROUTE` and show entry modal or redirect to Shield tab if subscribed. > - Export `SETTINGS_ROUTE` via deep-links. > - **Toasts & Banners**: > - Paused toast now shows type-specific descriptions/actions (card/crypto/unexpected). > - Settings Shield banner uses new paused/ending-soon copy and actions; adds "Contact support" flow with user identifiers. > - **Transactions**: > - Classify `TransactionType.shieldSubscriptionApprove` in metrics. > - Crypto approval flow now navigates to confirmation after approval creation is detected. > - **Builds**: > - Enable `METAMASK_SHIELD_ENABLED: 'true'` in config. > - **Misc UI**: > - Use `color={TextColor.textAlternative}` for billing label; small refactors/imports. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 8069be4. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: hieu-w <maestrokoder@gmail.com> Co-authored-by: Nguyen Anh Tu <tunguyenanh@tunatech.org> Co-authored-by: Chaitanya Potti <chaitanya.potti@gmail.com>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37743?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix error message when trying to import an SRP with an account that is already imported via private key ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MUL-491 ## **Manual testing steps** 1. Import private key account 2. Import SRP that includes this private key account 3. Verify that the error message "The account you are trying to import is a duplicate." is shown ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <img width="925" height="903" alt="image" src="https://github.com/user-attachments/assets/77abb409-feac-4ba4-92bd-387d122928dd" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Show a specific error when an imported SRP contains a duplicate account, with new i18n strings and tests validating behavior. > > - **Import SRP UI (`ui/pages/multi-srp/import-srp/import-srp.tsx`)**: > - Handle duplicate-account import errors explicitly by mapping controller error to `t('srpImportDuplicateAccountError')`; fall back to `srpAlreadyImportedError`. > - **i18n (`app/_locales/en/messages.json`, `app/_locales/en_GB/messages.json`)**: > - Add `srpImportDuplicateAccountError` message: "The account you are trying to import is a duplicate." > - **Tests (`ui/pages/multi-srp/import-srp/import-srp.test.tsx`)**: > - Add error-handling tests covering duplicate-account vs generic import errors; ensure button disables, no navigation, and no toast on error. > - Minor import updates to support test setup. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7adca32. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Feature flags were accidentally added to the onboarding fixture recently. This wasn't a problem for E2E tests because we refresh feature flags as part of initialization (which itself was a bug), but when we tried to fix this in #37552 it revealed this fixture problem. The onboarding fixture has been updated to not include any feature flags. Individual E2E tests can set the features they need using a manifest override or a feature flag API mock. [](https://codespaces.new/MetaMask/metamask-extension/pull/37857?quickstart=1) ## **Changelog** CHANGELOG entry: null ## **Related issues** Unblocks #37552 ## **Manual testing steps** N/A ## **Screenshots/Recordings** N/A ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Strips `RemoteFeatureFlagController` data from `test/e2e/fixtures/onboarding-fixture.json`, setting `cacheTimestamp` to `0` and `remoteFeatureFlags` to `{}`. > > - **E2E Fixture** (`test/e2e/fixtures/onboarding-fixture.json`): > - Remove all `RemoteFeatureFlagController.remoteFeatureFlags` content. > - Set `RemoteFeatureFlagController.cacheTimestamp` to `0`. > - Keep other onboarding defaults unchanged. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f70ce81. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** UI fixesin DAPP Shield functionlity. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: MetaMask/MetaMask-planning#6252 Fixes: MetaMask/MetaMask-planning#6256 ## **Manual testing steps** 1. Trigger swap from test-dapp 2. Check dapp swap banner displayed for UI fixes ## **Screenshots/Recordings** <img width="392" height="600" alt="Screenshot 2025-11-13 at 5 25 31 PM" src="https://github.com/user-attachments/assets/fff43ee7-7e72-4b65-a220-2e8ea1e85760" /> ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [X] I’ve included tests if applicable - [X] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Introduces quote-swap simulation details with savings highlight and tooltip, updates the Dapp Swap banner to use Market rate, and hides origin/recipient rows for quoted swaps with corresponding i18n and tests. > > - **Confirmations UI**: > - Add `QuoteSwapSimulationDetails` showing outgoing/incoming balance changes and a highlighted "Get $X more" savings banner; includes header tooltip via `bestQuoteTooltip`. > - Dapp Swap banner: switch selector label from `metamaskRate` to `marketRate`; remove auto-switch logic; wire selected quote to transaction update; minor styling import. > - Hide `Origin` and `Recipient` rows, and batch approve simulation, for quoted swaps; add guard when `txParams` missing. > - Extend simulation header to accept custom `titleTooltip`. > - **i18n**: > - Add `bestQuoteTooltip`, `getDollarMore`, `marketRate`; remove `metamaskRate` in en/en_GB. > - **Tests**: > - Update banner tests to expect "Market rate" and interactions; add tests for quote-swap details savings banner; update transaction details to skip rows for quoted swaps. > - **Misc**: > - Handle native-address source asset in quote simulation. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit d60faaf. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> - Fix payment method select card if no crypto available between plan change - Fix copy text in confirmation tooltip and start now button [](https://codespaces.new/MetaMask/metamask-extension/pull/37860?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Makes the Shield confirm CTA show “Start free trial” unless the user has already trialed, fixes the monthly tooltip copy order, and defaults payment method to card when crypto isn’t selected/available; updates locales and tests. > > - **Confirmations UI**: > - **Footer CTA**: For `TransactionType.shieldSubscriptionApprove`, choose `t('shieldStartNowCTAWithTrial')` unless the user has already trialed `PRODUCT_TYPES.SHIELD`, then use `t('shieldStartNowCTA')`. > - Integrates `useUserSubscriptions` to read `trialedProducts`. > - **Shield Plan**: > - **Payment Method Default**: Ensure selection defaults to `card` when no crypto token is available/selected or last used method is `card`. > - **Confirm Info (Shield Subscription Approve)**: > - **Monthly Tooltip**: Swap params to display per-month first, then total in `shieldEstimatedChangesMonthlyTooltipText`. > - **i18n**: > - Add `shieldStartNowCTAWithTrial` message in `app/_locales/en/messages.json` and `en_GB/messages.json`. > - **Tests**: > - Update `footer.test.tsx` to mock `useUserSubscriptions` and reflect CTA logic. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit bbee7cc. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Fix the edit-account-modal circular dependency [](https://codespaces.new/MetaMask/metamask-extension/pull/37765?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Removes a circular dependency by updating `AccountListItem` import in `edit-accounts-modal` and reflecting the change in `development/circular-deps.jsonc`. > > - **Circular dependencies**: > - Removed cycle involving `ui/components/multichain/edit-accounts-modal/*` from `development/circular-deps.jsonc`. > - **Multichain UI**: > - `ui/components/multichain/edit-accounts-modal/edit-accounts-modal.tsx`: Update `AccountListItem` import from `..` to `../account-list-item` to break the cycle. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 77c4c44. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…n token selector (#37469) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR introduces a new Token Insights modal in the Bridge flow to provide users with detailed information about tokens directly within the bridge interface to help users verify the correct token they want to swap into without taking them out of the swaps flow. [](https://codespaces.new/MetaMask/metamask-extension/pull/37469?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Added a new Token Insights modal to enhance token verification accessibility. ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> <img width="402" height="599" alt="Screenshot 2025-11-05 at 9 39 23 AM" src="https://github.com/user-attachments/assets/f7e82a3c-a9bc-43cf-8147-02bba7a9bcd9" /> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds a Token Insights modal (price, % change, volume, FDV market cap, contract address copy) and opens it via an info icon on destination tokens; includes data hook, utils, tests, and locale strings. > > - **UI/Bridge**: > - **TokenListItem (`ui/components/multichain/token-list-item/token-list-item.tsx`)**: Adds info icon to destination tokens that opens `TokenInsightsModal`; updates aria label and styles (`index.scss`). > - **TokenInsightsModal (`ui/pages/bridge/token-insights-modal/`)**: New modal showing formatted `price`, `percentChange` (with arrows/color), `volume`, `marketCapFDV`, and optional contract address copy; tracks open/copy events and handles outside-click close. > - **Data/Logic**: > - **Hook (`ui/hooks/useTokenInsightsData.ts`)**: New hook sourcing market data from cache (EVM) or API (non‑EVM), computes fiat values, detects native tokens; comprehensive tests added (`useTokenInsightsData.test.ts`). > - **Utils (`ui/helpers/utils/token-insights.ts`)**: Helpers for native address detection, percentage/currency formatting, checksummed/CAIP address formatting, price change color, and address display rules. > - **i18n**: > - Add locale keys in `app/_locales/en*/messages.json`: `insights`, `marketCapFDV`, `percentChange`, `viewTokenDetails`, `volume`. > - **Tests**: > - Modal tests (`token-insights-modal.test.tsx`) covering rendering, behavior, and tracking. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 8fb74db. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR adds UI changes to the deep link page. - Added new page design and image for `Error 404 - Page not found`. - Updated layout and components to better match [design specified on Figma](https://www.figma.com/design/kCPHsjZYCQXUlN4Ta67FhT/Deeplinking-warning-page?node-id=0-1&p=f&t=e3M6zHNCHMsMpHGZ-0). [](https://codespaces.new/MetaMask/metamask-extension/pull/37872?quickstart=1) Figma design reference: https://www.figma.com/design/kCPHsjZYCQXUlN4Ta67FhT/Deeplinking-warning-page?node-id=0-1&p=f&t=e3M6zHNCHMsMpHGZ-0 ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Fixed deep link page design inconsistencies ## **Related issues** Fixes: MetaMask/MetaMask-planning#5213 ## **Manual testing steps** 1. Try using different variations of deep link that would trigger different pages and messages. 2. Make sure that interstitial page is displayed correctly. **Deep links that can be used for testing** - Error 404: Page not found: http://link.metamask.io/whatever - Swaps page without signature (interstitial page is displayed): https://link.metamask.io/swap - Swaps page with signature (no regular interstitial): https://link.metamask.io/swap?sig=AWqgclBcX7wDKXJ-ZbABoRU2pzVS7xQAA5UsIuWEzKVchvqyYos_w0At4zR33_0wJdFAypIJM4VgboiU3ghhUQ ## **Screenshots/Recordings** ### **Before** <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 53 24" src="https://github.com/user-attachments/assets/3b12ee3c-5df3-45d2-a209-5f2c157739a0" /> <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 53 33" src="https://github.com/user-attachments/assets/b59ae59e-5b4f-4099-bdd6-f5c69015922c" /> <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 53 40" src="https://github.com/user-attachments/assets/c3405c80-f40f-4c12-a723-84631e908f14" /> ### **After** Flask build, dark theme: <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 33 13" src="https://github.com/user-attachments/assets/214c8f94-332c-4a4a-a315-a99a37d0272d" /> <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 33 24" src="https://github.com/user-attachments/assets/c0c3a5bc-9f95-4f84-aaa3-d0a387da7e87" /> <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 33 40" src="https://github.com/user-attachments/assets/a12aa0b6-0f9f-456d-851e-f63a906d073f" /> Normal build, light theme: <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 35 29" src="https://github.com/user-attachments/assets/b73b8a89-ea21-4c46-8644-2e2093adffa3" /> <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 35 38" src="https://github.com/user-attachments/assets/c2a0043f-047d-4557-9677-7d5b274efbaa" /> <img width="1918" height="1005" alt="Screenshot 2025-11-14 at 19 35 46" src="https://github.com/user-attachments/assets/3845c13d-5db9-4dd4-901a-d9080668f312" /> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Redesigns the deep link interstitial with centered layout/styling, adds explicit 404 state with illustration, and refines state handling across parsing and effects. > > - **Frontend (Deep Link UI)**: > - **Page redesign**: Rebuilds `ui/pages/deep-link/deep-link.tsx` layout using `Container` + `Box` with centered flex, background, border, padding, and full-width sections; updates title to bold and adjusts spacing; renders description via `Text` with alternative color. > - **404 handling**: Introduces `pageNotFoundError` state; updates `set404` and `updateStateFromUrl` to set/reset it; conditionally displays a new 404 image; adds `alt` text; updates effect deps to include setter. > - **CTA and controls**: Makes primary `Button` full-width; wraps signed-route checkbox/label in a full-width styled row; preserves redirect/verification logic. > - **Design tokens**: Adds usage of `AlignItems`, `JustifyContent`, `BorderColor`, `TextColor` and related constants. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1f74349. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37893?quickstart=1) Fix format currency fraction digit display in shield settings screen billing details for card payment, show 2 fraction digit if has fraction and 0 if no fraction ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix fraction digit display in shield settings billing details for card payment ## **Related issues** Fixes: ## **Manual testing steps** 1. subscribe to shield with card 2. go to shield settings screen ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Updates fiat charge formatting in Shield settings to show up to 2 decimal places (0 if none). > > - **Frontend** > - **Settings › Transaction Shield**: Update `formatCurrency` in `ui/pages/settings/transaction-shield-tab/transaction-shield.tsx` to use `{ maximumFractionDigits: 2, minimumFractionDigits: 0 }` for fiat charges, enabling up to 2 decimals while showing 0 when not needed. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4df991a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** https://consensyssoftware.atlassian.net/browse/RWDS-268 Part 2 of #36827 pertaining to metametrics changes <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37873?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Expose a MetaMetrics traits update API and add rewards-specific traits, events, and category constants. > > - **MetaMetrics**: > - Expose `updateMetaMetricsTraits` via `getApi()` in `app/scripts/metamask-controller.js` (binds to `metaMetricsController.updateTraits`). > - Extend rewards-related tracking in `shared/constants/metametrics.ts`: > - Add user traits: `has_rewards_opted_in`, `rewards_referred`, `rewards_referral_code_used` and corresponding `MetaMetricsUserTrait` enums. > - Add event names for rewards flows: `REWARDS_OPT_IN_*` and `REWARDS_ACCOUNT_LINKING_*`. > - Add `Rewards` to `MetaMetricsEventCategory`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9773647. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** https://consensyssoftware.atlassian.net/browse/RWDS-268 Part 1 of #36827 pertaining to rewards controller and data services changes <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37871?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Refactors Rewards opt-in to accept provided accounts, renames/fixes geo metadata API, moves shared DTOs, defaults Rewards API base URL to PRD, and surfaces new rewards methods via MetaMaskController. > > - **Rewards Controller**: > - Refactor `optIn` to `optIn(accounts, referralCode?)`; iterates provided accounts, links remaining on success, throws if all fail. > - Rename `getGeoRewardsMetadata` → `getRewardsGeoMetadata`; cache behavior preserved. > - Register updated handlers (`getRewardsGeoMetadata`, `linkAccountsToSubscriptionCandidate`, etc.) and expose new utilities (`getCandidateSubscriptionId`, `isOptInSupported`, `getOptInStatus`). > - Internal opt-in flow simplified; consistent state updates and token storage. > - **Shared Types**: > - Move `RewardsGeoMetadata`, `OptInStatusInputDto`, `OptInStatusDto`, `OptOutDto` to `shared/types/rewards` and update imports; remove duplicates from controller types. > - **Rewards Data Service**: > - Default API base URL to `PRD` (including non-prod) and update tests/URLs. > - Add `REWARDS_ERROR_MESSAGES`; use as default messages for `AuthorizationFailedError` and `SeasonNotFoundError`. > - Minor response handling tweaks and new endpoints wired (`getSeasonMetadata`, `getDiscoverSeasons`). > - **MetaMask Controller (UI API)**: > - Expose rewards APIs: `validateRewardsReferralCode`, `getRewardsGeoMetadata`, `rewardsOptIn`, `rewardsIsOptInSupported`, `rewardsGetOptInStatus`, `rewardsLinkAccountsToSubscriptionCandidate`. > - Misc fixes: rename `subscriptionService` → `SubscriptionService`; update Shield subscription metrics capture; add `updateMetaMetricsTraits`. > - **Tests**: > - Update and expand unit tests for new opt-in signature/behavior, geo method rename, PRD URLs, and new data service endpoints. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fc7f860. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…#37881) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR updates the error handler for the social login `MaxKeyChainLengthExceeded` error where user login to very old device and could not recover the device local vault. In such cases, we gonna force users to re-login (restart the onboarding again) so that user will be able to get required Authentication data from Social login authentication to perform further operations (such as Token Refresh, Change Password, Import SRPs/PrivKeys etc...) [](https://codespaces.new/MetaMask/metamask-extension/pull/37881?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fixed error handling for social login `MaxKeyChainLengthExceeded` error ## **Related issues** Fixes: ## **Manual testing steps** 1. Login to the wallet with social login in one device (browser) - A. 2. Complete the onboarding and lock the wallet. 3. Login to another device (browser) (B) than 20 times. 5. In device A, unlock the wallet with the latest password. 6. You should see the `MaxKeyChainLengthExceeded` error and should be able to reset wallet. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Show a Connections Removed modal on MaxKeyChainLengthExceeded during social login unlock to prompt wallet reset, refactoring flow to avoid app state and making unlock sync return void. > > - **Backend**: > - Change `syncPasswordAndUnlockWallet(password)` to return `void` and simplify flow (remove `isPasswordSynced` branches and special recovery path). > - Preserve error mapping; UI now reacts to `MaxKeyChainLengthExceeded`. > - **UI**: > - Update `ConnectionsRemovedModal` to accept `onConfirm` and add test IDs; render from `unlock-page` when `MaxKeyChainLengthExceeded` occurs to trigger `resetWallet`. > - Remove modal usage from `home` and related story. > - **State/Redux**: > - Remove `showConnectionsRemovedModal` state, selector, and actions; update `tryUnlockMetamask` callback (no boolean result). > - **Tests (E2E/Unit)**: > - Add login-page helpers for the new modal; update unlock/reset wallet specs to assert modal and reset via it; remove legacy reset flow; adjust controller tests to not expect boolean return. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c3528cd. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Update Shield copy and error messages for consistency <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37869?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Standardizes Shield-related localization by using “MetaMask Transaction Shield,” lowercases the file uploader label, and refines plan detail wording in both en and en_GB. > > - **i18n (en, en_GB)**: > - **Branding consistency**: Replace `Transaction Shield` with `MetaMask Transaction Shield` across coverage alert messages (high risk, chain not supported, paused, potential risks, signature not supported, tx type not supported, unknown). > - **Copy tweaks**: > - Update `shieldClaimFileUploader` label to `Image upload` (casing). > - Revise `shieldTxDetails1Description` to “Secures assets on covered transactions.” > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit d29d69b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR reverts #37778 as it introduced regression on sidepanel. [](https://codespaces.new/MetaMask/metamask-extension/pull/37898?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/CEUX-701?atlOrigin=eyJpIjoiZmQ4YjE2NmQ5M2E1NGQ0ZWE3MDA4NzEwZTNhMDZiNDkiLCJwIjoiaiJ9 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Makes confirmation actions async, routes addEthereumChain to home and otherwise advances to next confirmation, removes sidepanel-specific redirect, and updates tests accordingly. > > - **Confirmations UI**: > - `ui/pages/confirmations/components/confirm/footer/footer.tsx` > - Make `onSubmit`/`handleFooterCancel` async and await actions. > - For `wallet_addEthereumChain`, navigate to `DEFAULT_ROUTE` after confirm/cancel; otherwise call `navigateNext(currentConfirmation.id)`. > - Await `onTransactionConfirm`/`resolvePendingApproval` and reset transaction state. > - **Confirm Actions**: > - `ui/pages/confirmations/hooks/useConfirmActions.ts` > - Make `rejectApproval` and `onCancel` async; await `rejectPendingApproval` and then reset state. > - **Confirm Transaction Flow**: > - `ui/pages/confirmations/confirm-transaction/confirm-transaction.component.js` > - Remove sidepanel-related redirect logic and associated hooks/selectors. > - **Tests**: > - `ui/pages/confirmations/components/confirm/footer/footer.test.tsx` > - Mock thunk-aware `dispatch`; add async `waitFor` assertions. > - Mock `useAddEthereumChain`, `useTransactionConfirm`, and navigation; update expectations to use the current confirmation id. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 37a537b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Map recently added error code in Shield claim service API. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37865?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Maps newly added Shield Claims API error codes to UI error handling and adds corresponding English locales. > > - **Shield Claims UI**: > - Update `ui/pages/settings/transaction-shield-tab/types.ts` to include new `SUBMIT_CLAIM_ERROR_CODES` (`E106`, `E205`, `E401–E404`). > - Map new codes in `ui/pages/settings/transaction-shield-tab/claims-form/constants.ts` `ERROR_MESSAGE_MAP`, including affected fields for chain/tx-related errors. > - **Localization**: > - Add i18n strings in `app/_locales/en/messages.json` and `app/_locales/en_GB/messages.json` for new errors: `shieldClaimChainNotSupported`, `shieldClaimSignatureCoverageNotCovered`, `shieldClaimTransactionNotFound`, `shieldClaimTransactionNotFromWalletAddress`, `shieldClaimTransactionNotSuccessful`, `shieldClaimWalletOwnershipValidationFailed`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 94392da. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Bump Tron to `1.8.0` https://github.com/MetaMask/snap-tron-wallet/releases/tag/v1.8.0 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37901?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Update dependency @metamask/tron-wallet-snap from ^1.7.1 to ^1.8.0 in package.json and yarn.lock. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 76147f2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Adds "Daily resources" section to TRX token details <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37894?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: feat: Adds "Daily resources" section to TRX token details ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <img width="399" height="600" alt="Screenshot 2025-11-17 at 10 26 19" src="https://github.com/user-attachments/assets/fbc21bf7-5f31-410f-b6d1-f708c292c7b5" /> <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds a Tron Daily Resources section to the TRX asset page showing energy and bandwidth with coverage estimates, plus updates Tron icons and supporting selectors/hooks. > > - **UI (TRX Asset Page)**: > - Add `TronDailyResources` section with circular indicators for `energy` and `bandwidth`, showing counts and coverage estimates; rendered for Tron native assets in `asset-page.tsx`. > - **Hook & Logic**: > - Introduce `useTronResources` to derive current/max Tron resources from balances and assets; refactor `isTronResource` check in `shared/lib/asset-utils.ts`. > - **i18n**: > - Add locale strings for Tron resources (`tronDailyResources`, `tronEnergy`, `tronBandwidth`, coverage descriptions) in `app/_locales/en*/messages.json`. > - **Assets/Network Icons**: > - Update Tron image assets and mappings (`tron-logo.png`, `tron-logo-testnet.svg`) in multichain/network constants and network image maps. > - **Tests**: > - Add comprehensive tests for `TronDailyResources` UI and `useTronResources` hook. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 111a2b1. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Updates bitcoin to 1.6.0, which updates from and to fields in the confirmation modal. [](https://codespaces.new/MetaMask/metamask-extension/pull/37906?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Added `from` and `to` to send confirmation view ([#563](MetaMask/snap-bitcoin-wallet#563)) ## **Related issues** Fixes: [Send - Bitcoin - When I perform a Bitcoin Send I can't see the Recipient address in the last confirmation screen, and missleading Account field #37845](#37845) ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Bumps `@metamask/bitcoin-wallet-snap` from ^1.5.0 to ^1.6.0. > > - **Dependencies**: > - Update `@metamask/bitcoin-wallet-snap` to `^1.6.0` in `package.json` and `yarn.lock`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6243b2c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This fixes an issue where sorting assets by "Token name" was not working because the sort key was being passed as 'title' instead of 'name'. The `sortAssetsWithPriority` function in `ui/components/app/assets/util/sortAssetsWithPriority.ts` has been updated to treat 'title' as an alias for 'name'. A new test case has been added to `ui/components/app/assets/util/sortAssetsWithPriority.test.ts` to verify that sorting by 'title' works as expected. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37900?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix token asset sorting ## **Related issues** Fixes: #37687 ## **Manual testing steps** See issue ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** https://www.loom.com/share/5b74edf6097b455bae03ab2d9d2eee3c ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is generating a summary for commit 1dca2d6. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** https://consensyssoftware.atlassian.net/browse/RWDS-268 Part 3 of #36827 pertaining to ui state and selectors <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37875?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Introduces a new `rewards` UI state slice with selectors and background-thunk actions, integrates it into the root reducer, and adds comprehensive tests plus minor config updates. > > - **State (Redux)**: > - Add `ui/ducks/rewards/` slice (`index.ts`) defining onboarding, geo, subscription/season status, feature flag, and error toast state with actions (e.g., `setOnboardingModalOpen`, `setRewardsGeoMetadata`, `setSeasonStatus`). > - Integrate reducer in `ui/ducks/index.js` as `rewards`. > - **Selectors**: > - Add `ui/ducks/rewards/selectors.ts` (e.g., `selectRewardsEnabled` with version-gated flag support, and basic state selectors). > - **Async actions (background thunks)**: > - Extend `ui/store/actions.ts` with rewards-related thunks: `validateRewardsReferralCode`, `getRewardsGeoMetadata`, `rewardsOptIn`, `rewardsIsOptInSupported`, `rewardsGetOptInStatus`, `rewardsLinkAccountsToSubscriptionCandidate`, `getRewardsSeasonStatus`, `getRewardsSeasonMetadata`, `estimateRewardsPoints`. > - Add `updateMetaMetricsTraits` helper. > - **Tests**: > - Add unit tests for rewards reducer/actions (`ui/ducks/rewards/index.test.ts`), selectors (`ui/ducks/rewards/selectors.test.ts`), and store actions (`ui/store/actions.test.js`). > - **Configs/fixtures**: > - Update E2E UI state snapshot to include `rewards`. > - Tweak circular deps tracking and `.madgerc` allowed globs. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit bd27c29. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Fixes the settings title alignment [](https://codespaces.new/MetaMask/metamask-extension/pull/37879?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix: settings title alignment ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/CEUX-702 ## **Manual testing steps** 1. Open the Settings page 2. Observe title horizontal alignment ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Removes the 250px max-width from the Settings header title, allowing it to align/flow correctly on small screens. > > - **UI/CSS**: > - Remove `max-width: 250px` from `settings-page__header__title-container__title` under small-screen layout in `ui/pages/settings/index.scss` to allow proper title alignment/flow. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 35eeac2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Fixes these issues when window height is short: - Double scrollbar - Cut off background [](https://codespaces.new/MetaMask/metamask-extension/pull/37876?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix: ui issues with short window height ## **Related issues** Fixes: ## **Manual testing steps** Create a new wallet flow ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** | Double Scrollbar | Cropped Background | |---|---| |<img width="613" height="489" alt="image" src="https://github.com/user-attachments/assets/1d480a1b-7bdb-42f6-b22b-504a475f2f47" />|<img width="602" height="412" alt="image" src="https://github.com/user-attachments/assets/b4816752-500c-4b81-9c35-92ba28bf05bb" />| |---|---| ### **After** | | | |---|---| |<img width="600" height="408" alt="image" src="https://github.com/user-attachments/assets/f01d602c-fa52-442b-a5d1-6fc0e429228f" />|<img width="600" height="409" alt="image" src="https://github.com/user-attachments/assets/cf1c6329-ab40-4483-a45f-2116c561df36" />| <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Remove `html` min-height and `.main-container-wrapper` min-height to prevent double scrollbars and background cropping on short viewports. > > - **CSS/Layout**: > - `ui/css/base-styles.scss`: Remove `html` `min-height: 500px`. > - `ui/css/itcss/components/newui-sections.scss`: Remove `.main-container-wrapper` `min-height: 0`. > - **Result**: Avoids double scrollbars and cropped background on short window heights. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit b705258. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Fix BTC tests <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37908?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Generalizes BTC Esplora e2e mocks to match dynamic Infura project IDs and simplifies mock setup calls. > > - **Tests (BTC e2e mocks)**: > - Replace hardcoded `INFURA_BTC_MAINNET_URL` with `INFURA_BTC_MAINNET_URL_PATTERN` and regex-based `.forGet` matchers for Infura endpoints. > - Update `mockBlocks`, `mockFundingTx`, `mockAnyTxs`, and `mockBlockHeight` to use dynamic URL patterns; remove/optionalize `network` arg where not needed. > - Simplify `mockInitialFullScan` to use new helpers and mock the genesis block via `mockBlockHeight`. > - Keep fee estimates via `ESPLORA_URL` unchanged. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f4dbb11. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…issue (#38367) - fix: update package to avoid yarn audit issue (#38348) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Resolve `node-forge` to ^1.3.2 in order to pass the audit. DO NOT MERGE unless someone with security privileges clears it. [](https://codespaces.new/MetaMask/metamask-extension/pull/38348?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds a safe click helper for the backup reminder and updates affected e2e tests to use it post-onboarding. > > - **E2E**: > - **Page Object (`test/e2e/page-objects/pages/home/homepage.ts`)**: Add `clickBackupRemindMeLaterButtonSafe` using `driver.clickElementSafe`. > - **Tests**: > - Update `test/e2e/tests/account/incremental-security.spec.ts` to use `clickBackupRemindMeLaterButtonSafe` after onboarding. > - Update `test/e2e/tests/settings/change-password.spec.ts` to use `clickBackupRemindMeLaterButtonSafe` after onboarding. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 17f5b4a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Mark Stacey <mark.stacey@consensys.net> [54fd624](54fd624) Co-authored-by: Bernardo Garces Chapero <bernardo.chapero@consensys.net> Co-authored-by: Mark Stacey <mark.stacey@consensys.net>
Collaborator
Author
Builds ready [f907593]
UI Startup Metrics (1245 ± 100 ms)
|
7 tasks
…tch requests (#38372) - fix: cp-13.11.0 dapp swap request for batch requests (#38190) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Fix issue with dapp swap comparison metrics and UI not working for batched requests. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: MetaMask/metamask-mobile#23186 ## **Manual testing steps** 1. Submit batched swap request 2. Check that metrics and UI work as expected ## **Screenshots/Recordings** TODO ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [X] I’ve included tests if applicable - [X] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Enables dapp swap comparison for batch requests by refactoring middleware/utilities, enriching stored data and metrics, wiring into controller flows, and updating UI (including controlled Tabs) and tests. > > - **Backend/Controllers**: > - Refactor dapp-swap flow: move quote fetching/parse/validation to `dapp-swap-util#getQuotesForConfirmation`; simplify middleware; call from `wallet_sendCalls` with `securityAlertId`. > - Extend `AppStateController` `dappSwapComparisonData` to include `commands`, `error`, and `tokenAddresses` and expose typed getters/setters. > - Update selector `selectDappSwapComparisonData` to return new fields. > - **Swap Parsing & Validation**: > - Export `parseTransactionData`; add `checkValidSingleOrBatchTransaction` to validate nested batch txs; update `getDataFromSwap` signature to use parsed command bytes/inputs. > - **Metrics & Error Handling**: > - Capture commands and detailed errors on failures (middleware/UI); ensure loading state doesn’t override middleware failures; refine metric events and timing. > - **UI**: > - Tabs: add controlled `activeTabKey` prop and sync via `useEffect`. > - Dapp Swap Banner/Info: use controlled tabs, handle batch txs, pass commands/errors, and only show quoted data when selected; adjust submit capture. > - Transaction confirm: integrate swap update on confirm; cleanup comparison data on completion. > - **Tests**: > - Add/adjust unit tests for middleware errors/validation, parsing/validation utils, tabs controlled mode, hooks, and selectors. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 20c02ed. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> [47b743e](47b743e) Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>
Collaborator
Author
Builds ready [f92f305]
UI Startup Metrics (1237 ± 95 ms)
|
7 tasks
gauthierpetetin
approved these changes
Nov 28, 2025
chloeYue
approved these changes
Nov 28, 2025
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
QA Passed
release-13.11.0
Issue or pull request that will be included in release 13.11.0
team-bots
Bot team (for MetaMask Bot, Runway Bot, etc.)
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🚀 v13.11.0 Testing & Release Quality Process
Hi Team,
As part of our new MetaMask Release Quality Process, here’s a quick overview of the key processes, testing strategies, and milestones to ensure a smooth and high-quality deployment.
📋 Key Processes
Testing Strategy
Conduct regression and exploratory testing for your functional areas, including automated and manual tests for critical workflows.
Focus on exploratory testing across the wallet, prioritize high-impact areas, and triage any Sentry errors found during testing.
Validate new functionalities and provide feedback to support release monitoring.
GitHub Signoff
Issue Resolution
Cherry-Picking Criteria
🗓️ Timeline and Milestones
✅ Signoff Checklist
Each team is responsible for signing off via GitHub. Use the checkbox below to track signoff completion:
Team sign-off checklist
This process is a major step forward in ensuring release stability and quality. Let’s stay aligned and make this release a success! 🚀
Feel free to reach out if you have questions or need clarification.
Many thanks in advance
Reference
Note
Cursor Bugbot is generating a summary for commit f92f305. Configure here.