Pular para conteúdo

AUR-529 — Licença proibida pela política bloqueia dependência nova

Medido antes (pela leitura)

  • dependencies.licenses_denied já existia na configuração (AUR-495), validado como identificadores SPDX simples, sem uso.
  • O registro deps.dev (internal/dependencies/registry.go, AUR-528) já lia o endpoint da versão, que traz licenses; só os metadados de suspeita o usavam.

Decisão

  • internal/dependencies/spdx.go: parser de expressão SPDX (OR mais fraco que AND, parênteses, WITH) e EvaluateLicense com três valores (permitida, proibida, desconhecida): OR é proibida só se todo ramo for; AND é proibida se algum for; WITH julga a licença base; ids comparados sem caixa; LicenseRef-*, DocumentRef-*, NOASSERTION, NONE, non-standard e expressão ilegível são desconhecidas. Nenhuma lista de licenças no código além desses marcadores do próprio SPDX/deps.dev.
  • internal/dependencies/licenses.go: com licenses_denied não vazio, cada pacote novo ou atualizado tem as expressões do registro julgadas uma a uma (todas precisam permitir; o deps.dev devolve uma lista). Desconhecida → LicenseReader opcional + modelo (prompts/license.md), aceito só com confident: true e expressão avaliável; sem isso, dependencies_license_unknown. Pacote só com faixa, sem sistema ou registro fora do ar = desconhecida. A produção não liga leitor de texto (sem baixar pacotes por ecossistema): licença que o registro não nomeia é inconclusiva.
  • internal/gate/dependencies_license.go: licença proibida reprova (license/<pacote>, severidade registrada high, independente de fail_on), com pacote, versão e licença na linha; exceção por pacote no manifesto (MatchException, dono e validade); desconhecida é declarada.
  • cmd/aurumcode/dependency_check.go: repassa licenses_denied.

Como cada AC/MUT é provado

tests/acceptance/AUR-529.sh (pacotes internal/dependencies, internal/gate):

  • AC-001 TestAUR529AC001DeniedLicense (sem licenses_denied nada é consultado), TestAUR529AC001DeniedLicenseFails.
  • AC-002 TestAUR529AC002ExpressionNotSubstring (tabela de expressões; MIT OR AGPL-3.0-only passa, LGPL-3.0-only não casa com GPL-3.0-only).
  • AC-003 TestAUR529AC003UnknownIsInconclusive (non-standard, registro fora do ar, classificação confiante e não confiante do texto), TestAUR529AC003UnknownLicenseInconclusive.
  • AC-004 TestAUR529AC004PackageException (ativa aceita; vencida reprova).
  • MUT-001: antes do parser, um laço reprova a expressão que contém qualquer id proibido como substring: AC-002 fica vermelho.

Riscos

  • Código escrito sem compilar.
  • Arquivos fora dos paths do card: internal/gate (decisão do gate).