[pull] main from MetaMask:main#795
Merged
Merged
Conversation
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** - Reused a shared `AddAssetTokenRow` across import search results and confirmation. - Aligned token row icon, badge, title, subtitle, spacing, and skeleton sizing. - Updated the import search field to use the shared `TextFieldSearch` pattern. - Added loading/disabled feedback for the confirmation import action. - Added tests for import loading, duplicate press prevention, failure handling, and search behavior. - Kept Explore search bar unchanged. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: remove inconsistencies on token import flow ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-3294 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I've included tests if applicable - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > UI and UX changes in the add-token flow with no auth, security, or wallet-core logic changes; import behavior is guarded with loading and error recovery. > > **Overview** > Unifies how tokens look in the **add/import** flow and hardens the confirm step when users tap **Import**. > > A new **`AddAssetTokenRow`** component is shared by **search results** and **confirm import**, so avatar, network badge, name, and symbol use the same layout and typography (including **`BadgeNetwork`**). Search uses the design-system **`TextFieldSearch`** instead of a custom search bar; list rows and loading skeletons are aligned to the same **`h-16`** row spacing. **`SearchTokenResults`** no longer takes a **`chainId`** prop (network context comes from each asset). > > **`ConfirmAddAsset`** treats **`addTokenList`** as async: import shows **loading**, **disables** Cancel/Import to block double-taps, **logs** failures and re-enables buttons without navigating away on error. **`AddAsset`** inlines the network bottom sheet without a memoized render callback. > > Tests cover in-flight import, duplicate presses, and failed import recovery. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 99573ec. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…#30749) <!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## **Description** Raises the AI confidence gate used by smart E2E selection from **80%** to **85%**. At the higher threshold the smart-selection path is more conservative: the AI must be more confident before its narrowed tag list is trusted. PRs where the AI confidence falls between 80–84% will now fall back to running the full E2E suite instead of the AI-selected subset. **Files changed:** - `.github/workflows/ci.yml` — four `>= 80` threshold expressions updated to `>= 85` (Android/iOS build-skip checks and selected-tags expressions) - `.github/guidelines/E2E_DECISION_TREE.md` — Mermaid diagram node updated to `Confidence >= 85%` ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** CI-only change — no manual testing steps required. ## **Screenshots/Recordings** N/A — CI configuration change only. ### **Before** N/A ### **After** N/A ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] I've included tests if applicable - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-9d0b1e0d-1bde-492b-8403-268d52e549f5"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-9d0b1e0d-1bde-492b-8403-268d52e549f5"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: cmd-ob <cmd-ob@users.noreply.github.com>
## **Description** We had two flags gating Money surfaces (`moneyHomeScreenEnabled` and `moneyEnableMoneyAccount`). This was needed for independent development of features. We can simply rely `moneyEnableMoneyAccount` now. This PR drops `moneyHomeScreenEnabled` and routes every Money UI gate through `moneyEnableMoneyAccount`. This also removes the `featureDisabled` branch of `MoneyBalanceDisplayState` since this it's now unreachable. ## **Changelog** CHANGELOG entry: update moneyHomeScreenEnabled UI gating to use moneyEnableMoneyAccount; remove featureDisabled MoneyBalanceDisplayState code paths since they are now unreachable ## **Related issues** - Fixes: [MUSD-864](https://consensyssoftware.atlassian.net/browse/MUSD-864) ## **Manual testing steps** ```gherkin Feature: Money account feature flag Scenario: flag off hides Money surfaces Given Money account is disabled When the user opens the app Then the Activity tab is shown in the bottom navbar And the Money section is rendered instead of the MoneyBalanceCard on the Wallet home screen Scenario: flag on shows Money surfaces Given Money account is enabled When the user opens the app Then the Money tab replaces Activity in bottom navbar And the MoneyBalanceCard renders on the Wallet home screen ``` ## **Screenshots/Recordings** ### **Before** <!-- N/A — no user-visible change when flags are aligned --> ### **After** <!-- N/A --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - [ ] I've tested with a power user scenario - [ ] I've instrumented key operations with Sentry traces for production performance metrics ## **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. <!-- Generated with the help of the pr-description AI skill --> [MUSD-864]: https://consensyssoftware.atlassian.net/browse/MUSD-864?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Wide but mechanical flag swap across tabs, wallet, and cash navigation; behavior changes if remote flags were previously mismatched, with no auth or payment logic touched. > > **Overview** > This PR **consolidates Money UI gating** onto a single remote flag, **`moneyEnableMoneyAccount`**, and removes the parallel **`moneyHomeScreenEnabled`** path (selector, registry entry, and `MM_MONEY_HOME_SCREEN_ENABLED` from `.js.env.example`). > > **Navigation and home surfaces** now read `selectMoneyEnableMoneyAccountFlag` instead of the home-screen flag: the bottom tab swaps Activity for Money when enabled, `MainNavigator` registers Money stacks conditionally, **Wallet** shows `MoneyBalanceCard` and the activity shortcut, **Activity** back/hardware behavior routes to home tabs when Money is on, and the homepage **Cash** section / `useCashNavigation` hide or deep-link to Money accordingly. > > **In-app Money balance UI** drops the **`featureDisabled`** branch from `MoneyBalanceDisplayState` and related components (`MoneyHomeView`, `MoneyBalanceCard`, `MoneyBalanceSummary`), test IDs, copy, and precedence docs—on the assumption users only reach these screens when the account flag is on. **`isMoneyAccountEnabled`** no longer falls back to `MM_MONEY_ENABLE_MONEY_ACCOUNT`; undefined remote evaluates to **false**. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 8b0d2c0. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…mports cp-7.80.0 (#30754) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Enables the live BTC 5-minute up/down row in the Predict homepage discovery section (HomepagePredictWorldCupDiscovery). The row was previously gated behind a temporary SHOW_BTC_UP_DOWN_5M_ROW kill switch while waiting on the shared useCurrentCryptoUpDownMarketData hook. That hook is now wired up, so the row shows live BTC spot price, price-to-beat, and a countdown. Tapping the row opens the active BTC market details when available; otherwise it falls back to the crypto category market list. **Why:** Surface live crypto up/down markets on the homepage discovery treatment and remove dead placeholder/TODO wiring. **Changes:** - Remove SHOW_BTC_UP_DOWN_5M_ROW from btcUpDown5mSeries.ts - Wire useCurrentCryptoUpDownMarketData + usePredictNavigation in HomepagePredictWorldCupDiscovery - Always render BtcLiveRow (no longer conditional on kill switch) - Navigate to live market on row tap when btcMarketId is available ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Added a live BTC up/down row to the Predict homepage discovery section with real-time price, price-to-beat, and countdown. ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: Predict homepage discovery BTC live row Scenario: BTC row displays live data when Predict is enabled Given Predict is enabled And the user is in the homepage discovery treatment (world cup discovery layout) When the user views the Predict section on the homepage Then the BTC live row is visible And it shows BTC spot price, price-to-beat, and a live countdown Scenario: Tapping BTC row opens the active market Given Predict is enabled And a live BTC 5-minute up/down market is available When the user taps the BTC live row Then the app navigates to that market's details screen And the entry point is HOME_SECTION Scenario: Tapping BTC row falls back when no live market Given Predict is enabled And no live BTC market is available When the user taps the BTC live row Then the app navigates to the Predict crypto category market list ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="403" height="234" alt="Screenshot 2026-05-28 at 13 26 58" src="https://github.com/user-attachments/assets/d71ebb53-84bb-4c6c-943f-a3adbcab1b0e" /> <!-- [screenshots/recordings] --> ### **After** <img width="410" height="867" alt="Screenshot 2026-05-28 at 17 41 35" src="https://github.com/user-attachments/assets/9c35e1a5-8ed6-4a24-8c47-8c09e2ebc419" /> <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > User-visible homepage Predict navigation and live market data depend on external feeds; misconfiguration could send users to the wrong market or show stale prices, but scope is limited to discovery UI. > > **Overview** > Removes the temporary **`SHOW_BTC_UP_DOWN_5M_ROW`** kill switch and turns on the **BTC 5-minute up/down** discovery row on the Predict homepage. > > **`HomepagePredictWorldCupDiscovery`** now loads live window data via **`useCurrentCryptoUpDownMarketData`** (series **`BTC_UP_OR_DOWN_5M_SERIES`**, gated by **`selectPredictEnabledFlag`**) and always renders **`BtcLiveRow`** with spot price, price-to-beat, and countdown. Tapping the row opens the active market through **`navigateToMarketDetails`** when **`btcMarketId`** exists (including **`transactionActiveAbTests`** when present); otherwise it still navigates to the crypto market list. Placeholder constants and commented TODO wiring are deleted. > > **`PredictionsSection.test.tsx`** mocks **`useCurrentCryptoUpDownMarketData`** so tests stay stable without live market data. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 3e187e4. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** This is the second pr related to gasless hardware wallet swap support. It introduces hooks that will be used. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Related to: https://consensyssoftware.atlassian.net/browse/MUL-1718 Depends on: #30182 ## **Manual testing steps** Not applicable ## **Screenshots/Recordings** Not applicable ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Changes bridge Redux and signing/disconnect/reject dispatch paths for hardware wallets; incorrect baseline or dedup logic could mis-handle swap failures, though behavior is heavily unit-tested and not yet wired to production UI. > > **Overview** > Adds **hardware-wallet swap state** to the bridge Redux slice (`hardwareWalletsSwaps`, `updateHardwareWalletsSwaps` / `resetHardwareWalletsSwaps`, `selectHardwareWalletsSwaps`) and two hooks meant for the gasless HW signing flow. > > **`useHwConnectionMonitoring`** watches device connection while status is `Waiting`. It dispatches `DEVICE_DISCONNECTED` or `REJECTED` when signing is active, with guards for pre-signing disconnect handoffs, stale baseline state on re-entry, deduplication, and recoverable transport errors. **`useHwQrState`** drives inline QR signing visibility, user cancel → `REJECTED`, and auto-cancels pending QR scans when the flow hits terminal statuses. > > Mocks and bridge slice tests are updated; hook behavior is covered by large unit test suites. No UI wiring in this diff—hooks and Redux plumbing only. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 9be3ea4. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…l sites (#29525) ## **Description** Adopts the explicit `isInternal: true` flag on internal `addTransaction` / `addTransactionBatch` call sites, replacing the old `origin === ORIGIN_METAMASK` trust check removed in `@metamask/transaction-controller@66.0.0`. A [yarn patch](https://yarnpkg.com/features/patching) on `@metamask/transaction-controller@66.0.0` is included to backport the `isInternal` field to the `ExtraTransactionsPublishHook` (needed for extra-transaction batches). ### Call sites stamped `isInternal: true` | Feature | Hook / Utility | |---------|---------------| | Send | `send.ts` `transaction.ts` | | Earn | `musdConversionTransaction.ts` `EarnInputView.tsx` `useMerklClaimTransaction.ts` | | Card | `useCardDelegation.ts` | | Money Account | `useMoneyAccount.ts` | | Perps | `usePerpsWithdrawConfirmation.ts` | | Predict | `PredictController.ts` | | Ramp | `SendTransaction.tsx` | | Pooled Staking | `usePoolStakedClaim/index.ts` `usePoolStakedDeposit/index.ts` `usePoolStakedUnstake/index.ts` | | Dev Tools | `confirmations-developer-options` | ### Not stamped — controller sets `isInternal` internally - **`BridgeStatusController`** (via `@metamask/bridge-status-controller@71.2.0`) — `bridge-status-controller-init.ts` is a passthrough; the controller sets the flag itself. - **`TransactionPayController`** (via `@metamask/transaction-pay-controller@22.6.0`) — sets `isInternal: true` in its own submit strategies. ### Excluded — external / dapp-originated paths - `BackgroundBridge` (`eth_sendTransaction`, `wallet_sendCalls`) - WalletConnect v2 session requests - Deeplink handlers ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: isInternal flag propagation Scenario: user submits an internal transaction Given the app is on a transaction submission flow (send, stake, earn, perps, etc.) When the transaction is submitted Then the transaction proceeds without requiring an external approval prompt ``` ## **Screenshots/Recordings** N/A — internal flag propagation, no UI changes. ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors.
#30806) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Remove android lint result from slack notification on release automatic RC builds. Adding back once test phase ends ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I've included tests if applicable - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] 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.
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** Remove explore search V1 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: remove explore search V1 ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-3293 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I've included tests if applicable - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Medium risk: large UX/navigation change in Explore search (removed full-view route, new default flows) with broad test updates; no auth or payment logic, but user-facing search behavior changes for all users once shipped. > > **Overview** > This PR **removes Explore search V1** and makes the tabbed, pill-based search the only path. The **`exploreSearchV2` remote feature flag** and its selector/registry entries are deleted, so search is no longer gated at runtime. > > **`ExploreSearchScreen`** always renders pill filters plus **`ExploreSearchContent`**, which uses **`useExploreSearch`** with pagination. The legacy **`ExploreSearchResultsV2`** duplicate and the **`ExploreSectionResultsFullView`** stack screen (and route/types) are removed; **“view more”** now switches the active pill and shows **`FullFeedList`** in-place instead of pushing a separate full-results screen. > > **`ExploreSearchResults`** is updated to the former V2 behavior: sections passed in from the parent, **`getViewMoreLabel`**, empty-state headers with popular asset pills, and analytics tied to **`activeTab`**. **`useExploreSearch`** drops V1-only options (truncate-without-query, title variants); **`useExploreSearchV2`** is deleted and tests/docs rename “V2” to the default experience. > > Tests and Detox/smoke flows now assert **search pills** and the **results list** instead of scrolling to a search-engine footer link. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 3b42ea9. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…30709) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Aligns the Spending Limit **Spend and earn** promo card with the updated Money account design (Figma `7749:21026`). **Why:** Product/design refreshed the copy and visual hierarchy for the Money account linkage CTA so it matches the broader Money account linkage experience and emphasizes APY as a highlighted benefit. **What changed:** - **SpendAndEarnPromoCard** — Title is now **Spend and earn** (bold). Body copy focuses on linking balance to the card and mUSD back on purchases, with the APY rate rendered in **success green** (`TextColor.SuccessDefault`, medium weight). CTA label is **Link card**. Button shimmer (`ShimmerOverlay`) is unchanged. - **Copy / i18n** — Replaced single-paragraph strings with split prefix / APY / suffix keys; removed explicit cashback % from the promo (Metal vs regular no longer differentiated in this banner). - **SpendingLimit** — Stops passing `cashbackPercent` into the promo card. - **useCardPostAuthRedirect** — New hook (with unit tests) to read `postAuthRedirect` from parent navigators when the user enters card flows from Money Home; supports nested onboarding params. Scaffolding for upcoming linkage / bottom-sheet navigation work. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Updated the Spending Limit spend-and-earn promo card copy, styling, and Link card CTA to match the Money account design. ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: Spending Limit spend-and-earn promo card Scenario: User sees the redesigned promo when linking Money account from card onboarding Given the user is on the Card Spending Limit screen during onboarding And a crypto token is selected (not Money account as source) And the Money account linkage CTA is available (funded Money balance) And a live APY rate is available When the user views the spend-and-earn promo card Then the title reads "Spend and earn" And the description mentions linking balance to the card and mUSD back on purchases And the APY rate (e.g. "4% APY") appears highlighted in green And the primary button label reads "Link card" And the button still shows the horizontal shimmer animation When the user taps the promo card or the "Link card" button Then the app switches the spending source to the Money account Scenario: User sees shortened copy when APY is unavailable Given the same Spending Limit onboarding context as above And no APY rate is returned for the Money account When the user views the spend-and-earn promo card Then the description reads "Link your balance to your card and get mUSD back on purchases." And no highlighted APY segment is shown ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** N/A ### **After** N/A ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] 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. <!-- Generated with the help of the pr-description AI skill --> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Navigation param threading across Money and card onboarding/auth affects where users land after sign-in; regressions could strand users on the wrong screen, though changes are mostly UI copy plus tested redirect plumbing. > > **Overview** > **Spend-and-earn promo** on Spending Limit is redesigned to match Money account UX: title **Spend and earn**, new body copy with a **green-highlighted** APY segment, CTA **Link card**, and **no Metal vs regular cashback** in the banner (`SpendAndEarnPromoCard` drops `cashbackPercent`; i18n uses prefix / APY / suffix keys). > > **Return-to-Money after card flows:** new `useCardPostAuthRedirect` reads `postAuthRedirect` from parent navigators (including nested onboarding params). **Money Home** card entry points pass `MONEY_HOME_CARD_ORIGIN`; **Card Welcome**, **Sign Up**, and **money–card linkage** forward that param into onboarding or authentication. **Money Link Card sheet** and **MetaMask Card** promos get aligned copy and **“(variable)”** APY wording in `en.json`. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 031c060. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until this PR meets the canonical
Definition of Ready For Review in `docs/readme/ready-for-review.md`.
In short: the template must be materially complete (not just section
titles
present), all status checks must be currently passing, and the only
expected
follow-up commits must be reviewer-driven.
-->
## **Description**
Migrates the legacy aggregator routes (`Aggregator/routes/index.tsx`)
from `@react-navigation/stack` (JS stack) to
`@react-navigation/native-stack`, aligning with the rest of the Ramp
routing tree (Unified V2 `Ramp/routes.tsx` already uses native stack).
Native stack uses platform-native navigation primitives
(`UINavigationController` on iOS, `FragmentTransaction` on Android),
which yields better performance and a more native feel — especially
noticeable on the modal/overlay transitions used by `Quotes` and
`Checkout`.
The migration is purely a wiring/config change. No screen behaviour,
route names, or component imports change. Translations applied:
- Navigator: `createStackNavigator` → `createNativeStackNavigator`
- Per-screen overlay options: replaced inline `headerShown / cardStyle /
animationEnabled / detachPreviousScreen` blocks for `Quotes` and
`Checkout` with the shared `clearNativeStackNavigatorOptions` +
`transparentModalScreenOptions` presets from
`app/constants/navigation/clearStackNavigatorOptions.ts`.
- Property renames: `cardStyle` → `contentStyle`, `animationEnabled:
false` → `animation: 'none'`.
- The `detachPreviousScreen: false` workaround used to keep the
underlying screen mounted under transparent modals is no longer needed —
native stack keeps the presenting screen mounted automatically when
`presentation: 'transparentModal'` is used.
- Removed the now-unused `colors` import (it was only used to set
`cardStyle.backgroundColor: colors.transparent`).
Test mock in `routes/index.test.tsx` updated to mock
`@react-navigation/native-stack` (`createNativeStackNavigator`) instead
of `@react-navigation/stack`.
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry:null
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<img width="364" height="752" alt="Aggregator Before"
src="https://github.com/user-attachments/assets/423ec7f4-66b2-48dd-bfc2-ab2769eaf260"
/>
### **After**
<img width="364" height="752" alt="Aggregator After"
src="https://github.com/user-attachments/assets/e545af4e-9b7d-4907-a343-6475c44ba0be"
/>
Android
https://github.com/user-attachments/assets/9df9f89d-3c4e-4e49-ac32-ba3896d0384f
## **Pre-merge author checklist**
<!--
Every checklist item must be consciously assessed before marking this PR
as
"Ready for review". A checked box means you deliberately considered that
responsibility, not that you literally performed every action listed.
Unchecked boxes are ambiguous: they are not an implicit "N/A" and they
are not
a silent "skip". See `docs/readme/ready-for-review.md` for the full
checklist
semantics.
-->
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
#### Performance checks (if applicable)
- [x] I've tested on Android
- Ideally on a mid-range device; emulator is acceptable
- [ ] I've tested with a power user scenario
- Use these [power-user
SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93)
to import wallets with many accounts and tokens
- [ ] I've instrumented key operations with Sentry traces for production
performance metrics
- See [`trace()`](/app/util/trace.ts) for usage and
[`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274)
for an example
For performance guidelines and tooling, see the [Performance
Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers).
## **Pre-merge reviewer checklist**
<!--
Reviewer checklist items follow the same semantics as the author
checklist: an
unchecked box is ambiguous, a checked box means the reviewer consciously
assessed that responsibility. See `docs/readme/ready-for-review.md`.
-->
- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] 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.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Navigation-only wiring in Ramp Aggregator routes; no business logic,
auth, or data handling changes.
>
> **Overview**
> **Aggregator Ramp routing** now uses `@react-navigation/native-stack`
instead of the JS stack, matching the newer Ramp navigation setup while
leaving screens and route names unchanged.
>
> **Quotes**, **Checkout**, and the nested **modals** stack pick up
shared `clearNativeStackNavigatorOptions` and
`transparentModalScreenOptions` instead of inline `cardStyle` /
`animationEnabled` / `detachPreviousScreen` workarounds;
`BUILD_QUOTE_HAS_STARTED` uses `animation: 'none'`. The route test mock
was updated to `createNativeStackNavigator`.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
371f725. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )