Files
Rafael MelgaçoandClaude Opus 5 9bbd794bbe merge: a main resolveu versionamento primeiro — o meu sai, o número vira calculado
O `git merge` deu UM conflito (`AGENTS.md`) e escondeu três colisões que o texto
não denuncia: enquanto este PR estava aberto, a `main` mergeou o #357 e passou a
CALCULAR o número a partir de fragmentos em `.changes/`. Eu tinha construído a
mesma coisa por outro caminho. Convergência independente é prova de que o
problema era real; escolher os dois seria ter dois sistemas.

FICA O DA MAIN, e não por antiguidade: ele resolve o caso que o meu não
resolvia. O meu derivava o nível do DIFF, então duas sessões paralelas liam a
mesma lista de tags e chegavam ao mesmo número — que é exatamente a colisão
descrita em `docs/doctrine/versionamento.md`. O deles declara o efeito por PR e
soma no corte; sessões paralelas não se encontram. Além disso ele já é lei
(DoD 17 do CLAUDE.md) e tem o corte automatizado, que o meu não tinha.

Saem: `lib/release/nivel-da-versao.ts` + teste, `scripts/nivel-da-versao.ts`, o
script `release:nivel`, os dois passos que eu tinha posto no `verify`, o
invariante 6-b que escrevi em `packaging.md`, o item 5 do CLAUDE.md e a seção do
CONTRIBUTING. `AGENTS.md` fica inteiro na versão da main — os dois lados acharam
sozinhos a mesma afirmação podre ("Versão do produto: 1.0.0", seis releases
atrasada) e a trocaram por comando; a deles cobre a pegadinha do `ugrep` e diz
que o `package.json` não é a fonte.

O ESTRAGO QUE O MERGE LIMPO ESCONDIA. Este PR digitou `## [1.7.0]` no CHANGELOG
à mão. Medido depois do merge: `pnpm release:conferir` respondia
`1.7.0 + minor = 1.8.0` — a ferramenta lia a minha seção como versão JÁ lançada e
ia cortar 1.8.0, queimando um número. A seção virou 13 fragmentos em `.changes/`
e o cálculo voltou a `1.6.0 + minor = 1.7.0`, agora com 15 fragmentos somados aos
2 que já esperavam.

O IMPACTO DE CADA FRAGMENTO FOI MEDIDO, não estimado. Dois candidatos a
`exige_acao` (que faria disto uma major) foram investigados e recusados com
evidência:

- **RBAC das 4 tabelas de RAG.** Parecia tirar acesso de `viewer`/`agent`. Não
  tira: `lib/navigation/registry.ts` já trazia `minRole: "manager"` e a rota já
  chamava `requireRole("manager")` ANTES deste PR. O aperto fecha um desvio pelo
  PostgREST, não um caminho que alguém usava. → `nada_mudou`.
- **Material no assistente errado.** O backfill da 0181 preserva o que cada
  agente lia (`update ai_agent_versions ... set knowledge_source_ids`). Mas o
  ponteiro por fonte só é reposto quando os trechos daquela fonte existem naquela
  versão — então material cadastrado para assistente não-padrão NÃO se cura
  sozinho. Nada que funcionava parou (ele nunca funcionou), então não é
  `exige_acao`; mas o fragmento passou a dizer isso com todas as letras, em vez
  do "a atualização preserva o que já valia" que eu tinha escrito.

De quebra, o validador deles reprovou um fragmento meu por `**` partido no meio
da linha pelo meu quebrador de 92 colunas — defeito real, que chegaria à tela do
dono da VPS com os asteriscos literais. Reescrito à mão.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wifzKekX5wLvvn8fiNe5h
2026-08-27 12:22:45 -03:00
..