{
  "prNumber": 41456,
  "prTitle": "release: 13.26.0",
  "generatedAt": "2026-04-10T16:52:01.126Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 903,
    "totalCommitsInRelease": 131,
    "releaseRiskScore": "57/100",
    "highRiskScenarios": 6,
    "mediumRiskScenarios": 8
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Transaction Failure — UI Reload and State Sync",
        "riskLevel": "high",
        "testSteps": [
          "1. Intentionally submit a transaction that will fail (e.g., interact with a reverting contract or set parameters to cause a revert) and wait for failure.",
          "2. Observe that the extension reloads/syncs to reflect the 'Failed' status without getting stuck on 'Pending' or requiring manual refresh.",
          "3. Confirm subsequent transactions behave normally and the UI does not enter reload loops."
        ],
        "whyThisMatters": "Cherry-pick 41523 fixes post-failure reload/sync; without it, users may see stale pending states or need manual intervention to recover."
      },
      {
        "area": "Token Management — Eager Add mUSD on Conversion (New User, Single Wallet)",
        "riskLevel": "high",
        "testSteps": [
          "1. Create a brand-new wallet with a single account and no prior tokens; perform a conversion/swap to mUSD on a supported network.",
          "2. Immediately open Assets and verify mUSD is auto-added and visible without manual token addition.",
          "3. Repeat on an existing multi-account wallet to confirm the token isn’t incorrectly auto-added outside the intended new-user/single-wallet context.",
          "4. Remove mUSD from the token list and confirm it stays removed unless re-added by user action."
        ],
        "whyThisMatters": "Cherry-pick 41633 fixes visibility of mUSD for new single-wallet users; incorrect scoping could cause silent token loss of visibility or unwanted auto-adds for existing users."
      },
      {
        "area": "Transaction Notifications — Skip Toast for Already-Confirmed",
        "riskLevel": "medium",
        "testSteps": [
          "1. Submit a transaction, wait for on-chain confirmation outside the extension (e.g., keep the tab locked or closed), then unlock/open the extension.",
          "2. Verify no 'Confirmed' toast appears for the already-confirmed transaction while Activity correctly shows it as confirmed.",
          "3. Refresh the extension and ensure no duplicate historical confirmation toasts are shown."
        ],
        "whyThisMatters": "Cherry-pick 41514 fixes noisy UX by skipping toasts for already-confirmed transactions; regressions could spam users with historical confirmations."
      },
      {
        "area": "Notifications — Prevent Duplicate Toasts",
        "riskLevel": "medium",
        "testSteps": [
          "1. Submit a Send transaction and observe toasts; ensure only one 'Submitted' (and if applicable, one follow-up status) toast appears.",
          "2. Perform a Swap and a Bridge back-to-back; verify no duplicate toasts for the same event across actions.",
          "3. Lock/unlock during confirmations; confirm no retroactive duplicate toasts appear."
        ],
        "whyThisMatters": "Cherry-pick 41583 fixes duplicate toast notifications; duplicates degrade UX and can mask important single-event signals."
      },
      {
        "area": "Transaction Notifications — Disable Post-Transaction Toast",
        "riskLevel": "medium",
        "testSteps": [
          "1. Submit a transaction and observe toasts; verify only the 'Submitted' toast appears and that no 'Confirmed' toast shows after completion.",
          "2. Confirm the Activity tab reflects confirmation without additional toasts and that navigating away/back doesn’t trigger a confirmation toast.",
          "3. Chain two transactions; ensure the lack of post-transaction toasts doesn’t hide failures (Activity should still surface outcomes clearly)."
        ],
        "whyThisMatters": "Cherry-pick 41655 changes UX by disabling post-transaction toasts; ensuring clarity in Activity without silent failures is critical to avoid missed outcomes."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (201, 202) — Assets and Accounts",
        "riskLevel": "high",
        "testSteps": [
          "1. Install the previous stable extension (13.25.x), create 2+ accounts (one HD, one imported), add at least two networks (e.g., Ethereum, Polygon), and manually add 2 ERC-20 tokens and 1 NFT per network.",
          "2. Lock the wallet, then upgrade to 13.26.0 and unlock; wait for the UI to fully load (no spinner).",
          "3. Verify all accounts, custom networks, tokens, and NFTs are still present with correct balances and symbols; ensure no duplicate tokens/NFTs appear.",
          "4. Toggle token detection off/on and switch networks; confirm token lists remain accurate and network-scoped.",
          "5. Open Activity for each account to confirm past history remains intact and links open correctly to the right block explorers."
        ],
        "whyThisMatters": "Migrations can corrupt or drop user assets, duplicate entries, or descope data across networks; verifying persistence across complex states prevents data-loss regressions."
      },
      {
        "area": "State Migrations — Fresh and Edge-Case Wallets",
        "riskLevel": "high",
        "testSteps": [
          "1. Start from a fresh 13.25.x wallet with token detection disabled and no custom tokens; upgrade to 13.26.0 and unlock.",
          "2. Confirm no phantom or auto-added tokens appear on each network and that detection setting persists.",
          "3. Import a private-key account post-upgrade; check assets render correctly without duplicating the HD account’s tokens.",
          "4. Add one custom token with an unusual decimal count and switch networks; verify correct formatting and scoping.",
          "5. Restart the browser and re-open the extension; confirm settings and asset lists persist."
        ],
        "whyThisMatters": "Edge-case and new-user paths often expose migration bugs (e.g., incorrect defaults, token auto-additions, or persistence issues) that can confuse or mislead users."
      },
      {
        "area": "Transaction Flow — Submission, Status Updates, and Activity",
        "riskLevel": "high",
        "testSteps": [
          "1. Submit a Send transaction on a congested network; keep the extension open and observe Pending → Confirmed/Failed transitions in Activity.",
          "2. Lock the wallet mid-pending, wait for on-chain confirmation, then unlock; verify the Activity status is correct without errant status regressions.",
          "3. Trigger a Speed Up and a Cancel on a pending transaction; ensure the replacement logic correctly reflects the final outcome.",
          "4. Hard refresh the extension (background reload or browser restart) mid-transaction; verify the final state syncs correctly upon reopen.",
          "5. Confirm there are no loops or stale states (e.g., stuck Pending) and that the activity details remain accurate."
        ],
        "whyThisMatters": "Transaction state integrity is core to trust; incorrect transitions or stale states lead to user errors and potential financial loss."
      },
      {
        "area": "Accounts and Permissions — Account Switching and Connected Sites",
        "riskLevel": "high",
        "testSteps": [
          "1. Connect Account A to a dapp (e.g., Uniswap), then switch to Account B and confirm the site shows disconnected or distinct permissions.",
          "2. From the extension, review Connected Sites for each account; ensure lists differ appropriately and switching accounts updates the site connection state.",
          "3. Disconnect the site from Account A via the extension and reload the dapp; confirm permissions are revoked only for Account A.",
          "4. Reconnect with Account B and perform a transaction; verify it uses the correct account and network.",
          "5. Lock/unlock and confirm the per-account connection isolation persists."
        ],
        "whyThisMatters": "Changes in account-tree messaging and controller init can break per-account connection isolation, causing cross-account permission leaks."
      },
      {
        "area": "Bridge Flow — Status Tracking and Resumption",
        "riskLevel": "medium",
        "testSteps": [
          "1. Initiate a bridge transfer (e.g., ETH → another L2) from the extension’s Bridge UI and note the status indicator.",
          "2. Close the extension mid-bridge; re-open after several minutes and confirm the status resumes accurately (in-progress → complete).",
          "3. Open Activity and verify the bridge entry reflects the correct network and final status.",
          "4. If the bridge fails, ensure the UI surfaces failure clearly and offers retry or guidance without stale 'in-progress' states."
        ],
        "whyThisMatters": "Controller init changes to bridge/status logic risk losing or misreporting long-running bridge statuses, confusing users about fund location."
      },
      {
        "area": "Connected Dapp Status UI — Indicator Removal Regression",
        "riskLevel": "medium",
        "testSteps": [
          "1. Visit a dapp and connect the wallet; verify there is still an obvious way to confirm connection (e.g., dapp shows address, extension’s Connected Sites).",
          "2. Attempt to disconnect from the extension’s permissions/connection management; verify the dapp reflects disconnection on reload.",
          "3. Switch accounts and networks; ensure the dapp updates which account is connected and that the UI remains discoverable without prior indicator.",
          "4. Confirm no orphaned indicators or stale 'connected' cues remain after disconnect."
        ],
        "whyThisMatters": "Removing the connected-status-indicator can unintentionally hide connection state; users must still find, confirm, and manage permissions easily."
      },
      {
        "area": "API Error Handling — RPC/Quote Failures",
        "riskLevel": "medium",
        "testSteps": [
          "1. Configure a custom network with an invalid RPC URL and open the extension; verify a clear, actionable error appears (not a silent spinner).",
          "2. Switch back to a valid network and attempt a Swap where the quote intentionally fails (e.g., extreme slippage); confirm an informative error banner/toast shows.",
          "3. After errors, ensure normal flows recover without needing an extension restart.",
          "4. Confirm that error toasts/banners dismiss correctly and do not duplicate."
        ],
        "whyThisMatters": "API error handler changes can suppress or duplicate critical feedback; users need clear recovery paths during RPC and aggregator issues."
      },
      {
        "area": "Backup & Sync Toggles — Persistence and Non-Interference",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open Settings → Identity → Backup & Sync and toggle available features on.",
          "2. Lock/unlock and restart the browser; confirm toggles persist as set.",
          "3. Perform a normal Send and a Swap; verify no unexpected prompts or blocks appear due to toggles.",
          "4. Turn toggles off and repeat a transaction; ensure behavior returns to baseline without leftover banners."
        ],
        "whyThisMatters": "Toggle changes can create hidden state that interferes with core wallet operations or fails to persist."
      },
      {
        "area": "Reset Account — Confirmation and Post-Reset Behavior",
        "riskLevel": "medium",
        "testSteps": [
          "1. With some completed and pending Activities, open Settings → Advanced → Reset Account and proceed through the confirmation modal.",
          "2. Verify pending nonces are cleared (no stuck pendings), but assets, networks, and account names remain intact.",
          "3. Submit a new transaction post-reset; confirm it sends successfully with a fresh nonce.",
          "4. Ensure no unexpected loss of activity history beyond expected nonce reset behavior."
        ],
        "whyThisMatters": "Changes in reset confirmation/UI can lead to user confusion or accidental data loss beyond nonce clearing."
      }
    ]
  }
}