Skip to content

feat: integrate analytics controller#42885

Merged
gauthierpetetin merged 53 commits into
mainfrom
feat/analytics-controller-extension-integration
Jun 5, 2026
Merged

feat: integrate analytics controller#42885
gauthierpetetin merged 53 commits into
mainfrom
feat/analytics-controller-extension-integration

Conversation

@gauthierpetetin

@gauthierpetetin gauthierpetetin commented May 22, 2026

Copy link
Copy Markdown
Contributor

Description

This PR integrates AnalyticsController in Extension codebase.

It replaces this state:

  • MetaMetricsController's metaMetricsId
  • MetaMetricsController's participateInMetaMetrics
  • MetaMetricsController's segmentApiCalls

by this state:

  • AnalyticsController's analyticsId
  • AnalyticsController's optedIn
  • AnalyticsController's eventQueue
  • MetaMetricsController's completedMetaMetricsOnboarding

Since these changes impact many areas of the codebase, we’ve decided to take a phased approach.

This PR migrates the persisted state and updates the UI compatibility selectors, as well as the background getState() function, to derive the legacy values (metaMetricsId, participateInMetaMetrics) from the new state. This lets existing code continue using the legacy values while the source of truth moves to AnalyticsController.analyticsId, AnalyticsController.optedIn, and MetaMetricsController.completedMetaMetricsOnboarding.

In future phases, we’ll progressively remove all remaining usages of the legacy values (metaMetricsId, participateInMetaMetrics) throughout the codebase.

The files that deserve more attention during PR review are the following:

  • app/scripts/controllers/analytics/platform-adapter.ts
  • app/scripts/controllers/metametrics-controller.ts
flowchart TB
  subgraph Before["Before"]
    direction LR
    MMC1["MetaMetricsController"] --> SDK1["Segment SDK"]
    Early1["Early events"] --> SDK1
  end

  subgraph After["After"]
    direction LR
    MMC2["MetaMetricsController"] --> AC["AnalyticsController"]
    AC --> SDK2["Segment SDK"]
    Early2["Early events"] --> SDK2
  end

  Before ~~~ After
Loading

Changelog

CHANGELOG entry: null

Related issues

Fixes: https://github.com/MetaMask/MetaMask-planning/issues/7193

Manual testing steps

Main test case

  1. Build two different Extensions, one on this branch and one on main, the goal will be to compare events emitted by both and confirm they're equivalent
  2. Go through onboarding with both extension and find your metaMetricsId/analyticsId by doing right click on extension UI, then inspect > Application > Storage > IndexedDB > metamask-backup > MetaMetricsController/AnalyticsController
  3. Open Segment, choose the right source (usually MetaMask Extension [Dev], except if you configured SEGMENT_WRITE_KEY env variable with your own Segment project), and filter events with your metaMetricsId/analyticsId
  4. Confirm the three types of events emitted by both extension are equivalent:
    a. track
    b. identify
    c. page

Edge cases

  • Anonymous events (see list here)
    • Fully anonymous ones
      • These events are fully anonymous in the sense that the entire event, including all properties are considered as sensitive and get anonymized
      • Fully anonymous events are emitted by passing "excludeMetaMetricsId: true" as option (Example here)
      • An easy one to reproduce is "Phishing Page Displayed": visit one of the pages listed here and the event will be emitted
    • Partially anonymous ones
      • These events are partially anonymous in the sense that some properties are considered as sensitive and some are not. As a consequence, 2 events are sent: an anonymous one with all properties, and a non-anonymous one with only properties considered as non-sensitive
      • Partially anonymous events are emitted by passing "sensitiveProperties" (Example here)
      • An easy one to reproduce is "Contact Added": go to Contacts, click "Add contact", and add Vitalik's address as contact (0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045)
      • Before this PR, both events used to have similar messageId (example: "1780055175321.6592", and "1780055175321.6592-0x000"), while with this PR, messageId have a new uuidv4 format and both events don't have similar messageId (example: "5cc0d85e-3f0e-4374-8811-d36924d06689" and "433ff4c1-948d-4a4e-9470-81e878c7df44")
    • Anonymous ones with event renaming
      • Some anonymous events get renamed when being emitted (list of events available here): for example “Signature Requested” gets renamed “Signature Requested Anon”
      • An easy one to reproduce is “Signature Requested” (see Fragments sections below for more detail)
  • Fragments
    • Fragments are events used to tie a multi-step flow together, such as “Signature Requested” followed later by “Signature Approved” or “Signature Rejected”
    • They can be tested by visiting test-dapp, then connect extension, then click "Sign Typed Data V4", then accept or reject signature
    • The purpose of fragments is for both each event of the multi-step flow to share the same properties
    • Before this PR, events from a same fragment used to have similar messageId (example: "signature-3947127447", and "signature-3947127447-success" or "signature-3947127447-failure"), while with this PR, messageId have a new uuidv4 format and events from a same fragment don't have similar messageId (example: "9e3a83d0-ce13-47d2-a2f4-08a6d9adc29d" and "d2368a25-01c5-4b3c-af55-7d5f54eb58a6")
  • Persisted queue
    • Go to home page
    • Check that persisted queue is an empty object: right click on extension UI, then inspect > Application > Storage > IndexedDB > metamask-backup > MetaMetricsController/AnalyticsController > segmentApiCalls/eventQueue
    • Turn internet off
    • Click on "Swap"
    • Confirm no event is sent to Segment
    • Confirm events are added to persisted queue, including "Unified SwapBridge Button Clicked" (click on refresh button in the inspector to see them)
    • Wait for 5 minutes
    • Turn internet on
    • Restart extension
    • Confirm events are sent to Segment, including "Unified SwapBridge Button Clicked", and there's a 5 minute difference between timestamp and sentAt
    • These repro steps are not working on main branch, because persisted queue used to get cleared, regardless of whether the callback represents success or failure, whereas in this PR, it only gets cleared upon success. That change of behavior introduces the risk that if an event is malformed, it can end up being retried after every extension restart. But at the same time it allows us to collect more events, in cases of transient failures (e.g. offline, timeout). This core repo PR got opened to align behavior with what's currently on main: fix: clear analytics queue on callback errors core#8934
  • Early events
    • Right click on extension UI, then inspect > Application > Storage > Extension storage > Local > KeyringController > Right click to delete KeyringController
    • Restart Extension straight away
    • You should see "Vault Corruption Restore Wallet Screen Viewed" event in Segment
  • Opt out event
    • Start from a fresh onboarding state, go through create/import wallet, on the MetaMetrics onboarding page, uncheck “Participate in MetaMetrics”, continue and finish onboarding.
      • On Chrome, you should see "Metrics Opt Out" event in Segment
      • On Firefox, you should not see "Metrics Opt Out" event in Segment
  • Delete metametrics
    • Right click on extension UI, then inspect > Network, and paste "regulations" in the search bar
    • Go to Settings > Privacy > Delete MetaMetrics data and click the button
    • You should see an API call in the Networks tab, with "subjectIds" array as parameter, and your metaMetricsId/analyticsId included in that array

Screenshots/Recordings

NA

Pre-merge author checklist

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.

Note

High Risk
Central refactor of consent, IDs, queuing, and anonymous event handling across background, Segment, and data-deletion paths; messageId and offline-queue behavior differ from main and can affect metrics parity or stuck retries.

Overview
This PR routes MetaMetrics track / identify / page through AnalyticsController and a new Segment platform-adapter, instead of MetaMetricsController calling Segment directly.

State & consent: Persisted metaMetricsId, participateInMetaMetrics, and segmentApiCalls are removed from MetaMetricsController in favor of AnalyticsController (analyticsId, optedIn, eventQueue) plus completedMetaMetricsOnboarding. Opt-in/out now calls AnalyticsController:optIn / optOut; IDs come from getMetaMetricsId() → analytics state. Sentry snapshots add AnalyticsController and drop the old MMC consent fields.

Behavior changes: Anonymous / sensitive events use a properties.anonymous marker; the adapter swaps to the shared anonymous ID and renames select signature/transaction events. Direct Segment logic (payload building, segmentApiCalls MV3 replay, deterministic messageId, generateMetaMetricsId) is removed from MMC. Early and opt-out paths use custom-segment-tracking reading AnalyticsController from backup state. RPC middleware, data deletion, and background helpers read consent/ID via controller.getState() / analyticsController.state.

Tests: Large metametrics-controller test updates; new platform-adapter unit tests.

Reviewed by Cursor Bugbot for commit 5d73b11. Bugbot is set up for automated code reviews on this repo. Configure here.

@gauthierpetetin gauthierpetetin self-assigned this May 22, 2026
@gauthierpetetin gauthierpetetin added the team-extension-platform Extension Platform team label May 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

@metamaskbotv2

metamaskbotv2 Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

✨ Files requiring CODEOWNER review ✨

👨‍🔧 @MetaMask/core-extension-ux (9 files, +24 -22)
  • 📁 ui/
    • 📁 components/
      • 📁 multichain/
        • 📁 funding-method-modal/
          • 📄 funding-method-modal.tsx +2 -2
        • 📁 global-menu-drawer/
          • 📄 useGlobalMenuSections.tsx +2 -2
        • 📁 menu-items/
          • 📄 discover-menu-item.tsx +2 -2
        • 📁 token-list-item/
          • 📄 stakeable-link.tsx +2 -2
    • 📁 pages/
      • 📁 home/
        • 📄 home.component.js +1 -1
        • 📄 home.container.js +2 -2
      • 📁 settings/
        • 📁 privacy-tab/
          • 📄 data-collection-item.test.tsx +4 -3
          • 📄 metametrics-item.test.tsx +8 -7
          • 📄 metametrics-item.tsx +1 -1

👨‍🔧 @MetaMask/extension-platform (4 files, +10 -7)
  • 📁 test/
    • 📁 e2e/
      • 📁 dist/
        • 📄 wallet-fixture-export.spec.ts +1 -1
        • 📄 wallet-fixture-validation.spec.ts +1 -1
      • 📁 fixtures/
        • 📄 fixture-validation.ts +1 -0
        • 📄 onboarding-fixture.json +7 -5

🕵️ @MetaMask/extension-privacy-reviewers (1 files, +3 -1)
  • 📁 test/
    • 📁 e2e/
      • 📁 tests/
        • 📁 settings/
          • 📄 state-logs.json +3 -1

💎 @MetaMask/metamask-assets (1 files, +2 -2)
  • 📁 ui/
    • 📁 components/
      • 📁 app/
        • 📁 assets/
          • 📁 defi-list/
            • 📁 cells/
              • 📄 defi-empty-state.tsx +2 -2

📜 @MetaMask/policy-reviewers (8 files, +64 -0)
  • 📁 lavamoat/
    • 📁 browserify/
      • 📁 beta/
        • 📄 policy.json +8 -0
      • 📁 experimental/
        • 📄 policy.json +8 -0
      • 📁 flask/
        • 📄 policy.json +8 -0
      • 📁 main/
        • 📄 policy.json +8 -0
    • 📁 webpack/
      • 📁 mv2/
        • 📁 beta/
          • 📄 policy.json +8 -0
        • 📁 experimental/
          • 📄 policy.json +8 -0
        • 📁 flask/
          • 📄 policy.json +8 -0
        • 📁 main/
          • 📄 policy.json +8 -0

Tip

Follow the policy review process outlined in the LavaMoat Policy Review Process doc before expecting an approval from Policy Reviewers.


🧪 @MetaMask/qa (5 files, +13 -8)
  • 📁 test/
    • 📁 e2e/
      • 📁 dist/
        • 📄 wallet-fixture-export.spec.ts +1 -1
        • 📄 wallet-fixture-validation.spec.ts +1 -1
      • 📁 fixtures/
        • 📄 fixture-validation.ts +1 -0
        • 📄 onboarding-fixture.json +7 -5
      • 📁 tests/
        • 📁 settings/
          • 📄 state-logs.json +3 -1

📈 @MetaMask/ramp (2 files, +2 -2)
  • 📁 ui/
    • 📁 hooks/
      • 📁 ramps/
        • 📁 useRamps/
          • 📄 useRamps.test.tsx +1 -1
          • 📄 useRamps.ts +1 -1

🔄 @MetaMask/swaps-engineers (1 files, +37 -3)
  • 📁 test/
    • 📁 e2e/
      • 📁 tests/
        • 📁 bridge/
          • 📄 swap-positive-cases.spec.ts +37 -3

👨‍🔧 @MetaMask/wallet-integrations (3 files, +9 -7)
  • 📁 app/
    • 📁 scripts/
      • 📁 lib/
        • 📁 rpc-method-middleware/
          • 📁 handlers/
            • 📄 request-accounts.test.ts +1 -1
            • 📄 request-accounts.ts +2 -2
          • 📄 createRPCMethodTrackingMiddleware.js +6 -4

🔐 @MetaMask/web3auth (5 files, +50 -25)
  • 📁 ui/
    • 📁 pages/
      • 📁 onboarding-flow/
        • 📁 create-password/
          • 📄 create-password.test.tsx +5 -3
        • 📁 creation-successful/
          • 📄 creation-successful.tsx +9 -14
        • 📁 metametrics/
          • 📄 metametrics.tsx +1 -1
        • 📁 onboarding-flow-switch/
          • 📄 onboarding-flow-switch.test.tsx +31 -5
        • 📁 setup-passkey/
          • 📄 setup-passkey.test.tsx +4 -2

@socket-security

socket-security Bot commented May 22, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​metamask/​analytics-controller@​1.1.0981008891100

View full report

@metamaskbotv2

