Skip to content

Conversation

@metamaskbot
Copy link
Collaborator

@metamaskbot metamaskbot commented Nov 20, 2025

🚀 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

  • Developer Teams:
    Conduct regression and exploratory testing for your functional areas, including automated and manual tests for critical workflows.
  • QA Team:
    Focus on exploratory testing across the wallet, prioritize high-impact areas, and triage any Sentry errors found during testing.
  • Customer Success Team:
    Validate new functionalities and provide feedback to support release monitoring.

GitHub Signoff

  • Each team must sign off on the Release Candidate (RC) via GitHub by the end of the validation timeline (Tuesday EOD PT).
  • Ensure all tests outlined in the Testing Plan are executed, and any identified issues are addressed.

Issue Resolution

  • Resolve all Release Blockers (Sev0 and Sev1) by Tuesday EOD PT.
  • For unresolved blockers, PRs may be reverted, or feature flags disabled to maintain release quality and timelines.

Cherry-Picking Criteria

  • Only critical fixes meeting outlined criteria will be cherry-picked.
  • Developers must ensure these fixes are thoroughly reviewed, tested, and merged by Tuesday EOD PT.

🗓️ Timeline and Milestones

  1. Today (Friday): Begin Release Candidate validation.
  2. Tuesday EOD PT: Finalize RC with all fixes and cherry-picks.
  3. Wednesday: Buffer day for final checks.
  4. Thursday: Submit release to app stores and begin rollout to 1% of users.
  5. Monday: Scale deployment to 10%.
  6. Tuesday: Full rollout to 100%.

✅ Signoff Checklist

Each team is responsible for signing off via GitHub. Use the checkbox below to track signoff completion:

Team sign-off checklist

  • Accounts Framework
  • Assets
  • Bots Team
  • Confirmations
  • Core Extension UX
  • Core Platform
  • Delegation
  • Design System
  • Extension Platform
  • Mobile Platform
  • Network Enablement
  • New Networks
  • Onboarding
  • Predict
  • Product Safety
  • Rewards
  • Shield
  • Swaps and Bridge
  • Transactions

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.

