Skip to content

[Payment due @shubham1206agra] Correct merge accounts warning to say data moves instead of being lost - #104809

Merged
marcaaron merged 2 commits into
mainfrom
claude-fixMergeAccountsWarningCopy
Oct 26, 2026
Merged

marcaaron merged 2 commits into
mainfrom
claude-fixMergeAccountsWarningCopy

Conversation

@MelvinBot

@MelvinBot MelvinBot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Explanation of Change

The Merge accounts confirmation page told users that merging "will result in the loss of any unsubmitted expenses" for the account being merged. That's wrong: a merge moves all of the merged account's reports in every state (including drafts) and its unreported expenses to the account being kept. Nothing is deleted. The same page's success message and both Merge Accounts help articles already say all data is combined.

This PR:

  • Replaces the copy with: "Merging your accounts is irreversible. All expenses and reports from , including drafts and unreported expenses, will be moved to the account you’re keeping."
  • Renames the translation key mergeAccountsPage.accountValidate.lossOfUnsubmittedData to mergeIsIrreversible, since the old name describes the wrong behavior, and updates its only usage in AccountValidatePage.tsx.
  • Updates every locale (es, de, el, fr, it, ja, nl, pl, pt-BR, zh-hans) with a matching translation, reusing each file's existing terms for expenses, reports, drafts and unreported expenses.

The Expensify Classic version of this warning lives outside this repo and needs a separate fix.

Fixed Issues

$ https://github.com/Expensify/Expensify/issues/693581
PROPOSAL:

Tests

  1. Go to Account -> Security -> Merge accounts
  2. Enter an existing account
  3. Next
  4. Verify that the message is Merging your accounts is irreversible. All expenses and reports from [email protected], including drafts and unreported expenses, will be moved to the account you’re keeping.
  • Verify that no errors appear in the JS console

Offline tests

Same as tests

QA Steps

Same as tests

  • 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 verified any copy / text that was added to the app 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 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 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)
  • 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 the PR adds or modifies the UI:
    • I asked an AI agent to review the changes for accessibility issues and addressed its findings.
    • I tested with a screen reader (VoiceOver on macOS) and verified all new/changed elements are reachable with a logical focus order.
    • I verified all new/changed elements have meaningful accessible names and roles.
    • I verified state changes are announced (e.g. checked/unchecked, expanded/collapsed, selected).
  • 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 Screenshot 2026-10-23 at 10 08 53

@MelvinBot
MelvinBot requested a review from a team October 23, 2026 02:56
@melvin-bot melvin-bot Bot added Melvin-Test-Android Melvin-Test-Web Triggers Melvin to run the testing steps of the PR on web labels Oct 23, 2026
@MelvinBot

Copy link
Copy Markdown
Contributor Author

I created this PR from an upstream branch since I don't have push access to your fork.

To take ownership of this branch and be able to push updates, run:

git remote add upstream https://github.com/Expensify/App.git
git fetch upstream claude-fixMergeAccountsWarningCopy
git checkout -b claude-fixMergeAccountsWarningCopy upstream/claude-fixMergeAccountsWarningCopy
git push -u origin claude-fixMergeAccountsWarningCopy

Then you can close this PR and open a new one from your fork.

@OSBotify

Copy link
Copy Markdown
Contributor

🦜 Polyglot Parrot! 🦜

Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues:

View the translation diff
diff --git a/src/languages/de.ts b/src/languages/de.ts
index a3ae8e68..debcead2 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -2513,7 +2513,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: 'Sind Sie sicher, dass Sie Konten zusammenführen möchten?',
             mergeIsIrreversible: (login: string) =>
-                `Das Zusammenführen Ihrer Konten ist endgültig. Alle Ausgaben und Berichte von <strong>${login}</strong>, einschließlich Entwürfen und nicht eingereichter Ausgaben, werden in das Konto verschoben, das Sie behalten.`,
+                `Das Zusammenführen Ihrer Konten ist unumkehrbar. Alle Ausgaben und Berichte von <strong>${login}</strong>, einschließlich Entwürfen und nicht eingereichten Ausgaben, werden auf das Konto verschoben, das Sie behalten.`,
             enterSecurityCode: (login: string) => `Um fortzufahren, geben Sie bitte den Sicherheitscode ein, der an <strong>${login}</strong> gesendet wurde.`,
             errors: {
                 incorrectSecurityCode: 'Falscher oder ungültiger Sicherheitscode. Bitte versuchen Sie es erneut oder fordern Sie einen neuen Code an.',
diff --git a/src/languages/el.ts b/src/languages/el.ts
index f80cb0bd..514a4972 100644
--- a/src/languages/el.ts
+++ b/src/languages/el.ts
@@ -2565,7 +2565,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: 'Είστε βέβαιοι ότι θέλετε να συγχωνεύσετε λογαριασμούς;',
             mergeIsIrreversible: (login: string) =>
-                `Η συγχώνευση των λογαριασμών σας είναι μη αναστρέψιμη. Όλα τα έξοδα και οι αναφορές του/της <strong>${login}</strong>, συμπεριλαμβανομένων των πρόχειρων και των μη αναφερθέντων εξόδων, θα μεταφερθούν στον λογαριασμό που διατηρείτε.`,
+                `Η συγχώνευση των λογαριασμών σας είναι μη αναστρέψιμη. Όλες οι δαπάνες και οι αναφορές από τον λογαριασμό <strong>${login}</strong>, συμπεριλαμβανομένων των προσχεδίων και των μη καταχωρισμένων δαπανών, θα μετακινηθούν στον λογαριασμό που διατηρείτε.`,
             errors: {
                 fallback: 'Κάτι πήγε στραβά. Παρακαλούμε δοκιμάστε ξανά αργότερα.',
                 incorrectSecurityCode: 'Εσφαλμένος ή μη έγκυρος κωδικός ασφαλείας. Δοκιμάστε ξανά ή ζητήστε έναν νέο κωδικό.',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 4e77f880..01d16ca7 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -2417,8 +2417,8 @@ const translations: TranslationDeepObject<typeof en> = {
         },
         accountValidate: {
             confirmMerge: '¿Estás seguro de que deseas fusionar cuentas?',
-            mergeIsIrreversible: (login) =>
-                `Fusionar tus cuentas es irreversible. Todos los gastos e informes de <strong>${login}</strong>, incluidos los borradores y los gastos no reportados, se moverán a la cuenta que conservas.`,
+            mergeIsIrreversible: (login: string) =>
+                `La fusión de tus cuentas es irreversible. Todos los gastos e informes de <strong>${login}</strong>, incluidos los borradores y los gastos no reportados, se trasladarán a la cuenta que vas a conservar.`,
             enterSecurityCode: (login: string) => `Para continuar, introduce el código de seguridad enviado a <strong>${login}</strong>.`,
             errors: {
                 incorrectSecurityCode: 'Código de seguridad incorrecto o no válido. Inténtalo de nuevo o solicita un código nuevo.',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 7547d13c..cb15c5f5 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -2518,7 +2518,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: 'Voulez-vous vraiment fusionner les comptes ?',
             mergeIsIrreversible: (login: string) =>
-                `La fusion de vos comptes est irréversible. Toutes les dépenses et notes de frais de <strong>${login}</strong>, y compris les brouillons et les dépenses non déclarées, seront transférées vers le compte que vous conservez.`,
+                `La fusion de vos comptes est irréversible. Toutes les dépenses et notes de frais de <strong>${login}</strong>, y compris les brouillons et les dépenses non déclarées, seront déplacées vers le compte que vous conservez.`,
             enterSecurityCode: (login: string) => `Pour continuer, veuillez saisir le code de sécurité envoyé à <strong>${login}</strong>.`,
             errors: {
                 incorrectSecurityCode: 'Code de sécurité incorrect ou non valide. Veuillez réessayer ou demander un nouveau code.',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 5a49e749..074892d3 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -2506,7 +2506,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: 'Sei sicuro di voler unire gli account?',
             mergeIsIrreversible: (login: string) =>
-                `L’unione dei tuoi account è irreversibile. Tutte le spese e i report di <strong>${login}</strong>, incluse le bozze e le spese non rendicontate, verranno spostati nell’account che mantieni.`,
+                `Unire i tuoi account è irreversibile. Tutte le spese e i report di <strong>${login}</strong>, incluse le bozze e le spese non riportate, verranno spostati sull’account che manterrai.`,
             enterSecurityCode: (login: string) => `Per continuare, inserisci il codice di sicurezza inviato a <strong>${login}</strong>.`,
             errors: {incorrectSecurityCode: 'Codice di sicurezza errato o non valido. Riprova oppure richiedi un nuovo codice.', fallback: 'Si è verificato un errore. Riprova più tardi.'},
         },
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 09f5bc86..e756c8f4 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -2486,7 +2486,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: '本当にアカウントを統合してもよろしいですか?',
             mergeIsIrreversible: (login: string) =>
-                `アカウントの統合は元に戻せません。<strong>${login}</strong> のすべての経費とレポート(下書きや未申請の経費を含む)は、残すアカウントに移動されます。`,
+                `アカウントを統合すると元に戻すことはできません。下書きや未報告の経費を含む<strong>${login}</strong>のすべての経費とレポートは、引き続きご利用になるアカウントに移動します。`,
             enterSecurityCode: (login: string) => `続行するには、<strong>${login}</strong> に送信されたセキュリティコードを入力してください。`,
             errors: {
                 incorrectSecurityCode: 'セキュリティコードが正しくないか無効です。もう一度お試しいただくか、新しいコードをリクエストしてください。',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 9e07d6f0..986d32d5 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -2504,7 +2504,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: 'Weet je zeker dat je accounts wilt samenvoegen?',
             mergeIsIrreversible: (login: string) =>
-                `Het samenvoegen van je accounts is onomkeerbaar. Alle uitgaven en rapporten van <strong>${login}</strong>, inclusief concepten en niet-ingediende uitgaven, worden verplaatst naar het account dat je behoudt.`,
+                `Het samenvoegen van je accounts is onomkeerbaar. Alle uitgaven en rapporten van <strong>${login}</strong>, inclusief concepten en niet-gerapporteerde uitgaven, worden verplaatst naar het account dat je behoudt.`,
             enterSecurityCode: (login: string) => `Om door te gaan, voer de beveiligingscode in die is verzonden naar <strong>${login}</strong>.`,
             errors: {
                 incorrectSecurityCode: 'Onjuiste of ongeldige beveiligingscode. Probeer het opnieuw of vraag een nieuwe code aan.',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 34d93f15..06e0fb78 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -2545,7 +2545,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: 'Czy na pewno chcesz scalić konta?',
             mergeIsIrreversible: (login: string) =>
-                `Połączenie Twoich kont jest nieodwracalne. Wszystkie wydatki i raporty użytkownika <strong>${login}</strong>, w tym wersje robocze i nierozliczone wydatki, zostaną przeniesione na konto, które zachowujesz.`,
+                `Połączenie kont jest nieodwracalne. Wszystkie wydatki i raporty z <strong>${login}</strong>, w tym wersje robocze i nierozliczone wydatki, zostaną przeniesione na konto, które zachowujesz.`,
             enterSecurityCode: (login: string) => `Aby kontynuować, wpisz kod bezpieczeństwa wysłany na <strong>${login}</strong>.`,
             errors: {
                 incorrectSecurityCode: 'Nieprawidłowy lub nieważny kod zabezpieczający. Spróbuj ponownie albo poproś o nowy kod.',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index e9eb9ed3..2f2fc8cd 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -2496,7 +2496,7 @@ const translations: TranslationDeepObject<typeof en> = {
         accountValidate: {
             confirmMerge: 'Tem certeza de que deseja mesclar as contas?',
             mergeIsIrreversible: (login: string) =>
-                `A fusão das suas contas é irreversível. Todas as despesas e relatórios de <strong>${login}</strong>, incluindo rascunhos e despesas não lançadas, serão transferidos para a conta que você está mantendo.`,
+                `Mesclar suas contas é irreversível. Todas as despesas e relatórios de <strong>${login}</strong>, incluindo rascunhos e despesas não informadas, serão movidos para a conta que você está mantendo.`,
             enterSecurityCode: (login: string) => `Para continuar, digite o código de segurança enviado para <strong>${login}</strong>.`,
             errors: {
                 incorrectSecurityCode: 'Código de segurança incorreto ou inválido. Tente novamente ou solicite um novo código.',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 162a4fe4..f22f6af8 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -2424,7 +2424,7 @@ const translations: TranslationDeepObject<typeof en> = {
         },
         accountValidate: {
             confirmMerge: '确定要合并账户吗?',
-            mergeIsIrreversible: (login: string) => `合并您的账户后将无法撤销。<strong>${login}</strong> 的所有报销费用和报表(包括草稿和未报告的费用)都将转移到您保留的账户中。`,
+            mergeIsIrreversible: (login: string) => `合并您的账户后将无法恢复。来自<strong>${login}</strong>的所有费用和报表(包括草稿和未提交的费用)都会被转移到您保留的账户中。`,
             enterSecurityCode: (login: string) => `若要继续,请输入发送到 <strong>${login}</strong> 的安全码。`,
             errors: {incorrectSecurityCode: '安全码不正确或无效。请重试或请求新代码。', fallback: '出现问题。请稍后再试。'},
         },

Note

You can apply these changes to your branch by copying the patch to your clipboard, then running pbpaste | git apply 😉

View workflow run

@codecov

codecov Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ Changes either increased or maintained existing code coverage, great job!

Files with missing lines Coverage Δ
...ngs/Security/MergeAccounts/AccountValidatePage.tsx 0.00% <0.00%> (ø)
... and 194 files with indirect coverage changes

@MelvinBot

MelvinBot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor Author

🤖 Android test steps verification results: ⚠️ partial

The PR's Tests section is still a TODO, so I tested steps built from the PR description. The Merge accounts entry page works, but I couldn't reach the confirmation page that shows the new warning, because the merge target email must already be an Expensify account and this single-session test environment has no second account to use.
Error page for second alias: doesn't have an Expensify account

Step Status
1. Account > Security > Merge accounts opens a page with an email input and a confirmation checkboxThe page showed a "Phone or email" field, an "I understand this is not reversible" checkbox, and a Next button.
Merge accounts entry page with email field and checkbox
✅
2. Enter a different email, tick the checkbox, tap Next → "Are you sure you want to merge accounts?" page opensTried [email protected] and [email protected]. Both opened "Can't merge accounts … doesn't have an Expensify account" instead, because neither email has an account.
Error page for first alias: doesn't have an Expensify account
Error page for second alias: doesn't have an Expensify account
❌
3. Warning reads "Merging your accounts is irreversible. All expenses and reports from email, including drafts and unreported expenses, will be moved to the account you’re keeping."Not checked: the confirmation page was never reached (see step 2).
❌
4. Old text "will result in the loss of any unsubmitted expenses" is goneNot checked: the confirmation page was never reached (see step 2).
❌

view run · view recording

@dukenv0307

Copy link
Copy Markdown
Contributor

@MelvinBot, complete the checklist

Here are the steps (use for Offline and QA as well)

  1. Go to Account -> Security -> Merge accounts
  2. Enter an existing account
  3. Next
  4. Verify that the message is Merging your accounts is irreversible. All expenses and reports from [email protected], including drafts and unreported expenses, will be moved to the account you’re keeping.

Here's the evidence on Web macOS

Screenshot 2026-10-23 at 10 08 53

then open the PR

@MelvinBot

MelvinBot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor Author

🤖 Web test steps verification results: ⚠️ partial

The confirmation page shows the new warning exactly as written, with the target email in bold, and the old "loss of any unsubmitted expenses" text is gone. I couldn't confirm the PR's one documented check, "no errors in the JS console," because the web test tool can't read the browser console. The PR's Tests section is still a TODO, so the other steps come from the PR description.
Merge accounts confirmation page with the new warning and magic code input

Step Status
1. Account > Security > Merge accounts opens with an email input and a confirmation checkboxThe page showed a "Phone or email" field, an "I understand this is not reversible" checkbox, and a Next button.
Merge accounts initial page with email input and checkbox
✅
2. Enter an existing account email, tick the checkbox, tap Next → "Are you sure you want to merge accounts?" page opensEntering [email protected] opened the confirmation page with a 6-digit security code input.
Merge accounts confirmation page with the new warning and magic code input
✅
3. Warning reads "Merging your accounts is irreversible. All expenses and reports from email, including drafts and unreported expenses, will be moved to the account you’re keeping."The page text matched exactly, including the curly apostrophe in "you’re". The email shows in bold.
Merge accounts confirmation page with the new warning and magic code input
✅
4. Old text "will result in the loss of any unsubmitted expenses" is goneA search for that text on the confirmation page found no match.
✅
5. No errors appear in the JS consoleNot checked: the web test tool can't capture console logs. No error messages or broken UI appeared during the flow.
⚠️

view run · view recording

@MelvinBot
MelvinBot marked this pull request as ready for review October 23, 2026 03:17
@MelvinBot
MelvinBot requested a review from a team as a code owner October 23, 2026 03:17
@melvin-bot
melvin-bot Bot requested review from shubham1206agra and removed request for a team October 23, 2026 03:17
@melvin-bot

melvin-bot Bot commented Oct 23, 2026

Copy link
Copy Markdown

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

@MelvinBot

Copy link
Copy Markdown
Contributor Author

The PR body is complete, and the PR is now ready for review.

  • Tests: your 4 steps, plus the JS console check.
  • Offline tests and QA Steps: "Same as tests".
  • PR Author Checklist: all items checked, as you asked.
  • Screenshots: your Web macOS screenshot is under "MacOS: Chrome / Safari".

The Android and iOS screenshot sections are still empty, but the checklist says you tested all platforms. Please add those screenshots, or uncheck the platforms you didn't test.


view run

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-23T03:20:03.907642Z f537cd9 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@melvin-bot
melvin-bot Bot requested review from JmillsExpensify and removed request for a team October 23, 2026 03:17
@shubham1206agra

Copy link
Copy Markdown
Contributor

@dukenv0307 Do I need to review this or not?

@dukenv0307

Copy link
Copy Markdown
Contributor

@shubham1206agra yep, pls review it

@JmillsExpensify JmillsExpensify left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM

@shubham1206agra shubham1206agra self-assigned this Oct 24, 2026
@shubham1206agra

Copy link
Copy Markdown
Contributor

@MelvinBot Apply translations from here #104809 (comment)

@MelvinBot
MelvinBot requested a review from a team as a code owner October 24, 2026 10:09
@melvin-bot
melvin-bot Bot requested review from aimane-chnaif and removed request for a team October 24, 2026 10:09
@melvin-bot

melvin-bot Bot commented Oct 24, 2026

Copy link
Copy Markdown

@aimane-chnaif 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]

@MelvinBot

Copy link
Copy Markdown
Contributor Author

I applied the Polyglot Parrot translations in commit 23215964.

The commit updates mergeIsIrreversible in 10 locales: de, el, es, fr, it, ja, nl, pl, pt-BR, and zh-hans. My diff matches the patch byte for byte. It also adds the missing login: string type in es.ts.

I couldn't run lint or prettier locally, so CI will confirm formatting.

@shubham1206agra
shubham1206agra removed the request for review from aimane-chnaif October 24, 2026 10:10
@shubham1206agra

Copy link
Copy Markdown
Contributor

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible 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 checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified proper code patterns were followed (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 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 verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • 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 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.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this 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.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Screenshot 2026-10-24 at 3 40 09 PM

@shubham1206agra shubham1206agra removed their assignment Oct 24, 2026
@melvin-bot
melvin-bot Bot requested a review from marcaaron October 24, 2026 10:12
@melvin-bot

melvin-bot Bot commented Oct 24, 2026

Copy link
Copy Markdown

@marcaaron 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 changed the title Correct merge accounts warning to say data moves instead of being lost [Payment due @shubham1206agra] Correct merge accounts warning to say data moves instead of being lost Oct 24, 2026
@melvin-bot

melvin-bot Bot commented Oct 24, 2026

Copy link
Copy Markdown

🎯 @shubham1206agra, thanks for reviewing and testing this PR! 🎉

A payment issue will be created for your review once this PR is deployed to production.
E/E issue linked to the PR - https://www.github.com/Expensify/Expensify/issues/693581.

If payment is not needed (e.g., regression PR review fix etc), react with 👎 to this comment to prevent the payment issue from being created.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

No code fix is needed. The code checks all pass on the latest commit, including Jest, TypeScript, ESLint, and the Reassure perf tests.

The validate-perf-tests failure came from a cancelled run that a newer run replaced. The newer run passed.

Two checks still fail, and only a reviewer can clear them:

  • PR Reviewer Checklist / checklist: a reviewer must post the completed checklist.
  • Check independent approval: the PR needs an approval.

view run

@MelvinBot

Copy link
Copy Markdown
Contributor Author

No code fix is needed. Every code check passes on the latest commit.

The only failing check is Check independent approval. It clears when the PR gets an approval.


view run

@marcaaron
marcaaron merged commit 8533a1f into main Oct 26, 2026
57 of 81 checks passed
@marcaaron
marcaaron deleted the claude-fixMergeAccountsWarningCopy branch October 26, 2026 18:42
@OSBotify

Copy link
Copy Markdown
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@github-actions

Copy link
Copy Markdown
Contributor

🚧 marcaaron has triggered a test Expensify/App build. You can view the workflow run here.

@github-actions

Copy link
Copy Markdown
Contributor

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/marcaaron in version: 9.5.21-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

Copy link
Copy Markdown
Contributor Author

No help site update is needed. This PR only corrects an in-app warning message, and the Merge Accounts article already says merging "combines all of your receipts, expenses, reports, invoices, imported cards, Copilots, and workspace access into one account," which matches the new copy.


view run

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/marcaaron in version: 9.5.23-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

Copy link
Copy Markdown
Contributor Author

No help site update is needed. This PR only rewrites an in-app warning message. The Merge Accounts article already says merging "combines all of your receipts, expenses, reports, invoices, imported cards, Copilots, and workspace access into one account," which matches the new wording.


view run

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

Labels

Melvin-Test-Android Melvin-Test-Web Triggers Melvin to run the testing steps of the PR on web

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants