{
  "prNumber": 47119,
  "prTitle": "release: 13.54.0",
  "generatedAt": "2026-10-26T19:38:53.622Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 588,
    "totalCommitsInRelease": 116,
    "releaseRiskScore": "57/100",
    "highRiskScenarios": 7,
    "mediumRiskScenarios": 5
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Snaps: Tron and Solana Snap version bump",
        "riskLevel": "high",
        "testSteps": [
          "1. Install and connect to a Solana Snap-compatible dapp; approve permissions and create/derive the first account.",
          "2. Receive SOL to the Snap account and send a SOL transfer; confirm successful confirmation and accurate balance update.",
          "3. Sign a message via the Snap and verify the signature is valid on-chain or via a verifier.",
          "4. Repeat the connect and send flow with a Tron Snap-compatible dapp and confirm transactions and signatures complete without errors."
        ],
        "whyThisMatters": "Cherry-pick 47122 updates Tron and Solana Snaps, which can alter permissions, account derivation, and signing/transaction behavior; regressions here would break non-EVM user flows."
      },
      {
        "area": "Navigation: Bottom navbar behavior",
        "riskLevel": "medium",
        "testSteps": [
          "1. In popup mode, navigate across tabs using the bottom navbar and verify the selected state and content update correctly.",
          "2. Initiate a transaction approval and ensure the bottom navbar doesn’t overlap or block approval actions.",
          "3. Resize between small popup and expanded window; verify the navbar remains visible/hidden appropriately and touch/click targets work.",
          "4. Lock and unlock the wallet and confirm the previously selected tab is restored (or defaulted) per spec without misalignment."
        ],
        "whyThisMatters": "Cherry-pick 47322 fixes bottom navbar issues that can block navigation or approvals, directly impacting core user flows."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (231): Asset/Network enablement and settings reshaping",
        "riskLevel": "high",
        "testSteps": [
          "1. Start on 13.53.x, create a vault, add Ethereum Mainnet and one test network (e.g., Sepolia), turn NFT auto-detection OFF and token auto-detection ON; hide at least one token and one NFT.",
          "2. Add a custom token and import an NFT manually; connect to a dapp and approve account permissions.",
          "3. Upgrade the same profile to 13.54.0 and unlock the wallet.",
          "4. Verify tokens, NFTs (including hidden and manually imported) still exist and display correctly; confirm the old enablement/ARC-style settings are either removed or mapped to equivalent toggles without regressions.",
          "5. Open Settings -> Security & Privacy and Networks; verify previous choices are preserved or sensibly migrated and that existing dapp connections remain functional."
        ],
        "whyThisMatters": "Migrations can corrupt or drop persisted data; this ensures asset visibility, detection settings, and network enablement map correctly to the new schema without user data loss."
      },
      {
        "area": "State Migrations (232): NFT detection and import flow",
        "riskLevel": "high",
        "testSteps": [
          "1. On 13.53.x, ensure NFT auto-detection is OFF and the prior NFT detection notice (if any) is dismissed; have at least one manually imported NFT.",
          "2. Upgrade to 13.54.0 and open the NFTs tab, then open the Import NFTs screen.",
          "3. Verify the new detection notice appears as intended (not duplicated or missing) and reflects the OFF state.",
          "4. Use the notice CTA to turn ON NFT auto-detection and confirm the toggle changes in Settings and detected NFTs populate after refresh.",
          "5. Reopen the Import NFTs screen and verify the notice behaves consistently with the new state."
        ],
        "whyThisMatters": "Migration changes around NFT detection/notice can confuse users or misrepresent detection state, risking missed assets or duplicate imports."
      },
      {
        "area": "State Migrations (233): App-state persistence (dismissed banners, onboarding, preferences)",
        "riskLevel": "high",
        "testSteps": [
          "1. On 13.53.x, dismiss any visible banners/tooltips, set a non-USD fiat currency, and enable advanced gas controls.",
          "2. Upgrade to 13.54.0 and unlock; open the home view and settings.",
          "3. Verify previously dismissed banners do not reappear unexpectedly and the selected fiat currency is still applied throughout the UI.",
          "4. Initiate a dapp approval (connect request), reload the extension, and confirm the approval state is preserved with correct UI context.",
          "5. Lock and unlock the wallet and verify app-state (selected tab, preferences) persists."
        ],
        "whyThisMatters": "App-state migrations can regress preferences and UI flags, causing spammy banners, lost settings, or broken approval flows."
      },
      {
        "area": "Transaction Flow: Transaction Pay Controller patch",
        "riskLevel": "high",
        "testSteps": [
          "1. On Ethereum Mainnet, send a standard ETH transfer; review the gas/total and open Edit to switch between low/market/high and custom gas.",
          "2. Submit the transaction, then use Speed Up; verify the replacement transaction updates status correctly and final cost is reflected in Activity and fiat totals.",
          "3. Repeat with an ERC-20 transfer and verify gas estimates and total are reasonable and consistent.",
          "4. Attempt Cancel on a pending transaction and confirm proper replacement and final statuses without UI hangs.",
          "5. Check activity details for accurate fee breakdown and no duplicated or missing entries."
        ],
        "whyThisMatters": "A patched transaction-pay controller directly affects fee calculation, submission, and replacement flows; regressions here can cause stuck or mispriced transactions."
      },
      {
        "area": "Network Management: Network Enablement Controller initialization",
        "riskLevel": "high",
        "testSteps": [
          "1. Fresh install 13.54.0, open Settings -> Networks and note default enabled networks.",
          "2. Disable a non-primary network (e.g., a testnet), close and reopen the extension, and verify the network remains disabled and its assets are hidden from the Assets list.",
          "3. Re-enable the network and confirm previously visible assets reappear with correct balances.",
          "4. From a dapp on the disabled network, attempt to connect; verify you are guided to enable the network and that connection subsequently succeeds.",
          "5. Confirm no phantom or duplicate networks appear and switching networks remains stable."
        ],
        "whyThisMatters": "Reworked controller init can flip defaults or break persistence, impacting which networks and assets users can see or use."
      },
      {
        "area": "Security: Message/HTML sanitization in signing and insights surfaces",
        "riskLevel": "high",
        "testSteps": [
          "1. From a test dapp, trigger a personal_sign and an EIP-712 signature request containing HTML tags, scripts, and external links in string fields.",
          "2. In the signature preview, confirm that no HTML is rendered (only safe text) and no scripts or inline images execute.",
          "3. Attempt to click any displayed URL; verify it is either not clickable or opens safely without inline execution or UI breakage.",
          "4. Approve and reject each request and confirm the confirmation screen remains functional and secure.",
          "5. Review transaction insights/warnings panels for any HTML content and verify it is sanitized and cannot break layout."
        ],
        "whyThisMatters": "Sanitizer/library patches can create XSS risks in approval UIs, leading to phishing or UI hijacking at critical signing moments."
      },
      {
        "area": "Approvals and Session Restore: App State Controller changes",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a dapp, initiate a connect request and a pending transaction so the approval screen is open.",
          "2. Lock the wallet, then unlock; verify the pending approval UI restores to the same step with correct details.",
          "3. Close the popup and reopen; ensure the selected tab and approval context persist.",
          "4. Reject the request and confirm app state returns to the previous screen without stale banners or misnavigation."
        ],
        "whyThisMatters": "Changes to app-state controller can disrupt approval continuity, causing lost context or stuck approvals."
      },
      {
        "area": "Portfolio Display: Account Group Balance calculation",
        "riskLevel": "medium",
        "testSteps": [
          "1. With multiple accounts and tokens, view the total balance header; note fiat totals.",
          "2. Hide a token with non-zero value and verify the total updates immediately and matches the sum of visible assets.",
          "3. Switch fiat currency (e.g., USD to EUR) and verify totals and per-asset fiat values recalculate consistently.",
          "4. Add a watch-only account; confirm whether it is included/excluded per design and totals reflect that behavior."
        ],
        "whyThisMatters": "Incorrect balance aggregation erodes trust and can influence send/receive decisions."
      },
      {
        "area": "NFTs: Detection notice and manual import pathway",
        "riskLevel": "medium",
        "testSteps": [
          "1. Turn OFF NFT auto-detection in Settings.",
          "2. Open NFTs -> Import NFTs and verify the new detection notice appears with correct messaging.",
          "3. Use the notice CTA to enable detection; verify the toggle updates and detected NFTs populate after refresh.",
          "4. Manually import an NFT and confirm it appears without duplication after detection runs."
        ],
        "whyThisMatters": "Reworked notice and flow must correctly guide users between manual import and detection, avoiding duplicates or missing items."
      },
      {
        "area": "Assets List: Control bar search/filter behavior",
        "riskLevel": "medium",
        "testSteps": [
          "1. On the Assets tab with many tokens, use the search field to filter by symbol and name; verify results and clear state.",
          "2. Toggle any available filter (e.g., hide small balances) and confirm the list updates correctly and persists after navigation.",
          "3. Switch to another tab and back; verify the search/filter state behaves as intended (persisted or reset per spec) without UI jumpiness.",
          "4. Open a token details screen from filtered results and navigate back; confirm the filter state is intact."
        ],
        "whyThisMatters": "Small logic changes in list controls can degrade asset discovery and lead to user confusion."
      }
    ]
  }
}