Skip to content

[Due for payment 2026-11-10] Hybrid - Connections - App navigate to Workspaces tab instead of Accounting after close #105713

Closed

Description

@applause-bot

If you haven’t already, check out our contributing guidelines for onboarding. To join our Slack channel, fill out this form.


Version Number: v9.5.28-4
Reproducible in staging?: Yes
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from BrowserStack: #105137
Email or phone of affected tester (no customers): qwraasasfsfasfleungbratt6@gmail.com
Issue reported by: Applause Internal Team
Bug source: Exploratory - Significant User Experience Deterioration
Device used: iPhone 14 / iOS 26.1
App Component: Workspace Settings

Action Performed:

  1. Log in with a new account
  2. Complete onboarding with "Manage my team's expenses" and pick QuickBooks Online.
  3. Tap the Begin button on Connect to QuickBooks Online
  4. Return to the Home tab
  5. Close the app from the background and reopen
  6. Tap the Begin button on Connect to QuickBooks Online again

Expected Result:

The Begin button opens Connections on the Accounting tab on the Connections

Actual Result:

The Begin button opens the Workspaces tab

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome Safari

Screenshots/Videos

Bug7303294_1793680631440.connect.mp4

View all open jobs on GitHub

Applause Internal Information
Exported by: Julia Ponikarchuk
Bug ID: 7303294

Issue OwnerCurrent Issue Owner: @Krishna2323

Activity

  1. added
    DeployBlockerCashThis issue or pull request should block deployment
    BugSomething is broken. Auto assigns a BugZero manager.
    on Nov 3, 2026
  2. applause-bot commented on Nov 3, 2026

    @applause-bot
    Author

    While Applause doesn't embed attachments for this bug, here are the links for quick view:
    https://platform.applause.com/services/links/v1/external/9c42598629701b4f2b7f1f9e029dd82a8a4252fef11610c469bd0e2e1f7aa557

  3. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    You have been assigned to this deploy blocker because you recently merged this PR: #105137

  4. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    @lakchote @situchan you have been assigned to this deploy blocker because you reviewed the offending PR: #105137

  5. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    @Krishna2323 you have been assigned to this deploy blocker because you authored the offending PR: #105137

  6. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

    👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:

    1. Identify the pull request that introduced this issue and revert it.
    2. Find someone who can quickly fix the issue.
    3. Fix the issue yourself.
  7. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    💬 A slack conversation has been started in #expensify-open-source

  8. MelvinBot commented on Nov 3, 2026

    @MelvinBot
    Contributor

    Deploy blocker analysis

    Causing PR (medium-high confidence): Launch unified Connections: remove the beta and the pages it replaced. It shipped to staging in 9.5.28-4, the reported version. No other PR in the Deploy Checklist: New Expensify 2026-11-02 touches this path.

    Recommendation: Roll forward with a small fix in WorkspaceConnectionsPage.tsx. If a verified fix can't land quickly, revert #105137.

    Proposal

    What is the root cause of that problem?

    1. Launch unified Connections: remove the beta and the pages it replaced #105137 changed the "Connect to QuickBooks Online" Begin route from workspaces/<id>/accounting to workspaces/<id>/connections?tab=accounting (useGettingStartedItems.ts:299).
    2. The new Connections page clears that tab param as soon as it gets focus, using the global Navigation.setParams({tab: undefined}) with no route key (WorkspaceConnectionsPage.tsx:165-173).
    3. A keyless setParams goes to whichever navigator is focused at that moment (Navigation.ts:820-826). Begin from Home is a cross-tab push. If setParams runs before that push finishes, it rewrites the wrong route, and the app drops out of the workspace split navigator onto the Workspaces list.
    4. This only happens after you kill and reopen the app. On the first visit, the page shows a loading screen while it fetches connection data, so the page body (and setParams) mounts after navigation settles. The "already fetched" flag is saved in Onyx (usePolicyConnectionsPrefetch.ts:34-36), so after a restart the page mounts immediately, mid-push.

    The Workflows page had the same bug and was fixed with a guard. Its comment describes this exact failure (WorkspaceWorkflowsPageRevamp.tsx:135-143).

    What changes do you think we should make in order to solve the problem?

    In WorkspaceConnectionsPage.tsx:

    1. Set the initial selected tab from params?.tab, so selecting Accounting does not depend on an early clear.
    2. Stop calling the global Navigation.setParams on focus. Clear the param only for this screen: pass route.key and the navigator key, or use the screen's own navigation.setParams. Do it after the transition finishes, or when the user picks a tab or opens a panel.
    3. Test on HybridApp iOS and Android:
      • Repeat the repro steps. Begin should open Connections with the Accounting tab selected.
      • Back from an Accounting panel should still return to Connections.

    What alternative solutions did you explore? (Optional)

    Investigation notes

    💡 Suggested AI code review rule

    This is the second time a keyless setParams in a mount or focus effect has dropped a user out of the split navigator (Workflows, then Connections). A coding-standards rule could help the AI reviewer catch the next one. Proposed for Expensify/App:

    • Rule: CLEAN-REACT-PATTERNS-10 Scope setParams in mount and focus effects to the screen's own route
    • Condition: Flag Navigation.setParams(...) without a routeKey inside useEffect, useLayoutEffect, or useFocusEffect. Pass route.key (and the navigator key), use the screen's navigation.setParams, or clear the param from a user action instead.
    • Why: A keyless setParams goes to the focused navigator. If navigation is still in flight on mount, it rewrites the wrong route and drops the user out of the split navigator (this issue).
    • Search pattern: Navigation\.setParams\(\{[^}]*\}\) with only one argument, inside an effect body.
    • Offending code (❌): WorkspaceConnectionsPage.tsx:167-173
    • Fix (✅): LinkedActionNotFoundGuard.tsx:119 (keyed call), or the guard in WorkspaceWorkflowsPageRevamp.tsx:135-143

    If a maintainer thinks it's worth adding, they can open the full rule file in .claude/skills/app-coding-standards/ as a draft PR.


    Next Steps for Contributor+ team:
    To accept: @MelvinBot implement [this](https://github.com/Expensify/App/issues/105713) to create a draft PR.
    To refine: @MelvinBot <your feedback>
    To reject: Explain why you are rejecting Melvin's proposal.


    view run

  9. 2 remaining items

  10. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    ⚠️ Looks like this issue was linked to a Deploy Blocker here

    If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.

    If a regression has occurred and you are the assigned CM follow the instructions here.

    If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.

  11. Krishna2323 commented on Nov 3, 2026

    @Krishna2323
    Contributor

    PR is ready for review: #105735

  12. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    ⚠️ Looks like this issue was linked to a Deploy Blocker here

    If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.

    If a regression has occurred and you are the assigned CM follow the instructions here.

    If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.

  13. IuliiaHerets commented on Nov 3, 2026

    @IuliiaHerets

    Issue is not repro on iPhone 15 and Motorola Android 14, build 9.5.28-7

    Retest.105713.mp4
    Retest.android.mp4
  14. lakchote commented on Nov 3, 2026

    @lakchote
    Contributor

    Done

  15. added and removed
    ReviewingHas a PR in review
    on Nov 3, 2026
  16. changed the title [-]Hybrid - Connections - App navigate to Workspaces tab instead of Accounting after close[/-] [+][Due for payment 2026-11-10] Hybrid - Connections - App navigate to Workspaces tab instead of Accounting after close[/+] on Nov 3, 2026
  17. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    @Krishna2323 / @situchan

    The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.30-0 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:

    If no regressions arise, payment will be issued on 2026-11-10. 🎊

    The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the Contributor+ Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]. If no checklist is needed for this issue, you can click: [no checklist button]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugSomething is broken. Auto assigns a BugZero manager.DailyKSv2Engineering

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions