-
Notifications
You must be signed in to change notification settings - Fork 5.4k
release: 13.9.0 #37598
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: stable
Are you sure you want to change the base?
release: 13.9.0 #37598
Conversation
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Update default slippage value for bridge quotes from 0.5 to 2%. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37367?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: chore: update default bridge slippage to 2% ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Sets bridge default slippage to 2% via SlippageValue enum and updates UI logic and tests accordingly. > > - **Bridge logic**: > - Replace `BRIDGE_DEFAULT_SLIPPAGE` with `SlippageValue` enum; set `BridgeDefault = 2` and use in `ui/ducks/bridge/bridge.ts` initial state. > - Update slippage calculation to treat cross-chain as `2%` in `ui/pages/bridge/utils/slippage-service.ts`. > - **UI**: > - Use `SlippageValue` in `bridge-transaction-settings-modal.tsx`; hardcoded options now `[EvmStablecoin(0.5), BridgeDefault(2)]` and default selection uses `BridgeDefault`. > - **Tests**: > - Update unit tests in `ui/ducks/bridge/bridge.test.ts` to expect `SlippageValue.BridgeDefault`. > - Adjust e2e analytics assertion in `test/e2e/tests/metrics/bridge.spec.ts` to expect `18` `SwapBridgeInputChanged` events. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 5bf8097. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37086?quickstart=1) Adds support for sig_params in deeplinks ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: MetaMask/MetaMask-planning#6017 ## **Manual testing steps** 1. sig_params should work according to the agreed spec ## **Screenshots/Recordings** Not applicable ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Introduce `sig_params` support in deep link canonicalization, parsing, signing, and tests to allow selectively signed/forwarded query params. > > - **Deep Links**: > - **Canonicalization**: Enhance `canonicalize` to honor `sig_params` — keep only listed query params (preserving repeats), append `sig_params`, sort, and remove `sig`; fallback to previous behavior when `sig_params` is absent. > - **Parsing**: Use canonicalized URL, strip `sig_params` before invoking route handlers, and verify against the original URL. > - **Constants**: Add `SIG_PARAMS_PARAM` (`sig_params`). > - **Tests**: > - **Unit**: Add cases for `sig_params` filtering, repetition preservation, non-mutation; adjust `parse` tests to pass empty params to handlers when only signature present. > - **E2E**: Expand scenarios for signed-with/without `sig_params` and unsigned; add assertions that only allowed params flow through; add `getHashParams` helper; update redirects to ignore query in expectations. > - **Helpers**: > - Update `signDeepLink` to optionally append `sig_params` (derived from current params) and sign the full URL; add imports and sorting adjustments. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f889979. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…37390) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> The reason for the test failure is that when calling `clickFooterConfirmButtonAndAndWaitForWindowToClose`, the window does not close after clicking the confirm button. This behavior is correct, because multiple confirmation windows are open, the next test step checks the display of the next confirmation screen. Therefore, we should not use `clickFooterConfirmButtonAndAndWaitForWindowToClose`. The fix is to use `clickFooterConfirmButton` instead. Why the test was flaky instead of consistently failing? Because in the test spec, we use `if` conditions to check and confirm the confirmation screens. Since the send calls are triggered at the same time, the order in which the confirmation screens appear can vary. The test verifies the displayed information on confirmation screen regardless the screen order. If the flow goes into a different `if` block, the test passes; however, if it follows this particular `if` block, the test fails. I also improved the function `checkIsSenderAccountDisplayed` to use `waitForSelector` to be more stable. I ran this test 10 times and they all passed. [](https://codespaces.new/MetaMask/metamask-extension/pull/37390?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. test should be stable and pass ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Stabilizes multichain E2E by avoiding window-close waits during sequential confirmations and making sender-account checks wait-based. > > - **E2E Tests (`test/e2e/flask/multichain-api/evm/wallet_invokeMethod.spec.ts`)** > - For the second confirmation flow, replace `clickFooterConfirmButtonAndAndWaitForWindowToClose` with `clickFooterConfirmButton` to proceed without waiting for the window to close when multiple dialogs are pending. > - **Page Object (`test/e2e/page-objects/pages/confirmations/redesign/transaction-confirmation.ts`)** > - Make `checkIsSenderAccountDisplayed` more robust by using `waitForSelector` with try/catch, returning a boolean after waiting for the sender account element. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c92f5cb. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ng onboarding` (#37374) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** The test fails because sometimes the 10ETH balance is not converted to fiat. The reason is because the crypto compare request is not being mocked. Then we see `No conversion rates`. We sometimes see the fiat value if the network switch happens fast, and it takes the default mock for 1337, instead of the new custom network 1338 <img width="1910" height="106" alt="image" src="https://github.com/user-attachments/assets/e2c23373-c711-4f86-9834-36928d351532" /> <img width="2050" height="564" alt="image" src="https://github.com/user-attachments/assets/a29edb70-9f6e-4a2f-a11b-3de0e2156c7c" /> <img width="1152" height="785" alt="image" src="https://github.com/user-attachments/assets/6f69043d-58d5-407c-906a-93772a7d563c" /> [](https://codespaces.new/MetaMask/metamask-extension/pull/37374?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Mocks CryptoCompare pricing and updates the onboarding custom network e2e to assert fiat balance without network switching. > > - **E2E Onboarding Tests**: > - **Mocks**: Extend `tokensMock` to also mock `https://min-api.cryptocompare.com/data/pricemulti` for `ELY -> USD` pricing. > - **Custom Network Test (`onboarding.spec.ts`)**: > - Use `testSpecificMock: tokensMock` in fixtures to provide NFT and price mocks. > - Remove `switchToNetworkFromSendFlow` usage and import; directly assert fiat balance `17,000.00` and verify add-network message. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7c024d6. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Prevents jumpy UI updates when quotes are being streamed - wait for quote request to finish loading before scrolling to alert banners - show loading CTA and disable submit button while quotes load so user can view any tx warnings before submitting a trade <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37336?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix: defer UI actions until swap SSE quotes are fully loaded ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/SWAPS-3027 ## **Manual testing steps** 1. Get quotes for <$10 of any ethereum token to sol:USDC 2. Wait 30s for quotes to refresh 3. The Swap button should be disabled while quotes are loading 4. Page should only scroll to the bottom after quotes are finished loading ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Disables submit and warning auto-scroll while quotes load, tweaks countdown display, switches analytics to use isTxSubmittable, removes an unused NetworkController action, and bumps bridge-controller to ^56.0.3. > > - **Bridge UI**: > - **CTA behavior**: `BridgeCTAButton` now disabled during `isLoading`; adds tests (including parametric cases) and snapshots updated. > - **Alerts/scrolling**: `prepare-bridge-page` avoids scrolling to warning banners while quotes are loading. > - **Countdown**: `useCountdownTimer` initializes with `refreshRate + STEP` and offsets by `STEP` (snapshots show 0:31/0:06). > - **Analytics**: `useQuoteFetchEvents` uses `useIsTxSubmittable` for `can_submit` and keeps other quote metrics. > - **Controllers/Messaging**: > - Removes `NetworkController:getState` from `AllowedActions` and delegated actions in `bridge-controller-messenger`. > - **Dependencies**: > - Bumps `@metamask/bridge-controller` to `^56.0.3` (lockfile updated). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit a74b6de. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Bryan Fullam <bryan.fullam@consensys.net>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** - Updated font color of upload file list: color is a little dim - Update accepted files text for claims form: removed `.` and capitalization - Skip only invalid files instead of blocking all files being added https://consensyssoftware.atlassian.net/browse/SUBS-671 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37353?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: UI and functionality improvement for file uploader ## **Related issues** Fixes: ## **Manual testing steps** File uploader 1. Can be tested on storybook `Components/ComponentLibrary/FileUploader` 2. Set `maxFileSize` to `1048576` (1MB) 3. Upload multiple files including file with >1MB 4. Only files below 1MB will be added 5. Error message will show 6. Check file list -- font color should be text default color Claims form 1. Login/Create an account with shield subscription 2. Go to Menu > Settings > Transaction Shield 3. Click on `Submit a claim` 4. Check file upload component 5. Copywriting should be changed (see screenshot) ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** Copywriting of the accepted files and font color of file list will be changed <img width="756" height="313" alt="Screenshot 2025-10-29 at 6 43 19 PM" src="https://github.com/user-attachments/assets/ec2838f1-3242-4614-b4d2-abd4c574cdf7" /> Blocks all files uploaded if one fails https://github.com/user-attachments/assets/49a5144a-6b43-4ee8-8c1e-0ca5aed42f13 <!-- [screenshots/recordings] --> ### **After** <img width="751" height="319" alt="Screenshot 2025-10-29 at 6 53 03 PM" src="https://github.com/user-attachments/assets/d4e557b1-58e2-48b6-a463-236a8597d201" /> Blocks only invalid files https://github.com/user-attachments/assets/3c47a901-50a4-4922-914f-d07fbb138963 <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > File uploader now adds valid files while skipping invalid ones, updates file list styling, and the claims form/i18n now show a parameterized max file size. > > - **File Uploader (`ui/components/component-library/file-uploader/file-uploader.tsx`)**: > - Validation now skips only invalid/duplicate files instead of aborting on first error; still surfaces an error message. > - Emitted files always combine existing + newly valid files; refactored to use helper `createFileList` path. > - UI tweaks: default text color for filenames; removed explicit icon/text alternative colors. > - **Claims Form (`ui/pages/.../submit-claim-form.tsx`)**: > - Introduces `MAX_FILE_SIZE_MB`/`MAX_FILE_SIZE_BYTES`; passes `maxFileSize` (bytes) to `FileUploader`. > - Updates `acceptText` to include the max size via i18n placeholder; keeps accepted types. > - **i18n (`app/_locales/en*/messages.json`)**: > - `shieldClaimFileUploaderAcceptText` updated to "PDF, PNG, JPG (Max $1MB)" with new placeholder description. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e188b3e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## Version Bump After Release This PR bumps the main branch version from 13.8.0 to 13.9.0 after cutting the release branch. ### Why this is needed: - **Nightly builds**: Each nightly build needs to be one minor version ahead of the current release candidate - **Version conflicts**: Prevents conflicts between nightlies and release candidates - **Platform alignment**: Maintains version alignment between MetaMask mobile and extension - **Update systems**: Ensures nightlies are accepted by app stores and browser update systems ### What changed: - Version bumped from `13.8.0` to `13.9.0` - Platform: `extension` - Files updated by `set-semvar-version.sh` script ### Next steps: This PR should be **manually reviewed and merged by the release manager** to maintain proper version flow. ### Related: - Release version: 13.8.0 - Release branch: release/13.8.0 - Platform: extension - Test mode: false <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Bumps `package.json` version from 13.8.0 to 13.9.0. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e5c08fa. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> 1. References of Transaction Shield are missing in many places in Shield screens. 2. Update them - add links in "View full benefits" in Shield settings - add links in Shield claims - add links in Shield entry modal [](https://codespaces.new/MetaMask/metamask-extension/pull/37380?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds `TRANSACTION_SHIELD_LINK` and updates Shield UI to open external learn/benefits pages and navigate users to Activity for TX hash help. > > - **UI/Links**: > - Add `TRANSACTION_SHIELD_LINK` in `ui/helpers/constants/common.ts`. > - `ui/components/app/shield-entry-modal/shield-entry-modal.tsx`: Replace placeholder learn-more href with `TRANSACTION_SHIELD_LINK`. > - `ui/pages/settings/transaction-shield-tab/transaction-shield.tsx`: View benefits opens `TRANSACTION_SHIELD_LINK` in new tab. > - **Claims form UX**: > - `ui/pages/settings/transaction-shield-tab/submit-claim-form/submit-claim-form.tsx`: > - Update "here" link to `TRANSACTION_SHIELD_LINK` (opens in new tab). > - Change impacted TX hash help from dummy link to action: dispatch `setDefaultHomeActiveTabName('activity')` and navigate to `DEFAULT_ROUTE`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4cc6db5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…37347) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This PR fixes a race condition that prevented approval changes from being displayed in transaction simulations. Previously, the UI could render before the static (decoded) changes were ready, causing missing approval data. With this update, the component now waits for static changes to finish decoding before rendering, ensuring approval simulations are displayed consistently. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37347?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Fixed issue where approval changes were sometimes missing in transaction simulations for batch transactions. ## **Related issues** Fixes: MetaMask/MetaMask-planning#6116 ## **Manual testing steps** 1. Trigger a batch request for approve + approve + swap on Uniswap 2. Sometimes you won't see Approve within simulations ## **Screenshots/Recordings** [save-approve-simulation.webm](https://github.com/user-attachments/assets/e28b9357-9d54-4890-9457-7738fd99a18f) <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Defers rendering of batch simulation details and edit modal until approve balance changes finish loading, and updates tests to mock the new pending state. > > - **Confirmations UI**: > - `BatchSimulationDetails`: reads `pending` from `useBatchApproveBalanceChanges` and hides `SimulationDetails` and `EditSpendingCapModal` while approvals are loading. > - **Tests**: > - Add mocks for `useBatchApproveBalanceChanges` in `base-transaction-info.test.tsx` and `info.test.tsx`. > - Extend `batch-simulation-details.test.tsx` with a case ensuring no UI renders when `pending: true` and adjust existing tests to supply `pending` flag. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 109aae3. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Currently the `main.yml` workflow only runs once per combination of workflow and branch. Usually if a new commit is pushed to a branch, the CI run on the previous commit is no longer relevant. However that's not true on main. Getting a full CI run for every commit on main is critical for investigating CI failures that somehow make their way to main (e.g. flaky test failures). The concurrency group ID has been updated to use the SHA as the ID on just the main branch, ensuring new commits don't cancel CI workflows for previous commits. Based on mobile one: MetaMask/metamask-mobile#21893 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37395?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Update GitHub Actions concurrency group to use commit SHA on `main`, enabling concurrent CI runs per commit on the main branch. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 0ed9612. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Jest is resource hungry and because of that it is advised to fine tune parallelization config in order to get the most of reliability and speed of execution. Not setting it up entirely can lead to random timeout issues, longer run times, etc. See the troubleshoot from Jest itself - https://jestjs.io/docs/troubleshooting#tests-are-extremely-slow-on-docker-andor-continuous-integration-ci-server Or the performance analysis on jest runners done by Adobe - https://medium.com/adobetech/improve-jest-runner-performance-a8f56708ba94 This PR is just an initial setup, but we need to fine tune the config for both local and CI execution. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37381?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Set Jest integration tests to use maxWorkers '50%' in `jest.integration.config.js` to limit concurrency. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ad45ba0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
… multiple SRPs and sync them` (#37410) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** A PR which changes the text from Create Account to Add Account was merged yesterday: #37288 This introduces flakiness in our e2e, as we had a condition to mitigate flakiness, which relied on Creating Account message which now has changed. This PR updates the copy, so we mitigate the flakiness again. See in the logs how we waited for Creating account .. and since this message is never there anymore, we jump into the next step causing the spec to fail. We should wait until the account creating has completed, by using the new copy. <img width="1018" height="195" alt="image" src="https://github.com/user-attachments/assets/982a32ef-79b7-4d12-8caf-6545f60f0100" /> <img width="1152" height="785" alt="image" src="https://github.com/user-attachments/assets/718bac6e-5fe9-412c-b47f-b3bb475e1a3b" /> [](https://codespaces.new/MetaMask/metamask-extension/pull/37410?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Updates e2e selector to check for `Adding account...` instead of `Creating account...` before opening the multichain account menu. > > - **Tests (e2e)** > - In `test/e2e/page-objects/pages/account-list-page.ts`: > - Replace `creatingAccountMessage` with `addingAccountMessage` (`'Creating account...'` -> `'Adding account...'`). > - Update `openMultichainAccountMenu` to assert absence of `addingAccountMessage` before proceeding. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2a8f851. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Fixes the icons and the auto selection logic for the gas station modal. [](https://codespaces.new/MetaMask/metamask-extension/pull/37352?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: #37120 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Improve gas fee token icon rendering and refine auto-selection logic with expanded async tests; increase e2e toast close timeout. > > - **UI**: > - `ui/pages/.../gas-fee-token-icon.tsx`: Display ERC-20 token icons from store (`selectERC20TokensByChain` `iconUrl`) when available; fallback to `PreferredAvatar`; keep native token rendering via `AvatarToken`; size mapping via `AvatarAccountSize`. > - **Logic**: > - `useAutomaticGasFeeTokenSelect`: Only set `firstCheck` to `false` after successfully selecting the first eligible token; supports selection on rerender when eligibility changes (insufficient balance, gasless support, 7702/native handling). > - **Tests**: > - `useAutomaticGasFeeTokenSelect.test.ts`: Convert to async with `flushPromises`, add assertions for `forceUpdateMetamaskState`, cover rerender/eligibility and 7702/native scenarios. > - **E2E**: > - `transaction-confirmation.ts`: Increase toast close `clickElementSafe` timeout to `10000` for stability. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1b1e382. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR adds back the connection indicators to the account avatar [](https://codespaces.new/MetaMask/metamask-extension/pull/36423?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Re-add connection indicator to bip44 account cell ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MUL-1087?atlOrigin=eyJpIjoiZWZlY2YxNTE3MjA1NDIwODlkOGYwMjdlOTBhNzU0MzUiLCJwIjoiaiJ9 https://consensyssoftware.atlassian.net/browse/TMCU-161 ## **Manual testing steps** 1. Open MM and DaPP 2. Connect multiple accounts 3. Go back to Account List 4. Notice the green dots on connection status. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> **Selected connected account** <img width="399" height="596" alt="Screenshot 2025-10-28 at 10 43 33" src="https://github.com/user-attachments/assets/8c27b62d-518f-46f1-8dc1-fe83b77e5f5e" /> **Selected not connected account** <img width="401" height="596" alt="Screenshot 2025-10-28 at 10 43 44" src="https://github.com/user-attachments/assets/bc1f0674-e8b7-4708-94aa-224ec0e35de0" /> **Unconnected dapp** <img width="402" height="596" alt="Screenshot 2025-10-27 at 11 19 23" src="https://github.com/user-attachments/assets/2e364f07-65df-4b17-af23-05b4be219c36" /> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Restores and wires connection indicators on multichain account avatars using current tab permissions, with list/page integration and comprehensive tests/stories. > > - **Multichain Accounts UI**: > - `MultichainAccountCell`: Replaces `PreferredAvatar` with `ConnectedStatus`; adds optional `connectionStatus` prop (`STATUS_CONNECTED` | `STATUS_CONNECTED_TO_ANOTHER_ACCOUNT`) to control badge; maintains selection/privacy behavior. > - `MultichainAccountList`: Adds `showConnectionStatus` prop; derives permitted addresses from `getAllPermittedAccountsForCurrentTab`, maps to connected account groups via `getAccountGroupsByAddress`, and passes computed `connectionStatus` to each `MultichainAccountCell`. > - `AccountList` page: Enables `showConnectionStatus` when there are permitted accounts for the active tab. > - **Connected Status Logic**: > - `ConnectedStatus`: Updated to support state2 via `getIsMultichainAccountsState2Enabled` and `getAccountGroupsByAddress`; determines connected/active vs connected-to-another and sets badge/tooltip accordingly. > - **Tests & Stories**: > - Adds/updates tests for badge presence, color/state, tooltips in `multichain-account-cell` and `multichain-account-list`; updates snapshots; injects `activeTab` in stories/tests; minor fixture updates (e.g., `send.test`, confirmation util). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 127bdf6. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Patryk Lucka <5708018+PatrykLucka@users.noreply.github.com>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> The network request code within the client makes use of the circuit breaker pattern. Currently, there must be 28 consecutive failed attempts to hit an RPC endpoint before the circuit breaks and it is perceived to be unavailable. At this point, if the endpoint is configured with a failover, the failover will be activated and all requests will be automatically diverted to it; otherwise requests are paused for 30 minutes. There are two problems we are seeing now: - If Infura is degraded enough to where failing over to QuickNode is warranted, the failover may be activated too late. - If the user is attempting to access a custom network and they are experiencing issues (either due to a local connection issue or an issue with the endpoint itself), they will be prevented from using that network for 30 minutes. This is way too long. To fix these problems, this commit: - Lowers the "max consecutive failures" (the number of successive attempts to obtain a successful response from an endpoint before requests are paused or the failover is triggered) from 28 to 8. - Lowers the "circuit break duration" (the period during which requests to an unavailable endpoint will be paused) from 30 minutes to 30 *seconds*. In summary, if a network starts to become degraded or the user is experiencing connection issues, the network is more likely to be flagged as unavailable, but if the situation improves the user may be able to use the network more quickly. How quickly does the circuit break now? It depends on whether the user is using Chrome or Firefox and whether the errors encountered are retriable or non-retriable: - Retriable errors (e.g. connection errors, 502/503/504, etc.) will, as the name implies, be automatically retried. If these errors are continually produced, the circuit will break very quickly (if the extension is restarted, then it will break immediately). - Non-retriable errors (e.g. 4xx errors) do not get automatically retried, so it takes longer for the circuit to break (if the extension is restarted, on average it will take about 1 minute). - Note that Chrome implements "anti-DDoS throttling logic" which means that some non-retriable errors will turn into retriable errors. In this situation the circuit breaks faster than it would on Firefox. [](https://codespaces.new/MetaMask/metamask-extension/pull/37002?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Decrease time before activating QuickNode when Infura is degraded or unavailable; decrease time before allowing users to interact with a custom network following connection issues ## **Related issues** - https://consensyssoftware.atlassian.net/browse/WPC-103 ## **Manual testing steps** ### Prerequisites 1. Install [FoxyProxy](https://chromewebstore.google.com/detail/foxyproxy/gcknhkkoolaabfmlnjonogaaifnjlfnp). Pin it. 2. Open the options for FoxyProxy (click on its icon and go to Options). 3. Click on the Proxies tab, then click on Add. A new box should appear. 4. Under "Hostname", enter `localhost`; under "Port", enter `8080`; enter some name in "Title". 5. Next to "Proxy by Patterns", click the plus icon. You should see a new row appear. 6. In the `://example.com` field, enter `https://*.infura.io/*`; in the "title" field, enter some name, like "Localhost". (This will ensure that only requests to Infura go through the proxy.) 8. Install [`mitmproxy`](https://docs.mitmproxy.org/stable/overview/installation/). 10. Create a Python script somewhere on your computer with the following contents: https://gist.github.com/mcmire/1d43ce690d3a974217126cd584f79b7d. This script will cause all requests to Infura RPC endpoints to respond with 500, simulating an outage. 11. Run `mitmproxy -s <path to your script>` in an open terminal session. This will run the proxy server. 12. Go back to FoxyProxy and enable the proxy you created earlier by clicking on the icon, then choosing the name of the new proxy (e.g. Localhost). 13. Check out this branch. Run `yarn`, then `yarn start`. 14. Ensure that you've added the local version of MetaMask to your browser and no other versions are present. 15. Open MetaMask, and go through onboarding. 16. Open the DevTools for the extension (Chrome: go to Extensions, find MetaMask, click on "service worker"; in Firefox, go to `about:debugging`, find MetaMask, click on "Inspect"). ### Testing non-retriable errors 1. Ensure that in the `mitmproxy` script, all Infura endpoints return 500. 2. Restart the extension. 3. Switch to DevTools. You should see request errors like "RPC endpoint not found or unavailable" in the Console view. 5. Open MetaMask and switch to full-screen view so that it stays open. 6. Switch back to DevTools and wait. After about 20 seconds, you should see errors that say "RPC endpoint returned too many errors". ### Testing retriable errors 1. Stop `mitmproxy`. Modify the script so that all Infura endpoints return 503 instead of 500. Restart it. 2. Restart the extension. 3. Switch to DevTools. You should see a flurry of messages, and at the end you should see an error that says "RPC endpoint returned too many errors". ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** #### Chrome In this video, the endpoint continually responds with 500 (a non-retriable error): https://github.com/user-attachments/assets/fc8956d2-ec43-4ba6-a4c0-8e68b72b90c4 In this video, the endpoint continually responds with 503 (a retriable error): https://github.com/user-attachments/assets/d449e404-d755-4d81-be94-0bee44174354 #### Firefox In this video, the endpoint continually responds with 500 (a non-retriable error): https://github.com/user-attachments/assets/6500f3a2-b0e8-459f-86f6-20f15044ecda In this video, the endpoint continually responds with 503 (a retriable error): https://github.com/user-attachments/assets/84361615-e6a9-48a0-aab4-13ca016eec2e ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Tightens RPC circuit-breaker settings by using DEFAULT_MAX_RETRIES, setting a 30s cooldown, and reducing maxConsecutiveFailures for QuickNode and other endpoints. > > - **Network Controller Init (`app/scripts/controller-init/network-controller-init.ts`)** > - Use `DEFAULT_MAX_RETRIES` for RPC retries. > - Introduce shared `policyOptions` with `circuitBreakDuration: 30 * SECOND`. > - Adjust `maxConsecutiveFailures`: > - QuickNode endpoints: `(maxRetries + 1) * 10`. > - Other endpoints: `(maxRetries + 1) * 3`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit bb71a1c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Fix token name truncation Long term, we need to handle this in a list item type of component [](https://codespaces.new/MetaMask/metamask-extension/pull/37429?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix: token name truncation ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="625" height="94" alt="BEFORE truncate fix" src="https://github.com/user-attachments/assets/815f0755-0fdc-4f91-ab0b-d38f8ddca9da" /> <!-- [screenshots/recordings] --> ### **After** <img width="619" height="100" alt="AFTER truncate fix" src="https://github.com/user-attachments/assets/681cd8bb-fb81-4477-b80a-ead8dc9f2597" /> <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds `min-w-0` to token title wrappers to allow proper name ellipsis; updates affected snapshots. > > - **Frontend** > - `ui/components/app/assets/token-cell/cells/token-cell-title.tsx`: Add `className="min-w-0"` to the outer and inner `Box` wrappers around `AssetCellTitle`/`Tag` to enable token name truncation. > - **Tests** > - Update snapshots reflecting layout changes in: > - `ui/components/app/assets/token-cell/__snapshots__/token-cell.test.tsx.snap` > - `ui/pages/asset/components/__snapshots__/asset-page.test.tsx.snap` > - `ui/pages/defi/components/__snapshots__/defi-details-list.test.tsx.snap` > - `ui/pages/defi/components/__snapshots__/defi-details-page.test.tsx.snap` > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit db41a4d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Cleanup the useless fallbacks in spread [](https://codespaces.new/MetaMask/metamask-extension/pull/37370?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Removes unnecessary `?? {}` fallbacks in object spread operations across controllers, tests, and UI code. > > - **Controllers** > - `app/scripts/controllers/onboarding.ts`: Replace `{ ...(this.state ?? {}) }` with `{ ...this.state }` in `registerOnboarding`. > - `app/scripts/controllers/preferences-controller.ts`: Initialize reducer accumulator with `{ ...lostIdentities }` instead of `{ ...(lostIdentities ?? {}) }`. > - **Tests** > - Update mock setup to spread `mockRequests` directly (remove `?? {}`) in multiple files under `test/integration`, including transaction confirmations, NFTs, DeFi, notifications, and swaps. > - **UI** > - `ui/components/app/modals/new-account-modal/new-account-modal.container.js`: Spread `state.appState.modal.modalState.props` directly. > - `ui/components/multichain/app-header/app-header.test.js`: Spread `stateChanges` directly during store setup. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7ec8907. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
### Handle backend error codes on UI
```
export type SubmitClaimErrorResponse = {
message: string;
errorCode: SubmitClaimErrorCode;
statusCode: number;
errorsDetails?: {
field: SubmitClaimField;
error: string;
errorCode: SubmitClaimErrorCode;
}[];
};
```
**General Errors**
- Errors which are not tied to specific form field.
- This errors are show using a toast.
**Field specific errors**
- This errors are found on `errorsDetails` inside error object from
claims post api response. It is shown to specific form field using the
`field` key
- Some errors outside the `errorDetails` maybe shown to a specific field
also and is handled through `ERROR_MESSAGE_MAP` which may contain a
`field` key also, if there is no `field` key on the item then we show it
in a toast
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
[](https://codespaces.new/MetaMask/metamask-extension/pull/37391?quickstart=1)
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: Handle claims submit backend errors
## **Related issues**
Fixes:
## **Manual testing steps**
1. Go to this page...
2.
3.
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
**Generic error**: no internet, backend is down
<video
src='https://github.com/user-attachments/assets/5782b670-1d70-4dd4-9a3f-435c837a10b1'
/>
**Field validation error**: _removed FE validation to demo_
<video
src='https://github.com/user-attachments/assets/98a55ae8-a779-4da1-ba32-8efbea5ae859'
/>
**Non field validation error but tied to a form field**
<video
src='https://github.com/user-attachments/assets/b032c476-daac-4b26-b27d-93d725d1a420'
/>
**General error shown on toast**
<video
src='https://github.com/user-attachments/assets/b22a9e3c-c16f-4ca5-9148-88c70a8643f2'
/>
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Implements structured backend error handling for the claim form with
field-level mapping, loading state, and updated i18n (including
parameterized submission window).
>
> - **UI/Forms**:
> - Refactor `submit-claim-form.tsx` to use typed fields and centralized
error handling via `ERROR_MESSAGE_MAP` and
`SUBMIT_CLAIM_FIELD_ERROR_MESSAGE_MAP`.
> - Add `VALID_SUBMISSION_WINDOW_DAYS` and render it in
`shieldClaimDetails` text.
> - Introduce `handleSubmitClaimError` to route backend errors to field
errors or toast; disable submit during loading and show `LoadingScreen`.
> - Fix error keying for `impactedTxHash` and add same-wallet-address
validation.
> - **Errors/Types**:
> - Add `SubmitClaimError` class (`claim-error.ts`).
> - Add `SUBMIT_CLAIM_FIELDS`, `SUBMIT_CLAIM_ERROR_CODES`, and
`SubmitClaimErrorResponse` in `types.ts`.
> - **Actions/Networking**:
> - Update `submitClaim` action to parse backend JSON, throw
`SubmitClaimError` with `errorCode`, and handle generic failures.
> - **i18n**:
> - Update `en`/`en_GB` locales: parameterize `shieldClaimDetails`
days/link; add messages for duplicate claim, file errors, max claims
limit, same wallet address, submission window expired; tweak ineligible
TX text.
> - Remove outdated `shieldClaimDetails` entry from `ga` locale.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e60dbf1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description** - Reduces by 2 the number of reusable workflows called by workflow `main` ([there's a limit of 20](https://docs.github.com/en/actions/reference/workflows-and-actions/reusing-workflow-configurations#limitations-of-reusable-workflows)) - This also has the effect of making everything run faster, due to fewer jobs and fewer `action-checkout-and-setup` steps - Folds the `Page Load Benchmark Results` PR comment into the other metamaskbot comment for less disruption ## **Changelog** CHANGELOG entry: null <!--## **Related issues** ## **Manual testing steps** ## **Screenshots/Recordings** ## **Pre-merge author checklist** ## **Pre-merge reviewer checklist**--> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Consolidates page-load benchmark into a single workflow with new artifact/filename, uploads historical data on main, and folds PR comment generation into the build announce with historical comparisons. > > - **CI/Workflows**: > - Replace `page-load-benchmark-pr` and remove `page-load-benchmark-upload`; use unified `page-load-benchmark` workflow with numeric inputs and required secret. > - Run benchmarks on PRs and main; upload artifact `page-load-benchmark-results` and, on `main`, commit stats to `extension_benchmark_stats`. > - Update `main.yml` to call `./.github/workflows/page-load-benchmark.yml` and gate publish on `page-load-benchmark`. > - In `publish-prerelease.yml`, download `page-load-benchmark-results` directly instead of using the deleted action. > - **Scripts**: > - Update `.github/scripts/benchmark-stats-commit.sh` to use `HEAD_COMMIT_HASH`, `OWNER`, and new results path `test-artifacts/benchmarks/page-load-benchmark-results.json`. > - **Bot Comment Integration**: > - Refactor `development/page-load-benchmark-pr-comment.ts` to export `getPageLoadBenchmarkComment` (no direct posting), wrap output in a collapsible section, and compare against recent `main` data with regression warnings. > - Integrate page-load benchmark comment into `development/metamaskbot-build-announce.ts` so a single MetaMask bot comment includes builds, benchmarks, and size diffs. > - **Artifacts/Paths**: > - Rename benchmark output file and artifact from `benchmark-results.json` → `page-load-benchmark-results.json` and update all references. > - **Tests/Docs**: > - Update Playwright spec and README to use the new results filename. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 424ed39. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Norbert Elter <72046715+itsyoboieltr@users.noreply.github.com>
## **Description** This PR makes several small optimizations and bug fixes to the way we capture metrics and display URLs for our phishing page. - **Improves consistency:** Metrics always uses `hostname` now. Previously, blockedUrl being set to `details.initiator` would add a `https://` prefix to our metrics (when it was a c2) whereas only `hostname` would be tracked otherwise - **Bug fix:** for c2 domain blocks, we previously would display the c2 itself on the phishing page and as the 'Proceed anyway' link. This PR changes it to use the actual domain that the request came from, in order to improve clarity for the user. - **Bug fix:** Fixes: MetaMask/MetaMask-planning#6038 ## Changelog CHANGELOG entry: fix: use correct href for phishing page proceed anyway button [](https://codespaces.new/MetaMask/metamask-extension/pull/36871?quickstart=1) ## **Screenshots/Recordings** ### **Before** **Website blocked by c2:** <img width="807" height="746" alt="image" src="https://github.com/user-attachments/assets/1bc48956-c978-4adf-b499-8c29fb2060ea" /> ### **After** **Website blocked by c2:** <img width="1159" height="796" alt="image" src="https://github.com/user-attachments/assets/d53f9c9d-01b2-4015-99dd-8ed1b87cb3dd" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Fixes phishing warning redirect params by using full href, deriving hostname safely, and handling c2-initiated requests. > > - **Phishing detection (app/scripts/background.js)**: > - Initialize `blockedUrl` from `href` instead of `hostname`. > - For c2-detected blocks, set `blockedUrl` to `details.initiator`; derive `blockedHostname` via `new URL(blockedUrl).hostname` with fallback to original `hostname`/`href` on parse failure. > - Build phishing warning redirect hash with `hostname: blockedHostname` and `href: blockedUrl` to drive page display and "proceed anyway" link. > - Minor: add clarifying comments; no API surface changes. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6eebe10. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR concludes the migration to `AccountsTrackerController` from core. This is necessary in order to benefit from performance changes added and planned to the core controller. [](https://codespaces.new/MetaMask/metamask-extension/pull/36808?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-1368 ## **Manual testing steps** ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [X] I’ve included tests if applicable - [X] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Replaces the local AccountTrackerController with the core one, removes legacy tracker/polling and gas-limit state, and updates state shape, selectors, metrics, tests, and dependencies accordingly. > > - **Core/Controllers**: > - Replace local `AccountTrackerController` with `@metamask/assets-controllers` version; update init, messengers, allowed actions/events, and wiring. > - Remove legacy files (`account-tracker-controller*`, `batch-utils*`, `constants/contracts.ts`, types) and related listeners/APIs (e.g., balance-update on tx, account syncing). > - Drop `accounts` and `currentBlockGasLimit*` from background/UI state; rely on `accountsByChainId` only; update sentry state and types. > - Remove account-tracker polling APIs/hook; stop exposing start/stop polling from background. > - Bump `@metamask/assets-controllers` to `^86.0.0`; update LavaMoat policies. > - Preferences: add `isMultiAccountBalancesEnabled` mirroring `useMultiAccountBalanceChecker`. > - **MetaMaskController**: > - Remove tracker syncing/clearing and tx-balance update; use checksummed addresses in `getBalance` and metrics. > - **Transactions/Init**: > - Simplify listeners; stop updating balances on tx events. > - **UI/Selectors & Send Flow**: > - Normalize `accountsByChainId` address handling (lowercasing in selectors); remove `getBlockGasLimit` usage; adjust gas estimate logic. > - Fix `token-search` null guard; update tests/fixtures to checksummed addresses. > - **Metrics/Telemetry**: > - Compute `number_of_accounts` from `accountsByChainId`; update masked/removed fields. > - **Tests/Fixtures**: > - Update mocks to checksummed addresses; remove obsolete expectations/delays; align with new state shape. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3cfb04e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** It seems ci conditions got worse in the last week, surfacing more flakiness in different points. This spec fails because it waits for events with a given delay but it's not enough now. Increasing the delay fixes the issue. [](https://codespaces.new/MetaMask/metamask-extension/pull/37450?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Replaces `largeDelayMs` with a fixed 5000ms wait in Sentry/Segment tests to reduce flakiness. > > - **Tests (e2e)**: > - In `test/e2e/flask/snaps/preinstalled-example.spec.ts`: > - Replace `largeDelayMs` with `5000` for `driver.wait` when awaiting mocked endpoints in: > - `snap_trackError` (Sentry error) > - `snap_trackEvent` (Segment event) > - `snap_startTrace`/`snap_endTrace` (Sentry trace) > - Simplify helpers import (remove unused `largeDelayMs`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 5bbc0b9. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ock and login successfully` (#37451) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This issue should be fixed on the wallet side but until that's not done, we mitigate the error on the test side by ignoring the error. #37459 [](https://codespaces.new/MetaMask/metamask-extension/pull/37451?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > E2E unlock wallet test now ignores the console error 'unable to proceed, wallet is locked' to reduce flakiness. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4eadccf. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** The timeout in clickElementAndWaitToDisappear has a default max value of 2seconds. This is insufficient in the update modal test, where sometimes the spec fails as the element didn't disappear yet: <img width="951" height="146" alt="image" src="https://github.com/user-attachments/assets/47433113-1793-4c83-ad0e-316bfabeedf0" /> This increases the default timeout to 3 seconds at the driver method level. This won't mean that we will always wait until the full 3 seconds but that now, we have a bigger window to wait. I chose to change this at the driver method, to help stabilize all ci in general, not just for that case, as 3 seconds still seams a reasonable amount of time (in the case we need to fully wait for them). <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37465?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci. I edited the spec file to trigger the quality gate and run the Update Modal spec 5 more times x4 (each build), so it was run 20+4 times and it passed (other specs failed due to existing flakiness, being fixed in different PRs) 0b857c0 ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Increase default timeout from 2s to 3s in `clickElementAndWaitToDisappear` to improve reliability of disappearing elements. > > - **Tests (E2E)**: > - `test/e2e/webdriver/driver.js`: > - `clickElementAndWaitToDisappear`: default timeout increased `2000ms` → `3000ms`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 919feab. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ing accounts during a NFT send` (#37460) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This test is flaky as we are trying to assert an element has the correct text. This can lead to a race condition when we do the assert, and the element hasn't yet being updated: <img width="1004" height="318" alt="image" src="https://github.com/user-attachments/assets/ff98d6ae-16c3-4630-a834-edaf184a2c7c" /> And you see in the screenshot the asset is correct: <img width="1050" height="812" alt="image" src="https://github.com/user-attachments/assets/ab1875dd-6f09-4eda-838b-616b9a6c4954" /> <img width="1050" height="812" alt="image" src="https://github.com/user-attachments/assets/46bce31a-c474-47db-b567-45564584df1a" /> [](https://codespaces.new/MetaMask/metamask-extension/pull/37460?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Stabilizes e2e token symbol verification by waiting for the selector with matching text in the send token asset picker. > > - **Tests (e2e)**: > - **Send token page object (`test/e2e/page-objects/pages/send/send-token-page.ts`)**: > - Update `checkTokenSymbolInAssetPicker` to use `waitForSelector({ css: asset symbol, text })` instead of reading text and asserting directly, improving synchronization when verifying the token symbol. > - Retain optional token ID check via `waitForSelector` on `p` with `#<id>` text. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 12dee59. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…works when adding a network via dapp` (#37456) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** The spec fails because there's a console error with an RPC error. The problem is that we are adding Avalanche network, and we start and Anvil server with that chainId, however, the Avalanche requests are not redirected to our local server, causing that when the RPC call is made, that is redirected to the catch all mock, returning an empty response body and triggering the console error, if the test is slow, and there's enough time for that to happen. This PR blocklist the Avalanche Infura calls, so those are redirected to our anvil local server <img width="1001" height="574" alt="image" src="https://github.com/user-attachments/assets/2ea3e508-c9bb-4441-91ab-e4028ea86951" /> <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37456?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Add `avalanche-mainnet.infura.io` to `blocklistedHosts` in `test/e2e/mock-e2e.js` so RPC requests are redirected to `localhost:8545`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7d99aa8. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
#37452) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR aims to activate re-simulation feature when user focus the active extension window for `batch` transactions. [](https://codespaces.new/MetaMask/metamask-extension/pull/37452?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: Batch transaction resimulation ## **Manual testing steps** 1. Batch transaction simulation network requests (sentinel) should be visible in the network tab when focused in the active window. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [X] I’ve included tests if applicable - [X] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds `TransactionType.batch` to `FOCUSABLE_TYPES` to enable batch tx re-simulation on window focus. > > - **Confirmations UI** > - Update `ui/pages/confirmations/hooks/useTransactionFocusEffect.ts`: > - Add `TransactionType.batch` to `FOCUSABLE_TYPES` so batch transactions toggle active state on window focus. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6d7c6da. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** No need for a nested `if` without `else` [](https://codespaces.new/MetaMask/metamask-extension/pull/37433?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Consolidates nested conditionals and adds minimal guard checks across background, controllers, services, streams, tests, UI, and selectors without altering behavior. > > - **Background** > - Simplify phishing test bypass check in `app/scripts/background.js` by merging nested conditions. > - **Controllers** > - Streamline `addPollingToken` in `app/scripts/controllers/app-state-controller.ts` (combine checks and call updater directly). > - **Services** > - Tighten success URL match with optional chaining and simplify listener logic in `app/scripts/services/subscription/subscription-service.ts`. > - **Streams** > - Collapse legacy notification method remap conditional in `app/scripts/streams/provider-stream.ts`. > - **Tests** > - Flatten error-handling call generation logic in `test/e2e/api-specs/MultichainAuthorizationConfirmationErrors.ts`. > - **UI** > - Add `onNetworkChange` guard and merge conditions on multiselect submit in `ui/components/.../asset-picker.tsx`. > - **Selectors** > - Simplify connected-account selection logic in `ui/selectors/selectors.js` (ensure selected address not already connected). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fdc88d2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Introduces a new optional alert property to hide navigation for this alert. [](https://codespaces.new/MetaMask/metamask-extension/pull/37425?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/249abb46-f295-4035-b838-5e1843658410 ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds `hideFromAlertNavigation` to alerts and updates hooks/modal to skip these in navigation, with tests and usage updates. > > - **Alert Model**: > - Add optional `hideFromAlertNavigation` to `Alert`. > - **Hooks (`useAlerts`)**: > - Return `navigableAlerts`, `navigableFieldAlerts`, `navigableGeneralAlerts`, and `getNavigableFieldAlerts`, excluding alerts with `hideFromAlertNavigation`. > - Ensure severity sorting is non-mutating. > - **UI – MultipleAlertModal**: > - Drive selection by `alertKey` with robust syncing/fallback logic. > - Navigate only through `navigable*` alerts; hide nav controls if current alert sets `hideFromAlertNavigation` or when skipping is requested. > - Acknowledge just triggers `onFinalAcknowledgeClick` (no cycling). > - **UI – ConfirmInfoAlertRow**: > - Derive `selectedAlert` once; pass `skipAlertNavigation` based on `hideFromAlertNavigation`. > - **Alerts – Shield Coverage**: > - Mark shield coverage alert with `hideFromAlertNavigation: true`. > - **Tests**: > - Update/extend tests for severity ordering, navigable alert filtering, modal navigation hiding/skipping, and selection behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 22c7214. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37439?quickstart=1) Remove selectors from spec page and replace them with page specific checks. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Replace selector-based confirmation with Activity List page-object checks in snap account transfer e2e tests. > > - **Tests (e2e)**: > - Update `test/e2e/tests/account/snap-account-transfers.spec.ts`: > - Replace selector-based confirmation (`.transaction-status-label--confirmed`) with Activity List verification via `ActivityListPage.checkConfirmedTxNumberDisplayedInActivity(1)` in both sync and async approve flows. > - Instantiate `ActivityListPage` to perform confirmation checks after sending transactions. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 092cd07. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…37561) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Migrate swaps component to React Router v6 compatibility. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37561?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: MetaMask/MetaMask-planning#5563 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Migrate Swaps routing to react-router-dom v5-compat, replacing history-based navigation with navigate, updating routes/components, and aligning tests. > > - **Routing migration to v5-compat**: > - Replace `useHistory`, `Redirect`, `Switch`, and v5 `<Route render>` with `useNavigate`, `Navigate`, and `Routes` across `ui/pages/swaps/*`. > - Introduce `FeatureToggledRoute` using v5-compat `Navigate` and update consumers. > - Update swaps thunks in `ui/ducks/swaps/swaps.js` to accept/use `navigate` instead of `history` for redirects. > - In `routes.component.tsx`, add `createV5CompatNavigate` helper and wrap Swaps/Cross-chain Swap routes with `AuthenticatedV5Compat`, passing v5-compatible props. > - **Swaps pages refactor**: > - Refactor navigation/redirect logic in `awaiting-*`, `loading-swaps-quotes`, `notification-page`, `prepare-swap-page`, `review-quote`, `smart-transaction-status`, and `index` to v5-compat APIs; minor prop types added/adjusted. > - `Swap` now uses `useSafeNavigation`, v5-compat `Routes`, and `FeatureToggledRoute` for maintenance gating. > - **Tests**: > - Update tests to use `render-helpers-navigate` and v5-compat `useNavigate` mocks; remove legacy helpers. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 8aecb26. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Adds a quote data fallback for bitcoin transactions so that the 'You Sent' field does not populate empty. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37525?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Bridge from Bitcoin to another chain. 2. In the transaction details, you should see the correct from amount of Bitcoin. 1. For quotes with a low network fee, like solana, the network fee should now display even if it's lower than $0.01. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Falls back to quote data to populate the BTC “You Sent” amount and introduces dynamic network fee formatting to display very small fees accurately. > > - **Bridge transaction details**: > - `ui/components/app/multichain-bridge-transaction-details-modal/multichain-bridge-transaction-details-modal.tsx`: Fallback to quote (`quote.srcTokenAmount`/`quote.srcAsset`) to render `You Sent` when `transaction.from` is empty (e.g., BTC), using `formatDestTokenAmount`. > - **Quote card and utils**: > - `ui/pages/bridge/utils/quote.ts`: Add `formatNetworkFee` for dynamic precision of small fees; allow `undefined` in `formatCurrencyAmount` input type. > - `ui/pages/bridge/quotes/multichain-bridge-quote-card.tsx`: Use `formatNetworkFee` for network fee display (including gas-included case) so sub-cent fees are shown appropriately. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c463452. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Fixes duplicate items in search modal for tokens [](https://codespaces.new/MetaMask/metamask-extension/pull/37568?quickstart=1) ## **Changelog** CHANGELOG entry: Fixes a bug that makes users see duplicate tokens in search tokens modal when on popular networks. ## **Related issues** Fixes: #37424 ## **Manual testing steps** 1. Click on import tokens 2. Click on popular networks 3. Search for "Weth" 4. You should not see duplicate items for Weth on base ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> Uploading Screen Recording 2025-11-06 at 11.06.05.mov… ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/fa3a943f-7bdb-447d-bd6f-9a067626c72b ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Use a composite unique key for token list items to prevent duplicate/incorrect rendering in the import token search results. > > - **UI** > - **Import Token modal** (`ui/components/app/import-token/token-list/token-list.component.js`): > - Replace React list key with a composite `uniqueKey` built from `address`, `chainId`, index, `symbol`, and `name` for each token item, preventing key collisions and duplicate-render issues in search results. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 70f21d1. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Adds bitcoin-swaps code gate to main builds.yml <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37587?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: enables the bitcoin swaps features ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Enables the `bitcoin-swaps` feature for the `main` build by adding it to `builds.yml` feature list. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c335eac. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ion (EIP1559) with the right properties in the metric events` (#37573) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** When we assert the Transaction Added event, we expect the advanced settings to be undefined. Then, right after we trigger the tx then we click on the advanced settings, so the Transaction Submitted event has the advanced settings set to true. That is expected. The issue comes when we assert the Transaction Added event, if the click settings happens very fast (before the Transaction Added has been fired) then we get that property set to true. To avoid this race condition, we wait until that event is fired (which won't have the advanced settings set to true) and once that event has happened then we click on the settings. <img width="809" height="323" alt="image" src="https://github.com/user-attachments/assets/813cd312-5914-4c7c-a7ee-a7b531eff66a" /> [](https://codespaces.new/MetaMask/metamask-extension/pull/37573?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** 1. Check ci ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Deflakes the metrics E2E test by typing event payloads and waiting for initial "Transaction Added" events before opening advanced view. > > - **Tests (E2E)**: > - Update `test/e2e/tests/confirmations/transactions/metrics.spec.ts`: > - Add `MetricsEvent` type for event payloads. > - Wait for 4 "Transaction Added"/"Transaction Added Anon" events before enabling advanced view to keep `transaction_advanced_view` undefined on initial "Added" events, reducing flakiness. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1b68800. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37592?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds v13.8.0 section to CHANGELOG with key additions and fixes, and updates compare links. > > - **Changelog**: > - **v13.8.0 Added**: > - Bitcoin snap bump to `v1.4.3`; subscription/shield controller and UI updates; support for buying Bitcoin/non‑EVM via buy flow; improved error/display for chain IDs; copy icon on network addresses; assorted UI/copy refinements. > - **v13.8.0 Fixed**: > - Numerous fixes across subscription/shield flows, network nicknames, non‑EVM historical price ranges, token/NFT display data, caching/performance, links, and UI consistency. > - **Links**: Update `[Unreleased]` compare to `v13.8.0...HEAD` and add `[13.8.0]` compare link. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit dceded1. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: MetaMask Bot <37885440+metamaskbot@users.noreply.github.com> 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: Lwin <147362763+lwin-kyaw@users.noreply.github.com> Co-authored-by: Bernardo Garces Chapero <bernardo.chapero@consensys.net> Co-authored-by: Prithpal Sooriya <prithpal.sooriya@gmail.com> Co-authored-by: Jyoti Puri <jyotipuri@gmail.com> Co-authored-by: OGPoyraz <omergoktugpoyraz@gmail.com> Co-authored-by: sahar-fehri <sahar.fehri@consensys.net>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Upgrade @metamask/message-signing-snap to version 1.1.4 ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: @metamask/message-signing-snap to version 1.1.4 ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Upgrade @metamask/message-signing-snap from 1.1.3 to 1.1.4 in package.json and yarn.lock. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e6427a4. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
|
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. |
✨ Files requiring CODEOWNER review ✨👨🔧 @MetaMask/extension-platform (1 files, +4 -0)
|
|
All alerts resolved. Learn more about Socket for GitHub. This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored. Ignoring alerts on:
|
Builds ready [9047f0d]
UI Startup Metrics (1121 ± 90 ms)
|
This PR updates the change log for 13.9.0. (Hotfix - no test plan generated.) Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>
Builds ready [a8709b0]
UI Startup Metrics (1226 ± 87 ms)
|
|
@metamaskbot update-attributions |
|
Attributions updated |
Builds ready [a99b009]
UI Startup Metrics (1255 ± 108 ms)
|
|
@metamaskbot update-attributions |
|
No attributions changes |
…er back option cp-13.9.0 (#37603) - fix: stop reloading of animation & browser back option cp-13.9.0 (#37581) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> In this PR, we have added the logic to stop the animation once completed. Also added a browser back logic for login options. Jira Link: https://consensyssoftware.atlassian.net/browse/SL-278 [](https://codespaces.new/MetaMask/metamask-extension/pull/37581?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: stopped reloading of animation once completed ## **Related issues** Fixes: ## **Manual testing steps** 1. Open Extension 2. validate animation reloading 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/7c01d5bc-2aeb-4591-84e6-c359e73a71c1 https://github.com/user-attachments/assets/1ccacae4-1aec-4fbd-b170-e879e54970b5 ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Persist animation completion in shared context to prevent replay, and use URL params for login option state to support browser back; update navigation and tests accordingly. > > - **Onboarding Animations**: > - Extend `ui/contexts/rive-wasm` with `animationCompleted` map and `setIsAnimationCompleted(...)` to persist completion state across views. > - Update `metamask-wordmark-animation.tsx` to mark completion on unmount and consume the new context API. > - **Welcome Flow**: > - `welcome.js`: derive `shouldSkipAnimation` from `animationCompleted.MetamaskWordMarkAnimation` (replacing prior `from` query logic) to avoid replaying the wordmark animation. > - `welcome-login.tsx`: read/write `?login=<option>` to control `LoginOptions` visibility/selection and navigate via `ONBOARDING_WELCOME_ROUTE` to enable browser back restoring state. > - **Account Exist**: > - Simplify navigation back to `ONBOARDING_WELCOME_ROUTE` (remove `?from=account-exist`). > - **Tests**: > - Adjust `account-exist.test.tsx` expectations to match new welcome route navigation without query params. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 29c4558. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> [4e1f85a](4e1f85a) --------- Co-authored-by: Ganesh Suresh Patra <ganesh.patra@consensys.net> Co-authored-by: MetaMask Bot <metamaskbot@users.noreply.github.com> Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>
Builds ready [0ba1352]
UI Startup Metrics (1331 ± 112 ms)
|
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37621?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Updates CHANGELOG for 13.9.0, consolidating entries (removing Uncategorized) and adding key Added/Fixed items and link refs. > > - **CHANGELOG (13.9.0)**: > - **Added**: > - Feature flag to hide Monad in “Add Popular Network”. > - Bitcoin snap to `1.4.4`; enable Bitcoin swaps. > - Claims list/view; network/account selector in claims form; handle submit backend errors. > - Reset Wallet for social-login unrecoverable errors. > - Revocation flow for advanced permissions; trust signals on spender addresses. > - Unlock flow animations; wallet ready page updates; Rive animation on welcome. > - Burn/null recipient blocker; points estimate for swaps/bridges. > - MONAD network (bridge & swap); DeFi positions fetch optimization. > - UI improvements (file uploader, settings back button, rewards balance, asset ordering, deep link handling). > - Move "Discover" to global menu; upgrade permissions snaps to `0.5.0`. > - **Fixed**: > - Duplicate tokens in search; shield crypto approval calc and flicker; fox icon styles; NFT lingering after transfer. > - Bridge-enabled check before nav; padding in simulation details; default receiving network order. > - Ledger tutorial link; invalid SRP handling; intermittent subscription visibility; default BTC pair. > - Smart tx link; crash on wallet init; sanitize Unicode in signatures; ENS recipient display; phishing page href. > - Token name truncation; bip44 connection indicator; missing approval changes in batch simulations; defer UI until swap SSE quotes load. > - Bump `@metamask/message-signing-snap` to `1.1.4`; quicker QuickNode failover; default bridge slippage to 2%. > - Structural: > - Remove `Uncategorized` section; fold items into Added/Fixed. > - Update version link references at footer. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fdbf818. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
|
@SocketSecurity ignore @rive-app/react-canvas @rive-app/canvas@2.31.5 @sentry/cli@2.56.0 @rive-app/react-canvas @rive-app/canvas@2.31.5 @sentry/cli@2.56.0 |
Builds ready [144c792]
UI Startup Metrics (1259 ± 115 ms)
|
🚀 v13.9.0 Testing & Release Quality Process
Hi Team,
As part of our new MetaMask Release Quality Process, here’s a quick overview of the key processes, testing strategies, and milestones to ensure a smooth and high-quality deployment.
📋 Key Processes
Testing Strategy
Conduct regression and exploratory testing for your functional areas, including automated and manual tests for critical workflows.
Focus on exploratory testing across the wallet, prioritize high-impact areas, and triage any Sentry errors found during testing.
Validate new functionalities and provide feedback to support release monitoring.
GitHub Signoff
Issue Resolution
Cherry-Picking Criteria
🗓️ Timeline and Milestones
✅ Signoff Checklist
Each team is responsible for signing off via GitHub. Use the checkbox below to track signoff completion:
Team sign-off checklist
This process is a major step forward in ensuring release stability and quality. Let’s stay aligned and make this release a success! 🚀
Feel free to reach out if you have questions or need clarification.
Many thanks in advance
Reference