{
  "prNumber": 44797,
  "prTitle": "release: 13.42.0",
  "generatedAt": "2026-07-23T22:39:17.116Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 1681,
    "totalCommitsInRelease": 124,
    "releaseRiskScore": "59/100",
    "highRiskScenarios": 7,
    "mediumRiskScenarios": 7
  },
  "testScenarios": {
    "cherryPickScenarios": [],
    "initialScenarios": [
      {
        "area": "State Migrations – Core data integrity (accounts, networks, tokens/NFTs)",
        "riskLevel": "high",
        "testSteps": [
          "1. Start from a pre-13.42.0 profile (e.g., 13.38–13.41) with: 3 accounts (standard, imported PK, hardware), 2 custom networks (custom RPC + L2), several custom ERC-20s and NFTs added; lock wallet.",
          "2. Upgrade to 13.42.0 and open the extension to trigger migrations; then unlock.",
          "3. Verify all accounts exist with correct labels/order; hardware account still recognized; balances load.",
          "4. Confirm custom networks still exist, current network selection persists, and custom RPC URLs/chain IDs are unchanged.",
          "5. Check tokens/NFTs per-network are preserved with no duplicates; hidden assets remain hidden."
        ],
        "whyThisMatters": "Migrations 217–219 were added; any schema or state transformation can cause data loss or corrupted lists affecting core wallet functionality."
      },
      {
        "area": "State Migrations – Connected sites and permissions",
        "riskLevel": "high",
        "testSteps": [
          "1. Pre-upgrade: connect Site A to Account 1 and Site B to Account 2; ensure both sites can request accounts and sign.",
          "2. Upgrade to 13.42.0; open both sites post-upgrade.",
          "3. Verify auto-connect uses the same mapped account per site and that switching to an unconnected account shows an appropriate alert.",
          "4. Trigger eth_requestAccounts from each site and confirm correct permission prompts/auto-connect behavior.",
          "5. Remove a site connection in Settings and confirm it does not auto-connect after reload."
        ],
        "whyThisMatters": "Permissions/connection mappings may be reshaped by migrations and are critical for dapp connectivity and the unconnected-account alert logic."
      },
      {
        "area": "State Migrations – Settings and feature flags",
        "riskLevel": "high",
        "testSteps": [
          "1. Pre-upgrade: enable test networks, toggle phishing protection, and opt-in to MetaMetrics.",
          "2. Upgrade to 13.42.0 and open Settings.",
          "3. Verify toggles persist; test network list visibility matches the toggle.",
          "4. Navigate to a known phishing test URL to confirm the blocklist behavior matches the setting.",
          "5. Confirm analytics toggle state persists and events are only sent when opted in."
        ],
        "whyThisMatters": "Settings schema changes can silently reset critical privacy/security preferences or analytics consent."
      },
      {
        "area": "Token Management – Assets Controller v11: token discovery and watchAsset",
        "riskLevel": "high",
        "testSteps": [
          "1. On Mainnet, use Import Tokens search to detect and add a popular ERC‑20; verify balance/fiat value accuracy; then hide it.",
          "2. Use wallet_watchAsset from a dapp to add a custom ERC‑20 with non‑standard decimals (e.g., 8); confirm correct formatting and persistence.",
          "3. Switch networks and ensure token lists are scoped per network with no leakage of Mainnet tokens.",
          "4. Change fiat currency display and verify token fiat values update accordingly."
        ],
        "whyThisMatters": "A major Assets Controller bump commonly affects token metadata, decimals, and persistence; regressions break balances and swaps."
      },
      {
        "area": "NFT Management – Assets Controller v11: detection, metadata, and transfers",
        "riskLevel": "high",
        "testSteps": [
          "1. Add one ERC‑721 and one ERC‑1155 NFT to the active account.",
          "2. Open the NFTs tab and verify images/metadata load and group correctly.",
          "3. Hide an NFT, then unhide it from Hidden NFTs; confirm state persists across reload.",
          "4. Send an ERC‑721 to another address and confirm it is removed post-confirmation."
        ],
        "whyThisMatters": "NFT indexing/metadata often changes across assets controller updates; broken metadata or transfer handling impacts key user flows."
      },
      {
        "area": "Bridge – Quote, approvals, switching, and status tracking",
        "riskLevel": "high",
        "testSteps": [
          "1. Open Bridge, select ETH from Ethereum Mainnet to Arbitrum (or other L2) and request a quote.",
          "2. Approve (if required) and submit the bridge transaction; accept any chain-switch prompts.",
          "3. Track status until completion and verify final destination balance reflects the bridged amount.",
          "4. Reject a subsequent bridge attempt to verify clear error handling and recoverability (retry/close)."
        ],
        "whyThisMatters": "Bridge controller changes can disrupt quoting, approvals, network switching, and status polling, leading to failed or stuck transfers."
      },
      {
        "area": "Network Management – Dapp-driven add/switch chain",
        "riskLevel": "high",
        "testSteps": [
          "1. From a dapp, call wallet_addEthereumChain to add a new test chain; verify the approval details and successful addition.",
          "2. From the same dapp, call wallet_switchEthereumChain and confirm the permission prompt, then the active network changes.",
          "3. Attempt to switch to a chain that isn't added and verify the correct error and no stuck prompt.",
          "4. Toggle 'Show test networks' off and ensure hidden networks do not appear in UI suggestions."
        ],
        "whyThisMatters": "Network enablement controller changes risk breaking dapp workflows that add/switch chains, impacting many ecosystem integrations."
      },
      {
        "area": "Message Encryption – eth_getEncryptionPublicKey and eth_decrypt",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a test dapp, request eth_getEncryptionPublicKey for the active account and approve.",
          "2. Have the dapp encrypt a message and request eth_decrypt; approve and verify the plaintext matches.",
          "3. Switch to an unconnected account, repeat request, and confirm the unconnected-account alert appears; connect and retry successfully.",
          "4. Cancel a decrypt request and confirm the dapp receives a clear error."
        ],
        "whyThisMatters": "Small controller changes here can silently break EIP‑1024 flows used by secure messaging features."
      },
      {
        "area": "Alert System – Unconnected account alert",
        "riskLevel": "medium",
        "testSteps": [
          "1. Connect Site A to Account 1 only; then switch the active account in the extension to Account 2.",
          "2. On Site A, initiate a signature or transaction; verify the unconnected account alert appears with clear actions.",
          "3. Use the alert’s CTA to switch to Account 1 and complete the action.",
          "4. Verify no alert appears when Account 1 is active for Site A."
        ],
        "whyThisMatters": "Alert-system code changed; incorrect alerts can block signing or confuse users about which account is connected."
      },
      {
        "area": "Alert System – Multiple alerts and confirmation modals",
        "riskLevel": "medium",
        "testSteps": [
          "1. Create overlapping prompts (e.g., a pending signature, a network switch request, and a general warning).",
          "2. Verify the multiple-alert modal shows all alerts with sensible ordering and distinct actions.",
          "3. Dismiss one alert and confirm others remain actionable and not lost.",
          "4. In a confirm-alert modal, verify both Cancel and Confirm behave correctly without leaving the UI in a stuck state."
        ],
        "whyThisMatters": "Refactors to alert components can cause modal stacking and lifecycle issues that hide critical prompts."
      },
      {
        "area": "API Error Handling – RPC/network failures",
        "riskLevel": "medium",
        "testSteps": [
          "1. Set the current network RPC URL to an invalid endpoint; open the portfolio/tokens view.",
          "2. Verify a clear inline error with a Retry option is shown instead of an infinite spinner.",
          "3. Restore a valid RPC and click Retry; confirm the UI recovers and data loads.",
          "4. Against a rate-limited RPC, trigger a 429 and verify a friendly message and no lock-up."
        ],
        "whyThisMatters": "api-error-handler changes must surface actionable errors; failures here strand users with spinners and no recovery path."
      },
      {
        "area": "Swaps – Quote, allowance, slippage, and execution",
        "riskLevel": "medium",
        "testSteps": [
          "1. On Mainnet, swap a small amount of a token requiring approval to another token; confirm a single allowance approval then swap execution.",
          "2. Verify min-received, slippage warnings, and fiat values render correctly before and after the swap.",
          "3. Repeat a swap on another network (e.g., Polygon) and ensure correct token metadata/decimals and per-network asset lists.",
          "4. Validate post-swap balances and activity items are correct."
        ],
        "whyThisMatters": "Assets controller changes affect token metadata and allowances used in swaps; regressions can misprice or fail swaps."
      },
      {
        "area": "Permissions Management – Connected sites UI",
        "riskLevel": "medium",
        "testSteps": [
          "1. In Settings > Security & Privacy > Connected sites, remove an existing site.",
          "2. Reload that site and verify it does not auto-connect and that eth_requestAccounts prompts for permission.",
          "3. Reconnect the site selecting a different account and verify it appears correctly in the list and works in-page.",
          "4. Lock/unlock the wallet and confirm the mapping remains intact."
        ],
        "whyThisMatters": "Migrations and alert changes rely on accurate permissions state; UI regressions can misrepresent connections."
      },
      {
        "area": "Performance/UX – Popup and assets rendering at scale",
        "riskLevel": "medium",
        "testSteps": [
          "1. Use a profile with 200+ tokens and 50+ NFTs across 4 networks.",
          "2. Measure time to open the popup and render the Assets tab; scroll through long lists.",
          "3. Switch networks repeatedly and verify no freezes, missing thumbnails, or extreme jank.",
          "4. Open Activity and NFTs tabs and confirm smooth navigation."
        ],
        "whyThisMatters": "Large-scale UI refactors can degrade performance and responsiveness, impacting everyday use."
      }
    ]
  }
}