Visitar URL original
fix(build): disable SWC mangling on the runtime chunk for AMO determinism by gauthierpetetin · Pull Request #46236 · MetaMask/metamask-extension · GitHub
Skip to content

fix(build): disable SWC mangling on the runtime chunk for AMO determinism - #46236

Merged
gauthierpetetin merged 7 commits into
mainfrom
fix/amo-deterministic-swc-nomangle
Sep 23, 2026
Merged

gauthierpetetin merged 7 commits into
mainfrom
fix/amo-deterministic-swc-nomangle

Conversation

@gauthierpetetin

@gauthierpetetin gauthierpetetin commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Description

Reason for the change

Firefox AMO rebuilds MetaMask from source and checks that every file matches the published zip (mtree / content hashes). That check was failing because runtime.[contenthash].js was not byte-identical across Linux builds: SWC mangling sometimes picks different short names (for example c vs l) even with parallel: false.

Solution

Disable SWC mangling only for the webpack runtime.* chunk. Keep mangling on for every other chunk.

Turning mangling off for the whole bundle broke the extension at runtime (LavaMoat errors such as Cannot set properties of undefined (setting 'LavaDome')). Scoping mangle: false to the runtime chunk keeps AMO builds stable without that breakage.

Changelog

CHANGELOG entry: null

Related issues

Fixes: INFRA-3920

Manual testing steps

  1. Build a production Firefox MV2 bundle (yarn webpack:lavamoat:build:mv2 or the usual dist MV2 command).
  2. Build again on the same machine (or compare against a second Linux rebuild of the same source).
  3. Confirm runtime.[contenthash].js has the same content hash across builds.
  4. Load the built extension and confirm it opens past the loading screen (no LavaMoat / LavaDome console errors).
  5. Optionally repeat for a Flask build.

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

Low Risk
Build-time minification only; scoped to the webpack runtime chunk with mangling unchanged elsewhere.

Overview
Fixes Firefox AMO mtree failures where runtime.[contenthash].js differed byte-for-byte across Linux rebuilds because SWC mangling could pick different short names even with parallel: false.

getMinimizers() now uses two TerserPlugin (SWC) passes: one keeps mangling on for all chunks except @lavamoat/snow and the runtime asset (matched by runtimeChunkRe), and a second applies mangle: false only to runtime.* chunks while still minifying them. Other bundles stay mangled so the extension avoids the LavaMoat / LavaDome breakage seen when mangling was disabled globally.

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

SWC still flakes Flask runtime identifier assignment under parallel:false.
Keeping SWC compress with mangle disabled was identical across 10/10 Ubuntu
Docker Flask rebuilds and faster than classic Terser.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gauthierpetetin

Copy link
Copy Markdown
Contributor Author

Sibling option for discussion: #46235 (classic terserMinify).

@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.

@metamask-ci metamask-ci Bot added the team-extension-platform Extension Platform team label Sep 10, 2026
@metamask-ci

metamask-ci Bot commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

✨ Files requiring CODEOWNER review ✨

👨‍🔧 @MetaMask/extension-platform (1 files, +23 -9)
  • 📁 development/
    • 📁 webpack/
      • 📁 utils/
        • 📄 helpers.ts +23 -9

👨‍🔧 @itsyoboieltr (1 files, +23 -9)
  • 📁 development/
    • 📁 webpack/
      • 📁 utils/
        • 📄 helpers.ts +23 -9

Co-authored-by: Cursor <cursoragent@cursor.com>
Without SWC mangling, readable-stream keeps `new ErrorWrapper`, and the
validator matched that as `new Error`, failing MV2 CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
@metamask-ci

metamask-ci Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor
Builds ready [2c607e8]
⚡ Performance Benchmarks (Total: 🟢 17 pass · 🟡 0 warn · 🔴 0 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 34875153360 | 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]
User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: chrome/webpack/userJourneyAssets, chrome/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]
sendTransactions
[Sentry log · main/release]
–🟢 [CI log]
swap
[Sentry log · main/release]
–🟢 [CI log]
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: -58%
  • ↓ dappPageLoad/firstPaint: -46%
  • ↓ dappPageLoad/firstContentfulPaint: -46%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 7.13 MiB (47.13%)
  • ui: 11.04 MiB (59.12%)
  • common: 0 Bytes (0%)
  • other: 516.75 KiB (25.52%)
  • contentScripts: 522.44 KiB (26.57%)
  • zip: 2.11 MiB (9.04%)

Global mangle:false broke LavaMoat kits (module/module1 mismatches). Keep
mangling for app chunks and disable it only on runtime.* for AMO stability.

Co-authored-by: Cursor <cursoragent@cursor.com>
@saitanallensantiago26-beep

This comment was marked as spam.

1 similar comment
@saitanallensantiago26-beep

This comment was marked as spam.

@metamask-ci

metamask-ci Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor
Builds ready [fc13092]
⚡ Performance Benchmarks (Total: 🟢 14 pass · 🟡 9 warn · 🔴 2 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 34953499173 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]

