Skip to content

[Due for payment 2026-10-23] [$175] Onboarding - Error message mentions "undefined" when work email is Expensifail account #104005

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: 9.5.9-0
Reproducible in staging?: Yes
Reproducible in production?: N/A - new feature, doesn't exist in prod
If this was caught during regression testing, add the test name, ID and link from BrowserStack: #103652
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team
Bug source: Exploratory - Significant User Experience Deterioration
Device used: Mac 26.5 / Chrome
App Component: Other

Action Performed:

1 .Go to staging.new.expensify.com
2. Log in with a new Gmail account.
3. On work email step, click Skip.
4. Select Join my company workspace.
5. Enter any Expensifail account > Add work email.
6. Click app back button.

Expected Result:

Error message will show "applause.expensifail.com is a domain controlled login for an existing Expensify account.".

Actual Result:

Error message shows "undefined is a domain controlled login for an existing Expensify account.".

Workaround:

Unknown

Platforms:

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

Screenshots/Videos

Bug7286326_1791988165710.2.mp4

View all open jobs on GitHub

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

Upwork Automation - Do Not Edit
Issue OwnerCurrent Issue Owner: @abzokhattab

Activity

  1. added
    DeployBlockerCashThis issue or pull request should block deployment
    BugSomething is broken. Auto assigns a BugZero manager.
    on Oct 14, 2026
  2. applause-bot commented on Oct 14, 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/69346b24961269d31797e1f9a6b806bf2e1f5e1b250cd9ad1c4abd6b8da29591

  3. melvin-bot commented on Oct 14, 2026

    @melvin-bot

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

  4. melvin-bot commented on Oct 14, 2026

    @melvin-bot

    @iwiznia @abzokhattab you have been assigned to this deploy blocker because you reviewed the offending PR: #103652

  5. melvin-bot commented on Oct 14, 2026

    @melvin-bot

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

  6. github-actions commented on Oct 14, 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 Oct 14, 2026

    @melvin-bot

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

  8. MelvinBot commented on Oct 14, 2026

    @MelvinBot
    Contributor

    Deploy Blocker Analysis

    Causing PR: [Payment due @abzokhattab] Add the join-workspace onboarding intent and Concierge follow up tasks (high confidence). This is a frontend bug in App, not a backend issue.

    Root cause: That PR added a back button to the work email screen for the join-workspace intent. The button only navigates back to the Purpose screen. It doesn't clear the onboarding error state. The Purpose screen then shows the leftover domainControlledSubtitle error but translates it without the email, so the text reads "undefined is a domain controlled login…".

    Recommended fix (roll forward, no revert needed): Clear the error state in the back handler at BaseOnboardingWorkEmail.tsx:365. The file already imports clearOnboardingMergeAccountBlocked.

    onBackButtonPress={() => {
        clearOnboardingMergeAccountBlocked();
        Navigation.goBack(ROUTES.ONBOARDING_PURPOSE.getRoute());
    }}

    If the fix can't land quickly, revert the PR instead. It's large and was already reverted and re-landed once, so a one-line fix is the safer choice.

    Investigation details
    1. AddWorkEmail fails with the domain-controlled error. The app saves the key onboarding.mergeBlockScreen.domainControlledSubtitle and sets isMergingAccountBlocked: true (Session/index.ts:1786-1793).
    2. That translation needs the email passed in: (workEmail: string | undefined) => ... (en.ts:3645). The blocked view passes it correctly (OnboardingMergingAccountBlockedView.tsx:42-44).
    3. The blocked view's Confirm button clears the error (BaseOnboardingWorkEmail.tsx:274-278). The new back button skips that step (BaseOnboardingWorkEmail.tsx:363-368).
    4. The Purpose screen translates any leftover error with no arguments (BaseOnboardingPurpose.tsx:253), so workEmail becomes undefined.

    Why it happens only on staging: The domain-controlled message and the Purpose error line are already in production. Before this PR, the work email screen had no back button, so you couldn't reach Purpose with the error still set.

    Other notes:

    • The fix also stops other onboarding errors (2FA, SSO, closed account) from showing up on Purpose after a back press.
    • The issue expects the domain (applause.expensifail.com), but the message inserts the full work email. That matches what the blocked view already shows.
    • I didn't reproduce this in a browser. The analysis is based on the code.

    Next Steps: Reply with @MelvinBot implement this to create a draft PR, or @MelvinBot <your feedback> to refine this analysis.


    view run

  9. 21 remaining items

  10. melvin-bot commented on Oct 22, 2026

    @melvin-bot

    Triggered auto assignment to @mallenexpensify (Awaiting Payment)

  11. melvin-bot commented on Oct 22, 2026

    @melvin-bot

    Payment Summary

    Resolving PRs:

    BugZero Checklist (@mallenexpensify)

    • I have confirmed assignees, roles, and Upwork contracts look correct
    • I have paid out Upwork contracts / manual NewDot requests
    • [BugZero Assignee] I have created a GH issue for creating/updating the regression test once above steps have been agreed upon
  12. mallenexpensify commented on Oct 26, 2026

    @mallenexpensify
    Contributor

    @abzokhattab plz complete the Contributor+ checklist and tag me in a post once you have. Thx

  13. melvin-bot commented on Oct 29, 2026

    @melvin-bot

    @mallenexpensify Whoops! This issue is 2 days overdue. Let's get this updated quick!

  14. mallenexpensify commented on Oct 30, 2026

    @mallenexpensify
    Contributor

    @abzokhattab plz complete the Contributor+ checklist and tag me in a post once you have. Thx

  15. abzokhattab commented on Oct 30, 2026

    @abzokhattab
    Contributor

    This is a part of the submit workspace ... closing

    cc @garrettmknight

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

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionBugSomething 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