@brunosps00/dev-workflow 0.4.7 → 0.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.
Files changed (64) hide show
  1. package/README.md +33 -6
  2. package/lib/constants.js +6 -0
  3. package/lib/install-deps.js +39 -1
  4. package/package.json +1 -1
  5. package/scaffold/en/commands/dw-adr.md +117 -0
  6. package/scaffold/en/commands/dw-autopilot.md +7 -0
  7. package/scaffold/en/commands/dw-brainstorm.md +6 -0
  8. package/scaffold/en/commands/dw-bugfix.md +9 -0
  9. package/scaffold/en/commands/dw-code-review.md +28 -0
  10. package/scaffold/en/commands/dw-create-tasks.md +12 -0
  11. package/scaffold/en/commands/dw-create-techspec.md +8 -0
  12. package/scaffold/en/commands/dw-fix-qa.md +5 -0
  13. package/scaffold/en/commands/dw-generate-pr.md +11 -0
  14. package/scaffold/en/commands/dw-help.md +44 -3
  15. package/scaffold/en/commands/dw-quick.md +8 -1
  16. package/scaffold/en/commands/dw-refactoring-analysis.md +1 -0
  17. package/scaffold/en/commands/dw-resume.md +10 -3
  18. package/scaffold/en/commands/dw-revert-task.md +114 -0
  19. package/scaffold/en/commands/dw-review-implementation.md +17 -0
  20. package/scaffold/en/commands/dw-run-plan.md +19 -1
  21. package/scaffold/en/commands/dw-run-task.md +14 -1
  22. package/scaffold/en/commands/dw-security-check.md +271 -0
  23. package/scaffold/en/commands/dw-update.md +39 -0
  24. package/scaffold/en/templates/adr-template.md +56 -0
  25. package/scaffold/en/templates/prd-template.md +12 -0
  26. package/scaffold/en/templates/task-template.md +12 -0
  27. package/scaffold/en/templates/tasks-template.md +6 -0
  28. package/scaffold/en/templates/techspec-template.md +12 -0
  29. package/scaffold/pt-br/commands/dw-adr.md +117 -0
  30. package/scaffold/pt-br/commands/dw-autopilot.md +7 -0
  31. package/scaffold/pt-br/commands/dw-brainstorm.md +6 -0
  32. package/scaffold/pt-br/commands/dw-bugfix.md +9 -0
  33. package/scaffold/pt-br/commands/dw-code-review.md +28 -0
  34. package/scaffold/pt-br/commands/dw-create-tasks.md +12 -0
  35. package/scaffold/pt-br/commands/dw-create-techspec.md +8 -0
  36. package/scaffold/pt-br/commands/dw-fix-qa.md +5 -0
  37. package/scaffold/pt-br/commands/dw-generate-pr.md +11 -0
  38. package/scaffold/pt-br/commands/dw-help.md +44 -3
  39. package/scaffold/pt-br/commands/dw-quick.md +8 -1
  40. package/scaffold/pt-br/commands/dw-refactoring-analysis.md +1 -0
  41. package/scaffold/pt-br/commands/dw-resume.md +10 -3
  42. package/scaffold/pt-br/commands/dw-revert-task.md +114 -0
  43. package/scaffold/pt-br/commands/dw-review-implementation.md +17 -0
  44. package/scaffold/pt-br/commands/dw-run-plan.md +19 -1
  45. package/scaffold/pt-br/commands/dw-run-task.md +14 -1
  46. package/scaffold/pt-br/commands/dw-security-check.md +271 -0
  47. package/scaffold/pt-br/commands/dw-update.md +40 -0
  48. package/scaffold/pt-br/templates/adr-template.md +56 -0
  49. package/scaffold/pt-br/templates/prd-template.md +12 -0
  50. package/scaffold/pt-br/templates/task-template.md +12 -0
  51. package/scaffold/pt-br/templates/tasks-template.md +6 -0
  52. package/scaffold/pt-br/templates/techspec-template.md +12 -0
  53. package/scaffold/skills/dw-council/SKILL.md +189 -0
  54. package/scaffold/skills/dw-council/agents/architect-advisor.md +44 -0
  55. package/scaffold/skills/dw-council/agents/devils-advocate.md +45 -0
  56. package/scaffold/skills/dw-council/agents/pragmatic-engineer.md +47 -0
  57. package/scaffold/skills/dw-council/agents/product-mind.md +48 -0
  58. package/scaffold/skills/dw-council/agents/security-advocate.md +48 -0
  59. package/scaffold/skills/dw-memory/SKILL.md +178 -0
  60. package/scaffold/skills/dw-review-rigor/SKILL.md +145 -0
  61. package/scaffold/skills/dw-verify/SKILL.md +196 -0
  62. package/scaffold/skills/security-review/languages/csharp.md +507 -0
  63. package/scaffold/skills/security-review/languages/rust.md +584 -0
  64. package/scaffold/skills/security-review/languages/typescript.md +373 -0
