Repository navigation
fix(web): recover timeline following and bottom navigation - #15859
bloom-street wants to merge 1 commit into
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a localized web timeline bug fix that restores the existing return-to-end affordance and prevents oversized streamed turns from remaining hidden beneath the composer. The new timing and geometry logic is small, isolated, and covered by targeted tests, with no schema, deployment, or sensitive-area impact. You can add or adjust custom eligibility rules. Learn more. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (4)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review. 📝 WalkthroughWalkthroughThe timeline now reports its end state after overflow measurement. ChatView uses those reports to control the delayed scroll-to-end affordance and adjusts anchor handling when content grows during live-follow. ChangesTimeline end-state handling
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix Sequence Diagram(s)sequenceDiagram
participant MessagesTimeline
participant ChatView
participant TimelineEndAffordance
MessagesTimeline->>ChatView: Report resolvable end state
ChatView->>TimelineEndAffordance: Report whether timeline is at end
TimelineEndAffordance->>ChatView: Update affordance visibility immediately or after delay
Suggested reviewers: Merge Risk: ⚪ Minimal · up to No actionable merge-blocking issue remains in the reviewed timeline changes; merge after normal checks. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Note This comment is posted by Julius' dot The recovery-button fix addresses #12372, but this also releases long-answer prompt anchors and resumes following, changing viewport behavior independently. The maintainer's triage of #12372 explicitly separates missing recovery from the stranded viewport in #5903, and the PR acknowledges that the anchor behavior lacks scope approval. Under one problem and prior approval, please narrow this PR to recovery-button reconciliation and discuss the anchor/following change separately with maintainers. Closing this combined submission; the reproduced recovery defect and its supplied evidence remain useful for a focused replacement. |
Problem
A timeline can fall away from its latest answer while automatic-follow intent remains armed. The original
onIsAtEndChangeguard hides the scroll-to-end button in that state, leaving no recovery affordance. New-turn framing also keeps a text-only answer anchored at the prompt after it grows beyond the space above the composer.Change
Drive the recovery button from measured end position independently of follow intent. Keep the brief settling delay, but do not restart it on every streaming/layout report. Report end position after row and viewport size changes as well as scroll events. When a followed anchored turn outgrows the usable viewport, release its anchor and resume following the end; invalidate pending anchor positioning so it cannot pull the viewport back afterward. Manual navigation continues to opt out of follow.
This change applies to the shared web/desktop timeline and all providers rendered there. Native mobile scrolling is unchanged.
Scope and approval
Related to the maintainer-triaged missing-recovery-button bug #12372 and the viewport-position report #5903. Additional user report, synthetic evidence, and scope request.
This PR was opened before checking the existing report. The earlier obvious-bug-exception rationale is withdrawn. The existing issue's triage does not approve every behavior proposed here, especially releasing long-answer anchors. Maintainer review is requested on whether to narrow this PR to recovery-button reconciliation and handle following behavior separately. The synthetic checks do not establish the cause of all spontaneous upward jumps. No approval of this implementation is claimed.
Verification
pnpm exec vp test run apps/web/src/components/chat/timelineEndAffordance.test.ts apps/web/src/components/chat/timelineScrollAnchoring.test.tsx apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/ChatView.logic.test.ts: 232 tests passed. New tests cover sustained off-end reports, transient settling, immediate hiding/reappearance, and cancellation. Existing geometry tests cover anchored-turn viewport overflow.pnpm --filter @t3tools/web typecheck: passed.vp lint: no errors; existing React compiler/dependency warnings in the surrounding ChatView and timeline components.Before (off-end, recovery hidden):

After (same position, recovery available):

Recording: recovery button returns to the end
Implemented with GPT-6.1-Sol through the Codex harness in T3 Code.