@brunosps00/dev-workflow 1.0.0 → 1.0.2

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 (36) hide show
  1. package/README.md +18 -9
  2. package/lib/constants.js +10 -6
  3. package/lib/init.js +28 -0
  4. package/package.json +1 -1
  5. package/scaffold/en/agent-instructions.md +28 -3
  6. package/scaffold/en/commands/dw-analyze-project.md +64 -0
  7. package/scaffold/en/commands/dw-autopilot.md +64 -5
  8. package/scaffold/en/commands/dw-brainstorm.md +166 -23
  9. package/scaffold/en/commands/dw-bugfix.md +124 -26
  10. package/scaffold/en/commands/dw-intel.md +30 -3
  11. package/scaffold/en/commands/dw-pause.md +92 -0
  12. package/scaffold/en/commands/dw-qa.md +87 -11
  13. package/scaffold/en/commands/dw-resume.md +90 -0
  14. package/scaffold/en/commands/dw-review.md +22 -12
  15. package/scaffold/en/templates/bugfix-summary-template.md +66 -0
  16. package/scaffold/en/templates/concerns-template.md +59 -0
  17. package/scaffold/en/templates/state-template.md +59 -0
  18. package/scaffold/pt-br/agent-instructions.md +28 -3
  19. package/scaffold/pt-br/commands/dw-analyze-project.md +64 -0
  20. package/scaffold/pt-br/commands/dw-autopilot.md +64 -5
  21. package/scaffold/pt-br/commands/dw-brainstorm.md +166 -23
  22. package/scaffold/pt-br/commands/dw-bugfix.md +134 -18
  23. package/scaffold/pt-br/commands/dw-intel.md +30 -3
  24. package/scaffold/pt-br/commands/dw-pause.md +92 -0
  25. package/scaffold/pt-br/commands/dw-qa.md +87 -11
  26. package/scaffold/pt-br/commands/dw-resume.md +90 -0
  27. package/scaffold/pt-br/commands/dw-review.md +22 -12
  28. package/scaffold/pt-br/templates/bugfix-summary-template.md +66 -0
  29. package/scaffold/pt-br/templates/concerns-template.md +59 -0
  30. package/scaffold/pt-br/templates/state-template.md +59 -0
  31. package/scaffold/skills/dw-codebase-intel/SKILL.md +9 -5
  32. package/scaffold/skills/dw-codebase-intel/references/query-patterns.md +52 -0
  33. package/scaffold/skills/dw-memory/SKILL.md +26 -1
  34. package/scaffold/skills/dw-memory/references/context-budget.md +63 -0
  35. package/scaffold/skills/dw-simplification/SKILL.md +10 -5
  36. package/scaffold/skills/dw-simplification/references/deep-modules.md +105 -0
@@ -9,7 +9,30 @@
9
9
  - NÃO use para corrigir bugs encontrados durante testes de QA (use `/dw-qa --fix` em vez disso)
10
10
 
11
11
  ## Posição no Pipeline
12
- **Antecessor:** (bug report) | **Sucessor:** `/dw-commit` e depois `/dw-generate-pr`
12
+ **Antecessor:** (bug report) | **Sucessor:** `/dw-commit` e depois `/dw-generate-pr` (opcionalmente `/dw-review --bugfix <slug>` e `/dw-qa --bugfix <slug>` no meio para rigor extra)
13
+
14
+ ## Localização dos Arquivos
15
+
16
+ Todo bugfix tem uma entrada de índice em `.dw/bugfixes/`. Modo Direto mantém o artefato completo lá. Modo Análise e escalações via safety valve dividem: a entrada de índice fica em `.dw/bugfixes/`, mas o `prd.md` que o `/dw-plan` vai consumir é colocado em `.dw/spec/prd-bugfix-<slug>/` (o path que `/dw-plan techspec` e `/dw-plan tasks` já esperam).
17
+
18
+ **Casa do índice — sempre criada:**
19
+
20
+ - Diretório de índice do bugfix: `.dw/bugfixes/NNN-<slug>/` (NNN com 3 dígitos, sequencial em todos os bugfixes já registrados)
21
+ - Artefatos modo Direto aqui: `TASK.md` (triagem + plano), `fix-report.md` (evidência de verify), `SUMMARY.md` (registro de uma página)
22
+ - Artefatos modo Análise / escalação aqui: `TASK.md` (triagem + plano que seria executado), `escalated.md` (uma linha apontando para o diretório do spec que assumiu)
23
+ - Saída de review downstream (quando `/dw-review --bugfix <slug>` roda): `.dw/bugfixes/NNN-<slug>/review/`
24
+ - Saída de QA downstream (quando `/dw-qa --bugfix <slug>` roda): `.dw/bugfixes/NNN-<slug>/QA/`
25
+
26
+ **Casa do spec — criada apenas em Análise ou escalação via safety valve:**
27
+
28
+ - Diretório de spec: `.dw/spec/prd-bugfix-<slug>/`
29
+ - `prd.md` mora aqui (NÃO em `.dw/bugfixes/`) para que `/dw-plan techspec prd-bugfix-<slug>` e `/dw-plan tasks prd-bugfix-<slug>` operem contra o path que foram desenhados, sem nenhuma modificação ao `/dw-plan`.
30
+
31
+ **Templates:** `.dw/templates/bugfix-template.md` (para `TASK.md`/`prd.md`), `.dw/templates/bugfix-summary-template.md` (para `SUMMARY.md`), `.dw/templates/pr-bugfix-template.md` (para o corpo do PR).
32
+
33
+ **Descoberta do próximo NNN:** liste `.dw/bugfixes/`, parseie o prefixo de 3 dígitos de cada diretório, tome `max + 1` (ou `1` se vazio). Crie o diretório antes de escrever qualquer coisa. O mesmo `NNN-<slug>` é usado para nomear a parte slug do diretório de spec (ex: bugfix `007-stripe-webhook-retry` escala para spec `.dw/spec/prd-bugfix-stripe-webhook-retry/`).
34
+
35
+ **Slug:** kebab-case derivado de `{{BUG_DESCRIPTION}}` (ex: "login-nao-funciona", "erro-500-salvar-usuario").
13
36
 
14
37
  ## Skills Complementares
15
38
 
@@ -34,23 +57,23 @@
34
57
 
35
58
  | Modo | Quando Usar | Resultado |
