OPS71-FLIP — Flip pós-merge falhou/silencioso no fluxo GitHub — validar e endurecer issue-done-on-main-merge #119

Closed
opened 2026-08-20 00:33:20 +00:00 by fsolla · 3 comments
Owner
id depends serializes priority
OPS71-FLIP
P2

Validação ao vivo (2026-08-20, merge do PR #746)

O item fora de escopo da #111 ('validar o flip automático pós-merge com Closes') falhou em dois pontos:

  1. PR #742 (OPS71 Fase 1, 22:18): run do issue-done-on-main-merge.yml falhou — FORGEJO_API_URL: https://git.solla.dev/api/v1 (explicita) respondeu 410 Gone (nginx) para GET /repos/fsolla/teqo/issues/97/labels. Transitório: o endpoint público responde 200 agora (testado 00:3x). A #97 recebeu flip manual (labels) às 23:39 mas ficou aberta.
  2. PR #746 (OPS71 Fase 2, 00:20): o merge ocorreu (auto-merge rebase, commit 02c1e4f) e o evento closed está no timeline do PR, mas nenhum run foi criado para issue-done-on-main-merge.yml nem plan-issue-ready-on-main-merge.yml (0 runs com head 3ac1e243; último run do workflow = 22:18). Flip feito manualmente (script local + PR_BODY).

Ações sugeridas

  • Investigar por que o closed do PR #746 não criou run (entrega de evento do GitHub; types: [closed] não é filtrado por condição — o run nem foi criado, não foi skip).
  • Adicionar workflow_dispatch ao issue-done-on-main-merge.yml como caminho de recuperação manual (hoje não existe trigger manual).
  • forgejo-issue-transition.mjs não fecha a Issue (só flipa labels + comenta): na era Forgejo o close era nativo no merge do PR; com PR no GitHub, o script precisa PATCH state=closed — senão toda Issue mergeada fica aberta com done+in-prod.
  • Considerar pin/retry no 410 (retry do OPS67 cobre 5xx? 410 não) e log do corpo do 410 (hoje o nginx html é engolido no erro).
--- id: OPS71-FLIP depends: [] serializes: [] priority: P2 --- ## Validação ao vivo (2026-08-20, merge do PR #746) O item `fora de escopo` da #111 ('validar o flip automático pós-merge com Closes') **falhou em dois pontos**: 1. **PR #742 (OPS71 Fase 1, 22:18):** run do `issue-done-on-main-merge.yml` falhou — `FORGEJO_API_URL: https://git.solla.dev/api/v1` (explicita) respondeu **410 Gone (nginx)** para `GET /repos/fsolla/teqo/issues/97/labels`. Transitório: o endpoint público responde 200 agora (testado 00:3x). A #97 recebeu flip manual (labels) às 23:39 mas ficou aberta. 2. **PR #746 (OPS71 Fase 2, 00:20):** o merge ocorreu (auto-merge rebase, commit 02c1e4f) e o evento `closed` está no timeline do PR, mas **nenhum run foi criado** para `issue-done-on-main-merge.yml` nem `plan-issue-ready-on-main-merge.yml` (0 runs com head 3ac1e243; último run do workflow = 22:18). Flip feito manualmente (script local + `PR_BODY`). ## Ações sugeridas - Investigar por que o `closed` do PR #746 não criou run (entrega de evento do GitHub; `types: [closed]` não é filtrado por condição — o run nem foi criado, não foi skip). - Adicionar `workflow_dispatch` ao `issue-done-on-main-merge.yml` como caminho de recuperação manual (hoje não existe trigger manual). - `forgejo-issue-transition.mjs` não fecha a Issue (só flipa labels + comenta): na era Forgejo o close era nativo no merge do PR; com PR no GitHub, o script precisa `PATCH state=closed` — senão toda Issue mergeada fica aberta com done+in-prod. - Considerar pin/retry no 410 (retry do OPS67 cobre 5xx? 410 não) e log do corpo do 410 (hoje o nginx html é engolido no erro).
fsolla added the
kind:chore
prio:P2
ready
labels 2026-08-20 00:33:20 +00:00
fsolla added
in-progress
and removed
ready
labels 2026-08-20 00:46:24 +00:00
Author
Owner

Claimed by agent run at 2026-08-20T00:46:24.952Z. Lock otimista: outro claim deve falhar e re-rodar pnpm agent:claim.

Claimed by agent run at 2026-08-20T00:46:24.952Z. Lock otimista: outro claim deve falhar e re-rodar `pnpm agent:claim`.
Author
Owner

PR #750 (GitHub) pronto — Closes #119

Investigação concluída (root cause): o closed do PR #746 não criou run porque o auto-merge armado com o GITHUB_TOKEN nativo mergea como github-actions[bot] — a anti-recursão do GitHub nunca cria runs para eventos acionados por ações do GITHUB_TOKEN (evidência: timeline do #746 merged/closed por bot + 0 runs de qualquer tipo; contraste com o #742, mergeado por fsolla, cujos runs nasceram 3s após o merge). O 410 do run do #742 é falha separada e transitória do nginx do Forgejo.

Endurecimento entregue:

  1. Fix de raiz: arm do auto-merge usa o secret novo AUTOMERGE_PAT (PAT real) — fail-closed: sem ele o job agent-pr-ready-automerge sai vermelho (validado ao vivo no run 32320488418 deste PR), nunca fallback silencioso pro bot token. Com o PAT, o merge é atribuído a usuário real e o closed volta a gerar runs.
  2. Recuperação manual: workflow_dispatch com input pr nos dois flips (issue-done, plan-issue-ready) — mesmo contrato do evento (merged + main + same-repo, senão skip), body via gh.
  3. Close da Issue: o flip agora PATCH state=closed — antes, toda Issue mergeada ficava OPEN com done+in-prod.
  4. 410: retry no forgejo-api.mjs em qualquer método (proxy respondeu antes da origem — sem efeito duplicado) + marker compacto do corpo nginx no erro.

Ação humana necessária (antes do merge do PR #750): criar o secret AUTOMERGE_PAT no repo GitHub (Settings → Secrets): PAT do fsolla com escopos pull-requests: write + contents: write no repo fsolla/teqo. Sem ele, o auto-merge não arma (fail-closed intencional); o CI do PR continua verde e o merge pode ser manual.

Impl: docs/plans/ops71-flip-pos-merge-falhou-silencioso-impl.md · changelog: docs/changelog/2026-08-20-ops71-flip.md

## PR #750 (GitHub) pronto — Closes #119 **Investigação concluída (root cause):** o `closed` do PR #746 não criou run porque o auto-merge armado com o `GITHUB_TOKEN` nativo mergea como `github-actions[bot]` — a anti-recursão do GitHub nunca cria runs para eventos acionados por ações do `GITHUB_TOKEN` (evidência: timeline do #746 `merged/closed` por bot + 0 runs de qualquer tipo; contraste com o #742, mergeado por `fsolla`, cujos runs nasceram 3s após o merge). O 410 do run do #742 é falha separada e transitória do nginx do Forgejo. **Endurecimento entregue:** 1. **Fix de raiz:** arm do auto-merge usa o secret novo `AUTOMERGE_PAT` (PAT real) — **fail-closed**: sem ele o job `agent-pr-ready-automerge` sai vermelho (validado ao vivo no run 32320488418 deste PR), nunca fallback silencioso pro bot token. Com o PAT, o merge é atribuído a usuário real e o `closed` volta a gerar runs. 2. **Recuperação manual:** `workflow_dispatch` com input `pr` nos dois flips (`issue-done`, `plan-issue-ready`) — mesmo contrato do evento (merged + main + same-repo, senão skip), body via `gh`. 3. **Close da Issue:** o flip agora `PATCH state=closed` — antes, toda Issue mergeada ficava `OPEN` com `done`+`in-prod`. 4. **410:** retry no `forgejo-api.mjs` em qualquer método (proxy respondeu antes da origem — sem efeito duplicado) + marker compacto do corpo nginx no erro. **Ação humana necessária (antes do merge do PR #750):** criar o secret `AUTOMERGE_PAT` no repo GitHub (Settings → Secrets): PAT do fsolla com escopos `pull-requests: write` + `contents: write` no repo `fsolla/teqo`. Sem ele, o auto-merge não arma (fail-closed intencional); o CI do PR continua verde e o merge pode ser manual. Impl: `docs/plans/ops71-flip-pos-merge-falhou-silencioso-impl.md` · changelog: `docs/changelog/2026-08-20-ops71-flip.md`
fsolla added
done
in-prod
and removed
in-progress
labels 2026-08-20 01:45:42 +00:00
Author
Owner

Merged em main via PR #750 — done + in-prod + Issue fechada. Deploy de produção é manual (workflow_dispatch no GitHub Actions) — ver docs/AGENT-OPS.md.

Merged em main via PR #750 — `done` + `in-prod` + Issue fechada. Deploy de produção é manual (workflow_dispatch no GitHub Actions) — ver docs/AGENT-OPS.md.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: fsolla/teqo#119
No description provided.