Regressions (🔴 2 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
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: +190%
  • ↑ loadNewAccount/total: +190%
  • ↑ confirmTx/longTaskTotalDuration: +45%
  • ↑ confirmTx/longTaskMaxDuration: +67%
  • ↑ confirmTx/tbt: +79%
  • ↑ bridgeUserActions/bridge_load_page: +68%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +14%
  • ↑ bridgeUserActions/longTaskCount: +67%
  • ↑ bridgeUserActions/longTaskTotalDuration: +93%
  • ↑ bridgeUserActions/longTaskMaxDuration: +36%
  • ↑ bridgeUserActions/tbt: +150%
  • ↑ loadNewAccount/load_new_account: +191%
  • ↑ loadNewAccount/total: +191%
  • ↓ loadNewAccount/inp: -17%
  • ↓ loadNewAccount/fcp: -44%
  • ↑ loadNewAccount/lcp: +1172%
  • ↓ confirmTx/longTaskCount: -100%
  • ↓ confirmTx/longTaskTotalDuration: -100%
  • ↓ confirmTx/longTaskMaxDuration: -100%
  • ↓ confirmTx/tbt: -100%
  • ↓ confirmTx/inp: -24%
  • ↑ confirmTx/lcp: +1259%
  • ↑ bridgeUserActions/bridge_load_page: +213%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +118%
  • ↓ bridgeUserActions/longTaskCount: -100%
  • ↓ bridgeUserActions/longTaskTotalDuration: -100%
  • ↓ bridgeUserActions/longTaskMaxDuration: -100%
  • ↓ bridgeUserActions/tbt: -100%
  • ↑ bridgeUserActions/total: +42%
  • ↑ bridgeUserActions/inp: +23%
  • ↓ bridgeUserActions/fcp: -44%
  • ↑ bridgeUserActions/lcp: +1150%

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

  • 🟡 loadNewAccount/FCP: p75 1.8s
  • 🟡 confirmTx/FCP: p75 1.8s
  • 🟡 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: -23%
  • ↓ startupStandardHome/load: -23%
  • ↓ startupStandardHome/domContentLoaded: -22%
  • ↓ startupStandardHome/domInteractive: -13%
  • ↓ startupStandardHome/firstPaint: -15%
  • ↓ startupStandardHome/backgroundConnect: -24%
  • ↓ startupStandardHome/firstReactRender: -99%
  • ↓ startupStandardHome/initialActions: -33%
  • ↓ startupStandardHome/loadScripts: -23%
  • ↓ startupStandardHome/longTaskCount: -33%
  • ↓ startupStandardHome/longTaskTotalDuration: -30%
  • ↓ startupStandardHome/longTaskMaxDuration: -25%
  • ↓ startupStandardHome/tbt: -30%
  • ↓ startupStandardHome/fcp: -22%
  • ↓ startupStandardHome/lcp: -12%
  • ↓ startupStandardHome/domInteractive: -36%
  • ↓ startupStandardHome/firstReactRender: -98%
  • ↓ startupStandardHome/initialActions: -50%
  • ↑ startupStandardHome/setupStore: +24%
  • ↓ startupStandardHome/fcp: -30%
  • ↓ startupPowerUserHome/domInteractive: -42%
  • ↓ startupPowerUserHome/firstReactRender: -99%
  • ↓ startupPowerUserHome/initialActions: -44%
  • ↓ startupPowerUserHome/setupStore: -74%
  • ↓ startupPowerUserHome/numNetworkReqs: -48%
  • ↑ startupPowerUserHome/inp: +36%
  • ↓ startupPowerUserHome/fcp: -38%

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

  • 🟡 startupPowerUserHome/INP: p75 256ms
  • 🟡 startupPowerUserHome/LCP: p75 3.0s
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]
🟡 assetClickToPriceChart
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: +12%
  • ↑ onboardingImportWallet/confirmSrpToPwForm: +11%
  • ↑ onboardingImportWallet/pwFormToMetricsScreen: +52%
  • ↓ onboardingImportWallet/doneButtonToHomeScreen: -81%
  • ↓ onboardingImportWallet/openAccountMenuToAccountListLoaded: -94%
  • ↓ onboardingImportWallet/longTaskCount: -100%
  • ↓ onboardingImportWallet/longTaskTotalDuration: -100%
  • ↓ onboardingImportWallet/longTaskMaxDuration: -100%
  • ↓ onboardingImportWallet/tbt: -100%
  • ↓ onboardingImportWallet/total: -83%
  • ↑ onboardingNewWallet/srpButtonToPwForm: +26%
  • ↑ onboardingNewWallet/createPwToRecoveryScreen: +11%
  • ↑ onboardingNewWallet/skipBackupToMetricsScreen: +18%
  • ↑ onboardingNewWallet/agreeButtonToOnboardingSuccess: +25%
  • ↓ onboardingNewWallet/doneButtonToAssetList: -81%
  • ↓ onboardingNewWallet/longTaskCount: -69%
  • ↓ onboardingNewWallet/longTaskTotalDuration: -79%
  • ↓ onboardingNewWallet/longTaskMaxDuration: -51%
  • ↓ onboardingNewWallet/tbt: -99%
  • ↓ onboardingNewWallet/total: -77%
  • ↑ solanaAssetDetails/assetClickToPriceChart: +315%
  • ↓ solanaAssetDetails/longTaskCount: -100%
  • ↓ solanaAssetDetails/longTaskTotalDuration: -100%
  • ↓ solanaAssetDetails/longTaskMaxDuration: -100%
  • ↓ solanaAssetDetails/tbt: -100%
  • ↑ solanaAssetDetails/total: +315%
  • ↓ solanaAssetDetails/inp: -13%
  • ↓ importSrpHome/loginToHomeScreen: -22%
  • ↓ importSrpHome/longTaskCount: -23%
  • ↓ importSrpHome/longTaskTotalDuration: -48%
  • ↓ importSrpHome/longTaskMaxDuration: -63%
  • ↓ importSrpHome/tbt: -67%
  • ↓ importSrpHome/inp: -56%
  • ↑ importSrpHome/lcp: +15%
  • ↑ importSrpHome/cls: +489%
  • ↓ sendTransactions/openSendPageFromHome: -13%
  • ↓ sendTransactions/selectTokenToSendFormLoaded: -29%
  • ↓ sendTransactions/reviewTransactionToConfirmationPage: -98%
  • ↓ sendTransactions/longTaskCount: -100%
  • ↓ sendTransactions/longTaskTotalDuration: -100%
  • ↓ sendTransactions/longTaskMaxDuration: -100%
  • ↓ sendTransactions/tbt: -100%
  • ↓ sendTransactions/total: -96%
  • ↓ sendTransactions/inp: -52%
  • ↓ sendTransactions/fcp: -18%
  • ↓ sendTransactions/lcp: -69%
  • ↑ sendTransactions/cls: +171%
  • ↑ swap/openSwapPageFromHome: +204%
  • ↑ swap/fetchAndDisplaySwapQuotes: +85%
  • ↓ swap/longTaskCount: -100%
  • ↓ swap/longTaskTotalDuration: -100%
  • ↓ swap/longTaskMaxDuration: -100%
  • ↓ swap/tbt: -100%
  • ↑ swap/total: +88%
  • ↓ swap/inp: -32%
  • ↓ swap/fcp: -21%
  • ↓ swap/lcp: -74%
  • ↓ swap/cls: -92%

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

  • 🟡 assetDetails/FCP: p75 1.9s
  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 importSrpHome/FCP: p75 1.9s
  • 🟡 sendTransactions/FCP: p75 2.0s
  • 🟡 sendTransactions/LCP: p75 2.5s
  • 🟡 swap/FCP: p75 2.0s
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: -59%
  • ↓ dappPageLoad/firstPaint: -41%
  • ↓ dappPageLoad/firstContentfulPaint: -41%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 51.66 KiB (0.33%)
  • ui: 125.29 KiB (0.66%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 10.35 KiB (0.53%)
  • zip: 34.47 KiB (0.14%)

@gauthierpetetin gauthierpetetin changed the title fix(build): disable SWC mangling for AMO-deterministic Flask builds fix(build): disable SWC mangling on the runtime chunk for AMO determinism Sep 15, 2026
Co-authored-by: Cursor <cursoragent@cursor.com>
@sonarqubecloud

Copy link
Copy Markdown

@metamask-ci

metamask-ci Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor
Builds ready [6c4232e]
⚡ Performance Benchmarks (Total: 🟢 12 pass · 🟡 11 warn · 🔴 2 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 34956586167 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]

Regressions (🔴 2 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
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: +191%
  • ↑ loadNewAccount/total: +191%
  • ↑ confirmTx/longTaskTotalDuration: +52%
  • ↑ confirmTx/longTaskMaxDuration: +67%
  • ↑ confirmTx/tbt: +91%
  • ↑ bridgeUserActions/bridge_load_page: +55%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +15%
  • ↑ bridgeUserActions/longTaskCount: +67%
  • ↑ bridgeUserActions/longTaskTotalDuration: +107%
  • ↑ bridgeUserActions/longTaskMaxDuration: +28%
  • ↑ bridgeUserActions/tbt: +193%
  • ↑ bridgeUserActions/total: +16%
  • ↑ loadNewAccount/load_new_account: +191%
  • ↑ loadNewAccount/total: +191%
  • ↓ loadNewAccount/inp: -24%
  • ↓ loadNewAccount/fcp: -55%
  • ↑ loadNewAccount/lcp: +1199%
  • ↓ confirmTx/longTaskCount: -100%
  • ↓ confirmTx/longTaskTotalDuration: -100%
  • ↓ confirmTx/longTaskMaxDuration: -100%
  • ↓ confirmTx/tbt: -100%
  • ↓ confirmTx/inp: -24%
  • ↓ confirmTx/fcp: -45%
  • ↑ confirmTx/lcp: +1217%
  • ↑ bridgeUserActions/bridge_load_page: +197%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +85%
  • ↓ bridgeUserActions/longTaskCount: -100%
  • ↓ bridgeUserActions/longTaskTotalDuration: -100%
  • ↓ bridgeUserActions/longTaskMaxDuration: -100%
  • ↓ bridgeUserActions/tbt: -100%
  • ↑ bridgeUserActions/total: +22%
  • ↑ bridgeUserActions/inp: +31%
  • ↓ bridgeUserActions/fcp: -48%
  • ↑ bridgeUserActions/lcp: +1156%

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

  • 🟡 loadNewAccount/FCP: p75 1.8s
  • 🟡 confirmTx/FCP: p75 1.8s
  • 🟡 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: -32%
  • ↓ startupStandardHome/load: -31%
  • ↓ startupStandardHome/domContentLoaded: -31%
  • ↓ startupStandardHome/domInteractive: -24%
  • ↓ startupStandardHome/firstPaint: -22%
  • ↓ startupStandardHome/backgroundConnect: -32%
  • ↓ startupStandardHome/firstReactRender: -99%
  • ↓ startupStandardHome/initialActions: -67%
  • ↓ startupStandardHome/loadScripts: -31%
  • ↓ startupStandardHome/longTaskCount: -33%
  • ↓ startupStandardHome/longTaskTotalDuration: -38%
  • ↓ startupStandardHome/longTaskMaxDuration: -33%
  • ↓ startupStandardHome/tbt: -39%
  • ↓ startupStandardHome/inp: -11%
  • ↓ startupStandardHome/fcp: -31%
  • ↓ startupStandardHome/lcp: -21%
  • ↓ startupStandardHome/uiStartup: -10%
  • ↓ startupStandardHome/domInteractive: -36%
  • ↓ startupStandardHome/firstReactRender: -99%
  • ↓ startupStandardHome/initialActions: -50%
  • ↑ startupStandardHome/setupStore: +13%
  • ↓ startupStandardHome/fcp: -30%
  • ↓ startupPowerUserHome/uiStartup: -24%
  • ↓ startupPowerUserHome/domInteractive: -46%
  • ↓ startupPowerUserHome/backgroundConnect: -25%
  • ↓ startupPowerUserHome/firstReactRender: -99%
  • ↓ startupPowerUserHome/initialActions: -44%
  • ↓ startupPowerUserHome/setupStore: -82%
  • ↓ startupPowerUserHome/numNetworkReqs: -34%
  • ↓ startupPowerUserHome/inp: -11%
  • ↓ startupPowerUserHome/fcp: -27%
  • ↓ startupPowerUserHome/lcp: -13%
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟡 [CI log]
🟡 total
🟢 [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]
🟡 assetClickToPriceChart
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/confirmSrpToPwForm: +11%
  • ↓ onboardingImportWallet/doneButtonToHomeScreen: -80%
  • ↓ onboardingImportWallet/openAccountMenuToAccountListLoaded: -94%
  • ↓ onboardingImportWallet/longTaskCount: -100%
  • ↓ onboardingImportWallet/longTaskTotalDuration: -100%
  • ↓ onboardingImportWallet/longTaskMaxDuration: -100%
  • ↓ onboardingImportWallet/tbt: -100%
  • ↓ onboardingImportWallet/total: -83%
  • ↑ onboardingNewWallet/srpButtonToPwForm: +48%
  • ↑ onboardingNewWallet/createPwToRecoveryScreen: +32%
  • ↑ onboardingNewWallet/skipBackupToMetricsScreen: +44%
  • ↑ onboardingNewWallet/agreeButtonToOnboardingSuccess: +34%
  • ↓ onboardingNewWallet/doneButtonToAssetList: -81%
  • ↓ onboardingNewWallet/longTaskCount: -69%
  • ↓ onboardingNewWallet/longTaskTotalDuration: -77%
  • ↓ onboardingNewWallet/longTaskMaxDuration: -47%
  • ↓ onboardingNewWallet/tbt: -96%
  • ↓ onboardingNewWallet/total: -77%
  • ↑ solanaAssetDetails/assetClickToPriceChart: +290%
  • ↓ solanaAssetDetails/longTaskCount: -100%
  • ↓ solanaAssetDetails/longTaskTotalDuration: -100%
  • ↓ solanaAssetDetails/longTaskMaxDuration: -100%
  • ↓ solanaAssetDetails/tbt: -100%
  • ↑ solanaAssetDetails/total: +290%
  • ↑ solanaAssetDetails/fcp: +18%
  • ↓ importSrpHome/loginToHomeScreen: -44%
  • ↓ importSrpHome/homeAfterImportWithNewWallet: -47%
  • ↓ importSrpHome/longTaskCount: -65%
  • ↓ importSrpHome/longTaskTotalDuration: -78%
  • ↓ importSrpHome/longTaskMaxDuration: -77%
  • ↓ importSrpHome/tbt: -89%
  • ↓ importSrpHome/total: -46%
  • ↓ importSrpHome/inp: -72%
  • ↓ importSrpHome/fcp: -25%
  • ↓ importSrpHome/lcp: -27%
  • ↑ importSrpHome/cls: +441%
  • ↑ sendTransactions/openSendPageFromHome: +168%
  • ↑ sendTransactions/selectTokenToSendFormLoaded: +115%
  • ↓ sendTransactions/reviewTransactionToConfirmationPage: -98%
  • ↓ sendTransactions/longTaskCount: -100%
  • ↓ sendTransactions/longTaskTotalDuration: -100%
  • ↓ sendTransactions/longTaskMaxDuration: -100%
  • ↓ sendTransactions/tbt: -100%
  • ↓ sendTransactions/total: -91%
  • ↓ sendTransactions/inp: -37%
  • ↑ sendTransactions/fcp: +12%
  • ↓ sendTransactions/lcp: -56%
  • ↑ sendTransactions/cls: +171%
  • ↑ swap/openSwapPageFromHome: +430%
  • ↑ swap/fetchAndDisplaySwapQuotes: +88%
  • ↑ swap/longTaskCount: +33%
  • ↓ swap/tbt: -47%
  • ↑ swap/total: +96%
  • ↓ swap/lcp: -68%
  • ↓ swap/cls: -92%

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

  • 🟡 assetDetails/FCP: p75 1.8s
  • 🟡 solanaAssetDetails/FCP: p75 1.8s
  • 🟡 sendTransactions/FCP: p75 1.8s
  • 🟡 swap/FCP: p75 1.9s
  • 🟡 assetDetails/FCP: p75 2.0s
  • 🟡 solanaAssetDetails/FCP: p75 2.0s
  • 🟡 importSrpHome/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: -57%
  • ↓ dappPageLoad/firstPaint: -46%
  • ↓ dappPageLoad/firstContentfulPaint: -46%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 51.66 KiB (0.33%)
  • ui: 125.29 KiB (0.66%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 10.35 KiB (0.53%)
  • zip: 34.47 KiB (0.14%)

* rebuild comparisons (mtree) even when the bundles are otherwise equivalent.
* Disabling parallel minify keeps that step deterministic and has also been a
* small wall-clock win in local `yarn dist:mv2` timings.
* SWC mangling can still produce different `runtime.[contenthash].js` output

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.

Any idea why this only seems to impact the runtime bundle? If SWC manging is non-deterministic, I would imagine it might impact other bundles too.

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.

Unfortunately not. Scoping "mangle: false" to runtime is just an empirical attempt to fix the symptom, but I have no proof that SWC mangling is deterministic elsewhere (it's just empirical at this point).

That said, we've discussed during refinement yesterday that the real solution shall rather be to bump @swc/core, see if it fixes nondeterminism, and if not, understand the root cause, and fix @swc/core directly. That's what I'm trying in this other PR, but I'm not there yet.

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.

Interesting. Well, at least I was able to test that this worked (details in Slack about struggles to reproduce the issue).

@gauthierpetetin
gauthierpetetin marked this pull request as draft September 16, 2026 20:34
@gauthierpetetin
gauthierpetetin marked this pull request as ready for review September 23, 2026 17:57

@Gudahtt Gudahtt 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.

LGTM!

@github-project-automation github-project-automation Bot moved this from Needs dev review to Review finalised - Ready to be merged in PR review queue Sep 23, 2026
@gauthierpetetin
gauthierpetetin added this pull request to the merge queue Sep 23, 2026
Merged via the queue into main with commit 6ab2785 Sep 23, 2026
154 checks passed
@gauthierpetetin
gauthierpetetin deleted the fix/amo-deterministic-swc-nomangle branch September 23, 2026 20:10
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 23, 2026
@metamaskbot metamaskbot added the release-13.51.0 Issue or pull request that will be included in release 13.51.0 label Sep 23, 2026

This branch was successfully deployed

1 active deployment
pr-comment — 6c4232e8 Deployed Sep 23, 2026 by gauthierpetetin via identify-codeowners #82840
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

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

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants