Skip to content

fix(ci): o bot para de reprovar o PR que ele acabou de consertar - #424

Merged
rubenmarcus merged 1 commit into
mainfrom
fix/bot-commit-e-avaliar
Aug 22, 2026
Merged

fix(ci): o bot para de reprovar o PR que ele acabou de consertar#424
rubenmarcus merged 1 commit into
mainfrom
fix/bot-commit-e-avaliar

Conversation

@rubenmarcus

Copy link
Copy Markdown
Member

Dois defeitos apareceram no primeiro disparo real da automação, e os dois eram meus.

1. O commit do autofix não levava o trailer Agent:

O agente_check cobra esse trailer de todo commit do PR. Então o bot regenerava a doc, commitava — e reprovava o mesmo PR no passo seguinte. Atingiu #400, #405, #406, #365, #372, #373 e #375 de uma vez.

O commit de merge do autofix tinha o trailer; o de regeneração não. Agora os dois têm.

2. O job avaliar rodava um script sem fazer checkout

python3: can't open file '.../scripts/ci/ensure_labels.py': [Errno 2] No such file or directory

O passo era resto do desenho antigo: o preview por etiqueta morreu quando ele virou build-sem-segredo + deploy-sem-código. A etiqueta não é mais necessária, então o passo saiu em vez de ganhar um checkout.

A régua

AF7: todo git commit do bot tem de levar Agent: e Signed-off-by: — exatamente os trailers que o CI cobra de gente. Bot que não cumpre a régua da casa não ajuda ninguém. Mutante commit-sem-trailer acende.

O que o disparo mostrou de bom

Rodei o autofix nos 12 PRs abertos: 13 runs, 1 cancelado, 0 falhas, e #417, #400, #375 e #372 saíram de CONFLICTING sozinhos. A automação funciona; faltava ela respeitar as próprias réguas.

Risk

  • low - docs/tooling/text only
  • medium
  • high

Validation

  • eval:autofix com AF7 + o mutante commit-sem-trailer
  • workflow_security_check, eval:deploygate, eval:portaointeiro, docs:check — todos verdes
  • YAML dos dois workflows valida

🤖 Generated with Claude Code

Dois defeitos apareceram no PRIMEIRO disparo real da automação, e os dois eram
meus:

1. O commit de regeneração do autofix não levava o trailer `Agent:`. O
   agente_check cobra esse trailer de TODO commit do PR, então o bot consertava a
   doc e reprovava o mesmo PR no passo seguinte. Atingiu #400, #405, #406, #365,
   #372, #373 e #375 de uma vez.

2. O job `avaliar` do preview-bot rodava `python3 scripts/ci/ensure_labels.py` sem
   nunca ter feito checkout - "No such file or directory". O passo era resto do
   desenho antigo: o preview por etiqueta morreu quando ele virou build-sem-segredo
   + deploy-sem-código, então a etiqueta não é mais necessária e o passo saiu.

A AF7 guarda o primeiro: todo `git commit` do bot tem de levar `Agent:` e
`Signed-off-by:`, que são exatamente os trailers que o CI cobra de gente. Bot que
não cumpre a própria régua da casa não ajuda ninguém. O mutante
`commit-sem-trailer` remove o Agent e acende.

Agent: Claude Opus 5 (Claude Code)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
@vercel

vercel Bot commented Aug 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
csbrasil Ready Ready Preview Aug 22, 2026 4:32am

Request Review

@csbrasil-BOT

csbrasil-BOT commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator

csbrasil-bot classification

Note

@rubenmarcus abriu 5 arquivo(s) · +16 −7, base main.

O que mudou

área arquivos + amostra
🤖 CI 2 +1 −5 autofix.yml, preview-bot.yml
📚 docs 2 +2 −2 colaborar.md, colaborar.md
🧪 arnês 1 +13 −0 autofix-check.mjs

Labels

label por quê
target:main vai direto pra main, sem fila de integração

@csbrasil-BOT

Copy link
Copy Markdown
Collaborator

🤖 autofix: dá para consertar sozinho, mas este PR está com allow edits by maintainers desligado. Rode npm run docs && node tools/gen-arch.mjs e commite — ou ligue a opção e eu faço.

@estraga-codigo estraga-codigo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Palhaço Mal

Palhaço Mal · revisor da casa · 🤡

mapa da mudança

  • CI (2): autofix.yml, preview-bot.yml
  • docs (2): colaborar.md, colaborar.md
  • arnês (1): autofix-check.mjs

Tip

Risco BAIXO · nota 10/10 ▓▓▓▓▓▓▓▓▓▓

pente fino passado: nenhum achado que eu defenda em voz alta

Revisão de bot — fio não resolvido TRAVA o merge (a main exige conversa resolvida). Resolve ou refuta.


maquiagem de verde por cima de vermelho eu desenmascaro no primeiro golpe de vista 🤡

@rubenmarcus
rubenmarcus merged commit a90d9af into main Aug 22, 2026
23 checks passed
rubenmarcus added a commit that referenced this pull request Aug 22, 2026
… (#425)

* fix(ci): o merge limpo do bot também leva os trailers

O #406 travou no dco por um commit do PRÓPRIO bot: `b594bc62 Merge branch 'main'
... into fix/403`. Quando o merge da base NÃO conflita, o autofix usava
`git merge --no-edit`, e o git escreve a mensagem automática - sem `Agent:` e sem
`Signed-off-by`. O conserto do #424 só cobriu os `git commit` explícitos; o caminho
sem conflito passou por fora.

Agora a mensagem vai explícita nos dois caminhos.

A AF7 (que ficou de fora do #424) entra cobrindo `git commit` E `git merge`, e
ignora a citação dentro de `--body` - ali o `git merge` é instrução que o bot manda
o humano ler, não comando que ele roda. Os mutantes `commit-sem-trailer` e
`merge-sem-trailer` mordem.

Agent: Claude Opus 5 (Claude Code)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>

* fix(ci): o autofix não conseguia mergear nem empurrar em PR de casa

O #425 ficou CONFLICTING com o autofix rodando com sucesso ao lado. Três defeitos
empilhados, todos meus, e o log entregou os três:

1. ORDEM DOS PASSOS. O merge vinha DEPOIS de `git checkout FETCH_HEAD -- tools/
   scripts/ package.json`, que deixa a árvore suja - e `git merge` recusa árvore
   suja. Por isso o log mostrava `conflitos:` vazio: não era conflito, era merge
   que nem começou. O merge passa a ser a primeira coisa depois do checkout.

2. PODE_EDITAR SEMPRE FALSO EM PR DE CASA. `maintainerCanModify` é false por
   definição quando o PR não vem de fork - a opção nem existe ali. O guard de push
   comparava com 'true' e bloqueava justamente onde o bot sempre pode empurrar.
   Agora head-repo igual ao repositório vale como permissão.

3. A TRAVA VINHA DO PR. Com o merge antes da restauração, o allowlist consultado
   seria o do PR - e um PR que reescrevesse o allowlist liberaria a si mesmo. Ele
   passa a ser extraído da BASE para /tmp, o que também mantém a árvore limpa para
   o merge. A AF5 ganhou a cláusula.

Agent: Claude Opus 5 (Claude Code)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>

---------

Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

target:main PR apontando para a branch main

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants