Caso de uso — Auditoria de PR
Imagina um PR aberto a meio da tarde de sexta. Toca autenticação, logging e um ficheiro de configuração — exactamente o tipo de mistura que o reviewer humano tem dificuldade em rever em profundidade quando há outras seis revisões na fila. O objectivo deste caso de uso é darem ao agente uma rotina disciplinada para essa revisão: que examine o diff contra os controlos activos do projecto, devolva findings com CTRL-* reais do manual, e nunca declare conformidade só por o código existir.
Pré-requisitos
- MCP instalado (ver Instalação)
- Skill canónica em
.claude/skills/sbd-toe.md(ver Skills) - Risk level do projecto conhecido — assumir
L2no exemplo
Fluxo
1. Identificar o escopo do PR
git diff --name-only origin/main...HEAD
→ ex.: src/auth/login.ts, src/middleware/audit.ts, config/prod.yaml
2. Mapear ficheiros → capítulos
map_sbd_toe_review_scope({"changed_files": [
"src/auth/login.ts",
"src/middleware/audit.ts",
"config/prod.yaml"
]})
Output esperado (forma):
{
"bundles": [
{"chapter": "06-desenvolvimento-seguro", "reason": "..."},
{"chapter": "12-monitorizacao-operacoes", "reason": "..."},
{"chapter": "08-iac-infraestrutura", "reason": "..."}
]
}
3. Listar controlos activos por concern
consult_security_requirements({"risk_level": "L2", "concerns": ["auth", "logging", "config"]})
Devolve controls[] filtrados — usar apenas estes IDs no relatório.
4. Cruzar diff ↔ controlos
Para cada hunk relevante, identificar:
CTRL-*cobertos — explicitamente endereçados pelo códigoCTRL-*em risco — não-cobertos, mas no escopoCTRL-*neutros — não aplicáveis a este hunk
5. Gerar relatório
Estrutura obrigatória:
## Findings (manual-grounded)
### CTRL-06-X — <título>
- **Capítulo:** 06-desenvolvimento-seguro
- **Ficheiro:hunk:** src/auth/login.ts:42-58
- **Status:** ⚠️ partial / ❌ missing / ✅ covered
- **Observação:** <objectiva, refere o controlo>
- **Evidência esperada:** <test path, log shape, scan report — código sozinho NÃO é evidência>
### ...
Disciplina de output
- Citar
CTRL-*exactos, nunca aproximações textuais. - Marcar cada finding como
manual-groundedouinferred— nuncaverifiedsem leitura humana. - Para controlos ausentes do
controls[]devolvido, escrever: "Sem cobertura normativa neste escopo — flag para human review." - Não declarar conformidade regulatória com base em código.
Skill / subagent — Claude Code
.claude/agents/sbd-toe-pr-auditor.md:
---
name: sbd-toe-pr-auditor
description: Audita um Pull Request contra os controlos activos do SbD-ToE para o risk_level do projecto.
tools: Bash, Read, Grep, Glob, mcp__sbd-toe__*
---
# Workflow
1. Identifica risk_level (procura em CLAUDE.md, AGENTS.md ou pergunta).
2. Lista ficheiros alterados: `git diff --name-only origin/main...HEAD`.
3. Chama map_sbd_toe_review_scope com a lista.
4. Para cada chapter devolvido, infere os concerns aplicáveis (ex.: cap. 06 → desenvolvimento; auth/logging se o código toca login/audit).
5. Chama consult_security_requirements(risk_level, concerns).
6. Para cada CTRL-* devolvido, examina os hunks relevantes (Read + Grep).
7. Produz relatório em Markdown com a estrutura da página de caso de uso.
8. Não inventa IDs. Não declara conformidade. Não trata o próprio código como evidência.
Anti-patterns
- ❌ Inventar
CTRL-00-99porque o controlo "encaixa". - ❌ "PR compliant with NIS2" baseado só em código.
- ❌ Misturar
CTRL-*de capítulos não devolvidos pormap_sbd_toe_review_scope. - ❌ Saltar
consult_security_requirementse ir directo asearch_sbd_toe_manual(perde-se o filtro estrutural).
Relacionado
- Codegen grounded — o reverso: gerar código já cumprindo controlos.
map_sbd_toe_review_scopena referência.