AUR-529 — Licença proibida pela política bloqueia dependência nova
Medido antes (pela leitura)
dependencies.licenses_deniedjá 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 trazlicenses; 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) eEvaluateLicensecom três valores (permitida, proibida, desconhecida): OR é proibida só se todo ramo for; AND é proibida se algum for;WITHjulga a licença base; ids comparados sem caixa;LicenseRef-*,DocumentRef-*,NOASSERTION,NONE,non-standarde 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: comlicenses_deniednã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 →LicenseReaderopcional + modelo (prompts/license.md), aceito só comconfident: truee 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 registradahigh, independente defail_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: repassalicenses_denied.
Como cada AC/MUT é provado
tests/acceptance/AUR-529.sh (pacotes internal/dependencies, internal/gate):
- AC-001
TestAUR529AC001DeniedLicense(semlicenses_deniednada é consultado),TestAUR529AC001DeniedLicenseFails. - AC-002
TestAUR529AC002ExpressionNotSubstring(tabela de expressões;MIT OR AGPL-3.0-onlypassa,LGPL-3.0-onlynão casa comGPL-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
pathsdo card:internal/gate(decisão do gate).