{
  "prNumber": 44797,
  "prTitle": "release: 13.42.0",
  "generatedAt": "2026-07-29T19:48:24.382Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 1281,
    "totalCommitsInRelease": 139,
    "releaseRiskScore": "45/100",
    "highRiskScenarios": 4,
    "mediumRiskScenarios": 4
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Security: Deep-link Interstitial Protection",
        "riskLevel": "high",
        "testSteps": [
          "1. Open a MetaMask deep link that triggers a sensitive action (e.g., add network or connect to a site); verify an interstitial screen appears showing origin, action summary, and Allow/Deny.",
          "2. Attempt to bypass via repeated deep link triggers or background tab; confirm the action is blocked until the user explicitly Allows.",
          "3. Choose Deny and confirm no connection/network is added and the extension returns safely to home.",
          "4. Choose Allow once and confirm the action proceeds exactly once; triggering the deep link again shows the interstitial again."
        ],
        "whyThisMatters": "Cherry-pick 44830 restores the deep-link interstitial, preventing silent or drive-by approvals; a regression here is a direct security risk."
      },
      {
        "area": "Cross-chain Asset Deep Links with Missing Account",
        "riskLevel": "medium",
        "testSteps": [
          "1. With a wallet that has no account on the target chain, open a deep link to view an asset on another EVM chain (e.g., Polygon); verify the extension shows a safe prompt to switch/create/select an account or network instead of crashing.",
          "2. Follow the recommended action (e.g., create/select an account or switch network) and confirm the target asset view loads correctly with accurate balances.",
          "3. Cancel the prompt and verify the extension exits gracefully to a safe screen without partial state or incorrect balances.",
          "4. Repeat with multiple accounts (including imported) to confirm correct account mapping and no cross-account leakage."
        ],
        "whyThisMatters": "Cherry-pick 44913 fixes handling of missing accounts for cross-chain deep links; without it, users could see crashes, wrong balances, or unsafe default selections."
      }
    ],
    "initialScenarios": [
      {
        "area": "Token Management (Assets Controller v11 upgrade)",
        "riskLevel": "high",
        "testSteps": [
          "1. Upgrade an existing profile (with several custom ERC-20s and NFTs across Mainnet and at least one L2) to 13.42.0 and unlock.",
          "2. On Mainnet, verify token balances load and refresh; switch to another network (e.g., Polygon) and confirm tokens/NFTs are not cross-contaminated.",
          "3. Add a custom ERC-20 by contract address; verify correct name/symbol/decimals and that balance populates; then remove it and confirm it disappears from the asset list and portfolio.",
          "4. Import or detect an NFT; confirm image/metadata load correctly and that switching networks hides it appropriately.",
          "5. Toggle token detection on/off in Settings and verify auto-detected tokens appear/disappear without affecting manually added assets."
        ],
        "whyThisMatters": "Core asset management logic changed; regressions can cause missing/wrong balances, asset duplication, or loss of user-added tokens/NFTs."
      },
      {
        "area": "State Migrations (Migration 219)",
        "riskLevel": "high",
        "testSteps": [
          "1. Prepare a pre-upgrade profile on the previous stable (e.g., 13.41.x) with: 2+ accounts, a custom RPC network, connected sites, fiat display set, and existing tx history (including at least one pending tx).",
          "2. Upgrade to 13.42.0 and unlock; verify the wallet loads without migration errors or loops.",
          "3. Confirm accounts, connected sites, custom network(s), currency/primary currency settings, and privacy settings are preserved.",
          "4. Verify transaction history is intact and pending txs remain actionable; send a small new tx to ensure no approval regressions.",
          "5. Lock, close the browser, reopen, and unlock; verify no second migration runs and state remains consistent."
        ],
        "whyThisMatters": "Migrations can corrupt or reset state, breaking access to funds, networks, or history."
      },
      {
        "area": "Message Encryption/Decryption (eth_getEncryptionPublicKey / eth_decrypt)",
        "riskLevel": "high",
        "testSteps": [
          "1. Connect a test dapp that requests eth_getEncryptionPublicKey; approve and confirm the prompt shows the correct origin and selected account.",
          "2. Have the dapp encrypt a message with the returned key, then request eth_decrypt; approve and confirm the decrypted message matches the original.",
          "3. Repeat eth_decrypt and choose Reject; verify the dapp receives userRejectedRequest and no decryption occurs.",
          "4. Switch to a different account and retry both methods; confirm prompts reflect the active account and no keys/decryptions are exposed for non-selected accounts."
        ],
        "whyThisMatters": "Cryptographic request flows must enforce correct permissions and account scoping; regressions risk data leakage or broken dapp integrations."
      },
      {
        "area": "Metrics Opt-in/Out and Event Gating (Metametrics Controller)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Fresh install and complete onboarding; when prompted for metrics, choose No thanks.",
          "2. Perform common actions (open Activity, switch networks, add/remove a token, initiate and cancel a tx) and confirm no analytics payloads are sent (inspect background logs or proxy).",
          "3. Enable metrics in Settings > Security & privacy; repeat actions and confirm events are sent with anonymized properties (no raw account addresses).",
          "4. Opt-out again, reload the extension, and confirm the preference persists and events stop."
        ],
        "whyThisMatters": "Changes to analytics gating can silently enable data collection without consent or suppress essential telemetry."
      },
      {
        "area": "Alerts System (confirm/multiple/inline alerts)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Trigger a confirm alert (e.g., remove an account or reset account) and verify modal content, focus, Escape/Enter key behavior, and that Confirm/Cancel perform expected actions.",
          "2. Trigger multiple alerts (e.g., network mismatch from a dapp plus a gas estimate warning) and verify multiple-alert handling stacks correctly; dismissing one leaves the other intact.",
          "3. Trigger an inline alert (e.g., initiate a tx on the wrong network) and verify correct severity style/contrast in light and dark themes; dismiss and confirm it does not reappear incorrectly."
        ],
        "whyThisMatters": "Alert regressions can hide critical warnings or block key flows, leading to user mistakes or abandoned actions."
      },
      {
        "area": "RPC/API Error Handling (User-facing provider and network errors)",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a connected dapp, send a tx designed to fail (e.g., insufficient funds); verify the error shows as a clear, non-blocking message with actionable guidance.",
          "2. Temporarily set an invalid RPC URL for a custom network and perform an action; verify a clear connectivity error is shown and the UI recovers once the URL is fixed.",
          "3. Initiate a signature or tx approval and press Reject; confirm the dapp receives an EIP-1193 userRejectedRequest and the UI shows an accurate, non-generic message."
        ],
        "whyThisMatters": "Error handler changes affect users’ ability to understand and recover from failures, preventing stuck states."
      }
    ]
  }
}