@@ -9,6 +9,13 @@ Você é um assistente especializado em execução sequencial de planos de desen
9
9
  ## Posição no Pipeline
10
10
  **Antecessor:** `/dw-create-tasks` | **Sucessor:** `/dw-code-review` e depois `/dw-generate-pr`
11
11
 
12
+ ## Skills Complementares
13
+
14
+ | Skill | Gatilho |
15
+ |-------|---------|
16
+ | `dw-memory` | **SEMPRE** — lê `MEMORY.md` antes de iniciar e aplica promotion test + compaction entre tasks |
17
+ | `dw-verify` | **SEMPRE** — invocada antes da Revisão Final Nível 2 e antes do "Plano Completo" |
18
+
12
19
  ## Objetivo
13
20
 
14
21
  Executar TODAS as tarefas pendentes de um projeto de forma sequencial e automática, marcando cada uma como concluída após a implementação bem-sucedida (cada task já inclui validação Nível 1), e realizando uma **revisão final Nível 2 (PRD compliance) com ciclo de correções**.
@@ -62,10 +69,19 @@ Para cada tarefa pendente (em ordem sequencial):
62
69
  - Se houver erros, reportar e PAUSAR para correção manual
63
70
  - Se bem-sucedido, continuar para próxima task
64
71
 
72
+ 5. **Compaction de memory entre tasks**
73
+ - Invocar `dw-memory` com flag de compaction em `MEMORY.md` a cada 3 tasks concluídas (ou quando o arquivo exceder ~150 linhas)
74
+ - Garantir que a próxima task leia um `MEMORY.md` enxuto e atualizado
75
+
65
76
  ### 3. Revisão Final Completa
66
77
 
67
78
  Quando todas as tarefas estiverem concluídas:
68
79
 
80
+ 0. **Verificação Final (Obrigatório antes do Nível 2)**
81
+ - Invocar `dw-verify` com o comando de verificação do projeto (test + lint + build, ou gate command documentado)
82
+ - Só prosseguir com o Nível 2 se o VERIFICATION REPORT for PASS
83
+ - Se FAIL: corrigir root cause, re-verificar e só então abrir a revisão de PRD compliance
84
+
69
85
  1. **Executar Revisão Geral**
70
86
  - Seguir `.dw/commands/dw-review-implementation.md` para TODAS as tasks
71
87
  - Gerar relatório completo de gaps e recomendações
@@ -99,7 +115,9 @@ Quando todas as tarefas estiverem concluídas:
99
115
  - Não haver mais recomendações, OU
100
116
  - Usuário decidir que pendências restantes são aceitáveis
101
117
 
102
- 4. **Relatório Final**
118
+ 4. **Relatório Final (após dw-verify PASS final)**
119
+
120
+ <critical>Antes de declarar "PLANO COMPLETO" ou "COMPLETO COM PENDÊNCIAS", invocar `dw-verify` uma última vez após a última correção. Sem PASS, não emita o relatório final.</critical>
103
121
 
104
122
  ```
105
123
  RELATÓRIO FINAL DO PLANO
@@ -18,6 +18,8 @@ Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como sup
18
18
 
19
19
  | Skill | Gatilho |
20
20
  |-------|---------|
21
+ | `dw-verify` | **SEMPRE** — invocada antes do commit para produzir Verification Report com evidence fresca |
22
+ | `dw-memory` | **SEMPRE** — lê memory da workflow no início e atualiza ao final da task (promotion test) |
21
23
  | `vercel-react-best-practices` | Task envolve renderização React, hidratação, data fetching, bundle, cache ou performance |
22
24
  | `webapp-testing` | Task tem frontend interativo que necessita validação E2E em navegador real |
23
25
 
@@ -51,6 +53,7 @@ Se `.planning/intel/` NÃO existir:
51
53
  - Revisar o contexto do PRD
52
54
  - Verificar requisitos da spec técnica (incluindo estratégia de testes)
53
55
  - Entender dependências de tarefas anteriores
56
+ - **Invocar `dw-memory`**: ler `.dw/spec/prd-[nome]/MEMORY.md` (shared) e `.dw/spec/prd-[nome]/tasks/[num]_memory.md` (task-local, criar se ausente) — decisões, constraints e handoff notes de tasks anteriores são contexto obrigatório
54
57
 
55
58
  ### 2. Análise da Tarefa
56
59
  Analise considerando:
@@ -169,9 +172,19 @@ Formato no tasks.md (adicionar após marcar a task como concluída):
169
172
  - **Se FALHA**: Corrija os problemas e re-execute a validação
170
173
  - **NÃO gere relatório em arquivo** - apenas output no terminal
171
174
 
175
+ ## Verificação Final (Obrigatório antes do commit)
176
+
177
+ <critical>Invocar a skill `dw-verify` antes de qualquer alegação de "task completa". Produzir um VERIFICATION REPORT com o comando de verificação real do projeto (test + lint + build) e exit code 0. Sem report PASS, NÃO prossiga para o commit.</critical>
178
+
179
+ ## Atualização de Memory (Obrigatório antes do commit)
180
+
181
+ Invocar `dw-memory` para:
182
+ - Atualizar `tasks/[num]_memory.md` com arquivos tocados, decisões não-óbvias e handoff notes
183
+ - Aplicar o **promotion test** (próxima task precisa? durável? não óbvio do repo?) e promover apenas o que passar para `MEMORY.md`
184
+
172
185
  ## Commit Automático (Obrigatório)
173
186
 
174
- Ao final da task (após validação Nível 1 passar), **sempre** fazer commit (sem push):
187
+ Ao final da task (após validação Nível 1 + dw-verify PASS + dw-memory atualizado), **sempre** fazer commit (sem push):
175
188
 
176
189
  ```bash
