Pular para conteúdo

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 registrasse pedidas [] (o modelo não chamou o semgrep);
  • Build and test in OCI, Race tests in OCI e Documentation browser checks como in_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: Parse separa 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. ModelText entrega 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.Keep descarta item de ci_analysis sobre 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 chamado semgrep). Qualquer outro item fica: falha concluída nunca é escondida.
  • cmd/aurumcode/review_ci_status.go: o prefixo próprio deriva de policyGateContext; settleCIStatus roda depois de settleDeferredScans (as varreduras da sessão já são finais), grava ci_status_discarded nos 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.