36
59
  |------|-------------|-----------|
37
- | **Direto** (padrão) | Bug simples, <=5 arquivos, sem migration | Executa correção imediata |
38
- | **Análise** (`--análise`) | Bug complexo, precisa planejamento | Gera `.dw/spec/dw-bugfix-*/prd.md` para techspec -> tasks |
60
+ | **Direto** (padrão) | Bug simples, <=5 arquivos, sem migration, <=5 tasks numeradas | Executa correção imediata; persiste `TASK.md` + `fix-report.md` + `SUMMARY.md` em `.dw/bugfixes/NNN-<slug>/` |
61
+ | **Análise** (`--análise`) | Bug complexo, precisa planejamento | Divide: `.dw/bugfixes/NNN-<slug>/{TASK.md, escalated.md}` como entrada de índice + `.dw/spec/prd-bugfix-<slug>/prd.md` para o pipeline techspec -> tasks |
39
62
 
40
63
  ### Modo Análise
41
64
 
42
- Quando o usuário especificar `--análise` ou quando detectar que o bug precisa de mais planejamento:
65
+ Quando o usuário especificar `--análise` ou quando o safety valve (passo 5.0) disparar:
43
66
 
44
67
  ```
45
68
  /dw-bugfix meu-projeto "Login não funciona" --análise
46
69
  ```
47
70
 
48
71
  Neste modo:
49
- 1. Segue o fluxo normal de perguntas e análise
50
- 2. Em vez de executar, gera documento em `.dw/spec/dw-bugfix-[nome]/prd.md`
51
- 3. O arquivo é nomeado `prd.md` para manter compatibilidade com o pipeline dw-create-techspec/dw-plan tasks
52
- 4. Depois o usuário pode rodar `/dw-plan techspec .dw/spec/dw-bugfix-[nome]`
53
- 5. E então `/dw-plan tasks .dw/spec/dw-bugfix-[nome]`
72
+ 1. Segue o fluxo normal de perguntas e análise.
73
+ 2. Aloca `NNN` e cria `.dw/bugfixes/NNN-<slug>/`. Escreve `TASK.md` (a triagem + respostas + plano que seria executado mas não roda aqui).
74
+ 3. Cria o diretório de spec `.dw/spec/prd-bugfix-<slug>/` e escreve `prd.md` (usando `.dw/templates/bugfix-template.md`). Este é o path que `/dw-plan techspec` e `/dw-plan tasks` já sabem operar.
75
+ 4. Escreve `.dw/bugfixes/NNN-<slug>/escalated.md` com exatamente uma linha: `Escalated to /dw-plan on <YYYY-MM-DD> → see .dw/spec/prd-bugfix-<slug>/`. Esse cross-reference permite que `/dw-intel --build` inclua o bugfix em `bugfixes.json` mesmo com o planejamento ativo acontecendo em `.dw/spec/`.
76
+ 5. Avise ao usuário os próximos comandos: `/dw-plan techspec prd-bugfix-<slug>` e `/dw-plan tasks prd-bugfix-<slug>`.
54
77
 
55
78
  ## Fluxo de Trabalho
56
79
 