177
190
  git status
@@ -0,0 +1,271 @@
1
+ <system_instructions>
2
+ Você é um auditor de segurança rigoroso. Sua função é executar um **check de segurança multi-camada** em um projeto dev-workflow — review estático OWASP (language-aware para TypeScript, Python, C# e Rust), scan de dependências/secrets/IaC com Trivy, e audit nativo de lockfile — e emitir um veredicto bloqueante sem bypass.
3
+
4
+ <critical>Este command é rígido. Findings CRITICAL ou HIGH produzem status REJECTED. NÃO existe flag `--skip`, `--ignore` ou allowlist. Findings são corrigidos ou o veredicto se mantém.</critical>
5
+ <critical>Linguagens suportadas nesta release: TypeScript/JavaScript, Python, C#, Rust. Se nenhuma for detectada no escopo, aborta com mensagem clara.</critical>
6
+
7
+ ## Quando Usar
8
+ - Antes de `/dw-code-review` como camada de segurança para qualquer projeto TS/Python/C#/Rust
9
+ - Antes de `/dw-generate-pr` para garantir que nenhuma vulnerabilidade HIGH/CRITICAL entre no PR
10
+ - Invocado automaticamente por `/dw-review-implementation` quando o diff toca código em linguagem suportada
11
+ - Manualmente ao auditar dependências após adicionar um novo pacote
12
+ - NÃO use para auto-fix (este command detecta; remediação é manual ou via `/dw-fix-qa`)
13
+ - NÃO use para DAST — este é SAST + SCA + IaC scan (`/dw-run-qa` cobre runtime)
14
+
15
+ ## Posição no Pipeline
16
+ **Antecessor:** `/dw-run-plan` ou `/dw-run-task` (código commitado) | **Sucessor:** `/dw-code-review` (que hard-gates no resultado deste command para linguagens suportadas)
17
+
18
+ ## Skills Complementares
19
+
20
+ | Skill | Gatilho |
21
+ |-------|---------|
22
+ | `security-review` | **SEMPRE** — knowledge base OWASP primário; regras específicas por linguagem em `languages/{typescript,python,csharp,rust}.md`, tópicos cross-cutting em `references/*.md` |
23
+ | `dw-review-rigor` | **SEMPRE** — aplica de-duplication (mesmo pattern em N arquivos = 1 finding), severity ordering, verify-intent-before-flag, skip-what-linter-catches, signal-over-volume |
24
+ | `dw-verify` | **SEMPRE** — um VERIFICATION REPORT (comando Trivy + exit code + summary) deve estar presente antes de qualquer status ser emitido |
25
+
26
+ ## Variáveis de Entrada
27
+
28
+ | Variável | Descrição | Exemplo |
29
+ |----------|-----------|---------|
30
+ | `{{SCOPE}}` | Path do PRD OU path de código-fonte. Opcional — default é `.dw/spec/prd-<slug>` inferido da branch `feat/prd-<slug>` | `.dw/spec/prd-checkout-v2` ou `src/` |
31
+
32
+ Se `{{SCOPE}}` não for fornecido e nenhum PRD está ativo, aborta pedindo escopo explícito.
33
+
34
+ ## Localização dos Arquivos
35
+
36
+ - Report (scope PRD): `{{SCOPE}}/security-check.md`
37
+ - Report (scope não-PRD): stdout
38
+ - Arquivos de referência por linguagem: `.agents/skills/security-review/languages/{typescript,javascript,python,csharp,rust}.md`
39
+ - Refs OWASP cross-cutting: `.agents/skills/security-review/references/*.md`
40
+
41
+ ## Comportamento Obrigatório — Pipeline (executar em ordem, sem bypass)
42
+
43
+ ### 0. Detectar Linguagens no Escopo
44
+
45
+ Enumere arquivos em escopo e detecte linguagens:
46
+
47
+ | Linguagem | Indicadores |
48
+ |-----------|-------------|
49
+ | TypeScript / JavaScript | `tsconfig.json`, `package.json`, `*.ts`, `*.tsx`, `*.js`, `*.jsx`, `*.mjs` |
50
+ | Python | `pyproject.toml`, `requirements*.txt`, `Pipfile`, `poetry.lock`, `setup.py`, `*.py` |
51
+ | C# / .NET | `*.csproj`, `*.sln`, `packages.config`, `Directory.Build.props`, `*.cs`, `*.cshtml`, `*.razor` |
52
+ | Rust | `Cargo.toml`, `Cargo.lock`, `*.rs`, `rust-toolchain.toml` |
53
+
54
+ - Se **nenhuma** das quatro é detectada → **abortar** com:
55
+ `"dw-security-check suporta TypeScript, Python, C# e Rust nesta release. Nenhum arquivo em linguagens suportadas foi encontrado em <scope>. Abortando."`
56
+ - Se **uma ou mais** são detectadas → prosseguir; repos poliglotas rodam todas as camadas aplicáveis e o report tem uma seção por linguagem.
57
+
58
+ Registre a(s) linguagem(ns) detectadas — elas controlam qual arquivo `languages/*.md` o review estático consulta e qual audit nativo roda.
59
+
60
+ ### 1. Review Estático de Código (Language-Aware)
61
+
62
+ Para cada linguagem detectada, invoque a skill `security-review` usando o(s) arquivo(s) de referência correspondente(s) como guia primário:
63
+
64
+ - **TS/JS** → `languages/typescript.md` + `languages/javascript.md`
65
+ - **Python** → `languages/python.md`
66
+ - **C#** → `languages/csharp.md`
67
+ - **Rust** → `languages/rust.md`
68
+ - **Cross-cutting** (todas) → `references/{injection,xss,csrf,ssrf,cryptography,authentication,authorization,deserialization,supply-chain,secrets,file-security,api-security}.md` conforme aplicável
69
+
70
+ Aplique as cinco regras do `dw-review-rigor`:
71
+ 1. De-duplicate: mesmo pattern em N arquivos → 1 finding com lista de affected files
72
+ 2. Severity ordering: CRITICAL → HIGH → MEDIUM → LOW
73
+ 3. Verificar intent antes de flaggar: comentários adjacentes, ADRs, testes, `.dw/rules/`
74
+ 4. Pular o que o linter já pega
75
+ 5. Signal over volume: manter TODOS os CRITICAL/HIGH; podar MEDIUM/LOW aos mais impactantes
76
+
77
+ ### 1.5. Context7 MCP — Best Practices de Framework (OBRIGATÓRIO quando framework detectado)
78
+
79
+ <critical>Quando o escopo tem framework detectável, VOCÊ DEVE consultar o Context7 MCP para best practices atualizadas antes de aplicar checks específicos de framework. Conhecimento offline pode estar desatualizado.</critical>
80
+
81
+ Detecção de framework e query:
82
+
83
+ | Linguagem | Fonte de detecção | Exemplos de query Context7 |
84
+ |-----------|-------------------|----------------------------|
85
+ | TS/JS | deps em `package.json` | `"next.js 14 security best practices app router"`, `"nestjs 10 authentication guards"`, `"remix v2 csrf"` |
86
+ | Python | `pyproject.toml` / `requirements.txt` | `"django 5 security checklist"`, `"fastapi pydantic validation"`, `"flask-login secure cookies"` |
87
+ | C# | `PackageReference` em `*.csproj` | `"asp.net core 8 jwt bearer"`, `"blazor server antiforgery"`, `"minimal apis authorization"` |
88
+ | Rust | `[dependencies]` em `Cargo.toml` | `"actix-web 4 security middleware"`, `"axum 0.7 extractor auth"`, `"rocket 0.5 forms csrf"`, `"sqlx query macros"` |
89
+
90
+ Para cada framework+versão detectado:
91
+ 1. Monte a query com nome do framework + versão major/minor detectada + tópico (auth, CSP, cookies, server actions, etc.)
92
+ 2. Invoque o Context7 MCP
93
+ 3. Incorpore a guidance retornada como contexto vivo ao revisar código framework-específico
94
+ 4. Se resultado do Context7 contradizer conhecimento offline em `languages/*.md`, **Context7 vence** — cite a fonte no finding
95
+
96
+ Se Context7 MCP não estiver disponível no ambiente:
97
+ - Degrade para conhecimento offline apenas
98
+ - **Adicione aviso visível** no report: `⚠️ Context7 MCP indisponível — checks framework-version-specific usaram conhecimento offline; best practices para <framework@versão> podem estar desatualizadas.`
99
+
100
+ ### 2. Scan de Dependências + Secrets + IaC (Trivy)
101
+
102
+ <critical>Trivy deve estar instalado. Se ausente, aborte com: `"Trivy não encontrado. Instale via 'brew install trivy' (macOS) ou equivalente; ver instruções em 'npx @brunosps00/dev-workflow install-deps'."`</critical>
103
+
104
+ Execute:
105
+
106
+ ```bash
107
+ trivy fs --scanners vuln,secret,misconfig --severity HIGH,CRITICAL --exit-code 1 --format json --output /tmp/dw-trivy-fs.json <scope-path>
108
+ ```
109
+
110
+ Parse o JSON de saída. O scan cobre:
111
+ - **Vulnerabilidades** em manifests: `package.json`/`package-lock.json`/`pnpm-lock.yaml`/`yarn.lock` (TS/JS), `requirements*.txt`/`Pipfile.lock`/`poetry.lock` (Python), `*.csproj`/`packages.lock.json` (C# / NuGet)
112
+ - **Secrets**: API keys, tokens, chaves privadas commitadas acidentalmente
113
+ - **Misconfig**: surface-level — complementado pelo step 3 para IaC
114
+
115
+ Capture o comando exato e exit code; inclua ambos no VERIFICATION REPORT (step 5).
116
+
117
+ ### 3. Scan de Config IaC (Trivy)
118
+
119
+ Execute:
120
+
121
+ ```bash
122
+ trivy config --severity HIGH,CRITICAL --format json --output /tmp/dw-trivy-config.json <scope-path>
123
+ ```
124
+
125
+ Cobre Dockerfile, manifests Kubernetes, Terraform, CloudFormation, GitHub Actions workflows, Helm charts, AWS CDK.
126
+
127
+ ### 4. Audit Nativo de Lockfile (por linguagem, segundo sinal)
128
+
129
+ Para cada linguagem detectada, rode a ferramenta nativa de audit (se disponível). Trate o output como segundo sinal — Trivy é primário; isto cobre lacunas.
130
+
131
+ | Linguagem | Comando primário | Fallback |
132
+ |-----------|------------------|----------|
133
+ | TS/JS (npm) | `npm audit --production --audit-level=high --json` | `npm audit --production` (human) |
134
+ | TS/JS (pnpm) | `pnpm audit --prod --audit-level high --json` | — |
135
+ | TS/JS (yarn) | `yarn npm audit --severity high --recursive --json` | — |
136
+ | Python | `pip-audit --strict --format json` | pular com nota se `pip-audit` ausente |
137
+ | C# | `dotnet list package --vulnerable --include-transitive` | — |
138
+ | Rust | `cargo audit --json` | pular com nota se `cargo-audit` não instalado (instalar via `cargo install cargo-audit`); opcionalmente `cargo deny check advisories` |
139
+
140
+ Se a ferramenta retornar exit ≠ 0 ou reportar HIGH/CRITICAL, escalar para REJECTED (mesma política do Trivy).
141
+
142
+ ### 5. VERIFICATION REPORT (dw-verify)
143
+
144
+ Antes de emitir status, produza um VERIFICATION REPORT conforme skill `dw-verify`. Formato obrigatório:
145
+
146
+ ```
147
+ VERIFICATION REPORT
148
+ -------------------
149
+ Claim: Security check completo para <scope> (linguagens: <lista>)
150
+ Commands:
151
+ - trivy fs ... --exit-code 1 → exit <N>, findings: C=<x> H=<y>
152
+ - trivy config ... → exit <N>, findings: C=<x> H=<y>
153
+ - <audit nativo> → exit <N>, findings: ...
154
+ Executed: just now, after all changes
155
+ Static review: <X> findings (C=<a> H=<b> M=<c> L=<d>)
156
+ Framework context: Context7 MCP [consultado | indisponível]
157
+ Verdict: <CLEAN | PASSED WITH OBSERVATIONS | REJECTED>
158
+ ```
159
+
160
+ ### 6. Emitir Status (gates rígidos)
161
+
162
+ | Condição | Status |
163
+ |----------|--------|
164
+ | Qualquer finding CRITICAL (estático OU Trivy OU audit nativo) | **REJECTED** |
165
+ | Qualquer finding HIGH | **REJECTED** |
166
+ | Apenas findings MEDIUM / LOW | **PASSED WITH OBSERVATIONS** |
167
+ | Zero findings | **CLEAN** |
168
+
169
+ <critical>Nenhum finding é "aceito como ressalva" em HIGH ou acima. O usuário pode escolher corrigir e re-rodar, ou registrar um ADR documentando por que o risco é aceito — mas o veredicto deste command não muda.</critical>
170
+
171
+ ## Formato do Report
172
+
173
+ Salvar em `{{SCOPE}}/security-check.md` (quando scope PRD) com frontmatter:
174
+
175
+ ```markdown
176
+ ---
177
+ type: security-check
178
+ schema_version: "1.0"
179
+ status: <CLEAN | PASSED WITH OBSERVATIONS | REJECTED>
180
+ date: YYYY-MM-DD
181
+ languages: [typescript, python, csharp, rust]
182
+ ---
183
+
184
+ # Security Check — <nome da feature>
185
+
186
+ ## Status: <STATUS>
187
+
188
+ <resumo curto>
189
+
190
+ ## VERIFICATION REPORT
191
+ <bloco do step 5>
192
+
193
+ ## Findings
194
+
195
+ ### Critical (<count>)
196
+ - **[CRITICAL]** `path/to/file.ts:42` — <título ≤72 chars>
197
+ <descrição>
198
+ <remediação>
199
+ Também afeta: <outros paths se de-duplicado>
200
+ Evidência: <snippet ou CVE id>
201
+
202
+ ### High (<count>)
203
+ ...
204
+
205
+ ### Medium (<count>)
206
+ ...
207
+
208
+ ### Low (<count>)
209
+ ...
210
+
211
+ ## Vulnerabilidades de Dependência (Trivy)
212
+
213
+ | CVE | Pacote | Instalada | Corrigida em | Severidade | Path |
214
+ |-----|--------|-----------|--------------|------------|------|
215
+ | CVE-... | ... | ... | ... | CRITICAL | package-lock.json |
216
+
217
+ ## Secrets Encontrados (Trivy)
218
+
219
+ | Regra | Arquivo | Linha |
220
+ |-------|---------|-------|
221
+ | aws-access-key-id | src/config.ts | 14 |
222
+
223
+ ## Misconfigurations IaC (Trivy config)
224
+
225
+ | Regra | Arquivo | Severidade | Descrição |
226
+ |-------|---------|------------|-----------|
227
+ | AVD-DS-0002 | Dockerfile | HIGH | Rodando como root |
228
+
229
+ ## Best Practices de Framework (Context7)
230
+
231
+ Para cada framework consultado, um parágrafo resumindo a guidance aplicada.
232
+
233
+ Se Context7 estava indisponível, incluir o bloco de aviso.
234
+
235
+ ## Pontos Bem-Implementados
236
+ - <lista curta para calibrar tom; não afeta verdict>
237
+
238
+ ## Recomendações
239
+ 1. <ação para findings bloqueantes>
240
+ 2. <ação para observations>
241
+ ```
242
+
243
+ ## Integração com Outros Commands dw-*
244
+
245
+ - **`/dw-code-review`** (Nível 3): para projetos TS/Python/C#/Rust, invoca este command como step 6.7 "Camada de Segurança" e hard-gates no resultado. APROVADO não pode ser emitido se `security-check.md` ausente ou REJECTED.
246
+ - **`/dw-review-implementation`** (Nível 2): para projetos TS/Python/C#/Rust que tocam código, invoca este command e mapeia seus findings em uma categoria "Security Gaps" no ciclo interativo de correções.
247
+ - **`/dw-generate-pr`**: hard gate — para projetos em linguagem suportada, bloqueia o PR se `security-check.md` ausente ou REJECTED na sessão atual.
248
+ - **`/dw-bugfix --análise`**: se a área da causa raiz envolve auth / secrets / input externo, sugere rodar este command antes do fix.
249
+
250
+ ## Regras Críticas
251
+
252
+ - <critical>SEM flag de bypass. O command NÃO aceita `--skip`, `--ignore`, `--allowlist`.</critical>
253
+ - <critical>Trivy é obrigatório. Se ausente, aborte com instruções de instalação. NÃO pule silenciosamente a camada SCA.</critical>
254
+ - <critical>Context7 MCP é consultado quando frameworks são detectados. Degradação para modo offline deve ser visível no report.</critical>
255
+ - NÃO modifique código-fonte — este command só detecta.
256
+ - NÃO re-flagge findings já trackados como aceitos em ADR prévio (`.dw/spec/*/adrs/adr-*.md` com status `Accepted` e tópico cobrindo o finding).
257
+ - Se rodando sem scope PRD (path raw), emita o report em stdout — não escreva em locais arbitrários.
258
+
259
+ ## Tratamento de Erros
260
+
261
+ - Trivy ausente → aborte com instruções de instalação (ver `install-deps`)
262
+ - `.dw/spec/<slug>/` ausente → verifique se escopo é path raw; caso contrário aborte pedindo escopo explícito
263
+ - Ferramenta de audit nativo ausente (ex: `pip-audit`) → pule com nota visível no report; não falhe
264
+ - Context7 MCP indisponível → aviso visível no report; não falhe
265
+ - Escopo contém 0 arquivos de linguagens suportadas → aborta (ver step 0)
266
+
267
+ ## Inspired by
268
+
269
+ `dw-security-check` é dev-workflow-native. Conceitualmente inspirado pelas skills open-source surfaced via `/find-skills` (`supercent-io/skills-template@security-best-practices`, `hoodini/ai-agents-skills@owasp-security`, `github/awesome-copilot@agent-owasp-compliance`), mas implementado do zero com integração nativa às primitivas do dev-workflow (`dw-verify`, `dw-review-rigor`, `security-review`) e ao Trivy — nenhuma das quais essas skills integram.
270
+
271
+ </system_instructions>
@@ -10,8 +10,28 @@ Você é um utilitário de atualização. Quando invocado, atualize o dev-workfl
10
10
  ## Posição no Pipeline
11
11
  **Antecessor:** (qualquer) | **Sucessor:** (qualquer)
12
12
 
13
+ ## Modos
14
+
15
+ - **Update (padrão)**: `/dw-update` — atualiza para a versão mais recente no npm
16
+ - **Rollback**: `/dw-update --rollback` — restaura o snapshot mais recente em `.dw/.backup/` (cria antes de cada update)
17
+
13
18
  ## Comportamento
14
19
 
20
+ ### 0. Snapshot Antes do Update (Obrigatório no modo padrão)
21
+
22
+ Antes de sobrescrever arquivos gerenciados, crie um snapshot:
23
+
24
+ ```bash
25
+ SNAPSHOT_DIR=".dw/.backup/$(date -u +%Y%m%dT%H%M%SZ)"
26
+ mkdir -p "$SNAPSHOT_DIR"
27
+ cp -r .dw/commands .dw/templates .dw/references .dw/scripts "$SNAPSHOT_DIR/" 2>/dev/null
28
+ # agents/skills (bundled) tambem fazem parte do update
29
+ [ -d .agents/skills ] && cp -r .agents/skills "$SNAPSHOT_DIR/agents-skills" 2>/dev/null
30
+ echo "Snapshot salvo em $SNAPSHOT_DIR"
31
+ ```
32
+
33
+ Manter apenas os 3 snapshots mais recentes (remover os mais antigos) para evitar acumulo.
34
+
15
35
  ### 1. Registrar Versão Atual (Obrigatório)
16
36
 
17
37
  Antes de atualizar, capture a versão instalada para poder reportar o delta:
@@ -84,6 +104,26 @@ Se comandos/skills foram atualizados, lembre o usuário:
84
104
  - Rode `/dw-help` após o reload para ver o conjunto atualizado de comandos
85
105
  - Se o release mudou dependências de sistema (Playwright, MCPs), rode `npx dev-workflow install-deps` separadamente
86
106
 
107
+ ## Modo Rollback
108
+
109
+ Se invocado com `--rollback`:
110
+
111
+ 1. Listar snapshots em `.dw/.backup/`
112
+ 2. Se nenhum existir: PARAR e reportar "Nenhum snapshot disponível"
113
+ 3. Se mais de um existir: perguntar ao usuário qual restaurar (padrão: mais recente)
114
+ 4. Confirmar com o usuário: "Restaurar snapshot `<path>`? Isso SOBRESCREVE `.dw/commands/`, `.dw/templates/`, `.dw/references/`, `.dw/scripts/` e `.agents/skills/`. Prosseguir? [s/N]"
115
+ 5. Somente após `s`: copiar de volta
116
+
117
+ ```bash
118
+ cp -r "$SNAPSHOT_DIR/commands" .dw/
119
+ cp -r "$SNAPSHOT_DIR/templates" .dw/
120
+ cp -r "$SNAPSHOT_DIR/references" .dw/ 2>/dev/null
121
+ cp -r "$SNAPSHOT_DIR/scripts" .dw/ 2>/dev/null
122
+ [ -d "$SNAPSHOT_DIR/agents-skills" ] && cp -r "$SNAPSHOT_DIR/agents-skills" .agents/skills 2>/dev/null
123
+ ```
124
+
125
+ 6. Reportar: snapshot restaurado, versão provavelmente recuperada (ler de `.dw/commands/dw-help.md` ou metadata se houver)
126
+
87
127
  ## Opções Avançadas
88
128
 
89
129
  Se o usuário pedir uma versão específica (não `@latest`):
@@ -0,0 +1,56 @@
1
+ ---
2
+ id: NNN
3
+ status: Proposed
4
+ title: [Título imperativo curto da decisão]
5
+ date: YYYY-MM-DD
6
+ prd: [slug do PRD, ex: prd-user-auth]
7
+ schema_version: "1.0"
8
+ supersedes: null
9
+ superseded_by: null
10
+ ---
11
+
12
+ # ADR-NNN: [Título]
13
+
14
+ ## Status
15
+
16
+ Proposed | Accepted | Deprecated | Superseded by ADR-XXX
17
+
18
+ ## Context
19
+
20
+ [Contexto do problema. Quais forças motivadoras levaram a esta decisão?
21
+ 1-3 parágrafos curtos. Foque em "por que estamos decidindo agora" — não conte toda a história do projeto.]
22
+
23
+ ## Decision
24
+
25
+ [A decisão tomada. Comece com um verbo ("Adotar", "Usar", "Migrar para", "Rejeitar").
26
+ 1 frase acionável, seguida de 1-3 frases de detalhe se necessário.]
27
+
28
+ ## Alternatives Considered
29
+
30
+ 1. **[Alternativa 1]** — [o que era, por que não foi escolhida. 1-2 frases.]
31
+ 2. **[Alternativa 2]** — [o que era, por que não foi escolhida. 1-2 frases.]
32
+ 3. **[Adicione mais se relevante.]**
33
+
34
+ ## Consequences
35
+
36
+ ### Positivas
37
+ - [Consequência positiva 1]
38
+ - [Consequência positiva 2]
39
+
40
+ ### Negativas
41
+ - [Custo aceito 1 — não omita]
42
+ - [Custo aceito 2]
43
+
44
+ ### Neutras / Mitigações
45
+ - [Tradeoff sem viés, ou plano de mitigação]
46
+
47
+ ## Related
48
+
49
+ - PRD: `.dw/spec/[prd-slug]/prd.md`
50
+ - TechSpec: `.dw/spec/[prd-slug]/techspec.md` (se aplicável)
51
+ - Tasks afetadas: [lista de tasks, se aplicável]
52
+ - ADRs relacionadas: [lista, se aplicável]
53
+
54
+ ## References
55
+
56
+ - [Links para documentação externa, RFC, post, issue]
@@ -1,3 +1,9 @@
1
+ ---
2
+ type: prd
3
+ schema_version: "1.0"
4
+ status: draft
5
+ ---
6
+
1
7
  # Template de Documento de Requisitos de Produto (PRD)
2
8
 
3
9
  ## Visão Geral
@@ -68,3 +74,9 @@ Detalhes de implementação serão abordados na Especificação Técnica.]
68
74
  - Perguntas sobre necessidades do usuário ou objetivos de negócio
69
75
  - Dependências de fatores de negócio externos
70
76
  - Áreas requerendo design ou pesquisa de usuário]
