Pular para conteúdo

AUR-567: linha do gate mostra a origem tipada para toda fonte

O que entrega

  • Um unico mapeamento de origem: internal/gate (OriginSkills, OriginAnalysis, OriginSAST, OriginSecurity, OriginDTrack, OriginAnalysisData). A linha do gate, BlockingFindings (auditoria e SARIF) e o Origin() de cada contribuinte usam o mesmo valor.
  • gate.FindingLine: a unica forma de uma linha de achado, <regra> - <mensagem> (severidade <s>, limiar <l>, origem <fonte>). No SAST a origem e sast, secao policy|repo (a secao de configuracao que decidiu, nunca no lugar da origem). O achado do Dependency-Track passa a trazer origin: dtrack na auditoria e (origem dtrack) na linha.
  • Mensagem consistente (causa, nao sintoma): o filtro de redacao do stderr le ...secret: <palavra> como um par chave/valor e trocava a primeira palavra da mensagem por [REDACTED]. O id da regra (analysis/hardcoded-secret) terminava em secret e a linha o juntava a mensagem por :. Agora a juncao e -; o filtro nao mudou.
  • Veredito e status (notas dos AUR-562 e AUR-568):
  • sem gate declarado, falha ao gravar auditoria/SARIF retem a aprovacao (ApplyArtifactFailures chama withholdApproval tambem sem gate): a review formal nunca e APPROVE antes do exit 1.
  • Decisao: com gate declarado a review formal segue o gate (gateAlignedReviewEvent): REQUEST_CHANGES so se o gate reprova; achado abaixo do limiar ou aprovacao retida e COMMENT; execucao limpa segue APPROVE. Sem gate, o comportamento historico (aviso ja pede mudancas). Antes, um aviso abaixo do limiar dava REQUEST_CHANGES com aurumcode/policy-gate verde. Registrado em docs/configuration.md e no tutorial.
  • Teste --pr dedicado do contribuinte security-pass (nota do AUR-569): achado de seguranca no --pr e exit 3, status failure, origem security no parecer e na auditoria.
  • Tutorial gate regravado (execucao real, imagem do produto); docs/configuration.md alinhado.
  • Adendo v2: o bloco de saida observada de docs/site/index.html que o aceite do AUR-497 compara byte a byte foi regravado com a saida real (cartoes 4 e 6, fix: o cabecalho do hunk tinha envelhecido); tests/acceptance/AUR-497.sh nao mudou e a comparacao segue byte a byte.

Testes e aceite

  • AC-001: TestAUR567GateLineCarriesTypedOriginForEverySource (skills, analysis, sast com semgrep falso, security num mesmo --base; cada linha traz origem <origin da auditoria>), mais TestAUR567PRSecurityPassFindingFailsGate.
  • AC-002: TestAUR567GateLineAndReportShowTheSameMessage.
  • AC-003: tutorial e demo: bash demo/tutoriais/gate/run.sh --check e scripts/docs/build.sh; TestAUR567FormalReviewFollowsDeclaredGate, TestAUR567GateAlignedReviewEvent e a regressao em aur568_test.go (sem gate, a review nao e APPROVE).
  • AC-001-MUT-001: voltar a linha do SAST a origem policy deixa AC-001 vermelho.
  • tests/acceptance/AUR-567.sh: all, AC-001..AC-003, AC-001-MUT-001; seletor desconhecido sai 64.

Fora do escopo / declarado

  • Decisao: a citacao (rule <id>: <titulo>) do relatorio e contrato fixado por varios cards done (reviewer.go, tests/unit, tests/e2e, tutoriais); nao muda. gate.FindingLine a escreve como (rule <id> - <titulo>) na linha do gate, entao a linha e o relatorio diferem so nesse separador, por causa da redacao, e a linha mostra Hardcoded Secrets (teste TestFindingLineSpellsTheRuleCitationWithoutAColon). O filtro nao foi tocado.
  • docs/gate-corporativo.md: exemplo com origem policy passou a forma nova.
  • A contagem do gate e o formato da auditoria nao mudam.

Reancoragem da mutacao do AUR-538 (card v4)

AUR-538.sh AC-001-MUT-001 saia com infrastructure/mutation-anchor-missing: a ancora (a linha de retencao com tres tabs em internal/gate/outcome.go) mudou de indentacao quando a retencao foi extraida para withholdApproval. A mutacao agora ancora na linha atual (result.Metadata[prompt.PolicyGateWithheldKey] = "true", um tab, exatamente uma ocorrencia) e a troca por _ = prompt.PolicyGateWithheldKey: mesma semantica (a revisao deixa de ser marcada como retida) e compila. Vermelho esperado: TestAUR538BaseCleanFixtureVerdictWithheldUnderBlock. Provas: AUR-538.sh AC-001-MUT-001 (mutation produced RED) e AUR-538.sh all.