{
  "prNumber": 43473,
  "prTitle": "release: 13.36.0",
  "generatedAt": "2026-06-13T05:54:33.582Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 1587,
    "totalCommitsInRelease": 110,
    "releaseRiskScore": "62/100",
    "highRiskScenarios": 8,
    "mediumRiskScenarios": 6
  },
  "testScenarios": {
    "cherryPickScenarios": [],
    "initialScenarios": [
      {
        "area": "State Migrations (migrations 212/213) - Upgrade Path",
        "riskLevel": "high",
        "testSteps": [
          "1. Install 13.35.x, create a new wallet, add: one imported private key account, rename accounts, set primary currency to fiat, and opt OUT of MetaMetrics.",
          "2. On Ethereum and Polygon, enable token detection, add at least one custom token on each, and ensure at least one ERC-721 NFT is visible (use test collectibles if needed).",
          "3. Upgrade to 13.36.0, unlock wallet, and verify account order, labels, and preferences (currency, MetaMetrics opt-out) are preserved.",
          "4. Verify tokens/NFTs are present exactly once per network, activity history is intact, and there are no migration error banners or crashes."
        ],
        "whyThisMatters": "Two new state migrations can corrupt or drop user data if misapplied; this verifies correctness across core assets, accounts, and preferences."
      },
      {
        "area": "State Migrations (older profile edge) - Long-jump Upgrade",
        "riskLevel": "high",
        "testSteps": [
          "1. Start from a significantly older profile (e.g., 13.30.x) with multiple accounts, custom tokens on multiple networks, and NFTs present.",
          "2. Upgrade directly to 13.36.0.",
          "3. Confirm all accounts, labels, and connected sites persist; verify assets and NFTs render correctly without duplication.",
          "4. Open Settings > Advanced and ensure feature flags and detection toggles retain previous values."
        ],
        "whyThisMatters": "Users may upgrade across several versions; chained migrations must compose correctly or risk data loss/duplication."
      },
      {
        "area": "Transaction Sending (EIP-1559) - Transaction Pay Controller",
        "riskLevel": "high",
        "testSteps": [
          "1. On an EIP-1559 network (e.g., Ethereum mainnet or Sepolia), send a native token transfer and review the fee UI (suggested, market, advanced).",
          "2. Edit gas settings (max fee and priority fee), submit the transaction, then perform a Speed Up and Cancel on a pending tx.",
          "3. Validate final fees charged and status updates in Activity; ensure fee changes persist and match confirmations.",
          "4. Confirm no stuck pending states or incorrect fee estimates appear after adjustments."
        ],
        "whyThisMatters": "Transaction Pay controller changes can affect fee estimation and transaction lifecycle, risking failed or overpriced transactions."
      },
      {
        "area": "Dapp-initiated Transactions & Suggested Gas",
        "riskLevel": "high",
        "testSteps": [
          "1. From a connected dapp, initiate a token approval (ERC-20 approve) and a token transfer with dapp-suggested gas values.",
          "2. In the confirmation UI, compare suggested vs. MetaMask estimates; modify fees and submit.",
          "3. Confirm the transactions complete and the final fees charged align with the edited values.",
          "4. Verify no UI freezes or mis-rendered fee sections during dapp confirmations."
        ],
        "whyThisMatters": "Ensures controller and UI correctly handle dapp-suggested fees, a common real-world pattern that can break with fee controller changes."
      },
      {
        "area": "Token Detection & Portfolio (Assets Controller 8.3.2)",
        "riskLevel": "high",
        "testSteps": [
          "1. On Ethereum and Polygon, enable token detection and verify common tokens auto-appear without duplicates.",
          "2. Disable token detection and confirm no new tokens auto-appear while existing tokens remain.",
          "3. Switch between networks and verify token lists are network-scoped and consistent.",
          "4. Validate fiat pricing appears for known tokens and remains stable across refreshes."
        ],
        "whyThisMatters": "Assets Controller upgrade can regress auto-detection, duplication handling, and pricing—core to asset visibility and trust."
      },
      {
        "area": "Add Custom Token (Decimals & Duplicate Handling)",
        "riskLevel": "high",
        "testSteps": [
          "1. Add a custom ERC-20 by contract address on Network A and verify symbol/decimals are correct.",
          "2. Attempt to re-add the same token; confirm the UI prevents duplication.",
          "3. Switch to Network B and add the same contract (if valid on B) or a different token; ensure network scoping works.",
          "4. Remove then re-add the token and verify balances and history remain unaffected."
        ],
        "whyThisMatters": "Custom tokens are frequently added; incorrect decimals or duplicate handling can cause incorrect balances and user confusion."
      },
      {
        "area": "Swaps Flow (Quotes, Fees, and Confirmation)",
        "riskLevel": "high",
        "testSteps": [
          "1. Initiate a token-to-token swap on a supported network and review the quotes, slippage, and fee breakdown.",
          "2. Edit slippage and confirm the updated quotes recalculate correctly.",
          "3. Submit the swap and confirm the final status and fees match the confirmation.",
          "4. Check Activity and token balances post-swap for consistency."
        ],
        "whyThisMatters": "Fee and transaction handling impacts swaps; regressions may cause failed swaps, incorrect fees, or wrong balances."
      },
      {
        "area": "Alert Modal (System-wide) - Network Switch & Removal",
        "riskLevel": "high",
        "testSteps": [
          "1. From a dapp, trigger wallet_switchEthereumChain and wallet_addEthereumChain requests.",
          "2. In the alert modal, test Cancel and Approve paths; verify network switches/creation reflect immediately in the network selector.",
          "3. Remove a custom network from Settings and confirm the confirmation modal behaves correctly (focus trap, ESC/overlay click handling).",
          "4. Confirm no invisible modals block interaction after dismissal."
        ],
        "whyThisMatters": "Alert modal changes can break global confirmation flows, blocking critical actions like network switching."
      },
      {
        "area": "NFT Detection & Display (Avatars/Media Fallbacks)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Ensure at least one ERC-721 NFT is detected; check the NFT tab for correct image/media rendering.",
          "2. For an NFT with a broken or slow media URL, verify graceful fallback (initials/icon) without layout shifts.",
          "3. Switch accounts and networks to confirm NFT lists update correctly without leakage across accounts.",
          "4. Open the Activity tab and ensure NFT-related events show the expected avatar/icons."
        ],
        "whyThisMatters": "The Assets controller and activity avatar component changes affect NFT visuals; broken media handling degrades UX."
      },
      {
        "area": "Permissions Connect Flow (Alert Modal)",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a new dapp, request connection; verify the connect modal lists accounts and permissions clearly.",
          "2. Approve connection with one account, then reconnect and approve a second account.",
          "3. Test Deny and ensure the dapp remains disconnected; no phantom connections appear.",
          "4. Verify keyboard navigation and focus remain trapped within the modal until dismissal."
        ],
        "whyThisMatters": "Connection approvals rely on the alert modal; regressions can either over-grant or fail to grant permissions."
      },
      {
        "area": "MetaMetrics Opt-in/Out (New Platform Adapter)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Run first-time onboarding and verify the MetaMetrics opt-in prompt appears; choose Opt-out.",
          "2. Perform a basic action (send or account switch) and confirm no MetaMetrics events are sent (inspect background/network logs if available).",
          "3. Toggle MetaMetrics ON in Settings > Security & Privacy; perform the same action and verify events are now sent.",
          "4. Restart the extension and confirm the opt-in preference persists."
        ],
        "whyThisMatters": "New analytics platform adapter can alter event dispatch and privacy guarantees; incorrect handling risks privacy regressions."
      },
      {
        "area": "MetaMetrics Data Deletion Request",
        "riskLevel": "medium",
        "testSteps": [
          "1. In Settings > Security & Privacy, initiate a MetaMetrics data deletion (if available).",
          "2. Confirm the confirmation flow completes with success feedback and no UI dead-ends.",
          "3. Ensure subsequent actions still function normally and do not crash the extension.",
          "4. Toggle MetaMetrics off/on afterward and confirm the setting still works."
        ],
        "whyThisMatters": "Users must be able to delete telemetry data without breaking analytics preferences or causing errors."
      },
      {
        "area": "Activity List Avatars (Transfers, Approvals, Swaps, NFT Events)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Generate different activity types: native send, ERC-20 approval, token transfer, NFT transfer, and a swap.",
          "2. Open Activity and verify each entry shows the correct avatar/icon and label.",
          "3. Click into activity details to ensure the icon matches the transaction type there as well.",
          "4. Switch theme (light/dark) and confirm readability and contrast."
        ],
        "whyThisMatters": "Avatar component refactor can misclassify or misrender activity icons, harming clarity of transaction history."
      },
      {
        "area": "Account List Item (Selection & Quick Actions)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open account list and switch accounts; verify the selected state updates immediately across the UI.",
          "2. Copy the address from the list item and confirm the copied value is correct.",
          "3. Rename an account and verify the list updates without duplicates or layout jumps.",
          "4. From a dapp with permissions, switch the active account and ensure the dapp reflects the change."
        ],
        "whyThisMatters": "Small account list changes can break core actions like selection and copy, degrading everyday usability."
      }
    ]
  }
}