Skip to content

copy: clearer, shorter, warmer English across errors, pickers, launch - #5859

Open
Hmbown wants to merge 3 commits into
mainfrom
chore/copy-upgrade-20260902
Open

copy: clearer, shorter, warmer English across errors, pickers, launch#5859
Hmbown wants to merge 3 commits into
mainfrom
chore/copy-upgrade-20260902

Conversation

@Hmbown

@Hmbown Hmbown commented Sep 2, 2026

Copy link
Copy Markdown
Owner

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.

CodeWhale Bot added 3 commits September 2, 2026 13:32
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.
Copilot AI lite review requested due to automatic review settings September 2, 2026 21:28
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@cursor

cursor Bot commented Sep 2, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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

claude Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Claude finished @Hmbown's task in 2m 59s —— View job


Review complete

  • Gather context (PR diff, changed files)
  • Understand request (code review of copy changes)
  • Review correctness (no logic changes expected — pure copy PR)
  • Review provider/model/route safety implications
  • Review reuse/simplification
  • Check test coverage
  • Security check
  • Post final review

Verified the diff is copy-only: for every changed Rust file I diffed HEAD~3..HEAD and confirmed the only non-whitespace changes are inside string literals (no logic, control flow, or signature changes). en.json keys are unchanged; only values changed, matching the PR description. Test assertions were updated in lockstep with the new copy, so nothing here looks like it'll fail CI.

Finding: inconsistent, unintentional downcasing of the "Codewhale" brand name

This PR silently lowercases the product name — Codewhalecodewhale — mid-sentence, in ~170+ user-facing strings across en.json and ~15 Rust files (cloud_dispatch.rs, config.rs, lib.rs, dispatch_runner.rs, core.rs, mcp.rs, remote_control.rs, etc.). AGENTS.md states plainly: "Public name is Codewhale." — this isn't a stylistic nit, it's the documented product name, and the PR description doesn't mention a branding change as part of this "warmer copy" pass.

It also isn't a clean, complete rename — 815 occurrences of capitalized Codewhale remain untouched elsewhere in the same files, so the result is an inconsistent mix rather than a deliberate style shift. Concretely visible examples:

  • crates/tui/src/lib.rs:208 — the CLI's top-level about = "codewhale terminal coding agent" is now lowercase, but the Login subcommand doc-comment three lines away at crates/tui/src/lib.rs:310 ("/// Sign in to your Codewhale account"), which renders as --help text in the same command tree, still says Codewhale. Running codewhale-tui --help next to codewhale-tui login --help now shows two different capitalizations of the product name.
  • crates/tui/src/commands/groups/core/core.rs:599 prints MessageId::HomeDashboardTitle as the literal first line of the in-app Home Dashboard — that title is now lowercase "codewhale" (locales/en.json), a directly user-visible regression to the app's own name in its own dashboard header.
  • crates/tui/src/config.rs — a dozen+ "will not fall back" provider-config error messages now read "...; codewhale will not guess or fall back" (lowercase), while comparable error strings elsewhere in the codebase remain 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 scripts/check-tui-product-vocabulary.sh extended to enforce it), rather than as an incidental side effect of ~170 scattered copy edits.

Fix this →

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.

Copilot AI 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.

🟡 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.

Comment on lines +53 to +54
"ExtensionsSkillRootGlobal": "Global codewhale skills",
"ExtensionsSkillRootProject": "Project codewhale skills",
Comment thread crates/tui/src/lib.rs
Comment on lines +208 to 209
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())?;
Comment on lines 842 to 844
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");
}

@codewhale-agent codewhale-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 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.
  • [INFO] Missed lowercase product name in runtime_api.rs (crates/tui/src/runtime_api.rs:846)
    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.
  • [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 /skill command. 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",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lowercase the product name for consistency with the adjacent changed line.

Suggested change
bail!("Codewhale web requires Runtime authentication; remove --insecure");
bail!("codewhale web requires Runtime authentication; remove --insecure");

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.

2 participants