Skip to content

Add the join-workspace onboarding intent and Concierge follow up tasks - #99833

Merged
carlosmiceli merged 218 commits into
mainfrom
cm-join-workspace-intent-672346
Oct 7, 2026
Merged

carlosmiceli merged 218 commits into
mainfrom
cm-join-workspace-intent-672346

Conversation

@carlosmiceli

@carlosmiceli carlosmiceli commented Aug 29, 2026 •

Copy link
Copy Markdown
Contributor

Explanation of Change

Adds a Join my company workspace onboarding intent. Public-email accounts add a work email, unvalidated private-domain accounts validate their email, and validated private-domain accounts see joinable workspaces.

When a user skips a step, Concierge creates the matching Add your work email, Validate your email, or Join your company's workspace task. Opening and completing a task resumes the sequence. When no workspace is available, Concierge posts an explanation instead of another task.

Depends on:

Fixed Issues

$ https://github.com/Expensify/Expensify/issues/672346

PROPOSAL:

Tests

Test 1 - Complete joining a workspace during onboarding

  1. Sign up with a private-domain account with a joinable workspace.
  2. Start onboarding and select Join my company workspace.
  3. Verify the joinable-workspaces list opens directly.
  4. Tap Join now and verify onboarding completes.
  5. Verify the account becomes a workspace member.
  6. Verify there are no Concierge tasks created.
Screen.Recording.2026-09-17.at.10.43.36.AM.mov

Test 2 - Start from the Add your work email Concierge task

  1. Sign up with a public email.
  2. Select Join my company workspace.
  3. On What's your work email?, tap Skip and complete onboarding.
  4. Open Concierge and verify exactly one Add your work email task appears.
  5. Open the task, then select the Add work email link in its description.
  6. Enter a new private-domain email, and tap Add work email.
  7. Enter the validation code sent to that address.
  8. Verify the task completes, the workspace list opens, and you can successfully join a workspace.
Screen.Recording.2026-09-17.at.10.45.07.AM.mov

Test 3 - Start from the Validate your email Concierge task

  1. Sign up with a public email.
  2. Select Join my company workspace.
  3. Verify the email-validation screen opens without another work-email prompt.
  4. Tap Skip and complete onboarding.
  5. Open Concierge and verify exactly one Validate your email task appears.
  6. Open the task, then select Validate your account in its description.
  7. Validate the account.
  8. Verify the task completes and the workspace list opens.
Screen.Recording.2026-09-17.at.10.46.26.AM.mov

Test 4 - Start from the Join your company's workspace Concierge task

  1. Sign up with a public email.
  2. Select Join my company workspace and verify the workspace list opens directly.
  3. Tap Skip and verify onboarding completes.
  4. Open Concierge and verify exactly one Join your company's workspace task appears.
  5. Open the task, then select Join a workspace in its description.
  6. Verify the workspace list opens with a close button.
  7. Close the list and verify the App returns to the task thread without restarting onboarding.
Screen.Recording.2026-09-17.at.11.24.22.AM.mov

Test 5 - Validated public-email account takeover protection

  1. Validate a public-email account, select Join my company workspace, and skip the work-email step.
  2. Verify an Add your work email task is created.
  3. Enter a private-domain email and tap Add work email.
  4. Verify error message appears.
  5. Tap Confirm and verify the App returns to the task thread.
Screen.Recording.2026-09-17.at.11.25.36.AM.mov
  • Verify that no errors appear in the JS console

Offline tests

QA Steps

Same as Tests.

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English.
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes
  • If a new CSS style is added I verified that a similar style does not already exist and existing StyleUtils cannot create it
  • If new assets were added or existing ones were modified, I verified that they are optimized and load correctly across all supported platforms
  • If the PR modifies code that runs when editing or sending messages, I tested all supported markdown
  • If the PR modifies a generic component, I verified its other usages
  • If the PR modifies a component related to existing Storybook stories, I verified all related stories
  • If the PR modifies a directly accessible component or page, I verified logged-in and logged-out deeplinks
  • If the PR modifies UI or form styles, I verified form alignment and added the Design label and/or tagged @Expensify/design
  • I added unit tests for the new behavior
  • If main was merged after review, I tested again according to the Test steps

Screenshots/Videos

Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari

@abzokhattab

Copy link
Copy Markdown
Contributor

I will be OOO tomorrow (Wednesday). I will have a look when I get back ... In the meantime, if @hungvu193 has time to review, that would be great

@hungvu193

Copy link
Copy Markdown
Contributor

Sure I'll be on it today

@hungvu193

Copy link
Copy Markdown
Contributor

All yours @iwiznia

@carlosmiceli
carlosmiceli merged commit a76ba9e into main Oct 7, 2026
45 of 47 checks passed
@carlosmiceli
carlosmiceli deleted the cm-join-workspace-intent-672346 branch October 7, 2026 20:10
@OSBotify

OSBotify commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

🚧 carlosmiceli has triggered a test Expensify/App build. You can view the workflow run here.

@OSBotify OSBotify mentioned this pull request Oct 8, 2026
90 tasks done
@OSBotify

OSBotify commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/carlosmiceli in version: 9.5.6-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

MelvinBot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

A help site update is needed. I opened Docs updates for E/A#99833 Add Join my company workspace option to help article as a draft.

Why: This PR adds a new Join my company workspace onboarding option. It isn't behind a beta, so all new users see it.

Change: Join Your Company's Workspace only described joining through an admin invite. I added one paragraph after the invite steps. It says users can select Join my company workspace during sign-up, verify their work email, and then click Join now or Ask to join.

I confirmed What do you want to do today? and Join my company workspace in the live web app.

@carlosmiceli, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR Ready for review


view run · view recording

@nlemma

nlemma commented Oct 8, 2026

Copy link
Copy Markdown

Deploy Blocker #99833 was identified to be related to this PR.

@nlemma

nlemma commented Oct 8, 2026

Copy link
Copy Markdown

Deploy Blocker #103530 was identified to be related to this PR.

@mitarachim

Copy link
Copy Markdown

Deploy Blocker #103545 was identified to be related to this PR.

@IuliiaHerets

Copy link
Copy Markdown

Hi @carlosmiceli. Tests 3 and 5 passed by QA team.

bandicam.2026-10-09.14-47-26-215.1.mp4
99833w-4.mp4

Tests 2 and 4 require the email to be received at a private-domain email. But the email is not sent to a temporary email. It's a blocker.

99833w-1.mp4

For Test 1, we don't have a domain that already has workspaces to join.

Could you verify tests 1, 2, and 4 internally?

cc @iwiznia @garrettmknight @abzokhattab @hungvu193

allgandalf pushed a commit to allgandalf/App that referenced this pull request Oct 9, 2026
…kspace-intent-672346"

This reverts commit a76ba9e, reversing
changes made to 2328c9a.
@OSBotify

OSBotify commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/puneetlath in version: 9.5.6-6 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

Bundle Size Analysis (Sentry):

@OSBotify

OSBotify commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/carlosmiceli in version: 9.5.7-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

Copy link
Copy Markdown
Contributor

No new docs PR is needed, and the existing one should be held: Revert join-workspace onboarding changes removed this feature from main.

I recommend you put the docs PR on hold until the re-land reaches production, or close it. Once the re-land merges, ask me on that PR and I'll check whether the docs edit still matches.


view run

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.