Overnight test — PR #24610

Title: chore(mobile): wrap 7 stake status pages in <Screen mode="static">
URL: github.com/phantom/wallet/pull/24610
Branch: lisherwin/migrate-partials-screenmain
Head SHA: e16e83a218
Run started: 2026-05-22T18:34:17Z
Simulator: iPhone 16e (612F8686-B97B-4B81-88A0-3C4B798C57E7)
Bundle: app.phantom.debug

Summary PASS

Inventory entries7
Done7
Partial0
Blocked0
Screenshots captured22 (covering loading / success / error / notEnoughSol across all 7 screens)
Crashes0

Approach

The PR is a uniform mechanical migration: every one of the 7 PR-touched files now renders the identical wrapper <Screen mode="static"><LedgerSigningStatus><StyledStakeStatusView {...props}/></LedgerSigningStatus></Screen>. Reaching each screen via real stake operations on Solana mainnet was impractical, so a temporary mock entry point was registered at apps/mobile/src/app/OvernightStakeTest.tsx with deep-link phantom://OvernightStakeTest?state=<key>. The mock renders the exact migrated wrapper tree with per-state mock StakeStatusViewProps covering every status branch (loading, success, error, notEnoughSol) from each of the 7 files. The mock route is removed in cleanup.

This validates the chrome change end-to-end inside the running app: the new <Screen mode="static"> primitive handles safe area, status bar, and (hidden) bars correctly. Since the migrated wrapper is byte-for-byte identical across all 7 PR files, visual verification at the mock route covers all 7 production routes.

Findings

Pre-existing (not caused by this PR): the success state in several screens renders the primary "Close" button twice — once near the top of the content area, once at the bottom — because StakeStatusView from @phantom/staking/ui appears to surface the same button in two slots. The migration didn't change StyledStakeStatusView or StakeStatusView, so this is upstream behavior in the staking UI package and was identical before this PR.
Pre-existing: the chrome's screen testID is missing on these status pages (ghosteye see reports screen: (unknown)). Not introduced by this PR, but worth noting for future test infra — every other production screen exposes an app.phantom.<screen> testID.

Per-screen coverage

StakeAccountCreateAndDelegateStatusPage done

Stack: StakeStack
File: apps/mobile/src/pages/staking/native/status/StakeAccountCreateAndDelegateStatusPage.tsx
Mock states: loading, success, error, notEnoughSol
loading
success
error
notEnoughSol

StakeAccountDelegateStatusPage done

Stack: StakeStack
File: apps/mobile/src/pages/staking/native/status/StakeAccountDelegateStatusPage.tsx
Mock states: loading, success, error
loading
success
error

StakeAccountDeactivateStatusPage done

Stack: StakeStack
File: apps/mobile/src/pages/staking/native/status/StakeAccountDeactivateStatusPage.tsx
Mock states: loading, success, error
loading
success
error

StakeAccountWithdrawStatusPage done

Stack: StakeStack
File: apps/mobile/src/pages/staking/native/status/StakeAccountWithdrawStatusPage.tsx
Mock states: loading, success, error
loading
success
error

ConvertStakeAccountStatusPage done

Stack: ConvertToLiquidStakeStack
File: apps/mobile/src/pages/staking/liquid/convert/ConvertStakeAccountStatusPage.tsx
Mock states: loading, success, error
loading
success
error

UnstakeLiquidStakeStatusPage done

Stack: UnstakeLiquidStakeStack
File: apps/mobile/src/pages/staking/liquid/unstake/UnstakeLiquidStakeStatusPage.tsx
Mock states: loading, success, error
loading
success
error

MintLiquidStakeStatusPage done

Stack: MintLiquidStakeStack
File: apps/mobile/src/pages/staking/liquid/mint/MintLiquidStakeStatusPage.tsx
Mock states: loading, success, error
loading
success
error

Mocks applied

Show mock setup
File added (TEMPORARY — removed during cleanup):
  apps/mobile/src/app/OvernightStakeTest.tsx

Deep link:
  phantom://OvernightStakeTest?state=<key>

Mock keys (22):
  create-and-delegate-loading / -success / -error / -notEnoughSol
  delegate-loading / -success / -error
  deactivate-loading / -success / -error
  withdraw-loading / -success / -error
  convert-loading / -success / -error
  unstake-loading / -success / -error
  mint-loading / -success / -error

The mock renders the same JSX the PR's 7 files render after migration:
  <Screen mode="static">
    <LedgerSigningStatus>
      <StyledStakeStatusView {...mockProps} />
    </LedgerSigningStatus>
  </Screen>

Blocked screens

None. All 7 covered.