Pular para conteúdo

AUR-602 — Changelog ausente vem com a entrada sugerida

Medido

  • aurumcode changelog (AUR-509) só reprovava: a PR sem entrada recebia changelog: reprovado (entrada_ausente): ... e exit 1, sem nenhuma ajuda para escrever a entrada.
  • Na PR #108 o job "Changelog obrigatório" falhou com scripts/ci/changelog-check.sh: No such file or directory: no próprio repositório o verificador é construído da base da PR (segurança), e a base ainda não tinha o verificador (primeira introdução).
  • .github/workflows/changelog.yml pinava actions/checkout em v4.2.2; o docs.yml já usa o SHA da v7.0.1.

O que mudou

arquivo responsabilidade
internal/changelog/suggest.go Suggestion; SuggestFromCommits (só assuntos; descarta merges, fixup!/squash!, marcadores de log de agente, linhas abaixo de min_words; escapa, corta em max_line_length, limita a max_entry_lines); SuggestFromModel (exige {"entry": [...]} e aplica as mesmas regras).
internal/changelog/suggest_prompt.go Pedido ao modelo: só caminhos alterados e assuntos de commit, limitados, marcados como dado.
internal/changelog/render.go Suggestion.Block(): ## <section> e os bullets, prontos para colar.
cmd/aurumcode/changelog_suggestion.go Fontes do check (changelogDeps: diff, commits base..head, provedor como no review); offerSuggestion só quando o veredito é reprovação não indeterminada; redação única (redactSuggestion); log, $GITHUB_STEP_SUMMARY e bloco Markdown traduzido.
cmd/aurumcode/cmd_changelog.go runChangelogWith; a reprovação continua exitChangelogRefused (1) com ou sem sugestão.
cmd/aurumcode/changelog_sides.go evaluateChangelog devolve a regra efetiva (nil = não exigido).
cmd/aurumcode/pr_changelog_suggestion.go review --pr: com changelog_check exigido e o arquivo ausente do diff (e não ignorado pelo review), o parecer ganha o bloco, da fonte commits (sem chamada extra ao modelo).
internal/i18n/catalog.yml changelog.suggestion.heading e changelog.suggestion.intro em pt-BR e en.
.github/workflows/changelog.yml Checkouts no SHA da v7.0.1; base sem scripts/ci/changelog-check.sh no próprio repositório imprime ::notice:: de primeira introdução e sai 0 (no consumidor continua erro); GITHUB_STEP_SUMMARY montado no container.
scripts/ci/changelog-check.sh Comentário: o comando grava a sugestão no resumo do job.
docs/configuration.md, docs/tutorials/changelog.md, demo/tutoriais/changelog Seção "Entrada sugerida"; caso 6 sugestao-da-entrada com fixture-sugestao.json; linha nova em tests/fixtures/tutorials/mapa.tsv.

Limite declarado: o container do workflow não recebe credencial de provedor, então no CI a sugestão vem sempre dos commits; a fonte modelo é provada por fixture.

Provas

tests/acceptance/AUR-602.sh all (copia go.mod go.sum cmd internal pkg e o changelog.yml para uma raiz temporária; exit 64 para seletor desconhecido, 79 para infraestrutura):

id teste prova
AC-001 TestAUR602AC001SuggestionFromModel sem entrada: exit 1, saída com entrada sugerida (fonte: modelo) e a linha do fixture; o resumo do job tem o bloco; colado em Unreleased, o próprio Verify aprova.
AC-002 TestAUR602AC002DeterministicWithoutModel sem provedor: fonte commits; Merge pull request, fixup!, Generated with, --- PASS, Co-Authored-By ausentes; resposta do modelo fora do formato cai nos commits.
AC-003 TestAUR602AC003SuggestionIsRedacted canário gerado em tempo de execução, registrado no filtro, no assunto do commit e na resposta do modelo: não aparece no log nem no resumo.
AC-004 TestAUR602AC004ReviewBodyCarriesSuggestion review --pr com política changelog_check: required: o parecer traz "Suggested changelog entry" com as linhas dos commits (sem trailer nem merge); sem exigência, PR que toca o changelog e changelog ignorado (*.md): sem bloco.
AC-005 TestAUR602AC005FirstIntroductionOfTheChecker executa o run: do step com docker falso: própria base sem verificador → ::notice "primeira introdução", exit 0, sem "No such file"; consumidor sem verificador → ::error, exit 1; com verificador → docker chamado. Também exige o pin v7.0.1 em todo checkout.
MUT-001 return exitChangelogRefused → return 0 AC-001 vermelho: passed with a suggestion.
MUT-002 return filter.Redact(block) → return block AC-003 vermelho: canary leaked.

Saída real:

AUR-602/AC-001/pass
AUR-602/AC-002/pass
AUR-602/AC-003/pass
AUR-602/AC-004/pass
AUR-602/AC-005/pass
AUR-602/MUT-001/rejected (passed with a suggestion)
AUR-602/MUT-002/rejected (canary leaked)
AUR-602/all/pass