@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.
- package/.claude-plugin/marketplace.json +1 -0
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +305 -0
- package/README.md +7 -5
- package/lib/agents.js +6 -1
- package/lib/build-plugin.js +4 -1
- package/lib/constants.js +4 -2
- package/lib/init.js +14 -0
- package/lib/install-state.js +8 -4
- package/lib/validate.js +21 -0
- package/package.json +2 -1
- package/scaffold/agents/core/dw-build-fixer.md +0 -1
- package/scaffold/agents/core/dw-code-explorer.md +0 -1
- package/scaffold/agents/core/dw-code-reviewer.md +0 -1
- package/scaffold/agents/core/dw-planner.md +0 -1
- package/scaffold/agents/core/dw-test-author.md +0 -1
- package/scaffold/agents/csharp/dw-csharp-reviewer.md +0 -1
- package/scaffold/agents/csharp/dw-dotnet-build-fixer.md +0 -1
- package/scaffold/agents/frontend/dw-qa-runner.md +0 -1
- package/scaffold/agents/python/dw-python-build-fixer.md +0 -1
- package/scaffold/agents/python/dw-python-reviewer.md +0 -1
- package/scaffold/agents/rust/dw-rust-build-fixer.md +0 -1
- package/scaffold/agents/rust/dw-rust-reviewer.md +0 -1
- package/scaffold/agents/security/dw-security-reviewer.md +0 -1
- package/scaffold/agents/security/dw-silent-failure-hunter.md +0 -1
- package/scaffold/agents/typescript/dw-typescript-build-fixer.md +0 -1
- package/scaffold/agents/typescript/dw-typescript-reviewer.md +0 -1
- package/scaffold/config/routing.json +60 -0
- package/scaffold/en/commands/dw-brainstorm.md +12 -8
- package/scaffold/en/commands/dw-bugfix.md +4 -2
- package/scaffold/en/commands/dw-claude-run.md +5 -1
- package/scaffold/en/commands/dw-codex-run.md +5 -1
- package/scaffold/en/commands/dw-dockerize.md +14 -7
- package/scaffold/en/commands/dw-generate-pr.md +13 -0
- package/scaffold/en/commands/dw-new-project.md +14 -13
- package/scaffold/en/commands/dw-plan.md +2 -2
- package/scaffold/en/commands/dw-refactor.md +1 -0
- package/scaffold/en/commands/dw-review.md +33 -2
- package/scaffold/en/commands/dw-run.md +2 -1
- package/scaffold/en/commands/dw-triage.md +220 -0
- package/scaffold/en/templates/idea-onepager.md +28 -0
- package/scaffold/en/templates/project-onepager.md +6 -5
- package/scaffold/en/templates/task-template.md +2 -1
- package/scaffold/en/templates/tasks-template.md +11 -8
- package/scaffold/en/templates/triage-needs-info-template.md +23 -0
- package/scaffold/en/templates/triage-out-of-scope-template.md +36 -0
- package/scaffold/en/templates/triage-record-template.md +88 -0
- package/scaffold/pt-br/commands/dw-autopilot.md +81 -81
- package/scaffold/pt-br/commands/dw-brainstorm.md +12 -9
- package/scaffold/pt-br/commands/dw-bugfix.md +4 -2
- package/scaffold/pt-br/commands/dw-claude-run.md +23 -19
- package/scaffold/pt-br/commands/dw-codex-run.md +22 -18
- package/scaffold/pt-br/commands/dw-context-budget.md +10 -10
- package/scaffold/pt-br/commands/dw-copilot-run.md +20 -20
- package/scaffold/pt-br/commands/dw-dockerize.md +106 -99
- package/scaffold/pt-br/commands/dw-find-skills.md +52 -52
- package/scaffold/pt-br/commands/dw-generate-pr.md +13 -0
- package/scaffold/pt-br/commands/dw-goal.md +41 -41
- package/scaffold/pt-br/commands/dw-harness-audit.md +11 -11
- package/scaffold/pt-br/commands/dw-intel.md +70 -70
- package/scaffold/pt-br/commands/dw-learn.md +24 -24
- package/scaffold/pt-br/commands/dw-new-project.md +93 -92
- package/scaffold/pt-br/commands/dw-open-design.md +53 -53
- package/scaffold/pt-br/commands/dw-opportunities.md +45 -45
- package/scaffold/pt-br/commands/dw-pause.md +39 -39
- package/scaffold/pt-br/commands/dw-plan.md +3 -3
- package/scaffold/pt-br/commands/dw-refactor.md +31 -30
- package/scaffold/pt-br/commands/dw-resume.md +22 -22
- package/scaffold/pt-br/commands/dw-review.md +33 -2
- package/scaffold/pt-br/commands/dw-run.md +2 -1
- package/scaffold/pt-br/commands/dw-skill-health.md +10 -10
- package/scaffold/pt-br/commands/dw-subtask-complete.md +4 -4
- package/scaffold/pt-br/commands/dw-subtask-start.md +4 -4
- package/scaffold/pt-br/commands/dw-triage.md +220 -0
- package/scaffold/pt-br/templates/bugfix-summary-template.md +20 -20
- package/scaffold/pt-br/templates/concerns-template.md +20 -20
- package/scaffold/pt-br/templates/idea-onepager.md +28 -0
- package/scaffold/pt-br/templates/project-onepager.md +35 -34
- package/scaffold/pt-br/templates/state-template.md +13 -13
- package/scaffold/pt-br/templates/task-template.md +2 -1
- package/scaffold/pt-br/templates/tasks-template.md +11 -8
- package/scaffold/pt-br/templates/triage-needs-info-template.md +23 -0
- package/scaffold/pt-br/templates/triage-out-of-scope-template.md +36 -0
- package/scaffold/pt-br/templates/triage-record-template.md +88 -0
- package/scaffold/scripts/hooks/git-guardrails.mjs +41 -24
- package/scaffold/skills/docker-compose-recipes/SKILL.md +2 -4
- package/scaffold/skills/docker-compose-recipes/references/compose-composition.md +2 -2
- package/scaffold/skills/docker-compose-recipes/references/env-conventions.md +16 -9
- package/scaffold/skills/docker-compose-recipes/references/healthcheck-patterns.md +0 -1
- package/scaffold/skills/docker-compose-recipes/references/prod-vs-dev.md +7 -2
- package/scaffold/skills/docker-compose-recipes/services/elasticsearch.yml +3 -3
- package/scaffold/skills/docker-compose-recipes/services/meilisearch.yml +2 -2
- package/scaffold/skills/docker-compose-recipes/services/minio.yml +8 -4
- package/scaffold/skills/docker-compose-recipes/services/mysql.yml +4 -4
- package/scaffold/skills/docker-compose-recipes/services/postgres.yml +2 -2
- package/scaffold/skills/docker-compose-recipes/services/rabbitmq.yml +3 -3
- package/scaffold/skills/docker-compose-recipes/services/typesense.yml +3 -3
- package/scaffold/skills/dw-cli-run/SKILL.md +42 -38
- package/scaffold/skills/dw-cli-run/references/dispatch-tuning.md +85 -0
- package/scaffold/skills/dw-debug-protocol/SKILL.md +2 -0
- package/scaffold/skills/dw-debug-protocol/references/six-step-triage.md +60 -1
- package/scaffold/skills/dw-execute-phase/SKILL.md +4 -2
- package/scaffold/skills/dw-execute-phase/agents/executor.md +4 -2
- package/scaffold/skills/dw-execute-phase/agents/plan-checker.md +9 -7
- package/scaffold/skills/dw-execute-phase/references/atomic-commits.md +12 -8
- package/scaffold/skills/dw-execute-phase/references/plan-verification.md +6 -4
- package/scaffold/skills/dw-execute-phase/references/wave-coordination.md +14 -14
- package/scaffold/skills/dw-grilling/SKILL.md +17 -7
- package/scaffold/skills/dw-grilling/references/decision-tree.md +30 -7
- package/scaffold/skills/dw-simplification/references/deep-modules.md +50 -0
- package/scaffold/skills/dw-testing-discipline/SKILL.md +3 -1
- package/scaffold/skills/dw-testing-discipline/references/tdd-loop.md +83 -0
- package/scaffold/skills/docker-compose-recipes/services/mailhog.yml +0 -23
- package/scaffold/skills/docker-compose-recipes/services/postgres-pgvector.yml +0 -31
|
@@ -1,66 +1,66 @@
|
|
|
1
1
|
<system_instructions>
|
|
2
|
-
|
|
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
|
|
5
|
-
<critical>NUNCA toque arquivos fora do
|
|
6
|
-
<critical>A Fase 3 (
|
|
7
|
-
<critical>Mailpit
|
|
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
|
-
-
|
|
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
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
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
|
-
##
|
|
18
|
+
## Posição no Pipeline
|
|
19
19
|
|
|
20
|
-
**Predecessor:** `npx dev-workflow init` (rodado de dentro do
|
|
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
|
|
27
|
-
| `dw-verify` | **SEMPRE** — emita VERIFICATION REPORT
|
|
28
|
-
| `dw-council` | **Opt-in** — quando uma
|
|
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
|
-
##
|
|
30
|
+
## Variáveis de Entrada
|
|
31
31
|
|
|
32
|
-
|
|
|
32
|
+
| Variável | Descrição | Exemplo |
|
|
33
33
|
|----------|-----------|---------|
|
|
34
|
-
| `{{PROJECT_NAME}}` | Slug em kebab-case. Deriva do basename do CWD se
|
|
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
|
-
##
|
|
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
|
-
-
|
|
41
|
-
- Rules semeadas: `.dw/rules/index.md` (
|
|
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
|
|
44
|
+
## Comportamento Obrigatório — Pipeline
|
|
45
45
|
|
|
46
|
-
Execute as fases em ordem. A Fase 3
|
|
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
|
|
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`.
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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 (
|
|
80
|
+
#### Camada B — Infra (só pergunte o que cabe na forma)
|
|
81
81
|
|
|
82
|
-
6. **Database**: Postgres /
|
|
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 (
|
|
85
|
-
9. **Email — captura em dev** (default: **Mailpit**,
|
|
86
|
-
10. **Email — destino em prod** (
|
|
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
|
|
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 (
|
|
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** (
|
|
96
|
-
- Next.js: Auth.js / OIDC
|
|
97
|
-
- NestJS: OIDC
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
121
|
-
3. Apresente o plano e peca
|
|
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
|
|
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 —
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
156
|
-
4. Se o
|
|
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
|
|
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
|
|
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
|
|
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|
|
|
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
|
|
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
|
|
244
|
-
- Quick Start (`cp .env.example .env
|
|
245
|
-
- Local Dev (tabela de portas dos
|
|
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 (
|
|
248
|
-
-
|
|
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-*`
|
|
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`
|
|
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
|
|
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 —
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
323
|
+
## Regras Críticas
|
|
323
324
|
|
|
324
|
-
- <critical>NUNCA pule o gate de
|
|
325
|
-
- <critical>NUNCA rode tools `create-*` fora de `{{TARGET_DIR}}`. CWD de cada comando
|
|
326
|
-
- <critical>Se
|
|
327
|
-
- <critical>Se uma tool `create-*` falha, PARE.
|
|
328
|
-
-
|
|
329
|
-
-
|
|
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
|
|
334
|
-
- Tool `create-*`
|
|
335
|
-
-
|
|
336
|
-
-
|
|
337
|
-
- Porta
|
|
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
|
-
##
|
|
341
|
+
## Integração com Outros dw-* Commands
|
|
341
342
|
|
|
342
|
-
- **`npx dev-workflow init`** e predecessor
|
|
343
|
-
- **`/dw-plan prd`**
|
|
344
|
-
- **`/dw-analyze-project`** deve rodar
|
|
345
|
-
- **`/dw-secure-audit --plan --scan-only`** pode rodar logo
|
|
346
|
-
- **`/dw-secure-audit`** roda como parte do pipeline de PRD
|
|
347
|
-
- **`/dw-dockerize`**
|
|
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`
|
|
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>
|