Skip to content

hotfix(re-consent): copy that answers the question users are actually asking - #2595

Merged
abalinda merged 3 commits into
mainfrom
hotfix/re-consent-copy
Jul 31, 2026
Merged

hotfix(re-consent): copy that answers the question users are actually asking#2595
abalinda merged 3 commits into
mainfrom
hotfix/re-consent-copy

Conversation

@0xkkonrad

@0xkkonrad 0xkkonrad commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Per Konrad's Slack note on the terms popup: the modal announced a change without saying what changed, which for someone with money in the app reads as "are the fees going up / is my data being sold". This replaces the copy so the first sentence answers that question.

Before

We've updated our terms
We've refreshed the documents below. Give them a read and accept when you're ready — you can keep using Peanut in the meantime.

After

A small update to our terms
Nothing changes about your fees, your funds, or how we handle your data.
We've rewritten the documents below in plain language so they match what Peanut is today, including the Peanut Card and Rewards. There's no rush — read them whenever, and keep using Peanut as usual.

Every claim is checked against what actually happened:

  • "Nothing changes about your fees, your funds, or how we handle your data" — verified against the tos-v1 rulings (mono inbox/tos-v1/drafts/RULINGS.md): no fee change (there are none to change), custody model untouched, and the privacy rewrite describes existing practices accurately (real processor list) rather than changing them.
  • What changed — the 2026-07-15 update was a full rewrite retiring the old Notion-era documents (wrong entity, DAO-era audience) so they match today's product. The copy says that, because it's the true and more reassuring story.
  • "There's no rush" — literal, not soothing: the modal is a prompt, not a gate. "Not now" snoozes to the documents' effective date (ToS §17.2), so deferring is genuinely fine and now sounds fine — this also removes the dark-pattern contradiction Konrad flagged.

A code comment marks the what-changed line as specific to the 2026-07-15 rewrite, so the next document version bump revisits it instead of shipping stale reassurance.

Hotfix, targets main directly (retargeted per Konrad — the modal only exists on main). The branch is based on #2589, so this PR carries @jjramirezn's visual-polish commit plus the copy commit; whichever of the two merges first, the other's diff shrinks accordingly. CTA labels are unchanged, so the 16 modal tests still pass.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Updated the re-consent message with clearer information about fees, funds, data handling, and continued use of Peanut.
    • Simplified the acceptance checkbox wording.
    • Improved button layout and styling for stacked actions, including the “Not now” option.

jjramirezn and others added 2 commits July 30, 2026 12:52
ActionModal's sm:flex-1 (built for side-by-side CTAs) squashed the
stacked h-13 buttons; 'Not now' inherited .btn's font-bold and competed
with the primary; the checkbox label wrapped to two lines on mobile.
The modal told people something changed without saying what — for a
user with money in the app that reads as fees going up or data being
sold. The new copy answers that question first (fees, funds, data
handling: unchanged), says what the 2026-07-15 tos-v1 rewrite actually
did, and makes deferring look as fine as it actually is ("Not now"
snoozes to the effective date).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 31, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
peanut-wallet Ready Ready Preview Jul 31, 2026 10:38am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The re-consent modal now provides specific document-update context, confirms unchanged fees, funds, and data handling, updates the acceptance checkbox text, and adjusts stacked CTA styling.

Changes

Re-consent modal updates

Layer / File(s) Summary
Update modal copy and CTA presentation
src/components/Global/ReConsentModal/index.tsx
The modal copy explains the rewritten documents and unchanged fees, funds, and data handling. The checkbox now states acceptance of the updated documents. Stacked CTA buttons no longer flex-expand, and “Not now” uses grey, normal-weight text.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

Suggested labels: enhancement

Suggested reviewers: jjramirezn

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the re-consent copy update and reflects the primary purpose of the pull request.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Fix failing CI checks
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch hotfix/re-consent-copy

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed: dependency version conflict. Check your lock file or package.json.


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.

@0xkkonrad
0xkkonrad changed the base branch from hotfix/re-consent-modal-polish to main July 31, 2026 10:25
Updated text to be non obvious ai write

Signed-off-by: ab <78670703+abalinda@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Code-analysis diff

Painscore total: 6349.78 → 6350.22 (+0.44)
Findings: 0 net (+2 new, -2 resolved)

🆕 New findings (2)

  • medium complexity — src/components/Global/ReConsentModal/index.tsx — CC 29, MI 59.44, SLOC 147
  • medium high-mdd — src/components/Global/ReConsentModal/index.tsx:39 — ReConsentModal: MDD 25.6 (uses across many lines from declarations)

✅ Resolved (2)

  • src/components/Global/ReConsentModal/index.tsx — CC 29, MI 59.59, SLOC 145
  • src/components/Global/ReConsentModal/index.tsx:39 — ReConsentModal: MDD 24.5 (uses across many lines from declarations)

@github-actions

Copy link
Copy Markdown
Contributor

🧪 UI test report — ✅ all green

Suites

  • unit: 2294 ran, 0 failed, 0 skipped, 39.3s

📊 Coverage (unit)

metric %
statements 62.5%
branches 45.9%
functions 52.2%
lines 62.9%
⏱ 10 slowest test cases
time test
3.6s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › never places two stickers in heavy overlap (broad seed sweep)
1.0s src/utils/__tests__/demo-api.test.ts › isDemoMode() is false when not running under Capacitor
0.5s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › every sticker stays within canvas at any count
0.4s src/app/actions/__tests__/api-headers.test.ts › should include Content-Type in validateInviteCode
0.3s src/app/actions/__tests__/api-headers-extended.test.ts › should not include apiKey in validateInviteCode body
0.3s src/app/(mobile-ui)/withdraw/__tests__/withdraw-states.test.tsx › Bank withdrawal keeps the $1 minimum for sub-$1 amounts
0.3s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › keeps stickers off the username pill (final pass respects the keep-out)
0.2s src/utils/__tests__/demo-balance.test.ts › resetDemoBalance refills and restarts the TTL window
0.2s src/utils/__tests__/demo-balance.test.ts › auto-refills a stored balance that has no timestamp (legacy install)
0.2s src/utils/__tests__/demo-balance.test.ts › keeps a spent-down balance across a cold start within the TTL
📍 Inline annotations are in the **Unit test report** check above. Coverage artifact: `coverage-unit`. Generated by `.github/workflows/tests.yml`.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/components/Global/ReConsentModal/index.tsx (1)

170-170: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a regression assertion for the acceptance wording.

The existing tests toggle consent-checkbox but do not render or assert checkbox.text. Update src/components/Global/ReConsentModal/__tests__/index.test.tsx to cover “I accept the updated documents”.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/Global/ReConsentModal/index.tsx` at line 170, Add a regression
assertion in the ReConsentModal tests for the checkbox text “I accept the
updated documents”. Render or query the consent checkbox’s text in the existing
test setup and assert the expected wording, while preserving the current
consent-checkbox toggle coverage.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/Global/ReConsentModal/index.tsx`:
- Line 137: Update the title prop in ReConsentModal to “A small update to our
legal documents” so it accurately covers both privacy and terms documents
represented by outdatedDocs.
- Around line 150-152: Update the copy in ReConsentModal to split the final
comma-spliced sentence into separate sentences, preserving the existing meaning
and all other wording.

---

Nitpick comments:
In `@src/components/Global/ReConsentModal/index.tsx`:
- Line 170: Add a regression assertion in the ReConsentModal tests for the
checkbox text “I accept the updated documents”. Render or query the consent
checkbox’s text in the existing test setup and assert the expected wording,
while preserving the current consent-checkbox toggle coverage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c2d0f170-4bb7-4bfa-a30f-9fdf43434bd8

📥 Commits

Reviewing files that changed from the base of the PR and between 4b1b482 and 9194fff.

📒 Files selected for processing (1)
  • src/components/Global/ReConsentModal/index.tsx

onClose={handlePostpone}
icon="info"
title="We've updated our terms"
title="A small update to our terms"

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use a title that covers every displayed document.

outdatedDocs can include privacy as well as terms. The adjacent test renders both documents. If only the privacy document is outdated, “A small update to our terms” is misleading. Use “A small update to our legal documents”.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/Global/ReConsentModal/index.tsx` at line 137, Update the title
prop in ReConsentModal to “A small update to our legal documents” so it
accurately covers both privacy and terms documents represented by outdatedDocs.

Comment on lines +150 to +152
We've rewritten the documents below in plain language so they match what Peanut is today,
including the Peanut Card and Rewards. There's no rush, read them whenever, and keep using
Peanut as usual.

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Split the final sentence.

The text contains a comma splice. Use separate sentences.

Suggested copy
-                        including the Peanut Card and Rewards. There's no rush, read them whenever, and keep using
+                        including the Peanut Card and Rewards. There's no rush. Read them when you're ready, and keep using
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
We've rewritten the documents below in plain language so they match what Peanut is today,
including the Peanut Card and Rewards. There's no rush, read them whenever, and keep using
Peanut as usual.
We've rewritten the documents below in plain language so they match what Peanut is today,
including the Peanut Card and Rewards. There's no rush. Read them when you're ready, and keep using
Peanut as usual.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/Global/ReConsentModal/index.tsx` around lines 150 - 152,
Update the copy in ReConsentModal to split the final comma-spliced sentence into
separate sentences, preserving the existing meaning and all other wording.

@abalinda
abalinda merged commit 3115650 into main Jul 31, 2026
21 of 25 checks passed
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.

3 participants