[Bug]: watch_pull_request never wakes for remarks from the viewer's own GitHub account, so a shared account hides every review#24668

opened16d agobyOoffchan42

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/server

Steps to reproduce

  1. In thread A, call watch_pull_request on an open GitHub PR.
  2. From another machine or another agent signed in to the same GitHub account as T3, post a comment or review on that PR.

Expected behavior

Thread A wakes with the new comment. A watch that cannot see some remarks says so when it starts, so the thread can choose another way to wait.

Actual behavior

Thread A never wakes. pullRequestWatch.ts (lines 113–121 at eabcfa2) drops every remark whose author equals the viewer:

ts
1const own = (detail.viewer ?? detail.author?.login)?.toLowerCase();
2// ...
3remark.author?.login.toLowerCase() !== own

That filter makes sense when the viewer's remarks are the thread's own. It fails when one GitHub account is shared: in our setup every agent session and a second machine that reviews PRs post as the same account, so the watch can never see a review. The thread reported that it was watching while the review it waited for had already arrived. We worked around it with a polling script.

Impact

Minor bug or occasional failure

Version or commit

T3 Code 0.1.3-nightly.20261024.3643; source read at eabcfa2 (2026-10-25)

Environment

Windows 11 x64; reviews posted from a Mac signed in to the same GitHub account

Workaround

Poll the PR's issue comments, reviews and review comments directly, filtering by time instead of author.

Synced from GitHub

Same here (2026-11-05 to 11-07, Claude thread, callstack/agent-device). The reviewer agent and the T3 thread both post as the same GitHub account. Every bot comment (github-actions, cubic, Apex Sentinel) and every check result woke the watched thread. None of the reviewer's comments did, on 3 PRs (callstack/agent-device#4246, #4276, #4300). The thread saw them only when the user asked it to look.

A related gap: applying a label (we use ready-for-human as the done signal) and merging don't wake the thread either. So a watch whose goal is a label never settles until the user pings it (merge is covered by #25160).