AUR-599 — Status do CI no parecer só afirma o que esta execução observou
Medido antes
Na PR #96 (última rodada, 2026-10-07) o parecer aprovou, mas a seção "Status do CI" listou:
scanner_semgrep — inconclusive, com causa, evidência e correção, embora a deliberação registrassepedidas [](o modelo não chamou o semgrep);Build and test in OCI,Race tests in OCIeDocumentation browser checkscomoin_progress, cada um com "Causa/Correção/Próxima verificação" inventadas.
O contexto vinha de gh pr checks --json name,state,workflow,link gravado no
início do job: checks IN_PROGRESS da execução corrente, o próprio job de
revisão em andamento e os status aurumcode/policy-gate e aurumcode/review
da rodada anterior, todos repassados crus ao modelo por readCIContext.
O que mudou
internal/review/cistatus/context.go:Parsesepara o contexto em checks concluídos (lista fechada de estados com resultado) e o que não é fato: checks sem resultado (qualquer outro estado, inclusive desconhecido) e status com o prefixo do próprio produto.ModelTextentrega ao modelo só os concluídos e uma nota com a contagem omitida; texto que não é array JSON de checks não é repassado (falha fechada).internal/review/cistatus/filter.go:Facts.Keepdescarta item deci_analysissobre status próprio, check sem resultado (pelo contexto ou pelo status que o próprio modelo escreveu) ou scanner que não rodou nesta execução (scanner_<engine>ou engine registrado ausente das varreduras da sessão). Um nome que o contexto conhece como check concluído fica mesmo quando coincide com o nome de um engine (um job de CI chamadosemgrep). Qualquer outro item fica: falha concluída nunca é escondida.cmd/aurumcode/review_ci_status.go: o prefixo próprio deriva depolicyGateContext;settleCIStatusroda depois desettleDeferredScans(as varreduras da sessão já são finais), gravaci_status_discardednos metadados e nomeia os descartes no stderr. Ligado no--pr(review_pr_generate.go,review_pr_analysis.go) e no--base.docs/configuration.md: subseção "Status do CI no parecer".
O template do prompt e o gate não mudaram.
Provas
| Cláusula | Prova |
|---|---|
| AC-001 | TestAC001RunningChecksAndOwnStatusesAreNotFacts (forma da PR #96: contexto do modelo sem aurumcode/*, sem IN_PROGRESS; itens descartados com motivo) e TestAUR599AC001RunningAndOwnStatusesAreNotPublished (--pr ponta a ponta: prompt capturado e parecer publicado sem os itens; stderr conta 3 descartes). |
| AC-002 | TestAC002ScannerNotRunNeverAppears (descartado sem execução, mantido quando o engine rodou) e TestAUR599AC002ScannerNotRunIsNotPublished. |
| AC-003 | TestAC003ConcludedFailureStays e TestAUR599AC003ConcludedFailureIsPublished: Lint FAILURE fica no prompt e no parecer com a causa do modelo; um job de CI concluído chamado semgrep (mesmo nome do engine registrado, que não rodou) também fica (sem a regra: a concluded CI job named like an engine was hidden). |
| MUT-001 | case c.Own(name): → case false:: AC-001 vermelho (model CI context carries "aurumcode/policy-gate"). |
| MUT-002 | regra de scanner nunca dispara: AC-002 vermelho (kept "scanner_semgrep" discarded []; a scanner that did not run appears in the review). |
tests/acceptance/AUR-599.sh all termina em AUR-599/all/pass.
Fora do escopo
A linha única "nada falhou nesta execução" quando todos os itens são
descartados precisa de chave nova no catálogo internal/i18n, fora dos
paths do card: a seção continua omitida quando não sobra item.