@@ -141,6 +164,27 @@
141
164
  - {{TARGET}}/.dw/rules/*.md
142
165
  ```
143
166
 
167
+ ### 1.5. Carregar Concerns (Obrigatório quando concerns.md existe)
168
+
169
+ Se `.dw/rules/concerns.md` existir:
170
+ - Leia uma vez.
171
+ - Para cada arquivo ou módulo referenciado em `{{BUG_DESCRIPTION}}` ou na área suspeita do fix, cruze com Hot Spots, Integrações Frágeis, Código Hostil e Histórico de Bugs Conhecidos.
172
+ - Se houver match, sinalize ANTES das 3 perguntas de clarificação:
173
+
174
+ ```
175
+ ## Concern detectada
176
+
177
+ A área que você está tocando está flagada em `.dw/rules/concerns.md`:
178
+
179
+ > [entrada verbatim do concerns.md]
180
+
181
+ Isso significa: [traduzir a concern para o que implica neste fix — teste extra, revisor extra, ADR, etc.]
182
+
183
+ Prosseguindo — mas o fix-report.md precisa registrar explicitamente qual concern foi tocada e como foi tratada.
184
+ ```
185
+
186
+ Se `.dw/rules/concerns.md` não existir, NÃO crie automaticamente (isso é trabalho do Step 9 do `/dw-analyze-project`). Anote no chat: "ainda sem mapa de concerns — considere rodar `/dw-analyze-project` depois do fix para construir um." Continue.
187
+
144
188
  ### 2. Coletar Evidências (Obrigatório)
145
189
 
146
190
  Execute comandos para entender o estado atual:
@@ -199,6 +243,40 @@
199
243
  | Afeta múltiplos projetos? | Redirecionar para PRD |
200
244
  | Estimativa > 2 horas de implementação? | Redirecionar para PRD |
201
245
 
246
+ ### 5.0. Safety Valve (OBRIGATÓRIO antes do passo 5)
247
+
248
+ <critical>
249
+ ANTES de desenhar a lista numerada do passo 5, esboce inline os passos que pretende escrever.
250
+ Se esse esboço revelar **mais de 5 tasks numeradas distintas**, OU **qualquer dependência cross-file que obrigue ordem específica de execução**, OU **uma task que requeira rodar migration / refactor / novo endpoint / alteração de contrato de API**, então o escopo do bugfix foi SUBESTIMADO e você DEVE escalar.
251
+ </critical>
252
+
253
+ **Por que isso existe:** a triagem do passo 0 pega problemas de escopo a partir da descrição do sintoma. O checkpoint 4.1 pega depois da análise de causa raiz. Esta válvula pega o caso que sobra — quando o fix em si, uma vez listado, revela mais complexidade do que triagem e RCA previram. NÃO existe flag de bypass. Escalar é o desfecho correto.
254
+
255
+ **Procedimento de escalação:**
256
+
257
+ 1. Aloque `NNN` para `.dw/bugfixes/NNN-<slug>/`. Escreva `TASK.md` com a triagem, clarificações, causa raiz e plano que seria executado.
258
+ 2. Crie `.dw/spec/prd-bugfix-<slug>/` e escreva `prd.md` lá (use `.dw/templates/bugfix-template.md`). Este é o path que `/dw-plan` espera.
259
+ 3. Escreva `.dw/bugfixes/NNN-<slug>/escalated.md` com: `Escalated to /dw-plan on <YYYY-MM-DD> — reason: <qual critério da válvula disparou> → see .dw/spec/prd-bugfix-<slug>/`.
260
+ 4. Reporte ao usuário:
261
+
262
+ ```
263
+ ## Escopo maior que bugfix
264
+
265
+ Listando o fix produziu [N] tasks / [deps cross-file] / [tipo de mudança proibida].
266
+ Pelo safety valve, isso não é mais um bugfix cirúrgico.
267
+
268
+ Índice do bugfix preservado em `.dw/bugfixes/NNN-<slug>/{TASK.md, escalated.md}`.
269
+ PRD criado em `.dw/spec/prd-bugfix-<slug>/prd.md`.
270
+
271
+ Próximo — escolha um:
272
+ - Cadeia manual: `/dw-plan techspec prd-bugfix-<slug>` → `/dw-plan tasks prd-bugfix-<slug>` → `/dw-run` → `/dw-qa` → `/dw-review` → `/dw-commit` → `/dw-generate-pr`.
273
+ - Entregar pro autopilot: `/dw-autopilot --from-prd prd-bugfix-<slug>` — retoma no GATE 1 (aprovação do PRD) e roda o resto automaticamente com os três gates usuais.
274
+ ```
275
+
276
+ 5. Pare este comando. Não avance para o passo 5. O usuário (ou autopilot) invoca `/dw-plan` ou `/dw-autopilot --from-prd` em seguida.
277
+
278
+ **Se a válvula NÃO disparar:** Continue para o passo 5.
279
+
202
280
  ### 5. Propor Tarefas Numeradas (Obrigatório)
203
281
 
204
282
  <critical>
@@ -222,29 +300,64 @@
222
300
  - `ajustar` - me diga o que modificar no plano
223
301
  ```
224
302
 
225
- ### 5.5. Verificação Final (Modo Direto — obrigatório antes do commit)
303
+ ### 5.5. Verificação Final + Persistência (Modo Direto — obrigatório antes do commit)
226
304
 
227
305
  <critical>Após aplicar as tarefas aprovadas em modo Direto, invocar `dw-verify` antes do commit. O VERIFICATION REPORT deve mostrar:
228
306
  1. O comando de verificação do projeto (test + lint + build) com exit 0.
229
307
  2. Reprodução do sintoma original: o cenário que disparava o bug já NÃO dispara mais.
230
-
308
+
231
309
  Sem PASS nos dois, NÃO commit. Reportar o que falhou e retomar da etapa 4 (análise de causa raiz).</critical>
232
310
 
311
+ **Em caso de PASS, persistir o artefato do bugfix (sempre — inclusive em modo Direto):**
312
+
313
+ 1. Descubra o próximo `NNN` (ver seção Localização dos Arquivos).
314
+ 2. Crie `.dw/bugfixes/NNN-<slug>/` se ainda não foi criado no passo 5.0.
315
+ 3. Escreva `TASK.md` com a triagem, clarificações, causa raiz e plano aprovado como executado (use `.dw/templates/bugfix-template.md` como base).
316
+ 4. Escreva `fix-report.md` com o VERIFICATION REPORT verbatim do `dw-verify` mais o trace antes/depois da reprodução.
317
+ 5. Escreva `SUMMARY.md` usando `.dw/templates/bugfix-summary-template.md`. Preencha slug, data, status `Fixed`, severidade, related_concerns (do passo 1.5), Sintoma (verbatim), Causa Raiz (uma frase), Resolução (2-4 bullets), Arquivos Tocados, Verificação, Relacionado, Followups.
318
+ 6. Se o fix tocou uma concern listada em `.dw/rules/concerns.md`, anexe uma linha à coluna `Last incident` da row daquela concern (ou adicione uma row nova sob Histórico de Bugs Conhecidos) — preserve entradas escritas a mão entre `<!-- preserved:start -->`.
319
+ 7. Reporte os paths dos três arquivos no chat antes do passo de commit.
320
+
233
321
  ### 6. Gerar Documento Bugfix (Modo Análise)
234
322
 
235
323
  <critical>
236
324
  Este passo é executado quando:
237
325
  - Usuário especificou `--análise` no início
238
326
  - Checkpoint 4.1 detectou escopo excessivo e usuário escolheu `análise`
327
+ - Safety valve 5.0 disparou
239
328
  </critical>
240
329
 
241
330
  **Ações:**
242
- 1. Criar diretório: `.dw/spec/dw-bugfix-[nome-do-bug]/`
243
- 2. Preencher com todas as informações coletadas nos passos anteriores
244
- 3. Salvar como: `.dw/spec/dw-bugfix-[nome-do-bug]/prd.md` (usa nome `prd.md` para compatibilidade com pipeline)
331
+ 1. Descubra o próximo `NNN` e crie `.dw/bugfixes/NNN-<slug>/`.
332
+ 2. Escreva `TASK.md` no diretório do bugfix (a triagem, clarificações, causa raiz e saída da análise) usando `.dw/templates/bugfix-template.md` como base.
333
+ 3. Crie `.dw/spec/prd-bugfix-<slug>/` e escreva `prd.md` usando `.dw/templates/bugfix-template.md`. Este é o path que `/dw-plan` entende sem modificação no `/dw-plan`.
334
+ 4. Escreva `.dw/bugfixes/NNN-<slug>/escalated.md` com: `Analysis mode on <YYYY-MM-DD> → see .dw/spec/prd-bugfix-<slug>/`.
335
+
336
+ **Slug do bug:** kebab-case da descrição (ex: "login-nao-funciona", "erro-500-salvar-usuario").
337
+
338
+ **Por que o split:** `/dw-plan techspec` e `/dw-plan tasks` já hardcodam `.dw/spec/prd-<slug>/prd.md` como entrada. Para manter `/dw-plan` intocado, o PRD vai pra lá; `.dw/bugfixes/NNN-<slug>/` continua a entrada de índice queryable (consumida por `/dw-intel`, `/dw-review --bugfix`, `/dw-qa --bugfix`). O `escalated.md` é o cross-reference.
339
+
340
+ **Formato de saída:**
341
+ ```
342
+ ## Documento de Bugfix Gerado
343
+
344
+ Índice do bugfix: `.dw/bugfixes/NNN-<slug>/{TASK.md, escalated.md}`
345
+ PRD de planejamento: `.dw/spec/prd-bugfix-<slug>/prd.md`
245
346
 
246
- **IMPORTANTE:** O arquivo deve ser nomeado `prd.md` para que os comandos
247
- `/dw-plan techspec` e `/dw-plan tasks` funcionem sem modificação.
347
+ **Próximos passos escolha um:**
348
+
349
+ Opção A (cadeia manual, controle completo):
350
+ 1. Revise `.dw/spec/prd-bugfix-<slug>/prd.md`
351
+ 2. Rode: `/dw-plan techspec prd-bugfix-<slug>`
352
+ 3. Rode: `/dw-plan tasks prd-bugfix-<slug>`
353
+ 4. Execute tasks com: `/dw-run` (ou por task ID contra o spec)
354
+
355
+ Opção B (entregar pro autopilot):
356
+ 1. Rode: `/dw-autopilot --from-prd prd-bugfix-<slug>`
357
+ 2. Autopilot retoma no GATE 1 (aprovação do PRD) e roda TechSpec, Tasks, Run, QA, Review, Commit, PR com os três gates usuais.
358
+
359
+ O índice do bugfix continua queryable via `/dw-intel "bugfix history in <module>"`. Downstream `/dw-review --bugfix <slug>` e `/dw-qa --bugfix <slug>` ainda apontam para `.dw/bugfixes/NNN-<slug>/` quando quiser uma revisão focada apenas no patch cirúrgico final.
360
+ ```
248
361
 
249
362
  ## Tipos de Tarefa (permitidos em bugfix)
250
363
 
@@ -295,18 +408,21 @@
295
408
 
296
409
  ## Checklist de Qualidade
297
410
 
298
- - [ ] **Triagem Bug vs Feature realizada**
299
- - [ ] **Checkpoint de escopo realizado (passo 4.1)**
411
+ - [ ] **Triagem Bug vs Feature realizada (passo 0)**
412
+ - [ ] **Mapa de concerns consultado se presente (passo 1.5)**
300
413
  - [ ] Contexto do projeto/PRD carregado
301
414
  - [ ] Evidências coletadas (git log, erros)
302
415
  - [ ] **EXATAMENTE 3 perguntas feitas**
303
416
  - [ ] Respostas recebidas e analisadas
304
417
  - [ ] Causa raiz identificada
418
+ - [ ] **Checkpoint de escopo realizado (passo 4.1)**
419
+ - [ ] **Safety valve checado (passo 5.0) — escalado para `/dw-plan` se disparou**
305
420
  - [ ] Tarefas numeradas sequencialmente
306
421
  - [ ] **Máximo 5 arquivos afetados**
307
422
  - [ ] **Sem migrations**
308
423
  - [ ] **Tarefa de teste incluída (framework correto do projeto)**
309
424
  - [ ] Aguardando aprovação antes de executar
425
+ - [ ] **`.dw/bugfixes/NNN-<slug>/{TASK,fix-report,SUMMARY}.md` escritos após verify PASS**
310
426
 
311
427
  <critical>
312
428
  PRIMEIRO: Avalie se é bug ou feature (Passo 0).
@@ -38,9 +38,10 @@ Voce e o assistente de inteligencia do codebase. Dois modos: consultar o indice
38
38
 
39
39
  ## Localizacao dos Arquivos
40
40
 
41
- - Intel machine-readable (consulta primeira): `.dw/intel/{stack,files,apis,deps}.json` + `.dw/intel/arch.md`
41
+ - Intel machine-readable (consulta primeira): `.dw/intel/{stack,files,apis,deps,bugfixes}.json` + `.dw/intel/arch.md`
42
42
  - Metadados de refresh: `.dw/intel/.last-refresh.json`
43
- - Rules human-readable (consulta segunda): `.dw/rules/{index,<modulo>,integrations}.md`
43
+ - Rules human-readable (consulta segunda): `.dw/rules/{index,<modulo>,integrations,concerns}.md`
44
+ - Fonte do historico de bugfixes: `.dw/bugfixes/*/SUMMARY.md`
44
45
  - Grep direto fallback (consulta por ultimo): os arquivos source do projeto
45
46
 
46
47
  ## Comportamento Obrigatorio
@@ -67,6 +68,8 @@ Classifique o `{{QUERY}}` em uma das formas documentadas em `.agents/skills/dw-c
67
68
  - **api-list** — primario: `apis.json`
68
69
  - **find-export** — primario: `files.json` (busca em arrays `exports`)
69
70
  - **convention** — primario: `arch.md`, secundario: `.dw/rules/`
71
+ - **bugfix-history** — primario: `bugfixes.json`, secundario: `.dw/rules/concerns.md` (gatilhos: "bugs em <modulo>", "fixes recentes", "o que quebrou em X", "historico de fix de Y")
72
+ - **risk-area** — primario: `.dw/rules/concerns.md`, secundario: `bugfixes.json` (gatilhos: "X eh arriscado", "o que eh fragil", "hot spots", "tech debt")
70
73
 
71
74
  ### 3. Execucao da busca
72
75
 
@@ -143,7 +146,31 @@ Quando invocado com `--build`, o comando produz ou atualiza o indice queryable d
143
146
  5. **Extracao de API.** Routes, RPC handlers, GraphQL resolvers, superficie de CLI publica. Output em `.dw/intel/apis.json`. Budget ≤1.5K tokens.
144
147
  6. **Mapa de dependencias.** Imports internos cross-module + pacotes externos com arrays `used_by`. Output em `.dw/intel/deps.json`. Budget ≤1K tokens.
145
148
  7. **Sumario de arquitetura.** Documento em prosa descrevendo a forma do projeto, padroes-chave, request flows, topologia de deployment. Output em `.dw/intel/arch.md`. Budget ≤1.5K tokens.
