{
  "prNumber": 44797,
  "prTitle": "release: 13.42.0",
  "generatedAt": "2026-07-23T23:55:51.210Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 1684,
    "totalCommitsInRelease": 125,
    "releaseRiskScore": "61/100",
    "highRiskScenarios": 8,
    "mediumRiskScenarios": 5
  },
  "testScenarios": {
    "cherryPickScenarios": [],
    "initialScenarios": [
      {
        "area": "State Migrations (217–219): Core wallet state on upgrade",
        "riskLevel": "high",
        "testSteps": [
          "1. On 13.41.x, create 2 accounts, import 1 account via private key, add 1 custom network (EVM), connect 2 dapps (different sites) to different accounts, add 3 custom tokens and 1 NFT on two networks.",
          "2. Upgrade to 13.42.0 and unlock; do not clear storage.",
          "3. Verify accounts and labels persist, balances load, custom network is present and selected state is remembered.",
          "4. Confirm tokens/NFTs still appear on the correct networks with correct balances/metadata; portfolio total loads without errors.",
          "5. Open Connected Sites and verify per-account permissions are intact; attempt a tx/signature from a previously connected site to confirm it still works."
        ],
        "whyThisMatters": "Multiple new migrations can corrupt or reset critical user state (accounts, networks, assets, permissions) if misapplied."
      },
      {
        "area": "Permissions migration: Connected Sites per-account integrity",
        "riskLevel": "high",
        "testSteps": [
          "1. Before upgrade, connect Site A to Account 1 and Site B to Account 2; keep both tabs open.",
          "2. Upgrade to 13.42.0, unlock, and visit both tabs.",
          "3. Switch active account and verify the site shows the correct connected account (or unconnected warning) without silent re-permission.",
          "4. From Site A (should be connected to Account 1), request eth_accounts and send a simple personal_sign; confirm the right account is used.",
          "5. From Site B (Account 2), attempt a transaction; confirm the confirmation shows the correct origin and connected account."
        ],
        "whyThisMatters": "Migrations that touch permissions risk cross-account leakage or broken connections, directly impacting security and dapp usability."
      },
      {
        "area": "Token Management: Assets Controller v11 – auto-detect and manual add",
        "riskLevel": "high",
        "testSteps": [
          "1. On Ethereum Mainnet, ensure token auto-detection is enabled; hold a low-cap ERC-20 and a popular ERC-20; refresh and verify both appear with correct symbol/decimals.",
          "2. Manually add a custom ERC-20 by contract address; confirm correct symbol/decimals pre-fill and it appears without duplication.",
          "3. Switch to a secondary network (e.g., Polygon) with different holdings; verify network-scoped token lists and balances are correct.",
          "4. Remove/hide a token and re-enable detection; confirm it doesn’t reappear unless explicitly restored.",
          "5. Verify fiat conversion displays for detected and manually added tokens, and totals update after a balance change."
        ],
        "whyThisMatters": "A major Assets Controller bump can change detection, metadata, and fiat price handling—errors here misrepresent balances and can trigger user loss."
      },
      {
        "area": "NFTs: Detection, metadata, and visibility",
        "riskLevel": "high",
        "testSteps": [
          "1. Hold one ERC-721 and one ERC-1155 on Mainnet; enable NFT detection and open the NFTs tab.",
          "2. Verify tokens appear with correct images, names, and quantities; use Refresh Metadata and confirm assets update correctly.",
          "3. Hide an NFT and verify it no longer appears; unhide and confirm it re-displays correctly.",
          "4. Switch to another network with no NFTs; confirm no cross-network bleed-through.",
          "5. Open the NFT details screen and confirm actions (send, view on explorer) behave correctly."
        ],
        "whyThisMatters": "Changes in asset controllers can break NFT indexing or metadata resolution, leading to missing or incorrect collectibles."
      },
      {
        "area": "Security: Unconnected account alert during approvals/signatures",
        "riskLevel": "high",
        "testSteps": [
          "1. Connect Site A to Account 1; in the extension, switch the active account to Account 2.",
          "2. From Site A, initiate a transaction or a sign request; wait for the confirmation/approval screen.",
          "3. Verify the Unconnected Account alert appears and clearly indicates the mismatch.",
          "4. Switch to the connected account from the confirmation screen (if supported) or cancel and retry with the connected account; verify the alert no longer shows.",
          "5. Confirm the action succeeds only when using the connected account and is blocked/warned otherwise."
        ],
        "whyThisMatters": "Updated alert components and tests target this flow; regressions here can cause accidental approvals from unintended accounts."
      },
      {
        "area": "Message encryption flows: eth_getEncryptionPublicKey and eth_decrypt",
        "riskLevel": "high",
        "testSteps": [
          "1. From a test dapp, request eth_getEncryptionPublicKey for the active account; confirm a clear permission prompt, approve, and verify a valid key is returned.",
          "2. Use the returned key to encrypt a message; call eth_decrypt and approve the request; verify the original plaintext is returned.",
          "3. Switch to a different active account; repeat decrypt for the same ciphertext and verify the request fails gracefully.",
          "4. Reject the permission or decrypt request and confirm the dapp receives a well-formed error and no data leak.",
          "5. Revoke site permissions and retry to confirm re-prompting works as expected."
        ],
        "whyThisMatters": "Controller changes in decrypt/encryption flows directly affect sensitive cryptographic operations and data privacy."
      },
      {
        "area": "Network Management: dapp-triggered add/switch network (addEthereumChain/switch)",
        "riskLevel": "high",
        "testSteps": [
          "1. From a dapp, call wallet_addEthereumChain with a new chain (valid RPC, explorer, currency); verify a clear, safe approval screen and add the network.",
          "2. Confirm chain icon/name/currency render correctly and RPC is reachable (account balance loads).",
          "3. From the same dapp, call wallet_switchEthereumChain to the newly added network; verify the switch prompt and that the active network changes.",
          "4. Attempt an invalid addEthereumChain (malformed chainId or missing RPC); verify the error UI and no partial network entry is created.",
          "5. Remove the added network from settings and verify it disappears and can be re-added."
        ],
        "whyThisMatters": "Controller patches around network enablement can break or weaken validation, causing failed switches or unsafe network additions."
      },
      {
        "area": "Transaction submission: RPC/gas errors surfaced via API Error Handler",
        "riskLevel": "high",
        "testSteps": [
          "1. Initiate a send on Mainnet to a valid address; temporarily use a failing RPC endpoint or force a gas estimation error.",
          "2. On the confirmation screen, verify descriptive inline/banner error messaging appears (not a silent spinner or generic error).",
          "3. Edit gas settings to a safe preset or custom; verify errors clear when valid and the action can proceed.",
          "4. Submit the tx and confirm failure surfaces a clear reason with a retry path; cancel behaves cleanly without leaving stale UI.",
          "5. Restore a healthy RPC and confirm normal flow succeeds."
        ],
        "whyThisMatters": "Changes to API error handling can leave users stuck during critical send flows or mask important failure details."
      },
      {
        "area": "Signature requests: personal_sign and typed data (EIP-712)",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a dapp, trigger a personal_sign request; verify the confirmation shows origin, account, readable message, and correct warnings.",
          "2. Trigger an EIP-712 signTypedData_v4; verify domain, message, and chain are rendered correctly.",
          "3. Reject then reattempt and approve; confirm results are returned accurately to the dapp.",
          "4. Switch accounts between requests and confirm the confirmation matches the active/connected account information."
        ],
        "whyThisMatters": "Large UI and controller diffs risk regressing signature rendering or account-context handling."
      },
      {
        "area": "Alerts system: stacking, dismissal, and confirm flows",
        "riskLevel": "medium",
        "testSteps": [
          "1. Trigger multiple alert types in quick succession (e.g., insufficient funds, unconnected account, network mismatch).",
          "2. Verify alerts stack/order properly in the multiple-alert modal and inline contexts.",
          "3. Dismiss one alert and confirm others remain and their actions still function.",
          "4. Use a confirm alert modal (e.g., reset account nonce or clear activity); verify confirm/cancel paths behave correctly and state updates accordingly."
        ],
        "whyThisMatters": "Broad changes to alert components and utilities can cause missing alerts, incorrect stacking, or action misfires."
      },
      {
        "area": "Bridge: quote retrieval and handoff",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open the Bridge entry in the extension (if available) and search quotes for a supported asset from Chain A to Chain B.",
          "2. Verify quotes load with correct routes and fees; change amount and observe quote refresh correctness.",
          "3. Select a quote and proceed; confirm handoff to the appropriate provider or external UI works (no blank screens).",
          "4. Trigger an error case (unsupported asset or unreachable API) and verify a clear error is shown with recovery guidance."
        ],
        "whyThisMatters": "Bridge controller patching can break quote fetching or routing, stranding users mid-flow."
      },
      {
        "area": "Portfolio/Fiat display: token price and totals",
        "riskLevel": "medium",
        "testSteps": [
          "1. With several tokens on one network, open the Assets tab and confirm each token shows fiat values and a correct portfolio total.",
          "2. Switch primary currency (e.g., USD to EUR) and verify all conversions update consistently.",
          "3. Switch networks and verify totals are network-scoped (where applicable) and do not double-count.",
          "4. Temporarily disconnect from the internet and reopen the Assets tab; verify graceful degradation (cached values or clear messaging)."
        ],
        "whyThisMatters": "Asset controller changes can affect pricing sources and conversion logic, risking misleading balances."
      },
      {
        "area": "Network switching within the extension (picker and per-account)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Use the network picker to switch between Mainnet and a custom network; verify the active network indicator updates immediately.",
          "2. Change the active account and switch networks again; confirm state stays consistent (no token list leakage across networks).",
          "3. Return to a previously used network and verify last-selected token/NFT tab persists appropriately."
        ],
        "whyThisMatters": "Controller and UI refactors can subtly break network-context state, confusing users and dapps."
      }
    ]
  }
}