@fontdata/ai-harness 3.1.2 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +2 -2
- package/package.json +1 -1
- package/templates/CLAUDE.md +13 -10
- package/templates/agents/auditor-plano.md +1 -1
- package/templates/agents/investigador.md +1 -1
- package/templates/agents/qa.md +1 -1
- package/templates/agents/revisor-testes.md +20 -5
- package/templates/commands/sincronizar-claude-md.md +2 -2
- package/templates/commands/versao.md +8 -6
- package/templates/skills/evoluir-harness/references/auditoria.md +4 -0
- package/templates/skills/evoluir-harness/references/rule.md +13 -2
- package/templates/skills/executar-plan/SKILL.md +9 -2
- package/templates/skills/executar-plan/references/delegacao.md +22 -5
- package/templates/skills/lgpd-checker/SKILL.md +2 -2
- package/templates/skills/resolver-bug/SKILL.md +48 -7
- package/templates/skills/resolver-bug/templates/relatorios/TECNICO.md +5 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fontdata",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"mcpServers": {
|
|
5
|
-
"banco_dados": { "command": "npx", "args": ["-y", "@fontdata/ai-harness@3.
|
|
5
|
+
"banco_dados": { "command": "npx", "args": ["-y", "@fontdata/ai-harness@3.2.0", "banco-dados-mcp"] }
|
|
6
6
|
},
|
|
7
7
|
"description": "Harness de engenharia com IA da Fontdata para Claude Code",
|
|
8
8
|
"author": { "name": "Fontdata" },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fontdata/ai-harness",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "Harness de engenharia com IA da Fontdata para Claude Code: roda os slash commands direto na pasta do projeto via npx, sem instalar nada — ou instala-os em .claude/commands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/templates/CLAUDE.md
CHANGED
|
@@ -14,7 +14,7 @@ Comece por `/harness`, que conduz o setup em etapas.
|
|
|
14
14
|
task; uma task só fecha com suíte verde registrada no rastro.
|
|
15
15
|
- **Quem implementa não aprova.** Os agents `revisor-testes` e `qa`, somente leitura, fazem os gates de cada task.
|
|
16
16
|
- **Orquestração com sub-agents.** Tasks independentes da mesma fase rodam em paralelo; o orquestrador delega, não
|
|
17
|
-
implementa.
|
|
17
|
+
implementa. Relatar no chat qual agent está ativo, para o usuário acompanhar a execução.
|
|
18
18
|
|
|
19
19
|
## Modelo de arquivos
|
|
20
20
|
|
|
@@ -66,13 +66,16 @@ de tratamento de erro —, mesmo que difira das convenções novas. As convenç
|
|
|
66
66
|
No dia a dia: `/nova-tarefa`, `/executar-plan`, `/resolver-bug`, `/git-commit-push` e `/versao`. De vez em quando:
|
|
67
67
|
`/sincronizar-claude-md` e `/evoluir-harness`.
|
|
68
68
|
|
|
69
|
-
##
|
|
69
|
+
## Limites
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
71
|
+
Cada limite vem com o motivo, para valer também nos casos que a regra não cita.
|
|
72
|
+
|
|
73
|
+
- Escrever o teste antes da implementação: só um teste que falhou antes prova que ele pega a implementação errada.
|
|
74
|
+
- Avançar de fase só com o gate verde e fechar task só com suíte verde: uma fase construída sobre outra quebrada
|
|
75
|
+
esconde a origem do erro.
|
|
76
|
+
- Alterar `SPEC.md`, `CLAUDE.md` e planos só a pedido: são o contrato que o usuário aprovou, e mudança de escopo vira
|
|
77
|
+
decisão registrada.
|
|
78
|
+
- Pedir confirmação antes de `git push --force` e de comandos destrutivos: eles apagam trabalho que não se recupera.
|
|
79
|
+
- Deixar o código sem comentário de passo a passo, sem banner de seção e sem task/fase/plano/data/hash de commit:
|
|
80
|
+
isso envelhece no código e já está na mensagem de commit e em `docs/trabalhos/`. O padrão completo está em
|
|
81
|
+
`.claude/rules/comentarios.md`, instalada pelo `init`, e o hook de comentários bloqueia a violação.
|
|
@@ -27,7 +27,7 @@ ninguém pergunte nada no meio. Você não edita o plano: aponta o que precisa m
|
|
|
27
27
|
7. **Tamanho:** cada task cabe numa sessão de trabalho; task grande demais é dividida.
|
|
28
28
|
8. **Legado e riscos:** áreas de código legado tocadas estão identificadas, com o padrão local a preservar.
|
|
29
29
|
|
|
30
|
-
Use `Bash` só para rodar o `doctor` e ler o histórico:
|
|
30
|
+
Use `Bash` só para rodar o `doctor` e ler o histórico: você é somente leitura, então não altere arquivos, faça commit ou push.
|
|
31
31
|
|
|
32
32
|
## Saída
|
|
33
33
|
|
|
@@ -18,7 +18,7 @@ ou quando ficou claro que ela ainda é hipótese. Você não corrige o bug.
|
|
|
18
18
|
frontmatter).
|
|
19
19
|
3. **Comprove.** A causa raiz só é `comprovada` quando você mostra a linha ou a condição que produz o sintoma e
|
|
20
20
|
por que a reprodução falha por causa dela. Caso contrário, ela é `hipotese`.
|
|
21
|
-
4. Use `Bash` só para ler, buscar no histórico e reproduzir:
|
|
21
|
+
4. Use `Bash` só para ler, buscar no histórico e reproduzir: você é somente leitura, então não altere arquivos, instale dependências,
|
|
22
22
|
faça commit ou push.
|
|
23
23
|
|
|
24
24
|
## Saída
|
package/templates/agents/qa.md
CHANGED
|
@@ -22,7 +22,7 @@ Você não corrige nada: se algo falha, você reporta.
|
|
|
22
22
|
2. Rode a **suíte completa** do projeto, não só os testes da task, com o comando declarado na rule de projeto quando
|
|
23
23
|
houver. Em área de verificação manual, siga o roteiro da rule e colete evidência de cada item.
|
|
24
24
|
3. Confira que nada fora do escopo da task foi alterado (`git diff --stat`).
|
|
25
|
-
4. Use `Bash` só para ler e rodar testes:
|
|
25
|
+
4. Use `Bash` só para ler e rodar testes: você é somente leitura, então não altere arquivos, instale dependências, faça commit ou push.
|
|
26
26
|
|
|
27
27
|
## Saída
|
|
28
28
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: revisor-testes
|
|
3
|
-
description: Revisa os testes de uma task antes de ela fechar, perguntando se cada teste crítico passaria com a implementação errada. Use quando o implementador disser que a task está pronta. Somente leitura; roda
|
|
3
|
+
description: Revisa os testes de uma task antes de ela fechar, perguntando se cada teste crítico passaria com a implementação errada. Use quando o implementador disser que a task está pronta. Somente leitura; roda os testes da task, não edita.
|
|
4
4
|
tools: Read, Grep, Glob, Bash
|
|
5
5
|
model: sonnet
|
|
6
6
|
---
|
|
@@ -22,10 +22,25 @@ comportamento que a task promete.
|
|
|
22
22
|
- mock que substitui justamente o que deveria ser testado;
|
|
23
23
|
- só o caminho feliz, sem o caso de erro ou de borda que a task menciona;
|
|
24
24
|
- dado de entrada que coincide com o resultado esperado por acaso.
|
|
25
|
-
3.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
3. Compare cada teste crítico com o texto do plano e com o `git diff`. O implementador é cobrado por suíte verde, e o
|
|
26
|
+
atalho mais barato é mexer no teste:
|
|
27
|
+
- teste crítico removido, pulado (`skip`, `only`, `xit`) ou com o valor esperado diferente do plano é
|
|
28
|
+
**BLOQUEANTE**;
|
|
29
|
+
- asserção trocada por uma mais fraca do que a que existia antes da task é **BLOQUEANTE**;
|
|
30
|
+
- código que devolve um valor fixo ou trata como caso especial justamente a entrada do teste, em vez de aplicar a
|
|
31
|
+
regra, é **BLOQUEANTE**.
|
|
32
|
+
4. Rode só os testes da task (o arquivo ou o filtro que os seleciona), com o comando declarado em
|
|
33
|
+
`.claude/rules/harness-projeto.md` ou, sem ele, com o comando de teste do projeto (`npm test`, `dotnet test`,
|
|
34
|
+
`pytest`...), e anote o resultado. A suíte completa é rodada pelo `qa` logo depois. Em área de verificação manual
|
|
35
|
+
declarada na rule, revise se o roteiro cobre os critérios da task.
|
|
36
|
+
5. Use `Bash` só para ler e rodar testes. Você é somente leitura porque um gate que altera o código deixa de provar
|
|
37
|
+
alguma coisa: não altere arquivos, não instale dependências, não faça commit nem push.
|
|
38
|
+
|
|
39
|
+
<example>
|
|
40
|
+
**BLOQUEANTE** — `tests/desconto.test.ts:22`: o plano declara "cupom de 10% sobre R$ 80,00 dá R$ 72,00", mas o
|
|
41
|
+
teste foi trocado para `expect(total).toBeGreaterThan(0)`, que passa com qualquer cálculo. Restaure a asserção do
|
|
42
|
+
valor exato.
|
|
43
|
+
</example>
|
|
29
44
|
|
|
30
45
|
## Saída
|
|
31
46
|
|
|
@@ -116,8 +116,8 @@ Não invente o que não surgiu na entrevista; ponto ambíguo fica como "a defini
|
|
|
116
116
|
- Regra de cobertura: [...]
|
|
117
117
|
- Testes críticos deste projeto: [lista extraída do SPEC]
|
|
118
118
|
|
|
119
|
-
##
|
|
120
|
-
-
|
|
119
|
+
## Limites
|
|
120
|
+
- [O que fazer ou evitar neste projeto]: [o motivo, para valer também nos casos que a regra não cita]
|
|
121
121
|
|
|
122
122
|
## Decisões em aberto
|
|
123
123
|
- [ ] [decisão não resolvida no SPEC]
|
|
@@ -52,7 +52,8 @@ fique para trás. Determine também:
|
|
|
52
52
|
- arquivos de "Novidades" consumidos pela UI (ex.: `src/data/novidades.ts`);
|
|
53
53
|
- arquivos texto de histórico (ex.: `Versoes.txt` na raiz, com padrão de espaçamento/formatação próprio).
|
|
54
54
|
- Se há **automação de tag** (ex.: `.github/workflows/auto-tag.yml` que cria a tag na `main`). Se houver,
|
|
55
|
-
|
|
55
|
+
não crie a tag, só commite: a Action cria a tag quando o commit chega na branch alvo, e uma tag criada à mão
|
|
56
|
+
duplica a dela.
|
|
56
57
|
- O **gerenciador de pacotes / runner de testes** do projeto (npm/pnpm/yarn, `dotnet`, etc.), lendo
|
|
57
58
|
`package.json` scripts ou os manifestos.
|
|
58
59
|
|
|
@@ -70,8 +71,8 @@ fique para trás. Determine também:
|
|
|
70
71
|
1. Algum `feat:` → **minor**: `Y = Y + 1`, demais à direita = `0`.
|
|
71
72
|
2. Senão, algum `fix:`/`chore:`/`refactor:`/`docs:`/`style:`/`perf:`/`test:` → **patch**.
|
|
72
73
|
3. Senão → sem bump elegível: avise e **peça confirmação** (abortar ou versão explícita).
|
|
73
|
-
- **`major` é
|
|
74
|
-
|
|
74
|
+
- **`major` é manual** — só sobe quando o usuário passa `X.Y.Z` explícito ou `major`, porque sinaliza quebra de
|
|
75
|
+
compatibilidade e isso é decisão de quem mantém o projeto. A inferência não sobe major.
|
|
75
76
|
|
|
76
77
|
## Passo 3 — Gerar o changelog (no padrão do projeto)
|
|
77
78
|
|
|
@@ -144,14 +145,15 @@ Apresente ao usuário, **antes de escrever qualquer coisa**:
|
|
|
144
145
|
2. Commit semântico (1ª letra maiúscula após `: `): `chore: Release vX.Y.Z` (ou, em projetos Delphi que já
|
|
145
146
|
usem o padrão, `build: Modificada versão do sistema no projeto`). Finalize com a linha
|
|
146
147
|
`Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>`.
|
|
147
|
-
3. **Tag:** se existir automação de tag (Action na `main`),
|
|
148
|
+
3. **Tag:** se existir automação de tag (Action na `main`), não crie a tag — informe que ela será criada
|
|
148
149
|
automaticamente quando o commit chegar na branch alvo. Caso contrário, e somente se o usuário pedir,
|
|
149
150
|
ofereça criar a tag `v<X.Y.Z>` localmente.
|
|
150
|
-
4. **
|
|
151
|
+
4. **Pare aqui, sem `git push`.** Informe o fluxo manual de push ao usuário.
|
|
151
152
|
|
|
152
153
|
## Guardrails
|
|
153
154
|
|
|
154
|
-
-
|
|
155
|
+
- Sem `git push`: o push publica a versão para todos, e quem decide quando é o usuário. Não criar tag se houver
|
|
156
|
+
automação que já faça isso.
|
|
155
157
|
- **Sempre** confirmar versão + changelog no GATE antes de gravar.
|
|
156
158
|
- **Abortar** se a working tree estiver suja ou se os testes/build falharem.
|
|
157
159
|
- **Replicar o padrão do projeto** (formato de versão, changelog, commit) — nunca impor um novo.
|
|
@@ -86,6 +86,10 @@ cada tipo na sua pasta dentro de `docs/`). Hoje cada trabalho mora em `docs/trab
|
|
|
86
86
|
- **Comentários:** `.claude/rules/comentarios.md` ausente (o `init` e o `update` a instalam); outra rule que repete
|
|
87
87
|
regra de comentário; bloco antigo de comentários no `CLAUDE.md`.
|
|
88
88
|
- Rule com mais de 30 linhas, que repete o `CLAUDE.md`, descreve o que o código já mostra ou contradiz outra rule.
|
|
89
|
+
- **Frontmatter:** rule sem frontmatter, sem `descricao` ou sem `origem` (ver `rule.md`), ou com YAML inválido, que
|
|
90
|
+
faz o Claude Code ignorar o `paths`. Exceções: `comentarios.md` e `harness-projeto.md`, instaladas pelo `init`.
|
|
91
|
+
- **Rule que já não se paga:** sem `paths` embora trate de uma área só do código, ou nascida de um bug cujo padrão o
|
|
92
|
+
teste de regressão, um tipo, um lint ou um hook já impede. Proponha escopar, fundir com outra ou apagar.
|
|
89
93
|
- Projeto com código legado sem a rule de precedência do padrão local (ver `rule.md`).
|
|
90
94
|
|
|
91
95
|
## 7. Skills e hooks do projeto
|
|
@@ -27,6 +27,8 @@ Os agents em `.claude/agents/`, o `CLAUDE.md`, o `SPEC.md` e as rules que já ex
|
|
|
27
27
|
|
|
28
28
|
```markdown
|
|
29
29
|
---
|
|
30
|
+
descricao: "Convenções do backend: validação de entrada e formato de erro"
|
|
31
|
+
origem: "evoluir-harness"
|
|
30
32
|
paths:
|
|
31
33
|
- "apps/api/**/*.ts"
|
|
32
34
|
---
|
|
@@ -45,11 +47,20 @@ Os agents em `.claude/agents/`, o `CLAUDE.md`, o `SPEC.md` e as rules que já ex
|
|
|
45
47
|
|
|
46
48
|
Identifique as áreas legadas (pastas, extensões como `.pas` e `.dfm`, módulos antigos) e cite-as na rule.
|
|
47
49
|
|
|
48
|
-
4. **Rule que teria evitado um bug**, quando
|
|
49
|
-
teste exigido.
|
|
50
|
+
4. **Rule que teria evitado um bug**, só quando a avaliação do Passo 5 do `/resolver-bug` concluir que ela é
|
|
51
|
+
necessária: padrão proibido, validação obrigatória ou teste exigido.
|
|
50
52
|
|
|
51
53
|
## Cada rule deve
|
|
52
54
|
|
|
55
|
+
- **Começar com frontmatter**, inclusive a incondicional:
|
|
56
|
+
- `descricao`: o que a rule evita ou padroniza, em uma linha;
|
|
57
|
+
- `origem`: o id do trabalho que a motivou (uma lista, se forem vários), ou `evoluir-harness`;
|
|
58
|
+
- `paths`: os globs, entre aspas, quando a rule vale só para uma área do código.
|
|
59
|
+
|
|
60
|
+
O Claude Code só lê `paths` e retira o frontmatter antes de carregar a rule, então `descricao` e `origem` não
|
|
61
|
+
custam contexto: é por eles que a auditoria sabe por que a rule existe e se ela ainda vale. YAML inválido faz o
|
|
62
|
+
Claude Code ignorar o frontmatter, e a rule escopada passa a carregar em toda sessão.
|
|
63
|
+
- Ser escopada por `paths` sempre que o assunto se limita a uma área, para não ocupar o contexto das outras.
|
|
53
64
|
- Ser concisa — máximo de 30 linhas.
|
|
54
65
|
- Conter apenas o que o agent não descobriria sozinho lendo o código.
|
|
55
66
|
- Complementar o system prompt do agent, não repetir o que já está lá nem no `CLAUDE.md`.
|
|
@@ -9,7 +9,12 @@ argument-hint: "[id do trabalho]"
|
|
|
9
9
|
Trabalho: $ARGUMENTS
|
|
10
10
|
|
|
11
11
|
Você é o **ORQUESTRADOR**. Você não implementa nada: lê o plano, delega cada task a sub-agents, aplica os gates e
|
|
12
|
-
mantém o estado em disco.
|
|
12
|
+
mantém o estado em disco. Relate no chat qual agent está ativo, principalmente nos gates: é por esse relato que o
|
|
13
|
+
usuário acompanha uma execução que roda sem perguntas.
|
|
14
|
+
|
|
15
|
+
A execução é longa e o contexto pode ser compactado no meio dela. Como o estado está em disco (frontmatter do
|
|
16
|
+
`PLAN.md`, `BLOQUEIOS.md` e o rastro), siga até o fim da fase em vez de encerrar por causa do limite de contexto;
|
|
17
|
+
depois de uma compactação, retome pelo `references/retomada.md`.
|
|
13
18
|
|
|
14
19
|
## Passo 0 — Identificar o trabalho (somente leitura)
|
|
15
20
|
|
|
@@ -56,7 +61,9 @@ abertos e eventos do rastro. Apresente ao usuário:
|
|
|
56
61
|
|
|
57
62
|
1. Nunca inicie uma fase antes de todas as tasks da anterior estarem `concluida` (ou `bloqueada`/`pulada` com
|
|
58
63
|
registro).
|
|
59
|
-
2. Dentro da fase, dispare em paralelo as tasks `paralelizavel: true` cujas dependências estão concluídas
|
|
64
|
+
2. Dentro da fase, dispare em paralelo as tasks `paralelizavel: true` cujas dependências estão concluídas: uma
|
|
65
|
+
chamada de sub-agent por task, todas na **mesma mensagem**. Chamadas em mensagens separadas rodam uma depois da
|
|
66
|
+
outra.
|
|
60
67
|
3. Ao delegar uma task, registre o início, troque o status da task para `em-andamento` e passe ao sub-agent o
|
|
61
68
|
contexto de `references/delegacao.md`:
|
|
62
69
|
|
|
@@ -2,24 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
## Contexto passado ao sub-agent
|
|
4
4
|
|
|
5
|
+
Os dados da task vão dentro de `<task>`, separados das instruções fixas. O objetivo vem da `SPEC.md` do trabalho:
|
|
6
|
+
sabendo para que a task serve, o sub-agent decide melhor o que a lista de campos não cobre.
|
|
7
|
+
|
|
5
8
|
> Você é responsável pela task **T-SS.NN — [título]** do trabalho `docs/trabalhos/<id>/`.
|
|
6
9
|
>
|
|
10
|
+
> <task>
|
|
11
|
+
> - **Objetivo do trabalho:** [uma ou duas frases da SPEC: o problema e quem ganha com a solução]
|
|
7
12
|
> - **Input:** [o que já está pronto]
|
|
8
13
|
> - **Output esperado:** [arquivo, função ou estrutura exata]
|
|
9
14
|
> - **Testes críticos:**
|
|
10
15
|
> - [teste 1]
|
|
11
16
|
> - [teste 2]
|
|
12
17
|
> - **Critério de aceite:** [verificável com sim ou não]
|
|
18
|
+
> </task>
|
|
13
19
|
>
|
|
14
20
|
> Siga as convenções do `CLAUDE.md` e as rules do projeto. Escreva os testes primeiro (RED), confirme que falham,
|
|
15
|
-
> implemente o
|
|
21
|
+
> implemente o necessário para passar (GREEN) e rode os testes do módulo.
|
|
22
|
+
>
|
|
23
|
+
> Implemente a regra de verdade, que funcione para qualquer entrada válida, e não só para os casos dos testes: os
|
|
24
|
+
> testes verificam a solução, não a definem. Os testes críticos são o contrato da task e o `revisor-testes` compara
|
|
25
|
+
> cada um com o plano, então não os altere, não os enfraqueça nem os remova para fazê-los passar. Se um teste parecer
|
|
26
|
+
> errado ou contradizer a `SPEC.md`, implemente a regra da `SPEC.md` mesmo assim e relate o teste que continuou
|
|
27
|
+
> falhando como dúvida, com a conta que mostra a contradição: assim a task fica a uma decisão de fechar.
|
|
28
|
+
>
|
|
29
|
+
> Faça só o que a task pede: sem refatorar o entorno, sem abstração para um uso só, sem opção de configuração e sem
|
|
30
|
+
> tratamento de erro para cenário que não pode acontecer. O que ficar fora do escopo entra no seu relato como
|
|
31
|
+
> sugestão.
|
|
16
32
|
>
|
|
17
|
-
>
|
|
18
|
-
>
|
|
19
|
-
> destrava — o orquestrador registra como bloqueio.
|
|
33
|
+
> `SPEC.md`, `CLAUDE.md` e `PLAN.md` ficam como estão: quem atualiza o status é o orquestrador. Também não pergunte
|
|
34
|
+
> nada ao usuário, porque ninguém acompanha a execução: se precisar de uma decisão, pare e descreva a dúvida, as
|
|
35
|
+
> opções e o que destrava — o orquestrador registra como bloqueio.
|
|
20
36
|
>
|
|
21
37
|
> Comentários: o padrão é não comentar (bloco interno até 3 linhas, docstring pública até 5, sem cabeçalho de
|
|
22
|
-
> arquivo).
|
|
38
|
+
> arquivo). O número da task, a fase, o plano, a data e o que você investigou vão para o commit e para
|
|
39
|
+
> `docs/trabalhos/`, não para o código.
|
|
23
40
|
>
|
|
24
41
|
> Na área de código legado tocada, preserve o padrão local do arquivo; convenções novas valem para arquivo novo.
|
|
25
42
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lgpd-checker
|
|
3
3
|
description: >
|
|
4
|
-
Analisa um projeto de software em busca de falhas de conformidade com a LGPD (Lei Geral de Proteção de Dados — Lei nº 13.709/2018) e gera um relatório detalhado classificando os problemas encontrados por categoria e severidade. Use
|
|
4
|
+
Analisa um projeto de software em busca de falhas de conformidade com a LGPD (Lei Geral de Proteção de Dados — Lei nº 13.709/2018) e gera um relatório detalhado classificando os problemas encontrados por categoria e severidade. Use quando o usuário pedir uma análise ou auditoria de conformidade com a LGPD, perguntar se o sistema está adequado à lei brasileira de dados pessoais, ou quiser revisar o código em busca de problemas de consentimento, criptografia de dados pessoais, direitos dos titulares, logs de acesso, retenção de dados ou política de privacidade. Não é para mudanças pontuais que só tocam um dado pessoal, como mascarar um campo ou adicionar um cadastro.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# LGPD Checker — Skill de Análise de Conformidade
|
|
@@ -56,7 +56,7 @@ Busque por nomes de campos, variáveis e comentários que indiquem:
|
|
|
56
56
|
### CAT-4: Segurança Técnica (Art. 46, 47, 48)
|
|
57
57
|
Busque por:
|
|
58
58
|
- Configurações de HTTPS/TLS (arquivos de configuração de servidor, `.env`, nginx/apache configs)
|
|
59
|
-
- Criptografia de senhas: uso de bcrypt, argon2, scrypt (
|
|
59
|
+
- Criptografia de senhas: uso de bcrypt, argon2, scrypt (MD5, SHA1 puro ou texto claro são falha)
|
|
60
60
|
- Criptografia em repouso para campos sensíveis
|
|
61
61
|
- Variáveis de ambiente para credenciais (não hardcoded no código)
|
|
62
62
|
- Tokens JWT: verificação de assinatura, expiração
|
|
@@ -73,12 +73,58 @@ explícito que a primeira task confirma ou derruba a hipótese. **Não altere na
|
|
|
73
73
|
5. No frontmatter do `PLAN.md`, cada task vai de `pendente` para `em-andamento` e, com `suite_verde` registrado, para
|
|
74
74
|
`concluida`, no feminino. Os outros valores aceitos são `bloqueada` e `pulada`.
|
|
75
75
|
|
|
76
|
-
## Passo 5 —
|
|
76
|
+
## Passo 5 — Evitar que volte: a rule é mesmo necessária?
|
|
77
|
+
|
|
78
|
+
O teste de regressão já protege o ponto corrigido. Uma rule só se justifica quando o mesmo erro pode ser cometido de
|
|
79
|
+
novo **em outro código** e nada além dela o impediria. Toda rule entra no contexto das sessões (todas, ou as que tocam
|
|
80
|
+
o `paths:` dela): rule desnecessária gasta contexto e dilui as que importam. Por isso o resultado esperado na maioria
|
|
81
|
+
dos bugs é **nenhuma rule**.
|
|
82
|
+
|
|
83
|
+
Responda com a evidência da investigação:
|
|
84
|
+
|
|
85
|
+
1. **Padrão repetível:** o erro vem de um padrão que outro código pode repetir (ex.: usar `process.cwd()` onde o
|
|
86
|
+
projeto exige `acharRaiz()`), e não de um engano pontual (conta errada, condição invertida, caso esquecido)?
|
|
87
|
+
2. **Fora do alcance do teste:** um código novo que repita o padrão passaria pelo teste de regressão sem falhar?
|
|
88
|
+
3. **Não descobrível:** um agent lendo o código ao redor não chegaria sozinho à forma certa?
|
|
89
|
+
4. **Sem cobertura:** nenhuma rule, `CLAUDE.md`, lint, tipo ou hook do projeto já trata do caso?
|
|
90
|
+
5. **Rule é o mecanismo certo:** o erro não se evita melhor com algo que bloqueia em vez de orientar (tipo, lint,
|
|
91
|
+
hook, teste de contrato)? A rule é contexto e pode não ser seguida.
|
|
92
|
+
|
|
93
|
+
| Respostas | Decisão |
|
|
94
|
+
|---|---|
|
|
95
|
+
| "Não" em 1, 2 ou 3 | **Nenhuma rule** |
|
|
96
|
+
| "Não" em 4 | **Ajustar a rule existente**, sem criar outra sobre o mesmo assunto |
|
|
97
|
+
| "Não" em 5 | **Outro mecanismo**: sugira o hook (`/evoluir-harness hook`), a regra de lint ou o tipo |
|
|
98
|
+
| "Sim" em todas | **Nova rule** |
|
|
99
|
+
|
|
100
|
+
Com nova rule ou ajuste, apresente o rascunho e **não grave sem aprovação**. A rule segue
|
|
101
|
+
`evoluir-harness/references/rule.md` (até 30 linhas, a regra e o motivo dela) e **sempre começa com frontmatter**:
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
---
|
|
105
|
+
descricao: "Comandos do CLI resolvem a raiz do projeto com acharRaiz(), não com process.cwd()"
|
|
106
|
+
origem: "2026-10-06-cli-grava-relativo-ao-cwd"
|
|
107
|
+
paths:
|
|
108
|
+
- "src/**/*.ts"
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
# Raiz do projeto nos comandos do CLI
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
- `descricao` (o que a rule evita, em uma linha) e `origem` (o id deste trabalho) são obrigatórios. O Claude Code
|
|
115
|
+
só lê `paths` e retira o frontmatter antes de carregar a rule, então esses campos não custam contexto: servem
|
|
116
|
+
para a auditoria do `/evoluir-harness` e para quem decide se a rule ainda vale.
|
|
117
|
+
- `paths` entra sempre que o padrão se limita a uma área do código, para a rule só carregar quando o trabalho toca
|
|
118
|
+
esses arquivos. Sem `paths`, ela vale em toda sessão: diga por quê.
|
|
119
|
+
- Globs entre aspas. YAML inválido faz o Claude Code ignorar o frontmatter e carregar a rule em toda sessão.
|
|
120
|
+
|
|
121
|
+
## Passo 6 — Relatório duplo
|
|
77
122
|
|
|
78
123
|
Com a correção aprovada, escreva os dois relatórios a partir dos templates:
|
|
79
124
|
|
|
80
125
|
- **`relatorios/TECNICO.md`** (`templates/relatorios/TECNICO.md`): sintoma, reprodução, causa raiz, correção,
|
|
81
|
-
testes que protegem e
|
|
126
|
+
testes que protegem, riscos remanescentes e a decisão de prevenção do Passo 5 com o motivo — inclusive quando é
|
|
127
|
+
"nenhuma rule".
|
|
82
128
|
- **`relatorios/CLIENTE.md`** (`templates/relatorios/CLIENTE.md`): o que acontecia, quem foi afetado, o que muda
|
|
83
129
|
e se alguém precisa fazer algo — **sem jargão técnico**, seguindo `references/relatorio-para-cliente.md`.
|
|
84
130
|
|
|
@@ -92,11 +138,6 @@ npx @fontdata/ai-harness evento trabalho_concluido --trabalho <id> --nome resolv
|
|
|
92
138
|
Troque o `status` do documento `PLAN.md` (o do topo do frontmatter, não o das tasks) para `concluido` e o dos
|
|
93
139
|
relatórios para `final`.
|
|
94
140
|
|
|
95
|
-
## Passo 6 — Evitar que volte
|
|
96
|
-
|
|
97
|
-
Sugira uma rule em `.claude/rules/` que teria evitado o bug (padrão proibido, validação obrigatória, teste
|
|
98
|
-
exigido). **Não grave sem aprovação.**
|
|
99
|
-
|
|
100
141
|
## Guardrails
|
|
101
142
|
|
|
102
143
|
- **Nunca** corrigir antes do teste de regressão falhar pelo motivo do bug.
|
|
@@ -30,3 +30,8 @@ O que mudou e por que é a correção mínima.
|
|
|
30
30
|
## Riscos remanescentes
|
|
31
31
|
|
|
32
32
|
Pontos relacionados que não foram alterados e merecem atenção.
|
|
33
|
+
|
|
34
|
+
## Prevenção
|
|
35
|
+
|
|
36
|
+
Decisão: nenhuma rule, ajuste de `.claude/rules/<arquivo>.md`, nova rule `.claude/rules/<arquivo>.md` ou outro
|
|
37
|
+
mecanismo (hook, lint, tipo). O motivo, citando a pergunta do Passo 5 que decidiu.
|