Pular para conteúdo

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 reportou APIKey: [REDACTED] em internal/llm/provider/profiles/resolve.go:81 como segredo (PUB-002, error); o valor real é o identificador key, mascarado pelo próprio redator (reKVBare);
  • o Semgrep 1.172.0 falhou ao interpretar (exec 3<>"/dev/tcp/...") em demo/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: discardRedactedModelFindings remove achados de origem modelo (Origin vazio) cuja mensagem, evidência, impacto ou correção contém redaction.Marker. Roda no mesmo ponto dos filtros de escopo (scope.go), soma em issues_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.