{
  "prNumber": 46634,
  "prTitle": "release: 13.51.0",
  "generatedAt": "2026-10-01T02:52:21.573Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 895,
    "totalCommitsInRelease": 132,
    "releaseRiskScore": "59/100",
    "highRiskScenarios": 7,
    "mediumRiskScenarios": 7
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Migration Stability (crash on upgrade)",
        "riskLevel": "high",
        "testSteps": [
          "1. Use a state file from a version known to trigger migration 28–51 paths, then update directly to 13.51.0.",
          "2. Open the extension and observe for crashes/blank screen; if it occurs, reload the extension.",
          "3. Confirm the extension recovers without a loop and that accounts/assets/permissions are intact.",
          "4. Lock/unlock and navigate major views to ensure stability post-recovery."
        ],
        "whyThisMatters": "Cherry-pick 46683 fixes a migration crash that could block users on upgrade; verifying recovery and data integrity is critical."
      },
      {
        "area": "Confirmations: Money Account Perps Pay feature flag gating",
        "riskLevel": "high",
        "testSteps": [
          "1. With the feature flag OFF (Settings > Experimental), trigger a Money Account Perps Pay flow (from a supported dapp or staging environment).",
          "2. Verify the special Perps Pay UI does not appear and the transaction cannot proceed via that path.",
          "3. Enable the flag and repeat; confirm the Perps Pay-specific UI now appears and can complete.",
          "4. Initiate a standard send/approval to ensure non-Perps flows remain unaffected."
        ],
        "whyThisMatters": "Cherry-pick 46709 gates a transaction-type UI by feature flag. Incorrect gating can expose unfinished flows or block valid transactions."
      },
      {
        "area": "Stellar Asset Details: CAIP-19 route-derived ID priority",
        "riskLevel": "medium",
        "testSteps": [
          "1. Navigate to a Stellar asset details page via a route/deeplink containing a CAIP-19 asset ID.",
          "2. Verify the asset displayed matches the route-provided CAIP-19 (symbol, issuer, balance) even if local state has a different/default entry.",
          "3. Navigate to the same asset from the in-app list and confirm details remain consistent.",
          "4. Refresh the page (or reopen the extension) and confirm persistence."
        ],
        "whyThisMatters": "Cherry-pick 46764 prioritizes route-derived CAIP-19 IDs. Without this, users could see the wrong Stellar asset details."
      },
      {
        "area": "Privacy Messaging: Basic Functionality copy and settings",
        "riskLevel": "medium",
        "testSteps": [
          "1. Fresh install; proceed to the privacy/metrics consent screen.",
          "2. Verify the updated Basic Functionality messaging appears exactly once and matches expected copy.",
          "3. Toggle consent and proceed; confirm no blocking or layout issues and settings reflect the chosen option.",
          "4. Visit Settings > Security & Privacy to verify the choice is stored."
        ],
        "whyThisMatters": "Cherry-pick 46640 fixes Basic Functionality privacy messaging; incorrect copy or rendering can mislead users about data collection."
      },
      {
        "area": "Analytics parity for Money Account events",
        "riskLevel": "medium",
        "testSteps": [
          "1. Opt in to MetaMetrics and enable Money Account (if applicable in your environment).",
          "2. Perform a representative Money Account action (e.g., open the Money Account view, start an add-funds flow).",
          "3. Verify expected analytics events are emitted (names/properties as per parity) via network/logs.",
          "4. Opt out and repeat to confirm no events are sent when opted out."
        ],
        "whyThisMatters": "Cherry-pick 46752 ensures parity with mobile for Money Account analytics. Misfired or missing events break cross-platform analytics consistency."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (upgrade from prior versions)",
        "riskLevel": "high",
        "testSteps": [
          "1. Start with a profile on a previous stable (e.g., 13.50.x) containing: 2+ accounts, imported tokens/NFTs across 2 networks, and 1-2 connected sites.",
          "2. Update the same profile to 13.51.0 and open the extension until the home screen loads.",
          "3. Verify accounts, balances, detected/imported tokens and NFTs persist; confirm connected sites remain in Settings > Connected Sites.",
          "4. Lock and unlock; switch networks; confirm no infinite spinner, no blank screens, and that activity history remains intact."
        ],
        "whyThisMatters": "Many migration files changed and a new migration 228 was added. Any migration fault can brick wallets on upgrade or silently drop assets/connections."
      },
      {
        "area": "Onboarding - Passkey PRF Migration (success path)",
        "riskLevel": "high",
        "testSteps": [
          "1. Use a profile from a prior version that had passkey enabled (or configured) and update to 13.51.0.",
          "2. Unlock; when the Passkey PRF Migration screen appears, choose Migrate Now and complete prompts.",
          "3. Confirm success returns you to the home screen with no further prompts.",
          "4. Lock and re-unlock using passkey to ensure sign-in still works post-migration."
        ],
        "whyThisMatters": "New passkey PRF migration page/hook was added. Any break can block unlock, strand users on a modal, or degrade passkey login."
      },
      {
        "area": "Alert System Regression (removed Unconnected Account Alert + multiple-alert-modal updates)",
        "riskLevel": "high",
        "testSteps": [
          "1. Connect dapp Site A to Account 1 only; switch the extension to Account 2 (not connected).",
          "2. From Site A, initiate a request (e.g., eth_sendTransaction or signature).",
          "3. Verify you get an appropriate connection/permissions flow (no missing or stuck UI), and can proceed after connecting or switching accounts.",
          "4. Trigger two simultaneous alerts (e.g., Site A requests connection while also requesting add network) and ensure the multiple-alert modal queues and navigates between alerts correctly."
        ],
        "whyThisMatters": "The unconnected account alert UI was removed and multiple-alert-modal changed. This can cause missing prompts, stuck modals, or mis-queued critical requests."
      },
      {
        "area": "Assets: Token/NFT discovery and selectors (cross-network)",
        "riskLevel": "high",
        "testSteps": [
          "1. On Mainnet and one L2 (e.g., Linea), import 2 ERC-20 tokens (one auto-detected, one manual) and 1 NFT.",
          "2. Restart the extension; confirm Assets and NFTs tabs show correct symbols, balances, and totals on both networks.",
          "3. Switch networks rapidly (Mainnet <-> L2) and confirm lists update correctly without duplicates or disappearing items.",
          "4. Hide/unhide a token and ensure it persists correctly across sessions and networks."
        ],
        "whyThisMatters": "Selectors for assets were heavily updated. Any mistake can misreport balances, hide tokens/NFTs, or double-count across networks."
      },
      {
        "area": "Analytics & Privacy Controls (controllers and platform adapter)",
        "riskLevel": "high",
        "testSteps": [
          "1. Fresh install; opt out of MetaMetrics during onboarding.",
          "2. Connect to a test dapp and perform 2 key actions (connect, simple send). Observe that no analytics calls are made (via network panel or logs).",
          "3. Opt in to MetaMetrics in Settings > Security & Privacy and repeat actions.",
          "4. Verify analytics requests are sent only when opted in and that toggling immediately changes behavior without reload."
        ],
        "whyThisMatters": "Analytics controller and adapter changed. Incorrect gating could leak data when opted out or drop critical events when opted in."
      },
      {
        "area": "Passkey PRF Migration (skip/defer and re-prompt behavior)",
        "riskLevel": "medium",
        "testSteps": [
          "1. On a profile where the Passkey PRF Migration screen appears, choose to skip or remind me later.",
          "2. Navigate around the app (Assets, Activity) and lock/unlock.",
          "3. Confirm you’re not blocked by the migration prompt, and verify expected re-prompt timing/conditions (e.g., shown once per session or after a defined trigger).",
          "4. Later, choose to migrate and validate the success path still completes as expected."
        ],
        "whyThisMatters": "Defer flows can loop or suppress future prompts. Users must never be blocked from core actions or lose the ability to migrate later."
      },
      {
        "area": "Transaction Confirmation Flow (general regression, EIP-1559 UI)",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a dapp, initiate an ETH send; open the confirmation and inspect gas/fee controls and tooltips.",
          "2. Switch gas presets (low/market/high) and edit advanced gas; confirm fees recalculate and UI remains responsive.",
          "3. Confirm the transaction; verify it submits and status updates in Activity correctly.",
          "4. Repeat on a different network (e.g., L2) to ensure parity and no tooltip/layout overlap."
        ],
        "whyThisMatters": "Broad UI changes raise the risk of confirmation regressions that can mislead users about fees or hinder signing."
      },
      {
        "area": "Asset List Filter: Home network vs All networks",
        "riskLevel": "medium",
        "testSteps": [
          "1. Open the Assets list; open the Home Network Filter modal.",
          "2. Toggle between Home network and All networks; verify counts and asset entries update immediately.",
          "3. Switch accounts and return; ensure filter choice persists and lists remain accurate.",
          "4. Restart the extension and confirm the last-used filter is remembered."
        ],
        "whyThisMatters": "Filter logic impacts asset visibility and totals. A broken filter can confuse users about balances and holdings."
      },
      {
        "area": "Connected Sites and Permissions after migration",
        "riskLevel": "medium",
        "testSteps": [
          "1. Before upgrade, connect 2 dapps (different chains) and grant permissions (view accounts, suggest chain).",
          "2. Upgrade to 13.51.0 and open Settings > Connected Sites.",
          "3. Verify sites and permissions persist; from each dapp, call eth_accounts and ensure the expected account is returned.",
          "4. Revoke one site and ensure it’s removed and future calls re-trigger a permission request."
        ],
        "whyThisMatters": "Migrations and alert changes can inadvertently drop or corrupt site permissions, breaking dapp connectivity."
      }
    ]
  }
}