This PR updates the Terms of Service and Privacy Policy so users must be 18 or over, child sexual abuse material (CSAM) is explicitly prohibited, and both documents say how we detect, preserve and report it. It's the legal groundwork for CSAM screening: matching images against known-CSAM lists, even in log-only mode, creates a duty to report, so the terms need to say this before any screening starts.
What changed
Terms of Service (both pages' "last updated" dates are now 29 October 2026):
- §2 Eligibility: the minimum age goes from 13 (under-18s with a parent's permission) to 18.
- §4.3 Content moderation: we still don't monitor content generally, but we may use automated tools, including hash-matching against known CSAM.
- §4.3 Child safety (new paragraph): zero tolerance. We remove the material, suspend the accounts involved without notice or refund, preserve related information we hold, and report to NCMEC, the Internet Watch Foundation or the National Crime Agency. This applies despite content handling, I/O logging and zero data retention promises. "Information we hold" covers zero data retention requests, where we never store content.
- §5 Prohibited use: a new first item covers uploading, generating, requesting, storing or distributing CSAM or content that sexualises minors, and building tools that produce it.
Privacy Policy:
- §3 Legal bases: a new purpose, detecting, preventing and reporting CSAM. Lawful basis: legal obligations and legitimate interests.
- §4 Sharing: a new item for child-safety reports to NCMEC, the IWF, the NCA or other law enforcement.
- §6 Retention: information preserved because of apparent CSAM is kept securely for up to a year, or longer where the law requires. This matches the US one-year preservation period.
- §8 Children: the service is for adults 18 and over only.
Why
- Phaseo accepts and returns images, and stores some (avatars, I/O logs). Providers such as Anthropic report CSAM matches against the account that sent them, which on managed traffic is ours.
- The old terms didn't mention CSAM and said we don't monitor content. That would conflict with the hash-matching we're adding.
- Allowing 13–17-year-olds risked bringing the UK Online Safety Act's children's safety duties into play for a developer API with almost no teenage users.
How
- Text is changed in all 9 full locales (en-GB, de-DE, fr-FR, es-ES, pt-BR, ar-SA, hi, ja, zh-Hans). en-US has no legal overrides, so it uses en-GB. The edits were made by one script so every locale gets the same structural change. The translations are mine and haven't been reviewed by a native speaker. There's no "the English version prevails" clause, so a lawyer may want to add one.
- The only new key is
termsBody.childSafety, rendered under §4.3. The other additions are list items rendered with.map. Nothing reads these lists by index.
Before and after
| Before | After | |
|---|---|---|
| Minimum age (terms + privacy) | 13, or under 18 with a guardian's permission | 18 |
| CSAM mentioned | nowhere | prohibited use, child-safety paragraph, legal basis, sharing, retention |
| Monitoring | "We are not required to monitor User Content" | no general monitoring; automated hash-matching allowed |
| Reporting and preservation | not mentioned | NCMEC / IWF / NCA; preserve for up to one year |
Verification
- With main's
apps/webandapps/docsplus these changes, every step ofpnpm run validate:i18npasses: localisation validation, the message-scope self-test, client scopes, and the docs search check. - All 9 locale files round-trip through JSON unchanged before editing, so the diff contains only the intended keys (+135 / −27).
- Not run locally:
next buildand the page render. They're left to CI and the Vercel preview.
Not legal advice
These are being published now, ahead of the screening work. A lawyer should still review them afterwards. Open points: whether the UK Online Safety Act applies to us, whether to add an English-prevails clause, and whether the age change needs notice to existing users.
Model: Claude Opus 5.5 (effort unknown) · Harness: Claude Code in T3 Code
🤖 Generated with Claude Code
Activity
6WARNING
Review limit reached
You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.
Next included review available in 9 minutes.
View limit details
Limit details: You’ve used the included review currently available.
Review configuration:
Run configuration
- Source mode: Auto
- Repository: Unavailable
- Branch: Unavailable
- File: No configuration file from this repository applied
- Commit: Unavailable
- Layers: defaults
- Review profile: CHILL
- Plan: Advanced
- Run ID:
5cbf17e1-5f5c-4684-ba46-b2c689a08c45
Commits
Reviewing files that changed from the base of the PR and between e8401f91c22182834b15ab3ac00afa7c9705a013 and 90bda4b308bbb1dc1a99a3360ca320ae1ffc30a0.
Files selected for processing: 12
.changeset/terms-child-safety-18-plus.mdapps/web/messages/ar-SA/site.jsonapps/web/messages/de-DE/site.jsonapps/web/messages/en-GB/site.jsonapps/web/messages/es-ES/site.jsonapps/web/messages/fr-FR/site.jsonapps/web/messages/hi/site.jsonapps/web/messages/ja/site.jsonapps/web/messages/pt-BR/site.jsonapps/web/messages/zh-Hans/site.jsonapps/web/src/app/[locale]/(legal)/privacy/page.tsxapps/web/src/app/[locale]/(legal)/terms/page.tsx
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
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
-
- (https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- Mastodon
Comment @coderabbitai help to get the list of available commands.
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-29T17:08:45.492615Z | 90bda4b | PR opened |
ℹ️ 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.
The latest updates on your projects. Learn more about Vercel for GitHub.