AUR-552: tipos de xBOM além do SBOM
Escopo entregue
aurumcode xbom --type build|cbom: Build BOM e CBOM em CycloneDX 1.6, com evidência verificada (internal/xbom,cmd/aurumcode/aur552.go).aibom,saasbomenetbom: formato e envio definidos e documentados emdocs/configuration.md(âncorasxbom-aibom,xbom-saasbom,xbom-netbom); o comando recusa com exit 2 apontando a âncora (AC-003).- O envio ao servidor é o do AUR-550 (
POST /api/v1/bom);xbomsó gera o arquivo. Enviar o BOM pelo próprioxbomnão faz parte deste card.
Arquitetura
LoadCatalogresolve o catálogo do tipo: política central, repositório, embutido (catalog/<tipo>.yml,go:embed). Validação estrita (ParseCatalog).Extractpercorre o repositório (sem seguir links simbólicos, ignorando binários e arquivos acima de 1 MiB) e aplica cada entrada cujofilescasa o caminho: regex por linha, grupos nomeados, template do componente.- Com provedor (
selectProvider, incluindoAURUMCODE_LLM_FIXTURE), o modelo recebe os candidatos (linha já redigida) e responde JSON:candidates[](id,keep,description,properties) eadditional[](componentes novos comoccurrences[]que ele cita). Id inexistente ou tipo inválido é rejeitado e contado (aurumcode:xbom:llm_rejected). verifyEvidencereabre cada ocorrência (caminho dentro do repositório, links simbólicos que saem são recusados) e exige que a linha contenha o token (lineCitesToken, a âncora de MUT-001). Falhou: descartado e contado emaurumcode:xbom:dropped_without_evidence.- Serialização e
ValidateBOM:internal/sbom.Validate(formato especVersionmínimo) mais a regra própria (toda ocorrência com caminho relativo e linha positiva; todocryptographic-assetcomassetType). - Escrita em temporário e
rename.
Formato do catálogo
Ver "Catálogos" em docs/configuration.md. Campos: version (1), type,
file_sets, exclude, entries[] (id, files, pattern, token,
component{type,name,version,purl,description,properties,crypto}).
Fora do escopo desta versão: consulta estrutural (AST) como alternativa à
regex por linha; o catálogo só expressa padrões de linha. Referências a
estágios anteriores de um Dockerfile (FROM build) viram candidato e cabe ao
modelo (keep: false) ou a um catálogo próprio excluí-las.
Metadados registrados
aurumcode:xbom:type, catalog (embedded, repository, policy), llm
(absent, present, failed), candidates, dropped_without_evidence,
dropped_occurrences, e com provedor llm_excluded e llm_rejected.
Aceite
bash tests/acceptance/AUR-552.sh all|AC-001|AC-002|AC-003|AC-002-MUT-001.
MUT-001 troca o corpo de lineCitesToken por return true numa cópia e exige
que os testes de AC-002 caiam.