Before submitting
Area
apps/server
Steps to reproduce
The following sequence reproduces the problem directly in evaluatePullRequestWatch, without starting a live watcher:
- Evaluate a watch with
passed: false against a PR containing:
Tests: required, successful.
Smoke Tests: not required, pending.
- The evaluator reports
checks-passed and returns a watch with passed: true.
- Evaluate the returned watch again, keeping the same head SHA and supplying no new comments or conflicts. This time:
Tests: required, successful.
Smoke Tests: not required, successful.
Smoke Tests Gate: a newly appearing required check, already successful.
- Observe that the evaluator returns an empty
changes array.
This models a dependent required job being created and completing between polling passes. The watcher never observes that job pending.
Expected behavior
When a new required check appears, its successful completion should not be suppressed by the earlier notification for a smaller set of required checks.
The agent should receive an updated required-checks-passed notification even if the new check completed before the next poll.
This report does not request notifications for every optional check or ask the server to determine workflow readiness.
Actual behavior
No new notification is generated.
In apps/server/src/orchestration-v2/pullRequestWatch.ts, the successful-check notification depends on passedNow && !passed. Both values remain true when an additional required check first appears already successful.
I executed the actual evaluator and reproduced this result. As a control, observing the new gate pending before observing it successful does produce another notification.
The reported live incident involved ryuudotgg/forge#605, head 43fe2891e7ce6525818fc04b99677e63e3b74741:
Install Smoke completed successfully at 2026-10-03T21:33:17Z.
- The required
Install Smoke Gate was created at 2026-10-03T21:33:17Z.
- That gate completed successfully at
2026-10-03T21:33:22Z.
- The agent had already received a required-checks-passed notification and said it would resume once the remaining checks finished. No follow-up was observed before manually resuming it.
The five-second gate lifetime can fall between polling passes. Its timestamps and required status were verified, but the watcher's exact polling history for that incident was not captured.
Impact
Major degradation or frequent failure
Version or commit
0.0.46-nightly.20261003.2632
Environment
No response
Logs or stack traces
{
"initialRequiredPass": [
{
"kind": "checks-passed",
"count": 1,
"required": true
}
],
"newRequiredGateAlreadySuccess": [],
"requiredGateObservedPendingThenSuccess": [
{
"kind": "checks-passed",
"count": 2,
"required": true
}
]
}
Screenshots, recordings, or supporting files
No response
Workaround
Manually resume the agent after the remaining checks finish.
Before submitting
Area
apps/server
Steps to reproduce
The following sequence reproduces the problem directly in
evaluatePullRequestWatch, without starting a live watcher:passed: falseagainst a PR containing:Tests: required, successful.Smoke Tests: not required, pending.checks-passedand returns a watch withpassed: true.Tests: required, successful.Smoke Tests: not required, successful.Smoke Tests Gate: a newly appearing required check, already successful.changesarray.This models a dependent required job being created and completing between polling passes. The watcher never observes that job pending.
Expected behavior
When a new required check appears, its successful completion should not be suppressed by the earlier notification for a smaller set of required checks.
The agent should receive an updated required-checks-passed notification even if the new check completed before the next poll.
This report does not request notifications for every optional check or ask the server to determine workflow readiness.
Actual behavior
No new notification is generated.
In
apps/server/src/orchestration-v2/pullRequestWatch.ts, the successful-check notification depends onpassedNow && !passed. Both values remain true when an additional required check first appears already successful.I executed the actual evaluator and reproduced this result. As a control, observing the new gate pending before observing it successful does produce another notification.
The reported live incident involved
ryuudotgg/forge#605, head43fe2891e7ce6525818fc04b99677e63e3b74741:Install Smokecompleted successfully at2026-10-03T21:33:17Z.Install Smoke Gatewas created at2026-10-03T21:33:17Z.2026-10-03T21:33:22Z.The five-second gate lifetime can fall between polling passes. Its timestamps and required status were verified, but the watcher's exact polling history for that incident was not captured.
Impact
Major degradation or frequent failure
Version or commit
0.0.46-nightly.20261003.2632
Environment
No response
Logs or stack traces
{ "initialRequiredPass": [ { "kind": "checks-passed", "count": 1, "required": true } ], "newRequiredGateAlreadySuccess": [], "requiredGateObservedPendingThenSuccess": [ { "kind": "checks-passed", "count": 2, "required": true } ] }Screenshots, recordings, or supporting files
No response
Workaround
Manually resume the agent after the remaining checks finish.