AUR-598 — Achado sobre o marcador de redação é descartado; helper parseável
Medido antes
Na PR #96 (lote dev -> main, 2026-10-07), reaberta depois do AUR-597:
- o modelo ignorou a instrução do prompt sobre
[REDACTED]e de novo reportouAPIKey: [REDACTED]eminternal/llm/provider/profiles/resolve.go:81como segredo (PUB-002,error); o valor real é o identificadorkey, mascarado pelo próprio redator (reKVBare); - o Semgrep 1.172.0 falhou ao interpretar
(exec 3<>"/dev/tcp/...")emdemo/tutoriais/_lib/pr.sh:25(`>` was unexpected), linha adicionada no lote; por desenho o SAST ficou inconclusivo e o gate reprovou.
O que mudou
internal/review/redacted_findings.go:discardRedactedModelFindingsremove achados de origem modelo (Originvazio) cuja mensagem, evidência, impacto ou correção contémredaction.Marker. Roda no mesmo ponto dos filtros de escopo (scope.go), soma emissues_rejected_by_scope, tem contador próprio (issues_rejected_by_redaction_marker, também no merge de lotes) e motivo no aviso de descarte.demo/tutoriais/_lib/pr.sh: a espera pelo servidor falso usa(: > "/dev/tcp/..."), que conecta do mesmo jeito e o Semgrep interpreta.docs/configuration.md: parágrafo sobre o filtro.
O redator não mudou; nenhum achado de scanner passa pelo filtro.
Provas
| Cláusula | Prova |
|---|---|
| AC-001 | TestRedactionMarkerAC001ModelFindingDiscarded: dois achados do modelo citando o marcador saem, o terceiro fica; contador e aviso conferem. |
| AC-002 | TestRedactionMarkerAC002ScannerFindingKept: achados com Origin de scanner e o mesmo marcador continuam. |
| AC-003 | bash -n e ausência de <> no helper (estático, no selado); Semgrep 1.172.0 com p/security-audit e p/owasp-top-ten sobre o helper na imagem do produto: 0 erros. Os tutoriais que usam o helper (gate, excecoes, auditoria-sarif, reaproveitamento) seguem verdes. |
| MUT-001 | Remover a chamada do filtro: AC-001 vermelho (want only the timeout finding). |
| MUT-002 | Aplicar o filtro a achados de scanner: AC-002 vermelho (want only the model finding removed). |
tests/acceptance/AUR-598.sh all termina em AUR-598/all/pass.