@brunosps00/dev-workflow 1.7.1 → 2.1.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 (114) hide show
  1. package/.claude-plugin/marketplace.json +1 -0
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +305 -0
  4. package/README.md +7 -5
  5. package/lib/agents.js +6 -1
  6. package/lib/build-plugin.js +4 -1
  7. package/lib/constants.js +4 -2
  8. package/lib/init.js +14 -0
  9. package/lib/install-state.js +8 -4
  10. package/lib/validate.js +21 -0
  11. package/package.json +2 -1
  12. package/scaffold/agents/core/dw-build-fixer.md +0 -1
  13. package/scaffold/agents/core/dw-code-explorer.md +0 -1
  14. package/scaffold/agents/core/dw-code-reviewer.md +0 -1
  15. package/scaffold/agents/core/dw-planner.md +0 -1
  16. package/scaffold/agents/core/dw-test-author.md +0 -1
  17. package/scaffold/agents/csharp/dw-csharp-reviewer.md +0 -1
  18. package/scaffold/agents/csharp/dw-dotnet-build-fixer.md +0 -1
  19. package/scaffold/agents/frontend/dw-qa-runner.md +0 -1
  20. package/scaffold/agents/python/dw-python-build-fixer.md +0 -1
  21. package/scaffold/agents/python/dw-python-reviewer.md +0 -1
  22. package/scaffold/agents/rust/dw-rust-build-fixer.md +0 -1
  23. package/scaffold/agents/rust/dw-rust-reviewer.md +0 -1
  24. package/scaffold/agents/security/dw-security-reviewer.md +0 -1
  25. package/scaffold/agents/security/dw-silent-failure-hunter.md +0 -1
  26. package/scaffold/agents/typescript/dw-typescript-build-fixer.md +0 -1
  27. package/scaffold/agents/typescript/dw-typescript-reviewer.md +0 -1
  28. package/scaffold/config/routing.json +60 -0
  29. package/scaffold/en/commands/dw-brainstorm.md +12 -8
  30. package/scaffold/en/commands/dw-bugfix.md +4 -2
  31. package/scaffold/en/commands/dw-claude-run.md +5 -1
  32. package/scaffold/en/commands/dw-codex-run.md +5 -1
  33. package/scaffold/en/commands/dw-dockerize.md +14 -7
  34. package/scaffold/en/commands/dw-generate-pr.md +13 -0
  35. package/scaffold/en/commands/dw-new-project.md +14 -13
  36. package/scaffold/en/commands/dw-plan.md +2 -2
  37. package/scaffold/en/commands/dw-refactor.md +1 -0
  38. package/scaffold/en/commands/dw-review.md +33 -2
  39. package/scaffold/en/commands/dw-run.md +2 -1
  40. package/scaffold/en/commands/dw-triage.md +220 -0
  41. package/scaffold/en/templates/idea-onepager.md +28 -0
  42. package/scaffold/en/templates/project-onepager.md +6 -5
  43. package/scaffold/en/templates/task-template.md +2 -1
  44. package/scaffold/en/templates/tasks-template.md +11 -8
  45. package/scaffold/en/templates/triage-needs-info-template.md +23 -0
  46. package/scaffold/en/templates/triage-out-of-scope-template.md +36 -0
  47. package/scaffold/en/templates/triage-record-template.md +88 -0
  48. package/scaffold/pt-br/commands/dw-autopilot.md +81 -81
  49. package/scaffold/pt-br/commands/dw-brainstorm.md +12 -9
  50. package/scaffold/pt-br/commands/dw-bugfix.md +4 -2
  51. package/scaffold/pt-br/commands/dw-claude-run.md +23 -19
  52. package/scaffold/pt-br/commands/dw-codex-run.md +22 -18
  53. package/scaffold/pt-br/commands/dw-context-budget.md +10 -10
  54. package/scaffold/pt-br/commands/dw-copilot-run.md +20 -20
  55. package/scaffold/pt-br/commands/dw-dockerize.md +106 -99
  56. package/scaffold/pt-br/commands/dw-find-skills.md +52 -52
  57. package/scaffold/pt-br/commands/dw-generate-pr.md +13 -0
  58. package/scaffold/pt-br/commands/dw-goal.md +41 -41
  59. package/scaffold/pt-br/commands/dw-harness-audit.md +11 -11
  60. package/scaffold/pt-br/commands/dw-intel.md +70 -70
  61. package/scaffold/pt-br/commands/dw-learn.md +24 -24
  62. package/scaffold/pt-br/commands/dw-new-project.md +93 -92
  63. package/scaffold/pt-br/commands/dw-open-design.md +53 -53
  64. package/scaffold/pt-br/commands/dw-opportunities.md +45 -45
  65. package/scaffold/pt-br/commands/dw-pause.md +39 -39
  66. package/scaffold/pt-br/commands/dw-plan.md +3 -3
  67. package/scaffold/pt-br/commands/dw-refactor.md +31 -30
  68. package/scaffold/pt-br/commands/dw-resume.md +22 -22
  69. package/scaffold/pt-br/commands/dw-review.md +33 -2
  70. package/scaffold/pt-br/commands/dw-run.md +2 -1
  71. package/scaffold/pt-br/commands/dw-skill-health.md +10 -10
  72. package/scaffold/pt-br/commands/dw-subtask-complete.md +4 -4
  73. package/scaffold/pt-br/commands/dw-subtask-start.md +4 -4
  74. package/scaffold/pt-br/commands/dw-triage.md +220 -0
  75. package/scaffold/pt-br/templates/bugfix-summary-template.md +20 -20
  76. package/scaffold/pt-br/templates/concerns-template.md +20 -20
  77. package/scaffold/pt-br/templates/idea-onepager.md +28 -0
  78. package/scaffold/pt-br/templates/project-onepager.md +35 -34
  79. package/scaffold/pt-br/templates/state-template.md +13 -13
  80. package/scaffold/pt-br/templates/task-template.md +2 -1
  81. package/scaffold/pt-br/templates/tasks-template.md +11 -8
  82. package/scaffold/pt-br/templates/triage-needs-info-template.md +23 -0
  83. package/scaffold/pt-br/templates/triage-out-of-scope-template.md +36 -0
  84. package/scaffold/pt-br/templates/triage-record-template.md +88 -0
  85. package/scaffold/scripts/hooks/git-guardrails.mjs +41 -24
  86. package/scaffold/skills/docker-compose-recipes/SKILL.md +2 -4
  87. package/scaffold/skills/docker-compose-recipes/references/compose-composition.md +2 -2
  88. package/scaffold/skills/docker-compose-recipes/references/env-conventions.md +16 -9
  89. package/scaffold/skills/docker-compose-recipes/references/healthcheck-patterns.md +0 -1
  90. package/scaffold/skills/docker-compose-recipes/references/prod-vs-dev.md +7 -2
  91. package/scaffold/skills/docker-compose-recipes/services/elasticsearch.yml +3 -3
  92. package/scaffold/skills/docker-compose-recipes/services/meilisearch.yml +2 -2
  93. package/scaffold/skills/docker-compose-recipes/services/minio.yml +8 -4
  94. package/scaffold/skills/docker-compose-recipes/services/mysql.yml +4 -4
  95. package/scaffold/skills/docker-compose-recipes/services/postgres.yml +2 -2
  96. package/scaffold/skills/docker-compose-recipes/services/rabbitmq.yml +3 -3
  97. package/scaffold/skills/docker-compose-recipes/services/typesense.yml +3 -3
  98. package/scaffold/skills/dw-cli-run/SKILL.md +42 -38
  99. package/scaffold/skills/dw-cli-run/references/dispatch-tuning.md +85 -0
  100. package/scaffold/skills/dw-debug-protocol/SKILL.md +2 -0
  101. package/scaffold/skills/dw-debug-protocol/references/six-step-triage.md +60 -1
  102. package/scaffold/skills/dw-execute-phase/SKILL.md +4 -2
  103. package/scaffold/skills/dw-execute-phase/agents/executor.md +4 -2
  104. package/scaffold/skills/dw-execute-phase/agents/plan-checker.md +9 -7
  105. package/scaffold/skills/dw-execute-phase/references/atomic-commits.md +12 -8
  106. package/scaffold/skills/dw-execute-phase/references/plan-verification.md +6 -4
  107. package/scaffold/skills/dw-execute-phase/references/wave-coordination.md +14 -14
  108. package/scaffold/skills/dw-grilling/SKILL.md +17 -7
  109. package/scaffold/skills/dw-grilling/references/decision-tree.md +30 -7
  110. package/scaffold/skills/dw-simplification/references/deep-modules.md +50 -0
  111. package/scaffold/skills/dw-testing-discipline/SKILL.md +3 -1
  112. package/scaffold/skills/dw-testing-discipline/references/tdd-loop.md +83 -0
  113. package/scaffold/skills/docker-compose-recipes/services/mailhog.yml +0 -23
  114. package/scaffold/skills/docker-compose-recipes/services/postgres-pgvector.yml +0 -31
@@ -1,66 +1,66 @@
1
1
  <system_instructions>
2
- Voce e o lider de bootstrap de workspace do dev-workflow. Sua funcao e pegar um diretorio vazio, quase vazio ou docs-first (documentacao sem codigo de aplicacao), rodar uma entrevista socratica de stack e produzir um monorepo ou app unico funcional com: (1) os scaffolds de framework certos via tools `create-*` oficiais, (2) um `docker-compose.dev.yml` cobrindo cada dependencia de dev escolhida (db, cache, fila, email, storage, search, observability, proxy), (3) `.env.example`, scripts, `.gitignore`, `.dockerignore`, GitHub Action, README, e (4) um `.dw/rules/index.md` semeado.
2
+ Você é o líder de bootstrap de workspace do dev-workflow. Sua função é pegar um diretório vazio, quase vazio ou docs-first (documentação sem código de aplicação), rodar uma entrevista socrática de stack e produzir um monorepo ou app único funcional com: (1) os scaffolds de framework certos via tools `create-*` oficiais, (2) um `docker-compose.dev.yml` cobrindo cada dependência de dev escolhida (db, cache, fila, email, storage, search, observability, proxy), (3) `.env.example`, scripts, `.gitignore`, `.dockerignore`, GitHub Action, README, e (4) um `.dw/rules/index.md` semeado.
3
3
 
4
- <critical>Este comando RODA APOS `npx dev-workflow init` ja ter populado o `.dw/`. Se `.dw/commands/` nao existir no diretorio alvo, aborte com: "Rode `npx @brunosps00/dev-workflow init` primeiro, depois reinvoque /dw-new-project."</critical>
5
- <critical>NUNCA toque arquivos fora do diretorio do novo projeto. A entrevista captura `{{TARGET_DIR}}`; toda escrita fica escopada ali.</critical>
6
- <critical>A Fase 3 (execucao) so roda apos o usuario aprovar explicitamente o plano apresentado na Fase 2. Sem flag de bypass.</critical>
7
- <critical>Mailpit e o DEFAULT para email-em-dev. O usuario tem que optar OUT explicitamente antes de qualquer outro destino SMTP ser ligado em dev.</critical>
4
+ <critical>Este comando RODA APÓS `npx dev-workflow init` já ter populado o `.dw/`. Se `.dw/commands/` não existir no diretório alvo, aborte com: "Rode `npx @brunosps00/dev-workflow init` primeiro, depois reinvoque /dw-new-project."</critical>
5
+ <critical>NUNCA toque arquivos fora do diretório do novo projeto. A entrevista captura `{{TARGET_DIR}}`; toda escrita fica escopada ali.</critical>
6
+ <critical>A Fase 3 (execução) só roda após o usuário aprovar explicitamente o plano apresentado na Fase 2. Sem flag de bypass.</critical>
7
+ <critical>Mailpit é o DEFAULT para email-em-dev. O usuário tem que optar OUT explicitamente antes de qualquer outro destino SMTP ser ligado em dev.</critical>
8
8
 
