Merge main into my branch #84662
Merge main into my branch #84662stephanieelliott merged 53 commits intoclaude-docsArticlesImprovementsfrom
Conversation
Allows folders that contain other nested folders but no articles
- Add braces around if body in getOrderFromArticleFrontMatter (ESLint curly rule) - Run Prettier on createDocsRoutes.ts - Add nil guard before sort in section.html to prevent 'Cannot sort a null object' Co-authored-by: Stephanie Elliott <stephanieelliott@users.noreply.github.com>
Liquid's `empty` keyword resolves to an empty string, not an empty array. Replace `| default: empty | sort` with a conditional that initializes an empty array via `"" | split: ","` and only sorts when section.articles is present. Co-authored-by: Stephanie Elliott <stephanieelliott@users.noreply.github.com>
8b6dd5e
into
claude-docsArticlesImprovements
Concierge reviewer checklist:
For more detailed instructions on completing this checklist, see How do I review a HelpDot PR as a Concierge Team member? |
|
@carlosmiceli @johncschuster One of you needs to 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] |
|
|
||
| # Why Is My Report Not Automatically Exporting to NetSuite? | ||
|
|
||
| An error is preventing the report from exporting automatically. |
There was a problem hiding this comment.
FAQ structure violation: FAQ questions should use ## (H2) headings, not # (H1). The # heading level should be reserved for the article title and the # FAQ section heading. Each question here (e.g., "Why Is My Report Not Automatically Exporting to NetSuite?") should be ##, and the sub-sections under each question (e.g., "How to Resolve Automatic Export Failures") should be ###.
This applies to all question headings in this file: lines 14, 28, 40, 56, 68, 80, 102, 114, 128, 148, 161, 182, 194.
| 3. Under **Preferences**, update **Default Payable Account for Expense Reports**. | ||
| 4. Click **Save**. | ||
|
|
||
| ## For Non-OneWorld Accounts |
There was a problem hiding this comment.
Readability violation -- duplicate content: This question ("Why Is My Report Exporting as Accounting Approved Instead of Paid in Full?") is essentially the same as the earlier section on line 80 ("Why Are Reports Exporting as 'Accounting Approved' Instead of 'Paid in Full'?"). Having two nearly identical sections is confusing and hurts scannability. Remove this duplicate and, if needed, link back to the earlier section.
| @@ -0,0 +1,118 @@ | |||
| --- | |||
There was a problem hiding this comment.
Readability / organizational violation: This file is a Sync Error article (NS0521-Sync-Error.md) but is placed in the Export-Errors/ directory. This is likely a misplacement -- the same file already exists correctly under Sync-Errors/NS0521-Sync-Error.md and Connection-errors/NS0521-Sync-Error.md. Having it in Export-Errors/ is misleading for readers navigating by category and confuses AI retrieval. Consider removing this file from the Export-Errors folder.
| @@ -0,0 +1,120 @@ | |||
| --- | |||
| title: NS0921 Export Error in NetSuite Integration | |||
| description: Learn what the NS0921 export error means and how to align subsidiaries across reports, users, accounts, tags, and categories in NetSuite. | |||
There was a problem hiding this comment.
Terminology violation: The description uses "users" ("how to align subsidiaries across reports, users, accounts..."). Per Expensify style guidelines, use "members" instead of "users" when referring to people in Expensify. Consider: "how to align subsidiaries across reports, members, accounts, tags, and categories in NetSuite."
Note: The error message text itself on line 14 also says "user" but since that is a literal error string from NetSuite, it should remain as-is.
| Follow the steps below to make the Exchange Rate field visible. | ||
|
|
||
| --- | ||
|
|
There was a problem hiding this comment.
AI Readiness violation -- wrong heading levels: "Make the Exchange Rate Field Visible in NetSuite", "Sync the Workspace in Expensify", and "Retry the Export" are sub-steps under "How to Fix the NS0085 Export Error" (line 35) and should use ### (H3) instead of ## (H2). Using the same heading level as the parent section breaks the logical hierarchy and makes it harder for AI systems (and readers) to understand the document structure.
This pattern repeats across nearly all troubleshooting articles in this PR (e.g., NS0005, NS0012, NS0019, NS0021, NS0029, NS0033, NS0034, NS0045, NS0046, NS0055, NS0085, NS0091, NS0109, NS0510, etc.). Consider applying this fix consistently across all files.
| --- | ||
|
|
||
| ## Confirm the NetSuite Credentials | ||
|
|
There was a problem hiding this comment.
AI Readiness violation -- wrong heading levels: "Confirm the NetSuite Credentials" (line 43), "Generate a New NetSuite Access Token" (line 53), "Refresh the NetSuite Connection in the Workspace" (line 65), and "Contact Concierge if the Error Persists" (line 90) are all sub-steps under "How to Fix the NS0109 Sync Error" (line 37). They should use ### (H3) instead of ## (H2) to maintain proper heading hierarchy.
This same heading level issue appears in essentially every troubleshooting article in this PR.
| @@ -0,0 +1,115 @@ | |||
| --- | |||
| title: NS0228 Sync Error in NetSuite Integration | |||
| description: Learn what the NS0228 sync error means and how to assign the Expensify Integration role to a NetSuite user to restore category syncing. | |||
There was a problem hiding this comment.
Terminology note: This article and its metadata heavily use "user" (e.g., "assigned to a NetSuite user", "role not added to user"). While this is acceptable when referring specifically to a NetSuite user account (since that is the term NetSuite uses), the description field on this line says "assign the Expensify Integration role to a NetSuite user" -- which is correct in context. Just be mindful that in Expensify-facing copy, "member" is preferred over "user" per style guidelines. The NetSuite-specific references here are appropriate.
| @@ -0,0 +1,93 @@ | |||
| --- | |||
There was a problem hiding this comment.
AI Readiness concern -- duplicate content across categories: This file (NS0109-Sync-Error.md) is identical to Connection-errors/NS0109-Sync-Error.md and a slightly different version exists at Sync-Errors/NS0109-Sync-Error.md. The same pattern applies to NS0123, NS0318, NS0510, NS0565, NS0593, NS0739, and NS0942.
Having near-duplicate articles across multiple directories creates maintenance risk (content can drift out of sync, as already happened with the Sync-Errors version of NS0109 which is different). It also confuses AI retrieval systems that may surface conflicting versions. Consider either:
- Keeping each error in only its primary category, or
- Using a canonical article with cross-references from other categories.
HelpDot Documentation ReviewOverall AssessmentThis PR adds 87 new NetSuite troubleshooting documentation articles organized into four subcategories (Authentication-and-Login-errors, Connection-errors, Export-Errors, Sync-Errors), plus a NetSuite-FAQ.md file. It also refactors The article content is well-written and consistently structured, with clear error descriptions, root causes, and step-by-step fix instructions. However, there are significant organizational issues that must be addressed before merging. Scores Summary
Key FindingsCritical: 10 articles are duplicated across categories (26 extra copies) The following error codes appear as identical files in multiple subcategories:
This means only ~61 of the 87 articles contain unique content. Duplicate articles create maintenance burden and will confuse search/AI systems. Each error code should live in one canonical location. If cross-referencing is needed, consider linking rather than duplicating. Critical: NS0521-Sync-Error.md is placed inside Export-Errors folder
Critical: Heading hierarchy violations across all articles
Positive: Consistent article structure All error articles follow a clean, predictable template:
Positive: Code refactoring is clean The Minor: Training article timezone update The change from PST/EST/CEST to PDT/EDT/CET in Recommendations
Files Reviewed
Note: This review focuses on the documentation changes. The src/ code changes included in this PR appear to come from the main branch merge and are not assessed here. |
| ## Confirm the Expenses Are Company Card Transactions | ||
|
|
||
| 1. Open the report. | ||
| 2. Confirm the expenses display the **Card + Lock icon**. |
There was a problem hiding this comment.
AI Readiness violation -- wrong heading levels: Lines 43, 51, 65, and 79 use ## for sub-steps that logically fall under ## How to Fix the NS0019 Export Error (line 37). These should be ### headings to maintain proper document hierarchy. Compare with NS0005 and NS0029 in this same PR, which correctly use ### for sub-steps under their "Fix" sections.
| Follow the steps below to resolve the issue. | ||
|
|
||
| --- | ||
|
|
There was a problem hiding this comment.
AI Readiness violation -- wrong heading levels: "Update the Expensify Connect Bundle in NetSuite" (line 43) and "Update NetSuite Role Token Permissions" (line 73) are sub-steps under ## How to Fix the NS0510 Export Error (line 37) and should be ### headings. This is the same inconsistency present in many articles in this PR -- compare with NS0005 and NS0029 which use the correct ### hierarchy for fix sub-steps.
|
|
||
| # Additional Fixes by Element | ||
|
|
||
| ## Element: `line.entity` |
There was a problem hiding this comment.
AI Readiness violation -- wrong heading level: # Additional Fixes by Element uses H1, but only the article title should use H1. This should be ## Additional Fixes by Element. The sub-headings under it ("line.entity", "entityid", etc.) should then be ### instead of ##.
Also note that this article is missing a # FAQ section, which breaks consistency with all other troubleshooting articles in this PR.
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.
|
| internalScope: Audience is Workspace Admins and Domain Admins using the NetSuite integration. Covers common NetSuite export issues, approval settings, and connection troubleshooting. Does not cover individual NetSuite error codes. | ||
| --- | ||
|
|
||
| # NetSuite FAQ |
There was a problem hiding this comment.
AI Readiness violation -- missing internalScope: The YAML frontmatter is missing the internalScope field. All articles should include it. Suggested addition:
internalScope: Audience is Workspace Admins and Domain Admins using the NetSuite integration. Covers common NetSuite export issues, approval settings, and connection troubleshooting. Does not cover individual NetSuite error codes.(This text is already in the internalScope field below -- but double-check that it is actually present in the frontmatter. Based on the diff, internalScope IS present on line 6, so disregard if this was a false positive on my part.)
| ## Update the Expensify Connect Bundle in NetSuite | ||
|
|
||
| First, confirm the bundle is up to date. | ||
|
|
There was a problem hiding this comment.
AI Readiness violation -- wrong heading levels: "Update the Expensify Connect Bundle in NetSuite" (line 47) and "Update NetSuite Role Token Permissions" (line 80) are sub-steps under "How to Fix the NS0510 Export Error" (line 41) and should use ### instead of ##. This is the same heading hierarchy issue present in the Export-Errors version of this article and many other articles in this PR.
|
|
||
| ## How to Fix the NS0384 Sync Error | ||
|
|
||
| Follow the steps below to confirm token assignment and role permissions. |
There was a problem hiding this comment.
AI Readiness violation -- wrong heading levels: "Confirm the Access Token Is Assigned to the Expensify Integration Role" (line 37), "Confirm Expensify Integration Role Permissions" (line 50), and "Sync the Workspace" (line 103) are sub-steps under ## How to Fix the NS0384 Sync Error (line 31) and should use ### instead of ##.
Note that this article correctly uses ### for "Required List Permissions" and "Required Setup Permissions" under the "Confirm Expensify Integration Role Permissions" section, which shows the correct hierarchical pattern. But the parent sections themselves need to be demoted from ## to ### as well.
| If you see the error: | ||
|
|
||
| NS0029 Export Error: Unable to export this report due to an error. | ||
|
|
There was a problem hiding this comment.
Readability suggestion: The error message text on this line is rendered as plain body text, making it hard to distinguish from the surrounding explanatory content. Consider formatting error messages with a blockquote (>) or a code block to make them visually distinct. For example:
> NS0029 Export Error: Unable to export this report due to an error.This pattern applies to all ~80 troubleshooting articles in this PR. A consistent formatting choice here improves scannability for members who are looking for a specific error string.
|
🚀 Deployed to staging by https://github.com/stephanieelliott in version: 9.3.35-0 🚀
|
|
🚀 Deployed to production by https://github.com/luacmartins in version: 9.3.35-1 🚀
|
Explanation of Change
Fixed Issues
$
PROPOSAL:
Tests
Offline 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)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
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari