You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: PR watch never wakes again after an early check failure, so threads wait forever #30530
Have an agent open a PR and call watch_pull_request on a repository with no required checks.
One check fails early while the others are still running.
The watch wakes the agent with "checks failed". The agent sees the other checks are still running, says it will continue once they finish, and ends its turn, as the wake message tells it to.
The remaining checks finish, all passing.
Expected behavior
The watch wakes the agent once more when the remaining checks finish, so it can act on the final result: rerun a flaky job, report, or merge.
Actual behavior
No further wake comes. The thread shows "Waiting" indefinitely. It moves only on a new push, a new comment, or a conflict.
In evaluatePullRequestWatch (apps/server/src/orchestration-v2/pullRequestWatch.ts), checks-failed fires only for newly failed checks. checks-passed and the owed "settled" wake both require zero failures, so after one early failure, nothing reports that the run finished.
Impact
Major degradation or frequent failure
In one project, a CI job that failed on main made every PR hit this path. Five watched threads sat in "Waiting" for 19 to 23 hours after their CI runs had finished.
Version or commit
T3 Code Nightly 0.1.7-nightly.20261104.4151; the code is unchanged on main @ dd69b31.
Environment
macOS, T3 Code desktop nightly, Claude Code provider, GitHub PRs.
Workaround
Send the thread a message by hand once CI finishes.
The same bug happened today on 0.1.9, the latest stable release. It was a live GitHub PR with real CI and the normal two-minute sweep. This issue describes a repository with no required checks. In this incident the check that failed first is a required check, so both variants are confirmed.
Environment
T3 Code Desktop 0.1.9 on macOS arm64, Darwin 27.2.0, with its local server 0.1.9.
Provider: Claude, model claude-fable-5-2.
Host: GitHub. 7 of the 12 checks on the PR are required.
What happened
All times are UTC on 2026-11-14. They come from the thread history, server.trace.ndjson and the check run timestamps of GitHub.
Time
Event
08:54:23
[C2] Check labels fails on the new head. It is a required check that fails until a person adds a label.
08:55:22
The sweep reads the PR. Three required [T1] checks are still running. The thread gets the wake "checks failed, new comments".
08:55:38
The agent ends its turn. Its last message says that the result of the three running checks will wake it, and that it will then trigger a review.
08:55:29 to 08:55:47
The remaining checks finish. All of them pass.
08:57:24
The next sweep reads the PR and sends no wake.
08:59 to 09:07
Five more sweeps exit with Success and send no wake.
The watch stayed on. The user reported that the thread still hangs although the checks are complete.
I imported the unmodified apps/server/src/orchestration-v2/pullRequestWatch.ts from four revisions. I called evaluatePullRequestWatch with the stored watch and the real check runs of this PR. The only stub is effect/DateTime, which the evaluator calls only when the head moves. I rebuilt the check list of the 08:55:22 sweep from the startedAt and completedAt values of GitHub.
The table shows the changes that each revision returns.
So the bug is present on 0.1.9 and on main from 2026-11-14T09:08Z. Both open fix PRs send exactly one more wake for this required-check case. I tested only the evaluator of the two PR heads. I did not run a server built from them.
One more result applies to both PRs. I also replayed the watch as 0.1.9 stored it, with owedChecks: [], against the finished checks. Both PR evaluators return no changes there. A watch that already missed the wake before an upgrade stays silent for that head.
#33214 is on main and not in 0.1.9. On main the same read that returns no changes also changes checksPending from true to false. According to the description of #33214, the thread then leaves Working and returns to the inbox. I did not run a nightly, so I have not confirmed that in the UI.
The agent still gets no wake. In this incident the agent told the user that it would act when the remaining checks finish. With #33214 the thread would look finished, and that action would still never happen.
Steps to reproduce the required-check variant
Use a repository with a required check that fails within seconds and stays failed until a person acts. Here it is a label check.
Make sure that other required checks run for at least one more sweep. Here they run for about 90 seconds.
Open a PR and ask the agent in a thread to watch it.
Wait for the "checks failed" wake and let the agent end its turn.
Wait until the remaining checks pass.
Wait for the next sweep.
Expected: one wake that says all checks have finished and names the check that is still failed.
Actual: no wake.
Activity
aglowienka commentedon Nov 14, 2026
Note
Written by
Claude Fable 5.2on behalf of AdamThe same bug happened today on 0.1.9, the latest stable release. It was a live GitHub PR with real CI and the normal two-minute sweep. This issue describes a repository with no required checks. In this incident the check that failed first is a required check, so both variants are confirmed.
Environment
claude-fable-5-2.What happened
All times are UTC on 2026-11-14. They come from the thread history,
server.trace.ndjsonand the check run timestamps of GitHub.[C2] Check labelsfails on the new head. It is a required check that fails until a person adds a label.[T1]checks are still running. The thread gets the wake "checks failed, new comments".Successand send no wake.The watch stayed on. The user reported that the thread still hangs although the checks are complete.
Evidence
Evaluator replay with the data of this incident
I imported the unmodified
apps/server/src/orchestration-v2/pullRequestWatch.tsfrom four revisions. I calledevaluatePullRequestWatchwith the stored watch and the real check runs of this PR. The only stub iseffect/DateTime, which the evaluator calls only when the head moves. I rebuilt the check list of the 08:55:22 sweep from thestartedAtandcompletedAtvalues of GitHub.The table shows the
changesthat each revision returns.v0.1.9at24e77473ecmainat2fa77fbf559c0ae214c7cd94f5c0e6checks-failedchecks-failedchecks-failedchecks-failedchecks-finishedchecks-failed[C2] Check labelspassingchecks-passedchecks-passedchecks-passedchecks-passedSo the bug is present on 0.1.9 and on
mainfrom 2026-11-14T09:08Z. Both open fix PRs send exactly one more wake for this required-check case. I tested only the evaluator of the two PR heads. I did not run a server built from them.One more result applies to both PRs. I also replayed the watch as 0.1.9 stored it, with
owedChecks: [], against the finished checks. Both PR evaluators return no changes there. A watch that already missed the wake before an upgrade stays silent for that head.What #33214 changes
#33214 is on
mainand not in 0.1.9. Onmainthe same read that returns no changes also changeschecksPendingfromtruetofalse. According to the description of #33214, the thread then leaves Working and returns to the inbox. I did not run a nightly, so I have not confirmed that in the UI.The agent still gets no wake. In this incident the agent told the user that it would act when the remaining checks finish. With #33214 the thread would look finished, and that action would still never happen.
Steps to reproduce the required-check variant
Expected: one wake that says all checks have finished and names the check that is still failed.
Actual: no wake.
Related
No source patch, database write or server restart was applied. Investigated through T3 Code triage.