Skip to content

fix(web): new wake-ups join their fold without shifting the timeline - #29998

Merged
maria-rcks merged 100 commits into
pingdotgg:maria/redesign/2-composer-timelinefrom
flamboh:t3/redesign-fix-wakeups-fold-no-shift
Nov 3, 2026
Merged

maria-rcks merged 100 commits into
pingdotgg:maria/redesign/2-composer-timelinefrom
flamboh:t3/redesign-fix-wakeups-fold-no-shift

Conversation

@flamboh

@flamboh flamboh commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 on behalf of Oliver

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

Problem

When a wake-up arrives at the bottom of a thread that already has a wake-ups fold, the timeline jumps. A full "Working for…" row flashes under the fold, then gets absorbed back into it. Also, the answer kept under the fold disappears for as long as the new wake's turn runs, then comes back when it settles.

Two causes:

  • A queued wake's run shows up as the latest run before its notification item arrives. applyBackgroundActivityGroups only knows a run is a wake from that item, so the working row tagged with the new run broke the group and rendered on its own.
  • The answer under the fold was only shown when the group's last run had settled. While a wake ran, nothing was shown under the fold.

Fix

  • A working row whose run has no timeline entries yet joins the wake-ups group right before it, and counts as that group's active run. Groups still only start at a notification, so a working row after a normal turn is untouched.
  • The answer under the fold follows one rule:
    • Nothing running: the latest finished answer, even if the newest wake gave none.
    • A wake is running but hasn't started answering: the previous finished answer stays.
    • The running wake's answer starts streaming: it takes the previous answer's place and stays there when it finishes.

On this layer alone, a running turn's text still lives inside its working window, so the streaming step only becomes visible together with #29984, which gives the answer its own row.

Before / after

Before (layer 2) After
Wake-ups arriving: previous answer disappears Wake-ups arriving: previous answer stays below the fold

Before (layer 2):

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

After:

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

Captured with Replay (dev), Multi turn, at 1200×900 and 2× in light theme. Wake-ups were injected via a local server patch; the patch was removed after capture.

Validation

  • Extended groups consecutive notification responses in MessagesTimeline.logic.test.ts with the idle, queued, streaming, finished, and "newest wake gave no answer" states. On layer 2 it fails for both causes: the active case drops the earlier answer, and the queued case renders a working row. The streaming state fails on this PR's first commit, which hid the running wake's answer. It passes now.
  • Checked together with fix(web): a running turn's answer streams below the fold, not inside it #29984 in both merge orders: the diffs apply cleanly and the test file passes.
  • In a Replay dev server with wake-ups injected back to back, every sampled frame kept the fold and the answer at the same position. The count went 1 → 4 in place. On layer 2 the same run showed a 113 px working row and a 73 px answer collapse between wakes.
  • vp run check:changed origin/maria/redesign/2-composer-timeline passes. The full MessagesTimeline.logic.test.ts and MessagesTimeline.browser.test.tsx files pass.

Made with Claude Opus 5.5 in Claude Code.

maria-rcks and others added 30 commits November 3, 2026 02:45
…turn absorbed its wake (pingdotgg#28010)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…ory scan ends (pingdotgg#29535)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tch (pingdotgg#29476)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…n starts (pingdotgg#28431)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ching origin (pingdotgg#27961)

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

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…g#23326)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Exotic209093 <134711311+Exotic209093@users.noreply.github.com>
Co-authored-by: Issue triage verification <triage@localhost>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#22661)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
… limit (pingdotgg#23192)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@maria-rcks
maria-rcks force-pushed the maria/redesign/2-composer-timeline branch 2 times, most recently from 9337d4f to a72d83e Compare November 3, 2026 21:21
@maria-rcks
maria-rcks merged commit c0e0d23 into pingdotgg:maria/redesign/2-composer-timeline Nov 3, 2026
2 checks passed
@github-actions github-actions Bot added size:S 10-29 changed lines (additions + deletions). and removed size:XXL 1,000+ changed lines (additions + deletions). labels Nov 3, 2026
EtanHey pushed a commit to EtanHey/t3code that referenced this pull request Nov 3, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
maria-rcks pushed a commit that referenced this pull request Nov 3, 2026
…29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
EtanHey pushed a commit to EtanHey/t3code that referenced this pull request Nov 3, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 3, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
screen-gd pushed a commit to screen-gd/t3code that referenced this pull request Nov 4, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
maria-rcks pushed a commit to flamboh/t3code that referenced this pull request Nov 4, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
maria-rcks pushed a commit to flamboh/t3code that referenced this pull request Nov 5, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
SunkenInTime pushed a commit to SunkenInTime/t3code that referenced this pull request Nov 5, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
SunkenInTime pushed a commit to SunkenInTime/t3code that referenced this pull request Nov 5, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
SunkenInTime pushed a commit to SunkenInTime/t3code that referenced this pull request Nov 5, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
SunkenInTime pushed a commit to SunkenInTime/t3code that referenced this pull request Nov 5, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
SunkenInTime pushed a commit to SunkenInTime/t3code that referenced this pull request Nov 6, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 6, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 7, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 9, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 9, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 9, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 9, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
shivamhwp pushed a commit to shivamhwp/t3code that referenced this pull request Nov 11, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 11, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 11, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 11, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
flamboh added a commit to flamboh/t3code that referenced this pull request Nov 11, 2026
…ingdotgg#29998)

* fix(web): a running wake-up's streaming answer replaces the previous one below its fold
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 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.

4 participants