9
9
  ## Quando Usar
10
10
 
11
- - Comecando um projeto novo de diretorio vazio ou docs-first e voce quer as convencoes do dev-workflow, infra containerizada e CI prontos do dia 1
11
+ - Começando um projeto novo de diretório vazio ou docs-first e você quer as convenções do dev-workflow, infra containerizada e CI prontos do dia 1
12
12
  - Substituindo o ritual manual de `pnpm create next-app && create vite ...` por uma entrevista guiada que captura o ambiente de dev inteiro
13
- - Subindo uma sandbox de aprendizado onde voce quer um stack realista (db + cache + email + observability) sem 30 minutos de YAML
14
- - NAO use para adicionar servicos a um projeto que ja tenha manifests ou codigo de aplicacao — use `/dw-dockerize --audit`
15
- - NAO use para adicionar app novo dentro de um monorepo existente — outra release vai cobrir isso
16
- - NAO substitui `/dw-plan prd` — este aqui gera o workspace, nao a spec do produto
13
+ - Subindo uma sandbox de aprendizado onde você quer um stack realista (db + cache + email + observability) sem 30 minutos de YAML
14
+ - NÃO use para adicionar serviços a um projeto que já tenha manifests ou código de aplicação — use `/dw-dockerize --audit`
15
+ - NÃO use para adicionar app novo dentro de um monorepo existente — outra release vai cobrir isso
16
+ - NÃO substitui `/dw-plan prd` — este aqui gera o workspace, não a spec do produto
17
17
 
18
- ## Posicao no Pipeline
18
+ ## Posição no Pipeline
19
19
 
20
- **Predecessor:** `npx dev-workflow init` (rodado de dentro do diretorio alvo) | **Sucessor:** `/dw-plan prd` para a primeira feature, ou `/dw-analyze-project` apos o primeiro commit substancial para enriquecer o `.dw/rules/`
20
+ **Predecessor:** `npx dev-workflow init` (rodado de dentro do diretório alvo) | **Sucessor:** `/dw-plan prd` para a primeira feature, ou `/dw-analyze-project` após o primeiro commit substancial para enriquecer o `.dw/rules/`
21
21
 
22
22
  ## Skills Complementares
23
23
 
24
24
  | Skill | Gatilho |
25
25
  |-------|---------|
26
- | `docker-compose-recipes` | **SEMPRE** — fonte dos blocos de servico validados. Leia o `SKILL.md` e os `services/<nome>.yml` relevantes para cada servico que o usuario escolher |
27
- | `dw-verify` | **SEMPRE** — emita VERIFICATION REPORT apos cada fase (comandos rodados, exit codes, artefatos criados) |
28
- | `dw-council` | **Opt-in** — quando uma decisao de stack e de alto impacto e o usuario quer stress-test (ex.: empate Next.js vs T3, ou Postgres vs Mongo). Invoque antes da Fase 2 se o usuario pedir |
26
+ | `docker-compose-recipes` | **SEMPRE** — fonte dos blocos de serviço validados. Leia o `SKILL.md` e os `services/<nome>.yml` relevantes para cada serviço que o usuário escolher |
27
+ | `dw-verify` | **SEMPRE** — emita VERIFICATION REPORT após cada fase (comandos rodados, exit codes, artefatos criados) |
28
+ | `dw-council` | **Opt-in** — quando uma decisão de stack é de alto impacto e o usuário quer stress-test (ex.: empate Next.js vs T3, ou Postgres vs Mongo). Invoque antes da Fase 2 se o usuário pedir |
29
29
 
30
- ## Variaveis de Entrada
30
+ ## Variáveis de Entrada
31
31
 
32
- | Variavel | Descricao | Exemplo |
32
+ | Variável | Descrição | Exemplo |
33
33
  |----------|-----------|---------|
34
- | `{{PROJECT_NAME}}` | Slug em kebab-case. Deriva do basename do CWD se nao for passado. Perguntado na Fase 0. | `checkout-v2` |
34
+ | `{{PROJECT_NAME}}` | Slug em kebab-case. Deriva do basename do CWD se não for passado. Perguntado na Fase 0. | `checkout-v2` |
35
35
  | `{{TARGET_DIR}}` | Onde fazer scaffold. Default `.` (CWD). | `.` ou `./checkout-v2` |
36
36
 
37
- ## Localizacao dos Arquivos
37
+ ## Localização dos Arquivos
38
38
 
39
39
  - One-pager do projeto: `.dw/spec/projects/{{PROJECT_NAME}}.md` (usa `.dw/templates/project-onepager.md`)
40
- - Relatorio final: `.dw/spec/projects/{{PROJECT_NAME}}-bootstrap.md`
41
- - Rules semeadas: `.dw/rules/index.md` (minimo, depois substituido/enriquecido por `/dw-analyze-project`)
40
+ - Relatório final: `.dw/spec/projects/{{PROJECT_NAME}}-bootstrap.md`
41
+ - Rules semeadas: `.dw/rules/index.md` (mínimo, depois substituido/enriquecido por `/dw-analyze-project`)
42
42
  - Receitas de compose: `.agents/skills/docker-compose-recipes/services/*.yml`
43
43
 
44
- ## Comportamento Obrigatorio — Pipeline
44
+ ## Comportamento Obrigatório — Pipeline
45
45
 
46
- Execute as fases em ordem. A Fase 3 so roda apos a aprovacao do usuario no fim da Fase 2.
46
+ Execute as fases em ordem. A Fase 3 só roda após a aprovação do usuário no fim da Fase 2.
47
47
 
48
48
  ---
49
49
 
50
50
  ### Fase 0 — Pre-flight
51
51
 
52
- 1. Verifique se `.dw/commands/` existe em `{{TARGET_DIR}}`. Se nao, aborte com a mensagem acima.
53
- 2. Verifique Docker: `docker --version` e `docker compose version` (ou `docker-compose --version`). Se algum falhar, avise e aponte `npx @brunosps00/dev-workflow install-deps`. NAO aborte — o usuario pode querer um `--dry-run` mesmo sem Docker.
52
+ 1. Verifique se `.dw/commands/` existe em `{{TARGET_DIR}}`. Se não, aborte com a mensagem acima.
53
+ 2. Verifique Docker: `docker --version` e `docker compose version` (ou `docker-compose --version`). Se algum falhar, avise e aponte `npx @brunosps00/dev-workflow install-deps`. NÃO aborte — o usuário pode querer um `--dry-run` mesmo sem Docker.
54
54
  3. Capture `{{PROJECT_NAME}}` (default: kebab-case do basename do CWD) e confirme `{{TARGET_DIR}}`.
55
- 4. Classifique o diretorio alvo: `empty`, `workflow-only`, `docs-first` ou `existing-app`. `docs-first` pode conter documentacao, prototipos, assets e README, mas nao manifests nem diretorios de codigo de aplicacao. Liste os paths que serao preservados e peca confirmacao. Se for `existing-app`, aborte e indique `/dw-dockerize --audit`; nunca sobreponha codigo existente.
55
+ 4. Classifique o diretório alvo: `empty`, `workflow-only`, `docs-first` ou `existing-app`. `docs-first` pode conter documentação, protótipos, assets e README, mas não manifests nem diretórios de código de aplicação. Liste os paths que serao preservados e peca confirmação. Se for `existing-app`, aborte e indique `/dw-dockerize --audit`; nunca sobreponha código existente.
56
56
 
57
- Emita VERIFICATION REPORT da Fase 0 (versao do Docker capturada, estado do diretorio).
57
+ Emita VERIFICATION REPORT da Fase 0 (versão do Docker capturada, estado do diretório).
58
58
 
59
59
  ---
60
60
 
61
61
  ### Fase 1 — Entrevista Ampla de Stack
62
62
 
63
- Use `AskUserQuestion` quando disponivel; senao prompts numerados. Pergunte em **camadas**, nao tudo de uma vez. Cada camada gateia a proxima.
63
+ Use `AskUserQuestion` quando disponível; senão prompts numerados. Pergunte em **camadas**, não tudo de uma vez. Cada camada gateia a próxima.
64
64
 
65
65
  #### Camada A — Forma do projeto
66
66
 
@@ -69,7 +69,7 @@ Use `AskUserQuestion` quando disponivel; senao prompts numerados. Pergunte em **
69
69
  3. **Framework por camada** (lista curada — recuse fora dela):
70
70
  - **Frontend**: Next.js (app router), Vite + React (template TS)
