AUR-602 — Changelog ausente vem com a entrada sugerida
Medido
aurumcode changelog(AUR-509) só reprovava: a PR sem entrada recebiachangelog: 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.ymlpinavaactions/checkoutem v4.2.2; odocs.ymljá 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