metamaskbot and others added 30 commits November 14, 2025 06:35
## 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. -->
![Screenshot 2025-11-13 at 4 36
06 PM](https://github.com/user-attachments/assets/127b771a-a5e8-4521-a508-ffa0afbf71d2)


![Screenshot 2025-11-13 at 10 10
04 PM](https://github.com/user-attachments/assets/d214efc2-2817-42ab-acf9-5e4ba1e307d7)


## **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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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` 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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 


[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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.

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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.



[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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).

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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...)

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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.

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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.

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](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.

[![Open in GitHub

Codespaces](https://github.com/codespaces/badge.svg)](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>
@metamaskbot
Copy link
Collaborator Author

Builds ready [f907593]
UI Startup Metrics (1245 ± 100 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup12451086149110013151456
load102885212559110951189
domContentLoaded102284612499110901179
domInteractive2414114192071
firstPaint528124126740710151173
backgroundConnect2071892529210227
firstReactRender33236983452
getState5020196205281
initialActions109214
loadScripts818648104592888981
setupStore1263751321
numNetworkReqs41281463330141
BrowserifyPower User HomeuiStartup18671596278618219762182
load99587416401519801455
domContentLoaded98286816281509641433
domInteractive34151963727143
firstPaint53710414913929471346
backgroundConnect2171992529222233
firstReactRender84431552394133
getState17313131428190224
initialActions1010113
loadScripts77967413891487671228
setupStore20106692535
numNetworkReqs1346630056177263
WebpackStandard HomeuiStartup84175813211038521074
load61555594570620784
domContentLoaded61054893869616772
domInteractive231490172072
firstPaint22386842165209629
backgroundConnect1154171228
firstReactRender41202063241119
getState54211202668110
initialActions105112
loadScripts60754592767614763
setupStore167131141740
numNetworkReqs41281473331140
WebpackPower User HomeuiStartup14221224216614415011673
load6475621205106640900
domContentLoaded6375551183105628894
domInteractive32161602530101
firstPaint29392999217250896
backgroundConnect1566471631
firstReactRender81461151489104
getState1609927618165192
initialActions103012
loadScripts6345531165102627884
setupStore1795691842
numNetworkReqs1546731858188291
FirefoxBrowserifyStandard HomeuiStartup13231162206213513651616
load104492312898210781264
domContentLoaded104292312898310781264
domInteractive54291543074118
firstPaint------
backgroundConnect51252383545132
firstReactRender251997102643
getState20135162132
initialActions103122
loadScripts102290712457310501198
setupStore221195152151
numNetworkReqs39281292732119
BrowserifyPower User HomeuiStartup24151971314225525412893
load1109942146012711371405
domContentLoaded1108942145912711361404
domInteractive1183249289115343
firstPaint------
backgroundConnect1142986396130242
firstReactRender79361682191120
getState27666892216371747
initialActions219227
loadScripts1078925143912210911377
setupStore12413802162103597
numNetworkReqs915719435123174
WebpackStandard HomeuiStartup15581372225316616031921
load12661118168812313041568
domContentLoaded12651117168812213031568
domInteractive67262174489143
firstPaint------
backgroundConnect53192723459129
firstReactRender322386103550
getState22117482437
initialActions203123
loadScripts12391094157210912721503
setupStore279232312365
numNetworkReqs40281242637121
WebpackPower User HomeuiStartup27232302331325429033199
load13901165184817114141805
domContentLoaded13891165184817114131805
domInteractive12132583113109419
firstPaint------
backgroundConnect1142748666132229
firstReactRender82431341693109
getState30963928249517837
initialActions3065637
loadScripts13551132182917013791777
setupStore1249771170147532
numNetworkReqs92602074281199

…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>
@gauthierpetetin gauthierpetetin marked this pull request as ready for review November 27, 2025 19:50
@metamaskbot
Copy link
Collaborator Author

Builds ready [f92f305]
UI Startup Metrics (1237 ± 95 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1237105714539513081379
load106590612288911361195
domContentLoaded105990312238811281185
domInteractive241483162174
firstPaint54779122642911011167
backgroundConnect2131962369217232
firstReactRender27195272844
getState29167283145
initialActions106112
loadScripts852704101787920973
setupStore1064451115
numNetworkReqs1257620572
BrowserifyPower User HomeuiStartup19131650248017120012248
load101690216971629981480
domContentLoaded100189416921629811469
domInteractive36171703430135
firstPaint5019215153849421423
backgroundConnect22420126111229247
firstReactRender87441542499135
getState17513625428194231
initialActions104113
loadScripts79469114801617731253
setupStore2164782537
numNetworkReqs1476730552179279
WebpackStandard HomeuiStartup81873298566852966
load61656482261626790
domContentLoaded61155881760622783
domInteractive2414101172173
firstPaint26274809195227674
backgroundConnect1153461425
firstReactRender29214153338
getState291359113746
initialActions103111
loadScripts60855680758619773
setupStore1253241420
numNetworkReqs1257219569
WebpackPower User HomeuiStartup14261242194813215281645
load6685891178107662985
domContentLoaded6575831163107650972
domInteractive34171502930116
firstPaint24883670149249630
backgroundConnect1472841723
firstReactRender80421041590101
getState1471341779153167
initialActions102012
loadScripts6555801152104648961
setupStore20955102339
numNetworkReqs1516731555184298
FirefoxBrowserifyStandard HomeuiStartup14551128201420615781820
load1216968158315313341476
domContentLoaded1214967158215313341476
domInteractive783225144103162
firstPaint------
backgroundConnect48211652461103
firstReactRender26186682855
getState146160181422
initialActions103122
loadScripts1185946154114712941445
setupStore166228271348
numNetworkReqs1257417765
BrowserifyPower User HomeuiStartup23851819292422725492754
load1117928155613811291445
domContentLoaded1116920155613811291439
domInteractive1153147999113388
firstPaint------
backgroundConnect992847771112237
firstReactRender81361852592132
getState25661886220349778
initialActions3070828
loadScripts1081906153512710901402
setupStore1456710182148605
numNetworkReqs915422340101190
WebpackStandard HomeuiStartup14121271189311914421680
load1201106014518712431403
domContentLoaded1200106014508712411403
domInteractive63292313980138
firstPaint------
backgroundConnect3721124174163
firstReactRender27206882838
getState12679121135
initialActions103122
loadScripts1177104614308112221341
setupStore13695151137
numNetworkReqs1256517664
WebpackPower User HomeuiStartup26202130329025427533087
load13741083187418715291783
domContentLoaded13741083187418715291783
domInteractive11029586113103427
firstPaint------
backgroundConnect1002246975117242
firstReactRender81382232393118
getState25867846222361733
initialActions3030527
loadScripts13381066185118714641762
setupStore101575614390535
numNetworkReqs916217835107171

@gauthierpetetin gauthierpetetin merged commit 7d15fec into stable Nov 28, 2025
335 of 338 checks passed
@github-actions github-actions bot locked and limited conversation to collaborators 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.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.