Repository: MetaMask/metamask-extension
Pull request #32190: fix: use `to` and `from` to check if transaction is a batch transaction cp-12.18.0
Author: login: vinistevam
Labels: name: team-confirmations
description: Push issues to confirmations team
Created: 2025-04-23T13:09:10Z | Merged: 2025-04-28T08:12:50Z

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once.
-->

## **Description**
This PR aims to verify `to` and `from` to check if the transaction is a batch transaction.
<!--
Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32190?quickstart=1)

## **Related issues**

Fixes: https://github.com/MetaMask/MetaMask-planning/issues/4752

## **Manual testing steps**

1. Go to test dapp
2. Under EIP 5792, click on Send Calls
3. See pill with Includes x transactions under the confirmation title

## **Screenshots/Recordings**

[interact with.webm](https://github.com/user-attachments/assets/a81d242e-92c3-4cd1-8757-a84b7596571e)


![image](https://github.com/user-attachments/assets/d63dd4d3-37c4-482b-920c-b39ea4e2adb4)

### **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.



Diff:
diff --git a/ui/pages/confirmations/components/confirm/info/shared/transaction-details/__snapshots__/transaction-details.test.tsx.snap b/ui/pages/confirmations/components/confirm/info/shared/transaction-details/__snapshots__/transaction-details.test.tsx.snap
index 284223f42ec6..9e07a28d5555 100644
--- a/ui/pages/confirmations/components/confirm/info/shared/transaction-details/__snapshots__/transaction-details.test.tsx.snap
+++ b/ui/pages/confirmations/components/confirm/info/shared/transaction-details/__snapshots__/transaction-details.test.tsx.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`<TransactionDetails /> does not render component for transaction details 1`] = `
+exports[`Transaction Details <TransactionDetails /> does not render component for transaction details 1`] = `
 <div>
   <div
     class="mm-box mm-box--margin-bottom-4 mm-box--padding-2 mm-box--background-color-background-default mm-box--rounded-md"
@@ -9,7 +9,7 @@ exports[`<TransactionDetails /> does not render component for transaction detail
 </div>
 `;
 
-exports[`<TransactionDetails /> renders component for transaction details 1`] = `
+exports[`Transaction Details <TransactionDetails /> renders component for transaction details 1`] = `
 <div>
   <div
     class="mm-box mm-box--margin-bottom-4 mm-box--padding-2 mm-box--background-color-background-default mm-box--rounded-md"
diff --git a/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.test.tsx b/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.test.tsx
index d85d8c1d641f..d42bcae09201 100644
--- a/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.test.tsx
+++ b/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.test.tsx
@@ -17,7 +17,7 @@ import {
 } from '../../../../../../../../test/data/confirmations/batch-transaction';
 import { RowAlertKey } from '../../../../../../../components/app/confirm/info/row/constants';
 import { Severity } from '../../../../../../../helpers/constants/design-system';
-import { TransactionDetails } from './transaction-details';
+import { RecipientRow, TransactionDetails } from './transaction-details';
 
 jest.mock(
   '../../../../../../../components/app/alert-system/contexts/alertMetricsContext',
@@ -28,36 +28,165 @@ jest.mock(
   }),
 );
 
-describe('<TransactionDetails />', () => {
+describe('Transaction Details', () => {
   const middleware = [thunk];
 
-  it('does not render component for transaction details', () => {
-    const state = getMockConfirmState();
-    const mockStore = configureMockStore(middleware)(state);
-    const { container } = renderWithConfirmContextProvider(
-      <TransactionDetails />,
-      mockStore,
-    );
-    expect(container).toMatchSnapshot();
-  });
+  describe('<TransactionDetails />', () => {
+    it('does not render component for transaction details', () => {
+      const state = getMockConfirmState();
+      const mockStore = configureMockStore(middleware)(state);
+      const { container } = renderWithConfirmContextProvider(
+        <TransactionDetails />,
+        mockStore,
+      );
+      expect(container).toMatchSnapshot();
+    });
 
-  it('renders component for transaction details', () => {
-    const state = getMockContractInteractionConfirmState();
-    const mockStore = configureMockStore(middleware)(state);
-    const { container } = renderWithConfirmContextProvider(
-      <TransactionDetails />,
-      mockStore,
-    );
-    expect(container).toMatchSnapshot();
-  });
+    it('renders component for transaction details', () => {
+      const state = getMockContractInteractionConfirmState();
+      const mockStore = configureMockStore(middleware)(state);
+      const { container } = renderWithConfirmContextProvider(
+        <TransactionDetails />,
+        mockStore,
+      );
+      expect(container).toMatchSnapshot();
+    });
+
+    describe('AmountRow', () => {
+      describe('should be in the document', () => {
+        it('when showAdvancedDetails is true', () => {
+          const contractInteraction =
+            genUnapprovedContractInteractionConfirmation({
+              chainId: CHAIN_IDS.GOERLI,
+            });
+          const state = getMockConfirmStateForTransaction(contractInteraction, {
+            metamask: {
+              preferences: {
+                showConfirmationAdvancedDetails: true,
+              },
+            },
+          });
+          const mockStore = configureMockStore(middleware)(state);
+          const { getByTestId } = renderWithConfirmContextProvider(
+            <TransactionDetails />,
+            mockStore,
+          );
+          expect(
+            getByTestId('transaction-details-amount-row'),
+          ).toBeInTheDocument();
+        });
 
-  describe('AmountRow', () => {
-    describe('should be in the document', () => {
-      it('when showAdvancedDetails is true', () => {
+        it('when value and simulated native balance mismatch', () => {
+          // Transaction value is set to 0x3782dace9d900000 below mock
+          const simulationDataMock = {
+            tokenBalanceChanges: [],
+            nativeBalanceChange: {
+              difference: '0x1' as Hex,
+              isDecrease: false,
+              previousBalance: '0x2' as Hex,
+              newBalance: '0x1' as Hex,
+            },
+          };
+          const contractInteraction =
+            genUnapprovedContractInteractionConfirmation({
+              simulationData: simulationDataMock,
+              chainId: CHAIN_IDS.GOERLI,
+            });
+          const state = getMockConfirmStateForTransaction(contractInteraction, {
+            metamask: {
+              preferences: {
+                // Intentionally setting to false to test the condition
+                showConfirmationAdvancedDetails: false,
+              },
+            },
+          });
+          const mockStore = configureMockStore(middleware)(state);
+          const { getByTestId } = renderWithConfirmContextProvider(
+            <TransactionDetails />,
+            mockStore,
+          );
+          expect(
+            getByTestId('transaction-details-amount-row'),
+          ).toBeInTheDocument();
+        });
+      });
+
+      it('should not be in the document when value and simulated native balance mismatch is within threshold', () => {
+        // Transaction value is set to 0x3782dace9d900000 below mock
+        const transactionValueInDecimal = 4000000000000000000;
+        const transactionValueInHex = toHex(transactionValueInDecimal);
+        const newBalanceInDecimal = 1;
+        const newBalanceInHex = toHex(newBalanceInDecimal);
+        const previousBalanceInDecimal =
+          transactionValueInDecimal + newBalanceInDecimal;
+        const previousBalanceInHex = toHex(previousBalanceInDecimal);
+
+        const simulationDataMock = {
+          tokenBalanceChanges: [],
+          nativeBalanceChange: {
+            difference: transactionValueInHex,
+            isDecrease: true,
+            previousBalance: previousBalanceInHex,
+            newBalance: newBalanceInHex,
+          },
+        };
         const contractInteraction =
           genUnapprovedContractInteractionConfirmation({
+            simulationData: simulationDataMock,
             chainId: CHAIN_IDS.GOERLI,
           });
+        const state = getMockConfirmStateForTransaction(contractInteraction, {
+          metamask: {
+            preferences: {
+              // Intentionally setting to false to test the condition
+              showConfirmationAdvancedDetails: false,
+            },
+          },
+        });
+        const mockStore = configureMockStore(middleware)(state);
+        const { queryByTestId } = renderWithConfirmContextProvider(
+          <TransactionDetails />,
+          mockStore,
+        );
+        expect(
+          queryByTestId('transaction-details-amount-row'),
+        ).not.toBeInTheDocument();
+      });
+    });
+
+    it('display network info if there is an alert on that field', () => {
+      const contractInteraction =
+        genUnapprovedContractInteractionConfirmation();
+      const state = {
+        ...getMockConfirmStateForTransaction(contractInteraction),
+        confirmAlerts: {
+          alerts: {
+            [contractInteraction.id]: [
+              {
+                key: 'networkSwitchInfo',
+                field: RowAlertKey.Network,
+                severity: Severity.Info,
+                message: 'dummy message',
+                reason: 'dummy reason',
+              },
+            ],
+          },
+          confirmed: {},
+        },
+      };
+      const mockStore = configureMockStore([])(state);
+      const { getByText } = renderWithConfirmContextProvider(
+        <TransactionDetails />,
+        mockStore,
+      );
+      expect(getByText('Network')).toBeInTheDocument();
+      expect(getByText('Goerli')).toBeInTheDocument();
+    });
+
+    describe('RecipientRow', () => {
+      it('renders when address is valid', () => {
+        const contractInteraction =
+          genUnapprovedContractInteractionConfirmation();
         const state = getMockConfirmStateForTransaction(contractInteraction, {
           metamask: {
             preferences: {
@@ -71,31 +200,19 @@ describe('<TransactionDetails />', () => {
           mockStore,
         );
         expect(
-          getByTestId('transaction-details-amount-row'),
+          getByTestId('transaction-details-recipient-row'),
         ).toBeInTheDocument();
       });
 
-      it('when value and simulated native balance mismatch', () => {
-        // Transaction value is set to 0x3782dace9d900000 below mock
-        const simulationDataMock = {
-          tokenBalanceChanges: [],
-          nativeBalanceChange: {
-            difference: '0x1' as Hex,
-            isDecrease: false,
-            previousBalance: '0x2' as Hex,
-            newBalance: '0x1' as Hex,
-          },
-        };
+      it('does not render when address is invalid', () => {
         const contractInteraction =
           genUnapprovedContractInteractionConfirmation({
-            simulationData: simulationDataMock,
-            chainId: CHAIN_IDS.GOERLI,
+            address: '0xinvalid_address',
           });
         const state = getMockConfirmStateForTransaction(contractInteraction, {
           metamask: {
             preferences: {
-              // Intentionally setting to false to test the condition
-              showConfirmationAdvancedDetails: false,
+              showConfirmationAdvancedDetails: true,
             },
           },
         });
@@ -105,145 +222,100 @@ describe('<TransactionDetails />', () => {
           mockStore,
         );
         expect(
-          getByTestId('transaction-details-amount-row'),
+          getByTestId('transaction-details-recipient-row'),
         ).toBeInTheDocument();
       });
     });
 
-    it('should not be in the document when value and simulated native balance mismatch is within threshold', () => {
-      // Transaction value is set to 0x3782dace9d900000 below mock
-      const transactionValueInDecimal = 4000000000000000000;
-      const transactionValueInHex = toHex(transactionValueInDecimal);
-      const newBalanceInDecimal = 1;
-      const newBalanceInHex = toHex(newBalanceInDecimal);
-      const previousBalanceInDecimal =
-        transactionValueInDecimal + newBalanceInDecimal;
-      const previousBalanceInHex = toHex(previousBalanceInDecimal);
-
-      const simulationDataMock = {
-        tokenBalanceChanges: [],
-        nativeBalanceChange: {
-          difference: transactionValueInHex,
-          isDecrease: true,
-          previousBalance: previousBalanceInHex,
-          newBalance: newBalanceInHex,
-        },
-      };
-      const contractInteraction = genUnapprovedContractInteractionConfirmation({
-        simulationData: simulationDataMock,
-        chainId: CHAIN_IDS.GOERLI,
-      });
-      const state = getMockConfirmStateForTransaction(contractInteraction, {
-        metamask: {
-          preferences: {
-            // Intentionally setting to false to test the condition
-            showConfirmationAdvancedDetails: false,
-          },
-        },
-      });
-      const mockStore = configureMockStore(middleware)(state);
-      const { queryByTestId } = renderWithConfirmContextProvider(
+    it('return null for transaction of type revokeDelegation', () => {
+      const state = getMockConfirmStateForTransaction(
+        downgradeAccountConfirmation,
+      );
+      const mockStore = configureMockStore([])(state);
+      const { container } = renderWithConfirmContextProvider(
         <TransactionDetails />,
         mockStore,
       );
-      expect(
-        queryByTestId('transaction-details-amount-row'),
-      ).not.toBeInTheDocument();
+      expect(container.firstChild).toBeNull();
+    });
+
+    it('return null for transaction of type smart account upgrade transaction if there are no nested transactions', () => {
+      const state = getMockConfirmStateForTransaction(
+        upgradeAccountConfirmationOnly,
+      );
+      const mockStore = configureMockStore([])(state);
+      const { container } = renderWithConfirmContextProvider(
+        <TransactionDetails />,
+        mockStore,
+      );
+      expect(container.firstChild).toBeNull();
     });
   });
 
-  it('display network info if there is an alert on that field', () => {
-    const contractInteraction = genUnapprovedContractInteractionConfirmation();
-    const state = {
-      ...getMockConfirmStateForTransaction(contractInteraction),
-      confirmAlerts: {
-        alerts: {
-          [contractInteraction.id]: [
-            {
-              key: 'networkSwitchInfo',
-              field: RowAlertKey.Network,
-              severity: Severity.Info,
-              message: 'dummy message',
-              reason: 'dummy reason',
-            },
-          ],
+  describe('<RecipientRow />', () => {
+    const useAdvanceDetails = {
+      metamask: {
+        preferences: {
+          showConfirmationAdvancedDetails: true,
         },
-        confirmed: {},
       },
     };
-    const mockStore = configureMockStore([])(state);
-    const { getByText } = renderWithConfirmContextProvider(
-      <TransactionDetails />,
-      mockStore,
-    );
-    expect(getByText('Network')).toBeInTheDocument();
-    expect(getByText('Goerli')).toBeInTheDocument();
-  });
+    it('displays SmartContractWithLogo when to and from are equal and there are nested transactions', () => {
+      const ADDRESS_MOCK = '0x88aa6343307ec9a652ccddda3646e62b2f1a5125';
 
-  describe('RecipientRow', () => {
-    it('renders when address is valid', () => {
-      const contractInteraction =
-        genUnapprovedContractInteractionConfirmation();
-      const state = getMockConfirmStateForTransaction(contractInteraction, {
-        metamask: {
-          preferences: {
-            showConfirmationAdvancedDetails: true,
+      const contractInteraction = genUnapprovedContractInteractionConfirmation({
+        address: ADDRESS_MOCK,
+        nestedTransactions: [
+          {
+            to: ADDRESS_MOCK,
+            data: '0x1',
           },
-        },
+        ],
       });
+      const state = getMockConfirmStateForTransaction(
+        contractInteraction,
+        useAdvanceDetails,
+      );
       const mockStore = configureMockStore(middleware)(state);
       const { getByTestId } = renderWithConfirmContextProvider(
-        <TransactionDetails />,
+        <RecipientRow />,
         mockStore,
       );
       expect(
         getByTestId('transaction-details-recipient-row'),
       ).toBeInTheDocument();
+      expect(getByTestId('transaction-details-recipient-row')).toContainElement(
+        document.querySelector('img[src="images/logo/metamask-fox.svg"]'),
+      );
     });
 
-    it('does not render when address is invalid', () => {
+    it('does not display SmartContractWithLogo when to and from are not equal or there are no nested transactions', () => {
       const contractInteraction = genUnapprovedContractInteractionConfirmation({
-        address: '0xinvalid_address',
-      });
-      const state = getMockConfirmStateForTransaction(contractInteraction, {
-        metamask: {
-          preferences: {
-            showConfirmationAdvancedDetails: true,
+        address: '0xabcdefabcdefabcdefabcdefabcdefabcdefabcdef',
+        nestedTransactions: [
+          {
+            to: '0x1234567890abcdef1234567890abcdef12345678',
+            data: '0x1',
           },
-        },
+        ],
       });
+      const state = getMockConfirmStateForTransaction(
+        contractInteraction,
+        useAdvanceDetails,
+      );
       const mockStore = configureMockStore(middleware)(state);
       const { getByTestId } = renderWithConfirmContextProvider(
-        <TransactionDetails />,
+        <RecipientRow />,
         mockStore,
       );
       expect(
         getByTestId('transaction-details-recipient-row'),
       ).toBeInTheDocument();
+      expect(
+        getByTestId('transaction-details-recipient-row'),
+      ).not.toContainElement(
+        document.querySelector('img[src="images/logo/metamask-fox.svg"]'),
+      );
     });
   });
-
-  it('return null for transaction of type revokeDelegation', () => {
-    const state = getMockConfirmStateForTransaction(
-      downgradeAccountConfirmation,
-    );
-    const mockStore = configureMockStore([])(state);
-    const { container } = renderWithConfirmContextProvider(
-      <TransactionDetails />,
-      mockStore,
-    );
-    expect(container.firstChild).toBeNull();
-  });
-
-  it('return null for transaction of type smart account upgrade transaction if there are no nested transactions', () => {
-    const state = getMockConfirmStateForTransaction(
-      upgradeAccountConfirmationOnly,
-    );
-    const mockStore = configureMockStore([])(state);
-    const { container } = renderWithConfirmContextProvider(
-      <TransactionDetails />,
-      mockStore,
-    );
-    expect(container.firstChild).toBeNull();
-  });
 });
diff --git a/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.tsx b/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.tsx
index 55502450a4e7..8c601d31a72c 100644
--- a/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.tsx
+++ b/ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.tsx
@@ -1,7 +1,4 @@
-import {
-  TransactionMeta,
-  TransactionType,
-} from '@metamask/transaction-controller';
+import { TransactionMeta } from '@metamask/transaction-controller';
 import { isValidAddress } from 'ethereumjs-util';
 import React, { useMemo } from 'react';
 import { useSelector } from 'react-redux';
@@ -61,24 +58,31 @@ export const OriginRow = () => {
 export const RecipientRow = ({ recipient }: { recipient?: Hex } = {}) => {
   const t = useI18nContext();
   const { currentConfirmation } = useConfirmContext<TransactionMeta>();
-  const to = recipient ?? currentConfirmation?.txParams?.to;
-  const isBatch = currentConfirmation?.type === TransactionType.batch;
+  const { isUpgradeOnly } = useIsUpgradeTransaction();
+  const isDowngrade = useIsDowngradeTransaction();
+  const { nestedTransactions, txParams, chainId, id } =
+    currentConfirmation ?? {};
+  const { from, to: txTo } = txParams ?? {};
+  const to = recipient ?? txTo;
+
+  const isBatch =
+    isBatchTransaction(nestedTransactions) &&
+    to?.toLowerCase() === from.toLowerCase();
+  const showContractLogo = isBatch || isDowngrade || isUpgradeOnly;
 
   if (!to || !isValidAddress(to)) {
     return null;
   }
 
-  const { chainId } = currentConfirmation;
-
   return (
     <ConfirmInfoAlertRow
-      ownerId={currentConfirmation.id}
+      ownerId={id}
       alertKey={RowAlertKey.InteractingWith}
       data-testid="transaction-details-recipient-row"
       label={t('interactingWith')}
       tooltip={t('interactingWithTransactionDescription')}
     >
-      {isBatch ? (
+      {showContractLogo ? (
         <SmartContractWithLogo />
       ) : (
         <ConfirmInfoRowAddress address={to} chainId={chainId} />


Reviews:
user: login: pedronfigueiredo
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-04-24T10:10:54Z
user: login: jpuri
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-04-24T10:23:26Z
user: login: matthewwalsh0
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-04-24T10:29:12Z
user: login: vinistevam
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-24T14:52:34Z
user: login: pedronfigueiredo
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-04-24T14:56:57Z
user: login: matthewwalsh0
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-04-24T16:06:26Z
user: login: OGPoyraz
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-04-24T16:56:22Z
user: login: jpuri
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-04-24T18:11:57Z
user: login: jpuri
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-04-25T06:49:08Z
user: login: OGPoyraz
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-04-25T06:56:30Z
user: login: OGPoyraz
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-28T07:22:39Z
user: login: jpuri
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-28T07:35:34Z

Review comments:
diff_hunk: @@ -65,18 +65,22 @@ export const OriginRow = () => {
 export const RecipientRow = ({ recipient }: { recipient?: Hex } = {}) => {
   const t = useI18nContext();
   const { currentConfirmation } = useConfirmContext<TransactionMeta>();
-  const to = recipient ?? currentConfirmation?.txParams?.to;
-  const isBatch = currentConfirmation?.type === TransactionType.batch;
+  const { nestedTransactions, txParams, chainId, id } =
+    currentConfirmation ?? {};
+  const { from, to: txTo } = txParams ?? {};
+  const to = recipient ?? txTo;
+
+  const isBatch =
+    isBatchTransaction(nestedTransactions) &&
+    to?.toLowerCase() === from.toLowerCase();
 
   if (!to || !isValidAddress(to)) {
     return null;
   }
 
-  const { chainId } = currentConfirmation;
-
   return (
     <ConfirmInfoAlertRow
-      ownerId={currentConfirmation.id}
+      ownerId={id}
path: ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.tsx
user: login: matthewwalsh0
body: Minor, is it worth a quick unit test to check the logo is only rendered if from equals to?
created_at: 2025-04-24T10:29:09Z
author_association: MEMBER
diff_hunk: @@ -65,18 +65,22 @@ export const OriginRow = () => {
 export const RecipientRow = ({ recipient }: { recipient?: Hex } = {}) => {
   const t = useI18nContext();
   const { currentConfirmation } = useConfirmContext<TransactionMeta>();
-  const to = recipient ?? currentConfirmation?.txParams?.to;
-  const isBatch = currentConfirmation?.type === TransactionType.batch;
+  const { nestedTransactions, txParams, chainId, id } =
+    currentConfirmation ?? {};
+  const { from, to: txTo } = txParams ?? {};
+  const to = recipient ?? txTo;
+
+  const isBatch =
+    isBatchTransaction(nestedTransactions) &&
+    to?.toLowerCase() === from.toLowerCase();
 
   if (!to || !isValidAddress(to)) {
     return null;
   }
 
-  const { chainId } = currentConfirmation;
-
   return (
     <ConfirmInfoAlertRow
-      ownerId={currentConfirmation.id}
+      ownerId={id}
path: ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.tsx
user: login: vinistevam
body: Good point, added some coverage for this part.
created_at: 2025-04-24T14:52:33Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-23T13:09:25Z
body: **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.
author_association: CONTRIBUTOR
user: login: metamaskbot
created_at: 2025-04-23T13:11:18Z
body: <!-- METAMASK-CODEOWNERS-BOT -->
✨ Files requiring CODEOWNER review ✨
---
✅ @MetaMask/confirmations
- `ui/pages/confirmations/components/confirm/info/shared/transaction-details/__snapshots__/transaction-details.test.tsx.snap`
- `ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.test.tsx`
- `ui/pages/confirmations/components/confirm/info/shared/transaction-details/transaction-details.tsx`


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-24T05:14:17Z
body: <details><summary>Builds ready [cc14916]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (beta): <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14633528457/builds-beta/metamask-beta-chrome-12.15.2-beta.0.zip">chrome</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds-test/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds-test-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14633528457/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14633528457/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14633528457/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4815739/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/ui-13.html">13</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/693f219c-3b16-4f75-b101-e3c51d5e2918/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1210 ± 71 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1210</td><td align="right">1101</td><td align="right">1480</td><td align="right">71</td><td align="right">1243</td><td align="right">1329</td></tr><tr><td>load</td><td align="right">1046</td><td align="right">947</td><td align="right">1271</td><td align="right">63</td><td align="right">1087</td><td align="right">1165</td></tr><tr><td>domContentLoaded</td><td align="right">1040</td><td align="right">942</td><td align="right">1260</td><td align="right">62</td><td align="right">1081</td><td align="right">1159</td></tr><tr><td>domInteractive</td><td align="right">18</td><td align="right">13</td><td align="right">63</td><td align="right">8</td><td align="right">16</td><td align="right">28</td></tr><tr><td>firstPaint</td><td align="right">725</td><td align="right">81</td><td align="right">1269</td><td align="right">408</td><td align="right">1063</td><td align="right">1141</td></tr><tr><td>backgroundConnect</td><td align="right">7</td><td align="right">4</td><td align="right">24</td><td align="right">3</td><td align="right">8</td><td align="right">12</td></tr><tr><td>firstReactRender</td><td align="right">21</td><td align="right">15</td><td align="right">45</td><td align="right">6</td><td align="right">21</td><td align="right">36</td></tr><tr><td>getState</td><td align="right">13</td><td align="right">5</td><td align="right">33</td><td align="right">8</td><td align="right">19</td><td align="right">28</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">804</td><td align="right">709</td><td align="right">1018</td><td align="right">59</td><td align="right">847</td><td align="right">922</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">4</td><td align="right">14</td><td align="right">2</td><td align="right">8</td><td align="right">13</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2070</td><td align="right">1555</td><td align="right">2465</td><td align="right">178</td><td align="right">2193</td><td align="right">2310</td></tr><tr><td>load</td><td align="right">1605</td><td align="right">1238</td><td align="right">2003</td><td align="right">142</td><td align="right">1699</td><td align="right">1835</td></tr><tr><td>domContentLoaded</td><td align="right">1598</td><td align="right">1232</td><td align="right">2000</td><td align="right">141</td><td align="right">1692</td><td align="right">1817</td></tr><tr><td>domInteractive</td><td align="right">15</td><td align="right">11</td><td align="right">57</td><td align="right">11</td><td align="right">13</td><td align="right">49</td></tr><tr><td>firstPaint</td><td align="right">172</td><td align="right">67</td><td align="right">574</td><td align="right">69</td><td align="right">201</td><td align="right">277</td></tr><tr><td>backgroundConnect</td><td align="right">25</td><td align="right">9</td><td align="right">181</td><td align="right">21</td><td align="right">24</td><td align="right">59</td></tr><tr><td>firstReactRender</td><td align="right">183</td><td align="right">54</td><td align="right">383</td><td align="right">117</td><td align="right">311</td><td align="right">358</td></tr><tr><td>getState</td><td align="right">11</td><td align="right">3</td><td align="right">49</td><td align="right">6</td><td align="right">13</td><td align="right">20</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">6</td><td align="right">1</td><td align="right">3</td><td align="right">4</td></tr><tr><td>loadScripts</td><td align="right">1593</td><td align="right">1230</td><td align="right">1998</td><td align="right">142</td><td align="right">1689</td><td align="right">1816</td></tr><tr><td>setupStore</td><td align="right">18</td><td align="right">6</td><td align="right">287</td><td align="right">28</td><td align="right">19</td><td align="right">30</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1349</td><td align="right">1157</td><td align="right">1686</td><td align="right">99</td><td align="right">1418</td><td align="right">1540</td></tr><tr><td>load</td><td align="right">1204</td><td align="right">1032</td><td align="right">1521</td><td align="right">106</td><td align="right">1272</td><td align="right">1387</td></tr><tr><td>domContentLoaded</td><td align="right">1204</td><td align="right">1031</td><td align="right">1521</td><td align="right">106</td><td align="right">1271</td><td align="right">1387</td></tr><tr><td>domInteractive</td><td align="right">108</td><td align="right">35</td><td align="right">352</td><td align="right">44</td><td align="right">123</td><td align="right">167</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">21</td><td align="right">14</td><td align="right">103</td><td align="right">11</td><td align="right">21</td><td align="right">41</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">19</td><td align="right">35</td><td align="right">3</td><td align="right">23</td><td align="right">28</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">15</td><td align="right">2</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1185</td><td align="right">1014</td><td align="right">1492</td><td align="right">107</td><td align="right">1258</td><td align="right">1367</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">24</td><td align="right">3</td><td align="right">6</td><td align="right">10</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1495</td><td align="right">1277</td><td align="right">1918</td><td align="right">121</td><td align="right">1547</td><td align="right">1798</td></tr><tr><td>load</td><td align="right">1280</td><td align="right">1113</td><td align="right">1654</td><td align="right">108</td><td align="right">1334</td><td align="right">1553</td></tr><tr><td>domContentLoaded</td><td align="right">1280</td><td align="right">1113</td><td align="right">1654</td><td align="right">108</td><td align="right">1334</td><td align="right">1553</td></tr><tr><td>domInteractive</td><td align="right">79</td><td align="right">33</td><td align="right">290</td><td align="right">27</td><td align="right">85</td><td align="right">112</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">24</td><td align="right">14</td><td align="right">82</td><td align="right">13</td><td align="right">22</td><td align="right">58</td></tr><tr><td>firstReactRender</td><td align="right">35</td><td align="right">29</td><td align="right">62</td><td align="right">5</td><td align="right">36</td><td align="right">44</td></tr><tr><td>getState</td><td align="right">8</td><td align="right">4</td><td align="right">26</td><td align="right">4</td><td align="right">9</td><td align="right">19</td></tr><tr><td>initialActions</td><td align="right">1</td><td align="right">0</td><td align="right">2</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1259</td><td align="right">1103</td><td align="right">1641</td><td align="right">106</td><td align="right">1318</td><td align="right">1535</td></tr><tr><td>setupStore</td><td align="right">9</td><td align="right">5</td><td align="right">45</td><td align="right">7</td><td align="right">8</td><td align="right">25</td></tr></tbody></table>Benchmark value 58 exceeds gate value 49 for firefox webpack home p95 backgroundConnect<br>
<b>Sum of mean exceeds: 0ms | Sum of p95 exceeds: 9ms<br>
Sum of all benchmark exceeds: 9ms</b><br>
</details>


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-24T06:02:14Z
body: <details><summary>Builds ready [49d02ed]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (beta): <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14634086054/builds-beta/metamask-beta-chrome-12.15.2-beta.0.zip">chrome</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds-test/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds-test-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14634086054/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14634086054/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14634086054/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4815799/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/ui-13.html">13</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/f6a963a1-3fd2-46f9-9af9-8aca0439132d/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1209 ± 64 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1209</td><td align="right">1096</td><td align="right">1465</td><td align="right">64</td><td align="right">1244</td><td align="right">1340</td></tr><tr><td>load</td><td align="right">1044</td><td align="right">935</td><td align="right">1202</td><td align="right">57</td><td align="right">1071</td><td align="right">1155</td></tr><tr><td>domContentLoaded</td><td align="right">1036</td><td align="right">931</td><td align="right">1197</td><td align="right">58</td><td align="right">1066</td><td align="right">1148</td></tr><tr><td>domInteractive</td><td align="right">18</td><td align="right">13</td><td align="right">62</td><td align="right">7</td><td align="right">17</td><td align="right">28</td></tr><tr><td>firstPaint</td><td align="right">748</td><td align="right">84</td><td align="right">1208</td><td align="right">409</td><td align="right">1064</td><td align="right">1131</td></tr><tr><td>backgroundConnect</td><td align="right">8</td><td align="right">4</td><td align="right">110</td><td align="right">11</td><td align="right">7</td><td align="right">11</td></tr><tr><td>firstReactRender</td><td align="right">20</td><td align="right">16</td><td align="right">48</td><td align="right">4</td><td align="right">20</td><td align="right">30</td></tr><tr><td>getState</td><td align="right">12</td><td align="right">5</td><td align="right">91</td><td align="right">11</td><td align="right">16</td><td align="right">31</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">0</td></tr><tr><td>loadScripts</td><td align="right">799</td><td align="right">702</td><td align="right">946</td><td align="right">54</td><td align="right">829</td><td align="right">914</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">5</td><td align="right">14</td><td align="right">2</td><td align="right">8</td><td align="right">12</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2106</td><td align="right">1732</td><td align="right">2627</td><td align="right">163</td><td align="right">2220</td><td align="right">2332</td></tr><tr><td>load</td><td align="right">1623</td><td align="right">1346</td><td align="right">1940</td><td align="right">121</td><td align="right">1726</td><td align="right">1813</td></tr><tr><td>domContentLoaded</td><td align="right">1617</td><td align="right">1342</td><td align="right">1930</td><td align="right">120</td><td align="right">1721</td><td align="right">1809</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">11</td><td align="right">58</td><td align="right">10</td><td align="right">13</td><td align="right">47</td></tr><tr><td>firstPaint</td><td align="right">180</td><td align="right">66</td><td align="right">354</td><td align="right">66</td><td align="right">213</td><td align="right">316</td></tr><tr><td>backgroundConnect</td><td align="right">25</td><td align="right">9</td><td align="right">95</td><td align="right">15</td><td align="right">26</td><td align="right">63</td></tr><tr><td>firstReactRender</td><td align="right">219</td><td align="right">55</td><td align="right">378</td><td align="right">120</td><td align="right">342</td><td align="right">364</td></tr><tr><td>getState</td><td align="right">11</td><td align="right">3</td><td align="right">34</td><td align="right">5</td><td align="right">13</td><td align="right">21</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">8</td><td align="right">1</td><td align="right">3</td><td align="right">5</td></tr><tr><td>loadScripts</td><td align="right">1612</td><td align="right">1341</td><td align="right">1906</td><td align="right">120</td><td align="right">1718</td><td align="right">1808</td></tr><tr><td>setupStore</td><td align="right">18</td><td align="right">6</td><td align="right">193</td><td align="right">19</td><td align="right">19</td><td align="right">29</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1363</td><td align="right">1184</td><td align="right">1824</td><td align="right">115</td><td align="right">1414</td><td align="right">1599</td></tr><tr><td>load</td><td align="right">1217</td><td align="right">1020</td><td align="right">1648</td><td align="right">113</td><td align="right">1271</td><td align="right">1397</td></tr><tr><td>domContentLoaded</td><td align="right">1217</td><td align="right">1020</td><td align="right">1648</td><td align="right">113</td><td align="right">1271</td><td align="right">1397</td></tr><tr><td>domInteractive</td><td align="right">107</td><td align="right">39</td><td align="right">307</td><td align="right">36</td><td align="right">118</td><td align="right">153</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">21</td><td align="right">14</td><td align="right">103</td><td align="right">13</td><td align="right">19</td><td align="right">42</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">19</td><td align="right">41</td><td align="right">4</td><td align="right">22</td><td align="right">30</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">4</td><td align="right">177</td><td align="right">17</td><td align="right">7</td><td align="right">10</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1198</td><td align="right">1006</td><td align="right">1630</td><td align="right">114</td><td align="right">1257</td><td align="right">1381</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">38</td><td align="right">4</td><td align="right">6</td><td align="right">9</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1530</td><td align="right">1337</td><td align="right">2085</td><td align="right">156</td><td align="right">1583</td><td align="right">1902</td></tr><tr><td>load</td><td align="right">1301</td><td align="right">1164</td><td align="right">1740</td><td align="right">133</td><td align="right">1331</td><td align="right">1646</td></tr><tr><td>domContentLoaded</td><td align="right">1301</td><td align="right">1164</td><td align="right">1739</td><td align="right">132</td><td align="right">1331</td><td align="right">1646</td></tr><tr><td>domInteractive</td><td align="right">83</td><td align="right">59</td><td align="right">159</td><td align="right">21</td><td align="right">87</td><td align="right">134</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">23</td><td align="right">15</td><td align="right">66</td><td align="right">8</td><td align="right">24</td><td align="right">42</td></tr><tr><td>firstReactRender</td><td align="right">37</td><td align="right">29</td><td align="right">63</td><td align="right">6</td><td align="right">39</td><td align="right">46</td></tr><tr><td>getState</td><td align="right">13</td><td align="right">4</td><td align="right">263</td><td align="right">26</td><td align="right">10</td><td align="right">30</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1280</td><td align="right">1145</td><td align="right">1716</td><td align="right">131</td><td align="right">1310</td><td align="right">1619</td></tr><tr><td>setupStore</td><td align="right">10</td><td align="right">5</td><td align="right">54</td><td align="right">7</td><td align="right">9</td><td align="right">18</td></tr></tbody></table></details>


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-24T09:31:34Z
body: <details><summary>Builds ready [a05b7bf]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (beta): <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14637507930/builds-beta/metamask-beta-chrome-12.15.2-beta.0.zip">chrome</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds-test/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds-test-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14637507930/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14637507930/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14637507930/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4816641/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/ui-13.html">13</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/d17cbe93-3e71-4adb-95cb-fea0f425b204/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1205 ± 60 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1205</td><td align="right">1104</td><td align="right">1344</td><td align="right">60</td><td align="right">1243</td><td align="right">1333</td></tr><tr><td>load</td><td align="right">1045</td><td align="right">954</td><td align="right">1168</td><td align="right">55</td><td align="right">1087</td><td align="right">1156</td></tr><tr><td>domContentLoaded</td><td align="right">1040</td><td align="right">950</td><td align="right">1159</td><td align="right">54</td><td align="right">1082</td><td align="right">1152</td></tr><tr><td>domInteractive</td><td align="right">18</td><td align="right">13</td><td align="right">63</td><td align="right">9</td><td align="right">17</td><td align="right">34</td></tr><tr><td>firstPaint</td><td align="right">717</td><td align="right">110</td><td align="right">1174</td><td align="right">411</td><td align="right">1054</td><td align="right">1152</td></tr><tr><td>backgroundConnect</td><td align="right">7</td><td align="right">4</td><td align="right">15</td><td align="right">2</td><td align="right">7</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">20</td><td align="right">15</td><td align="right">46</td><td align="right">5</td><td align="right">20</td><td align="right">32</td></tr><tr><td>getState</td><td align="right">13</td><td align="right">4</td><td align="right">99</td><td align="right">12</td><td align="right">19</td><td align="right">30</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">800</td><td align="right">717</td><td align="right">917</td><td align="right">51</td><td align="right">836</td><td align="right">903</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">15</td><td align="right">2</td><td align="right">8</td><td align="right">12</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2061</td><td align="right">1702</td><td align="right">2435</td><td align="right">183</td><td align="right">2198</td><td align="right">2303</td></tr><tr><td>load</td><td align="right">1594</td><td align="right">1330</td><td align="right">1887</td><td align="right">135</td><td align="right">1721</td><td align="right">1784</td></tr><tr><td>domContentLoaded</td><td align="right">1587</td><td align="right">1326</td><td align="right">1880</td><td align="right">134</td><td align="right">1714</td><td align="right">1774</td></tr><tr><td>domInteractive</td><td align="right">15</td><td align="right">11</td><td align="right">55</td><td align="right">10</td><td align="right">13</td><td align="right">44</td></tr><tr><td>firstPaint</td><td align="right">180</td><td align="right">70</td><td align="right">378</td><td align="right">65</td><td align="right">231</td><td align="right">322</td></tr><tr><td>backgroundConnect</td><td align="right">25</td><td align="right">10</td><td align="right">85</td><td align="right">16</td><td align="right">29</td><td align="right">62</td></tr><tr><td>firstReactRender</td><td align="right">189</td><td align="right">55</td><td align="right">444</td><td align="right">119</td><td align="right">321</td><td align="right">356</td></tr><tr><td>getState</td><td align="right">11</td><td align="right">4</td><td align="right">88</td><td align="right">9</td><td align="right">13</td><td align="right">22</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">6</td><td align="right">1</td><td align="right">3</td><td align="right">4</td></tr><tr><td>loadScripts</td><td align="right">1582</td><td align="right">1325</td><td align="right">1857</td><td align="right">134</td><td align="right">1710</td><td align="right">1771</td></tr><tr><td>setupStore</td><td align="right">18</td><td align="right">6</td><td align="right">172</td><td align="right">17</td><td align="right">21</td><td align="right">28</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1332</td><td align="right">1131</td><td align="right">1826</td><td align="right">141</td><td align="right">1379</td><td align="right">1677</td></tr><tr><td>load</td><td align="right">1191</td><td align="right">1012</td><td align="right">1697</td><td align="right">146</td><td align="right">1245</td><td align="right">1544</td></tr><tr><td>domContentLoaded</td><td align="right">1190</td><td align="right">1011</td><td align="right">1697</td><td align="right">146</td><td align="right">1245</td><td align="right">1544</td></tr><tr><td>domInteractive</td><td align="right">103</td><td align="right">39</td><td align="right">265</td><td align="right">34</td><td align="right">115</td><td align="right">156</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">21</td><td align="right">14</td><td align="right">90</td><td align="right">13</td><td align="right">20</td><td align="right">43</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">18</td><td align="right">79</td><td align="right">6</td><td align="right">22</td><td align="right">26</td></tr><tr><td>getState</td><td align="right">6</td><td align="right">4</td><td align="right">13</td><td align="right">2</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1172</td><td align="right">1002</td><td align="right">1681</td><td align="right">148</td><td align="right">1227</td><td align="right">1524</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">27</td><td align="right">3</td><td align="right">6</td><td align="right">7</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1497</td><td align="right">1351</td><td align="right">1872</td><td align="right">110</td><td align="right">1561</td><td align="right">1736</td></tr><tr><td>load</td><td align="right">1283</td><td align="right">1155</td><td align="right">1610</td><td align="right">102</td><td align="right">1357</td><td align="right">1489</td></tr><tr><td>domContentLoaded</td><td align="right">1283</td><td align="right">1155</td><td align="right">1610</td><td align="right">102</td><td align="right">1357</td><td align="right">1488</td></tr><tr><td>domInteractive</td><td align="right">88</td><td align="right">35</td><td align="right">316</td><td align="right">33</td><td align="right">101</td><td align="right">148</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">23</td><td align="right">15</td><td align="right">87</td><td align="right">9</td><td align="right">23</td><td align="right">42</td></tr><tr><td>firstReactRender</td><td align="right">35</td><td align="right">29</td><td align="right">52</td><td align="right">5</td><td align="right">36</td><td align="right">47</td></tr><tr><td>getState</td><td align="right">8</td><td align="right">4</td><td align="right">30</td><td align="right">5</td><td align="right">9</td><td align="right">14</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">2</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1263</td><td align="right">1134</td><td align="right">1591</td><td align="right">102</td><td align="right">1331</td><td align="right">1468</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">59</td><td align="right">6</td><td align="right">8</td><td align="right">12</td></tr></tbody></table>Benchmark value 1677 exceeds gate value 1660 for firefox browserify home p95 uiStartup<br>
Benchmark value 1544 exceeds gate value 1495 for firefox browserify home p95 load<br>
Benchmark value 1544 exceeds gate value 1495 for firefox browserify home p95 domContentLoaded<br>
Benchmark value 1524 exceeds gate value 1475 for firefox browserify home p95 loadScripts<br>
<b>Sum of mean exceeds: 0ms | Sum of p95 exceeds: 164ms<br>
Sum of all benchmark exceeds: 164ms</b><br>
</details>

<details><summary>Bundle size diffs</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 10 Bytes (0%)</li>
<li>common: 0 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-24T15:51:51Z
body: <details><summary>Builds ready [6c32825]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (beta): <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14644713543/builds-beta/metamask-beta-chrome-12.15.2-beta.0.zip">chrome</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds-test/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds-test-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14644713543/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14644713543/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14644713543/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4819562/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/ui-13.html">13</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/2acb242b-51ed-4e5b-b510-8a9e627298e6/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1277 ± 73 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1277</td><td align="right">1137</td><td align="right">1536</td><td align="right">73</td><td align="right">1318</td><td align="right">1410</td></tr><tr><td>load</td><td align="right">1102</td><td align="right">987</td><td align="right">1340</td><td align="right">72</td><td align="right">1136</td><td align="right">1241</td></tr><tr><td>domContentLoaded</td><td align="right">1095</td><td align="right">944</td><td align="right">1334</td><td align="right">73</td><td align="right">1127</td><td align="right">1233</td></tr><tr><td>domInteractive</td><td align="right">19</td><td align="right">14</td><td align="right">72</td><td align="right">8</td><td align="right">18</td><td align="right">33</td></tr><tr><td>firstPaint</td><td align="right">726</td><td align="right">84</td><td align="right">1339</td><td align="right">443</td><td align="right">1106</td><td align="right">1231</td></tr><tr><td>backgroundConnect</td><td align="right">9</td><td align="right">4</td><td align="right">138</td><td align="right">13</td><td align="right">8</td><td align="right">18</td></tr><tr><td>firstReactRender</td><td align="right">23</td><td align="right">16</td><td align="right">73</td><td align="right">9</td><td align="right">22</td><td align="right">42</td></tr><tr><td>getState</td><td align="right">14</td><td align="right">4</td><td align="right">45</td><td align="right">9</td><td align="right">19</td><td align="right">33</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">846</td><td align="right">693</td><td align="right">1089</td><td align="right">69</td><td align="right">885</td><td align="right">978</td></tr><tr><td>setupStore</td><td align="right">9</td><td align="right">5</td><td align="right">23</td><td align="right">3</td><td align="right">9</td><td align="right">15</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2109</td><td align="right">1705</td><td align="right">2390</td><td align="right">167</td><td align="right">2239</td><td align="right">2350</td></tr><tr><td>load</td><td align="right">1638</td><td align="right">1333</td><td align="right">1840</td><td align="right">122</td><td align="right">1739</td><td align="right">1806</td></tr><tr><td>domContentLoaded</td><td align="right">1631</td><td align="right">1329</td><td align="right">1814</td><td align="right">120</td><td align="right">1732</td><td align="right">1797</td></tr><tr><td>domInteractive</td><td align="right">15</td><td align="right">11</td><td align="right">80</td><td align="right">10</td><td align="right">13</td><td align="right">42</td></tr><tr><td>firstPaint</td><td align="right">178</td><td align="right">69</td><td align="right">576</td><td align="right">82</td><td align="right">219</td><td align="right">328</td></tr><tr><td>backgroundConnect</td><td align="right">25</td><td align="right">10</td><td align="right">81</td><td align="right">15</td><td align="right">27</td><td align="right">60</td></tr><tr><td>firstReactRender</td><td align="right">201</td><td align="right">55</td><td align="right">379</td><td align="right">118</td><td align="right">323</td><td align="right">359</td></tr><tr><td>getState</td><td align="right">12</td><td align="right">4</td><td align="right">85</td><td align="right">10</td><td align="right">14</td><td align="right">26</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">7</td><td align="right">1</td><td align="right">3</td><td align="right">5</td></tr><tr><td>loadScripts</td><td align="right">1626</td><td align="right">1328</td><td align="right">1810</td><td align="right">120</td><td align="right">1729</td><td align="right">1794</td></tr><tr><td>setupStore</td><td align="right">19</td><td align="right">7</td><td align="right">291</td><td align="right">28</td><td align="right">20</td><td align="right">32</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1329</td><td align="right">1151</td><td align="right">1817</td><td align="right">124</td><td align="right">1387</td><td align="right">1618</td></tr><tr><td>load</td><td align="right">1188</td><td align="right">1013</td><td align="right">1690</td><td align="right">128</td><td align="right">1242</td><td align="right">1502</td></tr><tr><td>domContentLoaded</td><td align="right">1187</td><td align="right">1012</td><td align="right">1690</td><td align="right">128</td><td align="right">1242</td><td align="right">1502</td></tr><tr><td>domInteractive</td><td align="right">102</td><td align="right">35</td><td align="right">172</td><td align="right">24</td><td align="right">114</td><td align="right">154</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">22</td><td align="right">12</td><td align="right">120</td><td align="right">16</td><td align="right">20</td><td align="right">55</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">18</td><td align="right">53</td><td align="right">6</td><td align="right">22</td><td align="right">31</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">4</td><td align="right">203</td><td align="right">25</td><td align="right">8</td><td align="right">12</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1167</td><td align="right">997</td><td align="right">1662</td><td align="right">131</td><td align="right">1222</td><td align="right">1488</td></tr><tr><td>setupStore</td><td align="right">5</td><td align="right">3</td><td align="right">10</td><td align="right">1</td><td align="right">6</td><td align="right">7</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1521</td><td align="right">1323</td><td align="right">2008</td><td align="right">131</td><td align="right">1595</td><td align="right">1773</td></tr><tr><td>load</td><td align="right">1308</td><td align="right">1124</td><td align="right">1730</td><td align="right">123</td><td align="right">1372</td><td align="right">1577</td></tr><tr><td>domContentLoaded</td><td align="right">1307</td><td align="right">1124</td><td align="right">1730</td><td align="right">123</td><td align="right">1371</td><td align="right">1576</td></tr><tr><td>domInteractive</td><td align="right">86</td><td align="right">37</td><td align="right">164</td><td align="right">24</td><td align="right">97</td><td align="right">142</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">22</td><td align="right">14</td><td align="right">75</td><td align="right">9</td><td align="right">23</td><td align="right">38</td></tr><tr><td>firstReactRender</td><td align="right">35</td><td align="right">29</td><td align="right">63</td><td align="right">5</td><td align="right">36</td><td align="right">44</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">5</td><td align="right">34</td><td align="right">5</td><td align="right">9</td><td align="right">22</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1287</td><td align="right">1103</td><td align="right">1702</td><td align="right">120</td><td align="right">1346</td><td align="right">1530</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">5</td><td align="right">31</td><td align="right">3</td><td align="right">8</td><td align="right">11</td></tr></tbody></table>cc: @HowardBraham<br>
Benchmark value 1278 exceeds gate value 1234 for chrome browserify home mean uiStartup<br>
Benchmark value 1103 exceeds gate value 1070 for chrome browserify home mean load<br>
Benchmark value 1095 exceeds gate value 1061 for chrome browserify home mean domContentLoaded<br>
Benchmark value 846 exceeds gate value 830 for chrome browserify home mean loadScripts<br>
Benchmark value 1411 exceeds gate value 1365 for chrome browserify home p95 uiStartup<br>
Benchmark value 1241 exceeds gate value 1190 for chrome browserify home p95 load<br>
Benchmark value 1234 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded<br>
Benchmark value 1231 exceeds gate value 1180 for chrome browserify home p95 firstPaint<br>
Benchmark value 978 exceeds gate value 940 for chrome browserify home p95 loadScripts<br>
Benchmark value 1502 exceeds gate value 1495 for firefox browserify home p95 load<br>
Benchmark value 1502 exceeds gate value 1495 for firefox browserify home p95 domContentLoaded<br>
Benchmark value 1488 exceeds gate value 1475 for firefox browserify home p95 loadScripts<br>
<b>Sum of mean exceeds: 127ms | Sum of p95 exceeds: 267ms<br>
Sum of all benchmark exceeds: 394ms</b><br>
</details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: -998 Bytes (-0.02%)</li>
<li>ui: 742 Bytes (0.01%)</li>
<li>common: 1.07 KiB (0.01%)</li></ul></details>


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-25T14:24:26Z
body: <details><summary>Builds ready [00af427]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (beta): <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14666165145/builds-beta/metamask-beta-chrome-12.15.2-beta.0.zip">chrome</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds-test/metamask-chrome-12.15.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds-test-mv2/metamask-firefox-12.15.2.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.2-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14666165145/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14666165145/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14666165145/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4827890/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/ui-13.html">13</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/49b5bca0-3a3c-484e-8245-06eef9b4e5e2/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1201 ± 60 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1201</td><td align="right">1088</td><td align="right">1404</td><td align="right">60</td><td align="right">1241</td><td align="right">1325</td></tr><tr><td>load</td><td align="right">1040</td><td align="right">940</td><td align="right">1221</td><td align="right">57</td><td align="right">1075</td><td align="right">1151</td></tr><tr><td>domContentLoaded</td><td align="right">1034</td><td align="right">936</td><td align="right">1195</td><td align="right">56</td><td align="right">1070</td><td align="right">1146</td></tr><tr><td>domInteractive</td><td align="right">18</td><td align="right">13</td><td align="right">67</td><td align="right">10</td><td align="right">17</td><td align="right">33</td></tr><tr><td>firstPaint</td><td align="right">669</td><td align="right">133</td><td align="right">1231</td><td align="right">421</td><td align="right">1053</td><td align="right">1168</td></tr><tr><td>backgroundConnect</td><td align="right">7</td><td align="right">4</td><td align="right">21</td><td align="right">2</td><td align="right">7</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">20</td><td align="right">16</td><td align="right">35</td><td align="right">3</td><td align="right">20</td><td align="right">28</td></tr><tr><td>getState</td><td align="right">13</td><td align="right">5</td><td align="right">32</td><td align="right">7</td><td align="right">19</td><td align="right">25</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">799</td><td align="right">712</td><td align="right">951</td><td align="right">55</td><td align="right">834</td><td align="right">900</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">4</td><td align="right">17</td><td align="right">2</td><td align="right">8</td><td align="right">13</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2127</td><td align="right">1701</td><td align="right">2616</td><td align="right">173</td><td align="right">2252</td><td align="right">2352</td></tr><tr><td>load</td><td align="right">1650</td><td align="right">1327</td><td align="right">2096</td><td align="right">138</td><td align="right">1738</td><td align="right">1917</td></tr><tr><td>domContentLoaded</td><td align="right">1641</td><td align="right">1323</td><td align="right">2020</td><td align="right">131</td><td align="right">1728</td><td align="right">1876</td></tr><tr><td>domInteractive</td><td align="right">15</td><td align="right">11</td><td align="right">64</td><td align="right">10</td><td align="right">13</td><td align="right">42</td></tr><tr><td>firstPaint</td><td align="right">180</td><td align="right">64</td><td align="right">462</td><td align="right">68</td><td align="right">228</td><td align="right">303</td></tr><tr><td>backgroundConnect</td><td align="right">29</td><td align="right">9</td><td align="right">234</td><td align="right">33</td><td align="right">27</td><td align="right">71</td></tr><tr><td>firstReactRender</td><td align="right">204</td><td align="right">54</td><td align="right">366</td><td align="right">118</td><td align="right">334</td><td align="right">358</td></tr><tr><td>getState</td><td align="right">16</td><td align="right">4</td><td align="right">255</td><td align="right">35</td><td align="right">13</td><td align="right">25</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">7</td><td align="right">1</td><td align="right">4</td><td align="right">5</td></tr><tr><td>loadScripts</td><td align="right">1637</td><td align="right">1322</td><td align="right">1996</td><td align="right">129</td><td align="right">1726</td><td align="right">1867</td></tr><tr><td>setupStore</td><td align="right">17</td><td align="right">6</td><td align="right">45</td><td align="right">8</td><td align="right">22</td><td align="right">32</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1346</td><td align="right">1149</td><td align="right">1685</td><td align="right">112</td><td align="right">1394</td><td align="right">1609</td></tr><tr><td>load</td><td align="right">1205</td><td align="right">1008</td><td align="right">1567</td><td align="right">115</td><td align="right">1269</td><td align="right">1441</td></tr><tr><td>domContentLoaded</td><td align="right">1205</td><td align="right">1008</td><td align="right">1567</td><td align="right">115</td><td align="right">1269</td><td align="right">1441</td></tr><tr><td>domInteractive</td><td align="right">101</td><td align="right">38</td><td align="right">220</td><td align="right">30</td><td align="right">113</td><td align="right">166</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">19</td><td align="right">12</td><td align="right">79</td><td align="right">8</td><td align="right">19</td><td align="right">27</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">18</td><td align="right">55</td><td align="right">6</td><td align="right">22</td><td align="right">30</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">27</td><td align="right">3</td><td align="right">7</td><td align="right">10</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1189</td><td align="right">995</td><td align="right">1551</td><td align="right">114</td><td align="right">1252</td><td align="right">1425</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">25</td><td align="right">3</td><td align="right">6</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1460</td><td align="right">1301</td><td align="right">1815</td><td align="right">114</td><td align="right">1527</td><td align="right">1710</td></tr><tr><td>load</td><td align="right">1253</td><td align="right">1126</td><td align="right">1568</td><td align="right">101</td><td align="right">1327</td><td align="right">1463</td></tr><tr><td>domContentLoaded</td><td align="right">1253</td><td align="right">1126</td><td align="right">1567</td><td align="right">101</td><td align="right">1327</td><td align="right">1463</td></tr><tr><td>domInteractive</td><td align="right">76</td><td align="right">35</td><td align="right">139</td><td align="right">16</td><td align="right">84</td><td align="right">110</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">23</td><td align="right">14</td><td align="right">128</td><td align="right">17</td><td align="right">22</td><td align="right">44</td></tr><tr><td>firstReactRender</td><td align="right">34</td><td align="right">28</td><td align="right">71</td><td align="right">5</td><td align="right">36</td><td align="right">43</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">4</td><td align="right">48</td><td align="right">8</td><td align="right">9</td><td align="right">32</td></tr><tr><td>initialActions</td><td align="right">1</td><td align="right">0</td><td align="right">2</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1231</td><td align="right">1111</td><td align="right">1554</td><td align="right">98</td><td align="right">1314</td><td align="right">1426</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">27</td><td align="right">4</td><td align="right">8</td><td align="right">18</td></tr></tbody></table></details>

<details><summary>Bundle size diffs</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 22 Bytes (0%)</li>
<li>common: 0 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR