@fabioforest/openclaw 3.4.1 → 3.6.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/README.md CHANGED
@@ -44,6 +44,7 @@ npx @fabioforest/openclaw ide install --apply
44
44
  |----------|---------|-----------|
45
45
  | Primeira vez no projeto | `init --apply` | Cria `.agent/` com templates |
46
46
  | Atualizar skills/rules | `update --apply` | Atualiza preservando customizações |
47
+ | Desinstalar do projeto | `uninstall --apply` | Remove `.agent/` com backup |
47
48
  | Ver o que está instalado | `status` | Lista componentes e config |
48
49
  | Algo não funciona | `doctor` | Diagnóstico completo |
49
50
  | Quero entender meu ambiente | `inspect` | Análise 100% read-only |
@@ -113,6 +114,54 @@ npx @fabioforest/openclaw update --apply --merge
113
114
 
114
115
  ---
115
116
 
117
+ ---
118
+
119
+ ### `openclaw uninstall` — Desinstalar do projeto
120
+
121
+ **Quando usar:** Quando quiser remover completamente o OpenClaw de um projeto.
122
+
123
+ ```bash
124
+ # 1. Simula a remoção (mostra o que seria deletado)
125
+ npx @fabioforest/openclaw uninstall
126
+ # → Mostra tree de .agent/ e openclaw.json
127
+ # → Alerta sobre audit logs e state que seriam perdidos
128
+ # → Nenhum arquivo é removido
129
+
130
+ # 2. Aplica a remoção (com backup automático)
131
+ npx @fabioforest/openclaw uninstall --apply
132
+ # → Pede para digitar "UNINSTALL" como confirmação
133
+ # → Oferece fazer backup (.agent.backup-<timestamp>/)
134
+ # → Remove .agent/ e openclaw.json
135
+ # → Salva log de auditoria no diretório
136
+
137
+ # 3. Remoção forçada (sem backup, com --yes pula confirmação)
138
+ npx @fabioforest/openclaw uninstall --apply --force --yes
139
+ ```
140
+
141
+ **Saída de exemplo (modo PLAN):**
142
+
143
+ ```
144
+ 🗑️ OpenClaw Uninstall
145
+
146
+ 📂 Diretório: /home/user/meu-projeto
147
+
148
+ 🔴 REMOVER .agent/ (25 arquivos)
149
+ 📁 agents (3 arquivos)
150
+ 📁 audit (1 arquivos)
151
+ 📁 hooks (1 arquivos)
152
+ 📁 rules (5 arquivos)
153
+ 📁 skills (11 arquivos)
154
+ 📁 workflows (7 arquivos)
155
+ 🔴 REMOVER openclaw.json
156
+
157
+ ⚠️ 1 log(s) de auditoria serão perdidos!
158
+
159
+ 🔒 Modo PLAN (Read-Only). Nenhuma alteração feita.
160
+ Para desinstalar, rode: npx @fabioforest/openclaw uninstall --apply
161
+ ```
162
+
163
+ ---
164
+
116
165
  ### `openclaw inspect` — Analisar ambiente (read-only)
117
166
 
118
167
  **Quando usar:** Antes de qualquer ação, para entender o contexto. 100% read-only — nunca altera nada.
@@ -322,7 +371,7 @@ Verifica conectividade, proxy, versões e integridade do ambiente.
322
371
 
323
372
  ---
324
373
 
325
- ## 🧠 Skills Disponíveis (15)
374
+ ## 🧠 Skills Disponíveis (21)
326
375
 
327
376
  ### Core — Infraestrutura do AI OS
328
377
 
@@ -337,6 +386,22 @@ Verifica conectividade, proxy, versões e integridade do ambiente.
337
386
  | `smart-router` | Roteador econômico | Para escolher modelo de IA por custo |
338
387
  | `context-flush` | Flush de memória | Para economizar tokens em sessões longas |
339
388
 
389
+ ### Engenharia de Software — Código, Testes e Qualidade
390
+
391
+ | Skill | O que faz | Quando usar |
392
+ |-------|-----------|-------------|
393
+ | `code-quality` | SOLID, DRY, KISS, Clean Code | Para revisar e melhorar qualidade de código |
394
+ | `legacy-cleanup` | Refatoração segura de legado | Para remover dead code, deps obsoletas |
395
+ | `test-engineer` | Testes unitários/integração/E2E | Para criar e melhorar suite de testes |
396
+ | `security-scanner` | SAST, DAST, OWASP Top 10 | Para auditoria de segurança e vulnerabilidades |
397
+
398
+ ### DevOps & MLOps — Infraestrutura e Machine Learning
399
+
400
+ | Skill | O que faz | Quando usar |
401
+ |-------|-----------|-------------|
402
+ | `devops-toolkit` | Docker, CI/CD, K8s, Terraform | Para automação de infra e deploy |
403
+ | `mlops-pipeline` | Treinamento, serving, RAG, drift | Para pipelines de ML em produção |
404
+
340
405
  ### Produtividade — Automação e Web
341
406
 
342
407
  | Skill | O que faz | Quando usar |
@@ -347,7 +412,7 @@ Verifica conectividade, proxy, versões e integridade do ambiente.
347
412
  | `web-scraper` | Scraping responsável | Para extrair dados de sites |
348
413
  | `content-sourcer` | Pesquisa de fontes | Para criar dossiês citáveis |
349
414
 
350
- ### Operacionais — DevOps e Infra
415
+ ### Operacionais — Setup e Debug
351
416
 
352
417
  | Skill | O que faz | Quando usar |
353
418
  |-------|-----------|-------------|
@@ -419,6 +484,155 @@ npx @fabioforest/openclaw assist
419
484
 
420
485
  ---
421
486
 
487
+ ## 💬 Exemplo Real: Usando o OpenClaw na IDE (Chat)
488
+
489
+ O OpenClaw funciona como agente via chat na IDE. Aqui está uma simulação de como seria o fluxo real:
490
+
491
+ ### Exemplo 1: Otimizar perfil do LinkedIn
492
+
493
+ ```
494
+ 👤 Você (chat na IDE):
495
+ "Quero otimizar meu perfil do LinkedIn para vagas de AI Engineer"
496
+
497
+ 🤖 Agente (openclaw-router detecta: linkedin-optimizer):
498
+ 📋 INSPECT ─ Coletando contexto:
499
+ • Objetivo: otimizar perfil LinkedIn para AI Engineer
500
+ • Idioma: pt-BR
501
+ • Skills instaladas: linkedin-optimizer ✅
502
+
503
+ 📝 PLAN ─ Proposta de ações:
504
+ 1. Analisar headline atual e propor 2 versões A/B
505
+ 2. Reescrever seção "Sobre" com keywords de AI/MLOps
506
+ 3. Sugerir ajustes nas experiências com métricas
507
+ 4. Gerar checklist de publicação
508
+
509
+ ⚠️ RESTRIÇÃO: LinkedIn proíbe automação. Todo conteúdo
510
+ será gerado como rascunho para aplicação manual.
511
+
512
+ Deseja prosseguir? (S/n)
513
+
514
+ 👤 Você: "S"
515
+
516
+ 🤖 Agente:
517
+ ✅ APPLY ─ Rascunhos salvos em .agent/state/linkedin/drafts.md
518
+
519
+ ## Headline (opção A)
520
+ "AI Engineer | MLOps | Python | RAG & LLMs | Open Source"
521
+
522
+ ## Headline (opção B)
523
+ "Engenheiro de IA | Construindo pipelines de ML em produção"
524
+
525
+ 📝 AUDIT ─ log salvo em .agent/audit/
526
+ ```
527
+
528
+ ### Exemplo 2: Testar performance de um site
529
+
530
+ ```
531
+ 👤 Você:
532
+ "Testa a performance do meu site https://meu-portfolio.dev"
533
+
534
+ 🤖 Agente (openclaw-router detecta: site-tester):
535
+ 📋 INSPECT:
536
+ • URL: https://meu-portfolio.dev
537
+ • robots.txt: verificado ✅
538
+ • Ferramentas disponíveis: PageSpeed Insights API
539
+
540
+ 📝 PLAN:
541
+ 1. Rodar Lighthouse via PageSpeed Insights (sem infra local)
542
+ 2. Coletar métricas: Performance, SEO, Acessibilidade, PWA
543
+ 3. Listar as 5 principais oportunidades de melhoria
544
+ 4. Salvar relatório em .agent/state/site-tests/
545
+
546
+ Confirmar execução?
547
+
548
+ 👤 Você: "sim"
549
+
550
+ 🤖 Agente:
551
+ ✅ Resultados:
552
+ • Performance: 87 → otimizar imagens (ganho estimado: +8pts)
553
+ • SEO: 95 ✅
554
+ • Acessibilidade: 72 → falta alt em 3 imagens + contraste baixo
555
+ • PWA: 60 → falta manifest.json e service worker
556
+
557
+ 📊 Relatório salvo em .agent/state/site-tests/2026-02-19.json
558
+ 📝 Audit salvo
559
+ ```
560
+
561
+ ### Exemplo 3: Atualizar skills após nova versão
562
+
563
+ ```
564
+ 👤 Você:
565
+ "Saiu versão nova do OpenClaw, como atualizo?"
566
+
567
+ 🤖 Agente (openclaw-router detecta: assist):
568
+ Recomendo o seguinte fluxo:
569
+
570
+ 1. Primeiro, veja o que mudaria (modo PLAN, seguro):
571
+ $ npx @fabioforest/openclaw update
572
+
573
+ 2. Se estiver tudo OK, aplique:
574
+ $ npx @fabioforest/openclaw update --apply
575
+
576
+ 3. Para preservar customizações:
577
+ $ npx @fabioforest/openclaw update --apply --merge
578
+
579
+ O update faz backup automático de arquivos customizados
580
+ antes de sobrescrever, e copia novos templates.
581
+
582
+ Quer que eu execute o passo 1 agora?
583
+ ```
584
+
585
+ ### Exemplo 4: Desinstalar o OpenClaw de um projeto
586
+
587
+ ```
588
+ 👤 Você:
589
+ "Quero remover o OpenClaw deste projeto"
590
+
591
+ 🤖 Agente:
592
+ Vou simular a remoção primeiro (modo PLAN, seguro):
593
+
594
+ $ npx @fabioforest/openclaw uninstall
595
+
596
+ 🗑️ PLAN — Seria removido:
597
+ .agent/ (25 arquivos, 15 skills, 5 rules)
598
+ openclaw.json
599
+ ⚠️ 3 logs de auditoria seriam perdidos
600
+
601
+ Para aplicar de fato:
602
+ $ npx @fabioforest/openclaw uninstall --apply
603
+
604
+ O sistema vai pedir que você digite "UNINSTALL"
605
+ e oferecerá fazer backup antes de remover.
606
+
607
+ Quer que eu execute?
608
+ ```
609
+
610
+ ---
611
+
612
+ ## 🔄 Ciclo de Vida Completo
613
+
614
+ ```
615
+ 📦 INSTALAR → npx @fabioforest/openclaw init --apply
616
+ ou: npx @fabioforest/openclaw ide install --apply
617
+
618
+ 🔍 INSPECIONAR → npx @fabioforest/openclaw inspect
619
+ npx @fabioforest/openclaw status
620
+
621
+ 🛠️ USAR → Chat na IDE (skills + router fazem o resto)
622
+ ou: npx @fabioforest/openclaw assist
623
+
624
+ 🔄 ATUALIZAR → npx @fabioforest/openclaw update --apply
625
+ (preserva customizações com --merge)
626
+
627
+ 🏥 DIAGNOSTICAR → npx @fabioforest/openclaw doctor
628
+ npx @fabioforest/openclaw debug
629
+
630
+ 🗑️ DESINSTALAR → npx @fabioforest/openclaw uninstall --apply
631
+ (backup automático + confirmação forte)
632
+ ```
633
+
634
+ ---
635
+
422
636
  ## 🛠️ Desenvolvimento
423
637
 
424
638
  ```bash
@@ -445,8 +659,8 @@ Todas as flags funcionam com qualquer comando:
445
659
  |------|-----------|--------|
446
660
  | `--plan` | Modo simulação (read-only) | **Sim** |
447
661
  | `--apply` | Modo execução (aplica alterações) | Não |
448
- | `--yes, -y` | Pula confirmações | Não |
449
- | `--force, -f` | Permite operações destrutivas | Não |
662
+ | `--yes, -y` | Pula confirmações interativas | Não |
663
+ | `--force, -f` | Permite operações destrutivas (sem backup no uninstall) | Não |
450
664
  | `--path, -p <dir>` | Diretório alvo | `./` |
451
665
  | `--quiet, -q` | Saída mínima | Não |
452
666
  | `--no-audit` | Desabilita logs de auditoria | Não |
package/bin/openclaw.js CHANGED
@@ -24,6 +24,7 @@ const pkg = require("../package.json");
24
24
  const COMMANDS = {
25
25
  init: "../lib/cli/init",
26
26
  update: "../lib/cli/update",
27
+ uninstall: "../lib/cli/uninstall",
27
28
  status: "../lib/cli/status",
28
29
  doctor: "../lib/cli/doctor",
29
30
  debug: "../lib/cli/debug",
@@ -92,6 +93,7 @@ function showHelp() {
92
93
  Comandos:
93
94
  init Instala templates .agent/ no projeto atual
94
95
  update Atualiza templates preservando customizações
96
+ uninstall Remove .agent/ e openclaw.json (com backup)
95
97
  status Mostra status da instalação
96
98
  doctor Healthcheck automatizado do ambiente
97
99
  setup Roda wizard interativo de configuração
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Comando CLI: uninstall
5
+ *
6
+ * Remove a instalação do OpenClaw (.agent/) de um projeto.
7
+ * Segue o protocolo consent-first:
8
+ * - Modo PLAN por padrão (mostra o que seria removido)
9
+ * - Exige --apply para executar
10
+ * - Exige confirmação forte (digitar frase)
11
+ * - Backup opcional antes de remover
12
+ */
13
+
14
+ const fs = require("fs");
15
+ const path = require("path");
16
+ const readline = require("readline");
17
+ const { detectContext, getAuditHeader } = require("../context");
18
+
19
+ function ask(q) {
20
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
21
+ return new Promise((res) => rl.question(q, (ans) => { rl.close(); res(ans.trim()); }));
22
+ }
23
+
24
+ /**
25
+ * Conta arquivos recursivamente em um diretório.
26
+ */
27
+ function countFiles(dir) {
28
+ let count = 0;
29
+ if (!fs.existsSync(dir)) return 0;
30
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
31
+ if (entry.isDirectory()) {
32
+ count += countFiles(path.join(dir, entry.name));
33
+ } else {
34
+ count++;
35
+ }
36
+ }
37
+ return count;
38
+ }
39
+
40
+ /**
41
+ * Lista o conteúdo de um diretório de forma visual (tree).
42
+ */
43
+ function listTree(dir, prefix = "") {
44
+ const lines = [];
45
+ if (!fs.existsSync(dir)) return lines;
46
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
47
+ entries.forEach((entry, i) => {
48
+ const isLast = i === entries.length - 1;
49
+ const connector = isLast ? "└── " : "├── ";
50
+ const icon = entry.isDirectory() ? "📁" : "📄";
51
+ lines.push(`${prefix}${connector}${icon} ${entry.name}`);
52
+ if (entry.isDirectory()) {
53
+ const childPrefix = prefix + (isLast ? " " : "│ ");
54
+ lines.push(...listTree(path.join(dir, entry.name), childPrefix));
55
+ }
56
+ });
57
+ return lines;
58
+ }
59
+
60
+ /**
61
+ * Executa o comando uninstall.
62
+ * @param {object} options
63
+ * @param {string} options.targetPath — diretório alvo
64
+ * @param {object} options.flags — flags do CLI
65
+ */
66
+ async function run({ targetPath, flags }) {
67
+ const agentDir = path.join(targetPath, ".agent");
68
+ const configFile = path.join(targetPath, "openclaw.json");
69
+ const planMode = !flags.apply;
70
+ const ctx = detectContext(targetPath);
71
+
72
+ console.log("\n🗑️ OpenClaw Uninstall\n");
73
+
74
+ // Verificar se existe instalação
75
+ if (!fs.existsSync(agentDir) && !fs.existsSync(configFile)) {
76
+ console.log("ℹ️ Nenhuma instalação do OpenClaw encontrada neste diretório.");
77
+ console.log(` Path: ${targetPath}`);
78
+ return;
79
+ }
80
+
81
+ // Mostrar o que será removido
82
+ console.log(` 📂 Diretório: ${targetPath}`);
83
+ console.log("");
84
+
85
+ const toRemove = [];
86
+
87
+ if (fs.existsSync(agentDir)) {
88
+ const fileCount = countFiles(agentDir);
89
+ toRemove.push({ path: agentDir, label: ".agent/", files: fileCount, isDir: true });
90
+ console.log(` 🔴 REMOVER .agent/ (${fileCount} arquivos)`);
91
+
92
+ // Mostrar tree resumido (primeiro nível)
93
+ const entries = fs.readdirSync(agentDir, { withFileTypes: true });
94
+ entries.forEach(e => {
95
+ const icon = e.isDirectory() ? "📁" : "📄";
96
+ const subCount = e.isDirectory() ? ` (${countFiles(path.join(agentDir, e.name))} arquivos)` : "";
97
+ console.log(` ${icon} ${e.name}${subCount}`);
98
+ });
99
+ }
100
+
101
+ if (fs.existsSync(configFile)) {
102
+ toRemove.push({ path: configFile, label: "openclaw.json", isDir: false });
103
+ console.log(` 🔴 REMOVER openclaw.json`);
104
+ }
105
+
106
+ // Verificar audit logs que seriam perdidos
107
+ const auditDir = path.join(agentDir, "audit");
108
+ if (fs.existsSync(auditDir)) {
109
+ const auditCount = countFiles(auditDir);
110
+ if (auditCount > 0) {
111
+ console.log(`\n ⚠️ ${auditCount} log(s) de auditoria serão perdidos!`);
112
+ }
113
+ }
114
+
115
+ // Verificar state que seria perdido
116
+ const stateDir = path.join(agentDir, "state");
117
+ if (fs.existsSync(stateDir)) {
118
+ const stateCount = countFiles(stateDir);
119
+ if (stateCount > 0) {
120
+ console.log(` ⚠️ ${stateCount} arquivo(s) de estado serão perdidos (mission_control, MEMORY)!`);
121
+ }
122
+ }
123
+
124
+ // Modo PLAN: não faz nada
125
+ if (planMode) {
126
+ console.log("\n🔒 Modo PLAN (Read-Only). Nenhuma alteração feita.");
127
+ console.log(" Para desinstalar, rode: npx @fabioforest/openclaw uninstall --apply");
128
+ return;
129
+ }
130
+
131
+ // Modo APPLY: pedir confirmação forte
132
+ console.log("");
133
+ if (!flags.yes) {
134
+ const confirm = await ask("⚠️ Digite 'UNINSTALL' para confirmar a remoção: ");
135
+ if (confirm !== "UNINSTALL") {
136
+ console.log("⏹️ Cancelado. Nada foi removido.");
137
+ return;
138
+ }
139
+ }
140
+
141
+ // Backup opcional
142
+ if (!flags.force) {
143
+ const doBackup = flags.yes ? "s" : await ask("💾 Fazer backup antes de remover? (S/n): ");
144
+ if (doBackup.toLowerCase() !== "n") {
145
+ const backupName = `.agent.backup-${Date.now()}`;
146
+ const backupPath = path.join(targetPath, backupName);
147
+ try {
148
+ fs.cpSync(agentDir, backupPath, { recursive: true });
149
+ console.log(` ✅ Backup criado: ${backupName}/`);
150
+ } catch (err) {
151
+ console.error(` ⚠️ Falha no backup: ${err.message}`);
152
+ const cont = await ask(" Continuar sem backup? (y/N): ");
153
+ if (cont.toLowerCase() !== "y") {
154
+ console.log("⏹️ Cancelado.");
155
+ return;
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ // Executar remoção
162
+ const audit = [getAuditHeader(ctx, "uninstall", flags)];
163
+
164
+ try {
165
+ for (const item of toRemove) {
166
+ if (item.isDir) {
167
+ fs.rmSync(item.path, { recursive: true, force: true });
168
+ } else {
169
+ fs.unlinkSync(item.path);
170
+ }
171
+ console.log(` ✅ Removido: ${item.label}`);
172
+ audit.push(`- ACT: REMOVED ${item.label}`);
173
+ }
174
+
175
+ console.log("\n✨ OpenClaw desinstalado com sucesso!");
176
+ console.log(" Para reinstalar: npx @fabioforest/openclaw init --apply\n");
177
+
178
+ // Gravar audit no diretório pai (já que .agent/ foi removido)
179
+ if (flags.audit !== false) {
180
+ const filename = `openclaw-uninstall-${new Date().toISOString().replace(/[:.]/g, "-")}.md`;
181
+ const auditPath = path.join(targetPath, filename);
182
+ try {
183
+ fs.writeFileSync(auditPath, audit.join("\n") + "\n", "utf8");
184
+ console.log(` 📝 Log de auditoria: ${filename}`);
185
+ } catch (e) { /* silencioso */ }
186
+ }
187
+
188
+ } catch (err) {
189
+ console.error(`\n❌ Falha: ${err.message}`);
190
+ process.exit(1);
191
+ }
192
+ }
193
+
194
+ module.exports = { run };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fabioforest/openclaw",
3
- "version": "3.4.1",
3
+ "version": "3.6.0",
4
4
  "description": "Agentes autônomos para engenharia de software",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: code-quality
3
+ description: Aplica boas práticas de código (SOLID, DRY, KISS, Clean Code). Analisa estilo, naming, estrutura, documentação e propõe melhorias.
4
+ triggers:
5
+ - boas práticas
6
+ - code review
7
+ - clean code
8
+ - solid
9
+ - dry
10
+ - kiss
11
+ - qualidade de código
12
+ - code quality
13
+ - lint
14
+ - estilo
15
+ - naming
16
+ - convenção
17
+ - padrão de código
18
+ - documentação
19
+ ---
20
+
21
+ # Code Quality
22
+
23
+ ## Objetivo
24
+ Garantir que o código siga boas práticas reconhecidas (SOLID, DRY, KISS, Clean Code), com foco em legibilidade, manutenibilidade e consistência.
25
+
26
+ ## Contexto necessário
27
+ - Linguagem/framework do projeto
28
+ - Guia de estilo existente (se houver)
29
+ - Foco: revisão geral ou área específica
30
+
31
+ ## Fluxo (inspect → plan → consent → apply → audit)
32
+
33
+ 1. **INSPECT** (read-only):
34
+ - Verificar configuração de linter/formatter existente
35
+ - Analisar convenções de naming (camelCase, snake_case, PascalCase)
36
+ - Detectar violações de SOLID:
37
+ - **S**ingle Responsibility: classes/funções com mais de 1 responsabilidade
38
+ - **O**pen/Closed: código que exige modificação para extensão
39
+ - **L**iskov Substitution: subclasses que quebram contratos
40
+ - **I**nterface Segregation: interfaces muito grandes
41
+ - **D**ependency Inversion: dependências concretas no lugar de abstrações
42
+ - Detectar violações de DRY (duplicações)
43
+ - Verificar documentação (JSDoc, docstrings, README)
44
+ - Medir tamanho de funções/classes (threshold: 200 linhas/arquivo, 30 linhas/função)
45
+
46
+ 2. **PLAN** — Propor melhorias categorizadas:
47
+
48
+ | Categoria | Exemplo |
49
+ |-----------|---------|
50
+ | 📝 Naming | `data` → `userProfiles`, `fn` → `calculateDiscount` |
51
+ | 📦 Estrutura | Extrair classe com 500 linhas em 3 módulos |
52
+ | 📖 Documentação | Adicionar JSDoc em funções públicas |
53
+ | 🔧 Linting | Configurar ESLint/Prettier/Ruff/Black |
54
+ | 🧪 Testabilidade | Injetar dependências para facilitar mocks |
55
+
56
+ 3. **CONSENT**: Confirmar antes de aplicar
57
+ 4. **APPLY**: Gerar patches unificados para cada melhoria
58
+ 5. **AUDIT**: Registrar métricas antes/depois
59
+
60
+ ## Checklists por cenário
61
+
62
+ ### Criando código novo
63
+ - [ ] Nomes descritivos (sem abreviações crípticas)
64
+ - [ ] Funções com no máximo 30 linhas e 1 responsabilidade
65
+ - [ ] Arquivos com no máximo 200-300 linhas
66
+ - [ ] Sem dados simulados fora de testes
67
+ - [ ] Comentários explicam "por quê", não "o quê"
68
+ - [ ] Tratamento de erros com mensagens úteis
69
+ - [ ] Tipos/interfaces/schemas definidos
70
+
71
+ ### Revisando código existente
72
+ - [ ] Sem variáveis não utilizadas
73
+ - [ ] Sem imports não utilizados
74
+ - [ ] Sem TODO/FIXME sem prazo
75
+ - [ ] Sem console.log/print de debug em produção
76
+ - [ ] Sem credenciais hardcoded
77
+ - [ ] Sem números mágicos (extrair constantes)
78
+ - [ ] Sem funções com mais de 3 níveis de aninhamento
79
+
80
+ ## Ferramentas recomendadas
81
+
82
+ | Categoria | JavaScript/TS | Python | Go |
83
+ |-----------|--------------|--------|-----|
84
+ | Linter | ESLint | Ruff, Pylint | golangci-lint |
85
+ | Formatter | Prettier | Black, Ruff format | gofmt |
86
+ | Type check | TypeScript | mypy, pyright | built-in |
87
+ | Docs | JSDoc, TypeDoc | Sphinx, mkdocs | godoc |
88
+ | Complexidade | ESLint complexity | radon | gocyclo |
89
+
90
+ ## Regras de segurança
91
+ - ✅ Nunca alterar lógica de negócio durante refatoração de estilo
92
+ - ✅ Commits separados: formatação vs refatoração vs lógica
93
+ - ❌ Nunca introduzir um novo padrão sem remover o antigo
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: devops-toolkit
3
+ description: Automação de infraestrutura, CI/CD, containerização, monitoramento e deploy. Suporte a Docker, GitHub Actions, Terraform, Ansible e Kubernetes.
4
+ triggers:
5
+ - devops
6
+ - ci/cd
7
+ - pipeline
8
+ - deploy
9
+ - docker
10
+ - dockerfile
11
+ - docker-compose
12
+ - kubernetes
13
+ - k8s
14
+ - terraform
15
+ - ansible
16
+ - github actions
17
+ - gitlab ci
18
+ - infraestrutura
19
+ - infra
20
+ - monitoramento
21
+ - observabilidade
22
+ - nginx
23
+ - proxy reverso
24
+ - ssl
25
+ - https
26
+ ---
27
+
28
+ # DevOps Toolkit
29
+
30
+ ## Objetivo
31
+ Automatizar infraestrutura, CI/CD, containerização, monitoramento e deploy seguindo boas práticas de Infrastructure as Code (IaC) e GitOps.
32
+
33
+ ## Contexto necessário
34
+ - Provedor de cloud (AWS, GCP, Azure, VPS, local)
35
+ - Ferramenta de CI/CD em uso (GitHub Actions, GitLab CI, Jenkins)
36
+ - Stack do projeto (linguagem, framework, banco de dados)
37
+ - Ambiente alvo (dev, staging, prod)
38
+
39
+ ## Fluxo (inspect → plan → consent → apply → verify → audit)
40
+
41
+ 1. **INSPECT**: Analisar infra existente (Dockerfile, compose, CI configs, deploy scripts)
42
+ 2. **PLAN**: Propor melhorias com diagrama de arquitetura
43
+ 3. **CONSENT**: Confirmar antes de qualquer alteração em infra
44
+ 4. **APPLY**: Gerar/modificar configs
45
+ 5. **VERIFY**: Testar build, healthcheck, deploy em staging
46
+ 6. **AUDIT**: Registrar mudanças de infra
47
+
48
+ ## Capacidades
49
+
50
+ ### 🐳 Containerização
51
+ - Criar/otimizar Dockerfiles (multi-stage builds, cache layers)
52
+ - Docker Compose para desenvolvimento local
53
+ - Boas práticas: non-root user, .dockerignore, health checks
54
+ - Reduzir tamanho de imagem (Alpine, distroless, slim)
55
+
56
+ ### 🔄 CI/CD Pipelines
57
+ - GitHub Actions (workflows, matrix, caching, secrets)
58
+ - GitLab CI (stages, artifacts, environments)
59
+ - Estratégias: lint → test → build → deploy
60
+ - Cache de dependências para acelerar builds
61
+ - Deploy com rollback automático
62
+
63
+ ### ☁️ Infrastructure as Code
64
+ - Terraform: providers, modules, state management
65
+ - Ansible: playbooks, roles, inventários
66
+ - Kubernetes: manifests, Helm charts, kustomize
67
+
68
+ ### 📊 Monitoramento e Observabilidade
69
+ - Healthchecks e readiness probes
70
+ - Logging estruturado (JSON, correlação de requests)
71
+ - Métricas (Prometheus, Grafana, Datadog)
72
+ - Alertas baseados em SLOs/SLIs
73
+
74
+ ### 🔒 Segurança de Infra
75
+ - Scan de vulnerabilidades em imagens Docker (Trivy, Snyk)
76
+ - Secrets management (Vault, SOPS, GitHub Secrets)
77
+ - Network policies e firewall rules
78
+ - TLS/SSL com renovação automática (Let's Encrypt, Certbot)
79
+
80
+ ## Checklists
81
+
82
+ ### Dockerfile
83
+ - [ ] Multi-stage build (builder + runner)
84
+ - [ ] Usuário non-root
85
+ - [ ] .dockerignore configurado
86
+ - [ ] HEALTHCHECK definido
87
+ - [ ] Apenas dependências de produção na imagem final
88
+ - [ ] Layers ordenadas por frequência de mudança (cache)
89
+
90
+ ### CI/CD Pipeline
91
+ - [ ] Lint e testes rodam em cada PR
92
+ - [ ] Build e push de imagem em merge na main
93
+ - [ ] Deploy automático em staging, manual em prod
94
+ - [ ] Cache de dependências configurado
95
+ - [ ] Secrets não expostos em logs
96
+ - [ ] Rollback automático se healthcheck falhar
97
+
98
+ ### Deploy em Produção
99
+ - [ ] Blue-green ou canary deployment
100
+ - [ ] Database migrations antes do deploy
101
+ - [ ] Backup antes de mudanças destrutivas
102
+ - [ ] Monitoramento ativo pós-deploy (5-15 min)
103
+ - [ ] Runbook de rollback documentado
104
+
105
+ ## Regras de segurança
106
+ - ✅ Nunca commitar secrets no repositório
107
+ - ✅ Testar em staging antes de prod
108
+ - ✅ Infraestrutura versionada no Git (IaC)
109
+ - ❌ Nunca fazer deploy direto em prod sem pipeline
110
+ - ❌ Nunca rodar containers como root em produção
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: legacy-cleanup
3
+ description: Analisa e refatora código legado de forma segura. Identifica dead code, dependências obsoletas, padrões deprecados e propõe modernização incremental.
4
+ triggers:
5
+ - código legado
6
+ - legacy
7
+ - refatorar
8
+ - dead code
9
+ - código morto
10
+ - deprecado
11
+ - obsoleto
12
+ - modernizar
13
+ - dívida técnica
14
+ - technical debt
15
+ - cleanup
16
+ - limpar código
17
+ ---
18
+
19
+ # Legacy Cleanup
20
+
21
+ ## Objetivo
22
+ Identificar e remover código legado, dead code, dependências obsoletas e padrões deprecados de forma **segura e incremental**, sem quebrar funcionalidades existentes.
23
+
24
+ ## Contexto necessário
25
+ - Linguagem/framework do projeto
26
+ - Se há testes automatizados (cobertura atual)
27
+ - Áreas prioritárias (ou análise completa)
28
+ - Tolerância a risco (conservador vs agressivo)
29
+
30
+ ## Fluxo (inspect → plan → consent → apply → verify → audit)
31
+
32
+ 1. **INSPECT** (read-only):
33
+ - Identificar dead code (funções/classes/módulos não referenciados)
34
+ - Listar dependências sem uso no `package.json` / `requirements.txt` / `Gemfile`
35
+ - Detectar padrões deprecados (callbacks → promises, var → const/let, etc.)
36
+ - Mapear duplicações (DRY violations)
37
+ - Verificar TODOs/FIXMEs/HACKs antigos
38
+ - Medir complexidade ciclomática por arquivo
39
+
40
+ 2. **PLAN** — Propor ações categorizadas por risco:
41
+
42
+ | Risco | Ação | Exemplo |
43
+ |-------|------|---------|
44
+ | 🟢 Baixo | Remover imports não usados | `import * as _ from 'lodash'` sem uso |
45
+ | 🟡 Médio | Remover funções sem referência | Função helper nunca chamada |
46
+ | 🔴 Alto | Substituir padrão arquitetural | Migrar callbacks → async/await |
47
+
48
+ 3. **CONSENT**: Confirmar cada categoria de risco separadamente
49
+ 4. **APPLY**: Executar refatorações + rodar testes após cada batch
50
+ 5. **VERIFY**: Confirmar que testes passam e build funciona
51
+ 6. **AUDIT**: Registrar métricas antes/depois (linhas, complexidade, dependências)
52
+
53
+ ## Ferramentas recomendadas por linguagem
54
+
55
+ | Linguagem | Dead code | Deps não usadas | Complexidade |
56
+ |-----------|-----------|-----------------|-------------|
57
+ | JavaScript/TS | `ts-prune`, ESLint `no-unused-vars` | `depcheck` | `plato`, ESLint |
58
+ | Python | `vulture`, `pylint` | `pip-autoremove` | `radon`, `flake8` |
59
+ | Go | `deadcode`, `staticcheck` | `go mod tidy` | `gocyclo` |
60
+ | Java | IntelliJ inspections, `spotbugs` | Maven dependency plugin | `PMD` |
61
+
62
+ ## Regras de segurança
63
+ - ✅ Sempre rodar testes antes E depois de cada refatoração
64
+ - ✅ Commits atômicos (1 refatoração = 1 commit)
65
+ - ✅ Nunca remover código que tenha referência dinâmica sem confirmar
66
+ - ❌ Nunca refatorar sem testes que cubram a área alterada
67
+ - ❌ Nunca misturar refatoração com mudança de lógica de negócio
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: mlops-pipeline
3
+ description: Boas práticas de MLOps — treinamento, versionamento de modelos, deploy de ML, monitoramento de drift, pipelines de dados e feature stores.
4
+ triggers:
5
+ - mlops
6
+ - machine learning
7
+ - modelo
8
+ - treinamento
9
+ - training
10
+ - deploy de modelo
11
+ - model serving
12
+ - feature store
13
+ - data pipeline
14
+ - drift
15
+ - experiment tracking
16
+ - mlflow
17
+ - wandb
18
+ - kubeflow
19
+ - bentoml
20
+ - rag
21
+ - fine-tuning
22
+ - embeddings
23
+ - vetor
24
+ - vector database
25
+ ---
26
+
27
+ # MLOps Pipeline
28
+
29
+ ## Objetivo
30
+ Implementar e gerenciar pipelines de Machine Learning em produção, cobrindo todo o ciclo: dados → treinamento → avaliação → deploy → monitoramento → retraining.
31
+
32
+ ## Contexto necessário
33
+ - Tipo de modelo (classificação, NLP, visão, LLM, recomendação)
34
+ - Framework (PyTorch, TensorFlow, scikit-learn, HuggingFace)
35
+ - Infraestrutura (local, cloud, GPU)
36
+ - Estágio atual (exploração, staging, produção)
37
+
38
+ ## Fluxo (inspect → plan → consent → apply → verify → audit)
39
+
40
+ 1. **INSPECT**: Analisar pipeline existente, dados, modelos e infra
41
+ 2. **PLAN**: Propor arquitetura MLOps com componentes necessários
42
+ 3. **CONSENT**: Confirmar custos de compute e storage
43
+ 4. **APPLY**: Implementar/modificar pipeline
44
+ 5. **VERIFY**: Validar métricas, latência, throughput
45
+ 6. **AUDIT**: Registrar experimentos, versões e decisões
46
+
47
+ ## Capacidades
48
+
49
+ ### 📊 Experiment Tracking
50
+ - MLflow: experiments, runs, parâmetros, métricas, artefatos
51
+ - Weights & Biases (W&B): tracking, sweeps, reports
52
+ - Comparação entre runs e reprodutibilidade
53
+
54
+ ### 📦 Versionamento de Modelos e Dados
55
+ - DVC: versionamento de datasets grandes
56
+ - MLflow Model Registry: staging → production
57
+ - Git LFS para artefatos pesados
58
+ - Hashes de datasets para reprodutibilidade
59
+
60
+ ### 🔄 Pipelines de Treinamento
61
+ - Orquestração: Airflow, Prefect, Kubeflow Pipelines
62
+ - Feature engineering automatizado
63
+ - Validação de dados (Great Expectations, Pandera)
64
+ - Hyperparameter tuning (Optuna, Ray Tune)
65
+
66
+ ### 🚀 Model Serving
67
+ - APIs REST/gRPC: FastAPI + ONNX, TorchServe, TF Serving
68
+ - BentoML: empacotamento e deploy de modelos
69
+ - Serverless: AWS Lambda + SageMaker, GCP Cloud Functions
70
+ - Edge: ONNX Runtime, TensorFlow Lite
71
+
72
+ ### 🔍 Monitoramento em Produção
73
+ - Data drift detection (Evidently, NannyML)
74
+ - Model performance monitoring (accuracy decay)
75
+ - Latência e throughput (P50, P95, P99)
76
+ - Alertas para retraining automático
77
+
78
+ ### 🧠 LLM Ops (RAG, Fine-tuning, Agents)
79
+ - RAG pipelines: embeddings → vector DB → retrieval → generation
80
+ - Vector databases: Qdrant, ChromaDB, Pinecone, Weaviate
81
+ - Fine-tuning: LoRA, QLoRA, em GPUs de consumo
82
+ - Avaliação de LLMs: BLEU, ROUGE, human eval, LLM-as-judge
83
+ - Guardrails: content filtering, prompt injection detection
84
+
85
+ ## Checklists
86
+
87
+ ### Antes de treinar
88
+ - [ ] Dados validados (schema, distribuição, missing values)
89
+ - [ ] Split reprodutível (train/val/test com seed fixa)
90
+ - [ ] Baseline definido (modelo simples para comparação)
91
+ - [ ] Métricas de avaliação escolhidas e documentadas
92
+ - [ ] Experiment tracking configurado
93
+
94
+ ### Antes de deploy
95
+ - [ ] Modelo versionado com metadados (hash, métricas, dataset)
96
+ - [ ] Testes de integração (input → output esperado)
97
+ - [ ] Benchmark de latência e throughput
98
+ - [ ] Fallback definido (modelo anterior ou regra heurística)
99
+ - [ ] Monitoramento de drift configurado
100
+
101
+ ### Em produção
102
+ - [ ] Alertas para degradação de performance
103
+ - [ ] Pipeline de retraining automatizado ou semi-automático
104
+ - [ ] A/B testing ou shadow mode para novos modelos
105
+ - [ ] Logs de predições para auditoria e debugging
106
+ - [ ] Custo de compute monitorado
107
+
108
+ ## Regras de segurança
109
+ - ✅ Dados sensíveis devem ser anonimizados/mascarados antes de treinar
110
+ - ✅ Modelos devem ser escaneados para bias antes de deploy
111
+ - ✅ API keys de provedores de LLM devem usar secret management
112
+ - ❌ Nunca expor endpoints de model serving sem autenticação
113
+ - ❌ Nunca treinar com dados de produção sem aprovação de compliance
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: security-scanner
3
+ description: Análise de segurança de código e infraestrutura — SAST, DAST, dependency audit, secrets scanning, OWASP Top 10 e hardening.
4
+ triggers:
5
+ - segurança
6
+ - security
7
+ - vulnerabilidade
8
+ - cve
9
+ - owasp
10
+ - pentest
11
+ - scan
12
+ - auditoria de segurança
13
+ - secrets
14
+ - injection
15
+ - xss
16
+ - csrf
17
+ - sql injection
18
+ - hardening
19
+ - sast
20
+ - dast
21
+ - dependências vulneráveis
22
+ ---
23
+
24
+ # Security Scanner
25
+
26
+ ## Objetivo
27
+ Identificar vulnerabilidades de segurança no código, dependências e infraestrutura, seguindo OWASP Top 10 e boas práticas de AppSec.
28
+
29
+ ## Contexto necessário
30
+ - Linguagem/framework do projeto
31
+ - Tipo de aplicação (web, API, mobile, CLI)
32
+ - Ambiente (dev, staging, prod)
33
+ - Requisitos de compliance (SOC2, LGPD, PCI-DSS, HIPAA)
34
+
35
+ ## Fluxo (inspect → plan → consent → apply → verify → audit)
36
+
37
+ 1. **INSPECT** (read-only):
38
+ - Scan de dependências (CVEs conhecidos)
39
+ - Busca de secrets no código (API keys, senhas, tokens)
40
+ - Análise estática (SAST): injection, XSS, CSRF
41
+ - Verificação de configuração (CORS, headers, CSP)
42
+ - Análise de Dockerfile/compose (imagem base, root, ports)
43
+
44
+ 2. **PLAN** — Relatório de vulnerabilidades por severidade:
45
+
46
+ | Severidade | Exemplo | Ação |
47
+ |-----------|---------|------|
48
+ | 🔴 Crítica | SQL injection, secret exposto | Fix imediato |
49
+ | 🟠 Alta | Dependência com CVE alto | Update urgente |
50
+ | 🟡 Média | CORS permissivo, headers faltando | Planejar fix |
51
+ | 🟢 Baixa | Versão desatualizada sem CVE | Monitorar |
52
+
53
+ 3. **CONSENT**: Confirmar correções propostas
54
+ 4. **APPLY**: Aplicar fixes + atualizar dependências
55
+ 5. **VERIFY**: Re-scan para confirmar correção
56
+ 6. **AUDIT**: Relatório de segurança antes/depois
57
+
58
+ ## Capacidades
59
+
60
+ ### 🔍 SAST (Static Application Security Testing)
61
+ - Análise de código sem executar
62
+ - Detecção de injection (SQL, NoSQL, command, LDAP)
63
+ - Cross-Site Scripting (XSS) e Cross-Site Request Forgery (CSRF)
64
+ - Insecure deserialization
65
+ - Path traversal e file inclusion
66
+
67
+ ### 📦 Dependency Audit
68
+ - `npm audit` / `yarn audit` (JavaScript)
69
+ - `pip-audit` / `safety` (Python)
70
+ - `cargo audit` (Rust)
71
+ - `go vuln check` (Go)
72
+ - Snyk, Dependabot, Renovate para automação
73
+
74
+ ### 🔑 Secrets Scanning
75
+ - Busca de: API keys, passwords, tokens, private keys, connection strings
76
+ - Ferramentas: gitleaks, truffleHog, detect-secrets
77
+ - Verificação em histórico do Git (commits antigos)
78
+ - Pre-commit hooks para prevenir novos leaks
79
+
80
+ ### 🌐 DAST (Dynamic Application Security Testing)
81
+ - Scan de endpoint em runtime
82
+ - Ferramentas: OWASP ZAP, Nuclei, Burp Suite
83
+ - Verificação de headers de segurança (CSP, HSTS, X-Frame-Options)
84
+ - Teste de rate limiting e brute force
85
+
86
+ ### 🏗️ Infrastructure Security
87
+ - Scan de imagens Docker (Trivy, Grype)
88
+ - Verificação de configuração cloud (Checkov, ScoutSuite)
89
+ - Network security (ports expostas, firewall rules)
90
+ - TLS/SSL assessment (testssl.sh, SSL Labs)
91
+
92
+ ## OWASP Top 10 — Checklist
93
+
94
+ - [ ] **A01 Broken Access Control**: Verificar RBAC, IDOR, path traversal
95
+ - [ ] **A02 Cryptographic Failures**: TLS, hashing de senhas (bcrypt/argon2), encryption at rest
96
+ - [ ] **A03 Injection**: SQL, NoSQL, OS command, LDAP, XSS
97
+ - [ ] **A04 Insecure Design**: Threat modeling, abuse cases
98
+ - [ ] **A05 Security Misconfiguration**: Default configs, debug mode em prod, headers
99
+ - [ ] **A06 Vulnerable Components**: Dependencies com CVEs, EOL libraries
100
+ - [ ] **A07 Authentication Failures**: MFA, session management, brute force protection
101
+ - [ ] **A08 Data Integrity Failures**: CI/CD security, deserialization, updates sem verificação
102
+ - [ ] **A09 Logging Failures**: Logs sem dados sensíveis, monitoramento de atividade suspeita
103
+ - [ ] **A10 SSRF**: Validação de URLs, allowlists de destinos
104
+
105
+ ## Ferramentas recomendadas
106
+
107
+ | Categoria | Ferramenta | Linguagem |
108
+ |-----------|-----------|-----------|
109
+ | SAST | Semgrep, CodeQL, SonarQube | Multi-linguagem |
110
+ | Deps | npm audit, pip-audit, Snyk | JS, Python, multi |
111
+ | Secrets | gitleaks, truffleHog | Qualquer |
112
+ | DAST | OWASP ZAP, Nuclei | Web apps |
113
+ | Docker | Trivy, Grype | Containers |
114
+ | Infra | Checkov, tfsec | Terraform, Cloud |
115
+
116
+ ## Regras de segurança
117
+ - ✅ Scan de segurança deve rodar no CI/CD em cada PR
118
+ - ✅ Vulnerabilidades críticas bloqueiam merge
119
+ - ✅ Secrets encontrados devem ser revogados IMEDIATAMENTE
120
+ - ❌ Nunca ignorar CVEs críticos sem justificativa documentada
121
+ - ❌ Nunca publicar relatório de segurança detalhado em canal público
@@ -0,0 +1,129 @@
1
+ ---
2
+ name: test-engineer
3
+ description: Criação e melhoria de testes (unitários, integração, E2E, performance). Cobertura, TDD, mocking, fixtures e estratégias de teste.
4
+ triggers:
5
+ - teste
6
+ - test
7
+ - tdd
8
+ - unitário
9
+ - integração
10
+ - e2e
11
+ - end-to-end
12
+ - cobertura
13
+ - coverage
14
+ - mock
15
+ - fixture
16
+ - pytest
17
+ - jest
18
+ - vitest
19
+ - playwright
20
+ - cypress
21
+ - benchmark
22
+ - performance test
23
+ - load test
24
+ ---
25
+
26
+ # Test Engineer
27
+
28
+ ## Objetivo
29
+ Criar, melhorar e manter testes robustos (unitários, integração, E2E, performance), garantindo cobertura adequada e confiança no deploy.
30
+
31
+ ## Contexto necessário
32
+ - Linguagem/framework do projeto
33
+ - Framework de teste existente (Jest, Vitest, Pytest, Go test)
34
+ - Cobertura atual (se disponível)
35
+ - Áreas prioritárias ou código novo
36
+
37
+ ## Fluxo (inspect → plan → consent → apply → verify → audit)
38
+
39
+ 1. **INSPECT** (read-only):
40
+ - Verificar framework de teste configurado
41
+ - Medir cobertura atual por módulo
42
+ - Identificar áreas sem testes (módulos críticos)
43
+ - Listar funcionalidades sem cobertura E2E
44
+
45
+ 2. **PLAN** — Estratégia de testes por camada:
46
+
47
+ | Camada | Proporção (Pirâmide) | Framework sugerido |
48
+ |--------|---------------------|-------------------|
49
+ | Unitários | ~70% | Jest, Vitest, Pytest, Go test |
50
+ | Integração | ~20% | Supertest, httpx, testcontainers |
51
+ | E2E | ~10% | Playwright, Cypress |
52
+
53
+ 3. **CONSENT**: Confirmar escopo dos testes a criar
54
+ 4. **APPLY**: Gerar testes + fixtures + mocks
55
+ 5. **VERIFY**: Rodar testes, verificar cobertura
56
+ 6. **AUDIT**: Registrar métricas de cobertura antes/depois
57
+
58
+ ## Capacidades
59
+
60
+ ### 🧪 Testes Unitários
61
+ - Testes isolados de funções/classes
62
+ - Mocking de dependências externas (APIs, DB, FS)
63
+ - Parametrização para múltiplos cenários
64
+ - Edge cases: null, undefined, empty, overflow, unicode
65
+ - Padrão AAA: Arrange → Act → Assert
66
+
67
+ ### 🔗 Testes de Integração
68
+ - Testes de endpoints API (request → response)
69
+ - Testes com banco de dados real (testcontainers)
70
+ - Testes de filas/eventos (pub/sub, webhooks)
71
+ - Testes de contratos (consumer-driven contracts)
72
+
73
+ ### 🌐 Testes E2E (End-to-End)
74
+ - Fluxos críticos de usuário (login, checkout, signup)
75
+ - Testes visuais (screenshot comparison)
76
+ - Testes cross-browser (Chrome, Firefox, Safari)
77
+ - Testes de acessibilidade (axe-core)
78
+
79
+ ### ⚡ Testes de Performance
80
+ - Load testing (k6, Artillery, Locust)
81
+ - Benchmark de funções críticas
82
+ - Testes de latência e throughput
83
+ - Stress testing e limites de escalabilidade
84
+
85
+ ### 📊 Cobertura e Métricas
86
+ - Cobertura de linhas, branches, funções
87
+ - Mutation testing (Stryker, mutmut) para medir qualidade dos testes
88
+ - Relatórios de tendência (cobertura ao longo do tempo)
89
+
90
+ ## Checklists
91
+
92
+ ### Escrevendo testes unitários
93
+ - [ ] Nome descritivo: `should_return_error_when_input_is_empty`
94
+ - [ ] Um assert por teste (preferencialmente)
95
+ - [ ] Sem dependência de estado externo (DB, rede, FS)
96
+ - [ ] Mocks com reset/cleanup entre testes
97
+ - [ ] Cobrir happy path + edge cases + error cases
98
+ - [ ] Sem sleep/wait — usar async assertions
99
+
100
+ ### Escrevendo testes E2E
101
+ - [ ] Testar fluxo completo, não fragmentos
102
+ - [ ] Usar page objects / fixtures reutilizáveis
103
+ - [ ] Screenshots em caso de falha
104
+ - [ ] Retry para flakiness controlado
105
+ - [ ] Dados de teste isolados (seed + cleanup)
106
+
107
+ ### Antes de deploy
108
+ - [ ] Todos os testes passam
109
+ - [ ] Cobertura mínima atendida (ex: 80%+)
110
+ - [ ] Nenhum teste flaky (intermitente)
111
+ - [ ] Testes de regressão validam fix de bugs anteriores
112
+ - [ ] Performance baseline mantida
113
+
114
+ ## Ferramentas recomendadas
115
+
116
+ | Tipo | JavaScript/TS | Python | Go |
117
+ |------|--------------|--------|-----|
118
+ | Unitário | Jest, Vitest | Pytest | testing |
119
+ | API | Supertest | httpx, pytest-httpx | net/http/httptest |
120
+ | E2E | Playwright, Cypress | Playwright | chromedp |
121
+ | Performance | k6, Artillery | Locust | go-wrk |
122
+ | Cobertura | c8, istanbul | coverage.py | go test -cover |
123
+ | Mutation | Stryker | mutmut | go-mutesting |
124
+
125
+ ## Regras de segurança
126
+ - ✅ Testes nunca devem conter dados reais de produção
127
+ - ✅ Fixtures devem usar dados sintéticos (faker, factory)
128
+ - ❌ Nunca desabilitar testes que falham — investigar e corrigir
129
+ - ❌ Nunca testar contra APIs de produção (usar mocks ou staging)