Pular para conteúdo

AUR-600 — Veredito e texto do parecer concordam com o gate

Medido antes

Na PR #104 (lote dev -> main, 2026-10-07), com gate.fail_on: [error] e dois achados warning, o status aurumcode/policy-gate passou e a review formal foi COMMENT (AUR-567), mas o corpo do parecer publicou Veredito: Alterações solicitadas e "A revisão encontrou 2 achado(s) bloqueante(s) que devem ser tratados antes do merge". reviewVerdictForLanguage e reviewSummaryTextForLanguage contavam todo error/warning como bloqueante, sem olhar o gate; só o evento formal seguia o gate (gateAlignedReviewEvent). O relatório local --base tinha a mesma divergência (só alinhava quando a triagem rebaixava um achado).

Pendência do AUR-599: quando todos os itens de ci_analysis eram descartados (ci_status_discarded), a seção "Status do CI" sumia.

O que mudou

  • internal/review/blocking/rule.go (novo): Rule é a leitura de "bloqueante" de uma execução. Com gate declarado, bloqueia exatamente o que está em gate.Result.BlockingFindings (chave regra|caminho|linha, contagem distinta); Event é a regra do AUR-567 (gate reprova -> REQUEST_CHANGES; gate passa -> nunca REQUEST_CHANGES). Sem gate (Ungated), a leitura histórica (erro ou aviso bloqueia) e o evento ficam iguais.
  • cmd/aurumcode/pr_summary_format.go: o documento é renderizado sob a regra (formatGatedReviewBody/formatReviewDocument). O veredito (gatedVerdictText) segue Rule.Event; revisão inconclusiva continua "Inconclusivo". A frase de conclusão (gatedSummaryText) usa a contagem da regra; gate passando com achados -> review.below_gate_threshold; gate reprovando sem achado acima do limiar -> review.gate_failed.
  • cmd/aurumcode/pr_summary_sections.go (novo): seção de achados com o rótulo "(não bloqueante)" para achado fora do que o gate reprovou (só com gate) e seção de status do CI com a linha review.ci_status_nothing_failed quando tudo foi descartado.
  • cmd/aurumcode/review_pr_publish.go: evento formal e corpo usam a mesma blockingRule() (review_gate.go); gateAlignedReviewEvent foi absorvida por Rule.Event.
  • cmd/aurumcode/local_report.go, review_base_publish.go: o veredito do --base passa por gateRuleVerdict, a mesma regra.
  • internal/i18n/catalog.yml: quatro chaves novas em pt-BR e en.
  • docs/configuration.md, tutoriais (out/) e capturas regravados.

Gate, limiar e formato da review formal não mudaram.

Provas

bash tests/acceptance/AUR-600.sh all (no go-shared):

AUR-600/AC-001/pass
AUR-600/AC-002/pass
AUR-600/AC-003/pass
AUR-600/AC-004/pass
    rule_test.go:18: a passing gate has no blocking finding
--- FAIL: TestRuleFollowsDeclaredGate (0.00s)
    aur600_test.go:30: document must not say "blocking finding(s)" when the gate passed:
AUR-600/MUT-001/rejected
    aur600_test.go:30: document must not say "Changes requested" when the gate passed:
    aur600_test.go:35: document must contain "**Verdict:** Comment":
--- FAIL: TestAUR600WarningBelowGateIsNotBlocking (0.03s)
AUR-600/MUT-002/rejected
AUR-600/all/pass
  • AC-001: TestAUR600WarningBelowGateIsNotBlocking — PR simulada com fail_on: [error] e um warning: exit 0, evento COMMENT, corpo sem "Changes requested"/"blocking finding(s)", com "Verdict: Comment", "The policy gate passed" e "(non-blocking)"; TestRuleFollowsDeclaredGate e TestAUR600LocalVerdictFollowsGate cobrem a regra e o --base.
  • AC-002: TestAUR600GateBreachIsBlocking — achado error que o gate reprova: exit 3, REQUEST_CHANGES, "Changes requested", "1 blocking finding(s)", e o warning segue "(non-blocking)".
  • AC-003: TestAUR600WithoutGateKeepsHistoricalText — sem gate, texto histórico e corpo idêntico ao de formatPublishedReviewBody.
  • AC-004: TestAUR600CIStatusAllDiscardedShowsOneLine — en e pt-BR.
  • MUT-001: remove o ramo do gate em Rule.Count (aviso volta a ser contado como bloqueante) -> AC-001 vermelho (acima).
  • MUT-002: o veredito do documento ignora o gate -> AC-001 vermelho (acima).

Suíte: go vet ./... && go test -p 1 ./... verde no go-shared. Tutoriais: 20 run.sh all com aurum-tutoriais:aur600 e --check exit 0 em todos; no --base sob gate, 11 execuções passaram de "Changes requested" para "Comment" (gate passou) e 26 de "Comment" para "Changes requested" (gate reprovou, inclusive por inconclusivo).