Skip to content

fix(ci): unblock benchmark baseline (jq ARG_MAX exit 126)#42947

Open
MajorLift wants to merge 2 commits into
mainfrom
fix/benchmark-stats-commit-argmax
Open

fix(ci): unblock benchmark baseline (jq ARG_MAX exit 126)#42947
MajorLift wants to merge 2 commits into
mainfrom
fix/benchmark-stats-commit-argmax

Conversation

@MajorLift
Copy link
Copy Markdown
Contributor

@MajorLift MajorLift commented May 26, 2026

Summary

  • benchmark-stats-commit.sh passed the aggregated benchmark payload to jq as a single --argjson presets argument. As the payload grew (web vitals, long-task/TBT, more steps, user-journey presets), it crossed the kernel per-arg limit (MAX_ARG_STRLEN, ~128KB), so jq could not be exec'd ("Argument list too long") and the step exited 126.
  • The step is continue-on-error: true, so the failure surfaced as a green check while the rolling baseline behind PR benchmark comparisons silently stopped updating (no user-journey data since 2026-04-02, nothing at all since 2026-05-02).
  • Pass presets_json via stdin and page_load_json via --slurpfile so neither blob lands on argv. After this lands, the next main push commits a fresh performance_data.json and the rolling baseline self-corrects (no manual reset).

Fixes MetaMask/MetaMask-planning#7279.

CHANGELOG entry: null

Test plan

  • CI green on this PR
  • After merge, confirm the next main push adds a fresh commit to stats/main/performance_data.json with all presets including userJourneyOnboarding*
  • PR-comment baselines on subsequent PRs reflect post-fix data, not Apr/May stale values

Note

Low Risk
CI-only shell/jq plumbing for benchmark stats commits; no extension runtime, auth, or user data paths.

Overview
Fixes CI benchmark baseline commits that could fail silently when aggregated JSON grew past the kernel argv limit (~128KB), so jq never ran (exit 126, "Argument list too long").

benchmark-stats-commit.sh no longer passes large blobs as jq --argjson arguments. It pipes presets_json on stdin, loads page_load_json and COMMIT_DATA via temp files and --slurpfile, including when merging startup data into pageLoad and when appending a commit entry to performance_data.json.

After merge, the next main run should resume updating extension_benchmark_stats and PR benchmark comparisons should use fresh baselines again.

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

… 126)

`benchmark-stats-commit.sh` passed the aggregated benchmark payload to jq as a
single `--argjson presets` command-line argument. As the payload grew (web
vitals, long-task/TBT metrics, more steps, user-journey presets), it crossed the
kernel per-argument limit (`MAX_ARG_STRLEN`, ~128KB), so jq could not be exec'd
("Argument list too long") and the commit step exited 126.

Because `store-benchmark-stats` is `continue-on-error: true`, this surfaced as a
green check while the `main` benchmark baseline silently stopped updating
(no user-journey data since 2026-04-02, nothing at all since 2026-05-02).

Pass the large JSON via stdin, and read `page_load_json` from a temp file with
`--slurpfile`, so neither blob lands on argv.
@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.

@metamaskbot metamaskbot added the team-extension-platform Extension Platform team label May 26, 2026
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented May 26, 2026

Builds ready [e21ea4e] [reused from 89d089f]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 18 pass · 🟡 5 warn · 🔴 2 fail)

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

Metricschrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]

