fix(orchestrator): Keep active web timeline visible while work is queued - #4800
fix(orchestrator): Keep active web timeline visible while work is queued#4800mwolson wants to merge 1 commit into
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 |
ApprovabilityVerdict: Approved Straightforward UI bug fix that keeps the active work timeline visible when a newer run is queued. Changes are self-contained to UI state logic with good test coverage and no runtime behavior changes beyond the intended fix. You can customize Macroscope's approvability policy. Learn more. |


Summary
run that still owns provider work when a newer follow-up is queued.
provider-owning run.
deriveThreadActivityRun, which is already part of thet3code/codex-turn-mappingbase, while preserving the latest run for queuesemantics.
Problem and Fix
ChatViewused the highest-ordinal run for both queue presentation and live activity. Once a newer queued run appeared,MessagesTimelinetreated the older running turn as settled and folded its commentary and tools behind a premature "Worked for" row. Elapsed-time presentation also lost the running turn's start time.deriveThreadActivityRunresult to settlement, elapsed-time, and timeline presentation.Validation
running and hid its command rows.
the newer run remained queued.
both runs settled successfully.
#4762 web-timeline-inflight-tool-rows:
together above the queued follow-up.
Codex background, scenario 9.
UI Changes
The visible change is limited to the active-plus-queued state. The running turn
remains expanded with its in-thread Working row and sidebar Working status until
it settles. After settlement, its normal "Worked for" fold can appear.
Validated before and after active-plus-queued screenshots are attached in a PR
comment.
Known Limitation
The sidebar's Working duration uses compact thread-shell data, which has run IDs
but no activity-run timestamps. Its timer can still restart when the queued run
becomes latest or
runtime.updatedAtchanges. The Working status itself remainsvisible.
Checklist
animation or transition behavior.
Note
Medium Risk
UI-only run-selection logic in a core chat path; behavior change is scoped to multi-run queued states with tests, but timeline/settlement bugs are user-visible if wrong.
Overview
Fixes active + queued threads where a newer follow-up was treated as the live turn: the running turn folded early (“Worked for…”), tool rows hid, and UI showed Connecting instead of Working.
ChatView now derives latest, activity, and runtime together via
deriveChatViewThreadExecution(reusingderiveThreadActivityRun). Latest run still drives queue semantics; activity run drives settlement, elapsed time,MessagesTimeline’slatestRun, and the in-thread working row.isChatViewThreadWorkingtreats any non-nullactiveRunIdas in-progress work, not onlyphase === "running".Sidebar status pills count
queuedas Working whenactiveRunIdis set; queued-only threads stay Connecting.Reviewed by Cursor Bugbot for commit a211c7d. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Keep active web timeline visible while a run is queued behind a running run
deriveChatViewThreadExecutionandisChatViewThreadWorkinginChatView.logic.tsto separate the "activity run" (the currently executing provider work) from the "latest run" (which may be a newer queued run).ChatViewContentnow uses the activity run for settled checks, timers, andMessagesTimeline.latestRun, so the timeline stays anchored to the running run instead of jumping to the queued one.resolveThreadStatusPillinSidebar.logic.tsnow returns'Working'whenruntime.statusis'queued'andactiveRunIdis non-null (previously showed'Connecting').isWorkingbecomestruefor a queued runtime that has anactiveRunId, which affects loading indicators and input disabling in the chat view.Macroscope summarized a211c7d.