77
+
78
+ ## Related ADRs
79
+
80
+ [Liste ADRs que constrangem ou informam esta feature. Deixe vazio se não houver. Use `/dw-adr` para registrar uma decisão que surgir durante a execução.
81
+
82
+ - `adrs/adr-NNN.md` — [título curto]]
@@ -1,3 +1,9 @@
1
+ ---
2
+ type: task
3
+ schema_version: "1.0"
4
+ status: pending
5
+ ---
6
+
1
7
  # Tarefa X.0: [Título da Tarefa Principal]
2
8
 
3
9
  <critical>Ler os arquivos de prd.md e techspec.md desta pasta, se você não ler esses arquivos sua tarefa será invalidada</critical>
@@ -60,3 +66,9 @@ git commit -m "feat([modulo]): [descrição]
60
66
  - [item 2]
61
67
  - Add unit tests"
62
68
  ```
69
+
70
+ ## Related ADRs
71
+
72
+ [ADRs que restringem decisões desta task. Deixe vazio se não houver.
73
+
74
+ - `adrs/adr-NNN.md` — [título curto, como a decisão afeta esta task]]
@@ -1,3 +1,9 @@
1
+ ---
2
+ type: tasks-index
3
+ schema_version: "1.0"
4
+ status: draft
5
+ ---
6
+
1
7
  # Resumo de Tarefas de Implementação de [Funcionalidade]
2
8
 
3
9
  ## Branch
@@ -1,3 +1,9 @@
1
+ ---
2
+ type: techspec
3
+ schema_version: "1.0"
4
+ status: draft
5
+ ---
6
+
1
7
  # Template de Especificação Técnica
2
8
 
3
9
  ## Resumo Executivo
@@ -121,3 +127,9 @@ type NomeServico interface {
121
127
  ### Arquivos Relevantes
122
128
 
123
129
  [Liste aqui arquivos relevantes do projeto]
130
+
131
+ ## Related ADRs
132
+
133
+ [Liste ADRs arquiteturais que constrangem ou informam este techspec. Deixe vazio se não houver. Use `/dw-adr` durante a execução para registrar decisões novas.
134
+
135
+ - `adrs/adr-NNN.md` — [título curto]]