Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

release: 13.12.0#38384

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Draft
metamaskbot wants to merge116 commits intostable
base:stable
Choose a base branch
Loading
fromrelease/13.12.0
Draft

release: 13.12.0#38384

metamaskbot wants to merge116 commits intostablefromrelease/13.12.0

Conversation

@metamaskbot
Copy link
Collaborator

@metamaskbotmetamaskbot commentedNov 28, 2025
edited by gauthierpetetin
Loading

🚀 v13.12.0 Testing & Release Quality Process

Hi Team,
As part of our newMetaMask 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 mustsign 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) byTuesday EOD PT.
  • For unresolved blockers, PRs may be reverted, or feature flags disabled to maintain release quality and timelines.

Cherry-Picking Criteria

  • Onlycritical fixes meeting outlined criteria will be cherry-picked.
  • Developers must ensure these fixes are thoroughly reviewed, tested, and merged byTuesday 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
  • Network Enablement
  • New Networks
  • Onboarding
  • Rewards
  • Shield
  • Swaps and Bridge

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

MoMannnand others added30 commitsNovember 20, 2025 20:00
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**### What is the reason for the change?Currently, when a site is disconnected from MetaMask but still has Gatorpermissions (advanced permissions granted through the Gator permissionssystem), the site is not displayed in the permissions/connections UI.This creates confusion for users who have granted advanced permissionsbut cannot see or manage them after disconnecting the basic connection.### What is the improvement/solution?This PR updates the permissions page to display sites that have Gatorpermissions even when they don't have an active connection. The changesinclude:1. **Enhanced Site Display Logic**: Modified the site counting anddisplay logic to include sites with only Gator permissions, ensuringthey remain visible in the connections UI even without an activeconnection.2. **Advanced Permissions Visibility**: Added functionality to showadvanced permissions in the UI, allowing users to view and manage Gatorpermissions independently of the connection status.3. **State Management Optimization**: Updated the permission selectorsand state management to properly track and display sites based on theirpermission state rather than just connection status.This ensures users have full visibility and control over all permissionsgranted to sites, improving transparency and making permissionmanagement more comprehensive.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/36811?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Shows a site if it has no connection but haspermissions granted to it.## **Related issues**Depends on:#36776## **Manual testing steps**1. Have gator permission enabled2. Set it up so that you granted a permission to website that does nothave connection to3. Go to permissions (under sites count it should include the websitethat has no connection)4. Click on sites 5. The site that has no connection but only permission should show andhave a subtitle of: n Advanced permissions6. Click on the site and it should show you the permissions that areenabled## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->https://github.com/user-attachments/assets/9b16e1c5-9302-42bf-aac9-82cf1751355c### **After**https://github.com/user-attachments/assets/fb975ce7-280c-4e6d-96f3-1419967a202d<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Shows sites that have only Gator permissions in the Sites list, withcounts and "advanced permissions" labeling, powered by new selectors andtests.> > - **Permissions UI**:> - Display sites with only Gator permissions in `PermissionsPage`;merge traditional connections with Gator-derived sites via`getMergedConnectionsListWithGatorPermissions` (guarded by featureflag).> - Update `ConnectionListItem` to show `<n> advanced permission(s)`when no accounts or networks; add i18n keys`advancedPermissionSmallCase`/`advancedPermissionsSmallCase`.> - **Gator Permissions Page**:> - Use new selector `getTotalUniqueSitesCount` to compute Sites total;remove legacy site-count logic.> - **Selectors**(`ui/selectors/gator-permissions/gator-permissions.ts`):> - Add `getUniqueSiteOriginsFromTokenTransferPermissions`,`getGatorPermissionCountsBySiteOrigin`, `getTotalUniqueSitesCount`, and`getMergedConnectionsListWithGatorPermissions` (plus `ConnectionInfo`type); minor imports.> - **Tests**:> - Extend `gator-permissions.test.ts` with comprehensive cases for newselectors and scenarios.> - **Locales**:> - Add English strings for `advancedPermissionSmallCase` and`advancedPermissionsSmallCase`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit840616e. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Idris Bowman <34751375+V00D00-child@users.noreply.github.com>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**We are updating the Tron snap to the latest [version1.9.1](https://github.com/MetaMask/snap-tron-wallet/releases/tag/v1.9.1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->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 thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Bumps `@metamask/tron-wallet-snap` from `^1.8.0` to `^1.9.1` andupdates lockfile.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit1337aa6. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Fixes onboarding intro modal confirm button hover color <!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38059?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->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 thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Make the onboarding confirm button hover color respect light/darktheme and update tests to provide theme context.> > - **Rewards Onboarding UI**:> - Use `useTheme` in `OnboardingIntroStep` to make the confirm buttonhover color theme-aware (`hover:bg-default-hover` for light,`hover:bg-icon-default-hover` for dark).> - **Tests**:> - Update `OnboardingIntroStep.test.tsx` to provide `metamask.theme`via `useSelector` and set `document.documentElement` `data-theme` fortheme resolution.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitb6eb887. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38060?quickstart=1)In `service-worker.ts` the keepalive function is not necessary:```tschrome.runtime.onMessage.addListener(() => {  importAllScripts();  return false;});```as the [officialway](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers#keep-sw-alive)to keep a service worker alive is by doing:```tssetInterval(saveTimestamp, SAVE_TIMESTAMP_INTERVAL_MS);```which we already do in background.js. ## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes:MetaMask/MetaMask-planning#6320## **Manual testing steps**1. build MV3 via `yarn webpack`2. Open the home screen and wait five minutes. The service worker shouldnot disconnect, keep using the extension, it should still work.## **Screenshots/Recordings**Not applicable## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) isgenerating a summary for commit0649503. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## Version Bump After ReleaseThis PR bumps the main branch version from 13.11.0 to 13.12.0 aftercutting the release branch.### Why this is needed:- **Nightly builds**: Each nightly build needs to be one minor versionahead of the current release candidate- **Version conflicts**: Prevents conflicts between nightlies andrelease candidates- **Platform alignment**: Maintains version alignment between MetaMaskmobile and extension- **Update systems**: Ensures nightlies are accepted by app stores andbrowser update systems### What changed:- Version bumped from `13.11.0` to `13.12.0`- Platform: `extension`- Files updated by `set-semvar-version.sh` script### Next steps:This PR should be **manually reviewed and merged by the releasemanager** to maintain proper version flow.### Related:- Release version: 13.11.0- Release branch: release/13.11.0- Platform: extension- Test mode: false---*This PR was automatically created by the`create-platform-release-pr.sh` script.*<!-- CURSOR_SUMMARY -->---> [!NOTE]> Bumps `package.json` version from `13.11.0` to `13.12.0`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit75e88dc. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR aims to adjust design changes in the dapp swap comparisonbanner.Note: No changelog needed because this feature is not released yet.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38006?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes:MetaMask/MetaMask-planning#6312## **Manual testing steps**N/A## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<img width="514" height="814" alt="before dark"src="https://github.com/user-attachments/assets/647201a7-8dce-4072-b945-c1f0fe99f945"/><img width="512" height="732" alt="before light"src="https://github.com/user-attachments/assets/00d779fb-44cc-473f-8b89-f33293f278c9"/>### **After**<img width="512" height="732" alt="after dark"src="https://github.com/user-attachments/assets/e89d1cc3-a598-4909-b825-97a5ccba6c7d"/><img width="512" height="732" alt="after light"src="https://github.com/user-attachments/assets/3cf520d7-d964-41f7-a3ac-3e26bcade9ed"/>## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Refactors the dapp swap comparison banner to a tabbed UI with updatedstyling/animations, fixes “MetaMask Swap” casing in locales, and updatestests accordingly.> > - **UI (Confirmations dapp swap comparison banner)**:> - Replace button toggle with memoized `Tabs` (`marketRate`,`metamaskSwap`) via `components/ui/tabs` and add `onTabClick` to switchswap views.> - Tweak banner visuals: use `BackgroundSection`, adjust padding, addborder, reposition close button, and redesign callout arrow; addanimated gradient text (`.animate-mm-swap-text`).>   - Remove old button/text toggle code and wrapper.> - **Styles**:> - Add `.dapp-swap__tabs` and animation keyframes; update callout/arrowand close button CSS.> - **Locales**:> - Correct casing: `metamaskSwap` message to "MetaMask Swap" in`app/_locales/en/messages.json` and `app/_locales/en_GB/messages.json`.> - **Tests**:> - Update expectations from "Metamask Swap" to "MetaMask Swap";interact via tab `data-testid`s; assert `setQuotedSwapDisplayedInInfo`and metrics are called appropriately.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitbecd718. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…8052)## **Description**https://consensyssoftware.atlassian.net/browse/RWDS-268Part 7 of#36827install onboarding modal on homepageThis PR is put up as an alternative to#37920, to removeusage of `Link` and hopefully not need any policy.json changes.## **Changelog**CHANGELOG entry: Show onboarding tour when signing up for rewards## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Introduces a rewards onboarding feature flag and uses it toconditionally show the onboarding modal on Home and the sign-up badge inpoints balance.> > - **Rewards**:> - Add `selectRewardsOnboardingEnabled` selector (feature-flag +external services).> - Update `RewardsPointsBalance` to gate onboarding modal trigger andsign-up badge on `rewardsOnboardingEnabled`; extend effect deps; handlehidden badge/null.>   - Tests updated to cover onboarding flag and badge visibility.> - **Home**:> - Map `rewardsEnabled` and `rewardsOnboardingEnabled` via selectors in`home.container.js`.> - Conditionally render `RewardsOnboardingModal` in `home.component.js`with existing modal gating.>   - Minor refactor: extract `showRecoveryPhrase` condition variable.> - **Onboarding UI**:> - Replace deprecated `Link` with `TextButton` in `OnboardingStep4`legal disclaimer.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitad84c85. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: sophieqgu <sophieqgu@gmail.com>
… 2" (#38074)Reverts#37039, which incorrectly anddangerously bypassed the privacy snapshot.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Removes Shield subscription E2E tests and helpers, tightens privacyreporting in mocks, and updates Shield claim/plan pages and selectors tonew flows.> > - **E2E/Mocks**:> - Tighten privacy report: remove test-only host exclusions and relatedallowlist entries; only exclude browser API and Portfolio requests in`test/e2e/mock-e2e.js`.> - Update constants: switch `MOCK_CHECKOUT_SESSION_URL` to StripeCheckout; minor cleanup in `BASE_SHIELD_SUBSCRIPTION`.> - Simplify WebDriver locator building: remove `css+value` XPath pathin `driver.js`.> - **E2E/Pages & Tests**:> - Remove Shield subscription specs:`tests/shield/shield-plan-subscription.spec.ts`,`tests/shield/shield-subscription-management.spec.ts`.> - Delete `shield-claims-list-page.ts`; drop unused helpers/methodsacross pages (e.g., HomePage readiness wait, Settings waitFor...methods, ShieldDetail validate helper, ShieldPlan back/flow helper).> - Refactor Shield Claim page: replace account/network pickers withdirect inputs for `impactedWalletAddress` and `impactedTransactionHash`;add `clickHereLink`; adjust form fill API.> - **UI**:> - Remove some `data-testid` attributes in account selector and ShieldPlan header back button.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit7062a07. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…ts balances (#38065)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**prevent token list from fetching balances for all accounts<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38065?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: prevent token list from fetching balances for allaccounts## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Switches balance updates to use the non-all-accounts path and passes`platform: 'extension'` when initializing `TokenBalancesController`.> > - **Assets/Hooks**> - `useAssetsUpdateAllAccountBalances`: calls`updateBalancesFoAccounts(enabledChainIds, false)` instead of `true`.>   - Tests updated to expect the new boolean flag where applicable.> - **Controller Init**> - `TokenBalancesControllerInit`: passes `platform: 'extension'` to`TokenBalancesController`.>   - Corresponding test updated to assert the `platform` argument.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commite7ecafd. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38079?quickstart=1)refactor method `getErrorMessage`## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes: None## **Manual testing steps**N/A## **Screenshots/Recordings**N/A## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Simplifies `getErrorMessage` by directly localizing known Ledger errorcodes and falling back to the raw error code when unknown.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit51594c9. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Add animation to shield entry modal<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38001?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Add animation to shield entry modal## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**https://github.com/user-attachments/assets/362382fe-b402-46ec-b7c9-938dd412ab2e<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Replaces the static shield image with an animated illustrationcomponent and updates responsive styles for its container/canvas.> > - **Shield Entry Modal (`ui/components/app/shield-entry-modal`)**> - **Illustration**: Replace static image with`ShieldIllustrationAnimation` in `shield-entry-modal.tsx`.>   - **Styles (`index.scss`)**:> - Add `shield-entry-modal-shield-illustration__container` and`__canvas` with responsive sizing (`346x252`, `322x234` on smallscreens).> - Remove deprecated `shield-entry-modal-sheild-image` class and adjustlayout to use new container/canvas.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit0abcc80. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…8002)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38002?quickstart=1)This PR improves the `useTheme` hook implementation to provide morerobust theme resolution and updates the unlock page logo to properlyrespond to theme changes.### 1. **Enhanced `useTheme` Hook** (`ui/hooks/useTheme.ts`)- **Refactored theme resolution logic** into a separate `resolveTheme()`function for better code organization and testability- **Improved fallback mechanism** with the following priority:  1. User's explicit theme setting (`light` or `dark`)  2. System theme when "OS" is selected  3. Document theme attribute on initial load  4. System preference as final fallback### 2. **Unlock Page Logo Component** (`ui/pages/unlock-page/`)- Created new `MetaMaskWordmarkLogo` component that responds to themechanges- Updated styles to properly display logo based on theme- Integrated `useTheme` hook for dynamic theme-aware rendering### 3. **Test Snapshots Updates**Updated Jest snapshots to reflect the new consistent theme behavior:-`ui/components/multichain-accounts/smart-contract-account-toggle/__snapshots__/smart-contract-account-toggle.test.tsx.snap`-`ui/components/multichain/network-list-menu/__snapshots__/network-list-menu.test.tsx.snap`-`ui/pages/settings/advanced-tab/__snapshots__/advanced-tab.component.test.js.snap`-`ui/pages/settings/security-tab/__snapshots__/security-tab.test.js.snap`**Why snapshots changed:** The improved `useTheme` hook now properly resolves to `light` theme bydefault in tests (instead of `undefined`), causing `ToggleButton`components to consistently render with light theme colors (`rgb(183,187, 200)` = `#b7bbc8` = `lightTheme.colors.icon.muted`).## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Updated useTheme hook and logo for unlock page## **Related issues**Fixes:## **Manual testing steps**1. Open Extension2. Create Wallet3. Lock Wallet4. Validate the changes## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->https://github.com/user-attachments/assets/d14095eb-b4e5-4db7-a93f-bad6682f91c6## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Refactors `useTheme` for reliable light/dark resolution and updatesthe unlock page wordmark logo to respond to theme, with minor CSS tweaksand snapshot updates.> > - **Hooks**:> - **`useTheme`**: Extracts `resolveTheme(settingTheme)` with clearpriority (explicit setting > OS when selected > document on initial load> system), validates against `validThemes`, warns and defaults to`light` if invalid; initializes state via resolver and applies onsetting changes.> - **Unlock Page UI**:> - **New `MetamaskWordmarkLogo`**: Uses `useTheme` and renders`MetaFoxHorizontalLogo` with theme awareness; replaces direct logo usagein `unlock-page.component.js`.> - **Styles**: Adjusts`unlock-page__mascot-container__horizontal-logo--popup` margins withresponsive override.> - **Tests**:> - Snapshot updates across settings and multichain componentsreflecting consistent toggle colors (e.g., off `rgb(183, 187, 200)`, on`rgb(68, 89, 255)`).> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit839eae4. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->Fixes issue with Tron resources not displaying in the details page.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38101?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Fixed issue with Tron resources not displaying in thedetails page.## **Related issues**Fixes:#38100## **Manual testing steps**1. Click on the Tron native asset2. Resources should be present## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] --><img width="1578" height="1880" alt="image"src="https://github.com/user-attachments/assets/e391e776-efe3-4c65-a5e5-bee9e84ab85c"/>### **After**<!-- [screenshots/recordings] --><img width="1622" height="1886" alt="image"src="https://github.com/user-attachments/assets/b55fe099-4f4c-4a45-9635-fdb3c44d20ea"/>## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds a new selector that includes Tron resource assets and updates theTron resources hook/tests to consume it, ensuring resources appear onthe asset details page.> > - **Selectors**:> - Extract `getStateForAssetSelector` helper to compose state for assetselectors.> - Keep `getAssetsBySelectedAccountGroup` (filters out Tron resources)and add `getAssetsBySelectedAccountGroupWithTronResources` to returnunfiltered assets.> - **Hook**:> - Update `useTronResources` to use`getAssetsBySelectedAccountGroupWithTronResources`, enablingenergy/bandwidth data to be found and displayed.> - **Tests**:> - Update mocks and usages to reference the new selector throughout`useTronResources.test.ts`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd772835. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…38102)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Fix conversion rate for POL native token.## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes:MetaMask/MetaMask-planning#6327## **Manual testing steps**1. Trigger swap including POL native token2. Check that metrics are recorded correctly and dapp-swap UI showscorrect values## **Screenshots/Recordings**TODO## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Fixes USD conversion for Polygon native token by mapping POL’s specialaddress and adds targeted unit tests.> > - **Hook `useDappSwapUSDValues`(`ui/pages/.../useDappSwapUSDValues.ts`)**:> - Map Polygon native token USD rate: when `chainId ===CHAIN_IDS.POLYGON`, set the native asset’s address rate from`0x0000000000000000000000000000000000001010`.> - Switch `isNativeAddress` to `helpers/utils/token-insights` andimport `CHAIN_IDS`.> - Refactor exchange-rate fetch to async IIFE within `useAsyncResult`.> - **Tests (`ui/pages/.../useDappSwapUSDValues.test.ts`)**:> - Enhance `runHook` to accept custom token addresses and confirmation.> - Add Polygon-specific test asserting fiat rates include both nativeaddresses with correct USD value.>   - Mock token details and rates accordingly.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitccd13a6. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Adds animation to Settings shield banner<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/37998?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Adds animation to Settings shield banner## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**https://github.com/user-attachments/assets/6faed268-2015-4c9e-86ab-0202f0acbf2f<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds a Rive-based animated shield banner to the Transaction Shieldsettings page, with related style updates and test adjustments.> > - **UI (Settings > Transaction Shield)**:> - **New animation**: Introduces `ShieldBannerAnimation`(`ui/pages/settings/transaction-shield-tab/shield-banner-animation.tsx`)using Rive WASM with buffered file loading and guarded rendering.> - **Integration**: Replaces `ShieldIllustrationAnimation` with`ShieldBannerAnimation` in `transaction-shield.tsx`.> - **Styles**: Updates `index.scss` to support the banner(`transaction-shield-page-shield-banner__container/__canvas`), makemembership row `position: relative`/`overflow: hidden`, and centralizemembership text color handling; minor background-color tweak for loadingstate.> - **Tests**:> - Mocks `./shield-banner-animation` in `transaction-shield.test.tsx`and adjusts expectations accordingly.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit6b69115. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…nce state (#38126)## **Description**<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38126?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: fix missing native token balances in wallet balance## **Related issues**Fixes:#38114## **Manual testing steps**Onboard or existing user with AccountsAPI enabled1. Go to a network with native + erc tokens2. Notice aggregated wallet balance - it should have both native + erctokens aggregated together for the balance.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->https://www.loom.com/share/aeccc8e3cef4479da0e9d44fc5ebf4fa## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Patches `TokenBalancesController` to use lowercase account keys whenreading/writing `tokenBalances`, and wires the patch via a Yarn patcheddependency for `@metamask/assets-controllers@89.0.1`.> > - **Assets Controllers Patch**:> - Normalize `account` to lowercase in `TokenBalancesController`(`dist/TokenBalancesController.{cjs,mjs}`) when checking and setting`d.tokenBalances[account][chainId][tokenAddress]`.> - **Build/Deps**:> - Apply Yarn patch for `@metamask/assets-controllers@89.0.1` via`package.json` and update lockfile to reference the patched package.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd4370d9. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Fixes the same problems as on MobileMetaMask/metamask-mobile#23106<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38122?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes:MetaMask/metamask-mobile#22889## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Updates `@metamask/tron-wallet-snap` from `^1.9.1` to `^1.10.0`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitc9a57e5. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38078?quickstart=1)This PR implements .metamaskprodrc support for webpack.## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes:#30300## **Manual testing steps**1. .metamaskprodrc should be supported for webpack builds, and itsentries should have priority over .metamaskrc## **Screenshots/Recordings**Not applicable## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Add .metamaskprodrc support with higher precedence for configvariables, update tests, and include file in webpack cache dependencies.> > - **Config loading (utils)**:> - Add support for `.metamaskprodrc` and set precedence: `process.env`> `.metamaskprodrc` > `.metamaskrc` > `builds.yml`.> - **Build system (webpack)**:> - Include `.metamaskprodrc` in `buildDependencies.config` toinvalidate cache on changes.> - **Tests**:> - Extend rc mocking to handle `.metamaskprodrc` and assert itsprecedence over `.metamaskrc`.> - Use `afterEach` for restoring mocks; add/adjust tests for rcprecedence and non-default build vars.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit0fd844a. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## **Description**The recent addition of the `tabs` permission will result in newpermission warnings upon update, which is extremely disruptive and issomething we'd never do except as a last resort.The permission wasn't actually needed, and has been removed. Thisremoval uncovered a bug in our Webpack build (the `tabs` permission waserroneously only added for MV2 test builds, but we need it for MV3 testbuilds as well), which has been fixed.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38075?quickstart=1)## **Changelog**CHANGELOG entry: Remove unnecessary extension permission## **Related issues**N/A## **Manual testing steps**Test that the sidepanel still works in general. Particularly with dappconfirmations, and the "Connected status" indicator, and currentselected dapp.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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- [x] I’ve included tests if applicable- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Removes `tabs` from the MV3 manifest and updates the build transformto add `tabs` only for test builds (all manifest versions).> > - **Manifest (MV3)**:>   - Remove `tabs` from `permissions` in `app/manifest/v3/_base.json`.> - **Build/Manifest transform**:> - Update `transformManifest` in`development/webpack/utils/plugins/ManifestPlugin/helpers.ts` to add`tabs` when `args.test` is true, regardless of `manifest_version`.> - Retains error if `tabs` already exists and continues adding dev/testmanifest key.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit862591e. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38110?quickstart=1)In this PR, we’ve removed the `isTestEnvironment` checks from all Riveanimation–related files. During the e2e tests, the animation componentstill calls `useRive`, and since the WASM file isn’t set for the testenvironment, useRive falls back to fetching the WASM from externaldomains `(unpkg.com and cdn.jsdelivr.net)`. This was causing unintendedexternal calls during test execution. These changes address that issue.Jira Link:https://consensyssoftware.atlassian.net/browse/SL-334## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: removed the `isTestEnvironment` checks from all Riveanimation–related files## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Removes IN_TEST checks from Rive-driven animations, centralizes WASMpreload logic, and updates onboarding/unlock flows and tests to mockanimations and reflect new rendering.> > - **Rive/WASM**:> - Remove `process.env.IN_TEST` checks across animation components(`wallet-ready`, `fox-appear`, `metamask-wordmark`, shieldicon/subscription, shield illustration).> - `useRiveWasmReady`: start with `isWasmReady=false`; if`RuntimeLoader` exists, fetch `./images/riv_animations/rive.wasm`, set`RuntimeLoader.wasmBinary`, and await instance; otherwise mark ready.> - **Onboarding/Unlock UI**:> - Always render animation components (no test-env gating) in`welcome`, `creation-successful`, and `unlock-page`.> - **Tests**:> - Integration/unit tests mock animation components to avoid real Riveusage; update snapshots for `welcome` and `unlock-page` to includeplaceholder containers.> - Keep background connection mocks; ensure onboarding completionevents still asserted.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit7518691. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…p-13.11.0 (#38155)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR updates the Shield subscription feature to properly handlemultichain account scenarios where the currently selected account may bea non-EVM account (e.g., Bitcoin, Solana). Previously, Shieldsubscription features would fail or throw errors when a non-EVM accountwas selected, as Shield is only supported for EVM accounts.1. **Multichain account support**: Added `OTHER` account type to`ShieldUserAccountTypeEnum` to handle cases where the selected accountis non-EVM (Bitcoin, Solana, etc.)2. **EVM account selection**: Updated Shield subscription hooks andmetrics to explicitly select EVM accounts (using `eip155:1` CAIP-2identifier) instead of relying on the currently selected account, whichmay be non-EVM[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38155?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Fixed Shield subscription feature to properly handlemultichain scenarios where non-EVM accounts (Bitcoin, Solana) areselected## **Related issues**Fixes:#38131## **Manual testing steps**1. Set up a wallet with both EVM and non-EVM accounts (e.g., Bitcoin orSolana account)2. Select a non-EVM account as the active account3. Navigate to Shield subscription features (e.g., Shield plan page,subscription settings)4. Verify that Shield subscription features work correctly and use theEVM account for balance calculations and metrics5. Verify that metrics tracking properly categorizes the account as`OTHER` when a non-EVM account is selected6. Test Shield subscription eligibility checks with non-EVM accountselected7. Test Shield subscription pricing and payment token selection withnon-EVM account selected## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) isgenerating a summary for commita3579a5. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## **Description**If a user has accounts in their srp's tied to more than 1 rewardsubscription, then right now the app might show the incorrect balance(i.e. showing balance of subscription A instead of subscription B) whenchanging accounts.The rule is (just like in mobile):- The first reward subscription we detect on the device (extension) andits balance should be shown for all accounts that are either added tothe first subscription OR not added yet to any subscription.- The balance of the second subscription is only shown when an accountis selected belonging to that subscription.Keep in mind that multiple reward subscriptions spread around 1 ormultiple SRP's are an edge case.## **Changelog**CHANGELOG entry: null## **Related issues**Fixes:#38129## **Manual testing steps**1. Have an SRP where account 1 is tied to a subscription A with points X2. Have an account in same SRP or different SRP tied to subscription Bwith points Y3. Switch between accounts, reward points balance will sometimes wronglyshow points of subscription B.## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Track and prioritize subscription selection by candidateAt/createdAt,prefer active account’s subscription, and improve UI/hooks loading anderror handling.> > - **RewardsController**:> - Add `INITIAL_DEVICE_SUBSCRIPTION_CANDIDATE_AT` and set`subscription.candidateAt` when missing (first on device vs subsequentnow/current time).> - Update `getCandidateSubscriptionId` to prefer`rewardsActiveAccount.subscriptionId`, then earliest by `candidateAt`(fallback `createdAt`), else discover via opt-in status with silentauth.>   - Remove `RewardsController:getFirstSubscriptionId` action/handler.> - Store login/opt-in responses and ensure`subscription.createdAt`/`candidateAt` are present.> - **Types**:> - Extend `SubscriptionDto` with `createdAt` and optional`candidateAt`.> - **Hooks**:> - `useCandidateSubscriptionId`: return active account’s`subscriptionId` without fetching; maintain loading guard; testsupdated.> - `useSeasonStatus`: ignore invalid `subscriptionId` states, preventconcurrent fetches per id, clear state on auth/season errors; testsadded.> - **UI (OnboardingStep4)**:> - Add `isLoading` to opt-in Button; wrap opt-in error banner in paddedcontainer; enhance tests with mocked Button props.> - **Tests**:> - Widespread updates to align with `candidateAt`/`createdAt` handling,sorting logic, and removed action; data-service tests include`createdAt` in responses.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitb288fc4. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR fixes the issue of deriving `chainId` in the dapp swapmiddleware.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38057?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes: Fixes a bug in previous PR#37980## **Manual testing steps**Dapp swap comparison banner should be shown properly## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Dapp swap middleware now reads `chainId` from network configurationusing `networkClientId`, with controller wiring and tests updatedaccordingly.> > - **Dapp Swap Middleware(`app/scripts/lib/dapp-swap/dapp-swap-middleware.ts`)**:> - Derives `chainId` from`getNetworkConfigurationByNetworkClientId(req.networkClientId)` insteadof request params; removes `chainId` from `getSwapDetails` and request`params` type.> - Requires `chainId` presence before fetching quotes; updates importsand factory to accept `getNetworkConfigurationByNetworkClientId`.> - **Controller (`app/scripts/metamask-controller.js`)**:> - Wires `getNetworkConfigurationByNetworkClientId` into`createDappSwapMiddleware`.> - **Tests(`app/scripts/lib/dapp-swap/dapp-swap-middleware.test.ts`)**:> - Add mock and expectations for`getNetworkConfigurationByNetworkClientId`; remove `chainId` fromparams; clear mocks in `beforeEach`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitae2f13b. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
This PR syncs the stable branch to main for version 13.12.0.*Synchronization Process:*- Fetches the latest changes from the remote repository- Resets the branch to match the stable branch- Attempts to merge changes from main into the branch- Handles merge conflicts if they occur*File Preservation:*Preserves specific files from the stable branch:  - CHANGELOG.md  - bitrise.yml  - android/app/build.gradle  - ios/MetaMask.xcodeproj/project.pbxproj  - package.json  Indicates the next version candidate of main to 13.12.0<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds 13.10.1 release notes with key fixes and updates changelogcomparison links.> > - **Docs — `CHANGELOG.md`**:> - Add `13.10.1` release notes under **Fixed**: token balance fetchingscope, dapp-swap fiat/conversion rates for native tokens, removal of anunnecessary extension permission, and missing native token balances inwallet.> - Update comparison links: set `[Unreleased]` to compare from`v13.10.1` and add `[13.10.1]` reference.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd66f832. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>Co-authored-by: runway-github[bot] <73448015+runway-github[bot]@users.noreply.github.com>Co-authored-by: Salim TOUBAL <salim.toubal@outlook.com>Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>Co-authored-by: Prithpal Sooriya <prithpal.sooriya@gmail.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>Co-authored-by: Mark Stacey <mark.stacey@consensys.net>
…8116)## **Description**It seems that having concurrent calls to `keyring_createAccount` causesome synchronization issues between Snap's accounts and MetaMaskaccounts. We're not sure of the real root cause yet for this, butpreventing concurrent calls seems to mitigate (or even completelyprevent) this kind of issues.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38116?quickstart=1)## **Changelog**CHANGELOG entry: null## **Related issues**Mitigates (partially):#37228## **Manual testing steps**Nothing special to tests for this.## **Screenshots/Recordings**### **Before**### **After**## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Introduces a shared Snap account provider config (maxConcurrency=1)and applies it to BTC, TRX, and SOL providers, updating testsaccordingly.> > - **Multichain Account Service Init(`multichain-account-service-init.ts`)**:> - Add `snapAccountProviderConfig` with `maxConcurrency: 1` andtimeouts.> - Pass config to `BtcAccountProvider` and `TrxAccountProvider` via`AccountProviderWrapper`.> - Add `providerConfigs` mapping for `SOL_ACCOUNT_PROVIDER_NAME` to usethe same config.> - **Tests (`multichain-account-service-init.test.ts`)**:> - Expect `providerConfigs` in `MultichainAccountService` constructorargs.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commita48ffee. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Mathieu Artu <mathieu.artu@consensys.net>
…counts cp-13.11.0 (#37987)## **Description**This will automatically fix corrupted states if users have desync'daccounts.This should mitigate some errors that were spotted with the rewardssystem where some Solana address could not be registered.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/37987?quickstart=1)## **Changelog**CHANGELOG entry: Automatically re-sync accounts between Snaps andMetaMask## **Related issues**N/A## **Manual testing steps**> Difficult to manually test this since it implies to "hack" the non-EVMSnaps to trigger state-inconsistencies## **Screenshots/Recordings**### **Before**### **After**## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> On unlock, asynchronously resync Snap and MetaMask accounts, thenalign wallets; adds tests to verify both are invoked.> > - **Controller**:> - In `app/scripts/metamask-controller.js``submitPasswordOrEncryptionKey`, after init and account-tree refresh, ifmultichain state2 is enabled, run`multichainAccountService.resyncAccounts()` then `alignWallets()`asynchronously via a helper.> - **Tests**:>   - Add `waitForAllPromises` utility.> - New test in `app/scripts/metamask-controller.test.js` asserts`resyncAccounts` and `alignWallets` are called asynchronously after`submitPasswordOrEncryptionKey`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitcfec6a9. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Mathieu Artu <mathieu.artu@consensys.net>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**This PR updates the minimum received amount on the swaps quote card tobe the `token amount` instead of the `dollar amount`.<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38150?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: changed minimum received amount to be the token amount.## **Related issues**Fixes:## **Manual testing steps**1. Go to the swaps page.2. Generate a quote.3. Notice the minimum received amount is now in the token amount.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] --><img width="970" height="1520" alt="image"src="https://github.com/user-attachments/assets/e149b216-4e1e-464b-9aee-4e7ae42c9c06"/>### **After**<!-- [screenshots/recordings] --><img width="398" height="597" alt="Screenshot 2025-11-21 at 2 10 47 PM"src="https://github.com/user-attachments/assets/0bb60e84-21fd-4f96-9b5a-c04d90887f8a"/>## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Switches the “Minimum received” display from fiat to token amount onthe Multichain Bridge quote card and updates tests accordingly.> > - **Bridge UI**:> - **Minimum received**: Render from `minToTokenAmount.amount` andformat via `formatTokenAmount(locale, amount, destSymbol)` instead offiat `valueInCurrency`.>   - Removes unused `formatCurrencyAmount` import.> - **Tests**:> - Update snapshots to show token-denominated minimum received (e.g.,`13.98 USDC`, `14.44 USDC`).> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitbc0f4e1. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…cp-13.11.0 (#38061)## **Description**We have a problem with the way the `SnapKeyring` handles internaloptions. This keyring can be destroy/re-created sometimes and this causeits internal transient context to be cleared/reset.This can interfere with the Snap account creation flows(Bitcoin/Solana/Tron) when a previous instance of the `SnapKeyring`initiate the account creation but another one is created and finalizethe flow. In that case, the new instance won't have the correct mappingfor the internal options and will use the default options, thus,triggering some dialogs.We are currently reworking the Snap keyring entirely, thus, it's notworth to fix it at that level, but to prevent those dialogs frompopping-up, we now disable them for everything that's related to BIP-44accounts.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38061?quickstart=1)## **Changelog**CHANGELOG entry: Prevent any dialogs for multichain wallet Snaps(Solana, Bitcoin, Tron)## **Related issues**Fixes:-#38046## **Manual testing steps**> [!NOTE]> I did follow the same instructions than on the bug ticket and used`.zip` build1. `yarn build --build-type main dist`2. Install the extension by dropping the `.zip` (from the `builds`folder)3. Disable "Backup & Sync" during onboarding4. Onboard5. Wait for all accounts to be discovered  - You should not have any dialogs> [!TIP]> You can follow the same procedure to test this bug and you might (not100% of the time) get a dialog that pops-up to enter the account name (in step 5)## **Screenshots/Recordings**### **Before**https://github.com/user-attachments/assets/b35e059f-6cb5-43fd-b079-3412d6834201### **After**https://github.com/user-attachments/assets/5b568199-dab8-4a2f-8453-8fbae0b29bb2## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Skips confirmation, name suggestion, and selection dialogs forpreinstalled multichain wallet Snaps, bypassing approval flow andsuppressing name suggestions (disabled under IN_TEST).> > - **Snap Keyring (`app/scripts/lib/snap-keyring/snap-keyring.ts`)**>   - **Multichain wallet Snap handling**:> - Add `isMultichainWalletSnap` and compute `skipAll` for preinstalledmultichain Snaps (BIP-44), with `IN_TEST` override.> - Skip confirmation and name suggestion dialogs, and auto-skip accountselection when `skipAll`.>     - Bypass approval flow when both dialogs are skipped.> - Avoid race-prone naming by passing empty `accountNameSuggestion`when `skipAll`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit9006456. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## **Description**Simplifies the confirmation routing navigation. Removes the mixed use ofreact router v5 and v6 (v5-compat) from within the confirmation hook.## **Changelog**CHANGELOG entry: refactor: simplify confirmation routing## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Replaces side-effecting confirmation navigation with a pure routebuilder and updates callers to navigate via returned URLs, removingmixed v5/v5-compat handling.> > - **Confirmations routing**> - Convert `navigateToConfirmation` into pure `getConfirmationRoute`that returns a URL (or empty string) based on approval type.> - Update `useConfirmationNavigation` to call `getConfirmationRoute`and navigate via `navigate(url, { replace: true })`.> - Update `home.component.js` and `routes.component.tsx` to use`getConfirmationRoute` and `history.replace(url)` for redirects.> - Remove mixed v5/v5-compat navigation handling and pathname skiplogic from the hook; eliminate passing of navigate/history to thehelper.>   - Preserve query string handling for `ApprovalType.Transaction`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit18987bb. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
tuna1207and others added6 commitsNovember 28, 2025 06:09
…38351)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->Previously we are still showing shield coverage footer in confirmationscreen if basic functionality is off which lead to the coverage bannerkeep loading because of missing external api request. This PR hideshield coverage footer if basic functionality is off[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38351?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: don't show shield coverage if basic functionality isoff## **Related issues**Fixes:#38316## **Manual testing steps**1. subscribe to shield2. turn basic functionality off3. initiate a transaction4. shield coverage footer should not show## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->https://github.com/user-attachments/assets/12c9c9be-e802-4288-ba14-0c6a64793bef## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Prevents Shield coverage from enabling when Basic Functionality is offby gating both controller behavior and UI hook, and adds correspondingtests.> > - **Controller (app/scripts/metamask-controller.js)**> - Gate Shield subscription handling on`preferences.state.useExternalServices`; skip when disabled.> - On external services toggle, query subscription state and`start/stop` `ShieldController` accordingly; also enable/disable relatedservices (token detection, non-RPC gas APIs).> - **UI Hook (useEnableShieldCoverageChecks.ts)**> - Require `getUseExternalServices` to be true for `isEnabled`; keeppause logic unchanged.> - **Tests (useEnableShieldCoverageChecks.test.ts)**> - Update tests to pass `metamask.useExternalServices` and add case forBasic Functionality disabled; maintain env-flag scenarios.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit1cf58c8. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Update shield claims guide url<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38225?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->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 thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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- [ ] I’ve included tests if applicable- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Replaces the Transaction Shield claims guide link with the supportURL, updates success/call-to-action copy and locales, and aligns e2etests with the new messages.> > - **Settings > Transaction Shield > Claims Form**:> - Use `TRANSACTION_SHIELD_SUPPORT_LINK` instead of`TRANSACTION_SHIELD_LINK` for help links in `claims-form.tsx`.> - CTA text changed to `t('shieldClaimViewGuidelines')` (“View guide”).> - **Constants**:> - Add `TRANSACTION_SHIELD_SUPPORT_LINK` in`ui/helpers/constants/common.ts`.> - **i18n (en, en_GB)**:> - `shieldClaimDetails` copy adjusted; link text now externalized to`shieldClaimViewGuidelines`.> - Submission success strings updated: `shieldClaimSubmitSuccess` →“Claim submission received”; description made concise.>   - Add `shieldClaimViewGuidelines` key.> - **Tests (e2e)**:> - Update mocks and expectations to new success message in`constants.ts` and `shield-claim-page.ts`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit39010f4. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR adds optimizations to the subscription polling such that ~- the polling will stop when UI is closed (fullScreen, popup orbackground)- the polling will stop when basic functionality is off.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38378?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: optimizes subscription polling## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Stops subscription polling when UI/environments close or externalservices are disabled; UI now returns a polling token; updates a Shieldmetrics event label.> > - **Controllers (background)**:>   - `metamask-controller`:> - Stop `SubscriptionController` polling when external services aredisabled in `toggleExternalServices`.> - Stop all subscription polling on global client close`onClientClosed()`.> - Stop subscription polling when a specific environment type closes in`onEnvironmentTypeClosed()`.> - **UI/Redux**:> - `subscriptionsStartPolling` now returns a polling token (`string |undefined`) from background.> - **MetaMetrics**:> - Rename `ShieldSubscriptionUnexpectedErrorEvent` label to `ShieldSubscription Unexpected Error`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit19e6dac. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…38364)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Whenever there is the Backup Reminder modal, if we dismiss it using theClickElementSafe, we didn't wait for the modal to disappear. Then weperformed the next action (click menu), which if we do this while themodal being there, causes the click to take no effect/menu dont open inseveral cases (see artifacts).The solution is to wait until the modal disappears before performing thenext action<img width="1152" height="836" alt="image"src="https://github.com/user-attachments/assets/96addd50-546f-4bb7-b075-c880f49c2e95"/>[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38364?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes:## **Manual testing steps**1. Check ci --- note that the change password spec has been run extratimes due to the quality gate, and it passed always## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Await the three-dot menu click and wait for the backup reminder modalto disappear, then dismiss it in change-password tests to proceedreliably.> > - **E2E Page Objects**:> - `test/e2e/page-objects/pages/header-navbar.ts`: `openThreeDotMenu`now awaits `clickElement` for non-Firefox.> - `test/e2e/page-objects/pages/home/homepage.ts`:`clickBackupRemindMeLaterButtonSafe` now asserts the button is notpresent after click (waits for modal dismissal).> - **Tests**:> - `test/e2e/tests/settings/change-password.spec.ts`: Invoke`clickBackupRemindMeLaterButtonSafe()` after landing on Home in bothflows before proceeding.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd68e222. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
This PR syncs the stable branch to main for version 13.12.0.*Synchronization Process:*- Fetches the latest changes from the remote repository- Resets the branch to match the stable branch- Attempts to merge changes from main into the branch- Handles merge conflicts if they occur*File Preservation:*Preserves specific files from the stable branch:  - CHANGELOG.md  - bitrise.yml  - android/app/build.gradle  - ios/MetaMask.xcodeproj/project.pbxproj  - package.json  Indicates the next version candidate of main to 13.12.0<!-- CURSOR_SUMMARY -->---> [!NOTE]> Updates CHANGELOG with 13.11.0 features/fixes and adjusts comparelinks to point from v13.11.0.> > - **Changelog updates (`CHANGELOG.md`)**:>   - **13.11.0 section added**:> - Highlights include rewards onboarding (QR/tour), multiple ShieldUI/metrics updates, Token Insights modal, Nomina rename/logo, TRX dailyresources, sidepanel icon, and various UI polish.> - Extensive fixes across swaps/bridge, balances (incl. Tron/non‑EVM),social login, Snaps state sync, Shield plans/quotes, and layout/hoverregressions.>   - **Links**:>     - Update `[Unreleased]` to compare from `v13.11.0`.>     - Add `[13.11.0]` compare link.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitf6d4efa. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>Co-authored-by: runway-github[bot] <73448015+runway-github[bot]@users.noreply.github.com>Co-authored-by: Ulisses Ferreira <ulisses@hey.com>Co-authored-by: VGR <VanGulckRik@gmail.com>Co-authored-by: sophieqgu <sophieqgu@gmail.com>Co-authored-by: Salim TOUBAL <salim.toubal@outlook.com>Co-authored-by: Lionell Briones <llenoil@gmail.com>Co-authored-by: OGPoyraz <omergoktugpoyraz@gmail.com>Co-authored-by: Bernardo Garces Chapero <bernardo.chapero@consensys.net>Co-authored-by: Alejandro Garcia Anglada <aganglada@gmail.com>Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>Co-authored-by: Nguyen Anh Tu <tunguyenanh@tunatech.org>Co-authored-by: Charly Chevalier <charly.chevalier@consensys.net>Co-authored-by: Mathieu Artu <mathieu.artu@consensys.net>Co-authored-by: Prithpal Sooriya <prithpal.sooriya@gmail.com>Co-authored-by: Lwin <147362763+lwin-kyaw@users.noreply.github.com>Co-authored-by: David Drazic <david@timechaser.org>Co-authored-by: seaona <54408225+seaona@users.noreply.github.com>Co-authored-by: hunty <hunter.goodreau@consensys.net>Co-authored-by: Antonio Regadas <antonio.regadas@consensys.net>Co-authored-by: Mark Stacey <mark.stacey@consensys.net>Co-authored-by: Danica Shen <zhaodanica@gmail.com>Co-authored-by: sophieqgu <37032128+sophieqgu@users.noreply.github.com>
@github-actions
Copy link
Contributor

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

@metamaskbotmetamaskbot added the team-botsBot team (for MetaMask Bot, Runway Bot, etc.) labelNov 28, 2025
@socket-security
Copy link

socket-securitybot commentedNov 28, 2025
edited
Loading

@socket-security
Copy link

socket-securitybot commentedNov 28, 2025
edited
Loading

Warning

MetaMask internal reviewing guidelines:

  • Do not ignore-all
  • Each alert has instructions on how to review if you don't know what it means. If lost, ask your Security Liaison or the supply-chain group
  • Copy-paste ignore lines for specific packages or a group of one kind with a note on what research you did to deem it safe.
    @SocketSecurity ignore npm/PACKAGE@VERSION
ActionSeverityAlert  (click "▶" to expand/collapse)
WarnLow
Potential code anomaly (AI signal): npmtsx is 100.0% likely to have a medium risk anomaly

Notes: This fragment appears to be a bundler-generated bootstrap/initialization piece that imports many modules and executes an initialization function (r). No explicit malicious activity is evident within this fragment itself, but the risk stems from side effects of the imported modules on load. A careful review of the implementations of the imported modules (especially those exporting r and those performing initialization, build-time, or network/file operations) is recommended to rule out hidden telemetry, backdoors, or undesired side effects.

Confidence: 1.00

Severity: 0.60

From:package.jsonnpm/tsx@4.20.6

ℹ Read more on:This package |This alert |What is an AI-detected potential code anomaly?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help atsupport@socket.dev.

Suggestion: An AI system found a low-risk anomaly in this package. It may still be fine to use, but you should check that it is safe before proceeding.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment@SocketSecurity ignore npm/tsx@4.20.6. You can also ignore all packages with@SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change thetriage state of this alert.

Ignoring alerts on:

  • @babel/plugin-proposal-private-methods@7.18.6
  • string.prototype.repeat@1.0.0
  • async-function@1.0.0
  • type-is@2.0.1
  • statuses@2.0.2
  • http-errors@2.0.1

View full report

This PR updates the change log for 13.12.0. (Hotfix - no test plangenerated.)<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds 13.12.0 release notes to `CHANGELOG.md` and updates comparisonlinks.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit56c541f. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>
@metamaskbot
Copy link
CollaboratorAuthor

Builds ready [15501cd]
UI Startup Metrics (1259 ± 122 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup12591021165812213331487
load1055864139610911221273
domContentLoaded1049861138910811111266
domInteractive28151312423104
firstPaint58289140843810721235
backgroundConnect21619626913223243
firstReactRender321976113758
getState3915144214677
initialActions104113
loadScripts83866711351038991060
setupStore1263351424
numNetworkReqs1257821574
BrowserifyPower User HomeuiStartup21131635315127923332584
load1027891177615810311411
domContentLoaded1013883176915810161390
domInteractive36181503034121
firstPaint5999617804399591414
backgroundConnect260199780127227648
firstReactRender5641114126081
getState201140716104192279
initialActions103112
loadScripts80867615621578061189
setupStore1995472331
numNetworkReqs1617339775202333
WebpackStandard HomeuiStartup8236981218908531010
load63356589669653809
domContentLoaded62856289068646800
domInteractive2715112242295
firstPaint21072657129212593
backgroundConnect1063061026
firstReactRender28207283242
getState261355103542
initialActions104112
loadScripts62556088067643791
setupStore1062841317
numNetworkReqs1257720573
WebpackPower User HomeuiStartup16521250221726519242061
load649558104399657942
domContentLoaded6405511035100643934
domInteractive33161452732109
firstPaint293103951215292910
backgroundConnect105761119227564
firstReactRender614194106679
getState18114267268180207
initialActions103112
loadScripts638549102798641925
setupStore1664581936
numNetworkReqs1697041282210392
FirefoxBrowserifyStandard HomeuiStartup13971118185915815051720
load1143963148410512011332
domContentLoaded1143962148410612011332
domInteractive73332184298172
firstPaint------
backgroundConnect58221663479137
firstReactRender26197082639
getState127140141123
initialActions103122
loadScripts110694514469811561293
setupStore145110151138
numNetworkReqs1156816664
BrowserifyPower User HomeuiStartup26661904465359129074246
load1192955255925511721666
domContentLoaded1191955255825511721666
domInteractive12234632121110474
firstPaint------
backgroundConnect12731999136140328
firstReactRender65372083066134
getState238731113181253665
initialActions2035437
loadScripts1155936244824511381637
setupStore2328829244394749
numNetworkReqs102623166180250
WebpackStandard HomeuiStartup15581308303421416371920
load12841078278818113401442
domContentLoaded12831078278818113401442
domInteractive8727148914595130
firstPaint------
backgroundConnect49211863352133
firstReactRender2921173172841
getState147130171333
initialActions103122
loadScripts12561057276517913181417
setupStore12663101141
numNetworkReqs1156616762
WebpackPower User HomeuiStartup29482184546571930224837
load14641112293042314092848
domContentLoaded14631112293042314092847
domInteractive11030526108100417
firstPaint------
backgroundConnect179271923265144955
firstReactRender71443794472149
getState31864926235483784
initialActions3065723
loadScripts13801095272230513591873
setupStore1226732165111551
numNetworkReqs103612576281245

@metamaskbotmetamaskbot added the release-13.12.0Issue or pull request that will be included in release 13.12.0 labelNov 28, 2025
@gauthierpetetin
Copy link
Contributor

@metamaskbot update-attributions

metamaskbot reacted with thumbs up emoji

@metamaskbot
Copy link
CollaboratorAuthor

Attributions updated

@metamaskbot
Copy link
CollaboratorAuthor

Builds ready [74e4bd9]
UI Startup Metrics (1273 ± 94 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1273109015239413361438
load105590313029011021239
domContentLoaded104989912818810961232
domInteractive281699212391
firstPaint51090130541310271231
backgroundConnect22120227512227241
firstReactRender322175103850
getState3816182224370
initialActions107112
loadScripts8346811068878761015
setupStore1172851224
numNetworkReqs1257821573
BrowserifyPower User HomeuiStartup21331776326327022492663
load1055936180213510571358
domContentLoaded1039929176513310401338
domInteractive37181823037121
firstPaint59092141839810021250
backgroundConnect272211747117242592
firstReactRender5944100106280
getState18213727522195219
initialActions106112
loadScripts82470915091308311130
setupStore21115292440
numNetworkReqs1486839969195296
WebpackStandard HomeuiStartup8346741138998851031
load63554388273659818
domContentLoaded63053987673655814
domInteractive2715112232199
firstPaint23696855158214621
backgroundConnect1053351124
firstReactRender29195573542
getState2813215223451
initialActions104112
loadScripts62753786571653805
setupStore1163141320
numNetworkReqs1257720572
WebpackPower User HomeuiStartup17581297270728020302243
load7106031335116718981
domContentLoaded6995971330116704974
domInteractive38191633136130
firstPaint304931030203330714
backgroundConnect83773817024613
firstReactRender634593107084
getState18913782769194229
initialActions104112
loadScripts6965951319115702965
setupStore26866173162
numNetworkReqs1606940275207362
FirefoxBrowserifyStandard HomeuiStartup13531071184016114311671
load1106907154410811551316
domContentLoaded1106903154310811541316
domInteractive66311823387132
firstPaint------
backgroundConnect53212323675130
firstReactRender25185672548
getState147127181070
initialActions103122
loadScripts107389314289511181266
setupStore1266491138
numNetworkReqs1256716660
BrowserifyPower User HomeuiStartup26861957463048428873771
load12211017265121912441591
domContentLoaded12201017265121912441590
domInteractive12033665111108413
firstPaint------
backgroundConnect118271160124112294
firstReactRender63371582165115
getState276641028216307777
initialActions218125
loadScripts1174990179416711911507
setupStore157111383213161616
numNetworkReqs102603236581245
WebpackStandard HomeuiStartup14461248189112715121722
load1203105914519712751389
domContentLoaded1202105914519712751389
domInteractive52252013471110
firstPaint------
backgroundConnect41191232142100
firstReactRender26203852937
getState146190221323
initialActions103122
loadScripts1179104314299312531355
setupStore13598121341
numNetworkReqs1157315652
WebpackPower User HomeuiStartup29392076486773831194648
load13771178269627313651831
domContentLoaded13771178269627313651831
domInteractive1073049111788462
firstPaint------
backgroundConnect122361513155134281
firstReactRender66381552664130
getState295701391267386815
initialActions2035427
loadScripts13231117258921513191733
setupStore1226777177112629
numNetworkReqs102612455979240

…anel (#38394)- feat: confirmations for sidepanel (#38375)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Enables the confirmation handler to listen from pages other than thehome page.There's a list of exempted routes including the confirmation routes.Depends on#38361 <!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38375?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: feat: confirmations for sidepanel## **Related issues**Fixes:## **Manual testing steps**1. Switch to sidepanel2. Test requests and approvals## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Enables confirmation routing across routes (incl. sidepanel),centralizes modal handling with a network menu close action, and updatesmanifests/builds for side panel support.> > - **UI**:> - **Confirmation routing**: `ConfirmationHandler` now runs outside`DEFAULT_ROUTE`, adds exempt routes, and closes modals beforenavigating.> - **Modals**: New `useModalState` hook and `Modals` container torender `NetworkListMenu`; routes integrate `Modals` and remove inlinenetwork menu handling.> - **App state**: Add `CLOSE_NETWORK_MENU` action/reducer; export`closeNetworkMenu`; add selector `selectIsNetworkMenuOpen`.> - **Cleanup**: Remove unused sidepanel/env and swaps props in`home.container`.> - **Manifests/Build**:>   - Add `"sidePanel"` permission and Chrome `side_panel.default_path`.>   - Set `IS_SIDEPANEL: true` for main build.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commita91ea96. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->[3c42ac3](3c42ac3)Co-authored-by: Francis Nepomuceno <n3ps@users.noreply.github.com>
@metamaskbot
Copy link
CollaboratorAuthor

Builds ready [20fc3c6]
UI Startup Metrics (1217 ± 99 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1217100915399912871393
load102186713138810721183
domContentLoaded101686213108710641176
domInteractive251588182178
firstPaint4879712353869891129
backgroundConnect21419325913221238
firstReactRender321968113756
getState3916119214495
initialActions103112
loadScripts807662106183842977
setupStore1152641319
numNetworkReqs1257820573
BrowserifyPower User HomeuiStartup20831680263923021862579
load1022896148412710341361
domContentLoaded1008886147412710221352
domInteractive34171382534102
firstPaint57310514864099761341
backgroundConnect258201675105231542
firstReactRender5940119156496
getState19013965353204244
initialActions106112
loadScripts80068012661278131146
setupStore19104362232
numNetworkReqs1666938368200323
WebpackStandard HomeuiStartup8277041052788651000
load64357488672669818
domContentLoaded63856987971663812
domInteractive29151733022118
firstPaint21584885152202671
backgroundConnect1153471227
firstReactRender27204363138
getState251361103247
initialActions103112
loadScripts63656787070661803
setupStore1053241217
numNetworkReqs1257620571
WebpackPower User HomeuiStartup16911294272427919472160
load6745871212101670936
domContentLoaded6655801204101663931
domInteractive37181803532156
firstPaint2951101223223266777
backgroundConnect96763418419565
firstReactRender6245106116784
getState18113267873180234
initialActions104113
loadScripts662577119599661923
setupStore211171122345
numNetworkReqs1637041678206381
FirefoxBrowserifyStandard HomeuiStartup13331122190214614061614
load108893913488911481257
domContentLoaded108793713478911471257
domInteractive61311783283134
firstPaint------
backgroundConnect50212384248129
firstReactRender24195362438
getState137150151229
initialActions103123
loadScripts105892112888111171187
setupStore185254371191
numNetworkReqs1256717663
BrowserifyPower User HomeuiStartup26921921473559228344388
load1182936265325711591575
domContentLoaded1181936265325711551575
domInteractive11733575117101446
firstPaint------
backgroundConnect145261164186126510
firstReactRender62361492163110
getState284761017227316786
initialActions2137423
loadScripts1127916216018911141542
setupStore1478803178158622
numNetworkReqs101613046280241
WebpackStandard HomeuiStartup15101275193214015701812
load12431069152210113111428
domContentLoaded12431068152210113111428
domInteractive63272183586122
firstPaint------
backgroundConnect44191602743111
firstReactRender27209282839
getState127135131225
initialActions104122
loadScripts1218105314949612771393
setupStore156102161444
numNetworkReqs1156616756
WebpackPower User HomeuiStartup30082166520974330214860
load14501160291135314112721
domContentLoaded14501160291035314102720
domInteractive11431500108108403
firstPaint------
backgroundConnect1642816292701261150
firstReactRender69432113070152
getState336371029258541879
initialActions208123
loadScripts13561135190116713681761
setupStore15681155225154633
numNetworkReqs101572555880240

@gauthierpetetin
Copy link
Contributor

@SocketSecurity ignore npm/@babel/plugin-proposal-private-methods@7.18.6
This is a transitive dependency of eslint-plugin-react-compiler@npm:^19.1.0-rc.2. We'll be able to remove the deprecated version from the dependency tree once we upgrade to React v18-19, and then to an up-to-date version of eslint-plugin-react-compiler.

@SocketSecurity ignore npm/async-function@1.0.0 npm/string.prototype.repeat@1.0.0
New authors are reputable with significant contribution history in related packages.

(this comment was posted by@MajorLift onthis PR)

socket-security[bot] reacted with thumbs up emoji

@gauthierpetetin
Copy link
Contributor

@SocketSecurity ignore npm/http-errors@2.0.1 npm/statuses@2.0.2 npm/type-is@2.0.1
ulisesgascon is a reputable maintainer.

@SocketSecurity ignore npm/async-function@1.0.0
ljharb is a reputable maintainer.

(this comment was posted by@MajorLift onthis PR)

socket-security[bot] reacted with thumbs up emoji

@metamaskbot
Copy link
CollaboratorAuthor

Builds ready [581d9a3]
UI Startup Metrics (1215 ± 103 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup12151013154310312881373
load102686413639410731193
domContentLoaded102086113549310671188
domInteractive2515113192176
firstPaint55685121340510151174
backgroundConnect21519124611222237
firstReactRender291976113152
getState301675103649
initialActions105112
loadScripts812656113291860980
setupStore1153041320
numNetworkReqs1257820572
BrowserifyPower User HomeuiStartup21141731343027423142602
load1019902189115310141409
domContentLoaded100588918791539941401
domInteractive38172483535130
firstPaint51812814803879501305
backgroundConnect263201756119234585
firstReactRender5639116126179
getState18813469075193243
initialActions104112
loadScripts79768616521527841194
setupStore19104762327
numNetworkReqs1686541674201367
WebpackStandard HomeuiStartup810685101679857959
load62354686471655783
domContentLoaded61854185670650776
domInteractive2514114232091
firstPaint23573861167201667
backgroundConnect1164171129
firstReactRender27197083040
getState251259103439
initialActions104111
loadScripts61653984969648768
setupStore1062741318
numNetworkReqs1257820572
WebpackPower User HomeuiStartup17351272242626319802169
load6895931198104693978
domContentLoaded6785861177104677972
domInteractive38181553037129
firstPaint2781051209202263732
backgroundConnect128869621574627
firstReactRender634596117085
getState18213372878186208
initialActions103112
loadScripts6755841167102675962
setupStore20564112248
numNetworkReqs1667039775207358
FirefoxBrowserifyStandard HomeuiStartup12841094182914213321599
load105593815869611051227
domContentLoaded105593815869611051227
domInteractive57311462781109
firstPaint------
backgroundConnect45222013241125
firstReactRender23184862338
getState127187191026
initialActions102122
loadScripts102992214508210771147
setupStore125182181034
numNetworkReqs1156516661
BrowserifyPower User HomeuiStartup26361759474248627743840
load1178966168116212051611
domContentLoaded1177965168116212041611
domInteractive12237626115111444
firstPaint------
backgroundConnect11528614100114347
firstReactRender62392082464100
getState313651108236423829
initialActions208137
loadScripts1137937164314611571531
setupStore17310761182217628
numNetworkReqs101603206282245
WebpackStandard HomeuiStartup15471292223117116311924
load12741074168811613541481
domContentLoaded12741073168711613541481
domInteractive72251913496133
firstPaint------
backgroundConnect48192183048112
firstReactRender27217982837
getState147109171330
initialActions103122
loadScripts12461060165710813121440
setupStore156132171455
numNetworkReqs1257317762
WebpackPower User HomeuiStartup29682244495267531504695
load13991092278024914541824
domContentLoaded13981092278024914521824
domInteractive11430527117102476
firstPaint------
backgroundConnect146341172174150411
firstReactRender69402653269125
getState283851223227312810
initialActions3043527
loadScripts13431073269021613431757
setupStore14091144199135597
numNetworkReqs102532536179242

…responsive timeout cp-13.12.0 (#38409)- chore: increase background connection unresponsive timeout (#38322)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**We are increasing the timeout value of our "Background connectionunresponsive" error screen to test if this screen is happening becauseit ACTUALLY can't connect, or if these incidents are just from slowdevices.[![Open in GitHubCodespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/38322?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: chore: increase background connection unresponsivetimeout<!--## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**### **Before**### **After**-->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Increase background connection unresponsive timeout from 10s to 15sand update the corresponding E2E test delay.> > - **Startup error handling**:> - Raise `BACKGROUND_CONNECTION_TIMEOUT` to `15_000` in`ui/helpers/utils/critical-startup-error-handler.ts`.> - **E2E tests**:> - Adjust delay to `15_000` in`test/e2e/tests/critical-errors/critical-errors.spec.ts` forunresponsive background case.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commita5318b0. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->[c244b34](c244b34)Co-authored-by: David Murdoch <187813+davidmurdoch@users.noreply.github.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>
@metamaskbot
Copy link
CollaboratorAuthor

Builds ready [c07b2a0]
UI Startup Metrics (1228 ± 111 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup12281028150711113031411
load1038855130010010901219
domContentLoaded103285012939910821211
domInteractive251591182181
firstPaint58275125641310311183
backgroundConnect21819726816225254
firstReactRender27195282950
getState3416151213865
initialActions102112
loadScripts8226531082968681002
setupStore1162231217
numNetworkReqs1257720573
BrowserifyPower User HomeuiStartup20711668280124521272666
load1030889149912910331380
domContentLoaded1014884147712810151372
domInteractive3419144243496
firstPaint5169515073999631344
backgroundConnect260202635102231565
firstReactRender6041124156297
getState18813872677190259
initialActions105112
loadScripts80568812701278091171
setupStore19105372334
numNetworkReqs1236731762130270
WebpackStandard HomeuiStartup796674111288833967
load61753885374639789
domContentLoaded61253384674634782
domInteractive2414109211984
firstPaint25578789184259652
backgroundConnect1053451224
firstReactRender2819198182941
getState231258103042
initialActions103112
loadScripts60953183772632775
setupStore1063441318
numNetworkReqs1257720573
WebpackPower User HomeuiStartup15671212233625118262014
load640552112097642885
domContentLoaded630543111398629879
domInteractive32171392629113
firstPaint3191042662303385701
backgroundConnect80659016818532
firstReactRender59419196475
getState18313470273184226
initialActions103112
loadScripts628541110496627870
setupStore18755111947
numNetworkReqs1676740280208384
FirefoxBrowserifyStandard HomeuiStartup12331083156711313041488
load102691313368410831203
domContentLoaded102591313368410781198
domInteractive52301282574106
firstPaint------
backgroundConnect3720138243597
firstReactRender22175372244
getState1165291036
initialActions102012
loadScripts100389813077910461185
setupStore105396921
numNetworkReqs1156515659
BrowserifyPower User HomeuiStartup26451972528265027144303
load1197933278934711652414
domContentLoaded1197926278734711652414
domInteractive11333531110107414
firstPaint------
backgroundConnect140281268207118503
firstReactRender59361732260119
getState24160769167260651
initialActions217123
loadScripts1129915236522711221558
setupStore189111242247193738
numNetworkReqs100613246080241
WebpackStandard HomeuiStartup15711311211216016631892
load1286109015729513431464
domContentLoaded1286109015719513431464
domInteractive67261363296122
firstPaint------
backgroundConnect53171362958119
firstReactRender28218672938
getState196203321586
initialActions103122
loadScripts1255105714988713121400
setupStore16691171460
numNetworkReqs1256516765
WebpackPower User HomeuiStartup30732369518466531165033
load14821223300126015751958
domContentLoaded14821223300026015731957
domInteractive12635614134106531
firstPaint------
backgroundConnect151341060163129548
firstReactRender65451201569103
getState36675971255582906
initialActions3188937
loadScripts14161148200019915011862
setupStore198141287243307685
numNetworkReqs100632455978235

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

Reviewers

@HowardBrahamHowardBrahamAwaiting requested review from HowardBrahamHowardBraham will be requested when the pull request is marked ready for reviewHowardBraham is a code owner

@dbransdbransAwaiting requested review from dbransdbrans will be requested when the pull request is marked ready for reviewdbrans is a code owner

At least 1 approving review is required to merge this pull request.

Assignees

No one assigned

Labels

release-13.12.0Issue or pull request that will be included in release 13.12.0team-botsBot team (for MetaMask Bot, Runway Bot, etc.)

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

43 participants

@metamaskbot@gauthierpetetin@MoMannn@ulissesferreira@sophieqgu@itsyoboieltr@OGPoyraz@VGR-GIT@Gudahtt@salimtb@gantunesr@lionellbriones@smgv@bergarces@jpuri@Prithpal-Sooriya@aganglada@tuna1207@ccharly@ghgoodreau@n3ps@jvbriones@FrederikBolding@lwin-kyaw@seaona@micaelae@david0xd@georgewrmarshall@DDDDDanica@hieu-w@alidotforrest@davidmurdoch@NidhiKJha@yilmazbahadir@dan437@LeVinhGithub@cryptotavares@Battambang@cryptodev-2s@MajorLift@mathieuartu@khanti42

[8]ページ先頭

©2009-2025 Movatter.jp