Repository navigation
[Bug]: Desktop sidebar looks idle while watch_pull_request reports watching: true #15924
Description
Activity
Note
Grok responding on behalf of Julius.
Triage
Thanks @Runiir for such a careful report. The tool results with timestamps and the pointer to
resolveSidebarThreadStatusmade this quick to trace.What I found
watch_pull_requeststores the watch on the pull request link (ThreadPullRequestLink.watch), and the watch itself is working, as your later#147: new commentswakes show.- Once the turn ends, the thread row's label comes only from
resolveSidebarThreadStatus, which checks pending approvals, pending input, and runtime status. Runtime is parked atidle(the grey Waiting label) only for provider background work that will wake the agent, such as subagents, provider monitors, and unnamed background tasks. An app-owned pull request watch isn't part of that set, so a finished turn resolves toreadyand the row shows no status label. The green#147badge is the open-pull-request glyph, not a watch indicator. - The same status logic drives the mobile thread list (
resolveThreadListV2Status), and the Working-section fold (isThreadWorking) uses the same runtime, so a watched thread looks finished there too until a wake starts a turn. - Today the watch state is visible on the pull request itself, from feat(server): agents can watch a PR and get woken when checks, reviews, or conflicts need them #15057: the eye icon on the row in the Linked pull requests panel on web and desktop, and " · Watching" in the mobile Git overview subtitle. It isn't surfaced on the thread row between turns.
- This is still the case on main after
0.0.46-nightly.20261004(5a96895). [Bug]: iOS does not show Monitoring status displayed on desktop and web #10372 (provider Monitoring label on iOS) and [Bug]: Creating a thread from a pull request does not link the pull request to the thread #15721 (PR failing to link) are different cases.
Likely fix area
resolveSidebarThreadStatusinapps/web/src/components/Sidebar.logic.tsand its mobile counterpartresolveThreadListV2Status. Options include feeding active pull request watches into status derivation so a watched idle thread reads as waiting, or adding a separate watch marker on the thread row, while keeping the Working-section fold consistent with whichever direction is chosen.A maintainer will decide on the fix direction.
- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.via-triageFiled through npx t3 triageFiled through npx t3 triage
on Oct 5, 2026 Came here to post the same issue. It's even worse than described. Status of the thread is marked as
Done. 3 of 4 PRs are not yet merged. Agent is actively watching 1 PR.
Today the watch state is visible on the pull request itself, from #15057: the eye icon on the row in the Linked pull requests panel on web and desktop, and " · Watching" in the mobile Git overview subtitle. It isn't surfaced on the thread row between turns.
I cannot find any such eye icon:
In addition to some sort of indicator on the left thread panel, what I'd really like to see:
- Add a new "Monitoring" section (like we have Working and Settled)
- be able to do is right-click on a Thread that has a PR Watch, or even some other background task (like a custom Monitor script) and say "Move to Monitoring". The thread will move to monitoring and will stay there until the monitor/watch stops (hopefully the agent remembers to unwatch the PR when it is done babysitting, or the PR auto-unwatches when merge status changes).
- Don't automatically move threads to monitor section because often the monitor is a secondary activity while you are actively doing other primary work with the thread.
oh my t3code version:
0.0.46-nightly.20261004.2657 (efecd3cf8bce)Also confirmed on macOS arm64, with
0.0.46-nightly.20261005.2689(bundled commit3e6b45028cee), orchestrator V2, and a Claude thread.The user reports that the chat on their phone indicates background work, but after navigating elsewhere the thread appears finished / ready for their input. This makes it hard to trust the Working section when using T3's internal watcher.
Fresh read-only inspection of an existing thread returned these relevant fields (unrelated identifiers omitted):
// list_thread_pull_requests: the watched PR {"state":"open","watching":true,"isDraft":false} // t3_thread_read: the owning thread {"status":"completed","activeRunId":null,"pendingRequestCount":0}
The active provider's background-task roster contained only a
command, with nomonitor. This corroborates the distinction in the triage reply: the app-owned PR watch is stored on the PR link, independently of the provider background-work roster.At this build's commit, background-work derivation reads the provider roster and active turn items, without considering PR-link watches. Shell runtime presentation parks the thread in a waiting state only when that background work holds completion; command-only work does not. The Working-section predicate then sees a completed runtime and excludes the thread.
Expected: an active T3-owned watch should remain visible consistently on thread rows and in section placement between turns, without suggesting that user input is needed when no request is pending.
Verification limits: the phone symptom is user-reported; I verified the live watch/run state and installed code, but did not capture the phone UI or run a clean isolated reproduction. No code or configuration changes were made.
Before submitting
Area
apps/web (desktop sidebar status for app-owned PR watches)
What happened
A Codex thread was watching an open GitHub PR through T3's
watch_pull_requesttool. The assistant said T3 was watching and later verifiedwatching: true, but the thread's row at the top left of the desktop app had no persistent watching/waiting marker or label.The user-supplied screenshot shows the selected thread with its green PR #147 badge and a relative timestamp ("now"), while the conversation says the watcher is active. Another thread visibly shows "Working", so the concern is specifically the resting watched thread's status.
Steps to reproduce
This sequence was observed in a real session on the build below; a clean isolated reproduction has not been run.
watch_pull_requestfor it. Confirm the returnedwatchingvalue istrue.list_thread_pull_requests, then let that turn finish too.Expected behavior
While an open PR is actively watched, the desktop thread row should visibly communicate that state, for example with a watching/waiting indicator. It should remain visible between agent turns so the user can tell the thread is waiting for PR updates.
Actual behavior
The sidebar row looks like an ordinary completed/idle thread, even after the agent verifies that the watch is still active. The PR badge is present, but it does not communicate that T3 will wake the agent on updates.
The watcher itself did deliver notifications and resume the thread. This report concerns the missing persistent UI status; the evidence does not show that watching stopped.
Impact
Minor bug or occasional failure. The user cannot tell whether monitoring is still active without asking the agent to inspect the watch state.
Version or commit
0.0.46-nightly.20261004.2648.nightly.5a96895a85b43c838da6c89cf21068b99c003d5a.resources/app.asar/package.json.Environment
7.0.0-34-generic.44.4.2, Chromium152.0.7977.130, bundled Node.js24.21.0.gpt-6.1-sol; xhigh reasoning; full-access mode.0.160.0.2.101.0.Evidence
These are actual tool results and timeline entries from the original thread, inspected read-only. Unrelated repository details are omitted.
At 05:42:29.618 UTC,
watch_pull_requestcompleted:{ "number": 147, "watching": true, "wasWatching": false }The foreground run then completed at 05:42:38.584 UTC.
At 05:43:00.611 UTC, T3 delivered the notification
#147: new commentsand started another run.At 05:44:23.609 UTC, after the user asked whether watching had stopped,
list_thread_pull_requestsreturned:{ "pullRequests": [ { "number": 147, "source": "agent", "watching": true, "state": "open", "isDraft": false } ] }That verification run completed at 05:44:32.490 UTC. The screenshot supplied by the user shows the assistant's confirmation and the sidebar without a watching/waiting marker.
At 05:47:04.753 UTC, T3 delivered another
#147: new commentsnotification and resumed the same thread. This corroborates that the watch was functioning.Source investigation
At the installed release's commit,
resolveSidebarThreadStatusaccepts onlyhasPendingApprovals,hasPendingUserInput, andruntime. It maps an idle runtime towaiting, but otherwise falls through toreadyafter the active/error cases. It does not directly consider a linked PR's watch state.This suggests a gap between app-owned PR watches and sidebar status derivation. It is source-based inference, not a verified fix.
Related issues
Workaround
Ask the agent to call
list_thread_pull_requestsand inspectwatching. No UI workaround has been verified.Filed at the user's request by Codex (
gpt-6.1-sol, xhigh) running in T3 Code.