{
  "prNumber": 44326,
  "prTitle": "release: 13.40.0",
  "generatedAt": "2026-07-16T06:35:35.154Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 1313,
    "totalCommitsInRelease": 189,
    "releaseRiskScore": "53/100",
    "highRiskScenarios": 5,
    "mediumRiskScenarios": 8
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Token Management — Unified assets seeding for non-EVM search/import",
        "riskLevel": "high",
        "testSteps": [
          "1. Enable a non-EVM account (e.g., install/enable Tron Snap) and open the token import/search on that account.",
          "2. Search for a well-known non-EVM asset (e.g., USDT on Tron), import it, and verify correct symbol, logo, and decimals appear once (no duplicates).",
          "3. Switch to an EVM account and confirm the non-EVM asset does not leak into the EVM asset list/search results; switch back and verify persistence after reload."
        ],
        "whyThisMatters": "Cherry-pick 44361 fixes non-EVM asset seeding in search/import; mistakes here create cross-network asset confusion or duplicate entries."
      },
      {
        "area": "Activity Feed — Remove extra pending row from local state",
        "riskLevel": "high",
        "testSteps": [
          "1. Start a transaction and keep it pending; reopen the extension and view Activity.",
          "2. Verify only one pending row is shown; speed up or cancel and ensure the same row updates status without leaving a duplicate.",
          "3. After confirmation, confirm only one confirmed row remains for the transaction."
        ],
        "whyThisMatters": "Cherry-pick 44370 fixes duplicate pending entries; duplicates degrade trust and make it hard to track real transaction states."
      },
      {
        "area": "Network Management — Add Robinhood Chain as featured network",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open Add network > Featured and select 'Robinhood Chain'; review RPC, chain ID, symbol, and explorer links.",
          "2. Add and switch to Robinhood Chain; verify network indicator, currency symbol, and basic account view load without errors.",
          "3. Open network details in Settings and remove the network; confirm it is removed and you can switch back to Mainnet."
        ],
        "whyThisMatters": "Cherry-pick 44346 adds a new featured network; incorrect chain metadata or switching can strand users on a broken network."
      },
      {
        "area": "Portfolio Balance Selector — Remove tracing from balance aggregation",
        "riskLevel": "medium",
        "testSteps": [
          "1. With many tokens and multiple accounts, open Home and note the total balance; switch accounts rapidly 5–10 times.",
          "2. Confirm totals remain accurate and the UI stays responsive (no freezes or crashes) during rapid switches.",
          "3. Reload the extension and verify totals are consistent before and after reload."
        ],
        "whyThisMatters": "Cherry-pick 44460 alters the balance aggregation call path; unintended side-effects can impact accuracy or performance of portfolio totals."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (Migration 216 + seedless onboarding migrations)",
        "riskLevel": "high",
        "testSteps": [
          "1. Install a previous stable version (e.g., 13.39.x), create a new wallet, add a second account, and set a password.",
          "2. Add a custom network, import a few tokens and one NFT, and initiate one pending transaction (leave it pending).",
          "3. Upgrade the same profile to 13.40.0, unlock, and wait for the home screen to fully load.",
          "4. Verify accounts, networks, tokens, NFTs, and activity entries are present (no loss/duplication); confirm security and privacy settings (e.g., MetaMetrics opt-in state) are preserved.",
          "5. Restart the extension and re-verify state persistence and integrity."
        ],
        "whyThisMatters": "New migrations can reshape stored data; regressions may cause data loss, broken unlocks, or inconsistent activity/history after upgrade."
      },
      {
        "area": "Analytics/MetaMetrics opt-in/out and event gating",
        "riskLevel": "high",
        "testSteps": [
          "1. Fresh install 13.40.0 and complete onboarding choosing 'No thanks' for MetaMetrics; confirm the setting shows disabled in Settings > Security & privacy.",
          "2. Navigate through Home, Assets, Activity, and Settings; perform a small test transaction and ensure no unexpected prompts/errors appear.",
          "3. Toggle MetaMetrics on in Settings and confirm consent flow; navigate and sign a message and a simple transaction.",
          "4. Lock and unlock; verify the preference persists and no UI regressions (e.g., stuck spinners or errors) occur."
        ],
        "whyThisMatters": "Large refactors in analytics controllers/adapters can accidentally block flows, spam prompts, or ignore user consent."
      },
      {
        "area": "Assets list sorting and filter control bar",
        "riskLevel": "high",
        "testSteps": [
          "1. Ensure the wallet has 6+ tokens with varied balances; open the Assets tab.",
          "2. Use the Sort control to sort by Name (A→Z), then by Balance (high→low), then by Value (high→low); verify each ordering is correct.",
          "3. Use the search/filter input to narrow results and confirm sorting is still respected for the filtered set.",
          "4. Close and reopen the extension; verify the last selected sort is remembered and correctly applied."
        ],
        "whyThisMatters": "Significant UI updates to asset list and sort controls risk incorrect ordering, broken filtering, or lost user preferences."
      },
      {
        "area": "Asset Inactive Badge and token details",
        "riskLevel": "medium",
        "testSteps": [
          "1. Import or detect a token flagged as inactive/delisted on a supported network (e.g., a deprecated token known in MetaMask’s registry).",
          "2. Verify the 'Inactive' badge appears on the token in the Assets list and on its details screen.",
          "3. Attempt to Send that token; ensure any warning copy displays correctly and that you can safely cancel and return.",
          "4. Remove and re-import the token; confirm the badge and warnings behave consistently."
        ],
        "whyThisMatters": "New UI component introduces risk of mislabeling tokens or blocking legitimate actions, impacting user trust and safety."
      },
      {
        "area": "DeFi list empty state and protocol cells",
        "riskLevel": "medium",
        "testSteps": [
          "1. On a wallet with no DeFi positions, open the DeFi tab and verify the updated empty state copy/CTA renders correctly.",
          "2. Connect to Mainnet and interact with a supported DeFi protocol via a dapp; return to the DeFi tab and verify protocol rows render with correct name, APY/APR formatting, and fiat values.",
          "3. Tap a protocol row; ensure it deep-links correctly and back navigation returns to the list with the same state."
        ],
        "whyThisMatters": "UI copy/structure changes in DeFi lists can cause rendering or formatting regressions that confuse users or hide opportunities."
      },
      {
        "area": "Portfolio total vs per-asset balances consistency",
        "riskLevel": "medium",
        "testSteps": [
          "1. With multiple tokens across networks, note the total fiat balance at the top of Home.",
          "2. Manually sum visible token fiat values and confirm the total matches (accounting for hidden/zero-asset settings).",
          "3. Switch accounts and networks rapidly; confirm totals update smoothly without temporary extreme values or stutters.",
          "4. Reload the extension and verify totals remain consistent."
        ],
        "whyThisMatters": "Selector and controller changes around balances can produce incorrect or unstable totals, undermining portfolio accuracy."
      },
      {
        "area": "Seedless onboarding state continuity",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a prior version with a seedless/passkey-created wallet, upgrade to 13.40.0 and unlock.",
          "2. Verify accounts and permissions are intact and you are not forced to re-onboard.",
          "3. Connect to a dapp and sign a test message/transaction; confirm signing flows are uninterrupted.",
          "4. Lock and unlock; ensure no unexpected migration prompts or errors appear."
        ],
        "whyThisMatters": "Changes in seedless onboarding migrations can break access or invalidate stored session/authorization data."
      },
      {
        "area": "Activity feed during pending→confirmed transitions",
        "riskLevel": "medium",
        "testSteps": [
          "1. Send a transaction to create a pending entry and keep the Activity tab open.",
          "2. When the transaction confirms, verify exactly one row updates in place (status, timestamp, and details) without duplicates or disappearing items.",
          "3. Open the activity details and verify nonce, gas, and timestamps remain correct after the status change."
        ],
        "whyThisMatters": "List and rendering updates can cause subtle duplication or stale rows during state transitions, confusing users reviewing history."
      },
      {
        "area": "Network management sanity (switching and visibility)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Switch between Ethereum Mainnet and at least two test networks; verify balances and token lists update accordingly.",
          "2. Open Add network flow, view a featured network’s details, then cancel; ensure the current network remains unchanged.",
          "3. Toggle 'Show test networks' in settings and confirm the network selector updates immediately."
        ],
        "whyThisMatters": "Broad UI changes can unintentionally regress core network switching and visibility behaviors."
      }
    ]
  }
}