Uh oh!
There was an error while loading. Please reload this page.
chore(ui): remove the newUI beta flag and delete the v1 shell - #619
Open
bmc08gt wants to merge 2 commits into
Open
chore(ui): remove the newUI beta flag and delete the v1 shell#619bmc08gt wants to merge 2 commits into
bmc08gt wants to merge 2 commits into
Conversation
The tab-bar UI shipped to everyone in #613, so `BetaFlags.Option.newUI` had no readers left that could return false. Collapse every branch it gated and delete the v1 surfaces it was the last route to. Deleted: `BalanceScreen`, `ScanTopBar`/`ScanBottomBar`, the Currency Sell flow (Convert replaces it and calls the same `Session.sell` machinery underneath), `CurrencyInfoHeaderSection`/`CurrencyInfoFooter`, and `CurrencyCreationPromoCard`. Extracted rather than dropped: `ExchangedBalance` and `BalanceHeaderButton` out of `BalanceScreen`, and `RootSheetHost` out of `ScanScreen`. Router: `Stack.isTabHosted` replaces the runtime-registered `AppRouter.tabStacks` set. The old set was published by `HomeTabView`'s `onAppear`, so a deep link arriving before that view appeared fell through to the sheet lookup and was dropped — `.balance` has no sheet of its own. Making it a static fact on the stack fixes the cold-start case, and `AppRouterCrossStackTests` pins it against `HomeTab.pushStack`. `Availability` stays as-is; it is the mechanism for the next rollout, not part of this flag. Also picks up three symbols stranded by the deletions: `Session.canUseTips` (body was `true`), `Image.Symbol.hamburger` with its imageset, and the wallet leg of the token-info funnel. The last one is rewired rather than removed — the tab-bar wallet expands the card in place instead of pushing a screen, so `WalletScreen` now emits `openedFromWallet` on tap and `openedFromDeeplink` on a deep-linked open.
This was referenced Aug 21, 2026
Removing the newUI beta flag deleted the Currency Sell flow, which held the only `swapType: .sell` call site. Convert replaces it and carries its own case, so nothing constructs a sell any more. Drop the case from SwapType and the arms it fed in title, subtitle, navigationTitle, and trackTransaction. Convert keeps reporting through Analytics.tokenSell — it still disposes of the source token — so only the unreachable path goes. The tests asserting a fourth case and the "Selling" title go with it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The tab-bar UI shipped to everyone in #613, so
BetaFlags.Option.newUIhad no readers left that could returnfalse. This collapses every branch it gated and deletes the v1 surfaces it was the last route to. Mirrors the decisions in the Android teardown (code-payments/code-android-app#1290).Availabilitystays as-is — it's the mechanism for the next rollout, not part of this flag.BetaFlags.Optionis down to.vibrateOnScanand.enableCoinbase; the now-empty.publicBetalist renders itsContentUnavailableViewand needed no change.Deleted
BalanceScreen— the v1 wallet, superseded byWalletScreenin the Wallet tabScanTopBar/ScanBottomBar— the scanner-first chrome the tab bar replacesCurrencySellAmountScreen,CurrencySellConfirmationScreen, and their view models). Convert replaces it and calls the sameSession.sellmachinery underneath, so nothing below the UI layer went away.CurrencyInfoHeaderSection/CurrencyInfoFooter— the v1 Currency Info header and Buy/Sell footer, replaced byCurrencyInfoContentV2's tilesCurrencyCreationPromoCardExtracted rather than dropped
ExchangedBalanceandBalanceHeaderButton, out ofBalanceScreenRootSheetHost, out ofScanScreenThese account for most of the additions — they're re-homed code, not new logic.
Router
Stack.isTabHostedreplaces the runtime-registeredAppRouter.tabStacksset.The old set was published by
HomeTabView'sonAppear. A deep link arriving before that view appeared therefore fell through to the sheet lookup and was silently dropped, because.balancehas no sheet of its own. Making it a static fact on the stack fixes the cold-start case, andAppRouterCrossStackTests.tabHostedStacks_matchHomeTabspins it againstHomeTab.pushStackso the two can't drift.SheetPresentationloses.balanceand.discover, both of which are now tab-reached.Stranded symbols
A reference-count sweep against
mainfound three symbols whose last consumer was v1 code:Session.canUseTips— body wastrue; only caller was the v1 scanner bottom bar. Removed.Image.Symbol.hamburger— only used byScanTopBar. Removed with its imageset.Analytics.TokenInfoEvent.openedFromWallet— rewired, not removed. This is the wallet → token-info funnel step, and the tab-bar shell had quietly stopped emitting it because the v2 wallet expands the card in place rather than pushing a screen.WalletScreennow fires it fromopenCard.openedFromDeeplinkhad the same gap, soopenCardImmediately— reached only fromDeepLinkController— fires that one.Tests
CurrencySellConfirmationViewModelTestsis ported toConvertConfirmationViewModelTests, keeping the sell money-math coverage on the flow that replaced it. The router suites are rewritten for the new stack shape.The XCUITests diverge from Android here: Android retargeted its Maestro flows inside the teardown PR, while the affected XCUITests stay behind
skipPendingTabBarRewritewith the rewrite planned in.claude/plans/2026-08-20-ui-test-tab-bar-rewrite.md. Two Buy regressions needed a new entry point regardless — an owned currency offers Give / Convert / Withdraw, not Buy.Open product question
Settings is reachable only from the You tab, which renders only for an account with a tippable profile. An account without one appears to have no route to Settings. Flagging rather than fixing, since the answer is a product call.