metamaskbotv2 Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor
Builds ready [2b95db2]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 12 pass · 🟡 13 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26301062668 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -73%
  • loadNewAccount/total: -73%
  • bridgeUserActions/bridge_load_page: -41%
  • bridgeUserActions/bridge_load_asset_picker: -51%
  • bridgeUserActions/bridge_search_token: -31%
  • bridgeUserActions/total: -38%
  • loadNewAccount/load_new_account: -32%
  • loadNewAccount/total: -32%
  • bridgeUserActions/bridge_load_page: +47%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 1.9s
  • 🟡 confirmTx/FCP: p75 1.9s
  • 🟡 bridgeUserActions/FCP: p75 1.9s
  • 🟡 confirmTx/FCP: p75 1.9s
  • 🟡 bridgeUserActions/FCP: p75 1.8s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -24%
  • startupStandardHome/load: -21%
  • startupStandardHome/domContentLoaded: -20%
  • startupStandardHome/firstPaint: -37%
  • startupStandardHome/backgroundConnect: -34%
  • startupStandardHome/firstReactRender: -30%
  • startupStandardHome/loadScripts: -21%
  • startupStandardHome/numNetworkReqs: -29%
  • startupPowerUserHome/uiStartup: -34%
  • startupPowerUserHome/load: -13%
  • startupPowerUserHome/domContentLoaded: -12%
  • startupPowerUserHome/domInteractive: -25%
  • startupPowerUserHome/firstPaint: -51%
  • startupPowerUserHome/backgroundConnect: -11%
  • startupPowerUserHome/loadScripts: -13%
  • startupPowerUserHome/numNetworkReqs: -67%
  • startupStandardHome/domInteractive: -50%
  • startupStandardHome/backgroundConnect: +15%
  • startupStandardHome/firstReactRender: +17%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -39%
  • startupStandardHome/numNetworkReqs: -21%
  • startupPowerUserHome/uiStartup: -45%
  • startupPowerUserHome/domInteractive: -77%
  • startupPowerUserHome/backgroundConnect: -72%
  • startupPowerUserHome/setupStore: -85%
  • startupPowerUserHome/numNetworkReqs: -58%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/INP: p75 480ms
  • 🟡 startupPowerUserHome/LCP: p75 2.9s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
swap
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -65%
  • onboardingImportWallet/pwFormToMetricsScreen: +540%
  • onboardingImportWallet/metricsToWalletReadyScreen: -31%
  • onboardingImportWallet/doneButtonToHomeScreen: -81%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +18%
  • onboardingImportWallet/total: -46%
  • onboardingNewWallet/srpButtonToPwForm: -75%
  • onboardingNewWallet/createPwToRecoveryScreen: +1183%
  • onboardingNewWallet/skipBackupToMetricsScreen: -66%
  • onboardingNewWallet/doneButtonToAssetList: -46%
  • onboardingNewWallet/total: -38%
  • assetDetails/assetClickToPriceChart: -71%
  • assetDetails/total: -71%
  • solanaAssetDetails/assetClickToPriceChart: -81%
  • solanaAssetDetails/total: -81%
  • importSrpHome/loginToHomeScreen: -43%
  • importSrpHome/openAccountMenuAfterLogin: -81%
  • importSrpHome/homeAfterImportWithNewWallet: -69%
  • importSrpHome/total: -66%
  • swap/openSwapPageFromHome: -97%
  • swap/fetchAndDisplaySwapQuotes: +36%
  • swap/total: +12%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 importSrpHome/FCP: p75 1.9s
  • 🟡 sendTransactions/INP: p75 208ms
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 swap/FCP: p75 1.9s
  • 🟡 assetDetails/FCP: p75 1.8s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 swap/FCP: p75 1.9s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +20%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 13.81 KiB (0.21%)
  • ui: 16 Bytes (0%)
  • common: 272 Bytes (0%)

@metamaskbotv2

metamaskbotv2 Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor
Builds ready [2e57540]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 13 pass · 🟡 2 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26327589626 | Baseline logs

Interaction Benchmarks · Samples: 5

⚠️ Missing data: chrome/webpack/interactionUserActions

Benchmarkfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -54%
  • loadNewAccount/total: -54%
  • bridgeUserActions/bridge_load_page: -15%
  • bridgeUserActions/bridge_load_asset_picker: -29%
  • bridgeUserActions/bridge_search_token: -28%
  • bridgeUserActions/total: -22%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -35%
  • startupStandardHome/load: -33%
  • startupStandardHome/domContentLoaded: -33%
  • startupStandardHome/domInteractive: -39%
  • startupStandardHome/firstPaint: -23%
  • startupStandardHome/backgroundConnect: -33%
  • startupStandardHome/loadScripts: -33%
  • startupStandardHome/numNetworkReqs: -43%
  • startupStandardHome/domInteractive: -51%
  • startupStandardHome/backgroundConnect: +21%
  • startupStandardHome/firstReactRender: +33%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -51%
  • startupStandardHome/numNetworkReqs: -11%
  • startupPowerUserHome/uiStartup: -38%
  • startupPowerUserHome/domInteractive: -71%
  • startupPowerUserHome/backgroundConnect: -62%
  • startupPowerUserHome/firstReactRender: +37%
  • startupPowerUserHome/setupStore: -34%
  • startupPowerUserHome/numNetworkReqs: -78%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/LCP: p75 2.9s
User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: chrome/webpack/userJourneyAssets, chrome/webpack/userJourneyTransactions, firefox/webpack/userJourneyTransactions

Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -63%
  • onboardingImportWallet/pwFormToMetricsScreen: +572%
  • onboardingImportWallet/metricsToWalletReadyScreen: -31%
  • onboardingImportWallet/doneButtonToHomeScreen: -80%
  • onboardingImportWallet/total: -51%
  • onboardingNewWallet/srpButtonToPwForm: -75%
  • onboardingNewWallet/createPwToRecoveryScreen: +1001%
  • onboardingNewWallet/skipBackupToMetricsScreen: -65%
  • onboardingNewWallet/doneButtonToAssetList: -51%
  • onboardingNewWallet/total: -43%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 onboardingImportWallet/INP: p75 248ms
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +16%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 13.81 KiB (0.21%)
  • ui: 16 Bytes (0%)
  • common: 238 Bytes (0%)

@metamaskbotv2

