Pular para conteúdo

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, saasbom e netbom: formato e envio definidos e documentados em docs/configuration.md (âncoras xbom-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); xbom só gera o arquivo. Enviar o BOM pelo próprio xbom não faz parte deste card.

Arquitetura

  1. LoadCatalog resolve o catálogo do tipo: política central, repositório, embutido (catalog/<tipo>.yml, go:embed). Validação estrita (ParseCatalog).
  2. Extract percorre o repositório (sem seguir links simbólicos, ignorando binários e arquivos acima de 1 MiB) e aplica cada entrada cujo files casa o caminho: regex por linha, grupos nomeados, template do componente.
  3. Com provedor (selectProvider, incluindo AURUMCODE_LLM_FIXTURE), o modelo recebe os candidatos (linha já redigida) e responde JSON: candidates[] (id, keep, description, properties) e additional[] (componentes novos com occurrences[] que ele cita). Id inexistente ou tipo inválido é rejeitado e contado (aurumcode:xbom:llm_rejected).
  4. verifyEvidence reabre 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 em aurumcode:xbom:dropped_without_evidence.
  5. Serialização e ValidateBOM: internal/sbom.Validate (formato e specVersion mínimo) mais a regra própria (toda ocorrência com caminho relativo e linha positiva; todo cryptographic-asset com assetType).
  6. Escrita em temporário e rename.

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.