Skip to content

TASK-23054 copy polish round 2: no pronouns, sentence case, one amount format - #3446

Merged
Hugo0 merged 4 commits into
devfrom
task-23054-copy-polish-2
Sep 25, 2026
Merged

Hugo0 merged 4 commits into
devfrom
task-23054-copy-polish-2

Conversation

@Hugo0

@Hugo0 Hugo0 commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Copy and UI polish round 2 for TASK-23054, from integration QA (local/scratch/qa-triage-2026-09-24/integration-qa.md). All four catalogs change together. Where a pronoun-free wording lost meaning, clarity won (release-captain review).

What changes

  1. No pronouns in titles, rows, buttons and labels (Hugo's rule, now written in design.md#copy on mono main, 0763fde3). Round 1 covered my/your only.
    • "Who can pay you" → "Who can pay"; "Let them pay by bank transfer" → "Accept bank transfer"; "You're withdrawing" → "Withdrawing".
    • The action-card and success-card headers change as one family, so siblings match: "Sending to", "Adding", "Receiving", "From {sender}", "Sent to", "Paid to {merchant}", "Sent via link" and so on.
    • Other titles and labels: "Choose a username", "Country of legal residence", "Already signed in", "Amount to add", "No transactions yet", "Offline", "What it unlocks" (A&P details drawer and badge drawer), "Total" (withdraw confirm), "QR payments and own-account transfers" (the Argentina rail stays own-account only), the virtual account gate titles, and more.
    • es/pt strings that had "tu/te/você/seu" where English did not are fixed too.
    • Withdraw drops the "How would you like to withdraw?" heading, which repeated the nav title. Add money dropped the same heading in f802cab.
    • Kept with a pronoun: "{username} invited you to Peanut" (a sentence), "Why cancel?" placeholder is pronoun-free but stays a question, es "Oh, ¿te vas?", body sentences, limit warnings, FAQ questions, share text the user sends ("My bank details"), "We'll miss you", and the /exchange widget (owned by Jota).
  2. Sentence case for the English profile menu and the Edit profile title.
  3. No ".00" on round amounts. The request payer screen (asked amount, currency note, bank row, bank instructions) and the receipt headline (screen and PDF) now use formatBankAmount. No new formatter. The symbol map moved to src/constants/currency-symbols.consts.ts so the server PDF route can use the formatter without importing a React hook. The receipt used to print "$12.5"; it now prints "$12.50". A currency code used in place of a symbol gets a space: "ARS 13,500".
  4. MXN "Unlock" from Add money now keeps the "Add money" title, not "Accounts and payments". The unused tUnlock is removed.
  5. One name for the link card: "Send with a link" on /send and on the link screen.

Checks

…t format

Integration QA found labels the my/your sweep missed ("Who can pay you",
"Let them pay by bank transfer", "You're withdrawing"). Hugo's rule is no
pronouns at all in titles, rows, buttons and labels, so the sweep now covers
you/them in all four catalogs, and the action-card header family changes
together so siblings still read alike.

- withdraw drops its "How would you like to withdraw?" heading: it repeated
  the nav title, as the add-money one did
- profile menu and Edit profile move to sentence case
- the request payer screen and the receipt headline use formatBankAmount, so
  round amounts lose ".00" (the receipt used to print "$12.5" too); a code
  that stands in for a symbol gets a space ("ARS 13,500")
- the MXN unlock step reached from Add money keeps the Add money title
- the link card has one name: "Send with a link"
@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
peanut-wallet Ready Ready Preview Sep 24, 2026 11:27pm UTC

Request Review

@Hugo0
Hugo0 requested a review from abalinda as a code owner September 24, 2026 22:58
@Hugo0

Hugo0 commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

/chip review

@notion-workspace

Copy link
Copy Markdown

@coderabbitai

coderabbitai Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository: peanutprotocol/peanut-ui/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 130dc59e-beb1-460a-90c3-c9943ee03065

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Code-analysis diff

Painscore total: 8812.85 → 8856.09 (+43.24)
Findings: -1 net (+62 new, -63 resolved)

🆕 New findings (62)

  • critical complexity — src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx — CC 91, MI 56.82, SLOC 233
  • critical complexity — src/features/add-money/useBridgeBankFlow.ts — CC 67, MI 56.13, SLOC 345
  • critical complexity — src/features/withdraw/views/WithdrawMethodView.tsx — CC 58, MI 59.17, SLOC 213
  • high hotspot — src/components/TransactionDetails/TransactionDetailsReceipt.tsx — 82 commits, +980/-2245 lines since 6 months ago
  • high complexity — src/features/add-money/views/BridgeBankOnrampView.tsx — CC 39, MI 54.22, SLOC 112
  • high complexity — src/components/TransactionDetails/TransactionDetailsReceipt.tsx — CC 37, MI 47.06, SLOC 79
  • high method-complexity — src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx:68 — RequestPotActionList CC 36 SLOC 123
  • high complexity — src/features/withdraw/components/WithdrawCurrencyList.tsx — CC 34, MI 65.5, SLOC 85
  • high complexity — src/app/receipt/[entryId]/pdf/receipt-pdf-model.ts — CC 33, MI 49.81, SLOC 112
  • high method-complexity — src/features/add-money/views/BridgeBankOnrampView.tsx:35 — BridgeBankOnrampView CC 33 SLOC 99
  • high method-complexity — src/components/TransactionDetails/TransactionDetailsReceipt.tsx:34 — CC 31 SLOC 61
  • high complexity — src/features/deposit-accounts/components/RequestBankInstructions.tsx — CC 13, MI 44.95, SLOC 75
  • medium react-long-component — src/app/(mobile-ui)/dev/ds/patterns/amount-input/page.tsx:14 — AmountInputPage is 315 lines — split it
  • medium high-mdd — src/features/add-money/useBridgeBankFlow.ts:42 — useBridgeBankFlow: MDD 108.1 (uses across many lines from declarations)
  • medium high-mdd — src/features/withdraw/views/WithdrawMethodView.tsx:50 — WithdrawMethodView: MDD 102.2 (uses across many lines from declarations)
  • medium high-mdd — src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx:68 — RequestPotActionList: MDD 94.1 (uses across many lines from declarations)
  • medium high-mdd — src/components/TransactionDetails/TransactionDetailsReceipt.tsx:34 — TransactionDetailsReceipt: MDD 51.5 (uses across many lines from declarations)
  • medium high-mdd — src/features/payments/flows/contribute-pot/views/ContributePotInputView.tsx:31 — ContributePotInputView: MDD 47.1 (uses across many lines from declarations)
  • medium high-mdd — src/features/withdraw/components/WithdrawCurrencyList.tsx:60 — WithdrawCurrencyList: MDD 46.6 (uses across many lines from declarations)
  • medium high-dlt — src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx:68 — RequestPotActionList: DLT 46 (calls 46 distinct functions — high context load)

…and 42 more.

✅ Resolved (63)

  • src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx — CC 91, MI 56.23, SLOC 245
  • src/features/add-money/useBridgeBankFlow.ts — CC 67, MI 56.03, SLOC 348
  • src/features/withdraw/views/WithdrawMethodView.tsx — CC 58, MI 59.16, SLOC 213
  • src/components/TransactionDetails/TransactionDetailsReceipt.tsx — 81 commits, +978/-2244 lines since 6 months ago
  • src/features/add-money/views/BridgeBankOnrampView.tsx — CC 39, MI 54.13, SLOC 113
  • src/components/TransactionDetails/TransactionDetailsReceipt.tsx — CC 37, MI 46.69, SLOC 80
  • src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx:67 — RequestPotActionList CC 36 SLOC 129
  • src/features/withdraw/components/WithdrawCurrencyList.tsx — CC 34, MI 65.48, SLOC 85
  • src/app/receipt/[entryId]/pdf/receipt-pdf-model.ts — CC 33, MI 49.72, SLOC 113
  • src/features/add-money/views/BridgeBankOnrampView.tsx:35 — BridgeBankOnrampView CC 33 SLOC 100
  • src/components/TransactionDetails/TransactionDetailsReceipt.tsx:33 — CC 31 SLOC 62
  • src/features/deposit-accounts/components/RequestBankInstructions.tsx — CC 13, MI 44.23, SLOC 80
  • src/app/(mobile-ui)/dev/ds/patterns/amount-input/page.tsx:14 — AmountInputPage is 317 lines — split it
  • src/features/add-money/useBridgeBankFlow.ts:42 — useBridgeBankFlow: MDD 110.4 (uses across many lines from declarations)
  • src/features/withdraw/views/WithdrawMethodView.tsx:51 — WithdrawMethodView: MDD 102.3 (uses across many lines from declarations)
  • src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx:67 — RequestPotActionList: MDD 95.9 (uses across many lines from declarations)
  • src/components/TransactionDetails/TransactionDetailsReceipt.tsx:33 — TransactionDetailsReceipt: MDD 51.5 (uses across many lines from declarations)
  • src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx:67 — RequestPotActionList: DLT 48 (calls 48 distinct functions — high context load)
  • src/features/payments/flows/contribute-pot/views/ContributePotInputView.tsx:31 — ContributePotInputView: MDD 46.9 (uses across many lines from declarations)
  • src/features/withdraw/components/WithdrawCurrencyList.tsx:62 — WithdrawCurrencyList: MDD 47.4 (uses across many lines from declarations)

…and 43 more.

📈 Painscore deltas (top movers)

File Before After Δ
src/constants/currency-symbols.consts.ts 0.0 3.2 +3.2

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

🧪 UI test report — ✅ all green

Suites

  • ✅ unit: 9934 ran, 0 failed, 0 skipped, 3.8m

📊 Coverage (unit)

metric %
statements 82.2%
branches 71.7%
functions 77.5%
lines 83.4%
⏱ 10 slowest test cases
time test
🐢 9.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › Network failure keeps loading while retries remain, then shows the generic error
4.1s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › never places two stickers in heavy overlap (broad seed sweep)
4.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › MANTECA_SOURCE_OVER_MONTHLY_CAP fails fast with copy that names the real cause
4.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › MANTECA_MERCHANT_RECENT_REFUND fails fast with copy that names the real cause
4.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › a refused idempotency key tells the user to scan again, not to contact support
4.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › MANTECA_MERCHANT_VOLUME_NEAR_CAP fails fast with copy that names the real cause
4.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › MANTECA_USER_NOT_PROVISIONED fails fast with copy that names the real cause
4.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › User KYC not approved fails fast with copy that names the real cause
4.0s src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx › routes the KYC rejection on its wire code, and does not retry it
3.4s scripts/__tests__/ota-platform-floor.test.js › accepts an explicitly gated same-version Android replacement and keeps the shared floor safe
📍 Inline annotations are in the **Unit test report** check above. Coverage artifact: `coverage-unit`. Generated by `.github/workflows/tests.yml`.

The receipt PDF route is server code; importing formatBankAmount pulled in
React hooks and broke the build.

@chip-peanut-bot chip-peanut-bot Bot 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.

Chip review — changes requested

The new PDF formatter import breaks the production build; the merge-ref typecheck also fails after removal of mainHeading.

Findings

  • BLOCKING · src/app/receipt/[entryId]/pdf/receipt-pdf-model.ts:17 · Keep the PDF route out of the client hook module
    The new import brings src/utils/currency.ts into the server PDF route, but that utility imports SYMBOLS_BY_CURRENCY_CODE from useCurrency.ts, which also imports React client hooks. The press-contract build fails with the Server Component useState/useEffect/useRef error; preview and screenshot builds fail downstream. Move the symbol table to a server-safe module (or otherwise make the formatter dependency server-safe) before using it in the PDF model.

  • MAJOR · src/features/withdraw/views/WithdrawMethodView.tsx:50 · Update the remaining merged test call for the removed prop
    Removing mainHeading from WithdrawMethodViewProps leaves a call in the supplied dev base test that still passes mainHeading. After the PR merges with that base, CI typecheck fails with TS2322 in WithdrawMethodView.test.tsx (the third render in the address-book test). Update that call as part of this PR or rebase and remove the stale prop there; the two render sites changed on this head are not enough.

  • MAJOR · src/i18n/app/messages/en.json:810 · [claude-opus] Argentina rail copy drops the own-account-only rule
    The rail description at setup.residence.congrats.rails.arQr changed from "QR payments and transfers with your own account" to "QR payments and bank transfers". The same edit was made in es-419 ("pagos QR y transferencias bancarias") and pt-BR ("pagamentos QR e transferências bancárias"). The product truth says this rail only works with the user's own account. /home/chip/mono/product/quick-ref.md:106 says "The Argentina rail cannot — own account only", and product/spending.md:21 says "Argentine residents can withdraw to their own account only". There is also a known support problem: product/feedback/problems/third-party-transfers-rejected-confusing.md records third-party ARS deposits that were silently rejected (2026-02-03 and 2026-07-15), and warns that the Manteca flow lacks a first-party warning. The new wording makes this worse because it reads as "bank transfers" in general. The same file still says "QR payments & own-account transfers" under compare.items.arQr (line 833), so the app now describes the rail two different ways. The code is wrong here, not the product doc. Fix: restore the own-account wording without a pronoun, for example "QR payments and own-account bank transfers" / "pagos QR y transferencias desde cuenta propia" / "pagamentos QR e transferências de conta própria".

Checked clean

  • Reviewed exact head against merge base and supplied dev base; no prior findings were supplied.
  • Read exact-head CI failures: press-contract build and merge-ref typecheck; screenshot and preview failures cascade from build.
  • Traced request bank amounts, receipt headlines, exact copy values, success-label callers, and changed locale placeholders.
  • No additional reachable security or money-movement defect found in the changed display paths.

Security review: did not run — openrouter-http-402. This review is one reviewer short.

Third opinion by claude-opus: 1 finding(s), marked with the model name. It answers only product truth, missing tests and the cross-repo contract, so treat its findings as advice.

Exact head: 7a4772c815ca · Context: repo, design · Took 8m

Comment thread src/app/receipt/[entryId]/pdf/receipt-pdf-model.ts
Comment thread src/features/withdraw/views/WithdrawMethodView.tsx
…n review)

The Argentina rail keeps "own-account" (the rail refuses third-party
transfers); the invite title stays a sentence; the cancel reason stays a
question; "What it unlocks" replaces the generic "Features"/"Benefits";
"Requested from" reads with the name after it. Drops the last mainHeading
prop the dev merge brought in.
@Hugo0

Hugo0 commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

Chip findings addressed: build fix (f637063), stale mainHeading prop (b39d079), and the Argentina rail keeps own-account wording ("QR payments and own-account transfers", matching compare.items.arQr) in b39d079. /chip review

@chip-peanut-bot chip-peanut-bot Bot 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.

Chip review — no blocking findings — this is not an approval

No findings at this head. Prior findings P1, P2, and P3 are fixed.

Checked clean

  • P1 fixed: the PDF formatter imports a server-safe currency-symbol table; exact-head press-contract build succeeded.
  • P2 fixed: the remaining merged WithdrawMethodView test call no longer passes mainHeading; exact-head typecheck succeeded.
  • P3 fixed: Argentina onboarding copy again limits transfers to own accounts across the affected locales, consistent with product documentation.
  • Reviewed the merge-base diff, success-label callers, request and receipt amount formatting, locale copy, and security boundaries; no further reachable defect found.
  • Unit, typecheck, and press-contract checks succeeded. The es-419 screenshot capture failed in the next/font Google font loader, outside changed code; other visual jobs were still running at review time.