metamaskbotv2 Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor
Builds ready [27c93f3]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 23 pass · 🟡 2 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26473142879 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -77%
  • loadNewAccount/total: -77%
  • bridgeUserActions/bridge_load_page: -71%
  • bridgeUserActions/bridge_load_asset_picker: -63%
  • bridgeUserActions/bridge_search_token: -32%
  • bridgeUserActions/total: -45%
  • loadNewAccount/load_new_account: -42%
  • loadNewAccount/total: -42%
  • bridgeUserActions/bridge_load_page: +29%
  • bridgeUserActions/bridge_load_asset_picker: -29%
  • bridgeUserActions/bridge_search_token: -30%
  • bridgeUserActions/total: -18%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -38%
  • startupStandardHome/load: -37%
  • startupStandardHome/domContentLoaded: -37%
  • startupStandardHome/domInteractive: -39%
  • startupStandardHome/firstPaint: -23%
  • startupStandardHome/backgroundConnect: -41%
  • startupStandardHome/loadScripts: -37%
  • startupStandardHome/setupStore: -21%
  • startupStandardHome/numNetworkReqs: -50%
  • startupPowerUserHome/uiStartup: -41%
  • startupPowerUserHome/load: -25%
  • startupPowerUserHome/domContentLoaded: -26%
  • startupPowerUserHome/domInteractive: -50%
  • startupPowerUserHome/firstPaint: -42%
  • startupPowerUserHome/backgroundConnect: -12%
  • startupPowerUserHome/firstReactRender: +13%
  • startupPowerUserHome/loadScripts: -27%
  • startupPowerUserHome/numNetworkReqs: -68%
  • startupStandardHome/domInteractive: -52%
  • startupStandardHome/backgroundConnect: +12%
  • startupStandardHome/firstReactRender: +28%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -51%
  • startupStandardHome/numNetworkReqs: -21%
  • startupPowerUserHome/uiStartup: -46%
  • startupPowerUserHome/load: -16%
  • startupPowerUserHome/domContentLoaded: -16%
  • startupPowerUserHome/domInteractive: -78%
  • startupPowerUserHome/backgroundConnect: -71%
  • startupPowerUserHome/firstReactRender: +20%
  • startupPowerUserHome/loadScripts: -14%
  • startupPowerUserHome/setupStore: -83%
  • startupPowerUserHome/numNetworkReqs: -65%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/INP: p75 432ms
  • 🟡 startupPowerUserHome/INP: p75 208ms
  • 🟡 startupPowerUserHome/LCP: p75 2.8s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -63%
  • onboardingImportWallet/pwFormToMetricsScreen: +547%
  • onboardingImportWallet/metricsToWalletReadyScreen: -34%
  • onboardingImportWallet/doneButtonToHomeScreen: -74%
  • onboardingImportWallet/total: -45%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/createPwToRecoveryScreen: +1035%
  • onboardingNewWallet/skipBackupToMetricsScreen: -64%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -23%
  • onboardingNewWallet/doneButtonToAssetList: -39%
  • onboardingNewWallet/total: -32%
  • assetDetails/assetClickToPriceChart: -51%
  • assetDetails/total: -51%
  • solanaAssetDetails/assetClickToPriceChart: -75%
  • solanaAssetDetails/total: -75%
  • importSrpHome/loginToHomeScreen: -40%
  • importSrpHome/openAccountMenuAfterLogin: -78%
  • importSrpHome/homeAfterImportWithNewWallet: -75%
  • importSrpHome/total: -71%
  • swap/openSwapPageFromHome: -98%
  • swap/fetchAndDisplaySwapQuotes: +35%
  • swap/total: +12%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +31%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 13.8 KiB (0.24%)
  • ui: -3 Bytes (0%)
  • common: 282 Bytes (0%)

@metamaskbotv2

metamaskbotv2 Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor
Builds ready [08a46b1]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 23 pass · 🟡 1 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26646242494 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -77%
  • loadNewAccount/total: -77%
  • bridgeUserActions/bridge_load_page: -72%
  • bridgeUserActions/bridge_load_asset_picker: -53%
  • bridgeUserActions/bridge_search_token: -25%
  • bridgeUserActions/total: -35%
  • loadNewAccount/load_new_account: -53%
  • loadNewAccount/total: -53%
  • bridgeUserActions/bridge_load_page: -13%
  • bridgeUserActions/bridge_search_token: -18%
  • bridgeUserActions/total: -13%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -33%
  • startupStandardHome/load: -32%
  • startupStandardHome/domContentLoaded: -31%
  • startupStandardHome/domInteractive: -40%
  • startupStandardHome/firstPaint: -12%
  • startupStandardHome/backgroundConnect: -30%
  • startupStandardHome/loadScripts: -32%
  • startupStandardHome/setupStore: -21%
  • startupStandardHome/numNetworkReqs: -50%
  • startupStandardHome/domInteractive: -57%
  • startupStandardHome/backgroundConnect: +23%
  • startupStandardHome/firstReactRender: +50%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -39%
  • startupStandardHome/numNetworkReqs: -45%
  • startupPowerUserHome/uiStartup: -25%
  • startupPowerUserHome/domInteractive: -19%
  • startupPowerUserHome/backgroundConnect: -33%
  • startupPowerUserHome/firstReactRender: +29%
  • startupPowerUserHome/setupStore: -50%
  • startupPowerUserHome/numNetworkReqs: -73%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/LCP: p75 3.6s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -62%
  • onboardingImportWallet/pwFormToMetricsScreen: +602%
  • onboardingImportWallet/metricsToWalletReadyScreen: -30%
  • onboardingImportWallet/doneButtonToHomeScreen: -75%
  • onboardingImportWallet/total: -49%
  • onboardingNewWallet/srpButtonToPwForm: -77%
  • onboardingNewWallet/createPwToRecoveryScreen: +1227%
  • onboardingNewWallet/skipBackupToMetricsScreen: -64%
  • onboardingNewWallet/doneButtonToAssetList: -56%
  • onboardingNewWallet/total: -49%
  • assetDetails/assetClickToPriceChart: -60%
  • assetDetails/total: -60%
  • solanaAssetDetails/assetClickToPriceChart: -69%
  • solanaAssetDetails/total: -69%
  • importSrpHome/loginToHomeScreen: -39%
  • importSrpHome/openAccountMenuAfterLogin: -73%
  • importSrpHome/homeAfterImportWithNewWallet: -67%
  • importSrpHome/total: -63%
  • swap/openSwapPageFromHome: -97%
  • swap/fetchAndDisplaySwapQuotes: +35%
  • swap/total: +12%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +17%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 14.98 KiB (0.26%)
  • ui: 138 Bytes (0%)
  • common: 379 Bytes (0%)

@itsyoboieltr itsyoboieltr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I saw in multiple places that we are using both analyticsId and metametricsId to refer to the same value. Also some places refer to Metametrics, some refer to Analytics. I wonder if this could be avoided somehow? Makes the code really confusing, unless someone already knows Analytics and Metametrics are the same thing.

Comment thread app/scripts/controllers/metametrics-controller.ts
}
merge(analyticsController, analyticsPatch);
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will the tests be eventually migrated? I do not know if we want to keep the legacy syntax around forever

@gauthierpetetin

Copy link
Copy Markdown
Contributor Author

@itsyoboieltr yes that's confusing and I'm really tempted to fully get rid of metaMetricsId and participateInMetaMetrics in the entire codebase.

I ended up not doing it in this PR, just for the sake of keeping the size of the PR "reasonable".
This PR is just the first of many, that will get us to a state where metaMetricsId and participateInMetaMetrics don't exist anymore.

Do you think that iterative approach makes sense?

PS: That said, I'll do a review tomorrow to fix examples you highlighted, where the terms metaMetricsId and analyticsId are both used at the same location, in order to reduce confusion.

gauthierpetetin and others added 2 commits June 3, 2026 11:20
The analytics-controller rework stopped whitelisting metaMetricsId/
participateInMetaMetrics in the Sentry state mask (they are masked now),
and AnalyticsController.eventQueue is absent in the pre-init/migration-
error state since it is only populated by migration 212 when there is
data to migrate. Update the affected snapshots accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread app/scripts/lib/segment/custom-segment-tracking.ts
@metamaskbotv2

metamaskbotv2 Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor
Builds ready [172d4f5]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 23 pass · 🟡 2 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26875792995 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -77%
  • loadNewAccount/total: -77%
  • bridgeUserActions/bridge_load_page: -71%
  • bridgeUserActions/bridge_load_asset_picker: -64%
  • bridgeUserActions/bridge_search_token: -27%
  • bridgeUserActions/total: -43%
  • loadNewAccount/load_new_account: -51%
  • loadNewAccount/total: -51%
  • bridgeUserActions/bridge_load_page: -26%
  • bridgeUserActions/bridge_load_asset_picker: -28%
  • bridgeUserActions/bridge_search_token: -31%
  • bridgeUserActions/total: -30%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -33%
  • startupStandardHome/load: -32%
  • startupStandardHome/domContentLoaded: -32%
  • startupStandardHome/domInteractive: -39%
  • startupStandardHome/firstPaint: -26%
  • startupStandardHome/backgroundConnect: -18%
  • startupStandardHome/loadScripts: -32%
  • startupStandardHome/setupStore: -14%
  • startupStandardHome/numNetworkReqs: -67%
  • startupPowerUserHome/uiStartup: -38%
  • startupPowerUserHome/load: -25%
  • startupPowerUserHome/domContentLoaded: -24%
  • startupPowerUserHome/domInteractive: -41%
  • startupPowerUserHome/firstPaint: -35%
  • startupPowerUserHome/firstReactRender: +21%
  • startupPowerUserHome/loadScripts: -25%
  • startupPowerUserHome/numNetworkReqs: -72%
  • startupStandardHome/domInteractive: -45%
  • startupStandardHome/backgroundConnect: +39%
  • startupStandardHome/firstReactRender: +39%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -47%
  • startupStandardHome/numNetworkReqs: -61%
  • startupPowerUserHome/uiStartup: -49%
  • startupPowerUserHome/load: -29%
  • startupPowerUserHome/domContentLoaded: -29%
  • startupPowerUserHome/domInteractive: -73%
  • startupPowerUserHome/backgroundConnect: -69%
  • startupPowerUserHome/loadScripts: -29%
  • startupPowerUserHome/setupStore: -70%
  • startupPowerUserHome/numNetworkReqs: -77%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/INP: p75 400ms
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
🟡 total
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -62%
  • onboardingImportWallet/confirmSrpToPwForm: +27%
  • onboardingImportWallet/pwFormToMetricsScreen: +582%
  • onboardingImportWallet/metricsToWalletReadyScreen: -22%
  • onboardingImportWallet/doneButtonToHomeScreen: -70%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +16%
  • onboardingImportWallet/total: -39%
  • onboardingNewWallet/createWalletToSocialScreen: +10%
  • onboardingNewWallet/srpButtonToPwForm: -77%
  • onboardingNewWallet/createPwToRecoveryScreen: +1112%
  • onboardingNewWallet/skipBackupToMetricsScreen: -68%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -24%
  • onboardingNewWallet/doneButtonToAssetList: -12%
  • onboardingNewWallet/total: -11%
  • assetDetails/assetClickToPriceChart: -60%
  • assetDetails/total: -60%
  • solanaAssetDetails/assetClickToPriceChart: -72%
  • solanaAssetDetails/total: -72%
  • importSrpHome/loginToHomeScreen: -40%
  • importSrpHome/openAccountMenuAfterLogin: -79%
  • importSrpHome/homeAfterImportWithNewWallet: -82%
  • importSrpHome/total: -76%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +28%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 14.98 KiB (0.26%)
  • ui: 174 Bytes (0%)
  • common: 198 Bytes (0%)

gauthierpetetin and others added 2 commits June 3, 2026 13:43
The AnalyticsController surfaces analyticsId and optedIn (both flagged
includeInStateLogs), and completedMetaMetricsOnboarding now appears in
the flattened metamask state logs. Add them to the expected type map.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread app/scripts/controllers/metametrics-controller.ts
@metamaskbotv2

metamaskbotv2 Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor
Builds ready [1f04572]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 22 pass · 🟡 3 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26882647577 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
🔴 bridge_load_page

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -74%
  • loadNewAccount/total: -74%
  • bridgeUserActions/bridge_load_page: -72%
  • bridgeUserActions/bridge_load_asset_picker: -65%
  • bridgeUserActions/bridge_search_token: -30%
  • bridgeUserActions/total: -45%
  • loadNewAccount/load_new_account: -41%
  • loadNewAccount/total: -41%
  • bridgeUserActions/bridge_load_page: +574%
  • bridgeUserActions/bridge_load_asset_picker: -40%
  • bridgeUserActions/bridge_search_token: -34%
  • bridgeUserActions/total: +68%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -35%
  • startupStandardHome/load: -34%
  • startupStandardHome/domContentLoaded: -34%
  • startupStandardHome/domInteractive: -40%
  • startupStandardHome/firstPaint: -25%
  • startupStandardHome/backgroundConnect: -23%
  • startupStandardHome/loadScripts: -34%
  • startupStandardHome/setupStore: -21%
  • startupStandardHome/numNetworkReqs: -67%
  • startupPowerUserHome/uiStartup: -37%
  • startupPowerUserHome/load: -23%
  • startupPowerUserHome/domContentLoaded: -23%
  • startupPowerUserHome/domInteractive: -42%
  • startupPowerUserHome/firstPaint: -28%
  • startupPowerUserHome/firstReactRender: +21%
  • startupPowerUserHome/loadScripts: -24%
  • startupPowerUserHome/setupStore: +24%
  • startupPowerUserHome/numNetworkReqs: -72%
  • startupStandardHome/domInteractive: -50%
  • startupStandardHome/backgroundConnect: +46%
  • startupStandardHome/firstReactRender: +50%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -47%
  • startupStandardHome/numNetworkReqs: -61%
  • startupPowerUserHome/uiStartup: -43%
  • startupPowerUserHome/domInteractive: -74%
  • startupPowerUserHome/backgroundConnect: -69%
  • startupPowerUserHome/firstReactRender: +37%
  • startupPowerUserHome/setupStore: -72%
  • startupPowerUserHome/numNetworkReqs: -78%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/INP: p75 384ms
  • 🟡 startupPowerUserHome/LCP: p75 2.6s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -63%
  • onboardingImportWallet/pwFormToMetricsScreen: +555%
  • onboardingImportWallet/metricsToWalletReadyScreen: -35%
  • onboardingImportWallet/doneButtonToHomeScreen: -75%
  • onboardingImportWallet/total: -46%
  • onboardingNewWallet/srpButtonToPwForm: -81%
  • onboardingNewWallet/createPwToRecoveryScreen: +814%
  • onboardingNewWallet/skipBackupToMetricsScreen: -75%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -37%
  • onboardingNewWallet/doneButtonToAssetList: -57%
  • onboardingNewWallet/total: -47%
  • assetDetails/assetClickToPriceChart: -56%
  • assetDetails/total: -56%
  • solanaAssetDetails/assetClickToPriceChart: -77%
  • solanaAssetDetails/total: -77%
  • importSrpHome/loginToHomeScreen: -28%
  • importSrpHome/openAccountMenuAfterLogin: -66%
  • importSrpHome/homeAfterImportWithNewWallet: -82%
  • importSrpHome/total: -74%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/FCP: p75 1.8s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +18%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 14.98 KiB (0.26%)
  • ui: 178 Bytes (0%)
  • common: 198 Bytes (0%)

setParticipateInMetaMetrics(null) clears completedMetaMetricsOnboarding
but intentionally leaves AnalyticsController opted in (to preserve the
queued events). #canSubmitAnalytics only checked optedIn, so events could
still be sent after a participation reset (e.g. onboarding welcome login).

Gate submission on completedMetaMetricsOnboarding as well, rather than
opting out on null (which would clear the queue). Adds a regression test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 482558b. Configure here.

Comment thread app/scripts/lib/segment/custom-segment-tracking.ts
Reverts commits 0cb4ee1 ("fix: preserve analytics queue on metrics
reset") and 482558b ("fix: block analytics submission when metrics
participation is null").

setParticipateInMetaMetrics(null) once again calls AnalyticsController:optOut
(else branch), so optedIn is cleared on reset and #canSubmitAnalytics no
longer needs the completedMetaMetricsOnboarding gate. This blocks tracking
after a null reset at the cost of clearing the queued events.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@metamaskbotv2

metamaskbotv2 Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor
Builds ready [482558b]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 22 pass · 🟡 3 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26885454817 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -75%
  • loadNewAccount/total: -75%
  • bridgeUserActions/bridge_load_page: -72%
  • bridgeUserActions/bridge_load_asset_picker: -66%
  • bridgeUserActions/bridge_search_token: -28%
  • bridgeUserActions/total: -45%
  • loadNewAccount/load_new_account: -68%
  • loadNewAccount/total: -68%
  • bridgeUserActions/bridge_load_page: -33%
  • bridgeUserActions/bridge_load_asset_picker: -47%
  • bridgeUserActions/bridge_search_token: -32%
  • bridgeUserActions/total: -37%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -30%
  • startupStandardHome/load: -29%
  • startupStandardHome/domContentLoaded: -29%
  • startupStandardHome/domInteractive: -36%
  • startupStandardHome/backgroundConnect: -13%
  • startupStandardHome/firstReactRender: +11%
  • startupStandardHome/loadScripts: -29%
  • startupStandardHome/numNetworkReqs: -67%
  • startupPowerUserHome/uiStartup: -38%
  • startupPowerUserHome/load: -25%
  • startupPowerUserHome/domContentLoaded: -25%
  • startupPowerUserHome/domInteractive: -40%
  • startupPowerUserHome/firstPaint: -31%
  • startupPowerUserHome/firstReactRender: +21%
  • startupPowerUserHome/loadScripts: -25%
  • startupPowerUserHome/setupStore: +17%
  • startupPowerUserHome/numNetworkReqs: -70%
  • startupStandardHome/domInteractive: -51%
  • startupStandardHome/backgroundConnect: +42%
  • startupStandardHome/firstReactRender: +44%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -51%
  • startupStandardHome/numNetworkReqs: -61%
  • startupPowerUserHome/uiStartup: -42%
  • startupPowerUserHome/load: -13%
  • startupPowerUserHome/domContentLoaded: -13%
  • startupPowerUserHome/domInteractive: -81%
  • startupPowerUserHome/backgroundConnect: -57%
  • startupPowerUserHome/firstReactRender: +33%
  • startupPowerUserHome/loadScripts: -13%
  • startupPowerUserHome/setupStore: -48%
  • startupPowerUserHome/numNetworkReqs: -76%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/INP: p75 392ms
  • 🟡 startupPowerUserHome/LCP: p75 2.6s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -64%
  • onboardingImportWallet/pwFormToMetricsScreen: +564%
  • onboardingImportWallet/metricsToWalletReadyScreen: -23%
  • onboardingImportWallet/doneButtonToHomeScreen: -68%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -23%
  • onboardingImportWallet/total: -50%
  • onboardingNewWallet/srpButtonToPwForm: -77%
  • onboardingNewWallet/createPwToRecoveryScreen: +1050%
  • onboardingNewWallet/skipBackupToMetricsScreen: -66%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -24%
  • onboardingNewWallet/doneButtonToAssetList: -33%
  • onboardingNewWallet/total: -29%
  • assetDetails/assetClickToPriceChart: -63%
  • assetDetails/total: -63%
  • solanaAssetDetails/assetClickToPriceChart: -71%
  • solanaAssetDetails/total: -71%
  • importSrpHome/loginToHomeScreen: -40%
  • importSrpHome/openAccountMenuAfterLogin: -59%
  • importSrpHome/homeAfterImportWithNewWallet: -88%
  • importSrpHome/total: -81%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 sendTransactions/FCP: p75 1.9s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/domContentLoaded: -21%
  • dappPageLoad/firstPaint: -17%
  • dappPageLoad/firstContentfulPaint: -17%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 15.02 KiB (0.26%)
  • ui: 178 Bytes (0%)
  • common: 198 Bytes (0%)

@metamaskbotv2

metamaskbotv2 Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor
Builds ready [5d73b11]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 23 pass · 🟡 2 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 26910239535 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -75%
  • loadNewAccount/total: -75%
  • bridgeUserActions/bridge_load_page: -71%
  • bridgeUserActions/bridge_load_asset_picker: -63%
  • bridgeUserActions/bridge_search_token: -30%
  • bridgeUserActions/total: -44%
  • loadNewAccount/load_new_account: -50%
  • loadNewAccount/total: -50%
  • bridgeUserActions/bridge_load_page: -31%
  • bridgeUserActions/bridge_load_asset_picker: -53%
  • bridgeUserActions/bridge_search_token: -29%
  • bridgeUserActions/total: -37%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -26%
  • startupStandardHome/load: -29%
  • startupStandardHome/domContentLoaded: -29%
  • startupStandardHome/domInteractive: -39%
  • startupStandardHome/loadScripts: -29%
  • startupStandardHome/setupStore: -14%
  • startupStandardHome/numNetworkReqs: -67%
  • startupPowerUserHome/uiStartup: -17%
  • startupPowerUserHome/load: -23%
  • startupPowerUserHome/domContentLoaded: -22%
  • startupPowerUserHome/domInteractive: -38%
  • startupPowerUserHome/firstPaint: -27%
  • startupPowerUserHome/firstReactRender: +25%
  • startupPowerUserHome/loadScripts: -22%
  • startupPowerUserHome/setupStore: +17%
  • startupPowerUserHome/numNetworkReqs: -68%
  • startupStandardHome/domInteractive: -64%
  • startupStandardHome/backgroundConnect: +36%
  • startupStandardHome/firstReactRender: +44%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -43%
  • startupStandardHome/numNetworkReqs: -61%
  • startupPowerUserHome/uiStartup: -33%
  • startupPowerUserHome/load: -10%
  • startupPowerUserHome/domContentLoaded: -10%
  • startupPowerUserHome/domInteractive: -78%
  • startupPowerUserHome/backgroundConnect: -70%
  • startupPowerUserHome/firstReactRender: +33%
  • startupPowerUserHome/setupStore: -80%
  • startupPowerUserHome/numNetworkReqs: -77%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/INP: p75 480ms
  • 🟡 startupPowerUserHome/LCP: p75 2.6s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -60%
  • onboardingImportWallet/pwFormToMetricsScreen: +612%
  • onboardingImportWallet/metricsToWalletReadyScreen: -26%
  • onboardingImportWallet/doneButtonToHomeScreen: -73%
  • onboardingImportWallet/total: -51%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/createPwToRecoveryScreen: +1532%
  • onboardingNewWallet/skipBackupToMetricsScreen: -63%
  • onboardingNewWallet/doneButtonToAssetList: -25%
  • onboardingNewWallet/total: -18%
  • assetDetails/assetClickToPriceChart: -60%
  • assetDetails/total: -60%
  • solanaAssetDetails/assetClickToPriceChart: -77%
  • solanaAssetDetails/total: -77%
  • importSrpHome/loginToHomeScreen: -33%
  • importSrpHome/openAccountMenuAfterLogin: -77%
  • importSrpHome/homeAfterImportWithNewWallet: -88%
  • importSrpHome/total: -83%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +28%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 14.97 KiB (0.26%)
  • ui: 141 Bytes (0%)
  • common: 199 Bytes (0%)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR integrates @metamask/analytics-controller into the extension and begins migrating persisted/compatibility state away from MetaMetricsController fields (metaMetricsId, participateInMetaMetrics, segmentApiCalls) toward AnalyticsController (analyticsId, optedIn, eventQueue) while keeping legacy UI fields derivable for a phased rollout.

Changes:

  • Add AnalyticsController to background initialization/messaging and persist/backup flows, including a new Segment platform adapter.
  • Introduce migration 212 to move legacy MetaMetrics consent/ID/queue state into AnalyticsController + completedMetaMetricsOnboarding.
  • Update UI selectors, actions, fixtures, and tests to use analyticsId/optedIn/completedMetaMetricsOnboarding while maintaining compatibility accessors.

Reviewed changes

Copilot reviewed 114 out of 117 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
yarn.lock Add analytics-controller dependency lock
package.json Add @metamask/analytics-controller dependency
attribution.txt Add analytics-controller attribution entry
lavamoat/webpack/mv2/main/policy.json Allow analytics-controller deps (MV2 main)
lavamoat/webpack/mv2/flask/policy.json Allow analytics-controller deps (MV2 flask)
lavamoat/webpack/mv2/experimental/policy.json Allow analytics-controller deps (MV2 experimental)
lavamoat/webpack/mv2/beta/policy.json Allow analytics-controller deps (MV2 beta)
lavamoat/browserify/main/policy.json Allow analytics-controller deps (browserify main)
lavamoat/browserify/flask/policy.json Allow analytics-controller deps (browserify flask)
lavamoat/browserify/experimental/policy.json Allow analytics-controller deps (browserify experimental)
lavamoat/browserify/beta/policy.json Allow analytics-controller deps (browserify beta)
shared/lib/generate-metametrics-id.ts New helper to generate analytics ID
shared/constants/metametrics.ts Remove legacy actionId/options types
shared/types/background.ts Add AnalyticsControllerState to merged/flattened typing
shared/lib/stores/persistence-manager.ts Include AnalyticsController in backups; refactor getBackup
shared/lib/stores/persistence-manager.test.ts Add coverage for backing up AnalyticsController
app/scripts/migrations/index.js Register migration 212
app/scripts/migrations/212.ts Migrate MMC consent/id/queue into AnalyticsController + onboarding flag
app/scripts/migrations/212.test.ts Add migration 212 unit tests
app/scripts/messenger-client-init/controller-list.ts Include AnalyticsController in messenger client types
app/scripts/messenger-client-init/analytics-controller-init.ts Initialize AnalyticsController with adapter + generated ID
app/scripts/messenger-client-init/messengers/analytics-controller-messenger.ts Add AnalyticsController messenger factory
app/scripts/messenger-client-init/messengers/index.ts Register AnalyticsController messenger factory
app/scripts/metamask-controller.js Wire AnalyticsController; derive legacy participateInMetaMetrics/metaMetricsId in getState()
app/scripts/metamask-controller.test.js Update init-state expectations for AnalyticsController
app/scripts/controllers/analytics/platform-adapter.ts New Segment platform adapter for AnalyticsController
app/scripts/controllers/analytics/platform-adapter.test.ts Unit tests for platform adapter behavior
app/scripts/controllers/metametrics-controller.ts Delegate tracking to AnalyticsController; remove Segment-owned queue/id fields
app/scripts/controllers/metametrics-controller-method-action-types.ts Update exposed actions (remove id generation; restructure track/identify/page types)
app/scripts/messenger-client-init/metametrics-controller-init.ts Remove Segment injection; document delegation to AnalyticsController
app/scripts/messenger-client-init/metametrics-controller-init.test.ts Update init test expectations (no Segment param)
app/scripts/messenger-client-init/messengers/metametrics-controller-messenger.ts Delegate AnalyticsController actions through MetaMetrics messenger
app/scripts/messenger-client-init/messengers/metametrics-data-deletion-controller-messenger.ts Switch deletion controller dependency to AnalyticsController:getState
app/scripts/controllers/metametrics-data-deletion/metametrics-data-deletion.ts Use AnalyticsController analyticsId for deletion tasks
app/scripts/controllers/metametrics-data-deletion/metametrics-data-deletion.test.ts Update deletion controller tests for AnalyticsController
app/scripts/messenger-client-init/profile-metrics-controller-init.ts Use AnalyticsController optedIn for profile metrics gating
app/scripts/messenger-client-init/seedless-onboarding/oauth-service-init.ts Derive consent via completed-onboarding flag + AnalyticsController.optedIn
app/scripts/lib/segment/index.ts Update docs + mock behavior; keep payload cloning and callback semantics
app/scripts/lib/segment/tests/segment-shim.test.ts Update segment shim tests for track/identify/page forwarding + cloning
app/scripts/lib/segment/early-segment-tracking.ts Remove old early tracking module
app/scripts/lib/segment/custom-segment-tracking.ts New early/opt-out Segment tracking helpers
app/scripts/lib/segment/custom-segment-tracking.test.ts Tests for early tracking + opted-out tracking helper
app/scripts/lib/state-corruption/track-vault-corruption.ts Route early tracking through new custom tracking module
app/scripts/lib/state-corruption/track-vault-corruption.test.ts Update backup shape for AnalyticsController
app/scripts/lib/critical-error/track-critical-error.ts Route early tracking through new custom tracking module
app/scripts/lib/critical-error/track-critical-error.test.ts Update backup shape for AnalyticsController
app/scripts/lib/setup-initial-state-hooks.js Use new custom segment tracking import
app/scripts/lib/sentry-get-state.ts Derive participation/id from AnalyticsController + onboarding completion
app/scripts/lib/sentry-get-state.test.ts Update tests for new state derivation rules
app/scripts/lib/sentry-make-transport.test.ts Update persisted/backup Sentry snapshot expectations
app/scripts/constants/sentry-state.ts Add AnalyticsController masks; update MetaMetricsController masks
app/scripts/lib/rpc-method-middleware/handlers/request-accounts.ts Use analyticsId (instead of metaMetricsId) in handler typings/logic
app/scripts/lib/rpc-method-middleware/handlers/request-accounts.test.ts Update test state for analyticsId
app/scripts/lib/createRPCMethodTrackingMiddleware.js Gate tracking via AnalyticsController.optedIn
app/scripts/lib/createRPCMethodTrackingMiddleware.test.js Add AnalyticsController messenger stubs + updated controller construction
app/scripts/background.js Use controller.getState()-derived legacy id/consent for event emission gating
ui/store/actions.ts Remove UI-generated actionId for metrics calls
ui/selectors/selectors.js Map legacy getMetaMetricsId to analyticsId
ui/selectors/metametrics.js Derive participation from onboarding completion + optedIn
ui/selectors/metametrics.test.ts Add selector tests for new derived behavior
ui/contexts/metametrics.tsx Update buffering + page tracking calls for new action signatures
ui/contexts/metametrics.test.tsx Update provider tests for analyticsId/optedIn/completed onboarding
ui/pages/settings/privacy-tab/metametrics-item.tsx Treat participateInMetaMetrics as tri-state; coerce to boolean for toggle
ui/pages/settings/privacy-tab/metametrics-item.test.tsx Update tests for new state keys
ui/pages/settings/privacy-tab/data-collection-item.test.tsx Update tests for new state keys
ui/pages/onboarding-flow/metametrics/metametrics.tsx Handle tri-state participation when initializing UI
ui/pages/onboarding-flow/creation-successful/creation-successful.tsx Simplify opt-in/out tracking call signature
ui/pages/onboarding-flow/create-password/create-password.test.tsx Update tests to analyticsId + new consent fields
ui/pages/onboarding-flow/setup-passkey/setup-passkey.test.tsx Update tests for new consent fields
ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.tsx Add routing case for incomplete metrics onboarding
ui/pages/home/home.container.js Compute participateInMetaMetrics via selector
ui/pages/home/home.component.js Make PropTypes accept tri-state/optional
ui/pages/asset/components/asset-page.tsx Coerce metrics/marketing enabled flags to booleans for URL building
ui/hooks/ramps/useRamps/useRamps.ts Coerce metrics enabled query param to boolean string
ui/hooks/ramps/useRamps/useRamps.test.tsx Update mock state to analyticsId
ui/ducks/metamask/metamask.js Map SET_PARTICIPATE_IN_METAMETRICS to completed/optedIn fields
ui/ducks/metamask/metamask.test.js Add reducer tests for completed/optedIn mapping
ui/components/app/toast-master/selectors.ts Update PNA25 gating to completed onboarding + optedIn
ui/components/app/metametrics-toggle/metametrics-toggle.test.tsx Update tests for new consent fields
ui/components/ui/survey-toast/survey-toast.test.tsx Update tests for analyticsId + consent fields
ui/components/multichain/token-list-item/stakeable-link.tsx Coerce enabled flags to strict booleans
ui/components/multichain/menu-items/discover-menu-item.tsx Coerce enabled flags to strict booleans
ui/components/multichain/global-menu-drawer/useGlobalMenuSections.tsx Coerce enabled flags to strict booleans
ui/components/multichain/funding-method-modal/funding-method-modal.tsx Coerce enabled flags to strict booleans
ui/components/app/wallet-overview/coin-overview.tsx Coerce enabled flags to strict booleans
ui/components/app/assets/defi-list/cells/defi-empty-state.tsx Coerce enabled flags to strict booleans
test/jest/console-baseline-unit.json Update console baseline after controller refactor
test/integration/notifications&auth/notifications-toggle.test.tsx Update integration state keys to analyticsId/optedIn
test/integration/notifications&auth/notifications-list.test.tsx Update integration state keys to optedIn/completed onboarding
test/integration/notifications&auth/notifications-activation.test.tsx Update integration state keys to optedIn/completed onboarding
test/integration/notifications&auth/data/notification-state.ts Update mocked state metaMetricsId → analyticsId
test/integration/nfts/nfts.test.tsx Update integration state keys for consent
test/integration/defi/defi-positions.test.tsx Update integration state keys for analyticsId/consent
test/integration/data/onboarding-completion-route.json Update fixture state to analyticsId/optedIn/completed onboarding
test/integration/data/integration-init-state.json Update fixture state to optedIn/completed onboarding
test/integration/confirmations/transactions/contract-interaction.test.tsx Update preloaded state keys
test/integration/confirmations/transactions/contract-deployment.test.tsx Update preloaded state keys
test/integration/confirmations/signatures/personalSign.test.tsx Update preloaded state keys
test/integration/confirmations/signatures/permit.test.tsx Update preloaded state keys
test/data/mock-state.json Update mock state keys to optedIn/completed onboarding
test/data/mock-send-state.json Update mock state keys to optedIn/completed onboarding
test/e2e/tests/settings/state-logs.json Update expected state-log schema keys
test/e2e/tests/metrics/wallet-imported.spec.ts Remove fixture builder opt-in patch usage
test/e2e/tests/metrics/metametrics-persistence.spec.ts Assert analyticsId persistence instead of metaMetricsId
test/e2e/tests/metrics/errors.spec.ts Update Sentry assertions for new controller state locations
test/e2e/tests/bridge/swap-positive-cases.spec.ts Improve event slicing logic robustness
test/e2e/tests/metrics/state-snapshots/errors-before-init-opt-in-ui-state.json Update snapshot schema + migration version
test/e2e/tests/metrics/state-snapshots/errors-before-init-opt-in-background-state.json Update snapshot schema for AnalyticsController
test/e2e/tests/metrics/state-snapshots/errors-after-init-opt-in-ui-state.json Update snapshot schema for AnalyticsController/eventQueue
test/e2e/tests/metrics/state-snapshots/errors-after-init-opt-in-background-state.json Update snapshot schema for AnalyticsController
test/e2e/fixtures/onboarding-fixture.json Update fixtures to migration 212 + AnalyticsController state
test/e2e/fixtures/default-fixture.json Update fixtures to migration 212 + AnalyticsController state
test/e2e/fixtures/fixture-validation.ts Ignore AnalyticsController.analyticsId variability
test/e2e/fixtures/fixture-builder-v2.ts Support legacy metametrics patches by mapping into new controller state
test/e2e/dist/wallet-fixture-validation.spec.ts Update dist wallet setup args for new consent behavior
test/e2e/dist/wallet-fixture-export.spec.ts Update dist wallet setup args for new consent behavior

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread app/scripts/controllers/metametrics-controller.ts

@amitabh94 amitabh94 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good for Ramps!

Comment on lines +805 to +812
"@metamask/analytics-controller": {
"packages": {
"@metamask/base-controller": true,
"@metamask/utils": true,
"lodash": true,
"uuid": true
}
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Policy changes are for safe package access.

},
{
isOptIn: !participateInMetaMetrics, // Force the event to be tracked even if participateInMetaMetrics is false
trackEvent({

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we use the trackSegmentEventWhileOptedOut just as you mentioned in the comment?
We wanna track this single particular event MetricsOptOut even when the participation is false.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @lwin-kyaw , with this new implementation, trackEvent calls #trackMetricsOptOutEvent under the hood here, which itself calls trackSegmentEventWhileOptedOut. This should support your use case.

@seaona seaona left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

e2e changes LGTM.
Would this be tackled by platform team? or do you want me to create a ticket for it for QA?
https://github.com/MetaMask/metamask-extension/pull/42885/changes#r3343851552

@gauthierpetetin

Copy link
Copy Markdown
Contributor Author

@seaona , it should be tackled by platform team as part of the next steps of AnalyticsController integration, this PR is just the first step.

@jiexi jiexi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved for Wallet Integration CO files

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.36.0 Issue or pull request that will be included in release 13.36.0 size-XL team-extension-platform Extension Platform team

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

10 participants