fix(ops OPS56): forgejo-pr-automerge — veredito de merge por re-read do PR (falso positivo 'já mergeado') #42
Loading…
Reference in a new issue
No description provided.
Delete branch "OPS56-forgejo-pr-automerge-falso-positivo-ja-mergeado-com-pr"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #28
OPS56 — forgejo-pr-automerge: falso positivo 'já mergeado' com PR aberto
Raiz (confirmada no source do servidor, Forgejo 9.0.3 tag v9.0.3): o endpoint
POST /pulls/{n}/mergeresponde 200 com corpo vazio no sucesso; falhas são sempre 404/405/409/500. Orequest()doforgejo-api.mjsconvertia o 200-vazio emnull, oautoMerge()devolvianullcru e o CLI imprimia "já mergeado" (exit 0) independente do estado real do PR — o merge falhava silenciosamente com o PR aberto (incidente real: PR #27 da OPS52).Correção — veredito por re-read do PR:
autoMergeretorna{ attempted, merged, pr }: após o POST (ok ou erro), re-read doGET /pulls/{n}é a fonte da verdade.merged: true(legítimo "já mergeado").merged: false→ CLI imprime "fechado sem merge — skip".waitForChecksespera omergeableamadurecer:false→ throw imediato (conflito);null→ segue no poll (mesmo timeout de 30 min).const pr(redeclaração no mesmo escopo).Testes: 6 specs novas em
tests/unit/forgejoApi.unit.spec.ts(veredito por re-read no 200-vazio, POST 405 + PR aberto → reject, raça concorrente, no-op de já-mergeado, poll de mergeable null, fail-fast de mergeable false).Verificação: 2318 unit + 791 int + tsc/lint/prettier/knip/check:cycles verdes; gate:ci mirror passou no push.
Débito deferido: alargar o gatilho do
agent-pr-ready-automerge.ymlpara branches não-cursor/*(decisão de ops separada da cobertura do veredito).Impl plan:
docs/plans/ops56-forgejo-pr-automerge-falso-positivo-impl.md· changelog:docs/changelog/2026-08-18-ops56.md