Fix: Onboarding - "Getting started" section is missing after selecting Other accounting system#95311
Conversation
|
@youssef-lr Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 79e4e148b1
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
trjExpensify
left a comment
There was a problem hiding this comment.
Can you write a description of the changes you're making in this PR under the section in the OP of the checklist for that?
I don't know how this has anything to do with clicking "Other" accounting system. 🤔
|
Thanks @trjExpensify! You're right that the accounting choice is a red herring — "Other accounting system" is just the path in the reporter's repro; the section disappearing has nothing to do with it. The actual cause is a timezone bug: firstDayFreeTrial is a UTC DB timestamp with no offset, but isWithinGettingStartedPeriod parsed it with new Date(...), which reads a timezone-less string as local time. For any user west of UTC, that puts the trial start in the future for the first few hours after signup → elapsed < 0 → the "Getting started" section is hidden. The fix parses it as UTC (fromZonedTime(..., 'UTC')) on the read side, and writes the optimistic trial dates in UTC on the write side (Policy.ts) so a pending/offline upgrade doesn't leave a local-clock string (which skews users east of UTC). Repro: set the device TZ to America/Los_Angeles, sign up, open Home immediately — missing before the fix, present after. I've added a full write-up to the OP. 🙏 |
|
@MelvinBot I'm the C+ for this PR. Could you assign me as a reviewer for it? |
|
@annaweber830, could you please add the information from #95311 (comment) to the Explanation of Change section of the PR checklist? |
|
🤖 Done — I've added |
|
Hi @huult I updated PR. |
|
@codex review |
|
Codex Review: Didn't find any major issues. Swish! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-07-08.at.14.28.24.movAndroid: mWeb ChromeScreen.Recording.2026-07-08.at.14.30.31.moviOS: HybridAppScreen.Recording.2026-07-08.at.14.35.12.moviOS: mWeb SafariScreen.Recording.2026-07-08.at.14.35.51.movMacOS: Chrome / SafariScreen.Recording.2026-07-08.at.14.24.15.mov2 |
|
@annaweber830 Could you add a unit test for this case? For example, mock |
Screen.Recording.2026-07-08.at.14.18.49.movScreen.Recording.2026-07-08.at.14.24.15.movI used Playwright to reproduce this issue and confirmed that the change fixes it and works as expected. I'm just waiting for @annaweber830 to add a unit test before I can approve the PR. |
|
Hi @huult I updated PR. |
|
@annaweber830 Could you please check the failed checks? |
|
Hi @huult I updated my PR. Please check |
|
Why do we need |
|
Hi @huult I updated my PR again. |
|
Hi @huult I removed code. please check |
|
@annaweber830 we've got ESLint failures. Could you merge main in? |
…tedPeriod.ts Co-authored-by: Issa Nimaga <issa.m.nimaga@gmail.com>
Co-authored-by: Issa Nimaga <issa.m.nimaga@gmail.com>
1266039 to
1c07bd1
Compare
|
Hi @inimaga
The failing lint errors are in src/libs/actions/Report/index.ts and tests/actions/IOUTest/SplitTest.ts — neither of which this PR touches. The eslint-seatbelt message shows the violation count exceeded the grandfathered limit due to changes in main unrelated to this PR. This is a pre-existing issue on main. |
|
Yeah. The lint failure is on main and affecting other PRs as well. Hold for now. |
|
@annaweber830 Could you merge main in again? The lint issues should now be fixed by this PR: #95671 |
|
thanks. I will merge |
…4135-getting-started-section
|
Hi @inimaga I merged main. |
|
🚧 inimaga has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/inimaga in version: 9.4.33-0 🚀
|
|
🤖 Help site review: no changes required. This PR is a timezone parsing bug fix, not a behavior or UI change. It corrects how the trial start date is parsed/written so the Getting started section on Home appears when it's supposed to — it does not change the conditions under which that section shows, nor any feature names, tab names, settings labels, or buttons. The existing help article already documents the intended behavior accurately, so the fix brings the app back into line with the docs rather than requiring an update:
Both already state the section appears only when the user selected manage my team / track and budget my expenses, is within the free-trial window, and has an active paid workspace — all still correct after this fix. No new or changed user-facing concept, label, or step is introduced. Because no documentation update is needed, I have not created a draft help site PR. @annaweber830, please confirm you agree no help site changes are needed here. If you'd like an article updated anyway (e.g. to clarify the trial-window behavior), reply with |
Explanation of Change
The actual cause is a timezone bug: firstDayFreeTrial is a UTC DB timestamp with no offset, but isWithinGettingStartedPeriod parsed it with new Date(...), which reads a timezone-less string as local time. For any user west of UTC, that puts the trial start in the future for the first few hours after signup → elapsed < 0 → the "Getting started" section is hidden.
The fix parses it as UTC (fromZonedTime(..., 'UTC')) on the read side, and writes the optimistic trial dates in UTC on the write side (Policy.ts) so a pending/offline upgrade doesn't leave a local-clock string (which skews users east of UTC).
Repro: set the device TZ to America/Los_Angeles, sign up, open Home immediately — missing before the fix, present after. I've added a full write-up to the OP.
Fixed Issues
$ #94135
PROPOSAL: #94135 (comment)
Tests
Offline tests
Same as tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
94135-android-AFTER.mp4
Android: mWeb Chrome
94135-mweb-chrome-device.mp4
iOS: Native
94135-ios-AFTER-fullflow.mp4
iOS: mWeb Safari
94135-mweb-safari.mp4
MacOS: Chrome / Safari
94135-AFTER-fixed.mp4