Pular para conteúdo

AUR-516 — O comentário distingue evidência de CI de inferência do modelo

Medido antes (leitura do código em stream/B, depois do AUR-514)

Já existia, entregue pelo AUR-599 e pelo AUR-600 (reaproveitado aqui):

  • internal/review/cistatus: Parse separa o contexto de CI em checks concluídos e o que não é fato (em andamento, status aurumcode/*); Facts.Keep descarta item de ci_analysis sobre status próprio, check sem resultado ou scanner que não rodou. settleCIStatus (cmd/aurumcode/review_ci_status.go) aplica isso no --pr e no --base.
  • writeCIStatusSection (cmd/aurumcode/pr_summary_sections.go, AUR-600) e a linha "nada falhou nesta execução".

Faltava o que o Outcome pede:

  • Um item que sobrevivia ao Keep era publicado como **<check> — <status do modelo>**, com causa, evidência, correção e próxima verificação do modelo. Sem contexto de CI, "CI — success" escrito pelo modelo saía como estado; num check que o contexto dava como FAILURE, o parecer mostrava o status do modelo e uma correção certa sem log.
  • O link do check nunca chegava ao parecer, e não havia como uma evidência de log fundamentar a correção.

Decisão

  • pkg/types.CIAnalysis ganha Basis, Observed, Link e Grounded com json:"-": só o motor escreve; resposta do modelo nunca os preenche, e um item que não passou pela verificação (valor zero) é tratado como inferência (falha fechada).
  • internal/review/cistatus/verify.go: Context.Verify marca cada item. Check concluído do contexto: BasisCI, estado e link observados (nome repetido: a falha vence), Grounded quando a evidence do modelo cita o excerpt do check (comparação com espaços normalizados). Qualquer outro: BasisModel, sem estado observado. Passed diz que estado dispensa diagnóstico (SUCCESS, SKIPPED, NEUTRAL).
  • Check.Excerpt (excerpt no arquivo de contexto): trecho de log opcional, já sanitizado, que um workflow pode acrescentar; nada o baixa por default (Non-goal). Chega ao modelo pelo mesmo ModelText, que passa pela redação do prompt (reviewer.go).
  • cmd/aurumcode/ci_status_render.go: writeCIAnalysisItem publica: verificado e passou: só estado e link; verificado, falhou e fundamentado: "Observado no log do CI", "Causa inferida pelo modelo", "Correção inferida pelo modelo" em linhas separadas; verificado, falhou e sem log: "Causa: desconhecida", a causa do modelo como "Hipótese do modelo (não verificada)", nenhuma correção e a orientação de abrir o log no link; não verificado: "estado não verificado (inferência do modelo ...)", causa desconhecida e hipótese, nunca o status do modelo.
  • Textos novos no catálogo internal/i18n (pt-BR e en, chaves review.ci_*). O template do prompt não mudou.

Desvio de paths do card

O card lista só cmd/aurumcode, o aceite e docs/review-quality.md; foi escrito antes do AUR-599 criar internal/review/cistatus. A regra de classificação mora em internal/review/cistatus (lógica fora de cmd), os campos do motor em pkg/types, os textos em internal/i18n/catalog.yml, e a subseção "Status do CI no parecer" de docs/configuration.md foi atualizada.

Documentação

  • docs/review-quality.md ("Cobertura e falhas") e docs/configuration.md ("Status do CI no parecer") descrevem a separação e o campo excerpt. Varredura de docs/, README.md, docs/tutorials e demo/tutoriais: nenhum tutorial publica ci_analysis não vazio, nada desatualizado.

Como cada cenário é provado (tests/acceptance/AUR-516.sh)

  • AC-001: TestAUR516AC001ModelSaysCIGreenWithoutContext roda um --pr real (GitHub falso em processo) sem contexto de CI com o modelo dizendo success: o parecer não traz — success nem o rótulo de verificado e traz "estado não verificado". TestVerifyNeverTakesTheModelsState: sem contexto, contexto ilegível ou nome desconhecido, nada é observado.
  • AC-002: TestAUR516AC002FailedCheckWithoutLogsGivesDiagnosis (pt-BR e en): Lint — failure com link, causa desconhecida, hipótese, orientação de diagnóstico, e nem a correção nem a próxima verificação do modelo. TestVerifyObservedStateAndLink.
  • AC-003: TestAUR516AC003EvidenceQuotedKeepsInferenceApart: com excerpt citado, observação e inferência em linhas separadas e a correção publicada; evidência que não cita o trecho volta ao caso AC-002. TestVerifyGroundedOnlyWhenEvidenceQuotesTheExcerpt.
  • MUT-001: em verify.go, o item sem check correspondente recebe BasisCI e Observed = item.Status; compila e deixa o AC-001 vermelho (AUR-516 model state published as CI state).

Fora do escopo

O summary livre do modelo continua filtrado pelas regras existentes (AUR-517); esta mudança cobre a seção "Status do CI".

Correção da revisão estática

Uma palavra solta (por exemplo error) contava como citação do log. quotes exige agora uma linha inteira do excerpt ou ao menos 20 caracteres que não são espaço (minQuotedChars). Prova: TestVerifyOneWordIsNotAQuote (no AC-003).