Pular para conteúdo

AUR-510 — Versão oficial com tag imutável e instalação demonstrada

Medido antes (por leitura)

  • Tags existentes: v1.0.x e v1.1.0, do produto histórico; nenhuma release deste produto. CHANGELOG.md não tinha seção por versão; os exemplos (.github/workflows/examples/code-review.yml, docs/site/workflow.yml) são idênticos e referenciam @main; docs/getting-started.md não mostrava a referência.
  • internal/changelog já sabe sugerir versão e entrada (AUR-498/499) e o AUR-509 exige entrada em Unreleased e aceita a consolidação por versão.

Decisão

  • scripts/release.sh (bash + git; gh só no publicar):
  • preparar (só leitura): SHA ancestral da main; versão e notas da primeira ## X.Y.Z depois de ## Unreleased no CHANGELOG.md daquele SHA; notas com ### Entregue, ### Limites, ### Migração do v1, até 120 linhas; versão maior que a maior tag vX.Y.Z (ou tag já no mesmo SHA: idempotente); exemplos idênticos e fixados em @vX.Y.Z, sem outra referência; docs/getting-started.md mostrando @vX.Y.Z.
  • publicar: repete o preparar, exige identidade git e gh já configurados (para com exit 79, nunca define nada), exige evidência do QA do consumidor (AUR-512) do mesmo SHA aprovada pelo verificador no container, cria a tag anotada e a release; nunca força push nem move tag; release existente não é sobrescrita.
  • fixar-exemplos: troca a referência dos três arquivos para @vX.Y.Z.
  • docs/releases.md (no nav do MkDocs) com o roteiro; docs/getting-started.md mostra a referência que o roteiro troca.
  • Nenhuma tag, release ou publicação foi feita nesta entrega.

Fora dos paths do card

mkdocs.yml (nav de docs/releases.md, build --strict). Os exemplos não foram trocados para uma versão: isso é da PR de release, quando a versão existir (fixar-exemplos).

Como cada cenário é provado (tests/acceptance/AUR-510.sh, bash + git em repositórios descartáveis)

  • AC-001: versão e notas derivadas; recusa de SHA fora da main, versão regressiva (1.0.5 com v1.1.0 existente), --versao diferente da seção, notas sem subseção; tag no mesmo SHA é idempotente.
  • AC-002: publicar sem identidade para com exit 79 sem criar tag; o script não define identidade nem força push/tag; a evidência do consumidor é conferida antes de publicar.
  • AC-003: exemplo e download do site idênticos neste repositório; exemplos divergentes ou presos em @main são recusados.
  • AC-004: notas sem ### Entregue ou ### Migração do v1 são recusadas; docs/releases.md documenta a migração.
  • MUT-001: tag v2.0.0 movida para outro SHA → ja existe; exemplo referenciando @v2.0.1 → nao fixa @v2.0.0.

Limites

  • O binário não carrega a versão (-ldflags -X main.version): o Dockerfile está fora dos paths; aurumcode --version continua dev na imagem.
  • "Imutável" depende de ativar Immutable releases no repositório; o script só garante que nunca move nem sobrescreve.
  • Revisão estática do coordenador (2026-10-07): as referências dos exemplos são comparadas como texto exato (sem regex com pontos), toda referência ao AurumCode no arquivo precisa ser @vX.Y.Z (uma linha com a nova e uma antiga reprova), ## [Unreleased] e ## Unreleased valem como no changelog obrigatório, e o QA do consumidor só libera o publicar com todo cenário não manual medido e aprovado. Provas novas no AUR-510.sh (colchetes, pontos, duas-versoes) e no AUR-512 (zero medido reprova).