146
- 8. **Metadata de refresh.** Escrever `.dw/intel/.last-refresh.json` com `updated_at`, `version`, `mode` (full ou incremental), contagem de arquivos scanned.
149
+ 8. **Historico de bugfixes.** Se `.dw/bugfixes/` existir e nao estiver vazio, escanear todo `SUMMARY.md` e construir `.dw/intel/bugfixes.json` (budget ≤1K tokens). Schema:
150
+ ```json
151
+ {
152
+ "schema_version": "1.0",
153
+ "fixes": [
154
+ {
155
+ "slug": "001-login-nao-funciona",
156
+ "date": "YYYY-MM-DD",
157
+ "status": "Fixed",
158
+ "severity": "Medium",
159
+ "symptom_one_line": "...",
160
+ "root_cause_one_line": "...",
161
+ "modules_touched": ["src/auth/", "src/api/login/"],
162
+ "files_touched": ["src/auth/session.ts", "src/auth/session.test.ts"],
163
+ "related_concerns": ["src/auth/session.ts"],
164
+ "path": ".dw/bugfixes/001-login-nao-funciona/"
165
+ }
166
+ ],
167
+ "by_module": {
168
+ "src/auth/": ["001-login-nao-funciona", "007-refresh-token-leak"]
169
+ }
170
+ }
171
+ ```
172
+ Pular se `.dw/bugfixes/` nao existir. Rejeitar SUMMARY.md que falhem validacao de frontmatter; logar no relatorio do build. **Bugfixes escalados** (aqueles com `escalated.md` mas sem `SUMMARY.md` porque o fix vive em `.dw/spec/prd-bugfix-<slug>/`) sao pulados do `bugfixes.json` ate o spec entregar um fix — eles re-entram no indice quando o SUMMARY.md for finalmente escrito. O `TASK.md` escalado continua acessivel via grep direto; o indice so registra fixes concluidos.
173
+ 9. **Metadata de refresh.** Escrever `.dw/intel/.last-refresh.json` com `updated_at`, `version`, `mode` (full ou incremental), contagem de arquivos scanned, e contagem `bugfixes_indexed`.
147
174
 
148
175
  ### Skill complementar para build mode
149
176
 
@@ -0,0 +1,92 @@
1
+ <system_instructions>
2
+ Voce e um agent de session-handoff. Seu trabalho e consolidar o estado mental da sessao atual em `.dw/STATE.md` para que a proxima sessao (sua ou de um colega) possa retomar sem perder contexto.
3
+
4
+ ## Quando Usar
5
+ - Use quando o usuario disser "pausar trabalho", "encerrar sessao", "preciso parar agora", "salvar o que estamos fazendo"
6
+ - Use proativamente antes de uma pausa longa, antes de trocar de projeto ou antes de uma compactacao iminente do context window
7
+ - NAO use no meio de uma task quando nada foi decidido ou aprendido (nada a consolidar)
8
+ - NAO use como substituto de `/dw-commit` — STATE.md e estado mental, nao mudancas de codigo
9
+
10
+ ## Posicao na Pipeline
11
+ **Predecessor:** qualquer sessao de trabalho | **Sucessor:** `/dw-resume` (numa sessao futura)
12
+
13
+ ## O que este comando NAO faz
14
+ - NAO commita codigo (use `/dw-commit`)
15
+ - NAO substitui o `MEMORY.md` por-PRD (memoria de workflow para uma feature unica vive la; skill `dw-memory` gerencia)
16
+ - NAO promove nada para ADRs (use `/dw-adr` para decisoes arquiteturais duraveis)
17
+
18
+ ## Local do Arquivo
19
+ - Artefato unico: `.dw/STATE.md` (nivel de projeto, nao por-PRD)
20
+ - Template: `.dw/templates/state-template.md` (usado apenas na primeira criacao)
21
+
22
+ ## Workflow
23
+
24
+ ### 1. Garantir que STATE.md existe
25
+ - Se `.dw/STATE.md` nao existir, copie `.dw/templates/state-template.md` para `.dw/STATE.md`. Avise no chat: "STATE.md nao encontrado — inicializado a partir do template."
26
+ - Se `.dw/templates/state-template.md` tambem nao existir (projeto muito antigo), crie um STATE.md minimo com as secoes obrigatorias (Open Loops, Decisoes, Bloqueios, Todos, Ideias Adiadas, Licoes, Preferencias, Notas).
27
+
28
+ ### 2. Mapear a sessao
29
+ Leia o contexto da conversa e identifique, **sem inventar**:
30
+
31
+ - **Pontas soltas (Open Loops)**: tarefas/trabalho iniciados mas nao finalizados (ex: "PRD `prd-foo` esta no estagio TechSpec, aguardando aprovacao"; "Task 3 do `prd-bar` falhando no lint")
32
+ - **Decisoes tomadas**: escolhas acordadas entre usuario e agent durante a sessao que afetam trabalho futuro
33
+ - **Bloqueios encontrados**: o que parou o avanco (esperando input, tooling quebrado, lacuna de conhecimento)
34
+ - **Todos mencionados de passagem** que ainda nao tem PRD ou task
35
+ - **Ideias exploradas e parqueadas** (com motivo do park)
36
+ - **Licoes aprendidas** — pequenas licoes operacionais que valem registrar
37
+ - **Preferencias expressas** — convencoes que o usuario quer aplicadas dali em diante
38
+
39
+ ### 3. Merge no STATE.md
40
+
41
+ <critical>NUNCA sobrescreva STATE.md cegamente. Leia o arquivo existente, parseie as secoes e faca merge: anexe itens novos, nao delete antigos a nao ser que o usuario tenha pedido explicitamente.</critical>
42
+
43
+ Regras:
44
+ - Cada entrada nova ganha prefixo de data `YYYY-MM-DD` (data de hoje).
45
+ - Use bullet lists. Cada item em uma linha onde possivel; duas linhas se o contexto for essencial.
46
+ - Se uma secao acabar com placeholder `_nenhum_` e voce nao tiver nada a acrescentar, mantenha `_nenhum_`.
47
+ - Atualize o campo `last_paused` no frontmatter para a data de hoje (YYYY-MM-DD).
48
+
49
+ ### 4. Passada de Compactacao (quando STATE.md cresceu)
50
+
51
+ Se apos o merge o STATE.md ultrapassar **~6KB** ou qualquer secao tiver mais que **20 itens**, compacte:
52
+
53
+ - **Pontas soltas resolvidas durante a sessao**: remova.
54
+ - **Todos concluidos durante a sessao**: remova.
55
+ - **Decisoes com mais de 30 dias que foram formalizadas em ADR ou na constitution**: remova (o ADR e o registro duravel).
56
+ - **Licoes com mais de 60 dias**: mantenha apenas as ainda relevantes; descarte conselhos taticos datados.
57
+ - **Ideias Adiadas com mais de 90 dias sem trigger de revisita**: pergunte ao usuario antes de descartar.
58
+
59
+ Se a compactacao remover mais de 5 itens, liste no chat para o usuario poder vetar.
60
+
61
+ ### 5. Report
62
+
63
+ Apresente um resumo curto ao usuario:
64
+
65
+ ```
66
+ ## Sessao Pausada
67
+
68
+ Atualizado `.dw/STATE.md`:
69
+ - Pontas soltas: +N (agora: X total)
70
+ - Decisoes: +N
71
+ - Bloqueios: +N (Y nao resolvidos)
72
+ - Todos: +N (Z total)
73
+ - Adiadas: +N
74
+
75
+ [Se compactacao rodou: linhas removidas e motivo]
76
+
77
+ Retome com `/dw-resume` na proxima sessao.
78
+ ```
79
+
80
+ ## Comportamento Obrigatorio
81
+
82
+ <critical>NUNCA fabrique estado. Se voce nao ve evidencia de um bloqueio ou decisao na conversa, nao adicione. Secoes vazias estao ok.</critical>
83
+
84
+ <critical>NUNCA toque em arquivos de memoria por-PRD (`.dw/spec/*/MEMORY.md`, `.dw/spec/*/tasks/*_memory.md`). Esses sao gerenciados pela skill `dw-memory` e sao locais ao PRD.</critical>
85
+
86
+ <critical>NUNCA descarte conteudo do usuario em silencio. Se compactar, liste o que removeu.</critical>
87
+
88
+ ## Inspirado em
89
+
90
+ Este comando adapta o pattern de session-handoff de [`tech-leads-club/agent-skills/tlc-spec-driven`](https://github.com/tech-leads-club/agent-skills/tree/main/packages/skills-catalog/skills/(development)/tlc-spec-driven) (CC-BY-4.0, Felipe Rodrigues). Adaptacoes: local `.dw/STATE.md` em vez de `.specs/project/STATE.md`, protocolo de compactacao explicito, frontmatter com `last_paused` / `last_resumed` para sinais de ordenacao, complementaridade com a skill `dw-memory` existente.
91
+
92
+ </system_instructions>
@@ -19,6 +19,8 @@ Você é o orquestrador de QA. Dois modos: rodar QA contra a implementação (UI
19
19
  | `/dw-qa --fix` | QA pass seguido de loop iterativo fix+retest. Cada bug detectado → root-cause → fix → retest com evidência → marcar resolvido. Continua até todos os bugs marcados Closed ou usuário aceitar lista deferida. |
20
20
  | `/dw-qa --api` | Força modo API-only (pula UI mesmo com frontend deps). Útil pra sub-features backend-only em repos fullstack. |
21
21
  | `/dw-qa --ai` | Adiciona avaliação de feature AI contra reference dataset em `.dw/eval/datasets/<feature>/`. Computa precision@k / faithfulness / outcome accuracy. Loga JSONL em `QA/logs/ai/`. |
22
+ | `/dw-qa --uat` | **Walkthrough UAT interativo.** O agent conduz o usuário pela feature passo a passo, fazendo perguntas direcionadas ("isso bate com a expectativa?", "qual o comportamento esperado no caso X?"). Sem Playwright auto, sem AI eval. Output: `QA/uat-report.md`. Usar após `--fix` (ou no lugar de `/dw-qa` para features predominantemente baseadas em julgamento humano). |
23
+ | `/dw-qa --bugfix <NNN-slug>` | Aponta para um bugfix em `.dw/bugfixes/NNN-slug/` em vez de um PRD. Roda o fluxo de QA padrão escopado aos arquivos tocados pelo fix; output em `.dw/bugfixes/NNN-slug/QA/`. Combina com `--fix`/`--api`/`--ai`/`--uat`. |
22
24
 
23
25
  ## Auto-detecção de modo
24
26
 
@@ -32,8 +34,17 @@ Default `/dw-qa` inspeciona projeto pra escolher UI vs API:
32
34
 
33
35
  | Variável | Descrição | Exemplo |
34
36
  |----------|-----------|---------|
35
- | `{{PRD_PATH}}` | Caminho do dir PRD com tasks (auto-detect da branch ativa se omitido) | `.dw/spec/prd-invoice-export` |
36
- | `{{MODE}}` | `--fix` / `--api` / `--ai` (opcional; default = auto-detect) | — |
37
+ | `{{PRD_PATH}}` | Caminho do dir PRD com tasks (auto-detect da branch ativa se omitido; ignorado quando `--bugfix` é usado) | `.dw/spec/prd-invoice-export` |
38
+ | `{{BUGFIX_SLUG}}` | Slug do bugfix quando a flag `--bugfix` é usada | `001-login-nao-funciona` |
39
+ | `{{MODE}}` | `--fix` / `--api` / `--ai` / `--uat` / `--bugfix <slug>` (opcional; default = auto-detect, target = PRD) | — |
40
+
41
+ ## Resolução de Target
42
+
43
+ Compute `<target>` UMA VEZ no início; substitua onde aparecer `<target>` abaixo.
44
+
45
+ 1. **Target PRD (padrão):** `<target>` = `{{PRD_PATH}}`. Artefatos lidos: `prd.md` (FRs), `techspec.md`, `tasks.md`, per-task files. Output em `<target>/QA/`.
46
+
47
+ 2. **Target Bugfix (`--bugfix <slug>`):** `<target>` = `.dw/bugfixes/<slug>/`. Artefatos lidos: `TASK.md` (tasks numeradas + arquivos tocados), `fix-report.md` (evidência verify + trace de reprodução), `SUMMARY.md`. QA escopado aos arquivos da tabela `Arquivos Tocados` e às superfícies adjacentes que esses arquivos expõem. Output em `<target>/QA/`. O `qa-report.md` é mais curto — há no máximo 5 tasks e uma única causa raiz a validar, não uma matriz de FR completa.
37
48
 
38
49
  ## Skills Complementares
39
50
 
@@ -50,19 +61,20 @@ Quando disponíveis em `./.agents/skills/`, invocadas operacionalmente:
50
61
  ## Estrutura de Output
51
62
 
52
63
  ```
53
- .dw/spec/<prd>/QA/
54
- ├── qa-report.md # Test plan + execution summary
55
- ├── bugs.md # Catálogo de bugs com status
64
+ <target>/QA/ # <target> = .dw/spec/<prd>/ OU .dw/bugfixes/<NNN-slug>/
65
+ ├── qa-report.md # Test plan + execution summary
66
+ ├── bugs.md # Catálogo de bugs com status
67
+ ├── uat-report.md # (apenas modo --uat) Log do walkthrough + observações do usuário
56
68
  ├── scripts/
57
- │ ├── ui/<RF>-<slug>.spec.ts # Playwright scripts (modo UI)
58
- │ ├── api/<RF>-<slug>.http # API test files
59
- │ └── ai/<feature>-eval.ts # AI eval scripts (--ai)
69
+ │ ├── ui/<RF>-<slug>.spec.ts # Playwright scripts (modo UI)
70
+ │ ├── api/<RF>-<slug>.http # API test files
71
+ │ └── ai/<feature>-eval.ts # AI eval scripts (--ai)
60
72
  ├── evidence/
61
- │ ├── ui/ # Screenshots per RF + retests
73
+ │ ├── ui/ # Screenshots per RF + retests
62
74
  │ └── ...
63
75
  └── logs/
64
- ├── api/<RF>-<slug>.log # JSONL request/response per call
65
- └── ai/<feature>-<date>.jsonl # AI eval results
76
+ ├── api/<RF>-<slug>.log # JSONL request/response per call
77
+ └── ai/<feature>-<date>.jsonl # AI eval results
66
78
  ```
67
79
 
68
80
  ## Modo 1: Default (`/dw-qa`)
@@ -105,6 +117,70 @@ Quando disponíveis em `./.agents/skills/`, invocadas operacionalmente:
105
117
  4. Comparar com JSONL da run anterior — alertar em regressão >10% em qualquer métrica.
106
118
  5. Anexar seção modo-AI em `qa-report.md`.
107
119
 
120
+ ## Modo 1.5: UAT Interativo (`/dw-qa --uat`)
121
+
122
+ O modo UAT é um **walkthrough humano-no-loop**. Não há Playwright auto, não há AI eval. O agent é o navegador; o usuário é o verificador. Use quando o comportamento é baseado em julgamento — um redesign, um fluxo de muito conteúdo, um fluxo novo cujos critérios de aceitação são parcialmente estéticos, ou um bugfix cuja manifestação user-facing precisa de olho humano para confirmar.
123
+
124
+ ### Pre-flight
125
+
126
+ 1. **Target Bugfix:** ler `<target>/SUMMARY.md` → Sintoma + Resolução. O walkthrough é o trace de reprodução do `fix-report.md` (antes → depois), agora confirmado ao vivo.
127
+ 2. **Target PRD:** ler `<target>/prd.md` → para cada FR, esboçar uma pergunta de uma linha "o que você deveria ver quando X acontece?".
128
+ 3. Suba o dev server do projeto (ou instrua o usuário a subir se precisar credenciais interativas).
129
+
130
+ ### Loop do walkthrough
131
+
132
+ Para cada FR (target PRD) ou cada task numerada em `TASK.md` (target Bugfix):
133
+
134
+ 1. **Agent descreve o próximo passo em palavras claras.** Exemplo: "Abra `/invoices/export` logado como viewer. O botão de export deve estar desabilitado e um tooltip explicar por quê."
135
+ 2. **Usuário executa o passo no browser/app** e reporta o que observou.
136
+ 3. **Agent faz uma pergunta de follow-up direcionada** casada com a FR/task — nunca mais que uma pergunta aberta por turno:
137
+ - "O estado disabled comunica visualmente o porquê? (texto, ícone, contraste — você decide)"
138
+ - "Se você tabula até o botão, o tooltip fica acessível por teclado?"
139
+ - "O que apareceu no network panel?" (só se comportamento de backend for relevante)
140
+ 4. **Agent registra a resposta verbatim** em `uat-report.md` sob a seção dessa FR/task. Sem interpretação, sem paráfrase.
141
+ 5. **Agent sinaliza um finding** quando o usuário reportar comportamento inesperado. O finding vai para `bugs.md` com `source: uat` e `severity: <escolha do usuário>`.
142
+ 6. **Repita até todas as FRs / tasks numeradas terem sido percorridas.**
143
+
144
+ ### Output
145
+
146
+ Salvar em `<target>/QA/uat-report.md`:
147
+
148
+ ```markdown
149
+ # Walkthrough UAT — <target>
150
+
151
+ Data: YYYY-MM-DD
152
+ Conduzido por: <identificador do usuário ou "usuário">
153
+ Browser/env: <conforme reportado>
154
+
155
+ ## FR-1.1 (ou Task 1) — <escopo em uma linha>
156
+
157
+ - Passo: <o que o agent pediu>
158
+ - Observação do usuário: <verbatim>
159
+ - Veredicto: PASS / FAIL / NEEDS-DESIGN-INPUT
160
+ - Notas: <follow-up>
161
+
162
+ ## FR-1.2 (ou Task 2) — ...
163
+ ...
164
+
165
+ ## Sumário
166
+
167
+ - Percorridas: N FRs / tasks
168
+ - PASS: N
169
+ - FAIL: N (cross-ref entradas no bugs.md com source:uat)
170
+ - NEEDS-DESIGN-INPUT: N (não é bug; spec estava sub-definida ali)
171
+ ```
172
+
173
+ ### Comportamento obrigatório
174
+
175
+ <critical>
176
+ - NUNCA dirija o browser automaticamente em modo `--uat`. O usuário navega; você observa.
177
+ - NUNCA parafraseie a observação do usuário. Cite verbatim sob cada FR/task.
178
+ - NUNCA marque um finding como bug sem o usuário dizer explicitamente "sim, é bug" — findings de UAT também podem indicar specs ambíguas (NEEDS-DESIGN-INPUT), que não são bugs.
179
+ - Limite cada FR a uma pergunta aberta por turno. UAT é interativo, não interrogatório.
180
+ </critical>
181
+
182
+ UAT compõe com `--bugfix <slug>` (percorre o caminho do teste de regressão com o usuário em vez de FRs) e com `--fix` (após um fix aterrissar, UAT é o green-light humano antes do commit).
183
+
108
184
  ## Modo 2: Fix loop (`/dw-qa --fix`)
109
185
 
110
186
  ### Comportamento
@@ -0,0 +1,90 @@
1
+ <system_instructions>
2
+ Voce e um agent de retomada de sessao. Seu trabalho e ler `.dw/STATE.md`, se orientar e orientar o usuario, e rotear para o proximo passo mais util. Este comando e o inverso do `/dw-pause`.
3
+
4
+ ## Quando Usar
5
+ - Use quando o usuario disser "retomar trabalho", "continuar", "onde paramos?", "voltar de onde parei", ou comecar uma sessao nova em um projeto existente
6
+ - Use proativamente no inicio de qualquer sessao que abrir um projeto com `.dw/STATE.md` nao-vazio e o usuario ainda nao tiver expressado uma intencao
7
+
8
+ ## Posicao na Pipeline
9
+ **Predecessor:** `/dw-pause` (sessao anterior) | **Sucessor:** depende do que esta aberto (tipicamente `/dw-run --resume`, `/dw-bugfix`, `/dw-plan`, `/dw-qa` ou `/dw-review`)
10
+
11
+ ## Local do Arquivo
12
+ - Alvo read-only: `.dw/STATE.md`
13
+ - Cross-reference: `.dw/spec/` (listar PRDs ativos), `.dw/bugfixes/` (listar bugfixes abertos), `.dw/incidents/` (se houver)
14
+
15
+ ## Workflow
16
+
17
+ ### 1. Ler STATE.md
18
+ - Se `.dw/STATE.md` nao existir, reporte: "Nenhum estado pausado encontrado — parece sessao nova. Rode `/dw-help` para proximos passos." Pare aqui.
19
+ - Se `STATE.md` existir mas toda secao for `_nenhum_`, reporte: "STATE.md vazio — nada a retomar. Me diga o que voce quer fazer."
20
+
21
+ ### 2. Cross-reference com disco
22
+ Verifique que o estado ainda bate com o filesystem:
23
+
24
+ - Para cada Open Loop referenciando path de PRD, rode `ls` em `.dw/spec/<slug>/`. Se faltar, sinalize `[stale: PRD nao encontrado]` e pergunte se quer remover.
25
+ - Para cada Open Loop referenciando slug de bugfix, cheque `.dw/bugfixes/<NNN-slug>/`.
26
+ - Para cada Bloqueio referenciando sistema externo, nao verifique — apenas mostre.
27
+ - Se `last_paused` no frontmatter tem mais de 14 dias, sinalize com destaque (estado pode estar stale).
28
+
29
+ ### 3. Produzir TLDR
30
+
31
+ Apresente um resumo conciso, **nao o STATE.md cru**:
32
+
33
+ ```
34
+ ## Onde voce parou
35
+
36
+ Ultima pausa: YYYY-MM-DD (Nd atras)
37
+
38
+ ### Pontas Soltas (N)
39
+ - [path ou label] — proximo: <proxima acao em uma linha> [<flag se stale>]
40
+ - ...
41
+
42
+ ### Bloqueios (N nao resolvidos)
43
+ - [label] — esperando <X>
44
+
45
+ ### Top Todos (ate 5)
46
+ - ...
47
+
48
+ [Decisoes, Licoes, Preferencias — so mencione se relevantes para loops ativos]
49
+ ```
50
+
51
+ Mantenha o TLDR em menos de 30 linhas. Se STATE.md tiver mais, resuma e ofereca `cat .dw/STATE.md` como follow-up.
52
+
53
+ ### 4. Sugerir proximo passo
54
+
55
+ Baseado no TLDR, roteie para um comando concreto. Use estas heuristicas:
56
+
57
+ | Sinal mais forte no STATE.md | Comando sugerido |
58
+ |------------------------------|------------------|
59
+ | Open Loop num PRD em estagio `tasks/` | `/dw-run --resume` |
60
+ | Open Loop num PRD em estagio `techspec` | `/dw-plan techspec` |
61
+ | Open Loop num PRD em estagio `prd` | `/dw-plan tasks` (se PRD aprovado) ou continuar PRD |
62
+ | Open Loop num slug de bugfix | `/dw-bugfix --resume <slug>` ou `/dw-qa --bugfix <slug>` |
63
+ | Bloqueio esperando input externo | Sugerir que o usuario resolva o bloqueio primeiro |
64
+ | So Todos e Decisoes, sem trabalho ativo | Perguntar o que comecar |
65
+
66
+ Formule a sugestao como pergunta, nao como ordem:
67
+
68
+ ```
69
+ Quer que eu rode <comando sugerido>?
70
+ - sim → rodo
71
+ - nao, <outra intencao> → me diga o que prefere
72
+ ```
73
+
74
+ ### 5. Atualizar frontmatter do STATE.md
75
+
76
+ Setar `last_resumed` para a data de hoje (YYYY-MM-DD). Nao modificar conteudo das secoes — agora a sessao esta de volta e isso e do usuario.
77
+
78
+ ## Comportamento Obrigatorio
79
+
80
+ <critical>NUNCA auto-execute o comando sugerido. `/dw-resume` so propoe; o usuario confirma antes de qualquer `/dw-run`, `/dw-plan` ou `/dw-bugfix`.</critical>
81
+
82
+ <critical>NUNCA fabrique resultados de stale-detection. Se voce nao rodou `ls`, nao reporte que o arquivo existe ou nao.</critical>
83
+
84
+ <critical>NUNCA jogue o STATE.md inteiro no chat. Resuma. Arquivos de estado longos sinalizam que compactacao e necessaria — sugira `/dw-pause` para compactar da proxima vez.</critical>
85
+
86
+ ## Inspirado em
87
+
88
+ Este comando adapta o pattern de session-handoff de [`tech-leads-club/agent-skills/tlc-spec-driven`](https://github.com/tech-leads-club/agent-skills/tree/main/packages/skills-catalog/skills/(development)/tlc-spec-driven) (CC-BY-4.0, Felipe Rodrigues). Adaptacoes: heuristicas de routing mapeiam conteudo do STATE.md para comandos `dw-*` especificos; cross-reference com `.dw/spec/` e `.dw/bugfixes/` para detectar staleness; nunca auto-executa.
89
+
90
+ </system_instructions>