@brunosps00/dev-workflow 0.9.0 → 0.11.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 (83) hide show
  1. package/README.md +48 -20
  2. package/lib/constants.js +2 -10
  3. package/lib/init.js +20 -3
  4. package/lib/migrate-gsd.js +1 -1
  5. package/lib/utils.js +8 -3
  6. package/package.json +1 -1
  7. package/scaffold/en/commands/dw-analyze-project.md +61 -0
  8. package/scaffold/en/commands/dw-autopilot.md +6 -6
  9. package/scaffold/en/commands/dw-brainstorm.md +1 -1
  10. package/scaffold/en/commands/dw-bugfix.md +1 -0
  11. package/scaffold/en/commands/dw-code-review.md +29 -0
  12. package/scaffold/en/commands/dw-commit.md +6 -0
  13. package/scaffold/en/commands/dw-create-prd.md +16 -0
  14. package/scaffold/en/commands/dw-create-tasks.md +42 -0
  15. package/scaffold/en/commands/dw-create-techspec.md +19 -0
  16. package/scaffold/en/commands/dw-deep-research.md +6 -0
  17. package/scaffold/en/commands/dw-deps-audit.md +1 -0
  18. package/scaffold/en/commands/dw-find-skills.md +4 -4
  19. package/scaffold/en/commands/dw-fix-qa.md +1 -0
  20. package/scaffold/en/commands/dw-generate-pr.md +1 -0
  21. package/scaffold/en/commands/dw-help.md +9 -29
  22. package/scaffold/en/commands/dw-intel.md +1 -1
  23. package/scaffold/en/commands/dw-refactoring-analysis.md +2 -1
  24. package/scaffold/en/commands/dw-review-implementation.md +28 -2
  25. package/scaffold/en/commands/dw-run-plan.md +2 -2
  26. package/scaffold/en/templates/constitution-template.md +111 -0
  27. package/scaffold/en/templates/idea-onepager.md +1 -1
  28. package/scaffold/pt-br/commands/dw-analyze-project.md +61 -0
  29. package/scaffold/pt-br/commands/dw-autopilot.md +6 -6
  30. package/scaffold/pt-br/commands/dw-brainstorm.md +1 -1
  31. package/scaffold/pt-br/commands/dw-bugfix.md +1 -0
  32. package/scaffold/pt-br/commands/dw-code-review.md +29 -0
  33. package/scaffold/pt-br/commands/dw-commit.md +6 -0
  34. package/scaffold/pt-br/commands/dw-create-prd.md +16 -0
  35. package/scaffold/pt-br/commands/dw-create-tasks.md +42 -0
  36. package/scaffold/pt-br/commands/dw-create-techspec.md +19 -0
  37. package/scaffold/pt-br/commands/dw-deep-research.md +6 -0
  38. package/scaffold/pt-br/commands/dw-deps-audit.md +1 -0
  39. package/scaffold/pt-br/commands/dw-find-skills.md +4 -4
  40. package/scaffold/pt-br/commands/dw-fix-qa.md +1 -0
  41. package/scaffold/pt-br/commands/dw-generate-pr.md +1 -0
  42. package/scaffold/pt-br/commands/dw-help.md +9 -29
  43. package/scaffold/pt-br/commands/dw-intel.md +1 -1
  44. package/scaffold/pt-br/commands/dw-refactoring-analysis.md +2 -1
  45. package/scaffold/pt-br/commands/dw-review-implementation.md +21 -2
  46. package/scaffold/pt-br/commands/dw-run-plan.md +2 -2
  47. package/scaffold/pt-br/templates/constitution-template.md +111 -0
  48. package/scaffold/pt-br/templates/idea-onepager.md +1 -1
  49. package/scaffold/skills/dw-codebase-intel/SKILL.md +1 -0
  50. package/scaffold/skills/dw-codebase-intel/references/api-design-discipline.md +138 -0
  51. package/scaffold/skills/dw-debug-protocol/SKILL.md +106 -0
  52. package/scaffold/skills/dw-debug-protocol/references/error-categorization.md +127 -0
  53. package/scaffold/skills/dw-debug-protocol/references/non-reproducible-strategy.md +108 -0
  54. package/scaffold/skills/dw-debug-protocol/references/six-step-triage.md +139 -0
  55. package/scaffold/skills/dw-debug-protocol/references/stop-the-line.md +52 -0
  56. package/scaffold/skills/dw-git-discipline/SKILL.md +120 -0
  57. package/scaffold/skills/dw-git-discipline/references/atomic-commits-discipline.md +158 -0
  58. package/scaffold/skills/dw-git-discipline/references/branch-hygiene.md +150 -0
  59. package/scaffold/skills/dw-git-discipline/references/trunk-based-pattern.md +82 -0
  60. package/scaffold/skills/dw-memory/SKILL.md +1 -2
  61. package/scaffold/skills/dw-simplification/SKILL.md +142 -0
  62. package/scaffold/skills/dw-simplification/references/behavior-preserving.md +148 -0
  63. package/scaffold/skills/dw-simplification/references/chestertons-fence.md +152 -0
  64. package/scaffold/skills/dw-simplification/references/complexity-metrics.md +147 -0
  65. package/scaffold/skills/dw-source-grounding/SKILL.md +128 -0
  66. package/scaffold/skills/dw-source-grounding/references/citation-protocol.md +108 -0
  67. package/scaffold/skills/dw-source-grounding/references/freshness-check.md +108 -0
  68. package/scaffold/skills/dw-source-grounding/references/source-priority.md +146 -0
  69. package/scaffold/skills/dw-verify/SKILL.md +0 -1
  70. package/scaffold/skills/vercel-react-best-practices/SKILL.md +4 -0
  71. package/scaffold/skills/vercel-react-best-practices/references/perf-discipline.md +122 -0
  72. package/scaffold/skills/webapp-testing/SKILL.md +5 -0
  73. package/scaffold/skills/webapp-testing/references/security-boundary.md +115 -0
  74. package/scaffold/skills/webapp-testing/references/three-workflow-patterns.md +144 -0
  75. package/scaffold/templates-overrides-readme.md +75 -0
  76. package/scaffold/en/commands/dw-execute-phase.md +0 -149
  77. package/scaffold/en/commands/dw-plan-checker.md +0 -144
  78. package/scaffold/en/commands/dw-quick.md +0 -103
  79. package/scaffold/en/commands/dw-resume.md +0 -84
  80. package/scaffold/pt-br/commands/dw-execute-phase.md +0 -149
  81. package/scaffold/pt-br/commands/dw-plan-checker.md +0 -144
  82. package/scaffold/pt-br/commands/dw-quick.md +0 -103
  83. package/scaffold/pt-br/commands/dw-resume.md +0 -84
@@ -50,6 +50,22 @@
50
50
  - Use `.dw/rules/` como contexto, caindo para grep
51
51
  - Sugira rodar `/dw-map-codebase` para enriquecer contexto downstream
52
52
 
53
+ ## Constitution Gate
54
+
55
+ <critical>ANTES das clarification questions, cheque `.dw/constitution.md`:
56
+
57
+ **Se AUSENTE**: copie `templates/constitution-template.md` (project-local em `.dw/templates/constitution-template.md`, com fallback para scaffold bundled) literalmente para `.dw/constitution.md`. Setar frontmatter `mode: defaults` e `last_updated` para data ISO de hoje. Imprimir no chat:
58
+
59
+ > "Notei que `.dw/constitution.md` estava ausente. Instalei defaults em `.dw/constitution.md` (10 princípios canônicos, todos em `severity: info` — reportam mas não bloqueiam). Pode customizar a qualquer momento — ou re-rodar `/dw-analyze-project` para versão sob medida. Seguindo com o PRD."
60
+
61
+ Depois prossiga normalmente, tratando o arquivo recém-criado como a constitution.
62
+
63
+ **Se PRESENTE**: leia antes de redigir requisitos. Cada FR no PRD DEVE incluir linha "Constitution Alignment" mapeando para ≥1 princípio relevante (`Respects: P-001, P-009`) OU declarando explicitamente "no applicable principle" com motivo em uma linha. Sem alignment = FR está incompleto.
64
+
65
+ **Regras de severity** (aplicadas pelos comandos downstream, não enforçadas aqui):
66
+ - Violações `severity: info` → reportadas, nunca bloqueiam.
67
+ - Violações `severity: high` / `critical` → bloqueiam em `dw-create-techspec` e `dw-code-review` exceto se ADR justificar.</critical>
68
+
53
69
  ## Features Multi-Projeto
54
70
 
55
71
  Muitas funcionalidades podem envolver mais de um projeto no workspace.
@@ -149,5 +149,47 @@
149
149
  3. /dw-generate-pr [branch-alvo] quando todas tasks concluídas
150
150
  ```
151
151
 
152
+ ## Final Consistency Check (Auto-invocado antes da aprovação do usuário)
153
+
154
+ <critical>ANTES de apresentar tasks ao usuário, rode um check de consistência em 5 dimensões. Isto é mandatório; não pule mesmo se confiante de que as tasks estão limpas.</critical>
155
+
156
+ Rode estes 5 checks contra o conjunto PRD + TechSpec + tasks gerado:
157
+
158
+ 1. **Cobertura de RF** — cada RF numerada no PRD mapeia para ≥1 task. RFs órfãs (PRD tem; nenhuma task cobre) são FAIL.
159
+ 2. **Grounding das tasks** — cada task gerada referencia ≥1 RF em seu corpo (`Cobre: RF-N.M`). Tasks sem referência a RF sinalizam scope creep.
160
+ 3. **Cobertura de teste** — cada RF com comportamento user-facing (UI, endpoint de API, mutação de dado) tem ≥1 task que adiciona teste (subtask contendo "test", "spec", "e2e" ou equivalente).
161
+ 4. **Grafo de dependências** — dependências entre tasks (X.0 → Y.0 declarado como "Depende de") formam DAG. Sem ciclos. Ordem topológica válida.
162
+ 5. **Alinhamento com constitution** (só se `.dw/constitution.md` existir) — cada task lista `Constitution: respects P-NNN, P-MMM` OU `Constitution: deviates P-NNN — ADR planejado: <slug>` OU `Constitution: n/a — motivo: <one-liner>`. Linha ausente = FAIL.
163
+
164
+ Escreva findings em `.dw/spec/prd-[nome-funcionalidade]/tasks-validation.md` com esta estrutura exata:
165
+
166
+ ```markdown
167
+ # Relatório de Validação de Tasks
168
+
169
+ Gerado por /dw-create-tasks em YYYY-MM-DD.
170
+
171
+ | Dimensão | Status | Findings |
172
+ |----------|--------|----------|
173
+ | 1. Cobertura de RF | PASS / FAIL | <lista de RFs órfãs ou "todas RFs cobertas"> |
174
+ | 2. Grounding de tasks | PASS / FAIL | <lista de tasks sem RF ou "todas tasks referenciam RFs"> |
175
+ | 3. Cobertura de teste | PASS / FAIL | <RFs sem testes ou "todas RFs user-facing cobertas"> |
176
+ | 4. Grafo de dependências | PASS / FAIL | <ciclos ou "DAG válido"> |
177
+ | 5. Alinhamento constitution | PASS / FAIL / N/A | <tasks não-alinhadas ou "todas alinhadas" ou "sem constitution"> |
178
+
179
+ ## Findings Detalhados
180
+
181
+ <uma seção por dimensão FAIL com fixes concretos; vazio se tudo PASS>
182
+ ```
183
+
184
+ **Comportamento do gate:**
185
+
186
+ - **Todas as 5 dimensões PASS (ou N/A)** → apresente tasks ao usuário normalmente e peça aprovação.
187
+ - **Qualquer dimensão FAIL** → PARE. Mostre a tabela no chat como markdown (NÃO esconda no arquivo de validação; o usuário precisa ver antes de aprovar). Depois pergunte ao usuário:
188
+ - "(a) Quer que eu conserte as tasks automaticamente?" → regenerar tasks afetadas, re-rodar o check.
189
+ - "(b) Vai editar tasks.md manualmente?" → aguardar usuário sinalizar conclusão, re-rodar o check.
190
+ - "(c) Override e seguir mesmo com FAIL?" → exigir mensagem de override explícita ("override: aceito o gap porque <motivo>"). Persistir o override em `tasks-validation.md` para auditabilidade.
191
+
192
+ O arquivo `tasks-validation.md` é commitado junto com `tasks.md`. Comandos downstream (`/dw-run-plan`, `/dw-code-review`, `/dw-review-implementation`) podem referenciá-lo.
193
+
152
194
  Após completar a análise e gerar todos os arquivos necessários, apresente os resultados ao usuário e aguarde confirmação para prosseguir com a implementação.
153
195
  </system_instructions>
@@ -23,6 +23,7 @@
23
23
  Quando disponíveis no projeto em `./.agents/skills/`, use como apoio:
24
24
 
25
25
  - `dw-council` (opt-in via `--council`): debate multi-advisor da decisão arquitetural principal com steel-manning. **NÃO invocar por padrão**.
26
+ - `dw-source-grounding` (**SEMPRE**): cada decisão de framework/library segue Detect → Fetch → Implement → Cite. O techspec emite citações inline `[source: <url>, version: X.Y, retrieved: YYYY-MM-DD]` ao lado de cada decisão arquitetural.
26
27
  - `vercel-react-best-practices`: use quando definir arquitetura frontend para projetos React/Next.js
27
28
  - `ui-ux-pro-max`: use quando definir decisões de design system, paletas de cores, tipografia e estilo UI no TechSpec
28
29
  - `security-review`: use quando a feature tocar auth, autorização ou manipulação de dados sensíveis
@@ -32,11 +33,29 @@
32
33
  <critical>Se `.dw/intel/` existir, a consulta via `/dw-intel` é OBRIGATÓRIA antes de redigir o techspec. NÃO pule este passo.</critical>
33
34
  - Execute internamente: `/dw-intel "padrões arquiteturais e decisões técnicas do projeto"`
34
35
  - Alinhe propostas com padrões existentes; sinalize desvios explicitamente
36
+ - Quando o techspec define endpoints de API, consulte TAMBÉM `dw-codebase-intel/references/api-design-discipline.md` (Hyrum's Law, contract-first, error semantics, boundary validation, versionamento) — o novo endpoint deve seguir convenções já presentes em `apis.json`, e não impor "best practices" externas que conflitem com os padrões existentes.
35
37
 
36
38
  Se `.dw/intel/` NÃO existir:
37
39
  - Use `.dw/rules/` como contexto, caindo para grep
38
40
  - Sugira rodar `/dw-map-codebase` para enriquecer contexto downstream
39
41
 
42
+ ## Constitution Gate
43
+
44
+ <critical>ANTES de redigir decisões arquiteturais, cheque `.dw/constitution.md`:
45
+
46
+ **Se AUSENTE**: copie `templates/constitution-template.md` (project-local em `.dw/templates/constitution-template.md`, com fallback para scaffold bundled) literalmente para `.dw/constitution.md`. Setar frontmatter `mode: defaults`. Imprimir no chat: "Constituição defaults instalada em `.dw/constitution.md` (severity: info — não bloqueia este techspec). Seguindo." Depois prossiga.
47
+
48
+ **Se PRESENTE**: leia. Toda escolha de framework / library / arquitetura no techspec DEVE carregar uma de:
49
+ - `Respects: P-NNN` — a decisão honra ativamente o(s) princípio(s) nomeado(s).
50
+ - `Deviates: P-NNN — justification: <slug do ADR ou racional em uma linha>` — a decisão se afasta intencionalmente do princípio.
51
+
52
+ **Gate graduado por severity:**
53
+ - Desvio de princípio `severity: info` → apenas registra, nunca bloqueia.
54
+ - Desvio de princípio `severity: high` sem ADR linkado (`.dw/spec/<prd>/adrs/adr-NNN.md`) → BLOQUEIA o techspec. Instrua o usuário a revisar a decisão OU criar ADR via `/dw-adr` documentando o trade-off.
55
+ - Desvio de princípio `severity: critical` → BLOQUEIA o techspec com mesma exigência de ADR, adicionalmente exigindo acknowledgment de reviewer no campo `Approved by` do ADR.
56
+
57
+ Sem exceções para `high`/`critical` sem ADR. Se o usuário resistir, aponte para `/dw-adr` — esse é o escape hatch por design.</critical>
58
+
40
59
  ## Fluxograma de Decisão Multi-Projeto
41
60
 
42
61
  ```dot
@@ -5,6 +5,12 @@ Você é um assistente de pesquisa avançada capaz de conduzir investigações p
5
5
  <critical>NUNCA fabrique citações - se não encontrar fonte, diga explicitamente</critical>
6
6
  <critical>A bibliografia DEVE conter TODAS as citações usadas no corpo do relatório, sem abreviações ou ranges</critical>
7
7
 
8
+ ## Skills Complementares
9
+
10
+ | Skill | Gatilho |
11
+ |-------|---------|
12
+ | `dw-source-grounding` | **SEMPRE** — aplica o protocolo Detect → Fetch → Implement → Cite com hierarquia estrita de fontes (docs oficiais versionadas > changelogs > web standards > compat tables; Stack Overflow / blogs / training data são só descoberta). Cada finding termina com `[source: <url>, version: X.Y, retrieved: YYYY-MM-DD]`; a bibliografia e construida a partir dessas citacoes. |
13
+
8
14
  ## Quando Usar
9
15
  - Use para análise abrangente multi-fonte, comparações de tecnologia ou revisões do estado da arte que exigem evidências citadas
10
16
  - NÃO use para buscas simples, debugging ou perguntas que podem ser respondidas com 1-2 buscas
@@ -29,6 +29,7 @@ Este comando e **distinto** do `/dw-security-check`:
29
29
  | `dw-verify` | **SEMPRE** — toda fase emite VERIFICATION REPORT (comandos rodados, exit codes, artefatos) antes da proxima fase comecar |
30
30
  | `dw-review-rigor` | **SEMPRE** — aplica deduplicacao (mesmo advisory em N pacotes = 1 finding com lista afetada), severity ordering, e signal-over-volume na lista OUTDATED-MINOR |
31
31
  | `security-review` (`references/supply-chain.md`) | **SEMPRE** ao classificar findings — da o framing OWASP A06 (Vulnerable & Outdated Components) para os trade-offs do brainstorm |
32
+ | `dw-source-grounding` | **SEMPRE** na fase de brainstorm — cada opcao de update por pacote (Conservadora/Balanceada/Ousada) cita o changelog/release notes oficial da versao alvo: `[source: <url>, version: X.Y, retrieved: YYYY-MM-DD]`. Previne "agent recomenda v5 porque parece moderno, mas v5 dropou Node 18". |
32
33
  | `dw-council` | Opt-in automatico quando >=3 pacotes caem em tier COMPROMISED — stress-test multi-conselheiro sobre ordem e escopo de remediacao |
33
34
  | `webapp-testing` | Opcional — quando o projeto e frontend e a fase de testes escopados precisa de selecao Playwright-aware |
34
35
 
@@ -15,7 +15,7 @@ Voce e um assistente de descoberta de skills neste workspace. Sua funcao e ajuda
15
15
 
16
16
  ## Posicao no Pipeline
17
17
 
18
- **Predecessor:** qualquer pergunta exploratoria | **Sucessor:** nenhum (fluxo independente). Se nao achar skill, caia para `/dw-brainstorm` (explorar ideias) ou `/dw-quick` (mudanca pequena one-off) quando aplicavel.
18
+ **Predecessor:** qualquer pergunta exploratoria | **Sucessor:** nenhum (fluxo independente). Se nao achar skill, caia para `/dw-brainstorm` (explorar ideias) ou `/dw-run-task` (mudanca pequena one-off) quando aplicavel.
19
19
 
20
20
  ## Skills Complementares
21
21
 
@@ -81,7 +81,7 @@ Catalogo: https://skills.sh/
81
81
  - Reconheca que nao houve match, sem inventar
82
82
  - Ofereca ajudar direto com capacidades gerais
83
83
  - Sugira `/dw-brainstorm` se o usuario quer explorar antes de construir
84
- - Sugira `/dw-quick` se cabe em uma mudanca pequena (<= 3 arquivos, sem PRD)
84
+ - Sugira `/dw-run-task` se cabe em uma mudanca pequena (<= 3 arquivos, sem PRD)
85
85
  - Mencione `npx skills init <nome>` como caminho para criar a skill que falta
86
86
 
87
87
  ## Categorias Comuns
@@ -128,7 +128,7 @@ Pesquisei skills sobre "<query>" e nao achei match forte
128
128
 
129
129
  Posso ajudar direto. Ou:
130
130
  /dw-brainstorm "<sua ideia>" — explorar abordagens antes
131
- /dw-quick "<mudanca pequena>" — se cabe em uma task curta
131
+ /dw-run-task "<mudanca pequena>" — se cabe em uma task curta (escreva PRD curto antes)
132
132
  npx skills init <nome> — criar voce mesmo se vale a pena reutilizar
133
133
  ```
134
134
 
@@ -150,7 +150,7 @@ Posso ajudar direto. Ou:
150
150
  `dw-find-skills` porta a skill `find-skills` (do bundle superpowers do Claude, `~/.agents/skills/find-skills/SKILL.md`) para um comando do workflow `dw-*` — assim toda plataforma suportada (Claude Code, Codex, Copilot, OpenCode) ganha a mesma porta de descoberta. Adaptacoes para o dev-workflow:
151
151
 
152
152
  - Integracao com o pipeline: `/dw-help <keyword>` roteia para ca quando bate em `skill`/`find skill`/`install skill`/`extend agent`.
153
- - Fallback para `/dw-brainstorm` ou `/dw-quick` quando nao acha skill — mantem o usuario dentro do workflow ao inves de despeja-lo de maos vazias.
153
+ - Fallback para `/dw-brainstorm` ou `/dw-run-task` quando nao acha skill — mantem o usuario dentro do workflow ao inves de despeja-lo de maos vazias.
154
154
  - Pergunta explicita de escopo (`-g` vs local) antes de instalar, em vez de assumir global.
155
155
 
156
156
  Credito: skill `find-skills` do ecossistema superpowers do Claude e o projeto `npx skills` / [skills.sh](https://skills.sh/).
@@ -18,6 +18,7 @@ Você é um assistente IA especializado em correção de bugs pós-QA com retest
18
18
 
19
19
  Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como suporte operacional sem substituir este comando:
20
20
 
21
+ - `dw-debug-protocol`: **SEMPRE** — todo finding bug-shaped (cenário falhando, não feature ausente) passa pelo six-step triage. A evidência de reteste é o artefato da etapa 6 (verify); o regression test da etapa 5 é o que sustenta o status `Corrigido`.
21
22
  - `dw-verify`: **SEMPRE** — invocada antes de marcar qualquer bug como `Corrigido` ou `Fechado` no `QA/bugs.md`. Sem VERIFICATION REPORT PASS (test + lint + build) + evidência de reteste (screenshot em modo UI OU linha JSONL em modo API), o status permanece `Reaberto` ou `Em análise`.
22
23
  - `webapp-testing`: (modo UI) suporte para estruturar retestes, capturas e scripts quando complementar ao Playwright MCP
23
24
  - `vercel-react-best-practices`: (modo UI) use apenas se a correção afetar frontend React/Next.js e houver risco de regressão de renderização, hidratação, fetching ou performance
@@ -14,6 +14,7 @@
14
14
  | Skill | Gatilho |
15
15
  |-------|---------|
16
16
  | `dw-verify` | **SEMPRE** — invocada antes do `git push`. Sem VERIFICATION REPORT PASS na sessão após a última edição de código, o PR **NÃO** pode ser criado. |
17
+ | `dw-git-discipline` | **SEMPRE** — valida naming de branch (`<tipo>/<escopo>` kebab-case), histórico atomic-commit (cada commit single-intent, mensagem conventional), tempo de vida da branch (flag se >7 dias) e escopo da PR (sugere split se diff > ~400 linhas). Descrição da PR segue summary + test plan, não dump de `git log`. |
17
18
  | `/dw-security-check` | **SEMPRE para projetos TS/Python/C#/Rust** — `security-check.md` com status ≠ REJECTED é obrigatório para projetos em linguagem suportada. |
18
19
 
19
20
  <critical>Hard gate 1 (verify): se a sessão atual não tem um VERIFICATION REPORT PASS de `dw-verify` produzido APÓS a última edição/commit, PARAR e invocar `dw-verify` antes de prosseguir. PR é um artefato permanente — exige o maior rigor de verificação.</critical>
@@ -23,20 +23,14 @@ Você é um assistente de ajuda do workspace. Quando invocado, apresente ao usu
23
23
  | qa, teste visual, playwright | `/dw-run-qa` | QA E2E com browser automation |
24
24
  | refactor, smell, fowler | `/dw-refactoring-analysis` | Auditoria de code smells priorizada |
25
25
  | design, ui, redesign | `/dw-redesign-ui` | Auditoria + propostas + implementação visual |
26
- | decisão, adr, arquitetura | `/dw-adr` | Registrar Architecture Decision Record |
27
26
  | debate, council, stress-test, opiniões | `/dw-brainstorm --council` ou `/dw-create-techspec --council` | Invoca `dw-council` para debate multi-advisor |
28
27
  | security, segurança, vulnerabilidade, owasp, trivy, cve | `/dw-security-check` | Check multi-camada rígido (OWASP estático + Trivy SCA/IaC + audit nativo) para TS/Python/C#/Rust |
29
28
  | supply chain, outdated, comprometido, pacote malicioso, atualizar deps, npm audit, pip-audit | `/dw-deps-audit` | Detecta + classifica + plano de update por pacote com QA escopada. Vai além do `/dw-security-check` adicionando remediação. |
30
29
  | skill, achar skill, instalar skill, ecossistema, capacidade, estender agente | `/dw-find-skills` | Descobre skills no skills.sh / `npx skills` e instala global ou local |
31
30
  | projeto novo, scaffold, bootstrap, comecar, iniciar projeto, fullstack, monorepo | `/dw-new-project` | Entrevista de stack + tools create-* + docker-compose para dev. Roda apos `npx dev-workflow init`. |
32
31
  | dockerize, docker, dockerfile, compose, container, imagem prod, multi-stage | `/dw-dockerize` | Le projeto existente, brainstorm de base, gera Dockerfile + docker-compose para dev/prod/ambos, ou audita artefatos existentes. |
33
- | mapear codebase, indice intel, code map, knowledge graph, indice queryable | `/dw-map-codebase` | Constroi .dw/intel/ (stack/files/apis/deps/arch) para /dw-intel e outros comandos pararem de re-explorar o codebase. |
34
- | executar fase, tasks paralelas, wave, dispatch, commits atomicos | `/dw-execute-phase` | Roda uma fase de PRD em waves com commits atomicos por task, deviation handling e gate hard de plan-checker antes de tocar codigo. |
35
- | plan check, verificar plano, validacao de plano, goal backward | `/dw-plan-checker` | Verificacao goal-backward de tasks.md antes da execucao. PASS / REVISE / BLOCK em 6 dimensoes. |
36
32
  | refinamento, refine, idea, one-pager, ideia | `/dw-brainstorm --onepager` | Refinamento de ideia com Product Inventory + classification (IMPROVES/CONSOLIDATES/NEW) + one-pager durável |
37
33
  | reverter, rollback de task | `/dw-revert-task` | Revert seguro com check de dependências |
38
- | hotfix, mudança rápida | `/dw-quick` | Task pontual com garantias sem PRD |
39
- | retomar, onde parei | `/dw-resume` | Restaura contexto da sessão anterior |
40
34
  | pesquisa, research | `/dw-deep-research` | Pesquisa multi-fonte com citações |
41
35
  | ideia, brainstorm | `/dw-brainstorm` | Ideação estruturada com trade-offs |
42
36
  | atualizar dev-workflow | `/dw-update` | Atualiza para versão npm mais recente |
@@ -117,9 +111,6 @@ Este workspace utiliza um sistema de comandos AI que automatiza o ciclo completo
117
111
  | `/dw-bugfix` | Analisa e corrige bugs (triagem bug vs feature) | Target + descrição | Fix + commit OU PRD (se feature) |
118
112
  | `/dw-fix-qa` | Corrige bugs documentados no QA e retesta com evidências | Path do PRD | Código + `QA/bugs.md` + `QA/qa-report.md` atualizados |
119
113
  | `/dw-redesign-ui` | Audita, propõe e implementa redesign visual de páginas/componentes | Página/componente alvo | Brief de redesign + código |
120
- | `/dw-quick` | Executa task pontual com garantias do workflow sem PRD | Descrição da mudança | Código + commit |
121
- | `/dw-resume` | Restaura contexto da sessão e sugere próximo passo | (nenhum) | Resumo + sugestão |
122
- | `/dw-intel` | Consulta inteligência do codebase sobre padrões e arquitetura | Pergunta | Resposta com fontes |
123
114
  | `/dw-autopilot` | Orquestrador completo: de um desejo até o PR com mínima intervenção | Descrição do desejo | PRD + código + commits + PR |
124
115
 
125
116
  ### Análise e Pesquisa
@@ -154,11 +145,15 @@ Este workspace utiliza um sistema de comandos AI que automatiza o ciclo completo
154
145
  | `/dw-generate-pr` | Push + cria PR + copia body + abre URL | Branch alvo | PR no GitHub |
155
146
  | `/dw-revert-task` | Reverte com segurança os commits de uma task específica (check de dependências + confirmação) | Path do PRD + número da task | Commits revertidos + `tasks.md` atualizado |
156
147
 
157
- ### Decisões Arquiteturais
148
+ ### Comandos internos (usados por outros dw-* commands; raramente invocados direto)
158
149
 
159
- | Comando | O que faz | Input | Output |
160
- |---------|-----------|-------|--------|
161
- | `/dw-adr` | Registra um Architecture Decision Record (ADR) para decisão não-trivial durante o PRD | Path do PRD + título | `.dw/spec/<prd>/adrs/adr-NNN.md` + cross-refs atualizadas |
150
+ | Comando | O que faz | Tipicamente invocado por |
151
+ |---------|-----------|--------------------------|
152
+ | `/dw-adr` | Registra Architecture Decision Record durante execução do PRD | `/dw-create-techspec`, `/dw-run-task` quando surge decisão não-trivial |
153
+ | `/dw-intel` | Consulta o índice do codebase em `.dw/intel/` | `/dw-create-prd`, `/dw-create-techspec`, `/dw-code-review` etc. |
154
+ | `/dw-map-codebase` | Constroi/refresca o índice queryable em `.dw/intel/` | `/dw-analyze-project` (auto-roda após geração de rules) |
155
+
156
+ Esses ficam expostos como slash commands para uso manual ocasional (ex.: registrar ADR rapidamente mid-sessão, consultas ad-hoc no codebase) mas a maioria dos usuários nunca invoca direto — eles são chamados pelos comandos high-level acima.
162
157
 
163
158
  ### Utilitários
164
159
 
@@ -245,16 +240,6 @@ Inspiradas em skills do projeto [Compozy](https://github.com/compozy/compozy) (`
245
240
  /dw-autopilot "descrição do que quer construir" # Pesquisa → PRD → Tasks → Código → QA → PR
246
241
  ```
247
242
 
248
- ### Task Rápida
249
- ```bash
250
- /dw-quick "descrição da mudança" # Implementa + valida + commit
251
- ```
252
-
253
- ### Retomar Sessão
254
- ```bash
255
- /dw-resume # Restaura contexto + sugere próximo passo
256
- ```
257
-
258
243
  ### Consultar Codebase
259
244
  ```bash
260
245
  /dw-intel "como funciona X neste projeto?" # Resposta com fontes
@@ -287,9 +272,7 @@ workspace/
287
272
  │ │ ├── dw-review-implementation.md
288
273
  │ │ ├── dw-deep-research.md
289
274
  │ │ ├── dw-intel.md
290
- │ │ ├── dw-quick.md
291
275
  │ │ ├── dw-redesign-ui.md
292
- │ │ ├── dw-resume.md
293
276
  │ │ ├── dw-bugfix.md
294
277
  │ │ ├── dw-fix-qa.md
295
278
  │ │ ├── dw-commit.md
@@ -339,10 +322,7 @@ workspace/
339
322
  - Sim. O comando é framework-agnostic. Para React usa react-doctor e `vercel-react-best-practices`; para Angular usa `ng lint` e Angular DevTools. Design visual (`ui-ux-pro-max`) funciona com qualquer framework.
340
323
 
341
324
  **Q: Como obtenho inteligência do codebase e execução paralela?**
342
- - Os dois são nativos do dev-workflow desde a v0.9.0. Rode `/dw-map-codebase` para construir o índice queryable em `.dw/intel/`, depois `/dw-intel "<pergunta>"` para consultá-lo. Para execução paralela, `/dw-execute-phase` dispatcha tasks em waves com commits atômicos por task. Sem dependência externa.
343
-
344
- **Q: O `/dw-quick` substitui o `/dw-run-task`?**
345
- - Não. `/dw-quick` é para mudanças pontuais sem PRD. `/dw-run-task` executa tasks de um plano estruturado com PRD e TechSpec.
325
+ - Os dois são nativos do dev-workflow. Rode `/dw-map-codebase` para construir o índice queryable em `.dw/intel/`, depois `/dw-intel "<pergunta>"` para consultá-lo. Para execução paralela, `/dw-run-plan` invoca os agentes bundled de execução de fase (executor + plan-checker) diretamente para dispatcha tasks em waves com commits atômicos por task. Sem dependência externa.
346
326
 
347
327
  **Q: O `/dw-autopilot` substitui todos os outros comandos?**
348
328
  - Não. Ele orquestra os comandos existentes em sequência. Você ainda pode usar cada comando individualmente para controle manual. O autopilot é para quando quer ir do desejo ao PR com mínima intervenção.
@@ -10,7 +10,7 @@ Voce e um assistente de inteligencia do codebase. Este comando responde pergunta
10
10
  - Use para entender como algo funciona no projeto (fluxo de auth, modelo de dados, superficie de rotas)
11
11
  - Use para encontrar padroes, convencoes ou decisoes arquiteturais
12
12
  - Use para verificar se algo ja existe antes de implementar
13
- - NAO use para implementar mudancas (use `/dw-quick` ou `/dw-run-task`)
13
+ - NAO use para implementar mudancas (use `/dw-run-task`)
14
14
 
15
15
  ## Posicao no Pipeline
16
16
 
@@ -21,8 +21,9 @@ Pré-requisito: Execute `/dw-analyze-project` primeiro para entender padrões e
21
21
  Quando disponíveis no projeto em `./.agents/skills/`, use como suporte analítico sem substituir este comando:
22
22
 
23
23
  - `dw-review-rigor`: **SEMPRE** — ao catalogar code smells, aplicar de-duplication (mesmo smell em N arquivos = 1 entrada com affected list), severity ordering nos P0-P3, signal-over-volume (máx ~20 findings; manter críticos, podar marginais). Smell com ADR justificatório baixa para `low` no máximo.
24
+ - `dw-simplification`: **SEMPRE** — todo smell flagueado passa pelo filtro Chesterton's Fence (o que o construto FAZ, por que foi adicionado, o que quebra se removido). Smells sem resposta clara para "por que isso está aqui" caem para `info` com nota de investigação, em vez de virarem proposta de refactor. Métricas de complexidade fundamentam severidade (complexidade cognitiva ≥16 ou nesting depth ≥4 = candidato `high`; <10 = `low` no máximo).
24
25
  - `security-review`: delegue preocupações de segurança para este skill — não duplique
25
- - `vercel-react-best-practices`: delegue padrões de performance React/Next.js para este skill
26
+ - `vercel-react-best-practices`: delegue padrões de performance React/Next.js para este skill — ao sinalizar smells de perf, siga `references/perf-discipline.md` (measure → identify → fix → verify → guard) e cite a métrica + ferramenta, não vibes
26
27
 
27
28
  ## Ferramentas de Análise
28
29
 
@@ -313,6 +313,25 @@
313
313
 
314
314
  <critical>NÃO APROVE requisitos sem evidência concreta no código</critical>
315
315
  <critical>ANALISE o código real, não confie apenas nos checkboxes do tasks.md</critical>
316
- <critical>Se 100% dos requisitos foram implementados e NÃO há gaps: NÃO entre em plan mode, NÃO crie tasks. Apenas apresente o relatório e ENCERRE.</critical>
317
- <critical>Se gaps forem encontrados, entre no loop de fix-review automaticamente. NÃO aguarde instruções do usuário para corrigir gaps. Máximo de 3 ciclos antes de marcar como BLOCKED.</critical>
316
+ <critical>Se 100% dos requisitos foram implementados e NÃO há gaps: NÃO entre em plan mode, NÃO crie tasks. Apresente o relatório Level 2 e siga para Level 3 (próxima seção).</critical>
317
+ <critical>Se gaps forem encontrados, entre no loop de fix-review automaticamente. NÃO aguarde instruções do usuário para corrigir gaps. Máximo de 3 ciclos antes de marcar como BLOCKED. Level 3 só roda após o loop chegar em APPROVED no Level 2.</critical>
318
+
319
+ ## Level 3 — Camada de Qualidade (auto-invocada no fim)
320
+
321
+ Após Level 2 (cobertura do PRD) chegar em APPROVED, **invoque automaticamente `/dw-code-review`** para adicionar a camada formal de qualidade (best practices, SOLID, DRY, complexity, security, convenções). Resolve a expectativa do usuário de que um review único cubra tanto "entregamos tudo?" (Level 2) quanto "o que entregamos está bem feito?" (Level 3).
322
+
323
+ Pipeline:
324
+
325
+ 1. Após Level 2 APPROVED, rode `/dw-code-review {{PRD_PATH}}` com o mesmo escopo de PRD.
326
+ 2. Aguarde `/dw-code-review` produzir veredito (APPROVED / APPROVED WITH CAVEATS / REJECTED).
327
+ 3. Escreva resumo consolidado em `{{PRD_PATH}}/QA/review-consolidated.md` referenciando ambos.
328
+ 4. Status final combina os dois vereditos:
329
+ - Level 2 APPROVED + Level 3 APPROVED → consolidado APPROVED
330
+ - Level 2 APPROVED + Level 3 APPROVED WITH CAVEATS → consolidado APPROVED WITH CAVEATS
331
+ - Level 2 APPROVED + Level 3 REJECTED → consolidado REJECTED (Level 3 vence)
332
+
333
+ ### Flag para pular Level 3
334
+
335
+ `/dw-review-implementation --no-code-review` pula Level 3 e emite só Level 2.
336
+
318
337
  </system_instructions>
@@ -158,7 +158,7 @@ Se uma tarefa FALHAR durante a execução:
158
158
 
159
159
  ### Verificação de Plano (Pré-Execução)
160
160
 
161
- Antes de iniciar execução, delegue para `/dw-plan-checker {{PRD_PATH}}`:
161
+ Antes de iniciar execução, spawne o **agente plan-checker** de `.agents/skills/dw-execute-phase/agents/plan-checker.md`:
162
162
  - O agente plan-checker verifica as 6 dimensões (cobertura de requisitos, completude da task, soundness de dependência, wiring de artefatos, budget de contexto, compliance de constraints)
163
163
  - Se REVISE: apresente os issues e sugira correções. Máximo 3 ciclos via `/dw-create-tasks --revise`
164
164
  - Se BLOCK: suba o conflito para o usuário, NÃO auto-replan
@@ -166,7 +166,7 @@ Antes de iniciar execução, delegue para `/dw-plan-checker {{PRD_PATH}}`:
166
166
 
167
167
  ### Execução Paralela (Wave-Based)
168
168
 
169
- Após PASS do plan-checker, delegue para `/dw-execute-phase {{PRD_PATH}}`:
169
+ Após PASS do plan-checker, spawne o **agente executor** de `.agents/skills/dw-execute-phase/agents/executor.md`:
170
170
  - O agente executor analisa o campo `Depends on:` de cada task para montar o grafo de dependências
171
171
  - Agrupa tasks em waves:
172
172
  - Wave 1: tasks sem dependências (rodam em paralelo)
@@ -0,0 +1,111 @@
1
+ ---
2
+ schema_version: "1.0"
3
+ generated_by: dev-workflow
4
+ last_updated: YYYY-MM-DD
5
+ mode: defaults | custom
6
+ ---
7
+
8
+ # Constituição do Projeto
9
+
10
+ > Princípios declarativos que este time escolheu seguir. PRDs, TechSpecs e Code Reviews leem este arquivo como hard gate. Qualquer coisa que viole um princípio com `severity: critical` ou `high` é bloqueada — exceto quando justificada por um ADR explícito.
11
+
12
+ ## Como este arquivo funciona
13
+
14
+ - **Cada princípio tem um ID (`P-NNN`), severity, regra, `Why` e `Enforcement`.**
15
+ - **Escala de severity:** `info` (apenas reporta, nunca bloqueia) → `high` (bloqueia PR sem ADR) → `critical` (bloqueia PR sem ADR + exige aprovação de reviewer).
16
+ - **Edite à vontade.** Este arquivo é seu para evoluir. Promova princípios de `info` para `high` quando confiar que o projeto cumpre.
17
+ - **Escape via ADR.** Um PR que viola princípio `high`/`critical` é desbloqueado quando um ADR na mesma feature documenta o desvio e o trade-off.
18
+ - **Versão analítica regenerável** a qualquer momento via `/dw-analyze-project` (oferece sintetizar princípios a partir dos padrões observados no código).
19
+
20
+ ---
21
+
22
+ ## Qualidade de Código
23
+
24
+ **P-001 — Sem `any` / `unknown` em TypeScript sem justificativa** (severity: info)
25
+ **Regra:** Código de produção não pode usar `as any`, `as unknown` ou `// @ts-ignore` sem comentário inline `// @ts-ignore — motivo: <X>` nomeando a restrição.
26
+ **Why:** Escapes silenciosos do tipo vazam bugs de runtime que o type system existia para pegar. Cada escape é um contrato que o type system para de garantir.
27
+ **Enforcement:** `dw-code-review` greppa o diff por `as any`/`@ts-ignore`/`@ts-expect-error` sem comentário-razão correspondente.
28
+
29
+ **P-002 — Funções devem ser testáveis isoladamente** (severity: info)
30
+ **Regra:** Função que toca rede, filesystem, banco de dados ou system clock deve receber a dependência como parâmetro (ou via factory) em vez de importar diretamente.
31
+ **Why:** Código que constrói suas próprias dependências não pode ser testado sem setup de integração. Testes ficam lentos, são pulados, e bugs vão pra produção.
32
+ **Enforcement:** `dw-code-review` flagueia funções importando `fs`, `axios`, `prisma`, `Date.now`, etc., diretamente em módulos de business logic.
33
+
34
+ ---
35
+
36
+ ## Padrões de Teste
37
+
38
+ **P-003 — Todo bug fix carrega um regression test** (severity: info)
39
+ **Regra:** Commit com tipo `fix:` deve adicionar ou modificar pelo menos um teste que teria pego o bug antes do fix.
40
+ **Why:** Sem o teste, o bug volta na próxima vez que alguém refatora a área. O fix se deteriora.
41
+ **Enforcement:** `dw-code-review` verifica se commits `fix:` incluem diff em paths `**/*test*` ou `**/*spec*`.
42
+
43
+ **P-004 — Testes devem ser determinísticos** (severity: info)
44
+ **Regra:** Sem `sleep`-based waits, sem comparações de relógio real, sem chamadas a serviços live em unit tests. Mockar em boundaries.
45
+ **Why:** Testes flaky treinam o time a ignorar falhas. A próxima falha real passa despercebida.
46
+ **Enforcement:** `dw-code-review` greppa testes por `setTimeout`, chamadas reais de fetch/axios, e `Date.now()` sem `vi.useFakeTimers()`/`jest.useFakeTimers()`.
47
+
48
+ ---
49
+
50
+ ## Consistência de UX
51
+
52
+ **P-005 — Strings user-facing vivem em fonte única** (severity: info)
53
+ **Regra:** Toda copy visível (labels, mensagens de erro, empty states) passa por um módulo centralizado de i18n / strings — não inline em componentes.
54
+ **Why:** Strings inline driftam no tom, quebram esforços de i18n e causam duplicatas da mesma mensagem em variações sutis.
55
+ **Enforcement:** `dw-code-review` flagueia text nodes JSX e mensagens de erro declarados dentro de componentes em vez de importados de `src/strings/`, `src/i18n/`, ou equivalente.
56
+
57
+ **P-006 — Estados de loading + empty + error são obrigatórios em qualquer UI que busca dados** (severity: info)
58
+ **Regra:** Componente ou página que faz fetch deve renderizar explicitamente loading, empty e error — não só o happy path.
59
+ **Why:** Experiências "só com spinner" e estados de erro silencioso são a #1 fonte de bugs reportados por usuários.
60
+ **Enforcement:** `dw-review-implementation` verifica componentes de data-fetching pelos três estados em JSX ou equivalente.
61
+
62
+ ---
63
+
64
+ ## Performance
65
+
66
+ **P-007 — Mudanças de performance carregam medição** (severity: info)
67
+ **Regra:** Qualquer commit que afirme melhorar performance deve incluir a métrica, a ferramenta e os números antes/depois no body do commit OU no techspec.
68
+ **Why:** Sem medição, "otimização" de performance é palpite — e geralmente errado (ver `dw-simplification` + `perf-discipline.md`).
69
+ **Enforcement:** `dw-code-review` verifica commits `perf:` por números antes/depois; flagueia se ausente.
70
+
71
+ **P-008 — Queries N+1 são flagueadas em code review** (severity: info)
72
+ **Regra:** Loops ou operações em lista que disparam chamadas DB/HTTP por item devem batchar (ex: `IN (...)`, `findMany`, DataLoader) ou ser explicitamente justificadas.
73
+ **Why:** Padrões N+1 escalam linearmente com tamanho dos dados e silenciosamente degradam até que a carga de produção revele.
74
+ **Enforcement:** `dw-code-review` e `dw-refactoring-analysis` detectam padrões await-em-loop contra módulos de repository / API client.
75
+
76
+ ---
77
+
78
+ ## Segurança
79
+
80
+ **P-009 — Authorization server-side em todo endpoint que altera estado** (severity: info)
81
+ **Regra:** Endpoint que cria, atualiza ou deleta dado deve verificar autorização do caller no servidor. Gating em UI (botões escondidos, formulários disabled) não é segurança.
82
+ **Why:** Browsers são untrusted (ver `webapp-testing/security-boundary.md`). Gating em UI é conveniência; só checks server-side protegem dado.
83
+ **Enforcement:** `dw-code-review` e `dw-security-check` exigem check de auth explícito (decorator, middleware ou assertion in-handler) em rotas POST/PUT/PATCH/DELETE.
84
+
85
+ **P-010 — Secrets nunca entram no repositório** (severity: info)
86
+ **Regra:** Nenhuma API key, password, signing key, token ou endpoint de produção commitado em source. `.env.example` documenta forma apenas.
87
+ **Why:** Histórico de repositório é permanente. Um secret commitado uma vez está vazado mesmo que revertido no commit seguinte.
88
+ **Enforcement:** `dw-security-check` roda Trivy + secret scanners no diff.
89
+
90
+ ---
91
+
92
+ ## Princípios Customizados
93
+
94
+ > Adicione princípios específicos do seu time abaixo. Mesmo formato: `**P-NNN — <nome>** (severity: info|high|critical): <regra>. **Why:** <motivo>. **Enforcement:** <como>.`
95
+
96
+ <!-- Exemplo:
97
+ **P-100 — Todo cálculo financeiro usa Decimal, nunca Number** (severity: critical)
98
+ **Regra:** Valores monetários devem usar tipos `Decimal` / `BigDecimal` end-to-end. Sem `parseFloat`, sem aritmética com `Number`.
99
+ **Why:** Erros de arredondamento IEEE 754 acumulam centavos perdidos em milhões de transações; ambientes auditados exigem aritmética exata.
100
+ **Enforcement:** `dw-code-review` greppa por `Number(`/`parseFloat(` em qualquer arquivo sob `src/billing/`, `src/payments/`, `src/finance/`.
101
+ -->
102
+
103
+ ---
104
+
105
+ ## Como evoluir este arquivo
106
+
107
+ 1. **Viva em `info` por pelo menos um release-ciclo.** Observe quão frequentemente cada princípio é violado organicamente; o dado te diz se vale promover.
108
+ 2. **Promova para `high` quando violações forem raras e o time concordar.** PRs que violarem princípio `high` agora precisam de ADR.
109
+ 3. **Promova para `critical` os princípios que protegem usuários / dados / compliance.** Trate-os como load-bearing; o escape via ADR exige aprovação de reviewer, não só opt-out do autor.
110
+ 4. **Demote ou remova princípios que não ganharam seu peso.** Constitution é ferramenta, não museu.
111
+ 5. **Re-rode `/dw-analyze-project`** quando o codebase mudar substancialmente (nova stack, refactor grande); ele pode propor updates fundamentados em observação fresca.
@@ -86,5 +86,5 @@ Idealmente 2-4 stories. Se são mais de 5, provavelmente não é MVP.]
86
86
  Escolha UM:
87
87
 
88
88
  - **`/dw-create-prd`** com este one-pager como input — quando a direção está clara mas precisamos detalhar user stories, acceptance criteria e passar ao techspec
89
- - **`/dw-quick`** — quando é um IMPROVES tão pequeno que cabe em task única (até 3 arquivos, sem novo endpoint/tela)
89
+ - **`/dw-run-task`** — quando é um IMPROVES tão pequeno que cabe em task única (até 3 arquivos, sem novo endpoint/tela) — escreva um PRD curto antes
90
90
  - **Parar aqui** — se alguma "Open Question" é bloqueante, parar e resolver com stakeholder antes de avançar
@@ -95,6 +95,7 @@ If no `.dw/intel/` exists at all, `/dw-intel` falls back to `.dw/rules/` (seeded
95
95
  - `references/intel-format.md` — schema for each `.dw/intel/` file with examples.
96
96
  - `references/incremental-update.md` — how partial updates work (which files to re-read, how to merge with existing entries).
97
97
  - `references/query-patterns.md` — how `/dw-intel` answers different question shapes (where-is, what-uses, architecture-of, dependency-of).
98
+ - `references/api-design-discipline.md` — Hyrum's Law, contract-first design, error semantics, boundary validation, versioning. Use when intel feeds techspec authoring (`/dw-create-techspec`) for endpoints — design must respect existing project conventions surfaced in `apis.json`. Adapted from [`addyosmani/agent-skills/api-design`](https://github.com/addyosmani/agent-skills/tree/main/api-design) (MIT).
98
99
 
99
100
  ## Inspired by
100
101
 
@@ -0,0 +1,138 @@
1
+ # API design discipline — contract-first, convention-respecting
2
+
3
+ > Adapted from [`addyosmani/agent-skills/api-design`](https://github.com/addyosmani/agent-skills/tree/main/api-design) (MIT). Patterns adapted to dev-workflow's context where intel feeds techspec authoring; emphasis is on respecting the project's existing conventions over imposing external standards.
4
+
5
+ When designing or extending APIs, the goal is not "follow REST best practices" — it's "fit this project's contract and remain stable." This file frames the discipline.
6
+
7
+ ## Hyrum's Law
8
+
9
+ > With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody.
10
+
11
+ Practical consequence: any field returned, any header sent, any error format used, any timing characteristic — at least one consumer probably depends on it. Changing it breaks them. This is true even for behaviors you consider "implementation details."
12
+
13
+ Implications:
14
+
15
+ 1. **Be deliberate about what you expose.** Returning `{ ok: true, data: ... }` instead of just `data` adds an observable that future consumers will couple to.
16
+ 2. **Default to the smallest contract that satisfies known consumers.** Adding more later is easy; removing later is breaking.
17
+ 3. **Treat the contract as load-bearing infrastructure.** Schema docs, type definitions, and OpenAPI/JSON Schema spec files are part of the contract, not metadata.
18
+
19
+ ## Read project intel before designing
20
+
21
+ When intel is available (`.dw/intel/` populated), read it first:
22
+
23
+ - `apis.json` — what shapes already exist? Naming patterns? Pagination style?
24
+ - `arch.md` — how do existing endpoints group? Which layer owns what?
25
+ - `stack.json` — what's the framework? Schema validator? Serializer?
26
+
27
+ A new API should look LIKE existing APIs in the project. If the project uses snake_case in JSON, your new endpoint uses snake_case. If existing endpoints return `{ data, meta }`, yours does too. Imposing an external "best practice" that conflicts with existing patterns adds inconsistency for no payoff.
28
+
29
+ ## Contract-first design
30
+
31
+ Before writing the handler, write the contract:
32
+
33
+ ```typescript
34
+ // API contract (TypeScript-first; equivalent in OpenAPI/Zod/etc.)
35
+ interface CreateOrderRequest {
36
+ customer_id: string;
37
+ items: { sku: string; qty: number }[];
38
+ shipping_address: Address;
39
+ }
40
+
41
+ interface CreateOrderResponse {
42
+ order_id: string;
43
+ status: 'pending' | 'confirmed';
44
+ estimated_ship_date: string; // ISO-8601
45
+ }
46
+
47
+ interface CreateOrderError {
48
+ code: 'invalid_input' | 'inventory_unavailable' | 'payment_declined';
49
+ message: string;
50
+ details?: Record<string, unknown>;
51
+ }
52
+ ```
53
+
54
+ The contract is reviewed BEFORE implementation. Errors caught here cost minutes; errors caught after release cost hours of migration.
55
+
56
+ ## Error semantics
57
+
58
+ Errors are part of the contract. Common pitfalls:
59
+
60
+ - **Generic 500 with no body.** Caller can't differentiate transient from permanent → over-retries.
61
+ - **Different error shapes per endpoint.** Caller can't write a unified error handler.
62
+ - **Validation errors mixed with auth errors mixed with server errors.** Status codes alone aren't enough; codes must be discriminating.
63
+
64
+ Discipline:
65
+
66
+ - Pick one error shape (e.g., `{ code, message, details? }` or RFC 7807 ProblemDetails). Use it everywhere.
67
+ - Distinguish: validation (`400`/`422`), auth (`401`/`403`), not-found (`404`), conflict (`409`), rate-limit (`429`), retryable server error (`503`), permanent server error (`500`).
68
+ - Document error codes alongside the request/response shape. Callers code against codes, not English messages.
69
+
70
+ ## Boundary validation
71
+
72
+ Validate at the API boundary, not deep inside.
73
+
74
+ - Use a schema validator (Zod, Joi, Pydantic, etc.) that matches the project's stack.
75
+ - Reject malformed input with a structured error before any business logic runs.
76
+ - Trust internal callers; validate external input.
77
+
78
+ The same principle applies on the response: type-check what you serialize. A handler returning `customer.email` when there's a possibility of `customer === null` produces a 500 in production — caught in development with strict typing.
79
+
80
+ ## Versioning
81
+
82
+ When the contract changes incompatibly, version. Common strategies:
83
+
84
+ | Strategy | Trade-off |
85
+ |----------|-----------|
86
+ | URL versioning (`/v1/orders`, `/v2/orders`) | Visible, simple; URL clutter |
87
+ | Header versioning (`Accept: application/vnd.app.v2+json`) | Cleaner URLs; less discoverable |
88
+ | Body versioning (`{ version: 2, ... }`) | Flexible per-request; more parsing complexity |
89
+
90
+ Pick the project's existing strategy; don't introduce a second one. Changing strategy is itself a breaking change.
91
+
92
+ When deprecating a version:
93
+
94
+ 1. Announce deprecation date in docs and response headers (`Deprecation: ...`, `Sunset: ...`).
95
+ 2. Continue to serve the old version for the announced period.
96
+ 3. Provide a migration guide for callers.
97
+ 4. Remove ONLY after the deprecation period and confirmation no callers remain.
98
+
99
+ ## Pagination
100
+
101
+ | Style | When |
102
+ |-------|------|
103
+ | Offset/limit (`?offset=20&limit=10`) | Small datasets, simple UIs. Breaks under concurrent inserts (skip/dup rows). |
104
+ | Cursor-based (`?cursor=abc&limit=10`) | Large datasets, infinite scroll. Stable under writes. |
105
+ | Page-based (`?page=3&per_page=10`) | UI-driven, equivalent to offset under the hood. |
106
+
107
+ Cursor is preferred for any list expected to grow large or change during browsing. Don't mix styles across the API.
108
+
109
+ ## Idempotency
110
+
111
+ Operations that can be retried (POST creating something, PUT updating, DELETE removing) need idempotency guarantees:
112
+
113
+ - **Idempotency keys:** caller sends a unique key with each request; server deduplicates.
114
+ - **Conditional requests:** use ETags / `If-Match` headers for safe concurrent updates.
115
+ - **Replay-safe semantics:** the operation produces the same outcome regardless of how many times it's retried.
116
+
117
+ Without these, retries cause duplicates (orders, charges, emails) — common production bug.
118
+
119
+ ## When the project has its own conventions
120
+
121
+ If `.dw/intel/apis.json` shows a strong existing pattern (e.g., all endpoints use `snake_case`, return `{ data, meta }`, use cursor pagination, error format `{ error: { code, message } }`):
122
+
123
+ - Follow it. Don't propose a "better" alternative without explicit user buy-in.
124
+ - Document the convention in the techspec so future contributors stay aligned.
125
+ - Inconsistency hurts more than imperfection.
126
+
127
+ ## Anti-patterns
128
+
129
+ - Designing the handler before the contract — handler implementation forces awkward shapes.
130
+ - Returning different shapes for success and error (callers need bifurcating type guards everywhere).
131
+ - Stuffing multiple operations into one endpoint (`POST /process`) — opaque, hard to test, hard to monitor.
132
+ - Using HTTP status 200 with a body indicating failure — callers can't trust standard error handling.
133
+ - Breaking changes shipped without a version bump.
134
+ - Adding "nice to have" fields to the response that aren't documented — callers will couple to them anyway (Hyrum).
135
+
136
+ ## Integration with dev-workflow
137
+
138
+ Use this discipline when authoring techspecs (`/dw-create-techspec`) or refactoring API surfaces. Cite `apis.json` evidence in the techspec — "existing endpoints use cursor pagination (apis.json:42); this endpoint follows the same pattern."