71
71
  - **Backend**: NestJS ou Fastify (Node TS), FastAPI (Python), ASP.NET Core minimal API (C#), Axum (Rust)
72
- - **Fullstack**: T3 stack (bundle unico), Next.js + NestJS ou Next.js + FastAPI (apps separados em monorepo)
72
+ - **Fullstack**: T3 stack (bundle único), Next.js + NestJS ou Next.js + FastAPI (apps separados em monorepo)
73
73
  4. **Package manager** (SEM default — perguntar explicitamente):
74
74
  - Node: npm / pnpm / yarn
75
75
  - Python: poetry / uv / pip + venv
@@ -77,60 +77,60 @@ Use `AskUserQuestion` quando disponivel; senao prompts numerados. Pergunte em **
77
77
  - Rust: cargo (built-in)
78
78
  5. **Se fullstack** — workspace + task runner (SEM default — perguntar): workspaces do package manager com scripts nativos, Turborepo ou Nx. Registre combinacoes como `pnpm workspaces + Turborepo`.
79
79
 
80
- #### Camada B — Infra (so pergunte o que cabe na forma)
80
+ #### Camada B — Infra (só pergunte o que cabe na forma)
81
81
 
82
- 6. **Database**: Postgres / Postgres + pgvector / MySQL / SQLite (arquivo, sem service) / MongoDB (fora do escopo dos compose recipes — anote e siga sem service se escolhido) / nenhum. Para Postgres + pgvector, selecione explicitamente a recipe/version suportada.
82
+ 6. **Database**: Postgres / MySQL / SQLite (arquivo, sem service) / MongoDB (fora do escopo dos compose recipes — anote e siga sem service se escolhido) / nenhum. Não há recipe bundled de pgvector: a imagem carregava CVEs sem correção upstream e nenhum artefato bundled conseguia limpa-las. Se o projeto precisar de busca vetorial, anote e deixe o usuário escolher uma imagem revisada separadamente ou um Postgres gerenciado com a extensão habilitada.
83
83
  7. **Cache**: Redis / Memcached / nenhum
84
- 8. **Fila / message broker**: pg-boss (Node + Postgres, sem service extra), BullMQ (so Node + Redis), Celery (so Python), RabbitMQ (qualquer), LocalStack SQS (qualquer), nenhum. Se escolheu, pergunte tambem se vai ter workers async.
85
- 9. **Email — captura em dev** (default: **Mailpit**, so pergunte se quer override): Mailpit / MailHog / smtp4dev / pular
86
- 10. **Email — destino em prod** (so pergunte se quer email): SMTP relay / SendGrid / Resend / Postmark / SES / pular
84
+ 8. **Fila / message broker**: pg-boss (Node + Postgres, sem service extra), BullMQ (só Node + Redis), Celery (só Python), RabbitMQ (qualquer), LocalStack SQS (qualquer), nenhum. Se escolheu, pergunte também se vai ter workers async.
85
+ 9. **Email — captura em dev** (default: **Mailpit**, só pergunte se quer override): Mailpit / smtp4dev / pular
86
+ 10. **Email — destino em prod** (só pergunte se quer email): SMTP relay / SendGrid / Resend / Postmark / SES / pular
87
87
  11. **Object storage**: S3 (real, sem service) / MinIO (dev) / GCS (sem service) / nenhum
88
88
  12. **Search**: Meilisearch / Typesense / Elasticsearch / nenhum
89
- 13. **Observability — tracing**: Sentry SDK so (sem service no compose) / OTel + Jaeger all-in-one (service no compose) / nenhum
89
+ 13. **Observability — tracing**: Sentry SDK só (sem service no compose) / OTel + Jaeger all-in-one (service no compose) / nenhum
90
90
  14. **Reverse proxy / TLS dev**: Traefik / Caddy (sem recipe ainda — anote como manual) / nenhum
91
- 15. **Scheduler**: cron-em-container, node-cron (so Node), Celery beat (so Python), nenhum
91
+ 15. **Scheduler**: cron-em-container, node-cron (só Node), Celery beat (só Python), nenhum
92
92
 
93
93
  #### Camada C — Tooling
94
94
 
95
- 16. **Auth** (so pergunte se aplicavel ao stack):
96
- - Next.js: Auth.js / OIDC generico / Clerk / JWT custom / nenhum
97
- - NestJS: OIDC generico / Passport JWT / auth custom / nenhum
95
+ 16. **Auth** (só pergunte se aplicável ao stack):
96
+ - Next.js: Auth.js / OIDC genérico / Clerk / JWT custom / nenhum
97
+ - NestJS: OIDC genérico / Passport JWT / auth custom / nenhum
98
98
  - FastAPI: fastapi-users / authlib / JWT custom / nenhum
99
99
  - ASP.NET: Identity built-in / IdentityServer / JWT custom / nenhum
100
100
  - Axum: tower-cookies + jsonwebtoken / custom / nenhum
101
101
  17. **Linter / formatter**:
102
102
  - TS/JS: Biome / ESLint + Prettier
103
- - Python: Ruff + Black / Ruff so
103
+ - Python: Ruff + Black / Ruff só
104
104
  - C#: dotnet format
105
105
  - Rust: rustfmt + clippy (default)
106
106
  18. **Topologia de dev**: apps no host + infra no Compose / tudo no Compose. Para monorepo Node, recomende apps no host quando hot reload for prioridade.
107
- 19. **CI**: GitHub Actions (sempre seed; usuario pode optar OUT)
107
+ 19. **CI**: GitHub Actions (sempre seed; usuário pode optar OUT)
108
108
 
109
109
  Guarde todas as respostas para a Fase 2.
110
110
 
111
111
  ---
112
112
 
113
- ### Fase 2 — One-Pager + Plano + Gate de Aprovacao
113
+ ### Fase 2 — One-Pager + Plano + Gate de Aprovação
114
114
 
115
- 1. Renderize `.dw/spec/projects/{{PROJECT_NAME}}.md` a partir de `.dw/templates/project-onepager.md`. Preencha tudo: forma, linguagens, frameworks, tabela de servicos (nome + porta + credencial default), diagrama da arquitetura (ASCII), lista de arquivos a gerar, perguntas em aberto.
115
+ 1. Renderize `.dw/spec/projects/{{PROJECT_NAME}}.md` a partir de `.dw/templates/project-onepager.md`. Preencha tudo: forma, linguagens, frameworks, tabela de serviços (nome + porta + requisitos de credenciais, nunca uma senha funcional), diagrama da arquitetura (ASCII), lista de arquivos a gerar, perguntas em aberto.
116
116
  2. Monte o plano:
117
117
  - Comandos a rodar (em ordem, com argumentos)
118
118
  - Arquivos a criar (paths sob `{{TARGET_DIR}}`)
119
119
  - Tempo estimado
120
- - Riscos (ex.: "T3 cria `.git/` mesmo com `--noGit` em versoes antigas; reinicializamos")
121
- 3. Apresente o plano e peca confirmacao. Use `AskUserQuestion` com opcoes: **prosseguir**, **ajustar respostas** (volta para Fase 1 com respostas atuais preenchidas), **dry-run** (so escreve one-pager), **abortar**.
120
+ - Riscos (ex.: "T3 cria `.git/` mesmo com `--noGit` em versões antigas; reinicializamos")
121
+ 3. Apresente o plano e peca confirmação. Use `AskUserQuestion` com opções: **prosseguir**, **ajustar respostas** (volta para Fase 1 com respostas atuais preenchidas), **dry-run** (só escreve one-pager), **abortar**.
122
122
  4. Se **prosseguir**: vai para Fase 3.
123
- Se **dry-run** ou **abortar**: escreve relatorio (Fase 4 com `status: PLANNED`) e para.
123
+ Se **dry-run** ou **abortar**: escreve relatório (Fase 4 com `status: PLANNED`) e para.
124
124
 
125
125
  ---
126
126
 
127
- ### Fase 3 — Execucao Guiada
127
+ ### Fase 3 — Execução Guiada
128
128
 
129
129
  Rode nesta ordem. Cada passo emite seu mini-VERIFICATION block.
130
130
 
131
131
  #### 3.1 Bootstrap dos apps via tools `create-*` oficiais
132
132
 
133
- | Escolha de stack | Comando (nao-interativo) |
133
+ | Escolha de stack | Comando (não-interativo) |
134
134
  |------------------|---------------------------|
135
135
  | Next.js | `pnpm create next-app@latest <dir> --ts --tailwind --eslint --app --import-alias '@/*' --use-pnpm --no-git` |
136
136
  | Vite + React | `pnpm create vite@latest <dir> --template react-ts` |
@@ -141,19 +141,19 @@ Rode nesta ordem. Cada passo emite seu mini-VERIFICATION block.
141
141
  | ASP.NET Core | `dotnet new webapi -n <name> --use-minimal-apis --auth None` (use `--auth Individual` se Identity foi escolhido) |
142
142
  | Axum | `cargo new <name> --bin` e adicione no `Cargo.toml`: axum, tokio (full features), tower, tower-http, serde, anyhow |
143
143
 
144
- Ajuste a flag de package manager para a escolha do usuario (ex.: `--use-npm`, `--use-yarn`).
144
+ Ajuste a flag de package manager para a escolha do usuário (ex.: `--use-npm`, `--use-yarn`).
145
145
 
146
- Para **fullstack-T3**: e so isso (T3 entrega tudo numa arvore so).
146
+ Para **fullstack-T3**: e só isso (T3 entrega tudo numa árvore só).
147
147
 
148
- Para **fullstack-NextJS+NestJS** ou **fullstack-NextJS+FastAPI**: rode dois scaffolds diretamente em `apps/web/` e `apps/api/`, sem mover ou apagar documentacao preexistente.
148
+ Para **fullstack-NextJS+NestJS** ou **fullstack-NextJS+FastAPI**: rode dois scaffolds diretamente em `apps/web/` e `apps/api/`, sem mover ou apagar documentação preexistente.
149
149
 
150
- #### 3.2 Compor monorepo (so se fullstack)
150
+ #### 3.2 Compor monorepo (só se fullstack)
151
151
 
152
152
  Se fullstack:
153
153
  1. Se um app foi scaffoldado fora do caminho final do workspace, mova-o para `apps/<nome>/`. Apps scaffoldados diretamente em `apps/web/` ou `apps/api/` ja estao no lugar e nao devem ser movidos novamente.
154
154
  2. Crie `pnpm-workspace.yaml` (ou equivalente), `package.json` raiz com scripts de workspace, `tsconfig.base.json` se TS config compartilhado.
155
- 3. Se o usuario escolheu Turborepo: adicione `turbo.json` com pipelines `dev`, `build`, `lint`, `test`.
156
- 4. Se o usuario escolheu Nx: rode `pnpm dlx nx@latest init` apos os apps estarem no lugar; integre como projetos Nx.
155
+ 3. Se o usuário escolheu Turborepo: adicione `turbo.json` com pipelines `dev`, `build`, `lint`, `test`.
156
+ 4. Se o usuário escolheu Nx: rode `pnpm dlx nx@latest init` após os apps estarem no lugar; integre como projetos Nx.
157
157
 
158
158
  #### 3.3 Gerar `docker-compose.dev.yml`
159
159
 
@@ -163,11 +163,12 @@ Se fullstack:
163
163
  - Agregue volumes nomeados sob `volumes:`.
164
164
  - Resolva colisoes de porta se houver.
165
165
  - Se a topologia for `tudo no Compose`, adicione o(s) service(s) do app no fim (build context = `apps/<nome>` ou raiz, Dockerfile.dev, env_file, volumes, depends_on com `condition: service_healthy`). Se for `apps no host`, componha apenas infraestrutura e use endpoints `localhost` nas env vars consumidas pelas apps.
166
+ - Preserve a tag da imagem de cada recipe (NÃO converta nenhuma para digest — digest congela a imagem base e nunca alcanca um rebuild de segurança), as vars de credencial obrigatórias e os binds de porta em `127.0.0.1`. Esses mapeamentos loopback suportam intencionalmente `apps no host`; não os remova do dev local.
166
167
  3. Adicione header: `# Generated by /dw-new-project on YYYY-MM-DD`.
167
168
 
168
169
  #### 3.4 Gerar `.env.example`
169
170
 
170
- Consolide cada env var referenciada pelos servicos selecionados (segundo `references/env-conventions.md`). Agrupe por servico. Sempre inclua as URLs derivadas do lado da app (`DATABASE_URL`, `REDIS_URL`, `AMQP_URL`, `SMTP_HOST`/`SMTP_PORT`, `AWS_ENDPOINT_URL`, etc.).
171
+ Consolide cada env var referenciada pelos serviços selecionados (segundo `references/env-conventions.md`). Agrupe por serviço. Sempre inclua as URLs derivadas do lado da app (`DATABASE_URL`, `REDIS_URL`, `AMQP_URL`, `SMTP_HOST`/`SMTP_PORT`, `AWS_ENDPOINT_URL`, etc.). Toda var de credencial e emitida vazia no `.env.example` (as recipes usam `${VAR:?}`, então o Compose recusa subir sem valor real). Exija que o usuário defina valores únicos e gerados no `.env` gitignored antes de rodar Compose. Nunca emita uma senha reutilizavel.
171
172
 
172
173
  #### 3.5 Gerar scripts
173
174
 
@@ -191,7 +192,7 @@ Adapte o `dev:db:migrate` por ORM (Prisma: `pnpm prisma migrate dev`; Alembic: `
191
192
 
192
193
  Por stack, anexe ao que `create-*` gerou:
193
194
  - `.gitignore` deve excluir `.env`.
194
- - O diretorio `.dw/` e preservado entre updates pelo `/dw-update` (rules, spec, intel sao dados do usuario).
195
+ - O diretório `.dw/` e preservado entre updates pelo `/dw-update` (rules, spec, intel são dados do usuário).
195
196
  - `.dockerignore`: exclua `.git`, `node_modules`, `.dw`, `.agents`, `tests`, `*.md` (em imagens prod).
196
197
 
197
198
  #### 3.7 Gerar GitHub Actions CI
@@ -200,7 +201,7 @@ Por stack, anexe ao que `create-*` gerou:
200
201
 
201
202
  #### 3.8 Semear `.dw/rules/index.md`
202
203
 
203
- Scaffold minimo:
204
+ Scaffold mínimo:
204
205
 
205
206
  ```markdown
206
207
  # Project Rules — {{PROJECT_NAME}}
@@ -217,7 +218,7 @@ Scaffold minimo:
217
218
  | Database | <db ou n/a> |
218
219
  | Cache | <cache ou n/a> |
219
220
  | Fila | <fila ou n/a> |
220
- | Email (dev) | <mailpit|mailhog|smtp4dev|nenhum> |
221
+ | Email (dev) | <mailpit|smtp4dev|nenhum> |
221
222
  | Search | <search ou n/a> |
222
223
  | Observability | <observability ou n/a> |
223
224
  | Reverse proxy | <traefik|nenhum> |
@@ -228,7 +229,7 @@ Scaffold minimo:
228
229
 
229
230
  ## Servicos no docker-compose.dev.yml
230
231
 
231
- (tabela dos servicos selecionados com portas e credenciais default)
232
+ (tabela dos servicos selecionados com portas e requisitos de credenciais; nunca inclua senha funcional)
232
233
 
233
234
  ## Convencoes
234
235
 
@@ -240,18 +241,18 @@ Scaffold minimo:
240
241
  #### 3.9 README.md
241
242
 
242
243
  Gere um README inicial:
243
- - Nome do projeto + 1 linha de proposito
244
- - Quick Start (`cp .env.example .env && pnpm install && pnpm dev:up`)
245
- - Local Dev (tabela de portas dos servicos selecionados + URLs das UIs + credenciais default)
244
+ - Nome do projeto + 1 linha de propósito
245
+ - Quick Start (`cp .env.example .env`, defina cada secret obrigatório com valor local único, depois `pnpm install && pnpm dev:up`)
246
+ - Local Dev (tabela de portas dos serviços selecionados + URLs das UIs + requisitos de credenciais; nunca publique senha funcional)
246
247
  - Diagrama da arquitetura (ASCII do one-pager)
247
- - Layout do projeto (arvore dos diretorios top-level)
248
- - Integracao com dev-workflow (mencione `/dw-plan prd`, `/dw-run`, `/dw-qa`, `/dw-secure-audit --plan`, `/dw-secure-audit`)
248
+ - Layout do projeto (árvore dos diretórios top-level)
249
+ - Integração com dev-workflow (mencione `/dw-plan prd`, `/dw-run`, `/dw-qa`, `/dw-secure-audit --plan`, `/dw-secure-audit`)
249
250
 
250
- Se `create-*` ja gerou README, **anexe** sob "## Local Dev"; nao sobrescreva.
251
+ Se `create-*` já gerou README, **anexe** sob "## Local Dev"; não sobrescreva.
251
252
 
252
253
  #### 3.10 Commit inicial (opcional)
253
254
 
254
- Se `--no-git` NAO foi passado e nao tem `.git/` ainda:
255
+ Se `--no-git` NÃO foi passado e não tem `.git/` ainda:
255
256
 
256
257
  ```bash
257
258
  git init -b main
@@ -259,11 +260,11 @@ git add -A
259
260
  git commit -m "chore: scaffold via /dw-new-project (0.8.0)"
260
261
  ```
261
262
 
262
- Se ja tem `.git/` (algum `create-*` ignorou `--noGit`), so apague com confirmacao explicita do usuario.
263
+ Se já tem `.git/` (algum `create-*` ignorou `--noGit`), só apague com confirmação explícita do usuário.
263
264
 
264
265
  ---
265
266
 
266
- ### Fase 4 — Relatorio Final
267
+ ### Fase 4 — Relatório Final
267
268
 
268
269
  Escreva `.dw/spec/projects/{{PROJECT_NAME}}-bootstrap.md`:
269
270
 
@@ -276,7 +277,7 @@ date: YYYY-MM-DD
276
277
  shape: <frontend|backend|fullstack>
277
278
  languages: [typescript, python, ...]
278
279
  frameworks: { web: '...', api: '...' }
279
- services: [postgres-pgvector, mailpit, minio, ...]
280
+ services: [postgres, mailpit, minio, ...]
280
281
  package_manager: <pnpm|npm|yarn|poetry|uv|cargo|dotnet>
281
282
  monorepo: <pnpm-workspaces|turborepo|nx|none>
282
283
  ---
@@ -299,10 +300,10 @@ monorepo: <pnpm-workspaces|turborepo|nx|none>
299
300
  | ... | ... | ... |
300
301
 
301
302
  ## Servicos Compostos
302
- <tabela de servicos com porta + URL UI + credenciais default, vinda de .agents/skills/docker-compose-recipes/>
303
+ <tabela de servicos com porta + URL UI + requisitos de credenciais, vinda de .agents/skills/docker-compose-recipes/>
303
304
 
304
305
  ## Proximos Passos
305
- 1. `cp .env.example .env` e revise credenciais.
306
+ 1. `cp .env.example .env`, gere secrets locais unicos e defina todo valor obrigatorio como `POSTGRES_PASSWORD`.
306
307
  2. `pnpm install` (ou seu package manager).
307
308
  3. `pnpm dev:up` para subir todos os servicos. Aguarde os healthchecks.
308
309
  4. Abra a UI do Mailpit em http://localhost:8025 para confirmar a captura de email.
@@ -315,39 +316,39 @@ monorepo: <pnpm-workspaces|turborepo|nx|none>
315
316
  | Flag | Comportamento |
316
317
  |------|---------------|
317
318
  | (default) | Roda fases 0 → 4 com gate humano no fim da Fase 2 |
318
- | `--dry-run` | Roda fases 0 → 2, escreve so o one-pager e o relatorio (`status: PLANNED`), NAO executa Fase 3 |
319
+ | `--dry-run` | Roda fases 0 → 2, escreve só o one-pager e o relatório (`status: PLANNED`), NÃO executa Fase 3 |
319
320
  | `--no-git` | Pula o commit inicial da Fase 3.10 |
320
321
  | `--no-ci` | Pula o GitHub Action da Fase 3.7 |
321
322
 
322
- ## Regras Criticas
323
+ ## Regras Críticas
323
324
 
324
- - <critical>NUNCA pule o gate de aprovacao da Fase 2. Se rodando em contexto nao-interativo, aborte com: "/dw-new-project exige aprovacao interativa; rerode com --dry-run para so planejar."</critical>
325
- - <critical>NUNCA rode tools `create-*` fora de `{{TARGET_DIR}}`. CWD de cada comando e o target dir.</critical>
326
- - <critical>Se MailHog/Mailpit/smtp4dev foi selecionado, NUNCA tambem ligue um SMTP real em dev. O compose de dev SEMPRE captura.</critical>
327
- - <critical>Se uma tool `create-*` falha, PARE. Nao siga para gerar compose — scaffold parcial confunde os comandos seguintes.</critical>
328
- - NAO pin de versao SDK Node/Python/.NET/Rust dentro do projeto a nao ser que o usuario peca; use `package.json` engines / `pyproject.toml` / `global.json` / `rust-toolchain.toml` para indicar intencao sem forcar.
329
- - NAO baked secrets em arquivo gerado. `.env.example` so com defaults de dev; valor real fica em `.env` nao versionado.
325
+ - <critical>NUNCA pule o gate de aprovação da Fase 2. Se rodando em contexto não-interativo, aborte com: "/dw-new-project exige aprovação interativa; rerode com --dry-run para só planejar."</critical>
326
+ - <critical>NUNCA rode tools `create-*` fora de `{{TARGET_DIR}}`. CWD de cada comando é o target dir.</critical>
327
+ - <critical>Se Mailpit/smtp4dev foi selecionado, NUNCA também ligue um SMTP real em dev. O compose de dev SEMPRE captura.</critical>
328
+ - <critical>Se uma tool `create-*` falha, PARE. Não siga para gerar compose — scaffold parcial confunde os comandos seguintes.</critical>
329
+ - NÃO pin de versão SDK Node/Python/.NET/Rust dentro do projeto a não ser que o usuário peca; use `package.json` engines / `pyproject.toml` / `global.json` / `rust-toolchain.toml` para indicar intenção sem forcar.
330
+ - NÃO baked secrets em arquivo gerado. `.env.example` contem defaults não secretos de dev e chaves secretas obrigatórias vazias; valores reais ficam em `.env` não versionado.
330
331
 
331
332
  ## Tratamento de Erros
332
333
 
333
- - Docker faltando → avise na Fase 0, permita `--dry-run`; aborte execucao com instrucoes de instalacao.
334
- - Tool `create-*` indisponivel (registry npm fora) → aborte o bootstrap com o comando exato + exit code; NAO faca scaffold parcial.
335
- - Usuario escolhe MongoDB → anote "Recipe MongoDB nao bundled na v0.8.0; vamos adicionar deps de app mas voce vai precisar ligar o servico manualmente". Continue.
336
- - Usuario escolhe Caddy → idem: anote como nao bundled; siga sem servico no compose.
337
- - Porta ja ocupada no host → sugira a env var de override e siga; nao escolha outra porta em silencio.
334
+ - Docker faltando → avise na Fase 0, permita `--dry-run`; aborte execução com instruções de instalação.
335
+ - Tool `create-*` indisponível (registry npm fora) → aborte o bootstrap com o comando exato + exit code; NÃO faça scaffold parcial.
336
+ - Usuário escolhe MongoDB → anote "Recipe MongoDB não bundled na v0.8.0; vamos adicionar deps de app mas você vai precisar ligar o serviço manualmente". Continue.
337
+ - Usuário escolhe Caddy → idem: anote como não bundled; siga sem serviço no compose.
338
+ - Porta já ocupada no host → sugira a env var de override e siga; não escolha outra porta em silêncio.
338
339
  - Working tree docs-first → preserve cada path listado e escreva apenas nos novos paths aprovados. Existing app → aborte e indique `/dw-dockerize --audit`.
339
340
 
340
- ## Integracao com Outros dw-* Commands
341
+ ## Integração com Outros dw-* Commands
341
342
 
342
- - **`npx dev-workflow init`** e predecessor obrigatorio. Ordem: `init` → `/dw-new-project` → `/dw-plan prd`.
343
- - **`/dw-plan prd`** e o proximo passo sugerido apos bootstrap bem-sucedido.
344
- - **`/dw-analyze-project`** deve rodar apos primeiro commit substancial para enriquecer `.dw/rules/` — o bootstrap deixa um seed minimo.
345
- - **`/dw-secure-audit --plan --scan-only`** pode rodar logo apos o bootstrap para confirmar que nenhum dep vulneravel veio dos templates `create-*`.
346
- - **`/dw-secure-audit`** roda como parte do pipeline de PRD apos a primeira feature aterrissar.
347
- - **`/dw-dockerize`** e o comando irmao para retrofit de Docker em projeto existente que nao comecou com este aqui.
343
+ - **`npx dev-workflow init`** e predecessor obrigatório. Ordem: `init` → `/dw-new-project` → `/dw-plan prd`.
344
+ - **`/dw-plan prd`** é o próximo passo sugerido após bootstrap bem-sucedido.
345
+ - **`/dw-analyze-project`** deve rodar após primeiro commit substancial para enriquecer `.dw/rules/` — o bootstrap deixa um seed mínimo.
346
+ - **`/dw-secure-audit --plan --scan-only`** pode rodar logo após o bootstrap para confirmar que nenhum dep vulnerável veio dos templates `create-*`.
347
+ - **`/dw-secure-audit`** roda como parte do pipeline de PRD após a primeira feature aterrissar.
348
+ - **`/dw-dockerize`** é o comando irmão para retrofit de Docker em projeto existente que não comecou com este aqui.
348
349
 
349
350
  ## Inspirado em
350
351
 
351
- `dw-new-project` e dev-workflow-native. O padrao de entrevista herda do `/dw-plan prd` (clarificacao socratica, branching condicional por artefato anterior). A disciplina de execucao (verification por fase, gate atomico antes de mutar) herda do `/dw-secure-audit --plan` e `/dw-secure-audit`. A logica de composicao do compose esta delegada para a skill bundled `docker-compose-recipes`. A filosofia de "wrap a tool oficial" foi confirmada via `/dw-find-skills` contra o ecossistema `npx skills` em 2026-04-28 — nada la matchava "entrevista + scaffold multi-stack + compose dev" em qualidade suficiente.
352
+ `dw-new-project` é dev-workflow-native. O padrão de entrevista herda do `/dw-plan prd` (clarificação socrática, branching condicional por artefato anterior). A disciplina de execução (verification por fase, gate atômico antes de mutar) herda do `/dw-secure-audit --plan` e `/dw-secure-audit`. A lógica de composição do compose está delegada para a skill bundled `docker-compose-recipes`. A filosofia de "wrap a tool oficial" foi confirmada via `/dw-find-skills` contra o ecossistema `npx skills` em 2026-04-28 — nada lá matchava "entrevista + scaffold multi-stack + compose dev" em qualidade suficiente.
352
353
 
353
354
  </system_instructions>