Skip to content

fix(web): a steer folds the work before it while the turn runs - #29076

Closed
flamboh wants to merge 7 commits into
pingdotgg:maria/redesign/2-composer-timelinefrom
flamboh:t3/redesign-fix-steer-cuts-fold-live
Closed

flamboh wants to merge 7 commits into
pingdotgg:maria/redesign/2-composer-timelinefrom
flamboh:t3/redesign-fix-steer-cuts-fold-live

Conversation

@flamboh

@flamboh flamboh commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 on behalf of Oliver

Important

Stacked on #29040 and #29065. Merge those first; until then this diff includes them. This PR's own change is f2ffafe6d8.

Fix for the redesign stack, targets layer 2 (#28840).

Problem

A steer during a running turn didn't change the timeline's shape. The steer moved above the "Working for …" bar, and all of the turn's work, before and after the steer, stayed in one working window. The per-segment folds only appeared when the turn ended, so the layout jumped.

Fix

The live timeline now looks like the finished one. When a steer lands:

  • The work before it closes into the same fold row the finished turn shows, with the same time and diff.
  • The steer sits below that fold.
  • The working bar and window continue below the steer and hold only the work after the latest steer. The bar's clock starts at that steer, matching the "Continued for …" row it becomes.

With two steers it reads prompt → Worked fold → steer 1 → Continued fold → steer 2 → working bar. When the turn ends, nothing moves: the working window becomes the last fold.

deriveTurnFolds now folds every finished segment of the running turn and leaves the live segment open. applyWorkingWindow keeps rows up to the latest steer in timeline order and fills the window only from after it.

Validation

  • MessagesTimeline.logic.test.ts: a running turn steered once and twice gets folds for finished segments, steers in order, and a window holding only post-steer items. The same entries after the turn settles give identical fold rows. Three older cases now open the turn fold to keep checking superseded attempts and settled reasoning, which sit inside the live fold as they already do in the finished turn.
  • vp run check:changed origin/maria/redesign/2-composer-timeline: all checks pass.
  • Ran a real Replay (dev) turn steered twice. Live, the folds read "Worked for 5.7s +4" and "Continued for 3.5s +4". After the turn ended they read the same, with "Continued for 6s" added below.

Before / after

Dark theme, 1100 × 900, scratch git project, free showcase Replay. Both messages carry the steer badge. Stills are frames from the recordings.

Before (layer 2) After
Live after steer 1: before Live after steer 1: after
Live after steer 2: before Live after steer 2: after
After the turn ends: before After the turn ends: after

Before (layer 2):

https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/7066622abdfac427/before.mp4

After:

https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/1aa28686c1ee3fb2/after.mp4


Made with Claude Opus 5.5 in Claude Code.

flamboh and others added 6 commits November 2, 2026 04:01
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A stopped, failed or limited steered turn put its ending on the top row,
which now only spans the work before the first steer. The last segment row
that has work now carries the ending and its message.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gle-view' into t3/redesign-fix-steer-cuts-fold-live
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Nov 2, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs Human Approval

Macroscope's review found this PR requires human approval — The timeline now folds work before each steer while the turn runs and replaces the collapsed history preview with an always-scrollable list. A human must confirm these changed default interactions, including removal of the history toggle.

You can add or adjust custom eligibility rules. Learn more.

…y follows the steer

The top fold switched to whole-turn time when no work segment followed the
last steer, so a fold cut while the turn ran changed length when it ended.
"Worked for" now always measures up to the first steer; a stop, failure or
limit on the top row still counts the whole turn.

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

maria-rcks commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

verified unchanged head 60bb5c649eb77dc4f4c66426c472859e166cfa24 against github/main at 84537c4dd9. installed both checkouts with vp i, ran their dev servers sequentially, and drove the web client with repository playwright and /usr/bin/google-chrome on linux. created a real scratch git project through the app and used real codex gpt-6.1-sol turns, file edits, terminal waits, and the composer steer action. no replay, mocks, or fixtures.

  • main reproduced the missing live folds: both steers arrived while the earlier work stayed under one working bar.
  • the pr immediately produced prompt → worked fold → steer 1 → continued fold → steer 2 → working bar. earlier work disappeared from the live window and remained accessible by independently opening its fold.
  • completion preserved the first two fold labels and diffs exactly: worked for 1m 3s +1 and continued for 8.6s +1. the last working segment became continued for 54s. all four requested files contained the expected lines, and the completed-turn diff loaded.
  • an unsteered turn completed with its fold and file summary. a subsequent steer with no later file edits kept its first worked for 5.6s fold unchanged after the final reply.
  • stopping after a steer kept worked for 6.5s +1 above the steer and placed stopped at 33s +1 below it. the result persisted after reload.
  • blacksmith ran vp test run apps/web/src/components/chat/MessagesTimeline.logic.test.ts apps/web/src/components/chat/MessagesTimeline.browser.test.tsx: 2 files and 171 tests passed. the worker initially needed chromium installed; the rerun passed. git.cafe reports 34 successful checks on this head; github's rollup has no failed or pending checks. no code changes were needed.

before on main, after two steers, 1280 × 900:

main keeps pre-steer work expanded

after on the pr, matching project and prompts:

pr folds both completed steer segments while codex runs

completed turn preserves the earlier folds and shows all four files

54-second recording of both live steers, fold expansion, and completion, rendered as a gif for github. the wait between the second steer and completion is cut. the source mp4's playback and seeking were checked in t3's browser:

real codex live steer folding and completion

stop ending belongs to the segment after the steer

Not verified

native desktop shells, ios/android clients, other providers, relay/tunnel connections, dark theme, and narrow viewports were not exercised on this linux web pass.

an additional nearby check found an existing failure: opening the latest-turn diff after stopping shows failed to load full thread diff. this reproduced on both main and the pr; the pr response reported CheckpointTurnRangeUnavailableError with requested 1, current 0. completed-turn diffs worked. that checkpoint defect is outside this timeline change and remains unresolved.

verified using gpt-6.1-sol in the codex harness through t3 code.

@flamboh

flamboh commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #29589, which replaces per-segment steer folds with a single fold per turn and keeps agent text between steers visible.

@flamboh flamboh closed this Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants