fix(web): keep active plan visible above composer - #6007
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Addressed Macroscope's stale-plan finding in 53ce6b4: pinning now requires both phase === "running" and activeLatestTurn.state === "running", so pre-send isSendBusy cannot remove the previous turn plan. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 53ce6b4. Configure here.
| <div data-active-plan-bar="true" className="mx-auto mb-1.5 w-full max-w-3xl"> | ||
| <TurnPlanTimelineRow turnPlan={pinnedActiveTurnPlan} /> | ||
| </div> | ||
| ) : null} |
There was a problem hiding this comment.
Pinned plan reuses expand state
Low Severity
The pinned TurnPlanTimelineRow has no React key tied to the plan or turn identity. expanded is local component state, so when the pinned plan switches to a different turn or thread without unmounting, the prior expand/collapse state is reused on the new plan.
Reviewed by Cursor Bugbot for commit 53ce6b4. Configure here.
ApprovabilityVerdict: Approved 53ce6b4 Straightforward UI fix that pins the active turn plan above the composer. Changes are self-contained with unit tests, and the author is an active contributor to this file. The open review comment about React key state is a minor UI polish item. You can customize Macroscope's approvability policy. Learn more. |


Problem
The active turn plan is rendered in chronological order, so subsequent work-log entries can push it out of view while the agent is still working.
Fix
Verification
vp run --filter @t3tools/web typecheck— passedvp fmton the four changed files — passedgit diff --check— passedTypeError: Cannot read properties of undefined (reading 'config').Screenshots
Before — active plan can be pushed into the timeline:
After — active plan stays above the composer:
Implemented and verified by GPT-5.6 Luna via Codex.
Note
Low Risk
Chat UI layout and timeline filtering only; no auth, data, or API changes.
Overview
While a turn is running, its plan is pinned in a bar directly above the composer instead of scrolling away with later work-log entries.
ChatViewderivespinnedActiveTurnPlanwhen the thread phase and latest turn are running and matchactivePlan, renders it with the sharedTurnPlanTimelineRow, and feeds timeline building throughexcludePinnedTurnPlanso only that active plan is omitted from the chronological list. Completed and historical plans stay in the timeline.TurnPlanTimelineRowis exported and takes aTurnPlanEntryprop so the same UI works in the timeline and the pinned bar. Unit tests coverexcludePinnedTurnPlan.Reviewed by Cursor Bugbot for commit 53ce6b4. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Keep active turn plan visible above the composer during running turns
pinnedActiveTurnPlanmemo inChatView.tsx, renderingTurnPlanTimelineRowoutside the main timeline.excludePinnedTurnPlanutility inMessagesTimeline.logic.tsfilters the pinned plan from the chronological timeline to avoid duplication.TurnPlanTimelineRowinMessagesTimeline.tsxis refactored to accept aTurnPlanEntryprop directly and is now exported for reuse.Macroscope summarized 53ce6b4.