Skip to content

feat(ci): autofix resolve conflito de arquivo gerado e para no de código - #414

Merged
rubenmarcus merged 1 commit into
fix/deixar-pronto-nao-e-mergearfrom
feat/bot-resolve-conflito-de-gerado
Aug 22, 2026
Merged

feat(ci): autofix resolve conflito de arquivo gerado e para no de código#414
rubenmarcus merged 1 commit into
fix/deixar-pronto-nao-e-mergearfrom
feat/bot-resolve-conflito-de-gerado

Conversation

@rubenmarcus

Copy link
Copy Markdown
Member

Fase 5, empilhada sobre o #412#411#409#408.

Summary

  • o autofix passa a trazer a base antes de consertar;
  • conflitou só em arquivo gerado → resolve pela base e re-deriva; sobrou um fora da lista → git merge --abort e comenta;
  • régua AF5 guarda o caminho de exceção.

Evidência — medida ao vivo, hoje

Enquanto eu resolvia conflito à mão em quatro PRs, o chore(release): v2.0.0-alpha.173 entrou na main e reabriu os quatro de uma vez. Os nove arquivos em conflito do #400 depois disso:

ARCH.generated.md
README.md
STATUS.md
docs/docs/arquitetura.md
docs/docs/comecando.md
docs/docs/quality-gates.md
docs/i18n/en/.../arquitetura.md
docs/i18n/en/.../comecando.md
docs/i18n/en/.../quality-gates.md

Todos gerados. Nenhum de código. Todo chore(release) reescreve esses arquivos, então resolver isso à mão é trabalho de Sísifo — o release seguinte desfaz.

A conta dos quatro PRs que resolvi à mão hoje: 53 arquivos em conflito, 45 gerados e 8 de código. É exatamente essa fatia de 85% que o bot passa a cobrir.

O que ele NÃO faz

Sobra para gente a fatia que exige decisão, e ela é real. No #372 a numeração colidiu — o PR usa BUG-68 para a rampa sem textura e a main já usa BUG-68 para o classify repetido. Preservei os dois lados e não renumerei: renumerar bug alheio muda referência em régua e commit. É esse tipo de coisa que o git merge --abort protege.

A AF5 é o que garante isso: sem o abort no caminho de exceção, o bot resolveria código escolhendo um lado no escuro. O mutante resolve-conflito-de-codigo remove o abort e reprova.

Risk

  • low - docs/tooling/text only
  • medium - UI/site/runtime path touched
  • high - gameplay/render/backend/anti-cheat touched

Amplia o que o bot escreve — mas dentro da mesma lista de permissão da fase 3, que continua excluindo public/, src/, scripts/, .github/ e os manifestos.

Validation

  • npm run check:fast - 60/60
  • eval:autofix com AF5 + os seis mutantes
  • autofix_allowlist.py --selftest - 12 casos, inclui o lote típico de release
  • --caminhos exercitado nos dois sentidos (só gerado → 0; com código → 1)

Limite declarado

Não resolve conflito de código, de package.json nem de CHANGELOG.md — os três estão fora da lista de propósito.

Bot notes

  • ok to label safe-automerge
  • needs needs-staging
  • needs needs-human-gameplay
  • needs needs-human-backend

🤖 Generated with Claude Code

MEDIDO hoje, ao vivo: enquanto eu resolvia conflito à mão em quatro PRs, o
`chore(release): v2.0.0-alpha.173` entrou na main e reabriu os quatro de uma vez.
Os NOVE arquivos em conflito do #400 depois disso eram todos gerados - README,
STATUS, ARCH e docs/ -, nenhum de código. Todo release reescreve esses arquivos,
então resolver isso à mão é trabalho de Sísifo: o release seguinte desfaz.

O autofix passa a trazer a base antes de consertar. Conflitou, ele pergunta à
MESMA lista de permissão do resto do bot: se todo caminho em conflito for arquivo
gerado, fica o da base e os geradores re-derivam. Se sobrar UM fora da lista, ele
dá `git merge --abort` e comenta - conflito de código é julgamento, e julgamento
não é dele.

A conta do dia, dos quatro PRs que resolvi à mão: 53 arquivos em conflito, 45
gerados e 8 de código. É a fatia que o bot passa a cobrir, e sobra para gente
exatamente a que exige decisão - como a colisão de numeração de BUG-68 no #372,
que preservei sem renumerar.

A AF5 guarda o caminho de exceção: sem o `git merge --abort`, o bot resolveria
código escolhendo um lado no escuro. O mutante `resolve-conflito-de-codigo`
remove o abort e reprova.

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 21, 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 21, 2026 11:59pm

Request Review

@csbrasil-BOT csbrasil-BOT added the target:main PR apontando para a branch main label Aug 21, 2026
@csbrasil-BOT

csbrasil-BOT commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

csbrasil-bot classification

Note

@rubenmarcus abriu 3 arquivo(s) · +85 −9, base fix/deixar-pronto-nao-e-mergear.

O que mudou

área arquivos + amostra
🤖 CI 2 +61 −9 autofix.yml, autofix_allowlist.py
🧪 arnês 1 +24 −0 autofix-check.mjs

Labels

label por quê
target:main vai direto pra main, sem fila de integraçã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, autofix_allowlist.py
  • arnês (1): autofix-check.mjs

Tip

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

nada aqui que quebre amanhã. amanhã é outro diff

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


todo bug confessa no diff, eu só faço o interrogatório 🤡

@rubenmarcus
rubenmarcus merged commit 4dc4d23 into fix/deixar-pronto-nao-e-mergear Aug 22, 2026
16 checks passed
rubenmarcus added a commit that referenced this pull request Aug 22, 2026
…pilha

DUAS COISAS, e a primeira é um resgate.

1. A fase 5 (#414, resolução automática de conflito de arquivo gerado) ficou
   ÓRFÃ. Ela mergeou em `fix/deixar-pronto-nao-e-mergear`, mas essa branch já
   tinha subido para a de cima antes — então o conteúdo mergeou para lugar
   nenhum. Conferido: a pilha do #408 não tinha `--caminhos` no autofix.yml nem
   a AF5 na régua. Trazida de volta por merge da branch original.

2. O autofix só acordava quando o PR se mexia. Mas quem desatualiza PR é a MAIN
   andando: 9 `chore(release)` em 20 horas, cada um reescrevendo
   README/STATUS/ARCH/docs e reabrindo conflito em todo PR aberto ao mesmo tempo.
   O bot consertava quem empurra commit e nunca quem está parado esperando
   revisão — que é exatamente quem precisa. Entra o gatilho `push: [main]` e um
   job de varredura que lista os PRs não-MERGEABLE e dispara o autofix de cada um
   pelo `workflow_dispatch`, o caminho que enxerga secret.

A AF6 guarda isso: sem o gatilho de push, o portão acende. Os SETE mutantes
mordem. As duas réguas re-mescladas também receberam o padrão do #416.

Agent: Claude Opus 5 (Claude Code)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Commit-grande: reúne a fase 5 órfã e acrescenta a varredura pós-release
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.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