Regressions (🔴 2 failures)

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: -74%
  • loadNewAccount/total: -74%
  • bridgeUserActions/bridge_load_page: -71%
  • bridgeUserActions/bridge_load_asset_picker: -52%
  • bridgeUserActions/bridge_search_token: -25%
  • bridgeUserActions/total: -38%
  • loadNewAccount/load_new_account: -52%
  • loadNewAccount/total: -52%
  • bridgeUserActions/bridge_load_page: -31%
  • bridgeUserActions/bridge_load_asset_picker: -30%
  • bridgeUserActions/bridge_search_token: -31%
  • bridgeUserActions/total: -36%
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: -47%
  • startupStandardHome/load: -45%
  • startupStandardHome/domContentLoaded: -45%
  • startupStandardHome/domInteractive: -50%
  • startupStandardHome/firstPaint: -22%
  • startupStandardHome/backgroundConnect: -55%
  • startupStandardHome/firstReactRender: -26%
  • startupStandardHome/loadScripts: -46%
  • startupStandardHome/setupStore: -29%
  • startupStandardHome/numNetworkReqs: -50%
  • startupPowerUserHome/uiStartup: -50%
  • startupPowerUserHome/load: -37%
  • startupPowerUserHome/domContentLoaded: -37%
  • startupPowerUserHome/domInteractive: -58%
  • startupPowerUserHome/firstPaint: -41%
  • startupPowerUserHome/backgroundConnect: -27%
  • startupPowerUserHome/firstReactRender: -10%
  • startupPowerUserHome/loadScripts: -37%
  • startupPowerUserHome/setupStore: -27%
  • startupPowerUserHome/numNetworkReqs: -67%
  • startupStandardHome/domInteractive: -52%
  • startupStandardHome/backgroundConnect: +14%
  • startupStandardHome/firstReactRender: +33%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/setupStore: -47%
  • startupStandardHome/numNetworkReqs: -21%
  • startupPowerUserHome/uiStartup: -42%
  • startupPowerUserHome/domInteractive: -76%
  • startupPowerUserHome/backgroundConnect: -67%
  • startupPowerUserHome/firstReactRender: +46%
  • startupPowerUserHome/setupStore: -84%
  • startupPowerUserHome/numNetworkReqs: -64%

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

  • 🟡 startupPowerUserHome/INP: p75 352ms
  • 🟡 startupPowerUserHome/INP: p75 216ms
  • 🟡 startupPowerUserHome/LCP: p75 2.9s
User Journey Benchmarks · Samples: 5 · mock API 🔴 2
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
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: -63%
  • onboardingImportWallet/pwFormToMetricsScreen: +493%
  • onboardingImportWallet/metricsToWalletReadyScreen: -27%
  • onboardingImportWallet/doneButtonToHomeScreen: -30%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -65%
  • onboardingImportWallet/total: -34%
  • onboardingNewWallet/srpButtonToPwForm: -77%
  • onboardingNewWallet/createPwToRecoveryScreen: +1067%
  • onboardingNewWallet/skipBackupToMetricsScreen: -70%
  • onboardingNewWallet/doneButtonToAssetList: +46%
  • onboardingNewWallet/total: +35%
  • assetDetails/assetClickToPriceChart: -32%
  • assetDetails/total: -32%
  • solanaAssetDetails/assetClickToPriceChart: -31%
  • solanaAssetDetails/total: -31%
  • importSrpHome/loginToHomeScreen: -30%
  • importSrpHome/openAccountMenuAfterLogin: +211%
  • importSrpHome/homeAfterImportWithNewWallet: -58%
  • importSrpHome/total: -51%
  • swap/openSwapPageFromHome: -93%
  • swap/total: -17%

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

  • 🟡 assetDetails/INP: p75 216ms
  • 🟡 onboardingImportWallet/FCP: p75 1.8s
  • 🟡 assetDetails/FCP: p75 1.8s
  • 🟡 sendTransactions/INP: p75 240ms
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: +24%
Bundle size diffs
  • background: 0 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 0 Bytes (0%)

Copy link
Copy Markdown

@cursor cursor Bot left a comment

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 e21ea4e. Configure here.

Comment thread .github/scripts/benchmark-stats-commit.sh
@metamaskbot metamaskbot added the INVALID-PR-TEMPLATE PR's body doesn't match template label May 26, 2026
The first fix moved `presets_json` off argv inside
`assemble_performance_data`, but `COMMIT_DATA` (the
`{ timestamp, presets: ... }` wrapper, strictly larger than the inner
presets blob) was still passed as `--argjson data "${COMMIT_DATA}"` on
the final write. That command hits the same `MAX_ARG_STRLEN` limit and
silently fails under `continue-on-error`, keeping the baseline frozen.
Read `COMMIT_DATA` from a temp file via `--slurpfile` so nothing large
lands on argv.

