@brunosps00/dev-workflow 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -19
- package/lib/constants.js +2 -10
- package/lib/migrate-gsd.js +1 -1
- package/package.json +1 -1
- package/scaffold/en/commands/dw-autopilot.md +6 -6
- package/scaffold/en/commands/dw-brainstorm.md +1 -1
- package/scaffold/en/commands/dw-bugfix.md +1 -0
- package/scaffold/en/commands/dw-code-review.md +1 -0
- package/scaffold/en/commands/dw-commit.md +6 -0
- package/scaffold/en/commands/dw-create-techspec.md +2 -0
- package/scaffold/en/commands/dw-deep-research.md +6 -0
- package/scaffold/en/commands/dw-deps-audit.md +1 -0
- package/scaffold/en/commands/dw-find-skills.md +4 -4
- package/scaffold/en/commands/dw-fix-qa.md +1 -0
- package/scaffold/en/commands/dw-generate-pr.md +1 -0
- package/scaffold/en/commands/dw-help.md +9 -29
- package/scaffold/en/commands/dw-intel.md +1 -1
- package/scaffold/en/commands/dw-refactoring-analysis.md +2 -1
- package/scaffold/en/commands/dw-review-implementation.md +28 -2
- package/scaffold/en/commands/dw-run-plan.md +2 -2
- package/scaffold/en/templates/idea-onepager.md +1 -1
- package/scaffold/pt-br/commands/dw-autopilot.md +6 -6
- package/scaffold/pt-br/commands/dw-brainstorm.md +1 -1
- package/scaffold/pt-br/commands/dw-bugfix.md +1 -0
- package/scaffold/pt-br/commands/dw-code-review.md +1 -0
- package/scaffold/pt-br/commands/dw-commit.md +6 -0
- package/scaffold/pt-br/commands/dw-create-techspec.md +2 -0
- package/scaffold/pt-br/commands/dw-deep-research.md +6 -0
- package/scaffold/pt-br/commands/dw-deps-audit.md +1 -0
- package/scaffold/pt-br/commands/dw-find-skills.md +4 -4
- package/scaffold/pt-br/commands/dw-fix-qa.md +1 -0
- package/scaffold/pt-br/commands/dw-generate-pr.md +1 -0
- package/scaffold/pt-br/commands/dw-help.md +9 -29
- package/scaffold/pt-br/commands/dw-intel.md +1 -1
- package/scaffold/pt-br/commands/dw-refactoring-analysis.md +2 -1
- package/scaffold/pt-br/commands/dw-review-implementation.md +21 -2
- package/scaffold/pt-br/commands/dw-run-plan.md +2 -2
- package/scaffold/pt-br/templates/idea-onepager.md +1 -1
- package/scaffold/skills/dw-codebase-intel/SKILL.md +1 -0
- package/scaffold/skills/dw-codebase-intel/references/api-design-discipline.md +138 -0
- package/scaffold/skills/dw-debug-protocol/SKILL.md +106 -0
- package/scaffold/skills/dw-debug-protocol/references/error-categorization.md +127 -0
- package/scaffold/skills/dw-debug-protocol/references/non-reproducible-strategy.md +108 -0
- package/scaffold/skills/dw-debug-protocol/references/six-step-triage.md +139 -0
- package/scaffold/skills/dw-debug-protocol/references/stop-the-line.md +52 -0
- package/scaffold/skills/dw-git-discipline/SKILL.md +120 -0
- package/scaffold/skills/dw-git-discipline/references/atomic-commits-discipline.md +158 -0
- package/scaffold/skills/dw-git-discipline/references/branch-hygiene.md +150 -0
- package/scaffold/skills/dw-git-discipline/references/trunk-based-pattern.md +82 -0
- package/scaffold/skills/dw-memory/SKILL.md +1 -2
- package/scaffold/skills/dw-simplification/SKILL.md +142 -0
- package/scaffold/skills/dw-simplification/references/behavior-preserving.md +148 -0
- package/scaffold/skills/dw-simplification/references/chestertons-fence.md +152 -0
- package/scaffold/skills/dw-simplification/references/complexity-metrics.md +147 -0
- package/scaffold/skills/dw-source-grounding/SKILL.md +128 -0
- package/scaffold/skills/dw-source-grounding/references/citation-protocol.md +108 -0
- package/scaffold/skills/dw-source-grounding/references/freshness-check.md +108 -0
- package/scaffold/skills/dw-source-grounding/references/source-priority.md +146 -0
- package/scaffold/skills/dw-verify/SKILL.md +0 -1
- package/scaffold/skills/vercel-react-best-practices/SKILL.md +4 -0
- package/scaffold/skills/vercel-react-best-practices/references/perf-discipline.md +122 -0
- package/scaffold/skills/webapp-testing/SKILL.md +5 -0
- package/scaffold/skills/webapp-testing/references/security-boundary.md +115 -0
- package/scaffold/skills/webapp-testing/references/three-workflow-patterns.md +144 -0
- package/scaffold/en/commands/dw-execute-phase.md +0 -149
- package/scaffold/en/commands/dw-plan-checker.md +0 -144
- package/scaffold/en/commands/dw-quick.md +0 -103
- package/scaffold/en/commands/dw-resume.md +0 -84
- package/scaffold/pt-br/commands/dw-execute-phase.md +0 -149
- package/scaffold/pt-br/commands/dw-plan-checker.md +0 -144
- package/scaffold/pt-br/commands/dw-quick.md +0 -103
- package/scaffold/pt-br/commands/dw-resume.md +0 -84
|
@@ -26,7 +26,7 @@ Uma etapa que invoca um comando `/dw-xxx` SO e considerada completa quando os ar
|
|
|
26
26
|
## Quando Usar
|
|
27
27
|
- Use quando quiser ir de uma ideia ate um PR com minima intervencao manual
|
|
28
28
|
- Use para features completas que passam por todo o pipeline (pesquisa, planejamento, execucao, qualidade)
|
|
29
|
-
- NAO use para
|
|
29
|
+
- NAO use para tasks pequenas e bem-escopadas — use `/dw-run-task` direto com um PRD curto
|
|
30
30
|
- NAO use para corrigir bugs (use `/dw-bugfix`)
|
|
31
31
|
- NAO use quando quiser controle manual entre cada fase (use os comandos individuais)
|
|
32
32
|
|
|
@@ -56,7 +56,7 @@ O autopilot para APENAS nestes 3 momentos:
|
|
|
56
56
|
|
|
57
57
|
## Retomada de Sessao
|
|
58
58
|
|
|
59
|
-
Se este comando for invocado
|
|
59
|
+
Se este comando for re-invocado no mesmo PRD apos interrupcao:
|
|
60
60
|
|
|
61
61
|
<critical>Leia o arquivo `autopilot-state.json` no diretorio do PRD. Pule TODAS as etapas listadas em `completed_steps`. Retome a execucao a partir de `current_step`. Gates ja passados (listados em `gates_passed`) NAO devem ser reapresentados.</critical>
|
|
62
62
|
|
|
@@ -149,7 +149,7 @@ Avalie se as tasks envolvem frontend:
|
|
|
149
149
|
### Etapa 8: Execucao
|
|
150
150
|
|
|
151
151
|
Execute `/dw-run-plan` com o path do PRD.
|
|
152
|
-
- Siga TODAS as instrucoes do comando, incluindo o gate nativo do plan-checker (PASS obrigatorio) e execucao paralela em waves via
|
|
152
|
+
- Siga TODAS as instrucoes do comando, incluindo o gate nativo do plan-checker (PASS obrigatorio) e execucao paralela em waves via os agentes da skill bundled `dw-execute-phase`
|
|
153
153
|
- Cada task segue `/dw-run-task` com validacao Level 1
|
|
154
154
|
|
|
155
155
|
### Etapa 9: Review de Implementacao (Loop)
|
|
@@ -250,11 +250,11 @@ Pergunte ao usuario: **"Commits realizados. Deseja gerar o Pull Request?"**
|
|
|
250
250
|
|
|
251
251
|
## Engine Nativo
|
|
252
252
|
|
|
253
|
-
O autopilot depende de infraestrutura dev-workflow-native para inteligencia de codebase (`/dw-map-codebase` + `/dw-intel`)
|
|
253
|
+
O autopilot depende de infraestrutura dev-workflow-native para inteligencia de codebase (`/dw-map-codebase` + `/dw-intel`) e dos agentes bundled de execucao de fase (plan-checker + executor em `.agents/skills/dw-execute-phase/agents/`). Tudo bundled, sem dependencias externas. Veja as skills bundled `dw-codebase-intel` e `dw-execute-phase` em `.agents/skills/` para detalhes.
|
|
254
254
|
|
|
255
255
|
## Persistencia de Estado
|
|
256
256
|
|
|
257
|
-
<critical>O autopilot DEVE salvar seu estado apos cada etapa completada para permitir
|
|
257
|
+
<critical>O autopilot DEVE salvar seu estado apos cada etapa completada para permitir re-invocacao no mesmo PRD em caso de interrupcao.</critical>
|
|
258
258
|
|
|
259
259
|
Salve o arquivo `.dw/spec/prd-[nome]/autopilot-state.json` com o seguinte formato:
|
|
260
260
|
|
|
@@ -286,7 +286,7 @@ Salve o arquivo `.dw/spec/prd-[nome]/autopilot-state.json` com o seguinte format
|
|
|
286
286
|
|
|
287
287
|
- Atualize `current_step`, `completed_steps` e `step_artifacts` ANTES de iniciar a proxima etapa
|
|
288
288
|
- Uma etapa SO vai para `completed_steps` apos verificar que seus artefatos existem no disco
|
|
289
|
-
- Se a sessao cair,
|
|
289
|
+
- Se a sessao cair, re-invoque `/dw-autopilot` no mesmo PRD; o comando le `autopilot-state.json` e continua da etapa correta, revalidando artefatos antes de confiar em `completed_steps`
|
|
290
290
|
- Ao finalizar o pipeline (apos commit ou PR), remova o arquivo ou marque `"status": "completed"`
|
|
291
291
|
|
|
292
292
|
<critical>Apos CADA etapa completada, exiba o bloco de progresso atualizado ao usuario. Isso e OBRIGATORIO — o usuario DEVE ver o que foi feito e o que vem a seguir. Se uma etapa foi pulada, o motivo DEVE aparecer no bloco de progresso.</critical>
|
|
@@ -109,7 +109,7 @@ Use este comando quando o usuario quiser:
|
|
|
109
109
|
- lista curta e executavel
|
|
110
110
|
- se apropriado, sugira qual comando usar em seguida:
|
|
111
111
|
- `/dw-create-prd` (principal sucessor; aceita one-pager como input reduzindo perguntas de clarificação)
|
|
112
|
-
- `/dw-
|
|
112
|
+
- `/dw-run-task` (se é IMPROVES pequeno que cabe em task única com um PRD curto)
|
|
113
113
|
- `/dw-create-techspec`
|
|
114
114
|
- `/dw-create-tasks`
|
|
115
115
|
- `/dw-bugfix`
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como suporte contextual sem substituir este comando:
|
|
17
17
|
|
|
18
|
+
- `dw-debug-protocol`: **SEMPRE** — conduz o bug pelo six-step triage (Reproduzir → Localizar → Reduzir → Fix Root Cause → Guardar → Verificar End-to-End). Stop-the-line discipline; root-cause sobre symptom; regression test commitado no mesmo commit atômico. Bugs não-reprodutíveis seguem o sub-protocolo instrument-first — sem fix por palpite a não ser com acknowledgement explícito.
|
|
18
19
|
- `dw-verify`: **SEMPRE** — em modo Direto, invocada antes do commit da correção. O VERIFICATION REPORT deve mostrar que o sintoma original do bug não se reproduz mais (não apenas que os testes passam).
|
|
19
20
|
- `vercel-react-best-practices`: use quando o bug afeta React/Next.js e há suspeita de problemas de render, hidratação, fetching, waterfall, bundle ou re-render
|
|
20
21
|
- `webapp-testing`: use quando a correção requer fluxo E2E/reteste reproduzível em uma web app
|
|
@@ -24,6 +24,7 @@ Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como apo
|
|
|
24
24
|
- `dw-review-rigor`: **SEMPRE** — aplica de-duplication (mesmo pattern em N arquivos = 1 finding), severity ordering (critical → high → medium → low), verify-before-flag, skip-what-linter-catches, e signal-over-volume. A tabela "Problemas Encontrados" do relatório segue essa disciplina.
|
|
25
25
|
- `dw-verify`: **SEMPRE** — invocada antes de emitir verdict `APROVADO` ou `APROVADO COM RESSALVAS`. Sem VERIFICATION REPORT PASS (test + lint + build), o verdict não pode sair como APROVADO.
|
|
26
26
|
- `/dw-security-check`: **SEMPRE para projetos TS/Python/C#/Rust** — invocado como step 6.7 (Camada de Segurança) antes de emitir verdict. Se o projeto usa linguagem suportada e `security-check.md` não existe OU tem status REJECTED, o verdict é **REPROVADO** — sem exceção.
|
|
27
|
+
- `dw-simplification`: use quando o diff toca código denso ou tortuoso — aplica Chesterton's Fence (entender POR QUÊ antes de propor remoção), protocolo de refactor preservando comportamento (test gate antes/depois) e métricas de complexidade (ciclomática, cognitiva, depth, fan-out) para que findings de "simplifique isso" sejam concretos, não opinativos.
|
|
27
28
|
- `security-review`: use quando auth, autorização, input externo, upload, SQL, integração externa, secrets, SSRF, XSS ou superfícies sensíveis estiverem presentes
|
|
28
29
|
- `vercel-react-best-practices`: use quando o diff tocar React/Next.js para revisar padrões de renderização, fetching, bundle, hidratação e performance
|
|
29
30
|
|
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
## Posição no Pipeline
|
|
10
10
|
**Antecessor:** `/dw-run-task` ou `/dw-bugfix` | **Sucessor:** `/dw-generate-pr`
|
|
11
11
|
|
|
12
|
+
## Skills Complementares
|
|
13
|
+
|
|
14
|
+
Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como suporte operacional sem substituir este comando:
|
|
15
|
+
|
|
16
|
+
- `dw-git-discipline`: **SEMPRE** — aplica atomic commits (uma intenção lógica por commit; refactor separado de feature), formato Conventional Commits, lint+tests+build verdes ANTES do commit e proíbe pular hooks (`--no-verify`) ou amend de commits já empurrados. Em mudanças mistas, separa via `git add -p`.
|
|
17
|
+
|
|
12
18
|
## Variáveis de Entrada
|
|
13
19
|
|
|
14
20
|
| Variável | Descrição | Exemplo |
|
|
@@ -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,6 +33,7 @@
|
|
|
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
|
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
###
|
|
148
|
+
### Comandos internos (usados por outros dw-* commands; raramente invocados direto)
|
|
158
149
|
|
|
159
|
-
| Comando | O que faz |
|
|
160
|
-
|
|
161
|
-
| `/dw-adr` | Registra
|
|
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
|
|
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-
|
|
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.
|
|
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,
|
|
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,
|
|
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)
|
|
@@ -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-
|
|
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."
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dw-debug-protocol
|
|
3
|
+
description: Use when investigating a bug — applies stop-the-line discipline plus a six-step triage (reproduce → localize → reduce → fix root cause → guard → verify) so you fix what's actually broken instead of papering over symptoms.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Debug Protocol
|
|
7
|
+
|
|
8
|
+
> **Inspired by** [`addyosmani/agent-skills/debugging-and-error-recovery`](https://github.com/addyosmani/agent-skills/tree/main/debugging-and-error-recovery) (MIT). Patterns and stop-the-line philosophy adapted from Addy Osmani's work; specific guidance and references rewritten to fit dev-workflow's bugfix and QA loops.
|
|
9
|
+
|
|
10
|
+
The fastest path through a bug is the disciplined one. This skill encodes the discipline.
|
|
11
|
+
|
|
12
|
+
## When this skill applies
|
|
13
|
+
|
|
14
|
+
- Any failing test, runtime error, or "it works locally but not in CI" report.
|
|
15
|
+
- Reproducing a user-reported issue.
|
|
16
|
+
- A regression after a refactor or dependency bump.
|
|
17
|
+
- An intermittent / non-reproducible bug (see `references/non-reproducible-strategy.md`).
|
|
18
|
+
|
|
19
|
+
If you're tempted to "just try a fix and see," stop. Run the protocol below first.
|
|
20
|
+
|
|
21
|
+
## The four core rules
|
|
22
|
+
|
|
23
|
+
### 1. Stop the line
|
|
24
|
+
|
|
25
|
+
The moment a bug is confirmed, stop adjacent work. Do not pile features on top of broken state. Branches stay frozen until the bug is reproduced and a fix path is identified — *or* explicitly downgraded ("not blocking, scheduled for later").
|
|
26
|
+
|
|
27
|
+
See `references/stop-the-line.md` for when this rule bends.
|
|
28
|
+
|
|
29
|
+
### 2. Reproduce before fixing
|
|
30
|
+
|
|
31
|
+
Without a deterministic reproduction, you cannot know whether your "fix" worked. The reproduction is the hypothesis test. Even a flaky bug needs a *reproducible-enough* test (e.g., "fails 8/10 runs") before fixing.
|
|
32
|
+
|
|
33
|
+
If you cannot reproduce: see `references/non-reproducible-strategy.md`. Don't fix on guess.
|
|
34
|
+
|
|
35
|
+
### 3. Find the root cause, not the nearest cause
|
|
36
|
+
|
|
37
|
+
The first place the stack trace lights up is rarely where the bug LIVES. The bug lives wherever the invariant was violated. Fixing the symptom (e.g., catching a `null` you shouldn't have produced) hides the real issue and makes the next bug worse.
|
|
38
|
+
|
|
39
|
+
### 4. Guard against recurrence before declaring done
|
|
40
|
+
|
|
41
|
+
Every fix produces an artifact: a regression test that proves the bug exists, then proves it's fixed. Without this artifact, the bug WILL come back during the next refactor.
|
|
42
|
+
|
|
43
|
+
## The six-step triage
|
|
44
|
+
|
|
45
|
+
Each bug runs through these six steps, in order. See `references/six-step-triage.md` for detail.
|
|
46
|
+
|
|
47
|
+
| Step | Question | Output |
|
|
48
|
+
|------|----------|--------|
|
|
49
|
+
| 1. Reproduce | Can I trigger this on demand? | A failing test or repro script |
|
|
50
|
+
| 2. Localize | Where does the invariant break? | A file:line where state goes wrong |
|
|
51
|
+
| 3. Reduce | What's the smallest input that triggers it? | Minimal repro (1-3 lines if possible) |
|
|
52
|
+
| 4. Fix root cause | Why is the invariant violated? Fix THAT. | Code change at the cause, not the symptom |
|
|
53
|
+
| 5. Guard | What test would have caught this? | Regression test added to suite |
|
|
54
|
+
| 6. Verify end-to-end | Does the original report scenario now pass? | Manual or scripted E2E proof |
|
|
55
|
+
|
|
56
|
+
Do not skip steps. Skipping reduce → bigger fix than needed. Skipping guard → repeat bug in 3 weeks.
|
|
57
|
+
|
|
58
|
+
## Error categorization
|
|
59
|
+
|
|
60
|
+
Bugs cluster into a small number of categories. Knowing the category narrows where to look — see `references/error-categorization.md`:
|
|
61
|
+
|
|
62
|
+
| Category | Typical symptom | Where to look first |
|
|
63
|
+
|----------|-----------------|---------------------|
|
|
64
|
+
| UI / render | Wrong pixels, missing element, click does nothing | Component tree, prop flow, conditional render |
|
|
65
|
+
| Network / I/O | Timeout, 500, partial data | Request payload, headers, error path, retry |
|
|
66
|
+
| State / data | Wrong value displayed, stale read | State management, cache invalidation, race |
|
|
67
|
+
| Concurrency | "Sometimes fails", deadlock | Async order, locks, await placement |
|
|
68
|
+
| Configuration | Works dev, fails prod | Env vars, secrets, build flags, infra config |
|
|
69
|
+
| Logic | Branch returns wrong result | Guard conditions, off-by-one, boolean polarity |
|
|
70
|
+
|
|
71
|
+
## Non-reproducible bugs
|
|
72
|
+
|
|
73
|
+
Some bugs only happen in production, only on certain users, only at certain times. Don't fix them on intuition. The protocol in `references/non-reproducible-strategy.md` covers:
|
|
74
|
+
|
|
75
|
+
- Timing/race conditions: instrument with logs first, fix second
|
|
76
|
+
- Environment-specific: bisect by environment delta
|
|
77
|
+
- State-dependent: capture user state at moment of failure
|
|
78
|
+
- Frequency-dependent: deploy logging, wait for next occurrence
|
|
79
|
+
|
|
80
|
+
A "fix" for an unreproduced bug is a guess. Mark it as such in the commit message.
|
|
81
|
+
|
|
82
|
+
## Verification before declaring done
|
|
83
|
+
|
|
84
|
+
A bug is fixed when:
|
|
85
|
+
|
|
86
|
+
1. The repro from step 1 now passes.
|
|
87
|
+
2. The regression test from step 5 was committed.
|
|
88
|
+
3. Lint + tests + build are all GREEN.
|
|
89
|
+
4. The original report scenario (E2E) was verified — by you, or with a screenshot/log/run trace if not directly reproducible.
|
|
90
|
+
|
|
91
|
+
If any are missing, the bug is "fixed pending verification," not "fixed."
|
|
92
|
+
|
|
93
|
+
## Integration with dev-workflow commands
|
|
94
|
+
|
|
95
|
+
- `/dw-bugfix` runs this skill end-to-end. The bug report is decomposed into steps 1-6 and progressed atomically.
|
|
96
|
+
- `/dw-fix-qa` uses this skill when QA findings are bug-shaped (failing scenario rather than missing feature). Each finding becomes a six-step run.
|
|
97
|
+
- `/dw-code-review` flags fixes that skipped step 5 (no regression test) as REJECTED.
|
|
98
|
+
|
|
99
|
+
## When to escalate / pair
|
|
100
|
+
|
|
101
|
+
After 60 minutes stuck at step 2 (localize) or step 4 (root cause), surface the situation to the user:
|
|
102
|
+
|
|
103
|
+
- "I've exhausted hypotheses A/B/C; here's what I tried and what's left."
|
|
104
|
+
- Don't silently spin. Fresh eyes find what stuck eyes miss.
|
|
105
|
+
|
|
106
|
+
This is not failure — it's protocol. Stuck > 1 hour is a signal, not a flaw.
|