Repository navigation
feat(workbench): say so when a Bot Turn ends without a reply or a sleep - #6514
Conversation
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
left a comment
There was a problem hiding this comment.
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.
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
|
Astro-Han
left a comment
There was a problem hiding this comment.
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.
The reviewed exact head
|
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
sleepexists the two can be told apart, so Chat says so when it matters.Change
For a finished Bot Turn the Chat view now distinguishes:
SendUsermessage(s)sleep, nothing sentSendUsernorsleep(completed)botTurnEndinginbotTranscriptCore.tsis a pure function with node tests: replied, quiet, unanswered, and running/failed/stopped/unknown never reported as unanswered.Conversation.tsxdecidessleptfrom the Turn's tool rows (row.tool.call.name === 'sleep') and adds abotNoteentry after the Turn's messages;BotNoteinBotReply.tsxrenders 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 checkon the six touched files: clean. UI typecheck (ui_typesexample plustsc): no errors.completed, noSendUser, nosleep), and one where it calledsleepwithout 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
sleepdetection 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