{
  "prNumber": 47119,
  "prTitle": "release: 13.54.0",
  "generatedAt": "2026-10-23T19:22:21.007Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 588,
    "totalCommitsInRelease": 112,
    "releaseRiskScore": "54/100",
    "highRiskScenarios": 5,
    "mediumRiskScenarios": 9
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Snaps: Tron and Solana snap bumps",
        "riskLevel": "medium",
        "testSteps": [
          "1. From a snaps demo dapp, request installation of the updated Tron or Solana snap and review new/changed permission prompts before approving.",
          "2. Connect the snap-enabled dapp and sign a basic transaction and a message; verify prompts render correctly and the signature/tx finalizes.",
          "3. Reopen the extension; ensure permissions persist and the snap remains connected without re-approval.",
          "4. Revoke the snap permission and confirm the dapp reconnect flow re-prompts appropriately."
        ],
        "whyThisMatters": "Cherry-pick 47122 bumps chain snaps that can alter permissions and signing flows; regressions here can break cross-chain interactions and user security prompts."
      },
      {
        "area": "Snaps: Stellar Wallet Snap bump",
        "riskLevel": "medium",
        "testSteps": [
          "1. Install/connect the updated Stellar Wallet Snap via a compatible dapp and approve requested permissions.",
          "2. Perform a Stellar account view and sign a simple payment transaction; confirm success and correct rendering of details.",
          "3. Lock/unlock the wallet and confirm snap connection and permissions persist.",
          "4. Attempt a message/signing denial to verify proper error handling and safe fallback."
        ],
        "whyThisMatters": "Cherry-pick 47224 updates the Stellar Wallet Snap; version bumps can change permission scopes and signing behavior, risking broken or unsafe user prompts."
      },
      {
        "area": "UI Navigation: Bottom Navbar fix",
        "riskLevel": "medium",
        "testSteps": [
          "1. Navigate across bottom tabs (Tokens, NFTs, Activity, Browser/Explore, Settings) and verify tabs switch reliably with correct highlighting.",
          "2. Resize the window to narrow width and ensure the navbar remains visible and tappable with no overlapping UI.",
          "3. From a transaction confirmation screen, open/close the navbar overlays (if any) to ensure primary action buttons aren’t obscured.",
          "4. Rapidly switch tabs and return to confirm state is preserved without rendering glitches."
        ],
        "whyThisMatters": "Cherry-pick 47322 fixes bottom navbar behavior; navigation regressions can strand users or hide critical actions across core app areas."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (231–233) — existing users",
        "riskLevel": "high",
        "testSteps": [
          "1. Start on the previous stable release with a profile containing: 2+ accounts, 1 custom network, several imported ERC-20s, at least 1 hidden token, and 1 imported NFT; disable NFT autodetection and enable test networks.",
          "2. Upgrade to 13.54.0 and unlock.",
          "3. Verify all accounts, custom networks, hidden token state, and NFT entries persist; ensure test-net toggle state is preserved.",
          "4. Send a small native token transaction on an existing custom network and confirm it completes.",
          "5. Inspect Settings > Advanced and Security & Privacy to ensure prior preferences remain unchanged and no migration error banners/toasts appear."
        ],
        "whyThisMatters": "Migrations can corrupt or reset persisted user state; three new migrations in one release increase the chance of data loss or inconsistent settings across networks and assets."
      },
      {
        "area": "State Migrations (231–233) — locked vault/first-unlock path",
        "riskLevel": "high",
        "testSteps": [
          "1. On an older version, lock the wallet and then upgrade to 13.54.0.",
          "2. Before unlocking, verify no crash or unexpected prompts; then unlock.",
          "3. Confirm accounts, networks, tokens, and NFTs appear immediately after unlock without needing a reload.",
          "4. Open the Activity, Tokens, and NFTs tabs to ensure no placeholders/errors block rendering.",
          "5. Perform a hard refresh of the extension UI and confirm state remains intact."
        ],
        "whyThisMatters": "Some migrations run pre- or post-unlock; running them against encrypted state can lead to partial migrations or blank UI until a refresh."
      },
      {
        "area": "Transaction Creation and Gas Controls (Transaction Pay Controller patch)",
        "riskLevel": "high",
        "testSteps": [
          "1. On Ethereum mainnet, send a native token transaction; open Advanced gas controls and modify Max fee and Priority fee; submit and ensure broadcast success.",
          "2. Send an ERC-20 transfer; verify gas estimation populates correctly and confirmation proceeds without rejections due to fee errors.",
          "3. Speed up the pending transaction; verify replacement transaction adopts new gas settings and confirms.",
          "4. Cancel a pending transaction; ensure cancellation replaces the tx and clears the queue without stuck states.",
          "5. Repeat a native send on a congested network (e.g., set low base fee) to ensure robust error messaging without UI soft-locks."
        ],
        "whyThisMatters": "Controller patching around transaction payment introduces risk to gas estimation, EIP-1559 handling, and replacement transactions—core functions that must not regress."
      },
      {
        "area": "Network Enablement Initialization (network-enablement-controller-init)",
        "riskLevel": "high",
        "testSteps": [
          "1. Fresh install 13.54.0; complete onboarding.",
          "2. Verify default networks shown/hidden match expected policy (e.g., mainnet visible, test networks behind toggle).",
          "3. Enable test networks in Settings; confirm they appear in the network switcher and persist across a restart.",
          "4. Add a custom network; verify it appears enabled, selectable, and persists after reload.",
          "5. Attempt to add a token on a network that is disabled/hidden and confirm the UI prompts to enable/select the correct network."
        ],
        "whyThisMatters": "Initialization changes can misconfigure which networks appear or are enabled, breaking core flows like switching networks or adding tokens."
      },
      {
        "area": "Assets Initialization and Detection (assets-controller-init)",
        "riskLevel": "high",
        "testSteps": [
          "1. On mainnet, verify existing token balances populate on load without delay or zeroed placeholders persisting.",
          "2. Toggle token autodetection off/on in Settings; confirm tokens appear/disappear as expected without duplications.",
          "3. Switch to a custom network; import a token by contract address and ensure it displays correctly and does not leak into other networks’ lists.",
          "4. Hide a token, reload the extension, and verify it remains hidden on the same network while visible state is unaffected on others.",
          "5. Remove the custom network and verify its assets do not appear in any other network views."
        ],
        "whyThisMatters": "Controller/init changes can lead to duplicate tokens, cross-network leakage of assets, or incorrect persistence of visibility settings."
      },
      {
        "area": "NFT Empty State and Detection Notice",
        "riskLevel": "medium",
        "testSteps": [
          "1. With no NFTs, open the NFTs tab and verify the updated empty state text and any CTA to import or enable detection render correctly.",
          "2. Toggle NFT autodetection on; verify detection notice behavior and that detected NFTs appear when applicable.",
          "3. Import an NFT manually; ensure the empty state disappears, details render, and no duplicate appears if detection is enabled.",
          "4. Disable detection and reload; confirm previously detected NFTs remain, and detection notice reflects the disabled state.",
          "5. Switch networks to confirm the empty state and detection messaging adjust per-network."
        ],
        "whyThisMatters": "New notices and empty-state logic can confuse users or lead to duplicates/missing NFTs if detection vs manual import states are mishandled."
      },
      {
        "area": "Account Group Balance display",
        "riskLevel": "medium",
        "testSteps": [
          "1. With 2+ accounts on mainnet, view the home screen and note the total/account group balance in fiat.",
          "2. Receive a small ERC-20 into one account; verify the group balance updates promptly without a reload.",
          "3. Switch networks to a custom network; ensure group balance recalculates correctly without mixing balances across networks.",
          "4. Hide a token with non-zero balance and confirm the group balance reflects the hidden status (if design specifies).",
          "5. Toggle currency display (e.g., USD to another fiat) and verify recalculation and formatting are correct."
        ],
        "whyThisMatters": "Incorrect aggregation or formatting can mislead users about portfolio value and undermine trust."
      },
      {
        "area": "Asset List Control Bar (filters/search/sorting)",
        "riskLevel": "medium",
        "testSteps": [
          "1. On the Tokens list, use search to filter; verify responsive filtering and no UI jumps or stale results.",
          "2. Apply any available sorting/filter toggles (e.g., by balance) and ensure results persist after navigating away and back.",
          "3. Hide/unhide a token from within the list and confirm the control bar state updates accordingly.",
          "4. Switch networks and verify the control bar resets appropriately without persisting filters across unrelated networks.",
          "5. Resize the window to a narrow width and ensure the control bar remains accessible without overlapping buttons."
        ],
        "whyThisMatters": "Small control-bar regressions can block discoverability of assets or lead to incorrect list states across networks."
      },
      {
        "area": "Onboarding, App State, and Analytics Consent (app-state-controller, analytics platform-adapter)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Fresh install; walk through onboarding and observe analytics opt-in dialog behavior and copy.",
          "2. Choose to opt-in; complete onboarding and then lock/unlock to verify choice persists in Settings.",
          "3. Restore from SRP; confirm onboarding state completes cleanly without repeated prompts.",
          "4. Toggle analytics off and verify no further analytics prompts/events are emitted in the UI (spot-check via devtools logs if available).",
          "5. Navigate across main tabs to ensure no unexpected banners or state resets occur."
        ],
        "whyThisMatters": "Changes to app-state and analytics wiring can cause repeat prompts, lost preferences, or degraded first-run UX."
      },
      {
        "area": "Network switching across Tokens/NFTs/Activity tabs",
        "riskLevel": "medium",
        "testSteps": [
          "1. From the Tokens tab, switch networks and confirm the tab content updates without stale data or loading spinners persisting.",
          "2. Move to NFTs and switch networks; confirm correct per-network NFTs load.",
          "3. In Activity, switch networks; ensure historical transactions correspond to the selected network only.",
          "4. Rapidly switch between 3+ networks to look for UI freezes or errors.",
          "5. After switching, initiate a send flow and verify the selected network is respected end-to-end."
        ],
        "whyThisMatters": "Controller/init refactors often surface as cross-tab stale data or incorrect network scoping."
      },
      {
        "area": "Speed Up/Cancel flows across networks",
        "riskLevel": "medium",
        "testSteps": [
          "1. On mainnet, submit a low-fee tx to keep it pending; use Speed Up and confirm replacement tx is mined.",
          "2. Repeat on a custom network; use Cancel and verify the queue clears properly.",
          "3. Verify activity list shows a single final outcome per original tx (no duplicates).",
          "4. Confirm gas controls remain editable and accurate during the replacement flows.",
          "5. Ensure no residual notifications or toasts stay after completion."
        ],
        "whyThisMatters": "Any transaction controller changes can cascade into replacement-transaction handling and surface as stuck or duplicated entries."
      }
    ]
  }
}