OPS64 — OPS64 — forgejo-pr-automerge: waitForChecks conta o próprio status pendente (deadlock → timeout 30min, merge nunca acontece pelo safety net) #62
Labels
No labels
blocked
done
in-prod
in-progress
kind:chore
prio:P1
prio:P2
ready
No milestone
No project
No assignees
1 participant
Notifications
Total time spent: 2 hours 30 minutes
Due date
fsolla
2 hours 30 minutes
No due date set.
Dependencies
No dependencies set.
Reference: fsolla/teqo#62
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Sintoma (evidência: PR #55, OPS59, 2026-08-18): o job
ready-automerge(agent-pr-ready-automerge.yml, OPS57) começou junto com o CI do PR e rodou os 30 min do waitForChecks mesmo com o CI 100% verde desde ~11 min antes —Failing after 30m14s— e o merge só aconteceu manualmente.Causa:
waitForChecks(scripts/lib/forgejo-api.mjs) polialistCommitStatuses(pr.head.sha)e exigepending.length === 0— mas o status do PRÓPRIO jobready-automerge(context 'PR Ready + auto-merge / ready-automerge') ficapendingenquanto o job roda. Como o workflow dispara em open/sync (antes do CI terminar), o pending do próprio job nunca zera → sempre estoura o timeout de 30 min → exit 1 → merge nunca acontece pelo safety net (a classe OPS52 continua descoberta).Observação secundária da mesma sessão: em run 607 o job
checksdo ci-pr.yml passou (2s) com um shard de e2e vermelho (e2e (1) falhou no setup — porta 5435 ocupada, corrigido por5b50e1da) — oneeds.e2ede matrix parece não agregar o shard falho; só o waitForChecks do automerge pegou o vermelho. Avaliar no mesmo item.Correção possível (a decidir): ignorar o próprio context no waitForChecks (ex. filtrar 'ready-automerge'), ou passar
merge_when_checks_succeedno POST de merge (auto-merge nativo do Forgejo, sem poll), ou timeout > 40 min. Fora do escopo OPS59 (entregue).Claimed by agent run at 2026-08-18T21:51:44.850Z. Lock otimista: outro claim deve falhar e re-rodar
pnpm agent:claim.Merged em main via PR #79 —
done+in-prod. Deploy de produção segue o verificadorci.yml(gated).Merged em main via PR #79 —
done+in-prod. Deploy de produção segue o verificadorci.yml(gated).Entregue via PR #79 (merged 2026-08-19 15:18Z pelo safety net
ready-automerge— prova viva de que o primário já funcionava pós-OPS61).Desfecho: o primário (deadlock do próprio pending) já estava entregue pelo OPS61 (filtro do próprio contexto + gate do rollup + PAT; runs 710/712). O secundário (rollup
checksreportava SUCCESS com shard de e2e vermelho por causa do parent de matrix do Forgejo) foi eliminado estruturalmente pelo OPS62 (mergeado durante a execução deste item): ci-pr.yml e ci.yml viraram jobs únicos sequenciais, sem matrix/shard — o status do jobchecksagora é o veredito honesto da cascata.Entregue aqui: teste-pino no
waitForChecks(run 607: rollup verde + shard vermelho → CLI lança; invariante de defesa que vale para sempre) + docs honestas + changelog. O scriptci-rollup-check.mjse os edits de workflow planejados foram descartados no gate (redundantes pós-OPS62).