{
  "prNumber": 41456,
  "prTitle": "release: 13.26.0",
  "generatedAt": "2026-04-10T07:52:17.666Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 905,
    "totalCommitsInRelease": 130,
    "releaseRiskScore": "62/100",
    "highRiskScenarios": 8,
    "mediumRiskScenarios": 6
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Transactions – Reload behavior after a failed transaction",
        "riskLevel": "high",
        "testSteps": [
          "1. Intentionally submit a transaction that will fail (e.g., set too-low gas limit on a contract call or use a failing method on a test dapp).",
          "2. When the failure occurs, verify the UI reloads/recovers to a usable state (no stuck loading, correct failure toast/message).",
          "3. Navigate to Activity and confirm the failed transaction is displayed correctly; lock/unlock and ensure the state remains consistent."
        ],
        "whyThisMatters": "Cherry-pick 41523 fixes UI recovery after failed transactions; without it, users may get stuck or see stale activity after failures."
      },
      {
        "area": "Token Management – Eagerly add mUSD during conversion for new single-wallet users",
        "riskLevel": "high",
        "testSteps": [
          "1. Create a brand-new profile with a single default account; perform a Swap/Convert to mUSD on a supported network.",
          "2. Immediately check the Assets tab to confirm mUSD appears without requiring manual token addition and the balance is correct.",
          "3. Restart the extension and ensure mUSD remains visible with the correct balance; verify no duplicate mUSD entries are created.",
          "4. Add a second account and repeat a conversion; confirm the eager-add logic does not incorrectly add duplicates or mis-attribute balances across accounts."
        ],
        "whyThisMatters": "Cherry-pick 41633 fixes visibility gaps by eagerly adding mUSD for new single-wallet users post-conversion; without it, users may not see the asset they just acquired."
      },
      {
        "area": "Transactions – Prevent duplicate success toasts for already-confirmed txs",
        "riskLevel": "medium",
        "testSteps": [
          "1. Send a transaction and wait for confirmation; verify exactly one success toast appears.",
          "2. Reload the extension and open Activity; ensure no new success toast is shown for the same transaction.",
          "3. Perform a speed up on a new transaction that confirms; verify the replaced transaction does not trigger an extra success toast."
        ],
        "whyThisMatters": "Cherry-pick 41514 fixes duplicate success toasts for already-confirmed transactions, which can confuse users and mask real new events."
      },
      {
        "area": "Notifications – Eliminate duplicate toast notifications across flows",
        "riskLevel": "medium",
        "testSteps": [
          "1. Connect to a dapp, sign a message, and confirm only one toast appears per action.",
          "2. Switch accounts immediately after a transaction confirms and ensure no extra success toasts are emitted.",
          "3. Lock/unlock and revisit Activity; verify the same past events do not generate new duplicate toasts."
        ],
        "whyThisMatters": "Cherry-pick 41583 addresses duplicate toast notifications across flows; duplicates can overwhelm users and obscure important signals."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (201) – Assets data shape and selectors",
        "riskLevel": "high",
        "testSteps": [
          "1. Install previous stable MetaMask (13.25.x), create 2 accounts, add custom tokens on Ethereum and Polygon (include hidden/ignored tokens), then lock the wallet.",
          "2. Upgrade to 13.26.0 and unlock; allow any automatic migrations to complete.",
          "3. Verify all previously added tokens and hidden/ignored states persist per account and per network; confirm balances and fiat values render correctly.",
          "4. Switch networks, refresh extension, and confirm no duplicate tokens were created and no tokens disappeared.",
          "5. Open Activity and Assets tabs for both accounts to ensure no errors or loading loops occur post-migration."
        ],
        "whyThisMatters": "Migrations can corrupt or reshape stored assets data; a bad migration risks lost tokens, duplicates, or broken rendering across networks and accounts."
      },
      {
        "area": "State Migrations (202) – Follow-up/cleanup for assets and migration gating",
        "riskLevel": "high",
        "testSteps": [
          "1. Start with a profile already upgraded to 13.26.0 from the prior scenario; manually toggle token detection off, hide a token, and add a new watch token on a second network.",
          "2. Lock and unlock to trigger any lazy migration tasks; then switch networks repeatedly (Ethereum, Polygon, a custom RPC).",
          "3. Verify hidden tokens remain hidden, newly added watch token is still present, and token detection setting stays intact across networks.",
          "4. Confirm any migration banner or prompt (if present) does not keep reappearing after completion/reload.",
          "5. Inspect Activity for both accounts to ensure no assets-related errors or empty states appear."
        ],
        "whyThisMatters": "Follow-up migrations often fix edge cases from the first pass; regressions here can re-trigger migration loops or lose user preferences for tokens."
      },
      {
        "area": "Token Management – Post-migration integrity across multi-account and multi-network",
        "riskLevel": "high",
        "testSteps": [
          "1. With 3+ accounts, add different sets of tokens per account on Ethereum, Base, and a custom RPC; hide at least one token per account.",
          "2. Quit and relaunch the browser; then open each account and network to verify token lists load consistently and quickly.",
          "3. Perform a token send on each network; confirm the sent token remains in the list and balances update correctly after confirmation.",
          "4. Toggle token detection on/off and verify it does not override hidden states or remove watch tokens.",
          "5. Remove a token and confirm it stays removed after a reload and network switch."
        ],
        "whyThisMatters": "Large token-management changes and selectors impact how assets are discovered and shown; inconsistencies lead to user confusion, incorrect balances, and trust issues."
      },
      {
        "area": "Bridge – Controller initialization and status updates",
        "riskLevel": "high",
        "testSteps": [
          "1. Open Bridge and initiate a small transfer (e.g., ETH or token) from Ethereum to a supported L2; stay on the Bridge screen to watch status.",
          "2. While the bridge is in progress, lock/unlock the wallet and close/reopen the extension; verify status resumes correctly without showing stale or missing steps.",
          "3. Simulate a failed route (e.g., choose a known failing route/network or deliberately set too-low gas on source if applicable) and verify the error state is displayed cleanly.",
          "4. After completion, navigate away and back to Bridge to confirm final status and transaction hashes persist and are accurate.",
          "5. Check Activity view reflects the bridge transactions with correct statuses and links."
        ],
        "whyThisMatters": "Controller init changes for Bridge can break status persistence and error handling, leading to stuck or incorrect progress indicators."
      },
      {
        "area": "Accounts Tree and Messaging – Account list integrity and switching",
        "riskLevel": "high",
        "testSteps": [
          "1. Create 3 new accounts and import one account via private key; rename accounts and reorder them where supported.",
          "2. Switch accounts rapidly and sign a simple dapp permission request per account (connect to a test dapp).",
          "3. Verify correct account name/address appears in the header, Send, and Activity views after each switch.",
          "4. Remove an imported account and confirm it disappears everywhere (accounts menu, Connected sites) without stale references.",
          "5. Reload the extension and verify all changes persist and no account duplication or missing accounts occur."
        ],
        "whyThisMatters": "Controller messenger changes can cause stale or mismatched account state, leading to signing with the wrong account or UI desync."
      },
      {
        "area": "Transaction Signing – Status, activity updates, and persistence",
        "riskLevel": "high",
        "testSteps": [
          "1. Send a native asset transaction and an ERC-20 transfer on two different networks (e.g., Ethereum and Polygon); note pending and confirmed states.",
          "2. While a transaction is pending, close the popup and reopen it; verify activity list updates correctly without lag or missing entries.",
          "3. Perform a speed up and a cancel; confirm final statuses in Activity reflect replaced/canceled transactions accurately.",
          "4. Lock and unlock during a pending state; ensure final statuses still reconcile after unlock.",
          "5. Confirm no orphaned pending items remain after transactions finalize."
        ],
        "whyThisMatters": "Core controller and UI changes can desynchronize transaction activity and statuses, risking wrong balances or stuck pending entries."
      },
      {
        "area": "API Error Handling – User-visible RPC and network errors",
        "riskLevel": "medium",
        "testSteps": [
          "1. Go offline and attempt to load account, send a transaction, and open a dapp; observe error toasts/modals.",
          "2. Reconnect and switch to a custom RPC with an invalid URL; ensure errors are surfaced clearly without freezing.",
          "3. Trigger a simulated RPC failure (e.g., call a method unsupported by the network) and confirm the error is actionable (not a blank or generic code only).",
          "4. Dismiss errors and ensure they don’t reappear after navigation or reload.",
          "5. Verify no duplicate or stacked errors appear for the same action."
        ],
        "whyThisMatters": "Error handler changes can hide critical failures or flood users with duplicate toasts, degrading reliability and supportability."
      },
      {
        "area": "Connected Sites UX – Removal/rework of Connected Status Indicator",
        "riskLevel": "medium",
        "testSteps": [
          "1. Visit a dapp and connect one account; verify there is still a clear way to see the site’s connection status and which account is connected.",
          "2. Switch accounts and confirm the dapp reflects the new account; check the connections list in Settings > Connections.",
          "3. Disconnect the site from within MetaMask and confirm the dapp loses access and the connection status updates.",
          "4. Reload the dapp and extension and ensure the connection state persists correctly (connected remains connected, disconnected remains disconnected).",
          "5. Ensure no missing or broken UI elements appear where the old indicator used to be."
        ],
        "whyThisMatters": "UI changes to connection indicators can confuse users about which account/site is connected, risking wrong-account actions."
      },
      {
        "area": "Backup & Sync – Feature toggles and persistence",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open Settings > Security & Privacy (or Identity section if applicable) and toggle Backup & Sync features on; complete any required auth.",
          "2. Lock/unlock and ensure the toggle state persists; repeat for turning the feature off.",
          "3. Toggle while offline; verify graceful failure messaging and that state doesn’t become inconsistent.",
          "4. Perform basic wallet actions (send, add token) and confirm no unexpected sync-related banners or errors appear.",
          "5. Revisit settings after a browser restart to confirm state remains correct."
        ],
        "whyThisMatters": "Toggle logic changes can leave features half-enabled, causing silent failures or privacy issues."
      },
      {
        "area": "Download Mobile Modal – QR and deep links",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open the Download Mobile modal from the avatar menu; verify copy, QR, and store links render properly.",
          "2. Switch language and theme, reopen the modal, and confirm layout and text are correct.",
          "3. Click both iOS and Android links to ensure correct store destinations open in a new tab.",
          "4. Close and reopen the modal after a page navigation to ensure it resets correctly.",
          "5. Confirm no console or UI errors when interacting with the modal controls."
        ],
        "whyThisMatters": "User-facing modal updates can break links or QR rendering, reducing trust and driving support tickets."
      }
    ]
  }
}