Skip to content

Agent chat: Claude's hover rows under every message (read receipts, Pin, Read aloud) - #22773

Merged
teamleaderleo merged 27 commits into
feat-cmux-nextfrom
leo/message-hover-rows
Oct 21, 2026
Merged

teamleaderleo merged 27 commits into
feat-cmux-nextfrom
leo/message-hover-rows

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Builds on #22675 (transcript-density's action rows, merged).

Problem

Leo (2026-10-20): the rows under chat messages should match Claude Code desktop.

  • Hovering an answer drew a box around it with "6:29 PM" and Copy at the far right.
  • Under a prompt there was only a lone bookmark icon, plus "Steered · the agent read it" under steers.

Change

  • Under an answer (TurnRows.tsx TurnFooter), at the answer's left edge:
    • Copy, Fork from here, Pin, Read aloud, then the answer's age ("43 minutes ago"; the exact date and time on hover).
    • Fork's tooltip has Claude's second line: "Starts a new session from this point. This one stays as it is." (data-tooltip-detail in ui/titleTooltips.ts).
    • Retry moved to the prompt. The answer footer no longer draws a focus outline; focusing it shows its row instead.
  • Under a prompt (UserBubble.tsx), at the bubble's right edge:
    • the age, a read receipt, Copy, Edit, Retry (only on the last ended turn's prompt), Fork and Pin.
    • The read receipt is ✓ "Delivered when the current step ends" while a steer waits (steer-default's wording; it drops its own waiting marker) and ✓✓ once the agent read it; hovering ✓✓ shows "Read by Claude Code" (the harness name).
  • Hover only. Neither row shows until you hover or focus it. Each keeps its height, so nothing shifts when it appears. Hovering a prompt shows only the prompt's row, not its turn's footer too, so one row shows at a time.
  • Removed: SteerMark ("Steering…" / "Steered · the agent read it"), the bookmark icon under prompts, and the always-on row for the latest prompt and turn.
  • Pin reuses the thread minimap's bookmarks. acpmux now also accepts a turn's turn_result seq, so answers can be pinned too (hub/bookmarks.rs).
    • Pinned prompts show in the minimap as before.
    • Pinned answers aren't listed in the summary panel yet (follow-up).
  • Read aloud uses the web view's speechSynthesis (the macOS voice). It is one message at a time, and pressing it again stops.
  • New strings, in all 21 locales: message.readBy, message.readByAgent, message.delivered, message.pin, message.unpin, message.readAloud, message.stopReading, turn.forkDetail. Removed the unused steer.*, message.read and message.unread.

Observed / Not run

  • Ran scripts/cmux-next/prepush-gate.py: no new violations.
  • Not run locally: web lint, typecheck, vitest and cargo. Cosmic-gray was at load 80, so CI runs these. Tests that pinned the old rows still need updating (in progress).

Changelog

  • Changed: Chat messages show Claude-style hover action rows: Copy, Fork, Pin, Read aloud and the message's age under answers; age, read receipt, Copy, Edit, Retry and Fork under prompts.

Agent session: cosmic-gray

🤖 Generated with Claude Code


Summary by cubic

Matches Claude Code desktop's hover action rows under every chat message, on hover or focus only. Answers show Copy, Fork (with Claude's "starts a new session" tooltip), Pin, Read aloud and the message's age under their left edge; prompts show age, a read receipt, Copy, Edit, Retry, Fork and Pin under the bubble's right edge; another agent's message shows age, the receipt, Copy, Retry and Pin under its card, after its Reply. A Chief-sent prompt gets the same row as one the person sends. The receipt is one check while a steer waits and two once read ("Read by "). The Steered line, the lone bookmark icon and the always-on latest rows are gone, and no answer footer draws a focus box. This also reconciles with base's steer-as-one-turn, row-height-estimate, Reply placement and rewritten Retry model menu (RetryModelMenu.tsx) changes, which the prompt's row and a failed turn's footer now reuse; Copy reuses base's CopyButton (tooltip name, resetting check).

Bug Fixes

  • Fixes the row-height estimate to reserve a line under a steer only while it waits.
  • A pinned prompt or answer keeps its pin through a fork.
  • The waiting receipt's tooltip gets its own locale key: base's message.delivered belongs to MessageCard.

Written for commit 1e73560. Summary will update on new commits.

View guided diff Turn on auto-fix

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-3c3ng created for this PR by the cmux coordinator.

teamleaderleo added a commit that referenced this pull request Oct 21, 2026
Puts back the two-tick wording in UserBubble.tsx and conversation.css,
which #22773 owns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray
teamleaderleo and others added 2 commits October 20, 2026 19:15
… with read receipts, Pin and Read aloud

Answers: Copy, Fork from here (with Claude's tooltip), Pin, Read aloud and the
answer's age, under the left edge, on hover or focus only. Prompts: age, a
read receipt (one check delivered, two read, 'Read by <agent>'), Copy, Edit,
Retry, Fork and Pin under the bubble's right edge. The 'Steered · the agent
read it' mark and the lone bookmark are gone; the answer footer draws no
focus box. acpmux lets a Pin mark a turn's turn_result as well as a prompt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-3514-7430-9c71-6b7ba4fdac72&host=cosmic-gray
… rows

Another agent's message gets its age, read receipt, Copy, Retry and Pin
under the card (Retry for it lived on the answer footer). A failed turn's
footer keeps Retry. Tests move from the Steered line and the always-on rows
to the receipts and the hover-only rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-3514-7430-9c71-6b7ba4fdac72&host=cosmic-gray
@teamleaderleo
teamleaderleo force-pushed the leo/message-hover-rows branch from 0481687 to 2099901 Compare October 21, 2026 02:16
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 02:16 — with GitHub Actions Inactive
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
The steer's read state and the prompt's action-row visibility belong to
#22773, which deletes SteerMark. This puts SteerMark back under the
bubble as on feat-cmux-next, restores the row's own opacity rules, and
drops the steer from the spacing test and the gallery fixture. The
spacing tokens, the row's height and margin, and the estimates stay;
model.ts now counts a steer's status line under the meta row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review bdf0136: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr22773 -f ref=leo/message-hover-rows -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards.

CI failed on bdf01361a4 (run 39566576086 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-check (1) code a web test failed
web / react-apps-check (2) code a web test failed
web / react-apps-check (4) code a web test failed
web / react-apps-check (3) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs composer-claude-split.test.ts chromium: + is its glyph, named Add with no tooltip: failed (job)
  • seen on other PRs composer-claude-split.test.ts webkit: + is its glyph, named Add with no tooltip: failed (job)
  • seen on other PRs composer-history.test.ts ↑ and ↓ in an empty prompt step through the chat's earlier prompts: failed (job)
  • seen on other PRs composer-suggested-prompt.test.tsx nothing is suggested from another folder, another worktree, a merged PR, an old chat or a busy one: failed (job)
  • seen on other PRs composer-suggested-prompt.test.tsx a folder with a trailing slash is the same checkout: failed (job)
  • seen on other PRs composer-suggested-prompt.test.tsx a chat that knows its branch takes no PR from another branch: failed (job)
  • seen on other PRs composer-suggested-prompt.test.tsx a chat with turns gets no suggestion: failed (job)
  • seen on other PRs composer-suggested-prompt.test.tsx Tab writes the suggestion without sending; Shift-Tab does not take it; Esc puts it away: failed (job)
  • seen on other PRs composer-suggested-prompt.test.tsx the chat folder's PR from the header's gh read is suggested when no session reports one: failed (job)
  • seen on other PRs quiet-access-chip.test.ts chromium: Full access draws in the model chip's color: failed (job)
  • ... 10 more in the job logs
Matched log lines
web / react-apps-check (1): (fail) chromium: + is its glyph, named Add with no tooltip [1973.27ms]
web / react-apps-check (2): (fail) ↑ and ↓ in an empty prompt step through the chat's earlier prompts [1920.67ms]
web / react-apps-check (4): (fail) @ then letters lists the chat's matching files and Return writes the path [2016.70ms]
web / react-apps-check (3): (fail) a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-chat [31190.38ms]

Not re-run automatically: web / react-apps-check (1), web / react-apps-check (2), web / react-apps-check (4), web / react-apps-check (3), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; base red: the same failure on the base 84494d5; does not block
red: web / react-apps-check; base red: the same failure on the base 84494d5; does not block
red: web / react-apps-check (1); base red: the same failure on the base 84494d5; does not block
red: web / react-apps-check (2); base red: the same failure on the base 84494d5; does not block
red: web / react-apps-check (3); base red: the same failure on the base 84494d5; does not block
red: web / react-apps-check (4); base red: the same failure on the base 84494d5; does not block

CI fast guards failed on bdf01361a4 (https://github.com/manaflow-ai/cmux/actions/runs/39566576086). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally.

Repairs the prompt-row test file, keeps an answer's Pin through a fork, gives
a Chief-sent prompt the same row (it lost Retry with the footer's), and drops
the now unread data-last-turn mark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-3514-7430-9c71-6b7ba4fdac72&host=cosmic-gray
@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Found 4 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp8esvkds5/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpgxd56a2i/summary-missing.json (live):/summary-missing.json (live): View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_every_source_and_test_directory_is_a_target (main.GraphCoversThePackage.test_e
very_source_and_test_directory_is_a_target) (directory='CmuxNextHomeEngineTests')/
test_every_source_and_test_directory_is_a_target (main.GraphCoversThePackage.test_e
very_source_and_test_directory_is_a_target) (directory='CmuxNextHomeEngineTests')
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

teamleaderleo added a commit that referenced this pull request Oct 21, 2026
… end_turn Send now continues too

Coordinator ruling on #22691: nothing new reads "Steered" (#22773 removes the
steer marks). acpmux #22808 ends Claude's Send now with end_turn rather than a
cancel, which must also draw as one turn; a failed turn still shows its failure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…ed mark, whatever ended it

- The prompt row is marked `continues` (accepted, drawn inline) instead of
  steer "landed", so it shows no "Steered" line (coordinator ruling; #22773
  removes the steer marks). continuesTurn reads either.
- acpmux #22808 ends Claude's Send now with end_turn: any turn_result while a
  Send now waits marks the summary continued, except a failure, which shows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray
oxfmt and rustfmt layout, the age's exact-time tooltip marked as allowed,
the new icons covered by the prompt-bubble gallery entry, and the receipt's
role=img lint exemption on the attribute it applies to.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-3514-7430-9c71-6b7ba4fdac72&host=cosmic-gray
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 02:40 — with GitHub Actions Inactive
…-hover-rows-rebased

# Conflicts:
#	webviews/src/agent-session/acpmux/conversation/UserBubble.tsx
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 02:41 — with GitHub Actions Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

owner: 01a15c08-3514-7430-9c71-6b7ba4fdac72

…-hover-rows-rebased

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
#	webviews/test/agent-pane-suggested-tasks.test.ts
@teamleaderleo

teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator Author

Visual preview of 726388f: in the maintainers' private review feed.

…-hover-rows-rebased

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
#	webviews/src/agent-session/acpmux/conversation/UserBubble.tsx
#	webviews/src/agent-session/acpmux/conversation/icons.tsx
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 03:15 — with GitHub Actions Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Receipt review (merge resolution cc65008..bdf0136): PASS

Checked (read-only, git only):

Not run: bun test, vite, gallery, Swift/Rust builds and tests. Test outcomes above come from reading the code, not from running it.

Agent session: cosmic-gray

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-tui spec inventory / inventory is red on 10 of 11 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 09:29 — with GitHub Actions Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Receipt review (merge resolution bdf0136..3bd6142): PASS

Head 3bd6142 = merge of bdf0136 (reviewed) and base a18aa77. Read-only, git objects only.

Checked:

  1. Delta preserved, nothing from base lost. git diff a18aa77e 3bd61427 and git diff 84494d5c bdf01361 (84494d5 = merge-base of bdf0136 and a18aa77e) touch the same 28 files with the same counts (1779+/670-), and their +/- lines are byte-identical (2449 lines each, xcstrings included). Every file outside the PR's 28 is identical to base.
  2. Localizable.xcstrings: parses as JSON. Base has 1467 keys, head has 1473. Every base key is in head with base's exact value, except the 3 the PR removes (message.read, message.unread, steer.landed). The 9 added keys (message.delivered, deliveredNotRead, pin, unpin, readAloud, stopReading, readBy, readByAgent, turn.forkDetail) match bdf0136's values and are each used in source. In base a18aa77e, the removed keys are used only in SteerMark.tsx (the PR deletes it) and UserBubble.tsx (the PR rewrites those lines). Head has no uses left. All 1245 literal t("...") keys in head webviews/src/agent-session/acpmux exist in the catalog (base: 1244/1244).
  3. Auto-merged files: base changed App.tsx, conversation.css, model.ts and composer.gallery.ts between 84494d5 and a18aa77e. Head has no references to SteerMark, steer.landed, .cv-user__steer (it appears only in tests that assert a count of 0), .cv-user__bookmark, data-last-turn/data-last-prompt, lastTurnId/lastPromptId or usePromptRowMark in UserBubble. Every import from conversation/MessageActions (App.tsx, TurnRows.tsx, UserBubble.tsx) names something MessageActions.tsx exports. CopyButton is still its own module, which MessageActions and base callers import. retryRowId (turns.ts) and row.resend (model.ts) both exist on head. .cv-user__status is still a live class (PromptDelivery, the queued status in App.tsx). The PR's model.ts height change removed only the steer status line.

Not run: bun test, bun run check/lint, vite/gallery, cargo, swift. This is a static read of the merge only. Known base lint reds not from this PR: the run-board timeline.css text-focus ring (#22408) and web/ eslint any.

icons.tsx: base added DoubleCheck for a delivered MessageCard; keep one DoubleCheck (base's glyph) for both it and the prompt read receipt, plus this branch's Pin and Speaker.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-3514-7430-9c71-6b7ba4fdac72&host=cosmic-gray
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Receipt review (merge resolution 3bd6142..c19ca3d): FAIL

Defect: message.delivered is now in webviews/src/agent-session/acpmux/Localizable.xcstrings twice, with two different meanings.

  • Base (Agent pane: message cards say how far they got; shell rows drop the leading cd #22994, 230e98f) added message.delivered = "Delivered to {to}" for MessageCard's status line (head file line ~28809).
  • The PR adds message.delivered = "Delivered when the current step ends" for ReadReceipt's waiting-steer tooltip (head file line ~400).
  • Git auto-merged both blocks with no conflict, so the file has a duplicate key. JSON.parse in gen-strings.mjs keeps the last one (base's). As a result MessageActions.tsx:119 t("message.delivered") (with no to) would show "Delivered to {to}" under a waiting steer, and webviews/test/user-message-actions.test.tsx:96 and :122 (which expect "Delivered when the current step ends") would fail. Xcode/xcstrings tooling may also reject the duplicate.
  • Suggested fix (owner's call): rename the PR's key (for example message.deliveredAtStepEnd), use it in ReadReceipt, and remove the PR's duplicate block. Keep base's message.delivered as it is.

Checked

  1. git diff 230cc72b c19ca3d3 vs git diff a18aa77e 3bd61427: the same 28 files, and textually the same hunks except icons.tsx. There the PR no longer adds its own DoubleCheck; the one DoubleCheck (base glyph, comment now covers both uses) is followed by Pin and Speaker, unchanged. MessageCard.tsx (Check/DoubleCheck/Spinner receipt), conversation.css .cv-message__receipt, App.tsx localPaths/linkItems, the ShellBlock/commandFolder and intake changes from base are all intact in the merge (none are in the PR delta).
  2. Overlap with base: base's MessageCard receipt (Sending / Sent / Delivered to X) is a separate surface (agent-to-agent tool rows) from the PR's UserBubble row, and shares only the DoubleCheck icon, which is resolved correctly. The new base tests (transcript-row-message, transcript-row-command-folder, chat-environment-line, new-tab-dropped-paths, composer-attachment-matrix) don't touch UserBubble or the PR's row. transcript-row-message expects "Delivered to leoli-24", which still holds because base's duplicate wins. The collision above is the one overlap.
  3. xcstrings: Python parses it, but with a duplicate key (object_pairs_hook finds only message.delivered). Every base key is present with base's value, except message.read, message.unread and steer.landed, which the PR removes. A git grep at c19ca3d finds no source or test use of those three. Every literal t("...") key in acpmux source is in the catalog. The PR's other added keys match 3bd6142.

Not run: bun test, vite, gen-strings, cargo, swift, lints. All reading was done with git at explicit SHAs. Known base lint red (#22408 run-board timeline.css) not assessed.

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 09:41 — with GitHub Actions Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Receipt review 1e73560: PASS

Checked (read-only through git, in a separate clone):

  • git diff c19ca3d3..2ac81851 is exactly 2 lines: the catalog key message.delivered is renamed to message.deliveredAtStepEnd (comment and all 21 localizations kept), and ReadReceipt in conversation/MessageActions.tsx now calls t(waiting ? "message.deliveredAtStepEnd" : "message.deliveredNotRead").
  • I parsed Localizable.xcstrings at 1e73560 with an object_pairs_hook: no key appears twice. message.delivered matches base efaab9b exactly ("Delivered to {to}", used by MessageCard). message.deliveredAtStepEnd has the PR's text ("Delivered when the current step ends") in 21 locales. No base entry was changed. The only base keys missing are message.read, message.unread and steer.landed. The PR already deleted these before this fix (they are absent at c19ca3d), and nothing under webviews/src or webviews/test refers to them.
  • All 953 literal t("...") keys under webviews/src/agent-session/acpmux exist in the catalog, including the ternary pairs.
  • user-message-actions.test.tsx expects "Delivered when the current step ends", "Delivered", "Read by Claude Code/Codex", "Read by the agent", "Copy", "Edit" and "Fork from here". These match the en catalog values. MessageCard.tsx and transcript-row-message.test.tsx ("Delivered to leoli-24") are the same as base, and their key keeps base's value.
  • The PR delta against base, git diff efaab9b3...1e735606, is identical to the earlier git diff 230cc72b...c19ca3d3 (28 files, +1774/-671) except for the two rename lines. The merge changes nothing against base outside the PR's own files, so the clean merge lost nothing from base.

Not run: bun tests, bun run check, web lint, gallery, and any build or CI check. I only read code.

@teamleaderleo
teamleaderleo merged commit 8aa26c6 into feat-cmux-next Oct 21, 2026
@teamleaderleo
teamleaderleo deleted the leo/message-hover-rows branch October 21, 2026 09:44
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
JSON parsers keep the last of a repeated key, so two branches that each
added `message.delivered` with their own text merged cleanly and one text
silently replaced the other (#22773). check-xcstrings-keys.py parses every
tracked .xcstrings with an object_pairs_hook and refuses a repeated key at
any depth (string key, language, plural category) or a catalog that is not
valid JSON. It runs in `check` and, on feat-cmux-next, with the hard-fail
webviews checks rather than the warn-only style ones; its test runs in the
cmux-next script tests.


Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-3514-7430-9c71-6b7ba4fdac72&host=cosmic-gray

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

merge-audit: #22773 merged at 1e73560 without no SHIP review receipt on the head; no risk tier label. #23291 reverts it. To keep this change, add the missing evidence for 1e73560 here; the next audit pass then closes #23291. Otherwise review and land #23291.

@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent, correctness first): SHIP at 1e73560

This is a post-hoc independent review of the merged change (merge commit 8aa26c6). It was read-only and nothing was run. risk:low.

Nothing blocks. Notes:

  • Read-aloud state is global, keyed only by row id, and is never cancelled on a session change or pagehide (readAloud.ts:6).
  • A peer daemon on an older acpmux rejects turn_result marks, so the pin undoes itself silently.
  • The focused answer row has no focus outline (WCAG 2.4.7). Each footer builds an Intl.DateTimeFormat on every render. Both minor.

The merge-audit revert of this PR is handled separately. See leo-workspace briefs/2026-10-20-gui-push/revert-triage.md.

teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…d label (#23731)

The steer-marks gallery note still said a read steer reads "Steered"; that
caption (SteerMark.tsx) was removed in #22773. The note now says what the
transcript does: no label, a faint clock and Send now while unread, and the
same read check and tooltip every prompt has. A new steer-read-hover state
hovers the read steer's check, waits for its "Read by" tooltip and fails if
the transcript says Steered or Steering anywhere.

The tests now also pin that a read steer shows the two-check receipt with no
Steer text, and that the catalog holds no steer.landed key or "Steered" value.


Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16030-bf28-7072-b1f6-b83bbd0beacc&host=cosmic-gray

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

3 inactive (1 outdated) deployments
sentry-dsyms — 1e735606 Deployed Oct 21, 2026 by teamleaderleo
artifacts — 1e735606 Deployed Oct 21, 2026 by teamleaderleo
cmux-tui-merge-tree — 1e735606 Deployed Oct 21, 2026 by teamleaderleo
ci-routing-agent — bdf01361 Deployed Oct 21, 2026 by github-actions[bot]
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