Repository navigation
Description
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
- Use a Forgejo repository whose base branch has no status-check policy (
enable_status_check: false, so no required contexts). - Add a workflow job that only runs on push, for example
deploy: { needs: test, if: github.event_name == 'push' }. - Open a pull request. Once CI finishes, the head commit reports:
AI Review / review (pull_request) success CI / test (pull_request) success CI / deploy (pull_request) skipped - Call
watch_pull_requestfor the pull request and let all jobs finish.
Expected behavior
The watch wakes the agent with "All 3 checks passed", because every job has finished and none failed.
Actual behavior
The watch never reports the passed checks. forgejoChecks in packages/source-control-forgejo/src/server/forgejoPullRequestJson.ts maps every state other than success, failure and error to pending, so the skipped job keeps the all-status gate open. In our case the watch stayed silent for almost six hours until we merged the pull request by hand.
This is the part of #16575 that its closing comment left open ("skipped statuses still block watches when required-check policy is absent"); the comment asked for a separate issue. #18775 covers branches with a required-check policy. #16668 already contains the fix for this case. Its description notes that no real Forgejo instance was used; this report confirms the failure on a live Forgejo 17.0.0 instance.
Impact
Major degradation or frequent failure
Every pull request in a repository with a push-only job hits this, so watch_pull_request cannot be used there.
Version or commit
0.1.2-nightly.20261021.3499 (already contains #18775)
Environment
T3 Code desktop nightly on macOS 27.0.1, Forgejo 17.0.0+gitea-1.22.0
Logs or stack traces
pull request watch ended {"reason":"merged","minutes":348,"quietMinutes":348,"wakes":0,"reads":172,"partial":false}We also ran the installed nightly's bundled forgejoChecks and evaluatePullRequestWatch against the three statuses above:
- current mapping:
skippedbecomespending,passed: false, no change reported - with
skippedpreserved, as in fix(server): Forgejo skipped jobs no longer keep a pull request watch pending #16668: the same evaluator reportschecks-passedwithcount: 3
Workaround
Required status checks on the base branch let the watch gate only on those (#18775), but that changes the merge policy, and a required context that never reports (for example a workflow with paths-ignore on a docs-only change) then blocks merging. We currently poll the Forgejo API from the agent instead of using watch_pull_request.
Investigated with an agent in T3 Code; the values above come from the live instance and the installed app bundle.
Activity
KLIEBHAN commentedon Oct 24, 2026
Fixed by #16668. Confirmed with nightly 0.1.3-nightly.20261023.3592: the installed bundle now maps Forgejo
skippedtoskipped, and the watch evaluator reportschecks-passedfor the statuses from this report (success, success, skipped).