Caught by Cursor Bugbot on #42947.
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented May 26, 2026

Builds ready [61b250b] [reused from 31e5270]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 18 pass · 🟡 3 warn · 🔴 3 fail)

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

Metricschrome-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]

Regressions (🔴 3 failures)

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: -68%
  • loadNewAccount/total: -68%
  • bridgeUserActions/bridge_load_page: -67%
  • bridgeUserActions/bridge_load_asset_picker: -62%
  • bridgeUserActions/bridge_search_token: -30%
  • bridgeUserActions/total: -43%
  • loadNewAccount/load_new_account: -50%
  • loadNewAccount/total: -50%
  • bridgeUserActions/bridge_load_page: +640%
  • bridgeUserActions/bridge_load_asset_picker: -35%
  • bridgeUserActions/bridge_search_token: -28%
  • bridgeUserActions/total: +86%
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: -34%
  • startupStandardHome/load: -32%
  • startupStandardHome/domContentLoaded: -32%
  • startupStandardHome/domInteractive: -37%
  • startupStandardHome/firstPaint: -17%
  • startupStandardHome/backgroundConnect: -44%
  • startupStandardHome/loadScripts: -33%
  • startupStandardHome/numNetworkReqs: -50%
  • startupStandardHome/domInteractive: -56%
  • startupStandardHome/backgroundConnect: +18%
  • startupStandardHome/firstReactRender: +39%
  • startupStandardHome/initialActions: +20%
  • startupStandardHome/numNetworkReqs: -21%
  • startupPowerUserHome/uiStartup: -58%
  • startupPowerUserHome/load: -44%
  • startupPowerUserHome/domContentLoaded: -44%
  • startupPowerUserHome/domInteractive: -83%
  • startupPowerUserHome/backgroundConnect: -55%
  • startupPowerUserHome/loadScripts: -43%
  • startupPowerUserHome/setupStore: -87%
  • startupPowerUserHome/numNetworkReqs: -64%
User Journey Benchmarks · Samples: 5 · mock API 🔴 3
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
assetDetails
[Sentry log · main/release]
🔴 [CI log]
🔴 cls
🟢 [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: +557%
  • onboardingImportWallet/metricsToWalletReadyScreen: -24%
  • onboardingImportWallet/doneButtonToHomeScreen: -34%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -66%
  • onboardingImportWallet/total: -41%
  • onboardingNewWallet/srpButtonToPwForm: -77%
  • onboardingNewWallet/createPwToRecoveryScreen: +1044%
  • onboardingNewWallet/skipBackupToMetricsScreen: -69%
  • onboardingNewWallet/doneButtonToAssetList: +47%
  • onboardingNewWallet/total: +38%
  • assetDetails/assetClickToPriceChart: -17%
  • assetDetails/total: -17%
  • solanaAssetDetails/assetClickToPriceChart: -36%
  • solanaAssetDetails/total: -36%
  • importSrpHome/loginToHomeScreen: -30%
  • importSrpHome/openAccountMenuAfterLogin: +155%
  • importSrpHome/homeAfterImportWithNewWallet: -61%
  • importSrpHome/total: -57%
  • swap/openSwapPageFromHome: -95%
  • swap/total: -22%

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

  • 🟡 assetDetails/INP: p75 320ms
  • 🔴 assetDetails/CLS: p75 0.567
  • 🟡 solanaAssetDetails/INP: p75 216ms
  • 🟡 sendTransactions/INP: p75 408ms
  • 🟡 sendTransactions/FCP: p75 2.1s
  • 🟡 swap/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: +27%
Bundle size diffs
  • background: 0 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 0 Bytes (0%)

Copy link
Copy Markdown
Contributor

@davidmurdoch davidmurdoch left a comment

Choose a reason for hiding this comment

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

ultimately we should switch to a proper DB, only store an aggregate, or using some sort of rolling log files

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

Labels

INVALID-PR-TEMPLATE PR's body doesn't match template size-S team-extension-platform Extension Platform team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants