Skip to content

feat(workbench): say so when a Bot Turn ends without a reply or a sleep - #6514

Merged
liugddx merged 3 commits into
rust-previewfrom
feat/bot-turn-outcome
Nov 1, 2026
Merged

liugddx merged 3 commits into
rust-previewfrom
feat/bot-turn-outcome

Conversation

@liugddx

@liugddx liugddx commented Nov 1, 2026

Copy link
Copy Markdown
Member

What

Follow-up to #6464 and #6505. Ordinary model text is internal for the Bot, so in the Bot's Chat a Turn that sends nothing looks the same whether the Bot chose to stay quiet or simply ended without answering. Now that sleep exists the two can be told apart, so Chat says so when it matters.

Change

For a finished Bot Turn the Chat view now distinguishes:

Turn ended with Chat shows
SendUser message(s) the messages, as before
sleep, nothing sent nothing: silence is a valid outcome and needs no marker
neither SendUser nor sleep (completed) a muted line, "The Bot did not reply this time" (zh-CN, zh-TW added)
failed or stopped unchanged: the existing summary label and failure row
still running unchanged: the "Working…" row
  • botTurnEnding in botTranscriptCore.ts is a pure function with node tests: replied, quiet, unanswered, and running/failed/stopped/unknown never reported as unanswered.
  • Conversation.tsx decides slept from the Turn's tool rows (row.tool.call.name === 'sleep') and adds a botNote entry after the Turn's messages; BotNote in BotReply.tsx renders it.

This does not change the engine, SendUser, or add any step limit.

Verification

  • node --test products/maka/workbench/tests/bot-transcript.test.mjs: 14 pass (2 new).
  • biome check on the six touched files: clean. UI typecheck (ui_types example plus tsc): no errors.
  • With a real model in the desktop Host, I drove two Turns through ACP and read the event log: one where the Bot answered in plain text with no tool call (ends completed, no SendUser, no sleep), and one where it called sleep without sending. Those are the two cases the Chat logic separates.

Not checked: I could not see the rendered Chat, so the placement and look of the muted line are unverified, and so is the sleep detection from history rows in the running UI. A background wake that ends the same way (for example a scheduled wake) will also show the line.

🤖 Generated with Claude Code

Since a Bot's ordinary text is internal, a Turn that sends nothing looks the
same whether the Bot chose to stay quiet or simply ended without answering.
A Turn that went to sleep without sending is deliberate silence and gets no
marker. A completed Turn that neither sent with SendUser nor called sleep now
shows a muted line, so the user can tell the two apart. Running, failed and
stopped Turns are unchanged and keep their own indicators.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

Automated review notice: This comment was posted by an automated review agent. It is not an independent human review and does not replace one.

Reviewed all six changed files at f933de328233cf3deff4c67a0362346a9a645b34. The change adds a Chat note only for a finished, completed Bot Turn with neither a published reply nor a recorded sleep call. Replies, deliberate silence, active Turns and unsuccessful outcomes retain their separate paths; ordinary model text remains hidden in Bot Chat. I found no confirmed P0–P2 issue in this scope.

The 14 repository transcript tests passed. I also executed the actual display-building closure extracted from Conversation.tsx, together with the actual turnOutcome and new classifier, in 13 controlled projection/outbox cases. These check note placement, reply precedence, sleep-row detection, active/failed/stopped/unknown outcomes, ordinary conversations, Trajectory and unknown Bot identity. All passed; replacing the display closure with its pre-change version loses the note in three completion cases. An actual merge calculation against Rust 2461e0408d598fb367b14779a30e3839511f68b6 is clean, and all six changed file blobs are identical in that merge.

These are source and JavaScript checks with controlled inputs, not a rendered native Chat or real-model acceptance test. I did not run the full UI typecheck, test partial-history loading in a live application, or visually verify spacing and theme behavior. The author's ACP/model observations remain the author's evidence. CI is still running.

P3: the PR declares Claude Code use and the current commit includes co-authorship, but it lacks the required Generated-by: <tool> trailer. Please include that trailer and preserve it when squashing.


Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@Astro-Han

Copy link
Copy Markdown
Contributor

Automated review notice: This comment was posted by an automated review agent. It is not an independent human review and does not replace one.

CI follow-up: run 41263362556 finished with 1947 passed, 8 failed and 26 skipped. Its eight failing test names match the 6513 run: two Root/cleanup assertions, four composer/component cases and two workspace-list cases. Neither failed log reports disk exhaustion. This comparison does not identify which change introduced those failures, and the PR is not all green. The separate run on Rust 2461e040 was cancelled; that cancellation is not a successful test result.


Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@github-actions github-actions Bot added the effort/S Under 100 readable lines label Nov 1, 2026

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

Automated review notice: This comment was posted by an automated review agent. It is not an independent human review and does not replace one.

I rechecked the current six-file diff at 4482dd97376ba0f971b51c200ce292fe7eefcba5 after it incorporated Rust d513a72e7ebdc11842442341bbf680deac886835.

The author patch has the same stable patch ID as reviewed f933de328233cf3deff4c67a0362346a9a645b34 (6381a58da8c63aecd6dd76f1551e3d07d3ff123a); all six changed files are byte-identical to that reviewed version. The new base's storage, Computer Use, notices and CI changes are separate incoming changes. I reread the current Bot note predicate, display integration, translations and tests; no new confirmed P0–P2 finding follows from this update.

The earlier 14 repository tests and 13 controlled checks belong to the original review and were not rerun here. Its limitations still apply: no native visual acceptance, partial-history loading or actual model behavior validation on this machine. The missing Generated-by: attribution remains a P3 on the author's contribution. Current CI is still running under the new parallel workflow; the old run's eight Rust failures do not establish a failure of this updated head. No approval or merge is implied.


Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 497e235 into rust-preview Nov 1, 2026
9 checks passed
@liugddx
liugddx deleted the feat/bot-turn-outcome branch November 1, 2026 06:30
@Astro-Han

Copy link
Copy Markdown
Contributor

Automated review notice: This comment was posted by an automated review agent. It is not an independent human review and does not replace one.

The reviewed exact head 4482dd97376ba0f971b51c200ce292fe7eefcba5 now has successful CI 41277885693 and was merged as 497e2353. This replaces the prior pending-CI statement for that head. It does not turn my source comparison into local native visual, partial-history or actual-model acceptance. Later recovery/UI changes on Rust are separate scope.


Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/S Under 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants