Remove stale LOOKING_AROUND onboarding message#79728
Conversation
|
@linhvovan29546 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] |
This comment was marked as outdated.
This comment was marked as outdated.
a051d67 to
cc09ce3
Compare
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: The diff is too large to include in this comment (143KB), so I've created a gist for you: 📋 View the translation diff here 📋 Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
f65d21e to
21b9c3b
Compare
|
Ok, this can be reviewed (header) and merged while the backend PR is reviewed (welcome message). These are the messages with the updated copy (cc @jamesdeanexpensify @danielrvidal). Since we’re still showing onboarding tasks for other intents, I left the copy for those messages unchanged. I only removed the extra messages for the “look around” intent, where we don’t create onboarding tasks.
|
|
Quick question - aren't we moving to a world where the Concierge welcome message varies based on intent + gives you three clickable options? Or is that what the message after this welcome message will be? Just making sure! |
Yes, but that's only for admins in the #admins room, we're depending on making Concierge responses faster, because sometimes the bespoke welcome message (based on the intent + onboarding selected options) takes minutes to be generated |
|
@marcochavezf I see that this change only affects the |
|
I think we should add a unit test as well. |
linhvovan29546
left a comment
There was a problem hiding this comment.
Could you please take a look at this comment: #79728 (comment)? We need to use the translated text from there. And it looks outdated could you please run the tool again and apply the fix?
src/languages/en.ts
Outdated
| usePlusButton: ({additionalText}: UsePlusButtonParams) => ` Use the + button to ${additionalText} an expense.`, | ||
| askConcierge: ' Ask me anything!', | ||
| conciergeSupport: 'Your personal AI agent', | ||
| askConcierge: ' Your 24/7 AI expense assistant is here to help.', |
There was a problem hiding this comment.
I don’t think we should add a leading space here, since it causes the Polyglot Parrot! tool to always produce diffs during auto-translation. Instead, we should manually add the leading space in the getWelcomeMessage function:
messageHtml += ` ${translate('reportActionsView.askConcierge')}`;
|
@marcochavezf from this comment, the welcome message copy in the first two screenshots doesn't flow well into the rest of the copy. I'm trying to think of something that works better. Maybe we can take a cue from these: |
|
@MelvinBot please address the feedback from @jamesdeanexpensify above. Specifically, James noted that the welcome message copy in the first two screenshots (for intents other than "look around") doesn't flow well into the rest of the onboarding copy that follows. He's asking to see what the unchanged welcome messages look like for those other intents, so we can figure out copy that transitions better into the onboarding tasks. Please share the current (unchanged) welcome message copy for the non-"look around" intents, and propose updated copy that flows more naturally into the subsequent onboarding task messages. |
|
@jamesdeanexpensify @marcochavezf — Here's a breakdown of the current (unchanged) welcome messages for each non-"look around" intent, followed by copy suggestions. Current (Unchanged) Welcome Messages by IntentThese are the messages that appear as the first Concierge message in the chat, before the onboarding tasks are listed:
After all the tasks, a sign-off message appears:
The Flow ProblemIn this PR, the new header subtext ( The first two screenshots show intents like Employer/Submit and Personal Spend. The chat flow reads:
The disconnect James is noting: the header says "AI expense assistant is here to help" but the welcome message immediately jumps into a specific how-to without acknowledging the AI assistant framing. Proposed Updated CopyHere are suggestions that bridge the AI assistant header into the task-based onboarding, organized by intent: Employer / Submit:
Personal Spend:
Chat & Split:
Admin:
Test Drive Receiver:
The Manage Team and Track Workspace intents already have their own long-form specialist messages ("Hey there, I'm your Expensify setup specialist..."), which have a different tone and likely don't need changes for this PR. Let me know which direction works best and I can help update the copy! |
|
@MelvinBot great analysis! The copy suggestions look good. Let's go with Option A for each intent — they feel more natural and maintain a consistent "I can help you..." voice that connects well with the "AI expense assistant" header. To summarize the chosen copy:
Please push a commit to this PR with these welcome message copy updates. The Manage Team and Track Workspace intents can stay as-is since they already have their own specialist framing. @jamesdeanexpensify — does this direction work for you? Happy to adjust if you'd prefer Option B or a different approach for any of these. 🤖 This comment was generated with the assistance of an AI tool. |
|
I ran out of time before I could finish helping you. This usually means the task was too complex or I got stuck exploring. Please try again with a more specific request or post in the #melvinbot-ai. Run details: https://github.com/Expensify/Expensify/actions/runs/21842977704 |
|
@MelvinBot Please rebase this PR onto main to resolve the merge conflicts in the 10 language files (de, en, es, fr, it, ja, nl, pl, pt-BR, zh-hans). Keep the PR branch wording for the 🤖 This comment was generated with the assistance of an AI tool. |
1cc5337 to
f7196f0
Compare
|
Rebased this PR onto latest What was done:
The PR is now mergeable with no conflicts. |
|
@codex @MelvinBot review |
🔍 PR ReviewSummaryThis PR removes the stale Failing CI Check
Root cause: There is an inconsistency between the
So the Suggested fix: Add the - if (!shouldUseFollowupsInsteadOfTasks) {
+ if (!shouldUseFollowupsInsteadOfTasks && message) {This would prevent pushing an empty-message report action into optimistic data, which is consistent with not including it in Code Review
Unresolved DiscussionThere was a discussion thread with Bottom LineThe functional logic is sound. The one fix needed is adding |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 13b8b207f5
ℹ️ 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".
|
@marcochavezf I agree with the suggestions from Melvin and Codex. Without those changes, we optimistically display an empty message, see the attached below. Screen.Recording.2026-03-04.at.15.30.17.mov |
The LOOKING_AROUND intent still sent a support-era message about expenses, travel, and corporate card management, which conflicts with the new AI-focused Concierge welcome shipped in PRs #81331/#81774. This narrows the PR scope to only the LOOKING_AROUND cleanup: - Remove onboardingLookingAroundMessage from all 10 language files - Set message to empty string for LOOKING_AROUND in OnboardingFlow.ts - Add message guard to prevent pushing empty messages to guidedSetupData - Add skipSignOff logic to suppress "It's great to meet you!" for LOOKING_AROUND - Add unit tests for LOOKING_AROUND onboarding behavior Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simplify the sign-off suppression test to avoid unsafe-return and unsafe-member-access lint errors by checking guidedSetupData length and optimistic data keys instead of inspecting untyped action values. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…OOKING_AROUND When LOOKING_AROUND is selected and the message is empty, prepareOnboardingOnyxData was still creating a textCommentAction entry in optimisticData, successData, and failureData. This created a local-only empty comment action that the backend never receives. Guard all three data arrays with the same `message` check already used for guidedSetupData. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
13b8b20 to
3e58e6b
Compare
|
Thanks @linhvovan29546, the suggested changes were applied to remove the empty bubble due to the empty message. Ready for review! |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-03-05.at.06.54.35.movAndroid: mWeb ChromeScreen.Recording.2026-03-05.at.06.55.31.moviOS: HybridAppScreen.Recording.2026-03-05.at.06.52.59.moviOS: mWeb SafariScreen.Recording.2026-03-05.at.06.51.20.mov |
…sage When skipSignOff is true and there is no message (e.g., LOOKING_AROUND onboarding choice), we already skip the optimistic message action. This change also skips setting lastVisibleActionCreated in that case, so the "new message" indicator displays correctly during offline onboarding. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
🎯 @linhvovan29546, thanks for reviewing and testing this PR! 🎉 An E/App issue has been created to issue payment here: #84345. |
|
🚧 @inimaga has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/inimaga in version: 9.3.33-0 🚀
|
|
🚀 Deployed to production by https://github.com/luacmartins in version: 9.3.33-5 🚀
|




Explanation of Change
This PR narrows the scope of #588910 to only clean up the
LOOKING_AROUNDonboarding intent. TheaskConciergeandconciergeSupportcopy updates were already shipped via PRs #81331 and #81774, so this PR no longer touches those strings.Problem: When a user selects "Looking around" during onboarding, Concierge sends a stale support-era message: "Expensify is best known for expenses, travel, and corporate card management..." This conflicts with the new AI-focused welcome message already shipped on the backend.
Fix:
onboardingLookingAroundMessagefrom all 10 language files (en, de, es, fr, it, ja, nl, pl, pt-BR, zh-hans)message: ''for theLOOKING_AROUNDintent inOnboardingFlow.ts&& messageguard toguidedSetupData,optimisticData,successData, andfailureDatato prevent creating empty comment actions — without this, an empty optimistic message bubble appears in the Concierge chatskipSignOfflogic so the "It's great to meet you!" sign-off is suppressed forLOOKING_AROUNDLOOKING_AROUNDonboarding behaviorOnboarding intent scenarios (side-by-side):
Fixed Issues
$ https://github.com/Expensify/Expensify/issues/588910
Tests
Offline tests
No offline-specific behavior changes. The onboarding message is constructed at onboarding time, not fetched from network.
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, 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.ScrollViewcomponent to make it scrollable when more elements are added to the page.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
Static text removal only - no visual changes beyond message absence
Android: mWeb Chrome
Static text removal only - no visual changes beyond message absence
iOS: Native
Static text removal only - no visual changes beyond message absence
iOS: mWeb Safari
Static text removal only - no visual changes beyond message absence
MacOS: Chrome / Safari
Static text removal only - no visual changes beyond message absence