chore(ops OPS57): forgejo-pr-automerge — alargar gatilho para todas as PRs same-repo (draft não-cursor/* = veto) #48

Merged
fsolla merged 1 commit from OPS57-guard-forgejo-pr-automerge-alargar-gatilho-do-workflow into main 2026-08-18 14:54:47 +00:00
Owner

Closes #44

OPS57-guard — forgejo-pr-automerge: alargar gatilho do workflow para branches não-cursor/*

Motivação (débito deferido na OPS56): dos 25 PRs mergeados no repo, zero eram cursor/* — 9 de plans/*, 11 de worktrees humanos (OPS*/S1/PUB5), 5 de refs/pull/N/head (era da migração). O filtro cursor/* atual nunca cobriu nenhum PR real — o safety net nunca disparou, e o incidente OPS52 (PR #27, humana, merge falhou silenciosamente) era exatamente a classe excluída.

Mudanças:

  • agent-pr-ready-automerge.yml: if: do job → state == 'open' && head.repo.full_name == github.repository (guarda de fork — o repo é público; uma PR de fork mergeada dispararia o deploy de prod em main). Campos já usados no payload, sem dependência de is_draft do webhook.
  • forgejo-pr-automerge.mjs: política de draft movida para o CLI, com o head ref do re-read da API — draft cursor/* → Ready (pool inalterado); draft não-cursor/* → skip exit 0 (draft = veto do ator, PR humana nunca é forçada).
  • PRs ready não-cursor/* (humanas/plans) passam a mergear com CI verde — redundante no caminho feliz (o fluxo humano já arma --auto --rebase) e é o que pega a classe OPS52; ready_for_review em PR draft re-dispara o job e mergea.
  • Docs sincronizadas: docs/AGENT-OPS.md (tabela CI por alvo), .agents/rules/agent-pr-workflow.mdc (seção Safety net).

Decisão de ops da Issue (efeito no auto-merge de PRs humanas): toda PR humana já nasce Ready + --auto armado pelo fluxo; o alargamento só adiciona redundância no caminho feliz. O humano que quiser vetar mantém a PR em draft — o workflow não toca draft não-cursor/*.

Rejeitados: !is_draft no YAML (nome de campo do payload do webhook não verificado no Forgejo, falha fail-open — forçaria ready+merge de draft humano) e allowlist de prefixos (códigos humanos sem prefixo comum — OPS/S1/PUB5).

Verificação: gate:fast (lint/typecheck/2318 unit) + format:check/knip/check:cycles verdes; gate:ci mirror passou no push (scope classifier: code/test/build/e2e = none — diff só workflow/docs/scripts; CI roda docs-guards + plans-only-closes). A própria PR desta entrega ainda usa o workflow de main (antigo); a próxima PR exercita o gatilho alargado — validação no mundo real.

Impl plan: docs/plans/ops57-forgejo-pr-automerge-alargar-gatilho-impl.md · changelog: docs/changelog/2026-08-18-ops57.md

Closes #44 ## OPS57-guard — forgejo-pr-automerge: alargar gatilho do workflow para branches não-cursor/* **Motivação (débito deferido na OPS56):** dos 25 PRs mergeados no repo, **zero** eram `cursor/*` — 9 de `plans/*`, 11 de worktrees humanos (`OPS*`/`S1`/`PUB5`), 5 de `refs/pull/N/head` (era da migração). O filtro `cursor/*` atual **nunca cobriu nenhum PR real** — o safety net nunca disparou, e o incidente OPS52 (PR #27, humana, merge falhou silenciosamente) era exatamente a classe excluída. **Mudanças:** - `agent-pr-ready-automerge.yml`: `if:` do job → `state == 'open' && head.repo.full_name == github.repository` (guarda de fork — o repo é **público**; uma PR de fork mergeada dispararia o deploy de prod em main). Campos já usados no payload, sem dependência de `is_draft` do webhook. - `forgejo-pr-automerge.mjs`: política de draft movida para o CLI, com o head ref do **re-read da API** — draft `cursor/*` → Ready (pool inalterado); draft não-`cursor/*` → skip exit 0 (**draft = veto do ator, PR humana nunca é forçada**). - PRs ready não-`cursor/*` (humanas/plans) passam a mergear com CI verde — redundante no caminho feliz (o fluxo humano já arma `--auto --rebase`) e é o que pega a classe OPS52; `ready_for_review` em PR draft re-dispara o job e mergea. - Docs sincronizadas: `docs/AGENT-OPS.md` (tabela CI por alvo), `.agents/rules/agent-pr-workflow.mdc` (seção Safety net). **Decisão de ops da Issue** (efeito no auto-merge de PRs humanas): toda PR humana já nasce Ready + `--auto` armado pelo fluxo; o alargamento só adiciona redundância no caminho feliz. O humano que quiser vetar mantém a PR em **draft** — o workflow não toca draft não-`cursor/*`. **Rejeitados:** `!is_draft` no YAML (nome de campo do payload do webhook não verificado no Forgejo, falha fail-open — forçaria ready+merge de draft humano) e allowlist de prefixos (códigos humanos sem prefixo comum — OPS/S1/PUB5). **Verificação:** gate:fast (lint/typecheck/2318 unit) + format:check/knip/check:cycles verdes; gate:ci mirror passou no push (scope classifier: code/test/build/e2e = none — diff só workflow/docs/scripts; CI roda docs-guards + plans-only-closes). A própria PR desta entrega ainda usa o workflow de `main` (antigo); a **próxima** PR exercita o gatilho alargado — validação no mundo real. Impl plan: `docs/plans/ops57-forgejo-pr-automerge-alargar-gatilho-impl.md` · changelog: `docs/changelog/2026-08-18-ops57.md`
fsolla added 1 commit 2026-08-18 14:51:59 +00:00
chore(ops OPS57): alargar o gatilho do forgejo-pr-automerge para todas as PRs same-repo (draft não-cursor/* = veto)
All checks were successful
CI (PR) / scope (pull_request) Successful in 41s
PR Ready + auto-merge / ready-automerge (pull_request) Successful in 1m20s
CI (PR) / docs-guards (pull_request) Successful in 10s
CI (PR) / plans-only-closes (pull_request) Successful in 9s
CI (PR) / typecheck (pull_request) Has been skipped
CI (PR) / knip (pull_request) Has been skipped
CI (PR) / cycles (pull_request) Has been skipped
CI (PR) / unit (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 16s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
CI (PR) / lint (pull_request) Successful in 1m5s
Agent pool supervisor / tick (pull_request) Successful in 43s
CI (PR) / format (pull_request) Successful in 1m19s
CI / static (push) Successful in 3m39s
CI / int (push) Successful in 3m57s
CI (PR) / int (pull_request) Has been skipped
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / checks (pull_request) Successful in 2s
CI / build (push) Successful in 5m14s
CI / e2e (1) (push) Successful in 7m58s
CI / e2e (2) (push) Successful in 6m27s
CI / checks (push) Successful in 2s
CI / deploy homeserver (teqo-1313) (push) Successful in 4m44s
87a81c29fd
fsolla scheduled this pull request to auto merge when all checks succeed 2026-08-18 14:52:06 +00:00
fsolla merged commit 87a81c29fd into main 2026-08-18 14:54:47 +00:00
Sign in to join this conversation.
No reviewers
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#48
No description provided.