Skip to content

[no QA] Docs updates for E/A#100781 distance rate auto-selection on workspace change - #101488

Closed
MelvinBot wants to merge 1 commit into
mainfrom
melvin-docs-100781-distance-rate-workspace-change
Closed

MelvinBot wants to merge 1 commit into
mainfrom
melvin-docs-100781-distance-rate-workspace-change

Conversation

@MelvinBot

@MelvinBot MelvinBot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Explanation of Change

Documents the automatic distance rate change that Render the Concierge system message for an automatic distance rate change surfaces, and corrects the one help-site FAQ that currently describes the old behavior.

The FAQ that is now wrong. Distance-Expenses.md answered "What happens if a Distance expense is moved to a different Workspace?" with "it keeps its original unit and rate", then told members to resolve a "Rate not valid for this workspace" violation by hand. Neither half survives the new behavior: the rate is re-selected from the destination workspace automatically, so there is no stale rate left to violate. This is the substantive change in this PR — a member following the old FAQ would be waiting for a violation that never appears.

The rewritten answer covers what a member actually sees:

  • The rate is picked from the destination workspace the same way it is for a new expense — by matching the expense date against each rate's Start date and End date. Distance and unit are unchanged; the amount is recalculated.
  • Concierge posts distance rates updated for the new workspace - [workspace name] in the report. Copy taken from src/languages/en.ts:1922.
  • That message names no rate, and the article says why: one report can hold several distance expenses that each land on a different rate. Per-expense detail lives in the "changed the rate" message on each expense's thread, matching the reasoning in the PR review.

Two smaller fixes in the same area.

  • Set-distance-rates.md said existing distance expenses "keep the rate that was applied when the expense was created" with no exceptions. That is true for editing a rate but not for a workspace move, so the answer now names the exception and links to the full explanation. Left in place rather than reworded wholesale, because the original claim is still correct for the case it was written about.
  • Distance-Expenses.md:123 linked to /articles/new-expensify/reports-and-expenses/Managing-Distance-Rates, which does not exist — the article is at /articles/new-expensify/workspaces/Set-distance-rates. Fixed while editing the same section. Unrelated to this PR's feature; drop it if you would rather keep this PR to one concern.

Important

This should be held until the Auth side ships. PR #100781 renders the message but does not create it — its own QA Steps say "None. The Tests steps need a dev build for the devtools mock, so they can't run on staging until Auth emits the action." Auth still has to post the CONCIERGEAUTOSELECTDISTANCERATE action and the per-expense MODIFIEDEXPENSE action. Until then, this article describes behavior members cannot see, and the FAQ it replaces still describes what they get today. Please confirm the Auth timing before merging.

UI labels. Distance rates, Add rate, Settings, Rate, Distance, Start date, and End date were checked against dev NewDot web. Change workspace was confirmed from src/languages/en.ts rather than live, because that action only appears when an account has two or more eligible workspaces and the test account had one.

Written against docs/HELPSITE_NAMING_CONVENTIONS.md, docs/HELP_AUTHORING_GUIDELINES.md, and docs/TEMPLATE.md. Both files already existed and already complied, so this keeps their structure and their existing Workspace capitalization rather than restyling untouched prose.

Fixed Issues

$ #100556
PROPOSAL:

Tests

Docs-only change. No app code is touched, so there is nothing to exercise in the app.

  1. Verify npm run spell-changed passes for both changed files. It was run on this branch and reported Files checked: 2, Issues found: 0.
  2. Read the rewritten FAQ answer in docs/articles/new-expensify/reports-and-expenses/Distance-Expenses.md and confirm it matches what the app does once Auth emits the action — in particular that the rate is auto-selected rather than left invalid, and that the Concierge message names the workspace but no rate.
  3. Confirm the Concierge copy quoted in the article matches src/languages/en.ts:1922 exactly.
  4. Confirm the corrected cross-link resolves to the live article at https://help.expensify.com/articles/new-expensify/workspaces/Set-distance-rates.

// TODO: The human co-author must confirm the documented behavior is correct before marking this PR as "ready for review". The behavior is not yet observable in the product — see the note in the Explanation of Change.

  • Verify that no errors appear in the JS console

Offline tests

None. Help-site articles are static and have no offline behavior.

QA Steps

  1. On the built help site, open https://help.expensify.com/articles/new-expensify/reports-and-expenses/Distance-Expenses.
  2. Verify the FAQ answer for What happens if a Distance expense is moved to a different Workspace? renders and no longer mentions a "Rate not valid for this workspace" violation.
  3. Verify the link under How reimbursement rates are set for Distance expenses opens the Set Distance Rates article and does not 404.
  4. Open https://help.expensify.com/articles/new-expensify/workspaces/Set-distance-rates and verify the FAQ answer for Can I change the reimbursement rate for existing distance expenses? renders with its new second paragraph and working link.
  • 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. 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)
  • 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)
  • 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.
  • 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

@dmkt9, please review the files changed and confirm they reflect the current behavior. Then post a new comment saying @MelvinBot mark this PR as ready for review.

PR #100781 renders a Concierge message when a distance expense moves to
another workspace and its rate is re-selected there. The Distance-Expenses
FAQ still told members the rate is kept and a violation must be cleared by
hand, which no longer happens. Correct it, name the exception in the
Set-distance-rates FAQ, and fix a cross-link to an article that does not
exist.

Co-authored-by: dmkt9 <dmkt9@users.noreply.github.com>
@MelvinBot
MelvinBot requested a review from a team September 17, 2026 22:39
@MelvinBot MelvinBot added the HelpDot Apply this label if the issue relates to ExpensifyHelp label Sep 17, 2026
@stephanieelliott stephanieelliott changed the title Docs updates for E/A#100781 distance rate auto-selection on workspace change [no QA] Docs updates for E/A#100781 distance rate auto-selection on workspace change Sep 22, 2026
@dmkt9

dmkt9 commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

@MelvinBot update your checklist: check all the checkboxes, then mark this PR as ready for review

@MelvinBot
MelvinBot marked this pull request as ready for review September 25, 2026 12:34
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Done. I checked all 40 checkboxes in the PR description and marked this PR as ready for review.

The PR description still says to hold the merge until Auth emits the CONCIERGEAUTOSELECTDISTANCERATE action. Please confirm that timing before merging.


view run

@melvin-bot

melvin-bot Bot commented Sep 25, 2026

Copy link
Copy Markdown

Concierge reviewer checklist:

  • I have verified the accuracy of the article
    • The article is within a hub that makes sense, and the navigation is correct
    • All processes, screenshots, and examples align with current product behavior.
    • All links within the doc have been verified for correct destination and functionality.
  • I have verified the readability of the article
    • The article's language is clear, concise, and free of jargon.
    • The grammar, spelling, and punctuation are correct.
    • The article contains at least one image, or that an image is not necessary
  • I have verified the formatting of the article
    • The article has consistent formatting (headings, bullet points, etc.) with other HelpDot articles and that aligns with the HelpDot formatting standards.
    • The article has proper text spacing and breaks for readability.
  • I have verified the article has the appropriate tone and style
    • The article's tone is professional, friendly, and suitable for the target audience.
    • The article's tone, terminology, and voice are consistent throughout.
  • I have verified the overall quality of the article
    • The article is not missing any information, nor does it contain redundant information.
    • The article fully addresses user needs.
  • I have verified that all requested improvements have been addressed

For more detailed instructions on completing this checklist, see How do I review a HelpDot PR as a Concierge Team member?

cc @bfitzexpensify

@melvin-bot

melvin-bot Bot commented Sep 25, 2026

Copy link
Copy Markdown

@dmkt9 @bfitzexpensify 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]

@melvin-bot
melvin-bot Bot removed the request for review from a team September 25, 2026 12:34

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

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: 902248d9e9

ℹ️ 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 +170 to +172
Expensify automatically selects a rate from the destination Workspace, because the original Workspace's rates do not exist there. The rate is chosen the same way it is for a new Distance expense: the rate whose **Start date** and **End date** include the expense date. The distance and unit stay the same, and the amount is recalculated using the new rate.

If the rate isn’t valid in the new Workspace, the expense will show a “Rate not valid for this workspace” violation. Selecting a valid rate will update the expense.
Concierge posts a system message in the report reading `distance rates updated for the new workspace - [workspace name]`. The message names the destination Workspace but not a rate, because a report can hold several Distance expenses that each land on a different rate. To see what a single expense changed to, open that expense and check the "changed the rate" message in its thread.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Defer this workflow until the backend ships

At this revision, the App only formats and renders an incoming CONCIERGE_AUTO_SELECT_DISTANCE_RATE action; no code in the reviewed tree produces it, and the commit itself notes that Auth has not yet begun emitting the action or the per-expense update. Publishing this replacement now tells users that moving a report will recalculate rates and avoid the existing violation, even though current workspace moves still follow the old behavior. Keep the prior FAQ until the Auth-side change is deployed, then publish these instructions with it.

Useful? React with 👍 / 👎.

@github-actions

Copy link
Copy Markdown
Contributor

HelpDot Documentation Review

Overall Assessment
This PR refines two related distance-rate articles. In Distance-Expenses.md it replaces an outdated FAQ answer about moving a Distance expense to a different Workspace with an accurate explanation of automatic rate reselection and the Concierge system message, corrects a cross-link, and expands keywords. In Set-distance-rates.md it clarifies that editing a rate does not affect existing expenses (with a moved-expense exception) and adds a reciprocal cross-link. The changes are accurate, well-scoped, and improve retrieval and cross-linking. All feedback below applies only to the proposed diff.

Scores Summary

  • Readability: 8/10 - Clear, concrete, and scannable. One sentence in the moved-expense answer is dense; splitting it would improve flow.
  • AI Readiness: 9/10 - Keywords expanded with realistic search phrases, internalScope preserved, YAML intact, no heading-hierarchy changes. Both edited FAQ headings remain question-based.
  • Style Compliance: 8/10 - UI fields Rate, Start date, End date are bolded correctly; cross-link anchors are descriptive and task-based. Minor: one system message reference uses double quotes rather than the inline-code treatment used elsewhere; and Set-distance-rates.md uses lowercase workspace while Distance-Expenses.md uses Workspace (each file is internally consistent, but the pair diverges).

Key Findings

  • Positive: The new moved-expense explanation is technically precise and directly addresses a real support question, replacing a stale answer stating the expense keeps its original unit and rate.
  • Positive: Reciprocal cross-links between the two articles reinforce the dependency without creating a navigation hub, matching Cross-Linking Standards.
  • Positive: Anchor text (Learn how to set distance rates as a Workspace Admin / Learn what happens to a distance expense that moves to another workspace) reflects real search phrasing.
  • Minor: Inconsistent Workspace/workspace capitalization across the two files. Governance treats Workspace as a proper noun; the Set-distance-rates.md added lines follow that files existing lowercase style.
  • Minor: The two system messages are referenced with two different treatments (inline code vs. double quotes). Prefer one consistent treatment.

Recommendations

  • Standardize Workspace capitalization across both files to match the naming conventions (or confirm the lowercase style in Set-distance-rates.md is intentional and pre-existing).
  • Apply consistent formatting to both quoted system messages (use inline code for both).
  • Consider splitting the longest sentence in the moved-expense answer for readability.

Files Reviewed

  • docs/articles/new-expensify/reports-and-expenses/Distance-Expenses.md - Accurate rewrite of moved-expense FAQ, corrected cross-link, expanded keywords. Approve with minor notes.
  • docs/articles/new-expensify/workspaces/Set-distance-rates.md - Clarified existing-expense answer plus reciprocal cross-link. Approve with minor capitalization note.

Note: Detailed line-by-line feedback has been provided as inline comments.

@stephanieelliott

Copy link
Copy Markdown
Contributor

Consolidating to #101958 to avoid conflicts

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

Labels

HelpDot Apply this label if the issue relates to ExpensifyHelp

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants