Pular para conteúdo

AUR-570: o gate do Dependency-Track le as metricas so depois que assentaram

Defeito

bom/token responde processing: false quando o SBOM foi ingerido. A avaliacao de politica e o recalculo das metricas terminam depois (medido no Dependency-Track 5.1.1: COMPLETED a ~1,47 s do envio, metricas atualizadas ~0,1 s depois). O gate lia metrics/project/{id}/current na primeira resposta e aprovava policy_violations=0 (achado 1 de docs/specs/AUR-563.md). Falha aberta.

Comportamento (internal/dtrack/settle.go)

Depois do polling do token, Run chama SettledMetrics:

  1. GET /api/v1/metrics/project/{id}/refresh; qualquer status nao 2xx (403: a chave nao tem PORTFOLIO_MANAGEMENT, confirmado no servidor real) e tolerado e vira a nota dtrack_refresh_unavailable no parecer.
  2. Releitura de .../current a cada poll_interval_seconds. Uma leitura e fresca se lastOccurrence e posterior ao instante do upload (relogio do cliente) ou, quando nao, se lastVulnerabilityAnalysis de GET /api/v1/project/{id} e posterior ao upload. A segunda prova existe porque, medido no 5.1.1, lastOccurrence NAO se move quando as metricas recalculadas sao iguais as guardadas (reenviar o mesmo SBOM). Duas leituras frescas consecutivas com mesmos critical, high, policyViolationsTotal assentam; qualquer mudanca zera a contagem. 404 nas metricas espera.
  3. Sem assentar em timeout_seconds (janela propria, apos o token): ErrMetricsUnsettled, motivo dtrack_metrics_unsettled, inconclusivo pelo modo da politica (block reprova, warn nao aprova).

Sem campo de configuracao novo. Leituras = 2, fixo.

Limites conhecidos

  • A prova de frescor usa o relogio do cliente contra o do servidor; um servidor adiantado em relacao ao cliente enfraquece a prova por lastOccurrence (a estabilidade em duas leituras continua valendo).
  • Na prova por lastVulnerabilityAnalysis (SBOM inalterado), a politica ja avaliada e a anterior; uma politica alterada entre dois envios do mesmo SBOM so e vista se o servidor recalcular dentro da janela.
  • O tutorial roda contra o servidor real; os testes Go usam servidor falso.

Testes

internal/dtrack/settle_test.go e cmd/aurumcode/aur570_test.go; aceite em tests/acceptance/AUR-570.sh (AC-001..AC-004 e AC-001-MUT-001).