{
  "prNumber": 46848,
  "prTitle": "release: 13.52.0",
  "generatedAt": "2026-10-13T17:59:31.868Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 712,
    "totalCommitsInRelease": 119,
    "releaseRiskScore": "59/100",
    "highRiskScenarios": 7,
    "mediumRiskScenarios": 7
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Perpetuals (Perps) - Trading and Collateral",
        "riskLevel": "high",
        "testSteps": [
          "1. Open the Perps feature, connect an EVM account, and deposit collateral; confirm any required transactions.",
          "2. Place a market order and verify confirmations complete with accurate position and PnL updates.",
          "3. Close/cancel an order and ensure balances and positions reflect the change immediately.",
          "4. Reload the extension and confirm positions, margins, and recent activity persist and display correctly.",
          "5. Attempt a second trade to ensure no residual state or errors from the first session."
        ],
        "whyThisMatters": "Cherry-pick #46999 updates the perps controller to 20.0.0; controller upgrades can break order placement, margin accounting, and position persistence."
      },
      {
        "area": "Money Deposits - Stale Quote Blocking",
        "riskLevel": "high",
        "testSteps": [
          "1. Start a Money deposit flow and allow the quote to expire (or wait until it becomes stale on the confirmation screen).",
          "2. Verify the Confirm/Deposit action is disabled and a clear warning indicates the quote is stale.",
          "3. Refresh the quote from within the flow and confirm the action becomes enabled only after a fresh quote is retrieved.",
          "4. Complete the deposit successfully and ensure the activity/history reflects the correct amount and state."
        ],
        "whyThisMatters": "Cherry-pick #47028 fixes blocking deposits when the Max quote is stale; without this, users could submit invalid or mispriced deposits."
      },
      {
        "area": "Arc USDC - Asset Details and Balance Display",
        "riskLevel": "medium",
        "testSteps": [
          "1. Switch to the Arc network and ensure the account holds USDC.",
          "2. Open the asset list and select USDC; verify the symbol, icon, decimals, and fiat valuation are accurate and sourced from the native asset metadata.",
          "3. Ensure there is no duplicate Arc USDC entry and that totals include USDC exactly once.",
          "4. Open the Send screen for USDC and confirm the balance and token details are correct."
        ],
        "whyThisMatters": "Cherry-pick #46933 fixes Arc USDC details sourced from the native asset; incorrect metadata leads to wrong balances, icons, and potential double counting."
      },
      {
        "area": "Stellar Snap - Send Flow Loader",
        "riskLevel": "medium",
        "testSteps": [
          "1. Enable and set up the stellar-wallet-snap; open the Send flow selecting a Stellar account/asset.",
          "2. Enter a valid Stellar recipient and amount; verify a loading indicator appears during address/fee resolution.",
          "3. Confirm the loader dismisses when data is ready, the send button enables, and the flow completes without blank or frozen screens.",
          "4. Reopen Send and repeat to ensure no regression on subsequent attempts."
        ],
        "whyThisMatters": "Cherry-pick #46930 fixes a missing loader in Stellar send; without it, users may see frozen or confusing states during fee/address resolution."
      },
      {
        "area": "Money Transactions - Missing Transaction ID Handling",
        "riskLevel": "medium",
        "testSteps": [
          "1. Complete a Money deposit or withdrawal in an environment where the provider may omit a transaction id (or simulate via staging).",
          "2. Open the Activity details for the Money transaction and verify it shows a safe default (0x0) without crashing.",
          "3. Ensure explorer links are handled gracefully (disabled or generic) and the UI remains responsive.",
          "4. Perform another Money transaction with a normal tx id to confirm standard behavior is unaffected."
        ],
        "whyThisMatters": "Cherry-pick #47054 fixes defaulting Money transaction ids to 0x0; missing ids previously could crash views or break history rendering."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations - Full Profile Upgrade",
        "riskLevel": "high",
        "testSteps": [
          "1. Start with an older MetaMask version (e.g., v10–v11) profile that has: multiple accounts (including an imported private key), a hardware wallet account, custom networks, several watch tokens/NFTs, and at least one pending transaction.",
          "2. Upgrade the same profile to 13.52.0 and unlock; observe any migration modal and allow it to complete.",
          "3. Verify all accounts are present, correct default network is restored, custom networks are intact, and watch tokens/NFTs are still listed with correct symbols/icons.",
          "4. Check total/fiat balances and per-token balances for accuracy, and ensure there are no duplicate or missing assets.",
          "5. Open Activity and ensure previous pending/confirmed/canceled transactions are preserved with correct statuses."
        ],
        "whyThisMatters": "Large changes across many migration scripts (including new helpers and new migrations 229–230) can corrupt user data or lose accounts/tokens during upgrade."
      },
      {
        "area": "State Migrations - Pending/Failed Transaction Handling",
        "riskLevel": "high",
        "testSteps": [
          "1. On an older version, create a stuck/pending transaction (e.g., low gas on a test network) and close the extension.",
          "2. Upgrade to 13.52.0 and unlock, letting migration complete.",
          "3. Verify pending/stuck transactions are reclassified correctly (e.g., failed when appropriate) per the new fail-tx migration.",
          "4. Ensure UI remains responsive: Activity list loads, speed-up/cancel actions only appear when valid, and no infinite spinners.",
          "5. Attempt to submit a new transaction post-upgrade to ensure no residual migration state blocks normal operations."
        ],
        "whyThisMatters": "New fail-tx migration logic can mislabel or lock transactions, breaking core send/confirm flows after upgrade."
      },
      {
        "area": "Migration Modal Resilience and Recovery",
        "riskLevel": "high",
        "testSteps": [
          "1. Trigger an upgrade to 13.52.0 with a profile requiring multiple migrations and wait at the migration modal.",
          "2. Force close/reload the extension mid-migration (e.g., browser restart).",
          "3. Reopen MetaMask, unlock, and verify the migration resumes or presents a safe retry path without data loss.",
          "4. Confirm final state shows all accounts/networks/assets intact and the app is functional.",
          "5. Review for any unexpected secondary migration prompts or errors."
        ],
        "whyThisMatters": "A crash or reload during migration can corrupt state; new migration framework changes must safely resume or recover."
      },
      {
        "area": "Analytics/Metametrics Consent (Onboarding and Settings)",
        "riskLevel": "high",
        "testSteps": [
          "1. Perform fresh onboarding to the metametrics consent screen; toggle consent ON and complete onboarding.",
          "2. In Settings > Security & Privacy, toggle analytics/consent OFF.",
          "3. Perform common actions (open portfolio, open send, switch networks) and verify no consent prompts reappear and navigation is not blocked.",
          "4. Lock and unlock the wallet; verify the consent state persists and the app remains stable.",
          "5. Re-enable consent in Settings and ensure typical flows remain unaffected."
        ],
        "whyThisMatters": "Major refactor around analytics/metametrics (controller and UI changes) can cause consent state regressions that block onboarding or break navigation."
      },
      {
        "area": "Snaps Permissions Prompts and Enforcement",
        "riskLevel": "high",
        "testSteps": [
          "1. Install a Snap that requests multiple permissions (e.g., network access, notifications) and review the permission dialog text and scopes.",
          "2. Approve installation, then from the Snap trigger a request for account access and choose Deny; verify no account data is exposed and the Snap handles the error gracefully.",
          "3. In Settings > Snaps and Connected Sites, verify shown permissions match expected scopes; revoke a permission.",
          "4. Trigger the same Snap action again; verify a fresh permission prompt appears and the scopes are limited to the requested capability.",
          "5. Approve and confirm subsequent Snap actions function as expected without over-granting access."
        ],
        "whyThisMatters": "Changes to snaps permission specifications are security-sensitive; incorrect prompts or enforcement can leak account data or over-grant capabilities."
      },
      {
        "area": "Assets Migration and De-duplication",
        "riskLevel": "medium",
        "testSteps": [
          "1. On an older version, add watch tokens with overlapping metadata or duplicates across multiple custom networks.",
          "2. Upgrade to 13.52.0 and unlock; let migrations complete.",
          "3. Verify the asset list shows one entry per token per network with correct symbols, icons, and decimals.",
          "4. Confirm fiat valuation and totals are correct and there are no ghost/duplicated assets.",
          "5. Remove and re-add a watch token to confirm stable behavior post-migration."
        ],
        "whyThisMatters": "Selector and migration updates for assets can surface duplicates or lose tokens, causing incorrect balances or confusion."
      },
      {
        "area": "Asset List Network Filter and Labeling",
        "riskLevel": "medium",
        "testSteps": [
          "1. Ensure balances on at least two networks (e.g., Mainnet and Polygon) and open the asset list.",
          "2. Open the Network Filter modal and select only one network; apply.",
          "3. Verify the asset list and total balance reflect only the selected network, and the filter button label matches the selection.",
          "4. Clear the filter and confirm the label resets and totals recompute correctly.",
          "5. Toggle between networks quickly to ensure no stale UI or incorrect counts."
        ],
        "whyThisMatters": "Updated filter components and hooks can mislabel filters or show wrong totals, misleading users about their balances."
      },
      {
        "area": "Account Group Balance Accuracy",
        "riskLevel": "medium",
        "testSteps": [
          "1. With multiple accounts holding tokens across networks, open the home/portfolio view and note the account group total.",
          "2. Apply a network filter to a subset of networks and verify the group total matches the sum of visible assets.",
          "3. Toggle primary currency (fiat/native) and ensure totals convert correctly without rounding drift.",
          "4. Add/remove a small-balance token and confirm totals update immediately without stale values.",
          "5. Reload the extension and verify displayed totals persist and remain accurate."
        ],
        "whyThisMatters": "Changes to balance aggregation components can yield incorrect totals, directly affecting user trust in displayed balances."
      },
      {
        "area": "Rewards Panel and Claim Flow",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open the Rewards or Portfolio section and verify rewards status/banners render without error.",
          "2. If eligible, start a claim; confirm the transaction and wait for confirmation.",
          "3. Verify the reward balance and history update correctly after claim.",
          "4. If not eligible, ensure the UI shows the correct gated state (disabled or explanatory text) with no broken actions.",
          "5. Navigate away and back to confirm state persistence."
        ],
        "whyThisMatters": "Rewards-controller changes can break claim flows or show incorrect eligibility, affecting user funds and trust."
      }
    ]
  }
}