copy: clearer, shorter, warmer English across errors, pickers, launch - #5859
copy: clearer, shorter, warmer English across errors, pickers, launch#5859Hmbown wants to merge 3 commits into
Conversation
Rewrite $\sim0 error/status strings in en.json (send failures, permissions, sessions, automation, compaction, provider, telemetry prefs, voice, clipboard) and lowercase the product name to codewhale in user-visible inline errors. Keys, placeholders, and parsed punctuation unchanged. Tests: 167 targeted + 704 config/runtime_api pass; 65 locale goldens pass; cargo fmt clean; check-tui-product-vocabulary.sh clean.
Rewrite picker/menu/config/fleet/provider/plugin copy in en.json (shorter, warmer; product name lowercased to codewhale) and sync the inline translate() fallbacks plus registry strings that render the same copy. Keys, placeholders, and parsed punctuation unchanged; test-pinned phrases (session-model-only, context length/size, provider rejection wording) preserved. Tests: 1401 targeted pass; 65 locale goldens pass; cargo fmt clean; check-tui-product-vocabulary.sh clean.
Rewrite launch/setup/onboarding/telemetry-notice/command-help copy in en.json (shorter, warmer; product name lowercased to codewhale, zero capitalized values left) and sync the inline English strings that render the same copy. Keys, placeholders, and parsed punctuation unchanged; test-pinned phrases (unknown-command head, context length/size, separate sign-in, Nothing deleted) preserved. Pixel-blessed launch goldens untouched (menu keeps Changelog). Tests: full codewhale-tui lib suite 11909 pass; cargo fmt clean; check-tui-product-vocabulary.sh clean.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_c7958475-3c9d-42ff-9432-384f33cf54f0) |
|
Claude finished @Hmbown's task in 2m 59s —— View job Review complete
Verified the diff is copy-only: for every changed Rust file I diffed Finding: inconsistent, unintentional downcasing of the "Codewhale" brand nameThis PR silently lowercases the product name — It also isn't a clean, complete rename — 815 occurrences of capitalized
Recommend either reverting the casing changes (keep only the wording/tone rewrites) or, if lowercasing is an intentional new style, calling that out explicitly and doing it as a complete, dedicated pass (with the vocabulary gate in No other correctness, provider/route-safety, reuse, or security issues found — this is a low-risk, copy-only change apart from the branding-casing regression above. |
There was a problem hiding this comment.
🟡 Changes recommended
Multiple user-facing strings change the product name capitalization to “codewhale”, which conflicts with the project’s branding convention and creates cross-locale inconsistency.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR updates English UI copy across the TUI (errors, pickers, onboarding, help text, and toasts) while keeping localization keys stable and adjusting tests to match the new phrasing.
Changes:
- Refreshes many user-facing strings for brevity/clarity in both Rust sources and
locales/en.json. - Updates a wide set of golden/locale/UI tests to assert against the new English copy.
- Tweaks assorted command/help/telemetry text and small UI labels (fleet, plugins/MCP, compaction, queue, clipboard).
File summaries
| File | Description |
|---|---|
| crates/tui/src/tui/widgets/pending_input_preview.rs | Updates pending-input preview test expectations to match new copy. |
| crates/tui/src/tui/views/mod.rs | Updates fleet/subagent-related view tests for revised strings. |
| crates/tui/src/tui/views/fleet_list.rs | Adjusts delete-failure wording in fleet list outcome. |
| crates/tui/src/tui/ui/tests.rs | Updates UI tests to reflect revised toasts/notices/copy. |
| crates/tui/src/tui/ui/handlers.rs | Tweaks session-deleted status message wording. |
| crates/tui/src/tui/ui/event_loop.rs | Updates clipboard/toast wording and a fleet status test string. |
| crates/tui/src/tui/ui/dispatch.rs | Refines /queue send parsing error messages. |
| crates/tui/src/tui/ui/apply.rs | Updates provider-resolution error message copy. |
| crates/tui/src/tui/setup/mod.rs | Updates setup wizard hint text. |
| crates/tui/src/tui/provider_picker.rs | Updates provider picker tests for revised consent/storage copy. |
| crates/tui/src/tui/phase_strip.rs | Updates telemetry notice truncation test text. |
| crates/tui/src/tui/onboarding/trust_directory.rs | Updates onboarding trust copy expectations. |
| crates/tui/src/tui/keybindings.rs | Updates keybinding description expectations. |
| crates/tui/src/tui/hotbar/actions.rs | Revises hotbar action descriptions. |
| crates/tui/src/tui/context_inspector.rs | Updates context inspector “empty state” copy in tests. |
| crates/tui/src/tui/approval/elevation.rs | Shortens elevation option descriptions and test strings. |
| crates/tui/src/tools/subagent/mod.rs | Revises a fleet/vision route-requirements error message. |
| crates/tui/src/tools/shell.rs | Revises persistent-service messaging copy. |
| crates/tui/src/tools/review.rs | Updates review tool “client unavailable” message and tests. |
| crates/tui/src/tools/read_media.rs | Revises denylist/credential-path error text and tests. |
| crates/tui/src/skill_state.rs | Updates state-directory context string. |
| crates/tui/src/settings.rs | Updates settings help text for theme directory wording. |
| crates/tui/src/runtime_api.rs | Updates runtime API validation error copy. |
| crates/tui/src/remote_control.rs | Revises many remote-control parsing/network error strings. |
| crates/tui/src/dispatch_runner.rs | Updates cloud dispatch notes/PR body copy and tests. |
| crates/tui/src/continual_harness.rs | Updates schema-version mismatch message copy. |
| crates/tui/src/config.rs | Updates many “will not guess/fall back” config error strings. |
| crates/tui/src/config_ui.rs | Updates schemars field description for custom theme naming. |
| crates/tui/src/commands/groups/utility/update.rs | Updates update-flow message about restarting. |
| crates/tui/src/commands/groups/utility/mcp.rs | Shortens MCP recommendation fallback strings and tests. |
| crates/tui/src/commands/groups/plugins/tests.rs | Updates plugin list test label (“legacy plugin tools”). |
| crates/tui/src/commands/groups/core/core.rs | Updates help/dashboard/subagent-related command output tests. |
| crates/tui/src/commands/groups/core/copy.rs | Updates /copy command test messages to new phrasing. |
| crates/tui/src/commands/groups/config/permissions.rs | Updates permissions messaging expectations. |
| crates/tui/src/commands/groups/config/config.rs | Updates invalid-choice config messaging expectations. |
| crates/tui/src/cloud_dispatch.rs | Revises cloud dispatch status/notes copy. |
| crates/tui/locales/en.json | Applies the bulk of the English copy refresh for UI strings. |
Review details
Suppressed comments (1)
crates/tui/src/remote_control.rs:3785
- Branding: this is a user-facing error path (remote control exchange). Use the public product name "Codewhale" rather than lowercasing it.
.ok_or_else(|| "codewhale returned an invalid device authorization expiry.".to_string())?;
- Files reviewed: 39/40 changed files
- Comments generated: 5
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| "ExtensionsSkillRootGlobal": "Global codewhale skills", | ||
| "ExtensionsSkillRootProject": "Project codewhale skills", |
| about = "codewhale terminal coding agent", | ||
| long_about = "Terminal-native TUI and CLI for open-source and open-weight coding models.\n\nRun 'codewhale' to start.\n\nProvider routes include DeepSeek, Arcee, Hugging Face, OpenRouter, Xiaomi MiMo, local vLLM/SGLang/Ollama, and more." |
| .filter(|value| (1..=30).contains(value)) | ||
| .ok_or_else(|| { | ||
| "Codewhale returned an invalid device authorization interval.".to_string() | ||
| "codewhale returned an invalid device authorization interval.".to_string() |
| .send() | ||
| .await | ||
| .map_err(|_| "Remote-control authorization could not reach Codewhale.".to_string())?; | ||
| .map_err(|_| "Remote-control authorization could not reach codewhale.".to_string())?; |
| if options.web && options.host != "127.0.0.1" { | ||
| bail!("Codewhale web is loopback-only and must bind to 127.0.0.1"); | ||
| bail!("codewhale web is loopback-only and must bind to 127.0.0.1"); | ||
| } |
There was a problem hiding this comment.
Codewhale review
PR is a large copy cleanup across en.json and several Rust user-facing strings. It is mostly mechanical and the touched tests were updated consistently. Two small copy-accuracy/consistency problems remain: a misleading permission error message and a missed lowercase product name, plus one help description that drops still-supported operations.
Findings
- [WARNING] PermissionsOperationFailed copy is misleading for read-only list failures (
crates/tui/locales/en.json:388)
The string was changed to 'Could not update the permission rule: {error}', but it is also returned forlist(read-only) and other permission operations. The updated test in crates/tui/src/commands/groups/config/permissions.rs explicitly asserts this message for a malformedlistcommand, so the UI can claim an update happened when no update was attempted. Use an operation-neutral wording such as 'Could not manage permission rules' or restore the previous generic message. - [INFO] Missed lowercase product name in runtime_api.rs (
crates/tui/src/runtime_api.rs:846)
The adjacent line was lowercased tocodewhale web is loopback-only..., but the next bail still readsCodewhale web requires Runtime authentication; remove --insecure. Since this PR lowercases the product name across user-facing strings, this line appears to have been missed. - [WARNING] CmdSkillDescription drops supported update/uninstall operations (
crates/tui/locales/en.json)
The previous description was 'Activate a skill, or install/update/uninstall/trust a community skill'. The new text 'Use, install, or trust a skill' no longer mentions update or uninstall, which are still supported by the/skillcommand. This can make users think those operations don't exist when reading command help.
Suggestions
-
crates/tui/src/runtime_api.rs:846— Lowercase the product name for consistency with the adjacent changed line.bail!("codewhale web requires Runtime authentication; remove --insecure");
Assessment
Copy-only PR with solid test updates. Safe to merge after addressing the misleading permission error copy and the missed lowercase string.
Advisory review by Codewhale (codewhale review --pr 5859 --post, head c665b6c3fb3fcbcf75e5105dbd1d538dd781f53b). Line-specific findings are also posted as inline review comments; mechanical fixes arrive as committable suggestions you can apply from the Files tab. CODEOWNERS approval still governs merge.
| "CmdContextDescription": "Open the context inspector", | ||
| "CmdCostDescription": "Show what this session costs", | ||
| "CmdDiffDescription": "Show changes since this session started", | ||
| "CmdEditDescription": "Edit and resend your last message", |
There was a problem hiding this comment.
[WARNING] PermissionsOperationFailed copy is misleading for read-only list failures
The string was changed to 'Could not update the permission rule: {error}', but it is also returned for list (read-only) and other permission operations. The updated test in crates/tui/src/commands/groups/config/permissions.rs explicitly asserts this message for a malformed list command, so the UI can claim an update happened when no update was attempted. Use an operation-neutral wording such as 'Could not manage permission rules' or restore the previous generic message.
| bail!("codewhale web is loopback-only and must bind to 127.0.0.1"); | ||
| } | ||
| if options.web && options.insecure_no_auth { | ||
| bail!("Codewhale web requires Runtime authentication; remove --insecure"); |
There was a problem hiding this comment.
[INFO] Missed lowercase product name in runtime_api.rs
The adjacent line was lowercased to codewhale web is loopback-only..., but the next bail still reads Codewhale web requires Runtime authentication; remove --insecure. Since this PR lowercases the product name across user-facing strings, this line appears to have been missed.
| bail!("codewhale web is loopback-only and must bind to 127.0.0.1"); | ||
| } | ||
| if options.web && options.insecure_no_auth { | ||
| bail!("Codewhale web requires Runtime authentication; remove --insecure"); |
There was a problem hiding this comment.
Lowercase the product name for consistency with the adjacent changed line.
| bail!("Codewhale web requires Runtime authentication; remove --insecure"); | |
| bail!("codewhale web requires Runtime authentication; remove --insecure"); |
3 commits by surface. Keys frozen (0 MessageId changes, en.json values only across 15 packs untouched). Gates: fmt clean, dead-code PASS at 425, vocab script clean, 117/117 locale+golden tests pass. Full matrix via CI.
No-Issue: copy upgrade tracked in 0.9.12 goal.
Note
Cursor Bugbot is generating a summary for commit c665b6c. Configure here.