UI copy audit — 2026-09-21
Scope
Source-based audit of 6,810 English strings in 16 locale namespaces, with candidate copy traced to renderers and notification call sites. Areas reviewed: Discover, settings/configuration, create/Studio, library/assets/bundles, chat/sandbox, profile/referrals, plans, authentication, community/DM/friends, notifications, extensions, achievements/quests, creator/admin, and game controls. This is a targeted cleanup of the approved shortlist, not a claim that all filler is gone.
This report covers non-Discover UI and corresponding keys in en, es, ja, zh, and zh-Hant. Discover UI, hub.json copy, account persistence, and feed behavior are documented in the account interests verification note. This copy audit used source inspection and non-browser checks; it did not involve production access or new copy-mirroring tests.
Changes
Paths below are relative to packages/app/; locale keys are under src/locales/<language>/.
| Area / keys | Rendered change and evidence |
|---|---|
Settings: settings.json::contentSafety.description, privacy.description | Removed generic section introductions in src/features/settings/settings-page.tsx. Retained the keys for settings search descriptions. |
Wallpaper: wallpaper.opacity.description, wallpaper.gradient.hint, wallpaper.cloudyGlass.hint, wallpaper.autoSaves | Removed redundant slider copy; optional descriptions/hints no longer leave empty elements. Autosave guidance appears once above the three sliders. Opacity description remains in search metadata. |
Support: about.contactSupportDescription, about.messageOfficialHint | Removed “We read every message” and narration beneath the Message button, including the support search blurb. Contact actions remain. |
Auth: auth.json::login.subtitle, register.subtitle, verified.description | Shortened sign-in/account creation labels; removed the welcome paragraph in src/features/auth/verified-page.tsx. Verification status and redirect instructions remain. The login key also serves Krew sign-in. |
Create: library.json::create.mobileSubtitle | Removed the paragraph and decorative wrapper from src/routes/app/worlds.create.tsx; template choices and descriptions remain. |
Editor: editor.json::simple.advancedPromo.title, .subtitle | Neutral heading; removed the promotional paragraph in src/features/editor/quick-create-editor.tsx. Feature bullets, Studio instructions, and reimbursement information remain. |
Media creation: library.json::generation.atelier.lead, .audioLead | Replaced narrated steps and speed claims with the asset-library destination in src/features/generation/generation-atelier.tsx. |
Generation feedback: generation.submittedToast, generation.models.deletedToast, generation.community.collectedToast | Removed redundant calls in use-generation-state.ts, use-models.ts, and community-models.tsx. Jobs/model lists and the Added button still update. Collection exposes aria-pressed; existing job status labels use role="status"; the model list has a polite removal live region. |
Sandbox chat: sandbox/chat/i18n.ts::chatRestarted, revertedToHere | Removed only built-in success announcements from message-input.tsx and message-actions.tsx, plus obsolete dictionary entries. Restart invocation, awaiting behavior, destructive prompts, and errors are unchanged. The sandbox's existing Chinese dictionary serves both Chinese locales. |
Profile: profile.json::referral.subtitle | Removed the repeated invitation line from src/features/profile/profile-sidebar.tsx and src/routes/app/profile.invite-code.tsx. Reward details remain. |
Plans: plans.json::title | “Plans & Mushies” replaces the promotional heading. No other billing copy or behavior changed. |
Chat preview: chat.json::preview.signUpToStart | Shortened the signup button in src/features/chat/world-preview.tsx to “Sign up to play.” |
Removed locale keys were deleted only after their callers were removed; no empty translations were used to hide UI. Other locale strings and placeholders remain unchanged. The shared sandbox toast bridge still supports card-authored messages.
Retained rationale
- Errors, retry guidance, partial outcomes, asynchronous completion/import notices, moderation/report receipts, clipboard feedback, and undo actions communicate results users may not otherwise see.
- Destructive and public-sharing confirmations explain consequences. Payment, refund, renewal, expiry, provider billing, and reimbursement details remain.
- Accessibility labels, progress indicators, and actionable instructions remain. AI terminology, prompt instructions, template content, and user-authored content were not removed simply for mentioning AI.
library:toast.bundleSavedremains because Studio exports can complete while the destination library is not visible. Unused legacy success keys elsewhere were not counted as visible UI fixes.
Validation
- Integrated app regressions: 256 passed, 0 failed. Full monorepo build and typecheck passed, as did the client edition boundary check.
- Existing scoped tests: 18 passed, 0 failed, using the command below from
packages/app. - All 80 locale JSON files parsed. Comparing the 35 edited locale files with HEAD confirmed exactly 95 approved key edits/removals and preserved interpolation placeholders. Searches found no remaining app callers for the removed keys.
- Scoped
git diff --checkpassed. Visual layout and screen-reader behavior were not exercised in a browser.
pnpm exec tsx --tsconfig tsconfig.app.json --test --test-timeout=120000 src/features/settings/settings-search.test.ts src/lib/create-page-mobile-layout.test.ts src/features/generation/generation-recovery.test.tsx src/features/generation/generation-workflow.test.tsx src/features/generation/generation-panel-access.test.tsx