Skip to content

agent transcript: toggle holds last a fixed minimum, a sideways wheel keeps them, and a stale press is never reused (follow-up to #28780) - #28324

Merged
teamleaderleo merged 25 commits into
feat-cmux-nextfrom
claude-sr2/transcript-expand-anchor
Oct 31, 2026
Merged

teamleaderleo merged 25 commits into
feat-cmux-nextfrom
claude-sr2/transcript-expand-anchor

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Leo's words:

why the f*** did you guys ff***ing ellipsis EVERYTHING WITH NO WAY TO EXPAND WHAT WAS SAID TO SEE

AND IT'S SO F***ING AWKWARD TO SEE THEM THERE AT THE BOTTOM SINCE WHEN I EXPAND THEM IT JUMPS ME DOWN AND WHEN I COLLAPSE IT JUMPS ME UP

#28780 carried this PR's earlier head (5e59e44) to feat-cmux-next: every cut row opens to its whole text, every toggle holds its place, and the collapse room. This PR is now the remainder. It holds the toggle-hold fixes made after that head, merged with the current base. Its diff against base is about 60 lines.

What this changes

  • A fixed minimum hold, not one that keeps extending (foldAnchor.ts). Base extends a hold by 150 ms every time its line moves, up to 1.5 s. While the view was scrolled to a tall prompt, that kept re-placing the prompt under the pointer, and its Show less missed the click (transcript-fold-anchor-browser: "Show less on a prompt several screens tall, with motion off" failed with it). Every hold now lasts max(foldMs + FOLD_SETTLE_MS, FOLD_HOLD_MIN_MS = 400 ms). A toggle with no fold under Reduce Motion, which used to get 150 ms, is still held while what it opened is measured and placed.
  • A sideways wheel keeps the hold in both release paths (App.tsx cancelProgrammatic). Base exempted a horizontal wheel only in release. The user-scroll intent listener cleared the hold first, so scrolling a code block sideways still let go.
  • The press place is never stale (App.tsx). A keyboard click (detail === 0) does not reuse an earlier, abandoned press, and pointercancel drops it. The row's own anchored-collapse event (holdAsked) keeps the click's pressed place instead of replacing it with where the line is now.
  • A file link inside a tool line is not a toggle (NESTED_CONTROL gains [role="link"], the role WriteLabel's file name uses).
  • No dangling aria-controls (ToolRow.tsx). Since every call opens, an opened call with no output names a body only when one is drawn.
  • DiagramBlock's toggle carries data-fold-toggle too, like Wrap lines and Raw.

Stop and cleanup

Nothing new animates. A hold is a timestamp checked on each placement pass, with no timer. It ends at max(foldMs + FOLD_SETTLE_MS, FOLD_HOLD_MIN_MS) after the click, or at once on a vertical wheel, a key, a touch or a drag. The pointercancel listener is added and removed with the pointerdown and click listeners. Nothing runs per streamed token.

Tests

  • conversation/foldAnchor.test.ts:
    • a toggle with no fold is held at least FOLD_HOLD_MIN_MS
    • a hold that puts its line back does not outlast its time
    • press, click, then the row's anchored-collapse event keeps the pressed place
    • a file link inside a tool line is not held
  • conversation/TruncatedRowsReachable.test.tsx: an opened call's aria-controls names a body that exists, and a call with no output names none.
  • Verified with cmux-ci on Linux Chromium:
    • typecheck, check:browser-lanes, check:fixed-waits, vp fmt
    • the acpmux conversation unit suites
    • 13 transcript browser suites: fold-keeps-place, fold-anchor-browser, follow-live, reading-place, queue-scroll-bottom, find-position, tool-group scroll, alignment and overlap, no-blank-space, incoming and received message disclosure, transcript-follow

Media

Linux Chromium gallery, agent-pane.tool-row-column (variant column), with the tool group opened. Captured through cmux-ci using a public gallery fixture. It shows what #28780 shipped and this PR keeps: every call row opens. This PR changes no layout.

Tool rows before

Tool rows after

Risk

Low. Hold timing only:

  • Holds no longer extend while their line moves; they last at least 400 ms instead.
  • A sideways wheel no longer releases a hold.
  • A file link inside a toggle no longer starts one.

Performance

metric before after delta harness
work per streamed token in the transcript path 0 new 0 new 0 code read: the changes run only on clicks, presses, wheel events and placement passes, O(1) each

Follow-ups from review (not in this PR)

  • Fold-room follow release when the transcript is shorter than the view: a no-output toggle can leave room above rowsEnd and stop following.
  • outputSummary no longer caps text for briefs, steer and dispatch, not only reports.

Agent session: agent session

🤖 Generated with Claude Code

ci and others added 5 commits October 30, 2026 06:41
…cked

Leo (ask-a736047107): "AND IT'S SO FUCKING AWKWARD TO SEE THEM THERE AT THE
BOTTOM SINCE WHEN I EXPAND THEM IT JUMPS ME DOWN AND WHEN I COLLAPSE IT JUMPS
ME UP"

A click on a transcript disclosure now keeps the content at least as tall as
the view's end, so closing a body near the transcript's end leaves room under
the rows instead of the browser clamping the offset and bringing every row
(and the clicked line) down by what closed. The room follows the view's end
as the reader scrolls up and goes once the rows reach it, on a send, on Jump
to latest and on a chat switch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ggle holds its place

Leo (ask-486cb2cec3): "why the fuck did you guys ffucking ellipsis EVERYTHING
WITH NO WAY TO EXPAND WHAT WAS SAID TO SEE"

- A tool call that is not a shell always opens, and opened its label wraps
  whole (a long search pattern, URL or path); a call with no output opens to
  that alone.
- A dispatch report keeps its whole text (no 2,000-character cut).
- An opened agent message names its other chat whole; an opened sub-session
  line shows its whole state.
- FOLD_TOGGLE now holds every control that opens something in a row (Show
  more, Show all lines, Raw, +N more, a sent message line, an agent message
  line's words); one under its body holds its row's top.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r the view covers it

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

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 4a6266a: 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=pr28324 -f ref=claude-sr2/transcript-expand-anchor -f platform=macos -f backend_mode=local

Gallery before/after for 4a6266a: 16 states rendered, 0 images differ, 2654 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41209715206 -R manaflow-ai/cmux -n gallery-advisory-28324-4a6266a623f54c1dc8508e0e1a57f7ca98742f92 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-width/standard Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/standard Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/shipped Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/shipped Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/half-tucked Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/half-tucked Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/before Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/before Apple System Colors unchanged 0% own App.tsx
agent-pane.copy-controls/output Apple System Colors Light unchanged 0% own App.tsx
agent-pane.copy-controls/output Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/working Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/working Apple System Colors unchanged 0% own App.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Passes: CI passes on 4a6266a623.

CI passes on 4a6266a623 (run 41215862832 attempt 1).

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.

web and size checks: green

Shipped in:

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 30, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Found 1 test failure on Blacksmith runners:

Failure

Test View Logs
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)/
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)
View Logs

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

@teamleaderleo

teamleaderleo commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

…ot toggles; an opened name wraps

Review findings at d32bcfe: a collapse that leaves room stops following, and a
followed view drops the room; a click on a control inside a toggle (a sent
line's recipient, Copy) holds nothing; an opened agent message's name wraps.

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

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at abd00d3

No blocking findings.

Review coverage was limited by the omitted App.tsx snapshot and blocked repository reader; tests were not run.

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

cmux-bot approves abd00d3: an independent review passed this exact head (next-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

teamleaderleo and others added 4 commits October 30, 2026 15:19
…ed time

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

Wrap lines (aria-pressed) and a diagram's chart/code toggle now hold their line. The hold starts on
pointerdown, flushes drawn heights synchronously while it holds, extends while the line still moves
(capped at 1.5 s, so Reduce Motion gets a real hold), and a sideways wheel no longer lets go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
A hold that started on pointerdown re-placed the row under the pointer, so a tall prompt's Show less
got its press and release on different nodes and never clicked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
@cursor

cursor Bot commented Oct 30, 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

Review (codex gpt-6-astra high, next-review): BLOCK at 5e59e44

  • [P2] webviews/src/agent-session/acpmux/conversation/foldAnchor.ts:74 — Collapsing long output can leave a blank viewport. Expand a long tool output near the transcript’s end, scroll down to “Show less,” then collapse it. This anchors the row’s now-offscreen top, while the new foldRoom preserves the old scroll offset. The collapsed content ends above the viewport, leaving blank space instead of visible transcript. trimmedFoldRoom retains that space even after the hold expires. Preserve a visible anchor or bound the retained room so collapsing cannot strand the reader below all content.

…ile the line moves

An extending hold kept putting a tall prompt back while the view was scrolled to it, so its Show less
missed its click. A toggle with no fold (Reduce Motion) now holds for at least 400 ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
teamleaderleo and others added 2 commits October 31, 2026 06:40
…ck's pressed place

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
…transcript-expand-anchor

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high fast, review-router): SHIP at f24b1cd

  • P3: webviews/src/agent-session/acpmux/conversation/dispatchCalls.ts:135: Removing the 2,000-character cap from outputSummary affects every dispatch kind, not just reports. A verbose plain-text briefs response now becomes an unbounded summary and accessible row label. Keep the uncapped behavior report-specific.

Visual: no after images were attached to this review (the body's media had not been posted); visual verdict to follow from the gallery run at this head.

@cursor

cursor Bot commented Oct 31, 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 and others added 2 commits October 31, 2026 11:20
…eps the hold; no dangling aria-controls

Pin and Read aloud (aria-pressed, no height change) no longer start a hold that could stop following.
Wrap lines and a diagram's toggle say they fold (data-fold-toggle). cancelProgrammatic keeps the hold
through a horizontal wheel. A no-output call names no body it does not draw. A keyboard click or a
cancelled press never reuses an abandoned press place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
@cursor

cursor Bot commented Oct 31, 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.

…transcript-expand-anchor

# Conflicts:
#	webviews/test/agent-pane-tool-group-scroll.test.ts
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol xhigh, next-review): SHIP at 798d36e

SHIP at 798d36e

Visual verdict: supplied before/after screenshots look clean; no clipping, bloated menu, or off-screen layout.

  1. [P2] [follow-up] Highlighted code’s Wrap button (HighlightedCode.tsx:113-119) uses only aria-pressed, so it is missed by FOLD_TOGGLE (foldAnchor.ts:23-30). Wrapping code can change transcript height without anchoring the viewport.

  2. [P2] [follow-up] The rendered-output Raw button (ToolOutputBody.tsx:128-133) has the same omission. Switching between Markdown and raw output can move rows while scrolled.

  3. [P2] [follow-up] NESTED_CONTROL (foldAnchor.ts:33) omits [role="link"], while WriteLabel.tsx:93-100 places a custom role-link inside the newly buttonized tool row. Clicking that path is classified as a fold toggle and can briefly anchor or stop follow behavior.

Validation: targeted tests could not run because bun is unavailable in the review environment.

Follow-ups:

  • [P2] [follow-up] Mark HighlightedCode’s Wrap control as a fold toggle.
  • [P2] [follow-up] Mark ToolOutputBody’s Raw control as a fold toggle.
  • [P2] [follow-up] Exclude custom role links from fold-toggle hit testing.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
…line; a file link is no toggle

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026

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

cmux-bot approves 798d36e: an independent review passed this exact head (next-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
teamleaderleo added a commit that referenced this pull request Oct 31, 2026
…d collapsing keep your place (carry #28324) (#28780)

* agent transcript: closing a line at the end keeps it where it was clicked

Leo (ask-a736047107): "AND IT'S SO FUCKING AWKWARD TO SEE THEM THERE AT THE
BOTTOM SINCE WHEN I EXPAND THEM IT JUMPS ME DOWN AND WHEN I COLLAPSE IT JUMPS
ME UP"

A click on a transcript disclosure now keeps the content at least as tall as
the view's end, so closing a body near the transcript's end leaves room under
the rows instead of the browser clamping the offset and bringing every row
(and the clicked line) down by what closed. The room follows the view's end
as the reader scrolls up and goes once the rows reach it, on a send, on Jump
to latest and on a chat switch.

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

* agent transcript: every cut row opens to its whole text, and every toggle holds its place

Leo (ask-486cb2cec3): "why the fuck did you guys ffucking ellipsis EVERYTHING
WITH NO WAY TO EXPAND WHAT WAS SAID TO SEE"

- A tool call that is not a shell always opens, and opened its label wraps
  whole (a long search pattern, URL or path); a call with no output opens to
  that alone.
- A dispatch report keeps its whole text (no 2,000-character cut).
- An opened agent message names its other chat whole; an opened sub-session
  line shows its whole state.
- FOLD_TOGGLE now holds every control that opens something in a row (Show
  more, Show all lines, Raw, +N more, a sent message line, an agent message
  line's words); one under its body holds its row's top.

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

* agent transcript: the kept collapse room lets go once the hold ends or the view covers it

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

* agent transcript: no fold room while following; nested controls are not toggles; an opened name wraps

Review findings at d32bcfe: a collapse that leaves room stops following, and a
followed view drops the room; a click on a control inside a toggle (a sent
line's recipient, Copy) holds nothing; an opened agent message's name wraps.

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

* test(transcript): fold-keeps-place waits on painted frames, not a fixed time

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

* Hold every height toggle from the press, and keep holding while the line settles

Wrap lines (aria-pressed) and a diagram's chart/code toggle now hold their line. The hold starts on
pointerdown, flushes drawn heights synchronously while it holds, extends while the line still moves
(capped at 1.5 s, so Reduce Motion gets a real hold), and a sideways wheel no longer lets go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100

* test(transcript): step the settling hold to its cap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100

* agent transcript: the press notes the line's place; only the click holds

A hold that started on pointerdown re-placed the row under the pointer, so a tall prompt's Show less
got its press and release on different nodes and never clicked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100

* agent transcript: Show less scrolled down to keeps the clicked control in view

Review BLOCK at 5e59e44 (foldAnchor.ts): a control under its body held its row's top, so closing a
long output from Show less, scrolled down to at the transcript's end, closed the row up above the
view and the kept fold room left the view blank. A row whose top is above the view now holds the
clicked control instead, and once no hold is in flight the kept room goes when the rows end above
the view's top, so the view is never only room.

Tests: foldAnchor.test.ts (red before: 2 fail), and transcript gallery states cut-line-closed,
cut-line-open and show-less-keeps-place, whose plays check the whole label and the clicked control
in view (agent-pane-show-less-keeps-place.test.ts runs them).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* gallery: the cut-line states find the call's line by its toggle, so base renders them too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* agent transcript: a reply's Pin and Read aloud no longer hold the row or stop following

FOLD_TOGGLE's `button[aria-pressed]` also matched a reply's Pin and Read
aloud, so toggling either while a reply streamed entered the folding pass
and called follow(false). An aria-pressed button is now held only when it
says it changes its block's height (`data-fold-toggle`: Wrap lines in code,
diff and output blocks, and a tool output's Raw).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* gallery: Show less's play scrolls down with a wheel, as the reader does

The play set the transcript's offset with scrollIntoView while the hold that
Show all's click started was still on, so the transcript put the row back
where the click held it and the wait for Show less at the view's foot never
held (scrollTop stayed 0 for the whole 5 s cap). A wheel first lets go of the
hold, as a reader's scroll does (App.tsx `release`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* gallery: Show less's play scrolls only once the opened output has landed

The wheel alone was not enough: the play scrolled to Show less while the
opened output's fold was still playing and the rows under it still placing,
so the content grew past the offset it set (scrollHeight 2653 at the scroll,
3300 after) and Show less never reached the view's foot within the 5 s cap.
The play now waits for three frames at one content height with nothing
animating, then scrolls with a one-pixel wheel (whose glide moves nothing
that matters) and scrollIntoView. Three runs in a row pass on CI at
ef3f3ae with this change applied.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

---------

Co-authored-by: ci <ci@example.invalid>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo and others added 2 commits October 31, 2026 13:53
…transcript-expand-anchor

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
#	webviews/src/agent-session/acpmux/conversation/TruncatedRowsReachable.test.tsx
#	webviews/src/agent-session/acpmux/conversation/foldAnchor.test.ts
#	webviews/src/agent-session/acpmux/conversation/foldAnchor.ts
…lery play names the minimum hold

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol xhigh, next-review): BLOCK at ee6c53d

BLOCK at ee6c53d

Visual verdict: compared all 17 supplied before/after pairs; no additional visual findings.

  1. [P1] [blocking] foldAnchor.ts:72 — Collapsing long shell output can leave an empty transcript viewport. “Show less” now anchors the row’s top, which can be several screens above the viewport. Collapsing removes the visible output while foldRoom prevents the browser from clamping the offset, leaving all real content above the view. The blank space persists after the hold expires. Previously, the browser clamped to the remaining content. Hold the footer itself during collapse, as PromptText already does, or release excess room when the chosen anchor is offscreen.

Validation: changed TypeScript files parse; focused helper and report checks passed. Bun/browser tests could not run because the runtimes and dependencies are absent.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
@teamleaderleo teamleaderleo changed the title agent transcript: every cut row opens to its whole text; expanding and collapsing keep your place agent transcript: toggle holds last a fixed minimum, a sideways wheel keeps them, and a stale press is never reused (follow-up to #28780) Oct 31, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at 4a6266a

SHIP at 4a6266a

Visual verdict: all supplied after screenshots match their before states; no layout regressions.

No findings.

Follow-ups: none

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (gpt-6-astra high, router-review range 625b1ca..4a6266a): SHIP at 4a6266a. Earlier PR-form review (gpt-6.1-sol xhigh) gave SHIP at ee6c53d with images viewed; this head adds only the base merge with #28780 and its conflict resolution. cmux-ci at the merged head: typecheck, browser-lanes, fixed-waits and fmt clean; 613 unit and 53 transcript browser tests pass.

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026

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

cmux-bot approves 4a6266a: an independent review passed this exact head (next-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@teamleaderleo
teamleaderleo merged commit eaf7903 into feat-cmux-next Oct 31, 2026
232 of 234 checks passed
@teamleaderleo
teamleaderleo deleted the claude-sr2/transcript-expand-anchor branch October 31, 2026 16:26

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 4a6266a6 Deployed Oct 31, 2026 by teamleaderleo via cmux-tui tree preflight #90196
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant