@fontdata/ai-harness 2.0.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/marketplace.json +17 -0
- package/.claude-plugin/plugin.json +8 -0
- package/README.md +239 -0
- package/bin/cli.js +122 -0
- package/package.json +44 -0
- package/src/catalog.js +26 -0
- package/src/init.js +317 -0
- package/src/installer.js +92 -0
- package/src/run.js +99 -0
- package/templates/CLAUDE.md +49 -0
- package/templates/catalog.json +124 -0
- package/templates/commands/atualizar-deps.md +15 -0
- package/templates/commands/auditar-performance.md +27 -0
- package/templates/commands/auditar-seguranca.md +64 -0
- package/templates/commands/auditar-ui.md +38 -0
- package/templates/commands/codigo-morto.md +22 -0
- package/templates/commands/configurar-auto-tag.md +185 -0
- package/templates/commands/configurar-comentarios.md +543 -0
- package/templates/commands/configurar-orquestrador.md +13 -0
- package/templates/commands/corrigir-review.md +11 -0
- package/templates/commands/criar-agents.md +42 -0
- package/templates/commands/criar-code-reviewer.md +30 -0
- package/templates/commands/criar-hooks.md +32 -0
- package/templates/commands/criar-rag.md +25 -0
- package/templates/commands/criar-rules.md +31 -0
- package/templates/commands/criar-skill.md +22 -0
- package/templates/commands/design-system.md +27 -0
- package/templates/commands/diagrama.md +17 -0
- package/templates/commands/executar-plan.md +36 -0
- package/templates/commands/gerar-claude-md.md +66 -0
- package/templates/commands/gerar-env.md +16 -0
- package/templates/commands/gerar-ignore.md +37 -0
- package/templates/commands/gerar-spec.md +33 -0
- package/templates/commands/gerar-testes.md +17 -0
- package/templates/commands/git-commit-push.md +38 -0
- package/templates/commands/harness.md +34 -0
- package/templates/commands/nova-tarefa.md +60 -0
- package/templates/commands/onboarding.md +21 -0
- package/templates/commands/refatorar.md +17 -0
- package/templates/commands/resolver-bug.md +25 -0
- package/templates/commands/review-por-task.md +16 -0
- package/templates/commands/revisar-pr.md +18 -0
- package/templates/commands/scaffold.md +25 -0
- package/templates/commands/sincronizar-claude-md.md +15 -0
- package/templates/commands/validar-commands.md +24 -0
- package/templates/commands/validar-ideia.md +36 -0
- package/templates/commands/versao.md +159 -0
- package/templates/skills/lgpd-checker/ORIGEM.md +21 -0
- package/templates/skills/lgpd-checker/SKILL.md +152 -0
- package/templates/skills/lgpd-checker/references/checklist.md +155 -0
- package/templates/skills/lgpd-checker/references/lgpd-artigos.md +178 -0
- package/templates/skills/lgpd-checker/references/report-template.md +117 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"claudeMd": {
|
|
3
|
+
"file": "CLAUDE.md",
|
|
4
|
+
"target": "CLAUDE.md",
|
|
5
|
+
"title": "CLAUDE.md base",
|
|
6
|
+
"description": "Context file com a filosofia de orquestração, TDD e gates do harness."
|
|
7
|
+
},
|
|
8
|
+
"master": {
|
|
9
|
+
"id": "harness",
|
|
10
|
+
"file": "commands/harness.md",
|
|
11
|
+
"title": "/harness (comando-mestre)",
|
|
12
|
+
"description": "Conduz a sequência de setup em ordem: validar-ideia → gerar-spec → gerar-claude-md → nova-tarefa → scaffold → executar-plan.",
|
|
13
|
+
"requires": [
|
|
14
|
+
"validar-ideia",
|
|
15
|
+
"gerar-spec",
|
|
16
|
+
"gerar-claude-md",
|
|
17
|
+
"gerar-ignore",
|
|
18
|
+
"nova-tarefa",
|
|
19
|
+
"scaffold",
|
|
20
|
+
"configurar-comentarios",
|
|
21
|
+
"criar-skill",
|
|
22
|
+
"criar-agents",
|
|
23
|
+
"criar-code-reviewer",
|
|
24
|
+
"criar-rules",
|
|
25
|
+
"criar-hooks",
|
|
26
|
+
"configurar-orquestrador",
|
|
27
|
+
"executar-plan"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"skills": [
|
|
31
|
+
{ "id": "lgpd-checker", "dir": "skills/lgpd-checker", "title": "Skill lgpd-checker", "description": "Conformidade com a LGPD (Lei nº 13.709/2018) em 11 categorias, com checklist e template de relatório. Vendorizada de bittencourtthulio/lgpd-checker." }
|
|
32
|
+
],
|
|
33
|
+
"groups": [
|
|
34
|
+
{
|
|
35
|
+
"id": "setup",
|
|
36
|
+
"title": "Setup inicial",
|
|
37
|
+
"commands": [
|
|
38
|
+
{ "id": "validar-ideia", "file": "commands/validar-ideia.md", "title": "/validar-ideia", "description": "Valida se a ideia cabe em ~4h com multi-agents (entrevista + veredito).", "recommended": true },
|
|
39
|
+
{ "id": "gerar-spec", "file": "commands/gerar-spec.md", "title": "/gerar-spec", "description": "Entrevista de requisitos e gera o SPEC.md principal na raiz.", "recommended": true },
|
|
40
|
+
{ "id": "gerar-claude-md", "file": "commands/gerar-claude-md.md", "title": "/gerar-claude-md", "description": "Gera o CLAUDE.md (context file) a partir do SPEC.md.", "recommended": true },
|
|
41
|
+
{ "id": "gerar-ignore", "file": "commands/gerar-ignore.md", "title": "/gerar-ignore", "description": "Gera .claudeignore e .gitignore conforme a stack.", "recommended": false },
|
|
42
|
+
{ "id": "scaffold", "file": "commands/scaffold.md", "title": "/scaffold", "description": "Cria a estrutura inicial do projeto (pastas, configs, /health, testes de smoke).", "recommended": true }
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "orquestracao",
|
|
47
|
+
"title": "Orquestração & implementação",
|
|
48
|
+
"commands": [
|
|
49
|
+
{ "id": "executar-plan", "file": "commands/executar-plan.md", "title": "/executar-plan", "description": "Orquestra a execução do plano com sub-agents em paralelo, fase a fase.", "recommended": true },
|
|
50
|
+
{ "id": "configurar-orquestrador", "file": "commands/configurar-orquestrador.md", "title": "/configurar-orquestrador", "description": "Configura o agente orquestrador de sub-agents no CLAUDE.md.", "recommended": false },
|
|
51
|
+
{ "id": "corrigir-review", "file": "commands/corrigir-review.md", "title": "/corrigir-review", "description": "Organiza correções do review em sprints/fases/tasks com TDD e delega.", "recommended": false },
|
|
52
|
+
{ "id": "review-por-task", "file": "commands/review-por-task.md", "title": "/review-por-task", "description": "Enforça implementação → review isolado → correção em cada task.", "recommended": false }
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "harness",
|
|
57
|
+
"title": "Harness (agents/skills/hooks/rules)",
|
|
58
|
+
"commands": [
|
|
59
|
+
{ "id": "criar-skill", "file": "commands/criar-skill.md", "title": "/criar-skill", "description": "Sugere e cria skills do projeto em .claude/skills/.", "recommended": false },
|
|
60
|
+
{ "id": "criar-agents", "file": "commands/criar-agents.md", "title": "/criar-agents", "description": "Cria agents especializados em .claude/agents/ a partir do plano.", "recommended": false },
|
|
61
|
+
{ "id": "criar-hooks", "file": "commands/criar-hooks.md", "title": "/criar-hooks", "description": "Cria hooks por agent em .claude/hooks/ conforme o escopo.", "recommended": false },
|
|
62
|
+
{ "id": "criar-rules", "file": "commands/criar-rules.md", "title": "/criar-rules", "description": "Cria rules incondicionais e por path em .claude/rules/.", "recommended": false },
|
|
63
|
+
{ "id": "configurar-comentarios", "file": "commands/configurar-comentarios.md", "title": "/configurar-comentarios", "description": "Instala o padrão de comentários (rule com orçamento, bloco no CLAUDE.md e hook bloqueante com catraca sobre o legado), inclusive Delphi/Pascal.", "recommended": true },
|
|
64
|
+
{ "id": "criar-code-reviewer", "file": "commands/criar-code-reviewer.md", "title": "/criar-code-reviewer", "description": "Cria o agent code-reviewer (somente leitura) em .claude/agents/.", "recommended": true }
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "dia-a-dia",
|
|
69
|
+
"title": "Slash commands & dia a dia",
|
|
70
|
+
"commands": [
|
|
71
|
+
{ "id": "resolver-bug", "file": "commands/resolver-bug.md", "title": "/resolver-bug", "description": "Investiga, planeja em docs/bugs e corrige um bug passo a passo.", "recommended": true },
|
|
72
|
+
{ "id": "nova-tarefa", "file": "commands/nova-tarefa.md", "title": "/nova-tarefa", "description": "Gera spec+plano em docs/ (start inicial ou nova tarefa) e, se confirmado, dispara o orquestrador.", "recommended": true }
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "qualidade",
|
|
77
|
+
"title": "Qualidade & manutenção de código",
|
|
78
|
+
"commands": [
|
|
79
|
+
{ "id": "gerar-testes", "file": "commands/gerar-testes.md", "title": "/gerar-testes", "description": "Detecta cobertura faltante e escreve testes seguindo TDD (RED→GREEN).", "recommended": false },
|
|
80
|
+
{ "id": "refatorar", "file": "commands/refatorar.md", "title": "/refatorar", "description": "Refatora um alvo usando os testes como rede de segurança, sem mudar comportamento.", "recommended": false },
|
|
81
|
+
{ "id": "codigo-morto", "file": "commands/codigo-morto.md", "title": "/codigo-morto", "description": "Varre o projeto em busca de código morto e propõe remoção segura.", "recommended": false },
|
|
82
|
+
{ "id": "atualizar-deps", "file": "commands/atualizar-deps.md", "title": "/atualizar-deps", "description": "Atualiza dependências em lotes, testando a cada passo e isolando o que quebra.", "recommended": false }
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "documentacao",
|
|
87
|
+
"title": "Documentação & onboarding",
|
|
88
|
+
"commands": [
|
|
89
|
+
{ "id": "sincronizar-claude-md", "file": "commands/sincronizar-claude-md.md", "title": "/sincronizar-claude-md", "description": "Aponta onde o CLAUDE.md/SPEC.md divergiu do código, sem reescrever sozinho.", "recommended": false },
|
|
90
|
+
{ "id": "diagrama", "file": "commands/diagrama.md", "title": "/diagrama", "description": "Gera diagramas Mermaid de arquitetura/fluxo a partir do código.", "recommended": false },
|
|
91
|
+
{ "id": "onboarding", "file": "commands/onboarding.md", "title": "/onboarding", "description": "Gera um guia de onboarding (rodar, entender e contribuir) em docs/.", "recommended": false },
|
|
92
|
+
{ "id": "gerar-env", "file": "commands/gerar-env.md", "title": "/gerar-env", "description": "Monta o .env.example a partir das variáveis de ambiente lidas no código.", "recommended": false }
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "avancado",
|
|
97
|
+
"title": "Avançado (RAG, UX, Design, Auditorias)",
|
|
98
|
+
"commands": [
|
|
99
|
+
{ "id": "criar-rag", "file": "commands/criar-rag.md", "title": "/criar-rag", "description": "Cria um sistema de RAG (SQLite + sqlite-vec) para capturar aprendizados.", "recommended": false },
|
|
100
|
+
{ "id": "auditar-ui", "file": "commands/auditar-ui.md", "title": "/auditar-ui", "description": "Navega a app via Playwright MCP e audita UX/UI e/ou acessibilidade (a11y), por tela e severidade.", "recommended": false },
|
|
101
|
+
{ "id": "design-system", "file": "commands/design-system.md", "title": "/design-system", "description": "Cria o agent de design system com skills e rules de identidade visual.", "recommended": false },
|
|
102
|
+
{ "id": "auditar-performance", "file": "commands/auditar-performance.md", "title": "/auditar-performance", "description": "Audita gargalos de performance (queries, bundle, renders, algoritmos).", "recommended": false },
|
|
103
|
+
{ "id": "auditar-seguranca", "file": "commands/auditar-seguranca.md", "title": "/auditar-seguranca", "description": "Auditoria defensiva: segredos, deps vulneráveis, inputs sem validação, configs e conformidade LGPD.", "recommended": false, "requiresSkills": ["lgpd-checker"] }
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "manutencao",
|
|
108
|
+
"title": "Manutenção & validação",
|
|
109
|
+
"commands": [
|
|
110
|
+
{ "id": "validar-commands", "file": "commands/validar-commands.md", "title": "/validar-commands", "description": "Audita .claude: valida modelos dos agents, aponta commands redundantes e sugere novos.", "recommended": false }
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "utilitario",
|
|
115
|
+
"title": "Utilitário",
|
|
116
|
+
"commands": [
|
|
117
|
+
{ "id": "git-commit-push", "file": "commands/git-commit-push.md", "title": "/git-commit-push", "description": "Gera mensagem e executa git add/commit/push em PT-BR.", "recommended": true },
|
|
118
|
+
{ "id": "versao", "file": "commands/versao.md", "title": "/versao", "description": "Detecta o versionamento do projeto (qualquer stack) e aplica o bump de versão + changelog (autossuficiente), com gate de aprovação e sem push.", "recommended": true },
|
|
119
|
+
{ "id": "configurar-auto-tag", "file": "commands/configurar-auto-tag.md", "title": "/configurar-auto-tag", "description": "Detecta o padrão de versionamento (qualquer stack, inclusive Delphi) e gera a GitHub Action que cria a tag automaticamente quando a versão chega na main.", "recommended": true },
|
|
120
|
+
{ "id": "revisar-pr", "file": "commands/revisar-pr.md", "title": "/revisar-pr", "description": "Revisa um PR ou o diff atual, classificando em BLOQUEANTE/IMPORTANTE/SUGESTÃO.", "recommended": false }
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Atualiza dependências em lotes, rodando testes a cada passo e isolando o que quebra.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Atualização segura de dependências
|
|
6
|
+
|
|
7
|
+
Alvo (opcional — pacote específico ou "tudo"): $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Passos:
|
|
10
|
+
|
|
11
|
+
1. Detecte o gerenciador de pacotes do projeto (npm/pnpm/yarn, pip/poetry, go, cargo, maven, etc.) e liste as dependências **desatualizadas**, separando **patch**, **minor** e **major**.
|
|
12
|
+
2. Garanta um baseline verde: rode build e testes **antes** de qualquer mudança. Se já estiver vermelho, **pare e me avise**.
|
|
13
|
+
3. Atualize em lotes, do mais seguro ao mais arriscado: primeiro **patch**, depois **minor**, por último **major** (um de cada vez). Após cada lote, rode build + testes.
|
|
14
|
+
4. Se um lote quebrar, **isole o pacote culpado**, reverta-o e siga com o resto. Para cada **major**, consulte o changelog/breaking changes antes (use o Context7 quando útil).
|
|
15
|
+
5. **Não faça commit nem push** sem minha confirmação. Ao final, reporte: o que foi atualizado, o que foi segurado e por quê, e o estado da suíte.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Audita o projeto em busca de gargalos de performance (queries, bundle, renders, algoritmos).
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Auditoria de performance
|
|
6
|
+
|
|
7
|
+
Foco (opcional — ex.: "backend", "frontend", "tela X", "endpoint Y"): $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Se eu não especifiquei, analise o projeto como um todo e priorize os pontos de maior impacto.
|
|
10
|
+
|
|
11
|
+
Passos:
|
|
12
|
+
|
|
13
|
+
1. Identifique a stack e analise os pontos quentes mais comuns:
|
|
14
|
+
- **Banco/dados**: queries N+1, falta de índices, `SELECT *`, paginação ausente, chamadas em loop.
|
|
15
|
+
- **Backend**: trabalho síncrono bloqueante, ausência de cache, serialização cara, I/O repetido.
|
|
16
|
+
- **Frontend**: tamanho do bundle, imports pesados, re-renders desnecessários, imagens não otimizadas, ausência de lazy-load.
|
|
17
|
+
- **Algoritmos**: complexidade desnecessária (O(n²) evitável), estruturas de dados inadequadas.
|
|
18
|
+
2. Para cada achado, estime **impacto** (alto/médio/baixo) e **esforço** de correção, com o trecho de evidência (`arquivo:linha`).
|
|
19
|
+
3. Onde possível, **meça** em vez de adivinhar (profiler, `EXPLAIN`, análise de bundle, logs de tempo). Não instale ferramentas novas sem me perguntar.
|
|
20
|
+
4. Apresente um relatório priorizado por **impacto/esforço** com a correção recomendada de cada item. Não altere código sem minha confirmação.
|
|
21
|
+
|
|
22
|
+
## Onde gravar o relatório
|
|
23
|
+
|
|
24
|
+
Grave o relatório em `docs/investigacoes/<yyyy-mm-dd>-<slug>.md` — `<yyyy-mm-dd>` é a data atual e
|
|
25
|
+
`<slug>` resume o tema auditado. **Não** grave em `docs/bugs/`: aquela pasta é só para defeito com
|
|
26
|
+
sintoma reproduzível, causa-raiz e correção. Se a auditoria virar trabalho de correção, o plano
|
|
27
|
+
vai para `docs/plans/`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Auditoria de segurança e LGPD — segredos, deps vulneráveis, inputs sem validação, configs inseguras e conformidade com a Lei nº 13.709/2018.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Auditoria de segurança e LGPD
|
|
6
|
+
|
|
7
|
+
Foco (opcional): $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Esta é uma auditoria **defensiva** do próprio projeto, em duas frentes: **segurança técnica** e
|
|
10
|
+
**conformidade com a LGPD**. Se `$ARGUMENTS` restringir o escopo (ex.: `só segurança`, `só lgpd`,
|
|
11
|
+
`autenticação`), respeite-o; sem argumento, rode as duas frentes.
|
|
12
|
+
|
|
13
|
+
## Parte 1 — Segurança técnica
|
|
14
|
+
|
|
15
|
+
1. **Segredos**: procure chaves de API, senhas, tokens e credenciais hardcoded no código e no histórico recente. Verifique se `.env` está no `.gitignore`.
|
|
16
|
+
2. **Dependências**: rode o auditor da stack (`npm audit`, `pip-audit`, `osv-scanner`, etc., se disponível) e liste vulnerabilidades conhecidas por severidade.
|
|
17
|
+
3. **Validação de entrada**: identifique inputs sem validação/sanitização — risco de injeção (SQL, comando, XSS), path traversal e desserialização insegura.
|
|
18
|
+
4. **AuthZ/AuthN**: rotas sem proteção, checagem de permissão ausente, segredos de sessão fracos, CORS permissivo demais.
|
|
19
|
+
5. **Configuração**: modo debug em produção, headers de segurança ausentes, TLS, exposição de stack traces.
|
|
20
|
+
6. Classifique cada achado em **CRÍTICO / ALTO / MÉDIO / BAIXO** (estilo CVSS), com evidência (`arquivo:linha`) e correção recomendada. Não exponha valores de segredos reais no relatório — referencie só a localização. Não altere código sem minha confirmação.
|
|
21
|
+
|
|
22
|
+
## Parte 2 — Conformidade com a LGPD
|
|
23
|
+
|
|
24
|
+
Use a skill **`lgpd-checker`**, instalada em `.claude/skills/lgpd-checker/`. Leia
|
|
25
|
+
`.claude/skills/lgpd-checker/SKILL.md` e siga as fases dela; consulte
|
|
26
|
+
`references/checklist.md` para a lista completa de verificações e `references/lgpd-artigos.md`
|
|
27
|
+
para citar o artigo correto. Em resumo:
|
|
28
|
+
|
|
29
|
+
- **Fase 1 — Reconhecimento**: tipo de aplicação, stack e se o sistema trata dados pessoais de
|
|
30
|
+
pessoa física. Se não tratar, registre isso com justificativa e pule a Parte 2.
|
|
31
|
+
- **Fase 2 — Análise por categoria** (CAT-1 a CAT-11): bases legais e consentimento, minimização,
|
|
32
|
+
dados sensíveis, segurança técnica, logs e auditoria, direitos dos titulares, retenção e
|
|
33
|
+
eliminação, privacy by design, transferência internacional, documentação e governança,
|
|
34
|
+
notificação de incidentes. Faça **busca ativa** no código — não presuma conformidade.
|
|
35
|
+
- **Fase 3 — Severidade e veredito**: classifique cada achado em
|
|
36
|
+
**CRÍTICO / ALTO / MÉDIO / BAIXO / INFO**, sempre citando o artigo da LGPD e uma recomendação
|
|
37
|
+
técnica concreta. Conclua o veredito de conformidade: ✅ CONFORME (nenhum CRÍTICO/ALTO),
|
|
38
|
+
⚠️ PARCIALMENTE CONFORME (só MÉDIO/BAIXO) ou ❌ NÃO CONFORME (algum CRÍTICO/ALTO).
|
|
39
|
+
|
|
40
|
+
CAT-4 (segurança técnica) se sobrepõe à Parte 1: **não duplique achados** — registre o achado uma
|
|
41
|
+
vez na Parte 1 e referencie-o na CAT-4 com o artigo da LGPD correspondente.
|
|
42
|
+
|
|
43
|
+
## Relatório
|
|
44
|
+
|
|
45
|
+
Entregue um relatório único com:
|
|
46
|
+
|
|
47
|
+
1. **Sumário executivo** — contagem de achados por severidade em cada frente e o veredito de
|
|
48
|
+
conformidade LGPD.
|
|
49
|
+
2. **Achados críticos primeiro**, para eu saber o que atacar antes.
|
|
50
|
+
3. **Segurança técnica** — achados da Parte 1 (severidade, `arquivo:linha`, correção).
|
|
51
|
+
4. **Conformidade LGPD** — achados por categoria, no formato de
|
|
52
|
+
`.claude/skills/lgpd-checker/references/report-template.md`, com artigo citado.
|
|
53
|
+
5. **Pontos positivos** — o que já está correto e conforme.
|
|
54
|
+
6. **Plano de ação** em ordem de prioridade.
|
|
55
|
+
|
|
56
|
+
Se faltar código para avaliar alguma categoria, diga explicitamente
|
|
57
|
+
("Não foi possível avaliar [CAT-X] — arquivos de [tipo] não encontrados") em vez de presumir.
|
|
58
|
+
|
|
59
|
+
## Onde gravar o relatório
|
|
60
|
+
|
|
61
|
+
Grave o relatório em `docs/investigacoes/<yyyy-mm-dd>-<slug>.md` — `<yyyy-mm-dd>` é a data atual e
|
|
62
|
+
`<slug>` resume o tema auditado. **Não** grave em `docs/bugs/`: aquela pasta é só para defeito com
|
|
63
|
+
sintoma reproduzível, causa-raiz e correção. Se a auditoria virar trabalho de correção, o plano
|
|
64
|
+
vai para `docs/plans/`.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Navega a aplicação via Playwright MCP e audita UX/UI e/ou acessibilidade (a11y), gerando um relatório por tela e severidade.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Auditoria de interface via navegador
|
|
6
|
+
|
|
7
|
+
Usando o **MCP do Playwright**, abra o navegador **na minha tela** (para que eu acompanhe a navegação) e audite a aplicação.
|
|
8
|
+
|
|
9
|
+
## Parâmetros
|
|
10
|
+
|
|
11
|
+
Podem vir em `$ARGUMENTS`:
|
|
12
|
+
|
|
13
|
+
$ARGUMENTS
|
|
14
|
+
|
|
15
|
+
Preciso de quatro coisas. Para o que **não** veio em `$ARGUMENTS`, **pare e me pergunte antes de abrir o navegador**, oferecendo o exemplo como valor padrão que eu posso aceitar ou substituir:
|
|
16
|
+
|
|
17
|
+
- **Lente da auditoria:** `ux` (UX/UI), `a11y` (acessibilidade) ou `tudo` (as duas) — padrão: `tudo`.
|
|
18
|
+
- **URL** da aplicação (ex.: `http://localhost:3000`)
|
|
19
|
+
- **Usuário** para login (ex.: `admin@admin.com.br`)
|
|
20
|
+
- **Senha** para login (ex.: `admin`)
|
|
21
|
+
|
|
22
|
+
Só prossiga depois que eu confirmar. Se `$ARGUMENTS` já trouxer os dados, use-os diretamente sem perguntar.
|
|
23
|
+
|
|
24
|
+
## Passos
|
|
25
|
+
|
|
26
|
+
1. Faça login e navegue por **todas** as telas, clicando em todos os menus e botões.
|
|
27
|
+
2. Para cada tela, audite conforme a lente escolhida:
|
|
28
|
+
- **UX/UI** — clareza e consistência visual, hierarquia, feedback das ações, estados de vazio/erro/carregamento, fluxos confusos, responsividade.
|
|
29
|
+
- **a11y (WCAG AA)** — contraste de cores, uso correto de ARIA e roles, navegação por teclado (tab order, foco visível, atalhos), textos alternativos em imagens, labels em formulários, hierarquia de headings e foco em modais.
|
|
30
|
+
3. Classifique cada achado por severidade — **CRÍTICO** (bloqueia o uso), **SÉRIO**, **MODERADO**, **MENOR** — citando o critério **WCAG** quando for um achado de a11y.
|
|
31
|
+
4. Compile um **relatório único**, agrupado por **tela** e **severidade**, com a correção recomendada de cada item. Não altere código — apenas reporte o que precisa ser criado ou melhorado.
|
|
32
|
+
|
|
33
|
+
## Onde gravar o relatório
|
|
34
|
+
|
|
35
|
+
Grave o relatório em `docs/investigacoes/<yyyy-mm-dd>-<slug>.md` — `<yyyy-mm-dd>` é a data atual e
|
|
36
|
+
`<slug>` resume o tema auditado. **Não** grave em `docs/bugs/`: aquela pasta é só para defeito com
|
|
37
|
+
sintoma reproduzível, causa-raiz e correção. Se a auditoria virar trabalho de correção, o plano
|
|
38
|
+
vai para `docs/plans/`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Varre o projeto em busca de código morto (imports, exports, funções e arquivos não usados) e propõe remoção.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Caça ao código morto
|
|
6
|
+
|
|
7
|
+
Escopo (opcional — pasta ou módulo): $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Passos:
|
|
10
|
+
|
|
11
|
+
1. Varra o projeto procurando: imports não utilizados, exports sem consumidores, funções/variáveis/classes nunca referenciadas, arquivos órfãos e dependências declaradas mas não usadas.
|
|
12
|
+
2. Prefira ferramentas já disponíveis na stack (ex.: linter, `knip`, `ts-prune`, `depcheck`, `vulture`, analisadores nativos). **Não instale nada novo** sem me perguntar.
|
|
13
|
+
3. Para cada achado, classifique a confiança: **ALTA** (claramente morto), **MÉDIA** (pode ser usado via reflexão/dinâmica/rota/teste), **BAIXA** (suspeito). Cuidado com APIs públicas, entrypoints, plugins e código acessado por string.
|
|
14
|
+
4. Apresente a lista agrupada por confiança e **pergunte o que devo remover**. Não apague nada de **MÉDIA/BAIXA** sem confirmação.
|
|
15
|
+
5. Após remover, rode build e testes para garantir que nada quebrou.
|
|
16
|
+
|
|
17
|
+
## Onde gravar o relatório
|
|
18
|
+
|
|
19
|
+
Grave o relatório em `docs/investigacoes/<yyyy-mm-dd>-<slug>.md` — `<yyyy-mm-dd>` é a data atual e
|
|
20
|
+
`<slug>` resume o tema auditado. **Não** grave em `docs/bugs/`: aquela pasta é só para defeito com
|
|
21
|
+
sintoma reproduzível, causa-raiz e correção. Se a auditoria virar trabalho de correção, o plano
|
|
22
|
+
vai para `docs/plans/`.
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Detecta o padrão de versionamento do projeto (qualquer stack, inclusive Delphi) e gera a GitHub Action que cria a tag automaticamente quando a versão chega na main. Separa versionar (humano) de taguear/deployar (automático).
|
|
3
|
+
argument-hint: "[branch-de-producao]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /configurar-auto-tag — Auto-tag no merge para a branch de produção
|
|
7
|
+
|
|
8
|
+
Você vai **configurar a automação de tag** deste repositório: descobrir **como o versionamento já funciona
|
|
9
|
+
aqui** (Node/JS-TS, .NET, Delphi, Flutter, Python, arquivo `VERSION`, etc.) e gerar uma **GitHub Action** que
|
|
10
|
+
**cria a tag automaticamente** quando um novo número de versão chega na branch de produção (`main` por padrão).
|
|
11
|
+
|
|
12
|
+
O objetivo é separar dois papéis:
|
|
13
|
+
|
|
14
|
+
- **Versionar** — ação humana (o comando `/versao`), com aprovação de versão e changelog. **Sem tag, sem push.**
|
|
15
|
+
- **Taguear/deployar** — ação automática (esta Action), disparada quando o arquivo de versão muda na `main`.
|
|
16
|
+
|
|
17
|
+
A **tag é a fonte única do release** e a criação é **idempotente** por versão (nunca recria uma tag existente).
|
|
18
|
+
|
|
19
|
+
> **🚦 Há um GATE de aprovação obrigatório** antes de escrever qualquer arquivo. Este comando **não faz push**
|
|
20
|
+
> e **não cria tags manualmente** — ele só instala a automação e a documentação.
|
|
21
|
+
|
|
22
|
+
## Uso
|
|
23
|
+
|
|
24
|
+
- `/configurar-auto-tag` — usa `main` como branch de produção.
|
|
25
|
+
- `/configurar-auto-tag <branch>` — usa a branch informada (ex.: `master`, `release`) como alvo da tag.
|
|
26
|
+
|
|
27
|
+
## Passo 0 — Pré-checagem (somente leitura)
|
|
28
|
+
|
|
29
|
+
1. Confirme que é um repositório git com remoto no **GitHub** (`git remote -v`). Se não for GitHub, avise que
|
|
30
|
+
a Action de GitHub Actions não se aplica e **pergunte** como o usuário quer prosseguir (GitLab CI, etc.).
|
|
31
|
+
2. Descubra a **branch de produção** real: use o argumento, senão a branch padrão do remoto
|
|
32
|
+
(`git symbolic-ref --short refs/remotes/origin/HEAD` ou olhe `main`/`master`). **Confirme com o usuário.**
|
|
33
|
+
3. Verifique se já existe `.github/workflows/auto-tag.yml`. Se existir, leia e trate como **ajuste**, não
|
|
34
|
+
sobrescrita cega.
|
|
35
|
+
|
|
36
|
+
## Passo 1 — Detectar a(s) fonte(s) de verdade da versão
|
|
37
|
+
|
|
38
|
+
Investigue o projeto e **identifique TODAS as fontes da versão** (não assuma; confirme lendo). Para cada uma,
|
|
39
|
+
registre: o **arquivo**, o **campo/chave**, o **formato** (`X.Y.Z` ou `X.Y.Z.W`) e **como extrair a versão via
|
|
40
|
+
shell** (você vai embutir isso na Action). Por stack:
|
|
41
|
+
|
|
42
|
+
- **Node / React (Vite/Next) / qualquer JS-TS:** `package.json` → campo `.version`.
|
|
43
|
+
- Extração: `jq -r '.version' package.json`
|
|
44
|
+
- Mobile Expo: `app.json` → `.expo.version` (`jq -r '.expo.version' app.json`).
|
|
45
|
+
- **.NET / C#:** `*.csproj` (`<Version>`, senão `<FileVersion>`), `Directory.Build.props`.
|
|
46
|
+
- Extração: `grep -oPm1 '(?<=<Version>)[^<]+' App.csproj` (ajuste a tag lida).
|
|
47
|
+
- **Delphi:** o número costuma viver no `*.dproj` (chaves `VerInfo_Keys` com `FileVersion`/`ProductVersion` e/ou
|
|
48
|
+
os campos `MajorVersion`/`MinorVersion`/`Release`/`Build`) **e/ou** em constante `.pas` (ex.: `cVersao`, `About`).
|
|
49
|
+
Escolha **uma** fonte estável como canônica e leia o **arquivo:linha** exato.
|
|
50
|
+
- Extração de `FileVersion` no `.dproj`: `grep -oPm1 'FileVersion=\K[0-9.]+' Projeto.dproj`
|
|
51
|
+
- Ou montando de partes: leia `MajorVersion`/`MinorVersion`/`Release`/`Build` com `grep`/`sed` e concatene.
|
|
52
|
+
- Ou de constante `.pas`: `grep -oPm1 "cVersao\s*=\s*'\K[0-9.]+" Sobre.pas`
|
|
53
|
+
- **Flutter / Dart:** `pubspec.yaml` → `version:` (`grep -oPm1 '(?<=^version: )[0-9.+]+' pubspec.yaml`).
|
|
54
|
+
- **Python:** `pyproject.toml` (`[project] version`/`[tool.poetry] version`) ou `__version__`.
|
|
55
|
+
- Extração: `grep -oPm1 '(?<=^version = ")[^"]+' pyproject.toml`.
|
|
56
|
+
- **Genérico:** arquivo `VERSION` na raiz (`cat VERSION`), constante `VERSION`/`APP_VERSION`.
|
|
57
|
+
|
|
58
|
+
> Se não encontrar nenhuma fonte de versão, **pergunte ao usuário** onde a versão é registrada antes de gerar a
|
|
59
|
+
> Action — sem isso a Action não tem o que ler.
|
|
60
|
+
|
|
61
|
+
Determine ainda:
|
|
62
|
+
|
|
63
|
+
- **Repo único ou monorepo/multi-app.** Isso define o **formato da tag**:
|
|
64
|
+
- App único → tag `v<versão>` (ex.: `v1.4.0`).
|
|
65
|
+
- Monorepo → tag `<app>-v<versão>` (ex.: `web-v1.4.0`), com um arquivo de versão por app.
|
|
66
|
+
- **Comando `/versao` já instalado?** Se sim, é ele quem faz o bump. Se não, sugira instalá-lo/rodá-lo para
|
|
67
|
+
produzir o commit de release que dispara esta Action.
|
|
68
|
+
- **Como o deploy de produção é disparado** por cada tag (`deploy-*.yml` no GitHub Actions? webhook de app
|
|
69
|
+
externo tipo Expo/EAS?). Isso decide se o `RELEASE_PAT` é necessário (veja Passo 4).
|
|
70
|
+
|
|
71
|
+
## Passo 2 — Montar a Action (rascunho, sem gravar ainda)
|
|
72
|
+
|
|
73
|
+
Gere `.github/workflows/auto-tag.yml` seguindo este molde, **adaptando a extração da versão** à fonte detectada:
|
|
74
|
+
|
|
75
|
+
```yaml
|
|
76
|
+
name: Auto-tag na <BRANCH_PRODUCAO>
|
|
77
|
+
|
|
78
|
+
on:
|
|
79
|
+
push:
|
|
80
|
+
branches: [<BRANCH_PRODUCAO>]
|
|
81
|
+
paths:
|
|
82
|
+
- <ARQUIVO(S)_DE_VERSAO> # ex.: 'package.json' ou 'apps/**/package.json' ou 'src/Projeto.dproj'
|
|
83
|
+
|
|
84
|
+
permissions:
|
|
85
|
+
contents: write
|
|
86
|
+
|
|
87
|
+
jobs:
|
|
88
|
+
auto-tag:
|
|
89
|
+
runs-on: ubuntu-latest
|
|
90
|
+
steps:
|
|
91
|
+
- uses: actions/checkout@v4
|
|
92
|
+
with:
|
|
93
|
+
fetch-depth: 0
|
|
94
|
+
token: ${{ secrets.RELEASE_PAT || github.token }}
|
|
95
|
+
|
|
96
|
+
- name: Criar tag se a versão for nova
|
|
97
|
+
run: |
|
|
98
|
+
set -euo pipefail
|
|
99
|
+
# >>> AJUSTE a linha abaixo para extrair a versão da fonte de verdade detectada <<<
|
|
100
|
+
VERSION="$(jq -r '.version' package.json)"
|
|
101
|
+
if [ -z "$VERSION" ] || [ "$VERSION" = "null" ]; then
|
|
102
|
+
echo "Não consegui ler a versão"; exit 1
|
|
103
|
+
fi
|
|
104
|
+
TAG="v$VERSION" # monorepo: TAG="<app>-v$VERSION"
|
|
105
|
+
if git rev-parse -q --verify "refs/tags/$TAG" >/dev/null; then
|
|
106
|
+
echo "Tag $TAG já existe — nada a fazer (idempotente)."
|
|
107
|
+
exit 0
|
|
108
|
+
fi
|
|
109
|
+
git config user.name "github-actions[bot]"
|
|
110
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
111
|
+
git tag -a "$TAG" -m "Release $TAG"
|
|
112
|
+
git push origin "$TAG"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Regras ao adaptar o molde:
|
|
116
|
+
|
|
117
|
+
- **Substitua `<BRANCH_PRODUCAO>`** pela branch confirmada no Passo 0.
|
|
118
|
+
- **`paths:`** deve listar **exatamente** o(s) arquivo(s) de versão detectados — assim a Action só roda quando a
|
|
119
|
+
versão muda de fato, não a cada push.
|
|
120
|
+
- **Troque a linha de `VERSION=`** pela extração correta da stack (jq/grep/sed/cat conforme o Passo 1). Para
|
|
121
|
+
Delphi/.NET, use o `grep -oP`/`sed` adequado ao XML/`.pas`; **não** use `jq` fora de JSON.
|
|
122
|
+
- **Monorepo:** faça um loop pelos apps (uma tag por app), lendo a versão de cada arquivo e montando
|
|
123
|
+
`<app>-v<versão>`, com a checagem de idempotência por tag dentro do loop.
|
|
124
|
+
- **Idempotência:** a verificação `git rev-parse --verify refs/tags/$TAG` é obrigatória — nunca recrie tag.
|
|
125
|
+
- Se a Action já existia, **preserve** ajustes locais e só reconcilie o necessário.
|
|
126
|
+
|
|
127
|
+
## Passo 3 — 🚦 GATE de aprovação (obrigatório)
|
|
128
|
+
|
|
129
|
+
Antes de escrever qualquer arquivo, apresente ao usuário:
|
|
130
|
+
|
|
131
|
+
- a **branch de produção** e o **formato de tag** escolhidos (`v<versão>` ou `<app>-v<versão>`);
|
|
132
|
+
- a(s) **fonte(s) de versão** e a **linha de extração** que vai para a Action;
|
|
133
|
+
- o **conteúdo completo** do `auto-tag.yml` proposto;
|
|
134
|
+
- se **`RELEASE_PAT`** será necessário (Passo 4) e por quê.
|
|
135
|
+
|
|
136
|
+
**Peça aprovação explícita.** Não grave nada sem o "ok".
|
|
137
|
+
|
|
138
|
+
## Passo 4 — Documentar o `RELEASE_PAT` (não crie segredo no código)
|
|
139
|
+
|
|
140
|
+
Explique ao usuário, e registre na doc do Passo 5, a **pegadinha do token**:
|
|
141
|
+
|
|
142
|
+
- O **`GITHUB_TOKEN` padrão NÃO dispara outras Actions.** Se o deploy de produção é uma **GitHub Action**
|
|
143
|
+
(`deploy-*.yml`) disparada pela criação da tag, a Action de auto-tag **precisa** empurrar a tag usando um
|
|
144
|
+
**`RELEASE_PAT`** (por isso o `token: ${{ secrets.RELEASE_PAT || github.token }}` no checkout).
|
|
145
|
+
- Se o deploy é disparado por **webhook de app externo** (ex.: Expo/EAS), o PAT é **desnecessário**.
|
|
146
|
+
- Como criar: **fine-grained PAT** com _Contents: Read and write_ no repositório (ou classic com escopo `repo`),
|
|
147
|
+
salvo em **Settings → Secrets and variables → Actions** como **`RELEASE_PAT`**.
|
|
148
|
+
- **Nunca** coloque o token em arquivo versionado — só como secret do repositório.
|
|
149
|
+
|
|
150
|
+
## Passo 5 — Gravar artefatos (somente após aprovação)
|
|
151
|
+
|
|
152
|
+
1. Escreva `.github/workflows/auto-tag.yml`.
|
|
153
|
+
2. Crie/atualize `docs/versionamento-tags.md` explicando:
|
|
154
|
+
- que **a tag aponta um commit, não uma branch** — o commit do release (com os workflows de deploy) precisa
|
|
155
|
+
estar na branch de produção **antes/junto** da criação da tag;
|
|
156
|
+
- o **fluxo completo** de release (abaixo);
|
|
157
|
+
- o funcionamento da Action e a **pegadinha `GITHUB_TOKEN` × `RELEASE_PAT`**;
|
|
158
|
+
- uma **tabela**: app → arquivo de versão → formato da tag → workflow de deploy disparado.
|
|
159
|
+
3. Se houver comandos/docs antigos que mandavam **criar tag** ou **dar push de tag** manualmente, ajuste-os para
|
|
160
|
+
o novo fluxo (a tag agora é responsabilidade exclusiva da Action).
|
|
161
|
+
|
|
162
|
+
### Fluxo de release resultante (documente assim)
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
/versao → push do commit de release → merge/entrega na branch de produção
|
|
166
|
+
→ Action auto-tag cria a tag → workflow de deploy dispara pela tag → produção
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Passo 6 — Verificar e finalizar (sem push)
|
|
170
|
+
|
|
171
|
+
- Valide a sintaxe YAML do workflow (indentação, `on.push.paths`, `permissions`).
|
|
172
|
+
- **Não** rode `git push` e **não** crie tags manualmente. Deixe as alterações prontas (working tree) e informe
|
|
173
|
+
o fluxo manual de commit/push ao usuário — ou, se o `/git-commit-push` estiver instalado, sugira usá-lo.
|
|
174
|
+
- Sugira um commit semântico como `chore: Configura auto-tag na <branch> via GitHub Actions`.
|
|
175
|
+
|
|
176
|
+
## Guardrails
|
|
177
|
+
|
|
178
|
+
- **NUNCA** `git push`; **NUNCA** crie tag local — a tag é responsabilidade exclusiva da Action.
|
|
179
|
+
- **Sempre** confirmar branch, fonte de versão e o YAML no GATE antes de gravar.
|
|
180
|
+
- **Replicar o padrão do projeto** (formato de versão e de tag) — nunca impor um novo.
|
|
181
|
+
- **Idempotência**: a Action nunca recria uma tag existente; para refazer deploy, use o gatilho manual do
|
|
182
|
+
workflow de deploy, não recrie a tag.
|
|
183
|
+
- **`main`/branch de produção = deploy de produção** — trate-a como produção.
|
|
184
|
+
- Sem `RELEASE_PAT`, tags criadas pelo `GITHUB_TOKEN` **não** disparam outras Actions de deploy; documente isso.
|
|
185
|
+
- Documentação em **pt-BR**.
|