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 oOrigin()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 esast, secao policy|repo(a secao de configuracao que decidiu, nunca no lugar da origem). O achado do Dependency-Track passa a trazerorigin: dtrackna 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 emsecrete 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
gatedeclarado, falha ao gravar auditoria/SARIF retem a aprovacao (ApplyArtifactFailureschamawithholdApprovaltambem sem gate): a review formal nunca eAPPROVEantes do exit 1. - Decisao: com
gatedeclarado a review formal segue o gate (gateAlignedReviewEvent):REQUEST_CHANGESso se o gate reprova; achado abaixo do limiar ou aprovacao retida eCOMMENT; execucao limpa segueAPPROVE. Semgate, o comportamento historico (aviso ja pede mudancas). Antes, um aviso abaixo do limiar davaREQUEST_CHANGEScomaurumcode/policy-gateverde. Registrado em docs/configuration.md e no tutorial. - Teste
--prdedicado do contribuintesecurity-pass(nota do AUR-569): achado de seguranca no--pre exit 3, statusfailure, origemsecurityno parecer e na auditoria. - Tutorial
gateregravado (execucao real, imagem do produto);docs/configuration.mdalinhado. - Adendo v2: o bloco de saida observada de
docs/site/index.htmlque 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.shnao 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 trazorigem <origin da auditoria>), maisTestAUR567PRSecurityPassFindingFailsGate. - AC-002:
TestAUR567GateLineAndReportShowTheSameMessage. - AC-003: tutorial e demo:
bash demo/tutoriais/gate/run.sh --checkescripts/docs/build.sh;TestAUR567FormalReviewFollowsDeclaredGate,TestAUR567GateAlignedReviewEvente a regressao emaur568_test.go(sem gate, a review nao eAPPROVE). - AC-001-MUT-001: voltar a linha do SAST a
origem policydeixa 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 cardsdone(reviewer.go, tests/unit, tests/e2e, tutoriais); nao muda.gate.FindingLinea 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 mostraHardcoded Secrets(testeTestFindingLineSpellsTheRuleCitationWithoutAColon). O filtro nao foi tocado. docs/gate-corporativo.md: exemplo comorigem policypassou 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.