{
  "prNumber": 47119,
  "prTitle": "release: 13.54.0",
  "generatedAt": "2026-10-27T02:54:04.449Z",
  "modelUsed": "gpt-5",
  "summary": {
    "totalFilesChanged": 588,
    "totalCommitsInRelease": 117,
    "releaseRiskScore": "51/100",
    "highRiskScenarios": 4,
    "mediumRiskScenarios": 10
  },
  "testScenarios": {
    "cherryPickScenarios": [
      {
        "area": "Snaps — Tron Snap bump (install/connect and sign flow)",
        "riskLevel": "medium",
        "testSteps": [
          "1. From Settings → Snaps (or via a compatible dapp), install the Tron Snap and approve requested permissions.",
          "2. Connect to a Tron dapp and request an address; verify account exposure and network prompts behave correctly.",
          "3. Initiate a simple transfer or message signing from the dapp; approve in MetaMask and confirm success."
        ],
        "whyThisMatters": "Cherry-pick 47122 updates critical Snap behavior; Snap bumps can change permissions, key derivation, or signing flows causing broken connections or failed approvals."
      },
      {
        "area": "Snaps — Solana Snap bump (install/connect and sign flow)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Install the Solana Snap and approve its permissions.",
          "2. Connect to a Solana dapp, request an address, and verify correct account exposure and network labeling.",
          "3. Sign a test transaction or message and ensure the confirmation UI renders correctly and the action succeeds."
        ],
        "whyThisMatters": "Cherry-pick 47122 updates Solana Snap; changes can impact signing UX, address formats, or permission prompts, breaking dapp interoperability."
      },
      {
        "area": "Snaps — Stellar Wallet Snap bump (basic install and send)",
        "riskLevel": "medium",
        "testSteps": [
          "1. Install the Stellar Wallet Snap and approve permissions.",
          "2. From a Stellar-compatible dapp, connect and request an address; verify it displays correctly.",
          "3. Trigger a small send or message sign; approve and confirm the result in both the dapp and MetaMask Activity."
        ],
        "whyThisMatters": "Cherry-pick 47224 updates Stellar Snap; Snap upgrades can subtly break address derivation and signing or introduce new permission scopes."
      },
      {
        "area": "UI Navigation — bottom navbar fix",
        "riskLevel": "medium",
        "testSteps": [
          "1. Resize the extension popup to a small height/width where the bottom navbar appears; navigate between tabs (e.g., Home, Activity, NFTs).",
          "2. Open a confirmation screen (send or connect) and verify the navbar does not overlap buttons or block scrolling.",
          "3. Return to Home and confirm the navbar highlights the correct active tab and remains clickable."
        ],
        "whyThisMatters": "Cherry-pick 47322 fixes navigation; navbar regressions can block critical actions or obscure confirmations on small viewports."
      }
    ],
    "initialScenarios": [
      {
        "area": "State Migrations (231–233) — assets/network enablement flags and UI gating",
        "riskLevel": "high",
        "testSteps": [
          "1. On 13.53.x, create a profile with: Token detection ON, NFT detection OFF, and at least one custom network added; hold at least one token and one NFT on different networks.",
          "2. Upgrade to 13.54.0 and unlock; do not reset state.",
          "3. Open Assets and NFTs tabs across two networks (e.g., Ethereum Mainnet and a custom RPC); verify prior detection toggles persist and no legacy ‘enablement’ banners unexpectedly appear.",
          "4. Toggle NFT detection ON, reload the extension, and confirm the toggle persists and NFTs list populates without duplicates.",
          "5. Check console for migration errors and ensure balances/asset lists remain intact (no missing or duplicated tokens/NFTs)."
        ],
        "whyThisMatters": "Migrations can corrupt or reset user preferences and asset lists; verifying preserved settings and clean UI state prevents asset loss confusion and broken onboarding prompts."
      },
      {
        "area": "Network Enablement Controller Init — first-visit prompts and per-network defaults",
        "riskLevel": "high",
        "testSteps": [
          "1. Add a new custom network (RPC) and switch to it for the first time.",
          "2. Visit the Assets tab and observe any enablement or detection prompts; dismiss them and reload the extension.",
          "3. Verify dismissed prompts do not reappear (persistence) and that detection toggles reflect the user’s action.",
          "4. Switch between networks (Mainnet ↔ custom) and confirm prompts/flags are scoped per-network and do not leak across networks."
        ],
        "whyThisMatters": "Initialization order and persistence of per-network enablement can cause repeated prompts or incorrect defaults, disrupting users and creating inconsistent detection behavior."
      },
      {
        "area": "Assets Controller Init — token detection and deduplication",
        "riskLevel": "high",
        "testSteps": [
          "1. On Mainnet with token detection ON, import an account holding common ERC-20s; verify automatic token discovery populates once.",
          "2. Turn token detection OFF and manually import one of the same tokens; confirm it shows once and is not duplicated.",
          "3. Re-enable token detection and reload; verify no duplicates are created and balances remain accurate.",
          "4. Switch to another EVM network where the token also exists; verify lists are network-scoped and consistent."
        ],
        "whyThisMatters": "Controller init refactors can introduce race conditions or duplication in asset discovery, affecting balances and user trust."
      },
      {
        "area": "NFT Import Flow — Detection Notice on 'Import NFTs'",
        "riskLevel": "high",
        "testSteps": [
          "1. Ensure NFT detection is OFF; open NFTs tab with zero NFTs.",
          "2. Click 'Import NFTs' and verify the new detection notice component appears with correct messaging and actions.",
          "3. Dismiss or act on the notice (enable detection), then reload; confirm the choice persists and the notice does not reappear unnecessarily.",
          "4. Complete a manual NFT import and confirm it displays correctly alongside any auto-detected NFTs without duplication."
        ],
        "whyThisMatters": "A new notice in a critical flow can block or confuse NFT imports, causing users to miss assets or repeat actions."
      },
      {
        "area": "NFTs Empty State — copy/CTA behavior with detection on/off",
        "riskLevel": "medium",
        "testSteps": [
          "1. With NFT detection OFF and zero NFTs, open the NFTs tab and validate the empty-state text and CTA are appropriate (e.g., option to import).",
          "2. Toggle NFT detection ON; reload and re-check the empty state messaging and CTAs.",
          "3. Add one NFT (manual or detected) and ensure the empty state is replaced correctly without lingering CTAs."
        ],
        "whyThisMatters": "Incorrect empty-state guidance can mislead users about how to add or discover NFTs, increasing support burden."
      },
      {
        "area": "Account Group Balance — total computation and hidden assets",
        "riskLevel": "medium",
        "testSteps": [
          "1. Create two accounts with different token balances; view any grouped balance display on Home/Portfolio.",
          "2. Hide one low-value token and verify the group total updates accordingly in fiat and native units.",
          "3. Initiate a pending transaction (send a small token amount) and verify the total reflects pending changes without double counting."
        ],
        "whyThisMatters": "Balance integrity drives user trust; UI refactors can miscompute totals, especially with hidden assets and pending transactions."
      },
      {
        "area": "Assets List Control Bar — search/filter/sort stability",
        "riskLevel": "medium",
        "testSteps": [
          "1. In the Tokens tab with a mixed list, use the search bar to filter by token symbol and name; verify accurate results.",
          "2. Toggle 'Hide small balances' (or equivalent control) and ensure filtering is applied correctly and persists on navigation.",
          "3. Switch networks and confirm the control bar state does not leak incorrectly across networks."
        ],
        "whyThisMatters": "Small control-bar changes can regress filtering or persistence, making it hard to locate assets."
      },
      {
        "area": "App State Controller — lock/unlock and modal/popup persistence",
        "riskLevel": "medium",
        "testSteps": [
          "1. Begin a send or connect flow that opens a confirmation screen, then lock the wallet.",
          "2. Unlock and verify the app resumes in a valid state (e.g., returns to the pending confirmation or a clear, recoverable screen).",
          "3. Trigger and dismiss a global banner or tooltip, reload, and confirm dismissal persists and doesn't resurface unexpectedly."
        ],
        "whyThisMatters": "App-state bugs around lock/unlock can strand users mid-flow or re-show dismissed UI elements, breaking critical journeys."
      },
      {
        "area": "Analytics Platform Adapter — consent-gated events",
        "riskLevel": "medium",
        "testSteps": [
          "1. On fresh install, decline analytics consent; perform common actions (switch account, open Settings, add network).",
          "2. In DevTools Network, verify no analytics requests are sent (Segment/Amplitude endpoints) when consent is OFF.",
          "3. Enable analytics in Settings and repeat actions; verify events are now emitted once, without duplicates."
        ],
        "whyThisMatters": "Privacy and regulatory expectations require strict consent gating; adapter changes can accidentally emit events without consent."
      },
      {
        "area": "Send Transaction — gas estimate and confirmation (regression around transaction-pay controller patch)",
        "riskLevel": "medium",
        "testSteps": [
          "1. On Ethereum Mainnet, send an ERC-20 transfer; review gas estimates in basic and advanced settings.",
          "2. Edit gas (max fee/priority fee), confirm the transaction, and verify it broadcasts with chosen fees.",
          "3. Use Speed Up/Cancel flows and confirm status updates and final fees are accurate in Activity."
        ],
        "whyThisMatters": "Low-level controller patches can impact gas estimation or fee flows; regressions here directly cause failed or overpriced transactions."
      }
    ]
  }
}