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.DependenciesContributorsó tornava a revisão inconclusiva quando a verificação falhava; os achados eram informativos. config.DependenciesConfigjá tinhafail_onepreexisting(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/reviewnos paths; a decisão de gate vive eminternal/gate(onde todo contribuidor decide), sem tocarinternal/review.
Decisão
internal/gate/dependencies_policy.go:dependencyPolicyaplica 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 emAppliedExceptions; vencida é declarada e não vale; introduzido igual ou acima do menor nível defail_onreprova (Breach,BlockingFindingscom origemdependencies), abaixo alerta; pré-existente seguepreexisting(blockreprova o que atinge o limiar, ou qualquer um semfail_on). A escada tem quatro níveis (criticalacima dehigh), diferente dogate.fail_on, que junta os dois; ajuste feito depois do AUR-528 (DependenciesConfig.Fails). Semfail_on(e sempreexisting: block) é informativo.- Severidade desconhecida reprova sempre que
fail_onexiste (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 formatocve/<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 OSVhttptestcuja severidade muda entre duas execuções dedependencies.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
pathsdo card:internal/gate(onde o gate decide) einternal/dependencies(só o teste do AC-004 usa a API do pacote).