Pular para conteúdo

AUR-473: um --modelo inexistente e erro de USO, e falha antes de computar qualquer coisa

O conflito que este card resolve

Dois contratos done se contradiziam sobre a mesma situação: --seguranca com um provider que nao entrega a revisao de qualidade.

  • AUR-450 fixa que um modelo explicito indisponivel falha alto e que a saida da passagem de seguranca -- secao e nota de cobertura -- nao chega a imprimir.
  • AUR-458 fixa que uma passagem deterministica que ja rodou sobrevive a falha de provider: seus achados ainda imprimem, porque "achado computado e depois retido" e o defeito que aquele card existe para matar.

Nao ha lado errado nos dois principios. Ha uma classificacao diferente para duas situacoes diferentes:

  • Um modelo que o usuario nomeou com --modelo e que o gateway nao serve e um erro de uso -- a mesma classe de um flag digitado errado. Ele falha antes de qualquer trabalho ser computado.
  • Um provider que estava configurado e quebrou em runtime e uma falha operacional; o trabalho deterministico ja computado (achados de seguranca) e legitimo e deve ser entregue.

Decisao

Em runReview, no ramo em que selectProviderForModel falha:

if !*seguranca || *modelo != "" {
    return rc
}

Com --modelo, o comando retorna imediatamente, depois de reportModelUnavailable ter nomeado o modelo indisponivel no stderr. A passagem de seguranca nunca roda, entao nem a secao nem a nota de cobertura imprimem, e o stdout fica vazio: nada foi computado, logo nada foi retido. Sem --modelo (provider configurado que falhou), o comportamento do AUR-458 permanece identico -- os achados deterministicos continuam imprimindo e o exit continua 1.

O exit code do caso permanece 1: nao ha um codigo novo para mintar.

Testes

  • Unit: tests/unit/AUR-473.go::TestAUR473.
  • Integration: tests/integration/AUR-473.go::IntegrationAUR473.
  • Acceptance: tests/acceptance/AUR-473.sh (selectores AC-001, AC-002, AC-003, e as camadas).
  • E2E: tests/e2e/AUR-473.sh::E2EAUR473.

Mutacoes ceticas

  • MUT-001 (AC-001): voltar a rodar a passagem de seguranca antes de recusar o modelo nomeado. O mutante passa a imprimir a secao de seguranca para um --modelo indisponivel e e rejeitado.
  • MUT-002 (AC-002): fazer a falha de runtime de provider tambem pular a passagem de seguranca. O mutante perde os achados deterministicos que o AUR-458 exige e e rejeitado.

Limpeza de aceite irmao

O aceite do AUR-450 (tests/acceptance/AUR-450.sh) estava quebrado na base ed1eae4 por duas razoes alheias a este card:

  1. stage_source copiava internal/documentation/*, internal/pipeline e cmd/regenerate-docs, todos removidos por 670c7f6; o cp abortava antes de executar qualquer assercao. A lista foi re-derivada das dependencias reais de go list -deps ./cmd/aurumcode.
  2. O sha256 de stdout com provider configurado (63c649af...) ficou stale: AUR-490 (done) fez review --base imprimir o resumo e o diagrama Mermaid que --pr ja imprimia. O valor foi re-derivado executando o comando exato nesta base, nao ajustado para "passar".

AC-003 exige que bash tests/acceptance/AUR-450.sh AC-001 volte a sair 0.