{
  "prNumber": 46848,
  "prTitle": "release: 13.52.0",
  "generatedAt": "2026-10-13T14:33:43.992Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 712,
    "totalCommitsInRelease": 118,
    "releaseRiskScore": "64/100",
    "highRiskScenarios": 8,
    "mediumRiskScenarios": 9
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Deposit Confirmations (stale Max quote block)",
        "riskLevel": "high",
        "testSteps": [
          "1. Start a Money deposit flow and wait until the Max quote becomes stale (or simulate by delaying beyond quote validity).",
          "2. Attempt to confirm the deposit while the quote is stale and verify the UI blocks confirmation with a clear message.",
          "3. Refresh to obtain a new quote and then confirm; verify the transaction proceeds and status updates in Activity."
        ],
        "whyThisMatters": "Cherry-pick 47028 blocks deposits on stale quotes; without this, users could confirm with outdated pricing, causing incorrect deposit amounts."
      },
      {
        "area": "Money deposit transaction IDs (0x0 default regression)",
        "riskLevel": "high",
        "testSteps": [
          "1. Initiate a Money deposit and proceed to confirmation and broadcast.",
          "2. In Activity and transaction details, verify the transaction hash is non-zero and correctly populated.",
          "3. For a failed or canceled attempt, verify no lingering entries display txId 0x0; retried submissions show a proper hash once broadcast."
        ],
        "whyThisMatters": "Cherry-pick 47054 fixes transaction IDs defaulting to 0x0; incorrect IDs break traceability, user trust, and dapp deep links."
      },
      {
        "area": "Perps Controller integration (controller v20.0.0)",
        "riskLevel": "high",
        "testSteps": [
          "1. Connect to a supported perps dapp and initiate a basic action (e.g., open a small position) that triggers controller calls.",
          "2. Review the confirmation screens and approve; ensure state updates reflect the new position.",
          "3. Close or adjust the position; verify balances and position details update without errors and no stale approvals remain."
        ],
        "whyThisMatters": "Cherry-pick 46999 updates the perps controller; compatibility issues can break trading flows or misreport positions."
      },
      {
        "area": "Send Flow Loader on Stellar",
        "riskLevel": "medium",
        "testSteps": [
          "1. Switch to the Stellar account/network supported by the Snap and open the Send flow.",
          "2. Verify the send loader initializes correctly and Stellar-specific UI elements load (address/memo fields, fees).",
          "3. Complete a small test send and verify status and activity entries are correct."
        ],
        "whyThisMatters": "Cherry-pick 46930 fixes Stellar missing from the send loader; without it, users may be unable to initiate Stellar sends or see broken UI."
      },
      {
        "area": "Arc USDC balance and details (native asset mapping)",
        "riskLevel": "medium",
        "testSteps": [
          "1. On the Arc network with a native Arc USDC balance, open the Home assets list.",
          "2. Verify the Arc USDC balance appears once (no duplication with wrapped variants) and shows correct fiat value.",
          "3. Open asset details for Arc USDC and verify contract/address info, recent activity, and send/receive actions are correct."
        ],
        "whyThisMatters": "Cherry-pick 46933 shows Arc USDC from the native asset; incorrect mapping misreports balances and can confuse users when sending or reviewing activity."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (upgrade path, complex wallet state)",
        "riskLevel": "high",
        "testSteps": [
          "1. Start on 13.51.x with: 2 HD accounts + 1 imported account, 1 custom network, 2 custom tokens (one duplicate), 1 installed Snap, and at least 1 connected site.",
          "2. Create 1 pending transaction on Ethereum (e.g., set very low gas, do not speed up) and 1 failed transaction on a test network.",
          "3. Update the extension to 13.52.0 and unlock the wallet; allow the migration modal to complete.",
          "4. Verify accounts, custom network, connected sites, and Snap remain; custom tokens are present without duplication; NFTs/collectibles still show.",
          "5. Verify Activity: the formerly failed tx is correctly marked failed; the pending tx status is consistent and not lost."
        ],
        "whyThisMatters": "Multiple migration files changed and new migrations (including fail-tx) were added; broken migrations can cause data loss, corrupted activity, or unusable wallets."
      },
      {
        "area": "Migration resilience (interruption and recovery)",
        "riskLevel": "high",
        "testSteps": [
          "1. Start upgrade to 13.52.0 with a wallet that has multiple accounts and custom assets.",
          "2. Force-close the extension or browser while the migration modal is in progress.",
          "3. Reopen the extension; use the migration modal to resume or retry.",
          "4. Confirm the wallet opens normally with consistent balances, connected sites, and no duplicated tokens.",
          "5. Review console logs for migration errors and ensure no repeated migration loops."
        ],
        "whyThisMatters": "Interrupted migrations can leave state partially transformed; the new migration utils and modal must safely resume to prevent bricking wallets."
      },
      {
        "area": "Privacy & Analytics (MetaMetrics consent and gating)",
        "riskLevel": "high",
        "testSteps": [
          "1. Fresh install 13.52.0, go through onboarding, explicitly choose to NOT opt in to MetaMetrics.",
          "2. Perform key actions: add account, switch networks, add a custom token, and open Send; observe network traffic.",
          "3. Verify no metrics/analytics calls are sent while opted-out.",
          "4. In Settings > Security & Privacy > MetaMetrics, opt in; repeat actions and verify events are now sent with correct consent state.",
          "5. Lock/unlock and restart the browser to verify consent persists and event gating remains correct."
        ],
        "whyThisMatters": "Analytics/Metametrics controllers and consent UI changed; incorrect gating could leak user telemetry without consent."
      },
      {
        "area": "Snaps Permissions (install prompts and restricted methods)",
        "riskLevel": "high",
        "testSteps": [
          "1. Install a known Snap (e.g., a sample or Stellar Snap) that requests multiple permissions.",
          "2. Review the permission prompt text and scope; deny once, then retry and grant.",
          "3. From the connected Snap, attempt a method outside granted permissions and verify it’s blocked with a clear error.",
          "4. Disconnect and reconnect the Snap; verify permission prompts are consistent and previously granted scopes persist.",
          "5. Confirm the Snap can perform only the allowed actions after reconnection."
        ],
        "whyThisMatters": "Permission specifications changed; incorrect prompts or enforcement can expose unintended capabilities or block legitimate Snap functionality."
      },
      {
        "area": "Money/Fiat Onramp deposit confirmation (baseline flow)",
        "riskLevel": "high",
        "testSteps": [
          "1. Open the Earn/Buy/Deposit (Money) flow and obtain a quote for a deposit to a supported network/account.",
          "2. Proceed through confirmation screens and review all calculated values (amount, fees, network).",
          "3. Confirm the deposit and track status through the activity feed until completion or failure.",
          "4. Cancel or back out before confirmation; verify no orphaned activity entries are created.",
          "5. Re-open the flow, change input amounts/currency, and ensure recalculated totals update correctly."
        ],
        "whyThisMatters": "Confirmations and controller logic around deposit flows are sensitive; regressions can cause incorrect deposits or misleading UI states."
      },
      {
        "area": "Asset List Network Filter and Labeling",
        "riskLevel": "medium",
        "testSteps": [
          "1. On the Home screen, open the asset list filter and restrict to a single network.",
          "2. Verify the filter button label reflects the chosen network and updates when switching networks.",
          "3. Reload the extension; confirm the filter state and label persist.",
          "4. Clear the filter (All networks) and verify totals and per-asset balances adjust accordingly."
        ],
        "whyThisMatters": "Asset list control bar and filter label logic changed; wrong filters or labels mislead users about where funds are."
      },
      {
        "area": "Account Group Balance accuracy with filters",
        "riskLevel": "medium",
        "testSteps": [
          "1. With multiple accounts holding assets on different networks, view the account group balance.",
          "2. Apply a single-network filter and manually verify the sum matches the displayed group total.",
          "3. Switch to All networks and confirm the total updates and includes cross-network holdings.",
          "4. Toggle hide small balances (if available) and confirm totals adjust correctly."
        ],
        "whyThisMatters": "Account group balance and filtering logic changed; inaccurate totals can cause user confusion and poor decisions."
      },
      {
        "area": "Static Assets (token/network logos and fallbacks)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Add a well-known token with a logo and verify the icon appears on Home and asset details.",
          "2. Add a custom token without a known logo and verify a placeholder appears consistently.",
          "3. Simulate offline mode and reload; verify cached icons still display or graceful fallbacks are used.",
          "4. Remove the tokens and confirm no broken images persist in activity or history."
        ],
        "whyThisMatters": "Static assets controller changes can break icons; visual regressions erode trust and hinder quick identification of assets."
      },
      {
        "area": "Asset Migration (custom/watched tokens and deduplication)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Before upgrading, add the same custom token via different methods (watch + import) to simulate duplication.",
          "2. Upgrade to 13.52.0; unlock and allow migrations to finish.",
          "3. Verify the token list is deduplicated and balances remain accurate.",
          "4. Confirm hiding/unhiding tokens still works and persists across reload."
        ],
        "whyThisMatters": "Shared asset migration selectors changed; incorrect transforms can duplicate, hide, or drop user tokens."
      },
      {
        "area": "MetaMetrics settings page behavior",
        "riskLevel": "medium",
        "testSteps": [
          "1. Navigate to Settings > Security & Privacy > MetaMetrics.",
          "2. Toggle analytics consent off and on; confirm real-time persistence without needing a restart.",
          "3. Perform an action (e.g., send, switch network) after each toggle and verify event behavior matches the current setting.",
          "4. Lock/unlock the wallet and confirm the chosen setting is retained."
        ],
        "whyThisMatters": "Consent UI component changed; mis-synced UI and controller states can cause unintended data collection or missed telemetry."
      },
      {
        "area": "Connected sites and approvals post-migration",
        "riskLevel": "medium",
        "testSteps": [
          "1. Prior to upgrade, connect to 1–2 dapps across different networks and approve token allowances.",
          "2. Upgrade to 13.52.0 and unlock after migrations finish.",
          "3. Visit the same dapps; verify connections persist and previously approved allowances remain usable.",
          "4. Revoke a connection and reconnect to confirm flows still work."
        ],
        "whyThisMatters": "Broad controller and migration changes can break site connections or approvals, disrupting dapp usage."
      },
      {
        "area": "Snaps lifecycle (enable/disable/uninstall) after migrations",
        "riskLevel": "medium",
        "testSteps": [
          "1. With a Snap installed pre-upgrade, update to 13.52.0 and unlock.",
          "2. Disable and re-enable the Snap from Settings.",
          "3. Uninstall and reinstall the Snap; verify prompts and capabilities behave consistently.",
          "4. Confirm no orphaned permissions remain after uninstall."
        ],
        "whyThisMatters": "Permission spec and controller changes can leave stale Snap states or permissions, reducing security and stability."
      }
    ]
  }
}