Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
281 commits
Select commit Hold shift + click to select a range
e7499e0
fix: remove "Reset notifications" button (#26641)
oilnam Feb 27, 2026
328da11
refactor(analytics): migrate Batch 3-10: mobile-platform (#26560)
NicolasMassart Feb 27, 2026
a707689
refactor(analytics): migrate Batch 3-11: mobile-platform (#26567)
NicolasMassart Feb 27, 2026
3424cca
refactor(analytics): migrate Batch 3-14: mobile-platform (#26588)
NicolasMassart Feb 27, 2026
b64014f
refactor(analytics): migrate Batch 3-15: mobile-platform (#26591)
NicolasMassart Feb 27, 2026
66a4f56
refactor(analytics): migrate Batch 3-16: mobile-platform (#26593)
NicolasMassart Feb 27, 2026
d7b7f79
fix(bridge): cp-7.67.0 fix "View on block explorer" button for swap a…
vinnyhoward Feb 27, 2026
e7a93ce
fix(bridge): cp-7.67.0 display block explorer tx link for Popular net…
vinnyhoward Feb 27, 2026
cdf56ce
refactor: extract various business logic into separate utilities (#26…
GeorgeGkas Feb 27, 2026
961c01b
refactor: hw provider and hooks for cleaner architecture and readabil…
mathieuartu Feb 27, 2026
1ae46b5
feat(ramps): add Unified Buy v2 analytics events (#26374)
amitabh94 Feb 27, 2026
5cc6a74
test: improves mocks to allow plain text reponses (#26625)
christopherferreira9 Feb 27, 2026
9bfc6fa
refactor(predict): consolidate feature flag resolution and provider i…
matallui Feb 27, 2026
10ab00e
feat: add @deprecated JSDoc comments to component library replacement…
georgewrmarshall Feb 27, 2026
d2eb1e1
chore: update Bitrise Xcode stack to 26.2.x for iOS SDK 26 (#25136)
sethkfman Feb 27, 2026
1591e2d
chore: Added HeaderStandardAnimated to components temp (#26712)
brianacnguyen Feb 27, 2026
8a48496
chore: enhance root cause analysis for /create-bug skill (#26722)
chrisleewilcox Feb 28, 2026
fad4a12
refactor(analytics): migrate Batch 3-17: mobile-platform (#26679)
NicolasMassart Feb 28, 2026
2541e58
feat: update provider selection modal ui (#26726)
georgeweiler Feb 28, 2026
2a3ee4d
refactor(analytics): migrate Batch 3-13: mobile-platform (#26584)
NicolasMassart Mar 1, 2026
847a6cb
refactor: use route from props for type derivation (SwitchAccountType…
asalsys Mar 2, 2026
3f7308f
test: use mockTheme instead of hardcoded hex values in amount-keyboar…
georgewrmarshall Mar 2, 2026
bee9243
ci: fix setup-e2e-env tag in mobile workflows (#26759)
jvbriones Mar 2, 2026
ab07f46
feat(card): cp-7.68.0 Add View PIN option (#26646)
Brunonascdev Mar 2, 2026
f8c1bda
feat: stocks section in explore cp-7.68.0 (#26426)
juanmigdr Mar 2, 2026
2cd2fd7
chore: bump bridge controller (#26758)
bfullam Mar 2, 2026
be2b91c
fix: redact SDK related URLs (#26690)
wenfix Mar 2, 2026
1a0ed51
test: enhance DeFiSection tests with error handling and retry logic (…
PatrykLucka Mar 2, 2026
c859ce0
fix: recipient list display in send flow cp-7.68.0 (#26771)
jpuri Mar 2, 2026
12f0853
test: skip full views navigation test in Trending Feed (#26786)
cmd-ob Mar 2, 2026
dcceb02
fix: fixes token navigation button on the unavailable modal (#26720)
georgeweiler Mar 2, 2026
67269fe
chore: Bump `json-rpc-engine` cp-7.68.0 (#26777)
FrederikBolding Mar 2, 2026
cdaa546
feat: add bottom fade overlay to Wallet component for improved scroll…
PatrykLucka Mar 2, 2026
fc16f7a
feat: enhance PerpsSection to display watchlist markets with favorite…
PatrykLucka Mar 2, 2026
1e0be21
feat: update prediction market cards to match latest design (#26795)
wachunei Mar 2, 2026
ba615cf
fix: Bump @metamask/transaction-pay-controller to ^16.1.1 cp-7.68.0 (…
dan437 Mar 2, 2026
89521e5
refactor: update icon sizes in PerpsSection and PredictMarketCard com…
PatrykLucka Mar 2, 2026
efcc414
feat(e2e): add fixture validation and export specs with CI integratio…
cmd-ob Mar 2, 2026
c4f83e4
fix(perps): recover connection after app state changes cp-7.67.1 (#26…
aganglada Mar 2, 2026
5b9331e
feat(ramps): refactors order state into the controller (#26596)
georgeweiler Mar 2, 2026
837c127
fix: add GoogleLoginNoProviderDependencies error handling with browse…
grvgoel81 Mar 2, 2026
3dbf1fa
chore: Add autoSign unit test to validate no call unless using ledger…
Cal-L Mar 2, 2026
f534ceb
fix: android e2e locally build for arm64-v8a (#26774)
tommasini Mar 2, 2026
fc33bd8
ci: add QA stats workflow to collect tests metrics (#26559)
jvbriones Mar 2, 2026
4052d8c
fix(ramps): prevent country name overflow in v2 native address form (…
AxelGes Mar 2, 2026
77df6cc
fix(ramps): plug VerifyIdentity screen into v2 native ramps flow (#26…
AxelGes Mar 2, 2026
bed33f7
fix(ramps): wire SSN info tooltip in v2 native flow (#26739)
AxelGes Mar 2, 2026
99ae260
feat(predict): add Permit2 fee authorization support (#26711)
matallui Mar 2, 2026
9f5d5b4
feat: allow users to see payment method if they type 0 (#26717)
georgeweiler Mar 2, 2026
25d0121
feat: disable auto-lock during Ramps unified buy v2 flow (#26723)
AxelGes Mar 2, 2026
9992ef6
fix: avoid logging full FiatOrder on deposit order failure (#26735)
AxelGes Mar 2, 2026
f1be99b
refactor: Renamed HeaderCompactSearch to HeaderSearch (#26743)
brianacnguyen Mar 2, 2026
114b3d1
chore: upgrade design system packages @metamask/design-tokens@8.2.1 (…
georgewrmarshall Mar 2, 2026
7d709ac
feat: Add numpad quick-action A/B test and analytics (#26343)
bfullam Mar 2, 2026
b4a5652
refactor: Removed unused header components from components-temp (#26741)
brianacnguyen Mar 2, 2026
d226f94
feat(ramps): clears input on back button keyboard press (#26776)
georgeweiler Mar 2, 2026
5a3caf1
fix: handle transient BLE errors during Ledger app switch and simplif…
mathieuartu Mar 2, 2026
7ccbf0e
chore: Bump github tools to 1.7.0 (#26804)
Cal-L Mar 2, 2026
4111b2d
chore: decouple yarn install from build job (#26369)
weitingsun Mar 2, 2026
63e126e
feat: MUSD-150 quick convert (Part 3) (#26638)
Matt561 Mar 2, 2026
56deb1a
chore: Revert "Skip sonar cloud CI steps for now" (#26837)
Cal-L Mar 2, 2026
19b3758
feat(predict): add FAK order type support (#26718)
matallui Mar 2, 2026
ca66895
feat: make MM Connect deeplink parsing more robust (#26648)
jiexi Mar 2, 2026
eb4fbbf
refactor: Removed HeaderStackedStandard from codebase (#26742)
brianacnguyen Mar 3, 2026
de41034
chore: Added HeaderRoot to components-temp (#26745)
brianacnguyen Mar 3, 2026
99f427f
chore: update node-version-file in push-eas-update.yml (#26844)
weitingsun Mar 3, 2026
a52e79c
chore: upgrade design tokens to v8.2.2 (#26842)
georgewrmarshall Mar 3, 2026
a115618
fix(ramps): align build quote header with design spec (#26713)
amitabh94 Mar 3, 2026
6e4e35c
fix: source prop now has origin data for empty token state (#26772)
vinnyhoward Mar 3, 2026
31dfd2f
fix: Prompt biometrics for iOS on OAuthRehydration screen (#26464)
Cal-L Mar 3, 2026
8ada535
feat: cp-7.68.0 MUSD-392 update mUSD conversion flow copy (#26840)
Matt561 Mar 3, 2026
9340040
feat: redesign Cancel and Speed up transaction modal (#26209)
vinistevam Mar 3, 2026
d86e3ca
fix(analytics): add PERPS_UI_INTERACTION event tracking when clicking…
vinnyhoward Mar 3, 2026
3e2d5a2
test: fixed swap tests in performance suite (#26766)
javiergarciavera Mar 3, 2026
641b3a9
feat(perps): add source parameter to navigation in PerpsSection (#26779)
PatrykLucka Mar 3, 2026
83d1da8
fix: various ledger & hw connection improvements (#26880)
mathieuartu Mar 3, 2026
5e8b02b
chore: Polish list item styling for consistency (#26892)
amandaye0h Mar 3, 2026
f1e550a
chore: market insights UI design update (#26760)
zone-live Mar 3, 2026
339be88
feat(analytics): track Position Screen Viewed on NFT, Token, and DeFi…
vinnyhoward Mar 3, 2026
86fddcb
fix: cp-7.68.0 Bump `TransactionPayController` controller version (#2…
OGPoyraz Mar 3, 2026
6fb1d39
fix(card): fix date of birth bug on Card onboarding (#26893)
Brunonascdev Mar 3, 2026
37a6196
refactor: Balance refresh error logging (#26883)
Prithpal-Sooriya Mar 3, 2026
1941c28
fix(ramps): show loading on token selection until tokens are loaded (…
amitabh94 Mar 3, 2026
85674f6
test: fix trending feed e2e flakiness (stability check + re-enable sp…
racitores Mar 3, 2026
08727b7
fix: standardize ViewMoreCard across homepage sections (#26830)
wachunei Mar 3, 2026
eb6af53
fix: adjust perps sparkline stroke width and spacing (#26801)
wachunei Mar 3, 2026
2b4566b
fix: replace full-screen perps connection error with shared ErrorStat…
wachunei Mar 3, 2026
00a791c
fix: fix price display in token details page (#26894)
sahar-fehri Mar 3, 2026
da5380b
chore: update api url and adds test file (#26902)
zone-live Mar 3, 2026
cba65b6
feat: Improve default token selection for MMPay (#26546)
jpuri Mar 3, 2026
a8362d8
feat(workflow): enhance E2E fixture update process with PR number inp…
cmd-ob Mar 3, 2026
dda7c2b
ci: skip jobs that require secrets on forks (#26901)
tommasini Mar 3, 2026
f94adef
test: disables BROWSERSTACK_LOCAL on demand (#26769)
christopherferreira9 Mar 3, 2026
4c2fdf2
feat(homepage): enable token hiding via long press in TokensSection (…
wachunei Mar 3, 2026
ccf39d5
refactor: downgrade token refresh error levels (#26884)
Prithpal-Sooriya Mar 3, 2026
64f739d
test: update playwright matchers (#26898)
christopherferreira9 Mar 3, 2026
a909706
fix(perps): standardize percentage formatting in PerpsHeroCardView an…
PatrykLucka Mar 3, 2026
d3e440f
fix: MUSD-365 update mUSD conversion tertiary CTA cta_text property t…
Matt561 Mar 3, 2026
06088e9
chore: bump @metamask/tron-wallet-snap to 1.22.1 (#26906)
ulissesferreira Mar 3, 2026
ec63703
Revert "feat: cp-7.68.0 MUSD-392 update mUSD conversion flow copy (#2…
Matt561 Mar 3, 2026
f5ad1fe
fix(predict): prediction market positions not updating when switching…
matallui Mar 3, 2026
6dd4089
fix: normalize EVM ERC-20 icon URL casing for swap deeplinks (#26914)
bfullam Mar 3, 2026
554b85c
test: fix browser network selection behaviour (#26903)
Prithpal-Sooriya Mar 3, 2026
72029aa
refactor(perps): reduce external dependencies via messenger and DI (#…
abretonc7s Mar 3, 2026
b23ed12
fix: Align Bridge native Max-button gasless gating with extension (#2…
ghgoodreau Mar 3, 2026
9c138df
fix: MUSD-282 Add useTokensBuyability hook (#25539)
Matt561 Mar 3, 2026
2ffae0c
feat(predict): track order type (FOK/FAK) in analytics (#26838)
matallui Mar 3, 2026
7f0ffc3
test: setup full ramps e2e flow using ramps provider (#26951)
cortisiko Mar 3, 2026
0f50eef
test(ramps): replace offramp-cashout e2e with unit test for OFFRAMP_P…
chrisleewilcox Mar 3, 2026
da6d483
fix: missing sonar cloud step ignore on forks (#26925)
tommasini Mar 3, 2026
1ced5ad
refactor: Updated title and subtitle props for HeaderStandard to also…
brianacnguyen Mar 4, 2026
f636185
feat: update BannerBase default text variants (#26956)
georgewrmarshall Mar 4, 2026
10f2289
ci: Use foundry only when needed and cache it (#26802)
tommasini Mar 4, 2026
386d909
refactor: updated title font variant to heading lg according to desig…
brianacnguyen Mar 4, 2026
d1fccb7
refactor(predict): scope GameCache updates to subscribed games only (…
Kureev Mar 4, 2026
5f6025d
test: update evm-provider-events e2e tests for BIP-44 compatibility (…
chrisleewilcox Mar 4, 2026
ec9230f
test: remove bip44 ff from chain permissions tests (#26961)
cortisiko Mar 4, 2026
e84c09e
test(card): replace hex test color suppressions with shared theme moc…
georgewrmarshall Mar 4, 2026
609e9a8
fix(ramps): ensure Buy tokens load on token selection screen on fresh…
amitabh94 Mar 4, 2026
f295f73
test: update "Ethereum Provider Snap Tests" smoke tests to be BIP-44 …
sleepytanya Mar 4, 2026
b2d383c
test(snaps): Add name-lookup E2E (#26765)
FrederikBolding Mar 4, 2026
422b4b2
chore: handle rewards 403 auth with retry (#26834)
sophieqgu Mar 4, 2026
95a4cb3
fix(token-details): Use scoped account for EVM receive address after …
vinnyhoward Mar 4, 2026
e5e4c3e
feat: generic advanced charts component (#26459)
sahar-fehri Mar 4, 2026
09a6206
test: create Unified Gestures (#26932)
christopherferreira9 Mar 4, 2026
b93aa06
fix: request camera permission on Android during QR transaction signi…
dawnseeker8 Mar 4, 2026
aefcd11
fix: market insights disclaimer text update (#26971)
zone-live Mar 4, 2026
dbd907a
fix(analytics): correct source prop for Perps section ">" navigation …
vinnyhoward Mar 4, 2026
2ec96ff
fix(predict): refresh balance/allowance before Polymarket order submi…
matallui Mar 4, 2026
ab15f17
feat: improve SDKConnectV2 error toasts (#26972)
ffmcgee725 Mar 4, 2026
8829370
feat(perps): inline deposit flow in pay-with token filter (#26543)
michalconsensys Mar 4, 2026
7c541c0
fix(perps): remove duplicate AppState listener causing reconnection r…
abretonc7s Mar 4, 2026
3fb6a9a
feat(networks): add network deletion logic and update tests (#26983)
PatrykLucka Mar 4, 2026
8559e21
feat: bump `@metamask-assets-controllers` to `^100.1.0` (#26987)
Prithpal-Sooriya Mar 4, 2026
b44d5a6
test: mock getQuoteStream with SSE format to fix SmokeTrade abort fai…
cmd-ob Mar 4, 2026
a259454
fix(card): cashback UI fixes (#26993)
Brunonascdev Mar 4, 2026
0f45f2c
fix: gas_paid_with metrics parameter for MMPay transactions (#26778)
jpuri Mar 4, 2026
0d8e382
fix(TMCU-508): trigger NFT detection on homepage focus (#26919)
wachunei Mar 4, 2026
4b57dcd
chore: Bump `snaps-controllers` cp-7.67.2 (#26992)
FrederikBolding Mar 4, 2026
02ac109
fix: Ensure `redux-persist-filesystem-storage` returns a promise and …
FrederikBolding Mar 4, 2026
1b155cd
chore: Update a message for Withdraw: Not enough POL (#27001)
dan437 Mar 4, 2026
b140347
chore: bump @metamask/ramps-controller to ^10.2.0 (#27002)
AxelGes Mar 4, 2026
92b7919
feat(devex): add Cursor worktree setup configuration (#26986)
NicolasMassart Mar 4, 2026
2f8713e
fix: sourcemap upload to bitrise for react native profiler usage (#26…
tommasini Mar 4, 2026
956ec1d
fix: Disable the Max button for Predict Withdraw (#27006)
dan437 Mar 4, 2026
2310360
fix: hide quote expired bottom sheet outside of bridge view (#26729)
ghgoodreau Mar 4, 2026
018a83e
test: retries to launch the app on detox port forwarding failure (#26…
christopherferreira9 Mar 4, 2026
f561d75
feat: remove ota modal for onboarding (#26839)
weitingsun Mar 4, 2026
59c3d06
refactor: Updated header for Activity page (#26855)
brianacnguyen Mar 4, 2026
4c35914
feat: display OTA summary in push-eas-update workflow (#26957)
weitingsun Mar 4, 2026
9b535eb
fix: re-parse unknown `HardwareWalletError` (#27019)
mathieuartu Mar 4, 2026
579a7d6
test: Instrument performance e2e timers to Sentry per scenario (#26922)
javiergarciavera Mar 4, 2026
05b4da9
fix: cp-7.68.0 MUSD-450 extract Merkl bonus claim logic from TokenLis…
Matt561 Mar 4, 2026
c37ca2c
feat(card): implement React Query on Card feature (#26602)
Brunonascdev Mar 4, 2026
bb33d3c
refactor: Updated headers for Rewards pages (#26856)
brianacnguyen Mar 4, 2026
19722d7
refactor(predict): migrate useUnrealizedPnL to React Query (#26877)
Kureev Mar 4, 2026
8bab3bf
feat(card): add CardController shell to Engine (#27020)
Brunonascdev Mar 4, 2026
22a0ba7
fix: Updated Input to conditionally apply lineheight 0 when placehold…
brianacnguyen Mar 5, 2026
d67656d
chore: Align iOS development provisioning profile names and remove fa…
Cal-L Mar 5, 2026
8db1b6c
refactor: Updated the Perps Market page to have consistent search (#2…
brianacnguyen Mar 5, 2026
525b8bf
refactor: Updated header for trending view to use HeaderRoot (#26857)
brianacnguyen Mar 5, 2026
7140d26
feat(perps): add MYX provider infrastructure + provider switching (#2…
abretonc7s Mar 5, 2026
002e35b
chore: standardize back ButtonIcon sizes to md (#26181)
georgewrmarshall Mar 5, 2026
bedab1d
fix: validate URL schemes in MarketInsights before opening links (#27…
joaosantos15 Mar 5, 2026
d9fda29
test: disables the swap test due to flakiness (#27046)
christopherferreira9 Mar 5, 2026
7631621
chore(homepage): add homepage section viewed segment event (#26529)
vinnyhoward Mar 5, 2026
b5e5c6a
chore: stiky trade button in Market Insights (#27047)
zone-live Mar 5, 2026
80f2a27
test: migrates the first set of page objects to the unified approach …
christopherferreira9 Mar 5, 2026
86cb8a3
feat: MUSD-379 fixed off center buy/get mUSD button in Primary conver…
Matt561 Mar 5, 2026
3028d19
chore: Refine Send Review page to polish UI (#26984)
amandaye0h Mar 5, 2026
32d22d9
fix: remove redundant renewSeedlessControllerRefreshTokens call (#27039)
ieow Mar 5, 2026
68f19ab
chore: Refine spacing and styling on the unlock page (#26899)
amandaye0h Mar 5, 2026
708b528
fix(perps): suppress spurious offline/reconnecting toasts on mount an…
abretonc7s Mar 5, 2026
d900457
refactor: remove BIP-44 flag from wallet selector (#26931)
gantunesr Mar 5, 2026
f21fe38
fix: use ref for `targetWalletType` in `useHardwareWallet` system (#2…
mathieuartu Mar 5, 2026
05fac22
refactor: remove BIP-44 wrappers for dapp connection (#26248)
gantunesr Mar 5, 2026
a4a6692
refactor(analytics): PR A0 add identify() as backward-compat alias fo…
NicolasMassart Mar 5, 2026
7ea8fc7
chore: update envs with the correct api url (#27014)
zone-live Mar 5, 2026
1c8aa1e
refactor(networks): replace NetworkSettings with NetworkDetailsView a…
PatrykLucka Mar 5, 2026
6c35bb5
feat(networks): enhance form editability checks in NetworkDetailsView…
PatrykLucka Mar 5, 2026
f7a98b2
test: Swap action smoke test (#27048)
cmd-ob Mar 5, 2026
6b069d2
chore: remove error messages from bug report template (#27037)
gauthierpetetin Mar 5, 2026
6f8f892
fix(TMCU-499): fire Ramps Button Clicked event on token empty state B…
wachunei Mar 5, 2026
03a886f
chore: update package version (#27054)
zone-live Mar 5, 2026
3f9eb24
test: simplify the input in order to avoid flakiness (#27060)
christopherferreira9 Mar 5, 2026
43e62f8
docs: add documentation on how to use ramps staging environments (#27…
cortisiko Mar 5, 2026
d9d8e01
test: color-no-hex snaps (#26958)
georgewrmarshall Mar 5, 2026
34fcbd5
fix: increase homepage section gap from 24px to 48px (#27066)
wachunei Mar 5, 2026
a0da5f1
feat(perps): agentic toolkit — CDP bridge, recipes, yarn shortcuts (#…
abretonc7s Mar 5, 2026
007c36b
refactor: delete `EvmAccountSelectorList` and `TurnOnBackupAndSync` (…
gantunesr Mar 5, 2026
32bd5c5
refactor: replace BuildQuote navbar with HeaderCompact standard (#27021)
amitabh94 Mar 5, 2026
b1dcb14
feat: Add the "refundTo" param for postQuote transactions (#27065)
dan437 Mar 5, 2026
a6f7d4f
feat: add Tempo Mainnet network logo (#26904)
maxime-oe Mar 5, 2026
54365c8
feat: MUSD-352 replace boost with bonus globally for conversion flows…
Matt561 Mar 5, 2026
2b288d1
feat(predict): always use Permit2 fee auth and attach allowancesTx vi…
matallui Mar 5, 2026
6582390
[skip ci] Bump version number to 3910
metamaskbot Mar 5, 2026
fb3252b
chore(runway): cherry-pick chore: reposition perps components around …
runway-github[bot] Mar 9, 2026
e6e0b34
chore(runway): cherry-pick fix: mixpanel event missing property cp-7.…
runway-github[bot] Mar 9, 2026
a38e527
[skip ci] Bump version number to 3950
metamaskbot Mar 9, 2026
8fd3eb8
chore(runway): cherry-pick revert(predict): remove Polymarket balance…
runway-github[bot] Mar 9, 2026
2946793
chore(runway): cherry-pick feat: fix button label for action button c…
runway-github[bot] Mar 9, 2026
2853b06
chore(runway): cherry-pick fix: account for POL non-zero native addre…
runway-github[bot] Mar 9, 2026
4245826
[skip ci] Bump version number to 3954
metamaskbot Mar 9, 2026
974e266
chore(runway): cherry-pick feat: Updating mUSD conversion copy to ref…
runway-github[bot] Mar 9, 2026
35369b3
[skip ci] Bump version number to 3955
metamaskbot Mar 9, 2026
6dedad5
chore(runway): cherry-pick fix(predict): make fee exemption logic fea…
runway-github[bot] Mar 9, 2026
1e03654
[skip ci] Bump version number to 3957
metamaskbot Mar 9, 2026
ced147c
chore(runway): cherry-pick fix: cp-7.69.0 default to first convertibl…
runway-github[bot] Mar 9, 2026
ef7e236
[skip ci] Bump version number to 3958
metamaskbot Mar 9, 2026
dca84b2
chore(runway): cherry-pick feat: MUSD-394 add generic transaction fee…
runway-github[bot] Mar 9, 2026
1e22d23
[skip ci] Bump version number to 3960
metamaskbot Mar 9, 2026
c3f66d9
chore(runway): cherry-pick feat(predict): show FAK partial fill note …
runway-github[bot] Mar 9, 2026
9c5cdab
[skip ci] Bump version number to 3962
metamaskbot Mar 9, 2026
b468300
chore(runway): cherry-pick fix(predict): fix fee amount calculation c…
runway-github[bot] Mar 10, 2026
5df5f53
[skip ci] Bump version number to 3971
metamaskbot Mar 10, 2026
4b2e87a
chore(runway): cherry-pick fix(perps): route deposit flow to redesign…
runway-github[bot] Mar 10, 2026
3ad359c
[skip ci] Bump version number to 3972
metamaskbot Mar 10, 2026
9847633
chore(runway): cherry-pick fix: swaps network selector not scrolling …
runway-github[bot] Mar 11, 2026
cf2666c
[skip ci] Bump version number to 3987
metamaskbot Mar 11, 2026
c280f57
chore(runway): cherry-pick fix: try fixing X deeplinks by adding [GE-…
runway-github[bot] Mar 11, 2026
aca33da
[skip ci] Bump version number to 3988
metamaskbot Mar 11, 2026
cc22b1b
chore(runway): cherry-pick fix: update token selector font sizing (#2…
runway-github[bot] Mar 11, 2026
492385d
[skip ci] Bump version number to 3990
metamaskbot Mar 11, 2026
95d761b
chore: resolve merge conflicts for stable sync into release/7.69.0
chloeYue Mar 11, 2026
e89219b
fix: remove stale @veriff/react-native-sdk from yarn.lock
chloeYue Mar 11, 2026
89c40dc
fix: use stable version of VerifyIdentity test after Veriff revert
chloeYue Mar 11, 2026
cf369ea
fix: align HyperLiquidProvider test with release/7.69.0 provider
chloeYue Mar 11, 2026
38eb506
fix: remove Veriff SDK Gradle config after revert
chloeYue Mar 11, 2026
8a3b318
chore: sync stable into release/7.69.0 (#27355)
chloeYue Mar 11, 2026
12f9712
[skip ci] Bump version number to 3996
metamaskbot Mar 11, 2026
f145c3f
chore(runway): cherry-pick fix: update treatment sticky buy/sell cp-7…
runway-github[bot] Mar 11, 2026
03b9f72
[skip ci] Bump version number to 3997
metamaskbot Mar 11, 2026
02788b2
chore(runway): cherry-pick chore: New Crowdin translations by Github …
runway-github[bot] Mar 11, 2026
52ee253
[skip ci] Bump version number to 3998
metamaskbot Mar 11, 2026
94de1f5
chore(runway): cherry-pick fix: max button 7702 re-enable cp-7.69.0 (…
runway-github[bot] Mar 12, 2026
915f452
[skip ci] Bump version number to 4006
metamaskbot Mar 12, 2026
f169485
chore(runway): cherry-pick fix(seedless-onboarding): handle both vaul…
runway-github[bot] Mar 12, 2026
daa6dd2
[skip ci] Bump version number to 4008
metamaskbot Mar 12, 2026
2dca3f2
chore: sync stable into release/7.69.0 (#27432)
chloeYue Mar 12, 2026
611ecb8
[skip ci] Bump version number to 4011
metamaskbot Mar 12, 2026
6668403
Revert "chore: sync stable into release/7.69.0 (#27432)"
chloeYue Mar 12, 2026
0b4790b
Revert "chore: sync stable into release/7.69.0 (#27432)" (#27440)
chloeYue Mar 12, 2026
5502f83
chore: sync stable into release/7.69.0
chloeYue Mar 12, 2026
e45461f
chore: Stable sync release 7.69.0 (#27441)
chloeYue Mar 12, 2026
67b65b1
[skip ci] Bump version number to 4013
metamaskbot Mar 12, 2026
4304c84
release: release-changelog/7.69.0 (#27087)
metamaskbot Mar 12, 2026
a39fb0a
[skip ci] Bump version number to 4015
metamaskbot Mar 12, 2026
5078ae1
chore: trigger CI
chloeYue Mar 12, 2026
5e5fcd8
update
chloeYue Mar 13, 2026
3ecae11
chore: increase js bundle to 53 (#27135)
tommasini Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
38 changes: 33 additions & 5 deletions .claude/commands/create-bug.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,15 +124,43 @@ For `render: shell` fields, wrap the value in a code fence:
- Output the issue URL so the user can view it
- Ask the user: "Would you like me to investigate the codebase for the possible root cause? (yes/no)"
- Default is **no** — only proceed if the user explicitly says yes
- If yes, investigate the codebase (research only — no code changes) and add a comment using:
- If yes, perform the full **Root Cause Analysis** (Step 6)

## Step 6: Root Cause Analysis

When the user opts in, perform all three phases below and post a single comment on the issue with the combined findings.

### 6a: Investigate the root cause

- Trace the bug through the code to identify the exact files, lines, and logic causing the issue
- Research only — no code changes

### 6b: Identify regression PRs

- Check `git log` history of affected files, comparing the release branch against the previous release branch
- Identify which PRs introduced or surfaced the bug (new code, removed compensating mechanisms, refactors, etc.)
- Note whether the issue is a new regression or pre-existing

### 6c: Scope analysis

- Search the codebase for the same pattern, function, or anti-pattern causing the bug
- Identify all affected areas beyond the originally reported bug
- If other features are impacted, file separate bug issues for each and link them

### Comment format

Post findings as a comment using:

```bash
gh issue comment <issue-number> --repo MetaMask/metamask-mobile --body "..."
```

The comment should include:

- A summary of the possible root cause
- The error flow with relevant file paths and line numbers
- Key files table (file, line(s), description)
- A suggested fix approach
- **Summary** of the root cause
- **Likely Regression PR(s)** — PR numbers, titles, authors, and explanation of what changed (or note if pre-existing)
- **Error flow** with relevant file paths and line numbers
- **Full scope of impact** — all affected files, hooks, and components beyond the reported bug
- **Key files table** (file, line(s), description)
- **Suggested fix approach**
- **Links to related bugs** filed from the scope analysis
9 changes: 9 additions & 0 deletions .cursor/worktrees.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"setup-worktree": [
"cp $ROOT_WORKTREE_PATH/.js.env .js.env",
"cp $ROOT_WORKTREE_PATH/.ios.env .ios.env",
"cp $ROOT_WORKTREE_PATH/.android.env .android.env",
"cp $ROOT_WORKTREE_PATH/.e2e.env .e2e.env",
"cp -r $ROOT_WORKTREE_PATH/.cursor/plans .cursor/plans"
]
}
12 changes: 12 additions & 0 deletions .e2e.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ export TEST_SRP_2=
export TEST_SRP_3=
export BROWSERSTACK_USERNAME=
export BROWSERSTACK_ACCESS_KEY=

# Appwright performance -> Sentry instrumentation
# If E2E_PERFORMANCE_SENTRY_DSN is defined, each scenario uploads timers to Sentry.
export E2E_PERFORMANCE_SENTRY_DSN=
# Optional. Set to false to disable upload even when DSN is present.
export E2E_PERFORMANCE_SENTRY_ENABLED=true
# Optional sample rate between 0 and 1 (default: 1).
export E2E_PERFORMANCE_SENTRY_SAMPLE_RATE=1
# Optional metadata for Sentry events.
export E2E_PERFORMANCE_SENTRY_ENVIRONMENT=e2e-performance
export E2E_PERFORMANCE_SENTRY_RELEASE=

# Set BROWSERSTACK_LOCAL=true when using run-appwright:mm-connect-android-bs-local (BrowserStack Local tunnel)
# BROWSERSTACK_LOCAL=true
export SEEDLESS_ONBOARDING_ENABLED=
Expand Down
3 changes: 3 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/scripts/inpage-bridge
/app/core/InpageBridgeWeb3.js
/app/components/UI/Charts/AdvancedChart/webview/chartLogic.js
/app/components/UI/Charts/AdvancedChart/webview/chartLogicString.ts
/app/components/UI/Charts/AdvancedChart/webview/syncChartLogic.js
/app/util/blockies.js
__snapshots__
android
Expand Down
18 changes: 18 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,29 @@ module.exports = {
},
},
{
// Temporary rollout strategy:
// Keep color-no-hex disabled for all tests by default, then re-enable it
// for specific folders in small PR batches. Once migration is complete,
// remove this override and enforce across all tests in:
// - app/components/
// - app/component-library/
files: ['**/*.test.{js,ts,tsx}', '**/*.stories.{js,ts,tsx}'],
rules: {
'@metamask/design-tokens/color-no-hex': 'off',
},
},
{
files: ['app/components/UI/Card/**/*.{js,jsx,ts,tsx}'],
rules: {
'@metamask/design-tokens/color-no-hex': 'error',
},
},
{
files: ['app/components/Snaps/**/*.{js,jsx,ts,tsx}'],
rules: {
'@metamask/design-tokens/color-no-hex': 'error',
},
},
{
files: [
'app/components/UI/Name/**/*.{js,ts,tsx}',
Expand Down
8 changes: 5 additions & 3 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,11 @@ app/selectors/rampsController @MetaMask/ramp
**/ramps/** @MetaMask/ramp

# Card Team
app/components/UI/Card/ @MetaMask/card
app/core/redux/slices/card/ @MetaMask/card
app/components/UI/Card/ @MetaMask/card
app/core/redux/slices/card/ @MetaMask/card
app/core/Engine/controllers/card-controller @MetaMask/card
app/core/Engine/messengers/card-controller-messenger @MetaMask/card
app/selectors/cardController.ts @MetaMask/card

# Confirmation Team
app/components/Views/confirmations @MetaMask/confirmations
Expand Down Expand Up @@ -107,7 +110,6 @@ app/core/SnapKeyring @MetaMask/accounts-e

# Co-owned by accounts and mobile-core-ux
app/components/Views/AccountSelector @MetaMask/accounts-engineers @MetaMask/mobile-core-ux
app/components/UI/EvmAccountSelectorList @MetaMask/accounts-engineers @MetaMask/mobile-core-ux

# Multichain Accounts
**/multichain-accounts/** @MetaMask/accounts-engineers
Expand Down
176 changes: 176 additions & 0 deletions .github/scripts/collect-qa-stats.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
#!/usr/bin/env node
/**
*
* Downloads pre-aggregated QA stats artifacts from the triggering CI run via the
* GitHub API and writes a qa-stats.json file for consumption by downstream workflows.
*
* Required env vars:
* GITHUB_TOKEN — GitHub Actions token for API access
* WORKFLOW_RUN_ID — ID of the CI run that produced the artifacts
*
* Example of output format of qa-stats.json:
* {
* "component_view_tests_count": 34,
* "unit_test_count": 679,
* }
*
* How to add a new metric:
* 1. Add a collector function below (see existing example)
* 2. Call it in main() and assign the result to stats
*/

import { readFile, writeFile, mkdir } from 'fs/promises';
import { execSync } from 'child_process';
import { join } from 'path';

const GITHUB_TOKEN = process.env.GITHUB_TOKEN;
const WORKFLOW_RUN_ID = process.env.WORKFLOW_RUN_ID;

if (!WORKFLOW_RUN_ID) throw new Error('Missing required WORKFLOW_RUN_ID env var');
if (!GITHUB_TOKEN) throw new Error('Missing required GITHUB_TOKEN env var');


// ---------------------------------------------------------------------------
// GitHub artifact helpers
// ---------------------------------------------------------------------------

let _artifactList = null;

/**
* Fetches (and caches) the list of artifacts for the triggering CI run.
* First call fetches and stores, every subsequent call returns the cached value.
*
* @returns {Promise<Array>}
*/
async function getArtifactList() {
if (_artifactList) return _artifactList;

const artifacts = [];
let page = 1;

while (true) {
const url = `https://api.github.com/repos/MetaMask/metamask-mobile/actions/runs/${WORKFLOW_RUN_ID}/artifacts?per_page=100&page=${page}`;
const res = await fetch(url, {
headers: {
Authorization: `Bearer ${GITHUB_TOKEN}`,
Accept: 'application/vnd.github+json',
},
});

if (!res.ok) {
throw new Error(`Failed to list artifacts (page ${page}): ${res.status} ${res.statusText}`);
}

const data = await res.json();
artifacts.push(...data.artifacts);

if (data.artifacts.length < 100) break;
page++;
}

_artifactList = artifacts;
return _artifactList;
}

/**
* Downloads a named artifact from the triggering CI run, extracts it into a
* local directory named after the artifact, and returns that directory path.
*
* @param {string} artifactName
* @returns {Promise<string>} Path to the directory containing the extracted files
*/
async function downloadArtifact(artifactName) {
const artifacts = await getArtifactList();
const artifact = artifacts.find((a) => a.name === artifactName);

if (!artifact) {
throw new Error(
`Artifact "${artifactName}" not found in run ${WORKFLOW_RUN_ID}`,
);
}

// GitHub redirects to a pre-signed S3 URL. Follow manually so the
// Authorization header is not forwarded to S3.
const redirectRes = await fetch(artifact.archive_download_url, {
headers: {
Authorization: `Bearer ${GITHUB_TOKEN}`,
Accept: 'application/vnd.github+json',
},
redirect: 'manual',
});

const downloadUrl = redirectRes.headers.get('location');
if (!downloadUrl) {
throw new Error(`No redirect URL returned for artifact "${artifactName}"`);
}

const zipRes = await fetch(downloadUrl);
if (!zipRes.ok) {
throw new Error(
`Failed to download artifact "${artifactName}": ${zipRes.status} ${zipRes.statusText}`,
);
}

const destDir = `./${artifactName}`;
await mkdir(destDir, { recursive: true });
const zipPath = join(destDir, `${artifactName}.zip`);
await writeFile(zipPath, Buffer.from(await zipRes.arrayBuffer()));
execSync(`unzip -q "${zipPath}" -d "${destDir}"`);

return destDir;
}

// ---------------------------------------------------------------------------
// Collectors — one async function per metric source
// ---------------------------------------------------------------------------

async function collectComponentViewTestCount() {
const destDir = await downloadArtifact('cv-test-stats');
const raw = await readFile(join(destDir, 'cv-test-stats.json'), 'utf8');
const data = JSON.parse(raw);
return data.component_view_test_number;
}

async function collectUnitTestCount() {
const destDir = await downloadArtifact('unit-test-stats');
const raw = await readFile(join(destDir, 'unit-test-stats.json'), 'utf8');
const data = JSON.parse(raw);
return data.unit_test_number;
}

// ---------------------------------------------------------------------------
// Main
// ---------------------------------------------------------------------------

async function main() {
const stats = {};

const collectors = [
{
key: 'component_view_tests_count',
collect: collectComponentViewTestCount,
},
{
key: 'unit_tests_count',
collect: collectUnitTestCount,
},
];

for (const { key, collect } of collectors) {
try {
stats[key] = await collect();
} catch (err) {
// stat will not be present in the output file if the collector fails
console.error(`[${key}] collector failed, skipping stat:`, err.message);
}
}

const outputPath = './qa-stats.json';
await writeFile(outputPath, JSON.stringify(stats, null, 2), 'utf8');
console.log(`✅ QA stats written to ${outputPath}:`, stats);
}

main().catch((err) => {
console.error('\n❌ Unexpected error:', err);
process.exit(1);
});
Loading
Loading