Security review: did not run — openrouter-http-402. This review is one reviewer short.

Third opinion: did not run — it reads only the first review of a pull request; the first reviewer checks later rounds. This review is one reviewer short.

Exact head: b39d07987f43 · Context: repo, product, design, lexicon · Took 8m

@github-actions

Copy link
Copy Markdown
Contributor

🖼 Visual diff — 17 screens moved

30 of 164 shots changed · 134 identical · baseline 908950d → head b39d079

worst % screen widths
48.82% early-user 320
15.26% avatar-picker 320, 430
9.19% empty-accounts 320, 430
0.82% hugo-long-username 320, 430
0.82% long-full-name 320, 430
0.82% profile 320, 430
0.74% send 320, 430
0.70% setup-pending 320, 430
0.69% empty-history 320, 430
0.27% rewards-invites 320, 430
0.21% get-paid-provisioning 430
0.17% profile-edit-unverified 320, 430
0.17% profile-edit 320, 430
0.16% rewards 430
0.07% guest-invite 320
0.05% get-paid-claim 320, 430
0.05% get-paid-claim-eur 320, 430

job summary · before/after/diff images — artifact

Fixture screenshots, no backend. Advisory — this check never blocks a merge. Posted from the default branch by ds-shots-comment.yml; the report it renders is untrusted data.

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

English · Español · Español (Argentina) · Português (Brasil)

Open screen library dashboard

After merge: 9a374bb → 4b47ee9. Capture complete in all locales.

@Hugo0
Hugo0 merged commit 4b47ee9 into dev Sep 25, 2026
50 of 54 checks passed
Hugo0 added a commit that referenced this pull request Sep 25, 2026
…#3454)

The app names these accounts "virtual account" everywhere since #3446.
The prefilled support subjects and the load-error fallback still said
"deposit account", so the user and support saw two names for one thing.

This branch was successfully deployed

1 active deployment
Preview — b39d0798 Deployed Sep 24, 2026 by vercel[bot]
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.

1 participant