You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Due for payment 2026-11-10] Hybrid - Connections - App navigate to Workspaces tab instead of Accounting after close #105713
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:
Log in with a new account
Complete onboarding with "Manage my team's expenses" and pick QuickBooks Online.
Tap the Begin button on Connect to QuickBooks Online
Return to the Home tab
Close the app from the background and reopen
Tap the Begin button on Connect to QuickBooks Online again
Expected Result:
The Begin button opens Connections on the Accounting tab on the Connections
👋 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:
Identify the pull request that introduced this issue and revert it.
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).
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.
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.
What changes do you think we should make in order to solve the problem?
In WorkspaceConnectionsPage.tsx:
Set the initial selected tab from params?.tab, so selecting Accounting does not depend on an early clear.
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.
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)
Copy the Workflows pattern: save the tab in Onyx and only clear a param this mount handed over.
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.
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.
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
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]
Activity
applause-bot commentedon Nov 3, 2026
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
melvin-bot commentedon Nov 3, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #105137
melvin-bot commentedon Nov 3, 2026
@lakchote @situchan you have been assigned to this deploy blocker because you reviewed the offending PR: #105137
melvin-bot commentedon Nov 3, 2026
@Krishna2323 you have been assigned to this deploy blocker because you authored the offending PR: #105137
github-actions commentedon Nov 3, 2026
👋 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:
melvin-bot commentedon Nov 3, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Nov 3, 2026
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?
workspaces/<id>/accountingtoworkspaces/<id>/connections?tab=accounting(useGettingStartedItems.ts:299).tabparam as soon as it gets focus, using the globalNavigation.setParams({tab: undefined})with no route key (WorkspaceConnectionsPage.tsx:165-173).setParamsgoes to whichever navigator is focused at that moment (Navigation.ts:820-826). Begin from Home is a cross-tab push. IfsetParamsruns before that push finishes, it rewrites the wrong route, and the app drops out of the workspace split navigator onto the Workspaces list.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:params?.tab, so selecting Accounting does not depend on an early clear.Navigation.setParamson focus. Clear the param only for this screen: passroute.keyand the navigator key, or use the screen's ownnavigation.setParams. Do it after the transition finishes, or when the user picks a tab or opens a panel.What alternative solutions did you explore? (Optional)
Investigation notes
navigateToWorkspacesPage.getAdaptedStateFromPath.💡 Suggested AI code review rule
This is the second time a keyless
setParamsin 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 forExpensify/App:CLEAN-REACT-PATTERNS-10ScopesetParamsin mount and focus effects to the screen's own routeNavigation.setParams(...)without arouteKeyinsideuseEffect,useLayoutEffect, oruseFocusEffect. Passroute.key(and the navigator key), use the screen'snavigation.setParams, or clear the param from a user action instead.setParamsgoes 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).Navigation\.setParams\(\{[^}]*\}\)with only one argument, inside an effect body.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
2 remaining items
melvin-bot commentedon Nov 3, 2026
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.
Krishna2323 commentedon Nov 3, 2026
PR is ready for review: #105735
fix: restore Connections tab param scoping and the accounting help link
melvin-bot commentedon Nov 3, 2026
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.
IuliiaHerets commentedon Nov 3, 2026
Issue is not repro on iPhone 15 and Motorola Android 14, build 9.5.28-7
Retest.105713.mp4
Retest.android.mp4
lakchote commentedon Nov 3, 2026
Done
[-]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[/+]melvin-bot commentedon Nov 3, 2026
@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]