Skip to content

Label a message stopped before the agent began on it plainly as "Stopped" - #26381

Merged
brennanb2025 merged 2 commits into
mainfrom
brennanb2025/stopped-label-plain
Oct 8, 2026
Merged

brennanb2025 merged 2 commits into
mainfrom
brennanb2025/stopped-label-plain

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

ELI5

When you press Stop before the agent has begun working on your message, the chat keeps your message and shows a short line under it. That line used to say "Stopped before the agent started". It now says "Stopped manually".

What Changed

Before: a message that Stop took back before the agent began on it was followed by "Stopped before the agent started". The words read as if the agent program itself had not started up, but the line also appears when the agent is already running. Examples: a message waiting behind the current reply, or one the agent was handed but had not begun.

After: the same line says "Stopped manually", in all six desktop languages and in the phone app's built-in English. Nothing else changes: the line still appears in the same cases, in the same place, and the message stays on screen as before.

The internal marker that phones and desktops exchange for this row (stopped-before-start) is unchanged. A phone and a desktop on different versions keep working together, and each one shows its own words.

Why

Whether the Stop landed while the agent was starting up, or while the message was waiting, is an internal detail, and the old wording exposed it. "Stopped manually" follows the common pattern's wording for a Stop the user pressed: it says the user stopped it and does not say when the Stop landed. Each translation is the plain phrase for "stopped manually" in that language.

Linked Issue

Follow-up to #26332 (a new chat's first message now uses this row when stopped) and #25051 (which added the row). No issue.

Visual Proof

Before (main, from the QA for #26332): a stopped message is followed by "Stopped before the agent started".

Before: Stopped before the agent started

After (this branch, head 50de8e7, hidden macOS window driven over the Chrome debugging protocol, isolated profile, stand-in Codex). In an existing chat whose agent had exited, a message was sent and Stop was pressed while the agent was still starting. The row reads "Stopped manually" and the composer is empty. The stand-in's log shows that message never reached it. The earlier "second message" with "Worked for 8s" above it is a previous attempt where Stop came too late and the turn ran normally.

After: Stopped manually

The two screenshots show different chats (a new chat's first message before, an existing chat's second message after). The row is the same one in both cases. Not captured: the brief "Stopping" moment before the row settles.

Testing

  • I manually tested these changes locally (hidden-window macOS QA, screenshot above)
  • Automated tests added/updated, or explained why not below

The three tests that render this row (desktop message list for an opening send, desktop stopped-message list, and the phone's stopped-message test) now expect "Stopped manually" and pass: 13 desktop tests and 1 phone test. Localization extraction, catalog and coverage checks, and the changed-code quality gate pass locally. CI on the earlier "Stopped" head 6d436b8 passed (24 passed, 37 skipped, none failed); the final head changes the same 11 lines again. Tested on macOS only; this is a text change with no platform-specific code.

Review

Self-reviewed. Text-only change in 11 files: the shared English fallback, the desktop fallback, six translation files and three tests.

Agent skill upstream boundary

  • Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

No security, SSH, Windows or Linux impact. A phone running an older version keeps showing the old words until it updates; the row itself is unchanged.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

@brennanb2025

brennanb2025 commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor Author

Review summary

Problem: when Stop takes back a message before the agent has begun working on it, the chat keeps the message and shows a row under it reading "Stopped before the agent started". Users read "the agent started" as the agent program starting up. But the row also appears when the agent is already running, for example for a message waiting behind the current reply. The wording exposes an internal detail the user can't act on.

Change for the user: the row now says "Stopped manually", in all six desktop languages and in the phone's built-in English. When it appears, where it sits, and the message staying on screen are all unchanged.

How: text-only, 11 files: the shared English fallback, the desktop fallback, six translation files (each the plain phrase for "stopped manually" in that language), and the three tests that render the row. The marker that phones and desktops exchange for this row is unchanged, so mixed versions keep working. An older phone shows the old words until it updates.

Precedent: "Stopped manually" is the common pattern's wording for a Stop the user pressed. It does not say when the Stop landed.

Verified:

  • 13 desktop and 1 phone test that render the row pass.
  • Localization extraction, catalog and coverage checks, the changed-code quality gate and oxlint pass locally.
  • CI on the earlier "Stopped" head 6d436b8: 24 passed, 37 skipped, none failed. CI on the final head 50de8e7: see checks.
  • Hidden-window macOS QA, screenshot in the PR body: an existing chat, second message stopped while its agent was starting, row reads "Stopped manually", composer empty (head 50de8e7). The stand-in's log shows the message never reached it.

Not verified:

  • The brief "Stopping" moment before the row settles.
  • The other paths that show this row: a message waiting behind a running reply, and a Codex message handed over before a turn opened. Same row and same text, but not rendered here.
  • Linux, Windows, SSH, the phone app on a device, and non-English languages on screen.

Out of scope: queued message cards withdrawn by Stop still read "Stopped before it was sent". A turn stopped while running still reads "Interrupted after Ns".

@brennanb2025
brennanb2025 marked this pull request as ready for review October 8, 2026 01:24
@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

📝 Walkthrough

Walkthrough

The stopped-before-start notice now uses “Stopped manually” in the shared fallback and renderer translations. English, Spanish, French, Japanese, Korean, and Chinese locale strings were updated. Renderer and mobile tests now expect the new wording.

Priority: ⬇️ Low

Merge Risk: 🔵 Low · up to 50de8

People who cancel before the agent starts will see “Stopped manually” instead of the requested “Stopped.” The wording mismatch is bounded and can be corrected locally.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is detailed and covers the user impact, implementation, rationale, testing, visual proof, scope, and checklist. However, the required Linked Issue section states “No issue” and does no… Add the actual issue addressed by this pull request in the Linked Issue section, using the required Fixes #<issue-number> format or the applicable pre-existing issue reference for a maintainer change.
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 5 files. (6 skipped: 6 …
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.
Title check ✅ Passed The title clearly identifies the main user-visible change: simplifying the stopped-message label. It is specific and related to the changeset.
Full details: Description check

Explanation

The description is detailed and covers the user impact, implementation, rationale, testing, visual proof, scope, and checklist. However, the required Linked Issue section states “No issue” and does not provide the actual issue link required by the repository template.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR
  • Autopilot · 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

Comment @coderabbitai help to get the list of available commands.

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

Caution

Some comments are outside the diff and can’t be posted inline due to GitHub limitations.

⚠️ Outside diff range comments (1)

🟡 Minor · Restore the agreed “Stopped” copy. · native-chat-stopped-before-start.ts:21

src/shared/native-chat-stopped-before-start.ts:21
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Restore the agreed “Stopped” copy.

A provider_cancelled_before_start submission reaches withStopRowsAfterStoppedSends, so users can see this row. The current fallback and locale values add “manually”, although the stated contract and the earlier wording commit require “Stopped”. Restore the shared fallback and all localized values.

Suggested fix
- export const NATIVE_CHAT_STOPPED_BEFORE_START_TEXT = 'Stopped manually'
+ export const NATIVE_CHAT_STOPPED_BEFORE_START_TEXT = 'Stopped'
-                'Stopped manually'
+                'Stopped'
-        "stoppedBeforeStart": "Stopped manually",
+        "stoppedBeforeStart": "Stopped",
-        "stoppedBeforeStart": "Detenido manualmente",
+        "stoppedBeforeStart": "Detenido",
-        "stoppedBeforeStart": "Arrêté manuellement",
+        "stoppedBeforeStart": "Arrêté",
-        "stoppedBeforeStart": "手動で停止しました",
+        "stoppedBeforeStart": "停止しました",
-        "stoppedBeforeStart": "수동으로 중지됨",
+        "stoppedBeforeStart": "중지됨",
-        "stoppedBeforeStart": "已手动停止",
+        "stoppedBeforeStart": "已停止",

ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 690f5c4c-5a3f-4931-b166-bf23b3c93346
📥 Commits

Reviewing files that changed from the base of the PR and between 6d436b8 and 50de8e7.

📒 Files selected for processing (11)
  • mobile/src/session/mobile-native-chat-stopped-before-start.test.tsx
  • src/renderer/src/components/native-chat/NativeChatMessageList.opening-send.test.tsx
  • src/renderer/src/components/native-chat/NativeChatMessageList.stopped-before-start.test.tsx
  • src/renderer/src/components/native-chat/native-chat-stopped-before-start-row.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
  • src/shared/native-chat-stopped-before-start.ts
🚧 Files skipped from review as they are similar to previous changes (8)
  • src/shared/native-chat-stopped-before-start.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/components/native-chat/native-chat-stopped-before-start-row.ts
  • src/renderer/src/i18n/locales/fr.json

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 6 remain after this review.

@brennanb2025
brennanb2025 merged commit 7c13552 into main Oct 8, 2026
63 of 65 checks passed
@brennanb2025
brennanb2025 deleted the brennanb2025/stopped-label-plain branch October 8, 2026 02:47
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.

1 participant