OPS71 follow-up — flip pós-merge (issue-done/plan-issue-ready) não dispara para PRs mergeados pelo auto-merge nativo (anti-recursão do GITHUB_TOKEN) #121

Closed
opened 2026-08-20 01:27:11 +00:00 by fsolla · 1 comment
Owner
id depends serializes priority model
OPS71-FLIP
97
P1 cursor-grok-4.5-high

Débito registrado no fechamento da #113 (capture-review-debts autônomo, 2026-08-20).

Sintoma

O flip automático pós-merge no Forgejo (issue-done-on-main-merge.yml + plan-issue-ready-on-main-merge.yml, trigger pull_request: closed) nunca roda para PRs mergeados pelo auto-merge nativo do GitHub. Evidência empírica (mesma noite):

PR merged_by merged_at run do issue-done
#742 (OPS71) fsolla (humano) 22:17:19 disparou (failure: base URL errada, corrigido no #743)
#743 github-actions[bot] 23:07:34 nenhum
#746 (Fase 2) github-actions[bot] 00:20:11 nenhum
#747 (docs #113) github-actions[bot] 00:58:41 nenhum (body com Closes #113 → flip nunca rodou)

Causa raiz

O agent-pr-ready-automerge.yml arma o auto-merge com GITHUB_TOKEN: ${{ github.token }} (scripts/github-pr-automerge.mjs → GraphQL enablePullRequestAutoMerge). O merge executado pelo servidor é atribuído ao github-actions[bot] e o evento pull_request: closed resultante não cria novos workflow runs — proteção anti-recursão documentada do GitHub: eventos disparados pelo GITHUB_TOKEN não geram runs novos, com exceção de workflow_dispatch/repository_dispatch. Merge manual (humano) dispara normalmente (prova: #742). O flip da #97 foi aplicado manualmente via API por isso, com a nota "o fluxo automático será validado no próximo merge com Closes #N" — a validação falhou no #747.

Caminhos (a decidir no item)

  • A (recomendada): armar o auto-merge com PAT de usuário — a mutation enablePullRequestAutoMerge autorizada por um PAT (secret novo, ex. GITHUB_AUTOMERGE_PAT, mesmo PAT local do cutover) faz o merge ser atribuído ao usuário → o evento closed dispara os flips. Guarda RCE preservada (o if: same-repo pré-checkout já exclui fork PRs; o checkout é do repo). Coeso com o molde do repo (PAT local já usado em github-pr.mjs/configure-branch-protection.mjs).
  • B: GitHub App como actor de merge (mais "certo" para orgs, mais setup — provavelmente overkill para repo pessoal).
  • C: flip manual permanente — não escala, é o estado atual.

Nota: workflow_run/push também são suprimidos para ações do GITHUB_TOKEN — qualquer correção precisa trocar o actor do merge (A/B), não o trigger.

Escopo

  • .github/workflows/agent-pr-ready-automerge.yml + scripts/github-pr-automerge.mjs (+ env do secret).
  • Validar ao vivo: PR com Closes #N auto-mergeado → run do issue-done aparece → flip acontece.
  • Sem migration/schema; sem UI.
--- id: OPS71-FLIP depends: [97] serializes: [] priority: P1 model: cursor-grok-4.5-high --- Débito registrado no fechamento da #113 (capture-review-debts autônomo, 2026-08-20). ## Sintoma O flip automático pós-merge no Forgejo (`issue-done-on-main-merge.yml` + `plan-issue-ready-on-main-merge.yml`, trigger `pull_request: closed`) **nunca roda** para PRs mergeados pelo auto-merge nativo do GitHub. Evidência empírica (mesma noite): | PR | merged_by | merged_at | run do issue-done | |---|---|---|---| | #742 (OPS71) | **fsolla** (humano) | 22:17:19 | disparou (failure: base URL errada, corrigido no #743) | | #743 | github-actions[bot] | 23:07:34 | **nenhum** | | #746 (Fase 2) | github-actions[bot] | 00:20:11 | **nenhum** | | #747 (docs #113) | github-actions[bot] | 00:58:41 | **nenhum** (body com `Closes #113` → flip nunca rodou) | ## Causa raiz O `agent-pr-ready-automerge.yml` arma o auto-merge com `GITHUB_TOKEN: ${{ github.token }}` (scripts/github-pr-automerge.mjs → GraphQL `enablePullRequestAutoMerge`). O merge executado pelo servidor é atribuído ao `github-actions[bot]` e o evento `pull_request: closed` resultante **não cria novos workflow runs** — proteção anti-recursão documentada do GitHub: eventos disparados pelo `GITHUB_TOKEN` não geram runs novos, com exceção de `workflow_dispatch`/`repository_dispatch`. Merge manual (humano) dispara normalmente (prova: #742). O flip da #97 foi aplicado manualmente via API por isso, com a nota "o fluxo automático será validado no próximo merge com Closes #N" — a validação falhou no #747. ## Caminhos (a decidir no item) - **A (recomendada): armar o auto-merge com PAT de usuário** — a mutation `enablePullRequestAutoMerge` autorizada por um PAT (secret novo, ex. `GITHUB_AUTOMERGE_PAT`, mesmo PAT local do cutover) faz o merge ser atribuído ao usuário → o evento `closed` dispara os flips. Guarda RCE preservada (o `if:` same-repo pré-checkout já exclui fork PRs; o checkout é do repo). Coeso com o molde do repo (PAT local já usado em `github-pr.mjs`/`configure-branch-protection.mjs`). - B: GitHub App como actor de merge (mais "certo" para orgs, mais setup — provavelmente overkill para repo pessoal). - C: flip manual permanente — não escala, é o estado atual. Nota: `workflow_run`/`push` também são suprimidos para ações do `GITHUB_TOKEN` — qualquer correção precisa trocar o actor do merge (A/B), não o trigger. ## Escopo - `.github/workflows/agent-pr-ready-automerge.yml` + `scripts/github-pr-automerge.mjs` (+ env do secret). - Validar ao vivo: PR com `Closes #N` auto-mergeado → run do issue-done aparece → flip acontece. - Sem migration/schema; sem UI.
fsolla added the
kind:chore
prio:P1
labels 2026-08-20 01:27:21 +00:00
Author
Owner

Tracker migrado para o GitHub — continue em #gh764 (github.com/fsolla/teqo/issues/764). Esta Issue Forgejo está fechada.

Tracker migrado para o GitHub — continue em #gh764 (github.com/fsolla/teqo/issues/764). Esta Issue Forgejo está fechada.
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.

Reference: fsolla/teqo#121
No description provided.