Pular para conteúdo

AUR-527 — Gate de dependência e exceção por CVE no yml da política

Medido antes (pela leitura)

  • Depois do AUR-495, gate.DependenciesContributor só tornava a revisão inconclusiva quando a verificação falhava; os achados eram informativos.
  • config.DependenciesConfig já tinha fail_on e preexisting (validados no parse), sem uso no gate.
  • As exceções do AUR-520 (gate.MatchException) casam repo, regra e caminho exatos, com validade em UTC; nada as aplicava a dependências.
  • O card cita internal/review nos paths; a decisão de gate vive em internal/gate (onde todo contribuidor decide), sem tocar internal/review.

Decisão

  • internal/gate/dependencies_policy.go: dependencyPolicy aplica a seção a cada advisory: corrigido é declarado; exceção ativa para qualquer identificador do advisory (cve/<id>: OSV, GHSA ou CVE) no manifesto aceita e entra em AppliedExceptions; vencida é declarada e não vale; introduzido igual ou acima do menor nível de fail_on reprova (Breach, BlockingFindings com origem dependencies), abaixo alerta; pré-existente segue preexisting (block reprova o que atinge o limiar, ou qualquer um sem fail_on). A escada tem quatro níveis (critical acima de high), diferente do gate.fail_on, que junta os dois; ajuste feito depois do AUR-528 (DependenciesConfig.Fails). Sem fail_on (e sem preexisting: block) é informativo.
  • Severidade desconhecida reprova sempre que fail_on existe (DependenciesConfig.Fails).
  • A severidade é sempre a da consulta da execução: o cache de respostas (cachedSource) vive só dentro de uma verificação.
  • Docs: docs/configuration.md (seção Dependências do PR: gate e exceção por CVE; seção Exceções aprovadas: aponta o formato cve/<id>).

Como cada AC/MUT é provado

tests/acceptance/AUR-527.sh (pacote internal/gate):

  • AC-001 TestAUR527AC001IntroducedFollowsFailOn (crítico reprova, baixo alerta, desconhecido reprova).
  • AC-002 TestAUR527AC002Preexisting.
  • AC-003 TestAUR527AC003CVEException (ativa aceita e listada; vencida reprova; outro repositório não casa).
  • AC-004 TestAUR527AC004SeverityFollowsSource: base OSV httptest cuja severidade muda entre duas execuções de dependencies.Check; o resultado muda sem mexer no yml.
  • AC-005 TestAUR527AC005InformativeWithoutFailOn.
  • MUT-001: o cache de respostas vira global ao processo (var lastRun cachedSource), guardando a severidade da execução anterior: AC-004 fica vermelho.

Riscos

  • Código escrito sem compilar (regra do stream).
  • "Sem bloco dependencies, só informativo" (AC-005): sem a seção a verificação nem roda (regra de compatibilidade do AUR-495); declarada sem fail_on, os achados são informativos.

  • Arquivos fora dos paths do card: internal/gate (onde o gate decide) e internal/dependencies (só o teste do AC-004 usa a API do pacote).