[Bug]: Forgejo skipped status keeps watch_pull_request pending when no required-check policy is set
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 64/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- github, typescript
Línea de trabajo
Empieza con packages/source-control-forgejo/src/server/forgejoPullRequestJson.ts y sigue cómo forgejoChecks asigna los estados de los trabajos de Forgejo; después, sigue evaluatePullRequestWatch para ver cómo afectan esos estados a la condición de todos los estados. Compara el comportamiento actual para los estados reportados success, success y skipped con el resultado esperado. La tarea estará terminada cuando la supervisión indique que todas las comprobaciones han pasado si los trabajos terminan sin fallos, incluso si uno se omite.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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 #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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 24.8k
- Forks
- 6.4k
- Merge medio
- 4 h 35 min
- PR fusionados (30 d)
- 174
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pingdotgg/t3code
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
MCP endpoint matches the Authorization scheme case-sensitively and logs the same reason for "absent" and "wrong scheme" (ChatGPT connector gets missing_bearer_token)Posiblemente ocupada @shethshlok la tomó hace 1 día. Abiertobug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
Todos los issues de pingdotgg/t3code
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
braintrustdata/braintrust-sdk-javascript#2659 ·
Los mantenedores suelen responder en 1 día
-
body-parser 2.3.0 in the published ai-dial-chat-bff image is vulnerable (CVE-2026-111181, HIGH)Posiblemente ocupada @illya-havsiyevych la tomó hoy. Abiertobug
Dificultad 1/5 1-3 horas Aptitud para principiantes 87/100
epam/ai-dial-chat#9566 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
はさみアイコンを修正するAbiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
-
resource.reload() while params is in error switches the resource to 'idle' instead of retryingAbiertoarea: core
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día