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á emgate.Result.BlockingFindings(chave regra|caminho|linha, contagem distinta);Eventé a regra do AUR-567 (gate reprova ->REQUEST_CHANGES; gate passa -> nuncaREQUEST_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) segueRule.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 linhareview.ci_status_nothing_failedquando tudo foi descartado.cmd/aurumcode/review_pr_publish.go: evento formal e corpo usam a mesmablockingRule()(review_gate.go);gateAlignedReviewEventfoi absorvida porRule.Event.cmd/aurumcode/local_report.go,review_base_publish.go: o veredito do--basepassa porgateRuleVerdict, 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 comfail_on: [error]e um warning: exit 0, eventoCOMMENT, corpo sem "Changes requested"/"blocking finding(s)", com "Verdict: Comment", "The policy gate passed" e "(non-blocking)";TestRuleFollowsDeclaredGateeTestAUR600LocalVerdictFollowsGatecobrem 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 deformatPublishedReviewBody. - 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).