Replace user-facing "Magic code" copy with "Security code"#96181
Conversation
Co-authored-by: Lauren <laurenreidexpensify@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
Co-authored-by: Lauren <laurenreidexpensify@users.noreply.github.com>
|
Fixed the failing Oxfmt check and pushed to the branch. What was failing: explanation:
'Face/fingerprint or passkey verification are enabled on one or more devices. Revoking access will require a security code for the next verification on that device.',I ran oxfmt Still red — but not code-related: the |
This comment has been minimized.
This comment has been minimized.
|
👋 I looked into the failing checks. The only check that's actually failing is PR Author Checklist / Why it fails: the check reports Why there's no code fix: this PR only changes To make it green: the author checklist is meant to be completed by a human author, so I didn't auto-tick it. Please review and check the boxes in the PR description (or confirm you'd like me to). It won't block review or merge either way. |
|
Following up — the status is unchanged, and there's still no code fix to push. The single red check is PR Author Checklist / To turn it green: the author checklist is a human-author responsibility (it attests to manual testing/QA), so I can't complete it on your behalf. Please review and tick the boxes in the PR description. Once they're checked, the |
|
@NikkiWines @chuckdries could you take a look here when you have a moment? This PR is now just focused on the front end copy, but it feels like we should probably also change the constants - eg Line 129 in 4c928c1 do you see any reason why we couldn't update |
|
@laurenreidexpensify yeah |
|
Noting here that we have a bunch of components and files that use Those should all use our internal term, However, to keep things simpler, let's update the user-facing copy to use thoughts cc: @laurenreidexpensify @chuckdries |
|
I agree, let's tackle the user facing localization strings separately from renaming all the source code files and constants, since doing that refactor is riskier and has no user-visible benefit |
|
Okay @Pujan92 over to you to review Melvin's code and get us ready for merge here please :) |
|
@justinpersaud 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] |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6aa5268851
ℹ️ About Codex in GitHub
Your team has set up Codex to 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 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
The only failing checks are the two checklist checks, and there's nothing for me to fix in code here: These aren't CI/build failures — they fail by design until the checkboxes in the PR body (Author) and the reviewer's checklist (Reviewer) are ticked off. Every actual code/build/test check is green (Bun tests, ESLint, Oxfmt, typecheck, To turn these green: the PR author needs to complete the PR Author Checklist (fill in the |
|
taking over for justin since i have context |
|
@MelvinBot merge main and fix conflicts |
|
I can't run change requests for your access level. I can investigate, or file an issue in Failed after 0s · 0 tools used · view debug log |
|
taking over implementing the code changes since it's getting a bit hairy to do via the GH UI. |
|
|
Co-authored-by: Nikki Wines <NikkiWines@users.noreply.github.com>
|
The only real failure was ESLint check, and it was a transient CI infrastructure failure — not a problem with this PR's code. What happened: ESLint crashed with The other failing check, Fix: I pushed an empty commit to re-trigger the checks. |
yes, eventually 🏃 |
|
🤖 I analyzed the checks — there's no code fix to push. Every substantive check is green; the only failing check is the PR Author Checklist, which fails only because the checklist boxes in the PR description haven't been ticked yet. That's a manual author step, not a code problem. Failing:
Passing: Still running (unrelated to a fix): the two Android Since this is a copy-only change ( |
|
The only failing check is
Every other check is passing (the one remaining What's needed: This is a human action. Please fill in the |
|
@Pujan92 and @chuckdries would you mind giving this a review? 🙇 |
chuckdries
left a comment
There was a problem hiding this comment.
LGTM. Regarding error handling, looks like we actually do use locale strings for security code errors in some flows, but not others. Would be cool to standardize, but that's definitely out of scope for this change!
Pujan92
left a comment
There was a problem hiding this comment.
Changes looks good to me!
|
We did not find an internal engineer to review this PR, trying to assign a random engineer to #96180 as well as to this PR... Please reach out for help on Slack if no one gets assigned! |
|
Looks like we just need an assignee to fill out the author checklist and QA steps |
|
The only failing check is
No action needed — the failing entry is a leftover from before the checklist was filled out, not a real failure. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 NikkiWines has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/NikkiWines in version: 9.4.43-0 🚀
|
Help site changes required ✅This PR renamed user-facing "Magic code" → "Security code" across NewDot, so the New Expensify help articles that still reference "magic code" no longer match the live UI. I've drafted the doc updates. Draft PR: #96793 What changedUpdated 10 Expensify Classic articles were intentionally left unchanged — this PR only touched NewDot copy, so Classic still correctly says "Magic Code".
|
|
🚀 Deployed to production by https://github.com/yuwenmemon in version: 9.4.43-1 🚀
Bundle Size Analysis (Sentry): |

Explanation of Change
This is a front-end copy-only change: it renames every user-facing "Magic code" reference to "Security code" across NewDot (sign-in, onboarding, one-time verification gates, per-action confirmations, and error messages).
Per the internationalization workflow,
src/languages/en.tsis the single source of truth and every other locale file is auto-generated. So this PR edits onlysrc/languages/en.ts(26 string values). TheGenerate static translationsworkflow runs automatically on PRs that touchen.tsand will regeneratede/es/fr/it/ja/nl/pl/pt-BR/zh-hansfrom the updated English source.Only string values were changed — translation keys (
magicCode,enterMagicCode, etc.), routes (.../confirm-magic-code), component names (MagicCodeInput), and code identifiers are intentionally left unchanged, since those are not user-facing and changing them would be a behavior change (out of scope).Fixed Issues
$ #96180
PROPOSAL:
Tests
Nagivated through the app and confirmed references to magic codes were replaced with security codes
Offline tests
N/A
QA Steps
N/A Copy Update
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, 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.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