8000 Merge Main by stephanieelliott · Pull Request #84829 · Expensify/App · GitHub
[go: up one dir, main page]

Skip to content

Merge Main #84829

Merged
stephanieelliott merged 0 commit intohelpsite-consolidate-v2from
main
Mar 11, 2026
Merged

Merge Main #84829
stephanieelliott merged 0 commit intohelpsite-consolidate-v2from
main

Conversation

@stephanieelliott
Copy link
Contributor

Explanation of Change

Fixed Issues

$
PROPOSAL:

Tests

  • Verify that no errors appear in the JS console

Offline tests

QA Steps

// TODO: These must be filled out, or the issue title must include "[No QA]."

  • 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 any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • 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 shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • 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 (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

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

@stephanieelliott stephanieelliott requested review from a team and tgolen as code owners March 11, 2026 01:08
@melvin-bot melvin-bot bot requested review from deetergp and joekaufmanexpensify and removed request for a team March 11, 2026 01:08
@melvin-bot
Copy link
melvin-bot bot commented Mar 11, 2026

@deetergp 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]

@melvin-bot melvin-bot bot removed the request for review from a team March 11, 2026 01:09
@stephanieelliott
Copy link
Contributor Author

@MelvinBot can you resolve the conflicts?

Please Accept Current Change for:

  • docs/_includes/Ihn-template.html
  • docs/_includes/section.html

Please accept incoming change for:

  • docs/articles/new-expensify/billing-and-subscriptions/Plan-types-
    and-pricing-md
  • docs/redirects.csv

@MelvinBot
Copy link
Contributor
8000

I attempted to resolve the conflicts on this PR, but the helpsite-consolidate-v2 branch and main have no common merge base (unrelated histories). This means merging produces 2,266 conflicting files — not just the 4 files mentioned.

The 4 files you specified instructions for are only a small subset of the total conflicts. Resolving all 2,266 files is beyond what I can safely do without risking unintended changes across the entire codebase.

Recommended approach: This merge may need to be handled manually, or the branch strategy may need to be reconsidered (e.g., rebasing helpsite-consolidate-v2 onto main to establish a shared history, or cherry-picking the docs-specific commits onto a branch created from main).

Copy link
@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 88df7ab0be

ℹ️ 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".

Comment on lines +109 to +111
core.warning(`PR #${prNumber} diff is too large for the GitHub API. Skipping incremental change detection.`);
core.setOutput('CHANGED_FILES', JSON.stringify([]));
core.setOutput('HAS_CHANGES', false);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fall back to local change signal on too_large PR diffs

When the PR diff API returns too_large, this branch forces HAS_CHANGES to false and exits. In .github/workflows/generateTranslations.yml, every downstream translation step is guarded by steps.check-en-changes.outputs.HAS_CHANGES == 'true', so a large PR that actually updates src/languages/en.ts will silently skip translation generation and the PR hint comment. This should fall back to the local diff signal (or fail explicitly) instead of suppressing changes.

Useful? React with 👍 / 👎.

Comment on lines +17 to +20
per_page: queueLimit,
});

return response.data.workflow_runs.filter((workflowRun) => workflowRun.id < currentRunID && ACTIVE_STATUSES.has(workflowRun.status ?? ''));

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Paginate workflow run queries before enforcing FIFO queue

This action only checks a single page of workflow runs (per_page: queueLimit) and then decides whether older runs are still active. In .github/workflows/testBuildOnPush.yml the action is called with defaults, so only the newest 20 runs are considered; if an older run is still active but has been pushed past that window by many newer completed runs, the queue step can incorrectly proceed and violate FIFO ordering.

Useful? React with 👍 / 👎.

@github-actions
Copy link
Contributor

HelpDot Documentation Review

Overall Assessment

This "Merge Main" PR brings in two sets of HelpDot documentation changes from previously merged PRs: (1) 30 new Xero troubleshooting articles for Expensify Classic covering authentication, connection, export, and sync errors (from PR #84822), and (2) a file move of the UK-and-EU-Expensify-Card article to a Hidden folder with noindex/sitemap flags plus a redirect entry (from PR #84469). The Xero articles represent a substantial and well-structured addition to the help site, while the UK/EU card move is a straightforward content management operation.

Scores Summary

  • Readability: 8/10 - Articles are clearly written with short sentences, logical flow, and accessible language well below 8th-grade reading level. The consistent structure (error display, explanation, fix steps, FAQ) makes each article highly scannable. Minor deduction: the formulaic repetition across 30 articles sometimes reads as boilerplate, and a few explanation sections could be more concise.
  • AI Readiness: 8/10 - Strong YAML metadata across all files with properly structured title, description, keywords, and internalScope fields following the required pattern. Headings are descriptive and include full error codes and task phrasing. Minor deduction: several articles are exact duplicates placed in multiple category folders (e.g., XERO01, XERO45, XERO84 appear identically in Authentication, Connection, and Sync folders), which could confuse AI retrieval with identical content under different paths. Also, some heading hierarchy uses ### subheadings (e.g., "### Reconnect the Xero Integration in the Workspace") rather than sticking strictly to # and ## only.
  • Style Compliance: 7/10 - Generally follows Expensify voice and tone. Correct use of "Workspace" terminology throughout. FAQ sections properly use # FAQ with ## subheadings. However, there are notable issues: (a) FAQ heading capitalization is inconsistent -- most use Title Case for every word (e.g., "Should I Retry the Export Before Contacting Concierge?") rather than sentence case; (b) the UK/EU card redirect entry appears malformed; (c) some articles use ### headings within how-to sections, which violates the # and ## only guideline.

Key Findings

Positive aspects:

  • Excellent consistency across all 30 Xero troubleshooting articles -- each follows the same pattern: error message display, "Why it happens" section, "How to fix" section with numbered steps, and FAQ
  • YAML frontmatter is thorough and well-crafted on every article, with proper internalScope following the prescribed format
  • Clear, actionable step-by-step instructions that a Workspace Admin can follow without ambiguity
  • Good use of bold formatting for UI elements and important terms
  • Horizontal rules (---) used consistently to separate major sections
  • The Xero-FAQ.md file is a valuable addition that covers common cross-cutting issues not tied to a specific error code

Issues to address:

  • Duplicate content across folders: XERO01, XERO45, XERO84, XERO11 articles appear as identical copies in multiple Troubleshooting subfolders (Authentication-and-Login-errors, Connection-errors, Sync-Errors). While this may be intentional for navigation purposes, it creates maintenance burden and potential SEO/AI confusion with identical content on different URLs
  • Malformed redirect: The redirect entry https://help.expensify.com/articles/new-expensify/expensify-card/docs/articles/new-expensify/expensify-card/UK-and-EU-Expensify-Card has a duplicated path segment (docs/articles/new-expensify/expensify-card/ embedded within the URL), and the target URL https://help.expensify.com/unlisted/UK-and-EU-Expensify-Card.md includes the .md extension, which is typically not included in help site URLs
  • Heading hierarchy violations: Several articles use ### level headings (e.g., "### Save Your Workspace Configuration", "### Reconnect the Xero Integration in the Workspace") where the guidelines specify only # and ## should be used
  • FAQ question capitalization: FAQ questions use Title Case throughout (e.g., "Does This Error Affect All Exports?") rather than sentence case as suggested by style guidelines (e.g., "Does this error affect all exports?")
  • UK/EU card article section numbering inconsistency: The numbered headings jump from "## 1. How to enable the Expensify Card" to unnumbered "## How to link a bank account" and "## How to issue virtual Expensify Cards" -- the numbering is incomplete

Recommendations

  1. High priority -- Fix the malformed redirect: The redirect source URL in docs/redirects.csv contains a duplicated path and the target includes .md. Verify and correct both the source and destination URLs
  2. Medium priority -- Address duplicate articles: Consider using a canonical URL strategy or consolidating duplicate Xero error articles (XERO01, XERO11, XERO45, XERO84) into a single file per error code, with redirects from the category-specific paths. This reduces maintenance burden and avoids AI/search confusion
  3. Low priority -- Standardize heading levels: Replace ### headings with ## throughout the Xero troubleshooting articles to comply with the heading hierarchy guideline
  4. Low priority -- Normalize FAQ capitalization: Switch FAQ questions from Title Case to sentence case for consistency with style guidelines
  5. Low priority -- Complete section numbering: In the UK/EU Expensify Card article, either number all how-to sections or remove numbering entirely for consistency

Files Reviewed

  • docs/Hidden/UK-and-EU-Expensify-Card.md -- Moved from new-expensify/expensify-card path; added noindex/sitemap flags, horizontal rules, and a hidden comment about publishing. Content is sound but section numbering is inconsistent
  • docs/redirects.csv -- New redirect entry for UK/EU card article; redirect URL appears malformed with duplicated path segment and .md extension in target
  • docs/articles/expensify-classic/connections/xero/Troubleshooting/Authentication-and-Login-errors/ (4 files: XERO01, XERO11, XERO45, XERO84) -- New authentication error troubleshooting articles. Well-structured with clear fix steps
  • docs/articles/expensify-classic/connections/xero/Troubleshooting/Connection-errors/ (3 files: XERO01, XERO45, XERO84) -- Duplicates of articles also in Authentication folder
  • docs/articles/expensify-classic/connections/xero/Troubleshooting/Export-Errors/ (16 files: XERO01, XERO08, XERO14, XERO27, XERO31, XERO33, XERO44, XERO52, XERO56, XERO68, XERO76, XERO78, XERO83, XERO87, XERO93, XERO95, XERO99) -- Comprehensive set of export error articles covering diverse scenarios
  • docs/articles/expensify-classic/connections/xero/Troubleshooting/Sync-Errors/ (5 files: XERO01, XERO11, XERO45, XERO73, XERO84) -- Sync error troubleshooting; some are duplicates of Authentication articles
  • docs/articles/expensify-classic/connections/xero/Troubleshooting/Xero-FAQ.md -- Valuable general FAQ covering export failures, company card mapping, and connection issues

Note: This review covers only the HelpDot documentation changes within this Merge Main PR. The majority of the 3,915 changed files are infrastructure, CI/CD, and application code changes that are outside the scope of this documentation review.


---

## 1. How to enable the Expensify Card on your workspace
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Readability / heading inconsistency: This heading uses a numbered prefix ("1.") but the subsequent peer-level headings (line 79, 87) do not use numbers. Either number all step headings consistently or remove the "1." prefix here to match the rest.

Suggested change
## 1. How to enable the Expensify Card on your workspace
## How to enable the Expensify Card on your workspace


---

## How to link a bank account to settle the Expensify Card
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Markdown formatting violation: Extra whitespace between ## and the heading text (## How to link). This should be a single space.

Suggested change
## How to link a bank account to settle the Expensify Card
## How to link a bank account to settle the Expensify Card


1. Have a GBP or EUR bank account connected. To connect one, [Enable Global Reimbursement](https://help.expensify.com/articles/new-expensify/wallet-and-payments/Enable-Global-Reimbursement).
2. Complete the **[Know Your Customer (KYC)](https://launch-workflow.trulioo.com/68223577c5dae52a6ec9347f)** and **[Know Your Business (KYB)](https://launch-workflow.trulioo.com/681a7cc4e65d2e48f19de9c3)** forms.
3. Share the last 90 days of statements from your connected GBP or EUR bank account with Concierge so they can assess your eligible limit
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Readability: This sentence is missing a period at the end, inconsistent with the other numbered items in this list.

Suggested change
3. Share the last 90 days of statements from your connected GBP or EUR bank account with Concierge so they can assess your eligible limit
3. Share the last 90 days of statements from your connected GBP or EUR bank account with Concierge so they can assess your eligible limit.

- Sweden
- United Kingdom

## What are the pre-requisites to set up the Expensify Card in the UK and EU
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI Readiness / heading clarity: The heading "What are the pre-requisites" uses an informal phrasing and the hyphenated "pre-requisites" is nonstandard. Consider rephrasing to a clearer task-oriented heading.

Suggested change
## What are the pre-requisites to set up the Expensify Card in the UK and EU
## Prerequisites for setting up the Expensify Card in the UK and EU


---

## Reopen the Invoice in the Workspace and Create a New Invoice
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading level violation: This ## heading and the one on line 60 are fix options that fall under the "How to Fix the XERO44 Export Error" section (line 34). They should be ### subheadings to maintain proper heading hierarchy. Using ## makes them appear as top-level peers of the "How to Fix" section, which breaks the document's logical structure.

Suggested change
## Reopen the Invoice in the Workspace and Create a New Invoice
### Reopen the Invoice in the Workspace and Create a New Invoice


---

## Manually Recreate the Invoice in Xero
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading level violation: Same as line 40 -- this should be a ### subheading under the "How to Fix" section to maintain correct hierarchy.

Suggested change
## Manually Recreate the Invoice in Xero
### Manually Recreate the Invoice in Xero


---

## Recreate the Report in the Workspace
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading level violation: This ## heading and the one on line 60 are fix options under the "How to Fix the XERO76 Export Error" section (line 34). They should be ### subheadings to preserve heading hierarchy, consistent with all other Xero articles in this PR.

Suggested change
## Recreate the Report in the Workspace
### Recreate the Report in the Workspace


---

## Manually Recreate the Bill in Xero
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading level violation: Should be ### to nest under the "How to Fix" section.

Suggested change
## Manually Recreate the Bill in Xero
### Manually Recreate the Bill in Xero

https://help.expensify.com/unlisted/avoiding-duplicates,https://help.expensify.com/expensify-classic/hubs/expenses/How-to-prevent-duplicate-expenses
https://help.expensify.com/articles/new-expensify/settings/title:%20Personal-Expense-Rules,https://help.expensify.com/articles/new-expensify/settings/Personal-Expense-Rules
https://help.expensify.com/articles/expensify-classic/expenses/Export-%20Expenses-from-the-Expenses-Page,https://help.expensify.com/articles/expensify-classic/expenses/Export-Expenses-from-the-Expenses-Page
https://help.expensify.com/articles/new-expensify/expensify-card/docs/articles/new-expensify/expensify-card/UK-and-EU-Expensify-Card,https://help.expensify.com/unlisted/UK-and-EU-Expensify-Card.md
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Readability / broken redirect URL: Two issues with this redirect entry:

  1. Source URL has a duplicate path segment: articles/new-expensify/expensify-card/docs/articles/new-expensify/expensify-card/ appears to be a malformed URL that concatenates the path twice. The source should likely be just https://help.expensify.com/articles/new-expensify/expensify-card/UK-and-EU-Expensify-Card.

  2. Destination URL includes .md extension: The target URL ends with UK-and-EU-Expensify-Card.md, but help site URLs should not include file extensions. It should also point to the Hidden path: https://help.expensify.com/Hidden/UK-and-EU-Expensify-Card.

Suggested fix:

https://help.expensify.com/articles/new-expensify/expensify-card/UK-and-EU-Expensify-Card,https://help.expensify.com/Hidden/UK-and-EU-Expensify-Card

internalScope: Audience is Workspace Admins using the Xero integration. Covers resolving the XERO01 error caused by connection issues between Expensify and Xero. Does not cover specific Xero permission or configuration troubleshooting steps.
---

# XERO01 Error in Xero Integration
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI Readiness / content duplication concern: This file is a byte-identical duplicate of XERO01-Error.md in three other directories: Authentication-and-Login-errors/, Export-Errors/, and Sync-Errors/. Similarly, XERO11, XERO45, and XERO84 are duplicated across multiple directories.

Duplicate content creates maintenance risk (updates must be applied in 3-4 places) and can confuse AI retrieval systems that surface the same answer from different URLs. Consider keeping each error article in one canonical location and using redirects from the other paths, or removing the duplicates entirely.


## Does the XERO01 Error Affect All Exports?

It can. If the Xero connection is disrupted, multiple exports may fail until the connection is restored.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI Readiness / vague reference: The FAQ answer "It can." begins with a vague pronoun. For AI retrieval and standalone readability, restate the subject so the answer is self-contained without needing to read the question.

Suggested fix:

Suggested change
It can. If the Xero connection is disrupted, multiple exports may fail until the connection is restored.
Yes, the XERO01 error can affect all exports. If the Xero connection is disrupted, multiple exports may fail until the connection is restored.

This same pattern (It can., It affects..., It typically...) appears in the FAQ answers of most Xero articles in this PR. Consider restating the subject in each FAQ answer across all new files.


If you see the error:

XERO08 Export Error: PDF of report is too large to export (>10MB). Please reach out to Concierge for additional assistance.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Readability / scannability: The error message text is displayed as plain paragraph text, making it hard to visually distinguish from the surrounding explanation. Consider wrapping error messages in a blockquote (>) or code block so they stand out. For example:

> XERO08 Export Error: PDF of report is too large to export (>10MB). Please reach out to Concierge for additional assistance.

This same pattern applies to all new Xero troubleshooting articles in this PR -- each displays the error message as unstyled text on line 12.


---

## 1. How to enable the Expensify Card on your workspace
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expensify style / terminology: "workspace" should be capitalized as "Workspace" to match Expensify terminology standards. (This is also flagged for the numbered heading issue in another comment.)

Suggested change
## 1. How to enable the Expensify Card on your workspace
## How to enable the Expensify Card on your Workspace

@stephanieelliott stephanieelliott merged commit 88df7ab into helpsite-consolidate-v2 Mar 11, 2026
286 checks passed
@stephanieelliott stephanieelliott force-pushed the helpsite-consolidate-v2 branch from 0773435 to a3842c8 Compare March 11, 2026 01:58
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.

2 participants

0