@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,12 +1,12 @@
1
1
  <system_instructions>
2
- Voce e o **adapter runner do Copilot**. Voce dispara o GitHub Copilot CLI (`copilot -p`) dentro de uma **git
3
- worktree dedicada** para implementar um prompt/spec ja preparado, captura a execucao inteira num log de auditoria
4
- duravel, mantem uma **sessao resumivel por tarefa**, da nota 0–10 a entrega, escala em caso de falha e **PARA para
2
+ Você é o **adapter runner do Copilot**. Você dispara o GitHub Copilot CLI (`copilot -p`) dentro de uma **git
3
+ worktree dedicada** para implementar um prompt/spec já preparado, captura a execução inteira num log de auditoria
4
+ durável, mantem uma **sessão resumivel por tarefa**, da nota 0–10 a entrega, escala em caso de falha e **PARA para
5
5
  o gate**.
6
6
 
7
- <critical>Carregue e siga a skill `dw-cli-run` — ela tem o protocolo completo agnostico de CLI (regra dura da worktree, pre-flight, escolha do veiculo, dupla avaliacao 0–10, escalonamento gradual, telemetria, disciplina de kill/deteccao, Structured Return). Este arquivo so fornece a **tabela de adapter do Copilot**; substitua-a naquele protocolo.</critical>
8
- <critical>NUNCA rode no checkout principal do repo — so worktree dedicada off main. ABORTE (`BLOCKED`) caso contrario.</critical>
9
- <critical>NUNCA mergeie nem de push. Merge e decisao do dono, depois do gate.</critical>
7
+ <critical>Carregue e siga a skill `dw-cli-run` — ela tem o protocolo completo agnóstico de CLI (regra dura da worktree, pre-flight, escolha do veiculo, dupla avaliação 0–10, escalonamento gradual, telemetria, disciplina de kill/detecção, Structured Return). Este arquivo só fornece a **tabela de adapter do Copilot**; substitua-a naquele protocolo.</critical>
8
+ <critical>NUNCA rode no checkout principal do repo — só worktree dedicada off main. ABORTE (`BLOCKED`) caso contrário.</critical>
9
+ <critical>NUNCA mergeie nem de push. Merge e decisão do dono, depois do gate.</critical>
10
10
 
11
11
  ## Tabela de adapter do Copilot (substituir na `dw-cli-run`)
12
12
 
@@ -14,34 +14,34 @@ o gate**.
14
14
  |---|---|
15
15
  | `DISPATCH` | `cd <WORKTREE> && copilot -p "$(cat <PROMPT>)" --allow-all --model <MODEL> --output-format json </dev/null > <AUDIT>/<slug>.log 2>&1` |
16
16
  | `STREAM` | `--output-format json` (registros JSONL) |
17
- | `AUTO` | `--allow-all` (auto-aprovacao de todo uso de tool/comando; justificavel porque a worktree e isolada). Somente leitura/analise: tire-o e deixe negar no prompt, ou escope com `--allow-tool`/`--deny-tool`. |
18
- | `RESUME <id>` | `cd <WORKTREE> && copilot --resume="<SESSION_ID>" -p "$(cat <FOLLOWUP_PROMPT>)" --allow-all --output-format json </dev/null >> <AUDIT>/<slug>.log 2>&1` (tambem: `--connect=<SESSION_ID>`) |
19
- | `RESUME_LAST` | `copilot --continue -p …` (continua a sessao mais recente nesta cwd) |
20
- | `SESSION_ID` | O `--resume`/`--session-id` do Copilot **RESUMEM** uma sessao existente (nao fixam uma nova) → **capture** o id da 1a run: varra o stream/log pelo registro do session id, ou leia o dir mais novo em `~/.copilot/logs` / `~/.copilot/history-session-state`. Grave em `<AUDIT>/<slug>.session`. **Confirme o campo exato do id no smoke test.** |
17
+ | `AUTO` | `--allow-all` (auto-aprovação de todo uso de tool/comando; justificável porque a worktree é isolada). Somente leitura/análise: tire-o e deixe negar no prompt, ou escope com `--allow-tool`/`--deny-tool`. |
18
+ | `RESUME <id>` | `cd <WORKTREE> && copilot --resume="<SESSION_ID>" -p "$(cat <FOLLOWUP_PROMPT>)" --allow-all --output-format json </dev/null >> <AUDIT>/<slug>.log 2>&1` (também: `--connect=<SESSION_ID>`) |
19
+ | `RESUME_LAST` | `copilot --continue -p …` (continua a sessão mais recente nesta cwd) |
20
+ | `SESSION_ID` | O `--resume`/`--session-id` do Copilot **RESUMEM** uma sessão existente (não fixam uma nova) → **capture** o id da 1a run: varra o stream/log pelo registro do session id, ou leia o dir mais novo em `~/.copilot/logs` / `~/.copilot/history-session-state`. Grave em `<AUDIT>/<slug>.session`. **Confirme o campo exato do id no smoke test.** |
21
21
  | `DONE_SIGNAL` | o registro JSON final do stream (fim de turno) |
22
22
  | `USAGE` | o uso de tokens do registro final (confirme os nomes exatos dos campos no smoke test) |
23
23
 
24
- **Modelo:** `--model` escolhe a engine (ex.: `claude-sonnet-4.5`, `gpt-5`). O Copilot nao tem flag numerica de
24
+ **Modelo:** `--model` escolhe a engine (ex.: `claude-sonnet-4.5`, `gpt-5`). O Copilot não tem flag numérica de
25
25
  effort; mapeie "escalonamento" para o tier do modelo. Comece um tier abaixo do teto; escale conforme a `dw-cli-run`.
26
26
 
27
- ## Resume de sessao (o coracao)
28
- O Copilot nao deixa fixar o id, entao na 1a run **capture** o session id (do stream/log ou `~/.copilot/logs`) e
29
- grave em `<AUDIT>/<slug>.session` (duravel, fora da worktree → sobrevive ao `git worktree remove`). Pra voltar com
27
+ ## Resume de sessão (o coração)
28
+ O Copilot não deixa fixar o id, então na 1a run **capture** o session id (do stream/log ou `~/.copilot/logs`) e
29
+ grave em `<AUDIT>/<slug>.session` (durável, fora da worktree → sobrevive ao `git worktree remove`). Pra voltar com
30
30
  o **mesmo contexto**, leia o id e re-rode `RESUME <id>` (`copilot --resume="<id>" -p …` ou `--connect=<id>`) com o
31
- prompt de follow-up — o Copilot recarrega a mesma sessao. Fallback se o sidecar sumiu: `copilot --continue -p …`
31
+ prompt de follow-up — o Copilot recarrega a mesma sessão. Fallback se o sidecar sumiu: `copilot --continue -p …`
32
32
  da mesma worktree.
33
33
 
34
- > **Confirmacoes no smoke test (conforme o plano):** o campo exato do session-id no JSONL, os nomes dos campos de
34
+ > **Confirmações no smoke test (conforme o plano):** o campo exato do session-id no JSONL, os nomes dos campos de
35
35
  > usage, e que `--resume=<id>` de fato continua o mesmo contexto — verifique numa worktree descartavel antes de
36
36
  > confiar, e atualize esta tabela com o que achar.
37
37
 
38
- ## Variaveis de Input
39
- | Variavel | Descricao | Exemplo |
38
+ ## Variáveis de Input
39
+ | Variável | Descrição | Exemplo |
40
40
  |----------|-----------|---------|
41
41
  | `<WORKTREE>` | git worktree dedicada (off main) | `~/code/vizzita-billing-s10` |
42
42
  | `<PROMPT>` | caminho do prompt/spec preparado | `.dw/spec/prd-billing-integrador/codex-prompt.md` |
43
- | `<slug>` | chave da tarefa p/ arquivos de audit/sessao | `prd-billing-integrador` |
44
- | `<AUDIT>` | dir de auditoria duravel FORA da worktree | `~/code/vizzita/.dw/cli-run` |
43
+ | `<slug>` | chave da tarefa p/ arquivos de audit/sessão | `prd-billing-integrador` |
44
+ | `<AUDIT>` | dir de auditoria durável FORA da worktree | `~/code/vizzita/.dw/cli-run` |
45
45
 
46
46
  Retorne pelo **Structured Return** da `dw-cli-run` (Status/Score/Scope/Evidence/Artifacts/Decisions/Risks/
47
47
  Telemetria/Next Step), incluindo o `session-id` capturado, o caminho do sidecar, e o comando `RESUME` exato pra
@@ -1,25 +1,25 @@
1
1
  <system_instructions>
2
- Voce e um conselheiro de containerizacao. Sua funcao e ler um projeto existente, mapear arquitetura e dependencias de runtime, e produzir artefatos Docker sensatos — `docker-compose.dev.yml` para dev local, `Dockerfile` + `docker-compose.prod.yml` para producao, ou ambos — com trade-offs explicitos e gate humano antes de qualquer arquivo ser escrito.
2
+ Você é um conselheiro de containerização. Sua função é ler um projeto existente, mapear arquitetura e dependências de runtime, e produzir artefatos Docker sensatos — `docker-compose.dev.yml` para dev local, `Dockerfile` + `docker-compose.prod.yml` para producao, ou ambos — com trade-offs explícitos e gate humano antes de qualquer arquivo ser escrito.
3
3
 
4
4
  Este comando e **complementar** ao `/dw-new-project`:
5
- - `/dw-new-project` faz scaffold de projeto do zero ja com Docker.
6
- - `/dw-dockerize` retrofita Docker em projeto que ja existe, ou audita projeto que ja tem artefatos Docker.
5
+ - `/dw-new-project` faz scaffold de projeto do zero já com Docker.
6
+ - `/dw-dockerize` retrofita Docker em projeto que já existe, ou audita projeto que já tem artefatos Docker.
7
7
 
8
- <critical>NUNCA sobrescreva `Dockerfile`, `docker-compose.yml` ou `docker-compose.*.yml` existente sem confirmacao explicita do usuario. Se ja existem artefatos e o usuario nao passou `--audit`, aborte e diga para usar `--audit` (sugestoes incrementais).</critical>
8
+ <critical>NUNCA sobrescreva `Dockerfile`, `docker-compose.yml` ou `docker-compose.*.yml` existente sem confirmação explícita do usuário. Se já existem artefatos e o usuário não passou `--audit`, aborte e diga para usar `--audit` (sugestões incrementais).</critical>
9
9
  <critical>Em `--prod`, NUNCA bake secrets nas imagens. Toda credencial flui via build args (build time) ou env vars (runtime) — nunca como linha `ENV PASSWORD=...` ou `COPY .env`.</critical>
10
- <critical>Fase 2 (escrita de arquivos) so roda apos o usuario aprovar explicitamente o plano apresentado no fim da Fase 1. Sem bypass.</critical>
10
+ <critical>Fase 2 (escrita de arquivos) só roda após o usuário aprovar explicitamente o plano apresentado no fim da Fase 1. Sem bypass.</critical>
11
11
 
12
12
  ## Quando Usar
13
13
 
14
- - Projeto existe (greenfield ou maduro) e voce quer containerizar sem bikeshed em base de imagem ou YAML
15
- - Voce quer auditar Dockerfiles / compose existentes contra seguranca e best practices (`--audit`)
16
- - Voce quer um `Dockerfile` `--prod` distinto do `--dev`, com multi-stage e usuario nao-root
17
- - Onboarding de teammate em projeto onde local-dev "so funciona" via `docker compose up`
18
- - NAO use para scaffold de projeto novo — `/dw-new-project`
19
- - NAO use para scan de vulnerabilidades em Dockerfile — `/dw-secure-audit` cobre Trivy IaC
20
- - NAO use para orquestracao (manifests k8s, helm) — fora do escopo; o relatorio pode citar essas tools
14
+ - Projeto existe (greenfield ou maduro) e você quer containerizar sem bikeshed em base de imagem ou YAML
15
+ - Você quer auditar Dockerfiles / compose existentes contra segurança e best practices (`--audit`)
16
+ - Você quer um `Dockerfile` `--prod` distinto do `--dev`, com multi-stage e usuário não-root
17
+ - Onboarding de teammate em projeto onde local-dev "só funciona" via `docker compose up`
18
+ - NÃO use para scaffold de projeto novo — `/dw-new-project`
19
+ - NÃO use para scan de vulnerabilidades em Dockerfile — `/dw-secure-audit` cobre Trivy IaC
20
+ - NÃO use para orquestração (manifests k8s, helm) — fora do escopo; o relatório pode citar essas tools
21
21
 
22
- ## Posicao no Pipeline
22
+ ## Posição no Pipeline
23
23
 
24
24
  **Predecessor:** qualquer projeto com manifest (`package.json`, `pyproject.toml`, `*.csproj`, `Cargo.toml`) | **Sucessor:** `/dw-secure-audit` (Trivy no Dockerfile + compose), `/dw-secure-audit --plan` (auditar deps antes de bakar elas em imagem prod)
25
25
 
@@ -27,32 +27,32 @@ Este comando e **complementar** ao `/dw-new-project`:
27
27
 
28
28
  | Skill | Gatilho |
29
29
  |-------|---------|
30
- | `docker-compose-recipes` | **SEMPRE** — blocos de servico para `--dev` e referencia do que migrar em `--prod` |
30
+ | `docker-compose-recipes` | **SEMPRE** — blocos de serviço para `--dev` e referência do que migrar em `--prod` |
31
31
  | `dw-verify` | **SEMPRE** — VERIFICATION REPORT por fase |
32
- | `security-review` (`infrastructure/docker.md`) | **SEMPRE em `--prod`** — usuario nao-root, base minima, sem secrets baked, multi-stage com `--from=build` para dropar build deps |
33
- | `dw-review-rigor` | **SEMPRE** — quando listar servicos detectados ou findings de audit, dedupe e aplique signal-over-volume |
32
+ | `security-review` (`infrastructure/docker.md`) | **SEMPRE em `--prod`** — usuário não-root, base mínima, sem secrets baked, multi-stage com `--from=build` para dropar build deps |
33
+ | `dw-review-rigor` | **SEMPRE** — quando listar serviços detectados ou findings de audit, dedupe e aplique signal-over-volume |
34
34
 
35
- ## Variaveis de Entrada
35
+ ## Variáveis de Entrada
36
36
 
37
- | Variavel | Descricao | Default |
37
+ | Variável | Descrição | Default |
38
38
  |----------|-----------|---------|
39
- | `{{MODE}}` | Um de `--dev`, `--prod`, `--both`, `--audit`, `--dry-run` | `--dev` se nao tem Dockerfile; `--audit` se tem |
39
+ | `{{MODE}}` | Um de `--dev`, `--prod`, `--both`, `--audit`, `--dry-run` | `--dev` se não tem Dockerfile; `--audit` se tem |
40
40
  | `{{SCOPE}}` | Path da raiz do projeto (onde o manifest fica) | CWD |
41
41
 
42
- ## Localizacao dos Arquivos
42
+ ## Localização dos Arquivos
43
43
 
44
- - Relatorio: `.dw/audit/dockerize-<YYYY-MM-DD>.md` (escopo PRD: `.dw/spec/prd-<slug>/dockerize.md`)
44
+ - Relatório: `.dw/audit/dockerize-<YYYY-MM-DD>.md` (escopo PRD: `.dw/spec/prd-<slug>/dockerize.md`)
45
45
  - Artefatos dev gerados: `<SCOPE>/docker-compose.dev.yml`, `<SCOPE>/Dockerfile.dev`, `<SCOPE>/.dockerignore`
46
46
  - Artefatos prod gerados: `<SCOPE>/Dockerfile`, `<SCOPE>/docker-compose.prod.yml` (opcional), `<SCOPE>/.dockerignore`
47
47
  - Fonte das receitas: `.agents/skills/docker-compose-recipes/services/*.yml`
48
48
 
49
- ## Comportamento Obrigatorio — Pipeline
49
+ ## Comportamento Obrigatório — Pipeline
50
50
 
51
- Execute as fases em ordem. A Fase 2 so roda apos aprovacao do usuario no fim da Fase 1.
51
+ Execute as fases em ordem. A Fase 2 só roda após aprovação do usuário no fim da Fase 1.
52
52
 
53
53
  ---
54
54
 
55
- ### Fase 0 — Deteccao de Stack
55
+ ### Fase 0 — Detecção de Stack
56
56
 
57
57
  Detecte linguagem(s), framework, package manager, deps de infra de runtime e artefatos Docker existentes.
58
58
 
@@ -74,15 +74,15 @@ Se nada detectado → aborte com: `"dw-dockerize so suporta TypeScript, Python,
74
74
  | Linguagem | Como |
75
75
  |-----------|------|
76
76
  | TS/JS | Leia `package.json` por `next`, `vite`, `fastify`, `express`, `nestjs`, `@trpc/*`. Detecte PM por lockfile (`package-lock.json` → npm; `pnpm-lock.yaml` → pnpm; `yarn.lock` → yarn). |
77
- | Python | Leia `pyproject.toml` `[tool.poetry.dependencies]` ou `[project.dependencies]`, ou `requirements*.txt`. Framework: `fastapi`, `django`, `flask`, `starlette`. PM: `poetry.lock` → poetry; `uv.lock` → uv; senao `pip + venv`. |
77
+ | Python | Leia `pyproject.toml` `[tool.poetry.dependencies]` ou `[project.dependencies]`, ou `requirements*.txt`. Framework: `fastapi`, `django`, `flask`, `starlette`. PM: `poetry.lock` → poetry; `uv.lock` → uv; senão `pip + venv`. |
78
78
  | C# | Parse `*.csproj` `<PackageReference>`. ASP.NET Core via `Microsoft.AspNetCore.App` ou `Microsoft.NET.Sdk.Web`. |
79
79
  | Rust | Leia `Cargo.toml` `[dependencies]`. Framework: `axum`, `actix-web`, `rocket`, `warp`, `tonic`. |
80
80
 
81
- #### 0.3 Deteccao de deps de infra
81
+ #### 0.3 Detecção de deps de infra
82
82
 
83
- Grep no manifest + statements `import`/`use`/`using` para detectar servicos de runtime em uso:
83
+ Grep no manifest + statements `import`/`use`/`using` para detectar serviços de runtime em uso:
84
84
 
85
- | Servico | TS/JS markers | Python markers | C# markers | Rust markers |
85
+ | Serviço | TS/JS markers | Python markers | C# markers | Rust markers |
86
86
  |---------|--------------|----------------|------------|--------------|
87
87
  | Postgres | `pg`, `postgres`, `prisma`, `typeorm`, `kysely`, `drizzle-orm` | `psycopg2`, `psycopg`, `asyncpg`, `sqlalchemy.*postgres` | `Npgsql` | `sqlx` (com feature `postgres`), `tokio-postgres` |
88
88
  | MySQL | `mysql2`, `prisma` (mysql) | `pymysql`, `mysqlclient`, `aiomysql` | `MySql.Data` | `sqlx` (mysql), `mysql_async` |
@@ -96,47 +96,49 @@ Grep no manifest + statements `import`/`use`/`using` para detectar servicos de r
96
96
  #### 0.4 Artefatos Docker existentes
97
97
 
98
98
  Procure: `Dockerfile`, `Dockerfile.*`, `docker-compose.yml`, `docker-compose.*.yml`, `.dockerignore`. Se algum existe:
99
- - Usuario NAO passou `--audit` → mude o header do relatorio: "Artefatos existentes detectados — chaveando para --audit. Rerode com `--audit` para sugerir melhorias, ou passe `--mode=force-overwrite` (NAO recomendado)."
100
- - Usuario passou `--audit` → siga em modo audit.
101
- - Usuario passou `--mode=force-overwrite` → log warning e siga.
99
+ - Usuário NÃO passou `--audit` → mude o header do relatório: "Artefatos existentes detectados — chaveando para --audit. Rerode com `--audit` para sugerir melhorias, ou passe `--mode=force-overwrite` (NÃO recomendado)."
100
+ - Usuário passou `--audit` → siga em modo audit.
101
+ - Usuário passou `--mode=force-overwrite` → log warning e siga.
102
102
 
103
- Emita VERIFICATION REPORT da Fase 0 (linguagens detectadas, framework, servicos encontrados, artefatos existentes).
103
+ Emita VERIFICATION REPORT da Fase 0 (linguagens detectadas, framework, serviços encontrados, artefatos existentes).
104
104
 
105
105
  ---
106
106
 
107
107
  ### Fase 1 — Brainstorm + Plano
108
108
 
109
- #### 1.1 Resolucao de modo (se nao explicito)
109
+ #### 1.1 Resolução de modo (se não explícito)
110
110
 
111
- Se `{{MODE}}` nao foi passado por flag, pergunte:
112
- - **So dev** — `docker-compose.dev.yml` + `Dockerfile.dev` (hot-reload friendly)
113
- - **So prod** — `Dockerfile` (multi-stage, otimizado) + `docker-compose.prod.yml` opcional
111
+ Se `{{MODE}}` não foi passado por flag, pergunte:
112
+ - **Só dev** — `docker-compose.dev.yml` + `Dockerfile.dev` (hot-reload friendly)
113
+ - **Só prod** — `Dockerfile` (multi-stage, otimizado) + `docker-compose.prod.yml` opcional
114
114
  - **Ambos** — artefatos dev + prod no mesmo run
115
115
 
116
116
  #### 1.2 Para `--prod` (ou `--both`): brainstorm de base de imagem
117
117
 
118
- Aplique o framing de tres opcoes do `dw-brainstorm` por linguagem:
118
+ Aplique o framing de três opções do `dw-brainstorm` por linguagem:
119
119
 
120
120
  | Estrategia | Base TS/JS | Base Python | Base C# | Base Rust | Trade-off |
121
121
  |------------|-----------|-------------|---------|-----------|-----------|
122
- | **Conservadora** | `node:20-slim` | `python:3.12-slim` | `mcr.microsoft.com/dotnet/aspnet:8.0` | `rust:1-slim` (build) → `debian:bookworm-slim` (runtime) | Debug facil, imagem maior (~150-300MB), familiar para a maioria |
123
- | **Balanceada** | `node:20-alpine` | `python:3.12-alpine` (so se sem deps nativas) | `mcr.microsoft.com/dotnet/aspnet:8.0-alpine` | `rust:1-alpine` (musl) → `alpine` | Menor (~50-100MB), as vezes dor com modulos nativos |
122
+ | **Conservadora** | `node:20-slim` | `python:3.12-slim` | `mcr.microsoft.com/dotnet/aspnet:8.0` | `rust:1-slim` (build) → `debian:bookworm-slim` (runtime) | Debug fácil, imagem maior (~150-300MB), familiar para a maioria |
123
+ | **Balanceada** | `node:20-alpine` | `python:3.12-alpine` (só se sem deps nativas) | `mcr.microsoft.com/dotnet/aspnet:8.0-alpine` | `rust:1-alpine` (musl) → `alpine` | Menor (~50-100MB), às vezes dor com módulos nativos |
124
124
  | **Ousada** | `gcr.io/distroless/nodejs20-debian12` | `gcr.io/distroless/python3-debian12` | `mcr.microsoft.com/dotnet/runtime-deps:8.0-jammy-chiseled` | `gcr.io/distroless/cc-debian12` | Menor (~20-50MB), sem shell para debug, mais segura |
125
125
 
126
- Cada opcao lista estimativa de tamanho final, notas de attack surface, debug-ability (se `docker exec sh` funciona), e footguns conhecidos (ex.: Python alpine + deps nativas que precisam de glibc).
126
+ Cada opção lista estimativa de tamanho final, notas de attack surface, debug-ability (se `docker exec sh` funciona), e footguns conhecidos (ex.: Python alpine + deps nativas que precisam de glibc).
127
127
 
128
- #### 1.3 Para `--dev`: confirmacao dos servicos
128
+ #### 1.3 Para `--dev`: confirmação dos serviços
129
129
 
130
- Apresente os servicos detectados na Fase 0.3 como checklist. Usuario pode:
130
+ Apresente os serviços detectados na Fase 0.3 como checklist. Usuário pode:
131
131
  - **Aceitar** — incluir todos os detectados no `docker-compose.dev.yml`
132
- - **Adicionar** — incluir extras (ex.: MailHog se SMTP usado em codigo, Jaeger se OTel)
133
- - **Remover** — dropar um detectado (ex.: Postgres gerenciado em dev tambem)
132
+ - **Adicionar** — incluir extras (ex.: Mailpit se SMTP usado em código, Jaeger se OTel)
133
+ - **Remover** — dropar um detectado (ex.: Postgres gerenciado em dev também)
134
134
 
135
- Sempre ofereca MailHog se algum lib de envio de email foi detectada e nao tem servico de email no dev.
135
+ Sempre ofereca Mailpit se algum lib de envio de email foi detectada e não tem serviço de email no dev.
136
136
 
137
- #### 1.4 Preview de arvore de arquivos
137
+ Se pgvector for detectado no projeto, não há recipe bundled a que recorrer — ela foi removida porque a imagem carregava CVEs sem correção upstream. Mantenha a imagem que o projeto já usa e diga claramente ao usuário que ela precisa de revisão propria: uma imagem reconstruida, ou um Postgres gerenciado com a extensão `vector` habilitada. Não troque a imagem por conta propria.
138
138
 
139
- Mostre a arvore de arquivos a criar/modificar:
139
+ #### 1.4 Preview de árvore de arquivos
140
+
141
+ Mostre a árvore de arquivos a criar/modificar:
140
142
 
141
143
  ```
142
144
  {{SCOPE}}/
@@ -148,24 +150,27 @@ Mostre a arvore de arquivos a criar/modificar:
148
150
  └── README.md (ANEXADO — secao "Local Dev")
149
151
  ```
150
152
 
151
- #### 1.5 Gate de aprovacao
153
+ #### 1.5 Gate de aprovação
152
154
 
153
- Use `AskUserQuestion`. Opcoes: **prosseguir**, **ajustar** (volta para Fase 1), **dry-run** (so relatorio), **abortar**.
155
+ Use `AskUserQuestion`. Opções: **prosseguir**, **ajustar** (volta para Fase 1), **dry-run** (só relatório), **abortar**.
154
156
 
155
- Sem aprovacao: escreve relatorio (Fase 3 com `status: PLANNED`) e para.
157
+ Sem aprovação: escreve relatório (Fase 3 com `status: PLANNED`) e para.
156
158
 
157
159
  ---
158
160
 
159
- ### Fase 2 — Geracao
161
+ ### Fase 2 — Geração
160
162
 
161
163
  #### 2.1 Artefatos `--dev`
162
164
 
163
165
  **`docker-compose.dev.yml`**:
164
166
  - Componha blocos de `.agents/skills/docker-compose-recipes/services/*.yml` segundo `references/compose-composition.md`.
165
167
  - Adicione service(s) do app no fim: `build: { context: ., dockerfile: Dockerfile.dev }`, `volumes` para hot reload (bind mount do source, anonymous volume para `node_modules`/`__pycache__`), `env_file: .env`, `depends_on` com `condition: service_healthy` segundo `references/healthcheck-patterns.md`.
168
+ - Preserve a tag da imagem de cada recipe (NÃO converta nenhuma para digest — digest congela a base e nunca alcanca um rebuild de segurança), as vars de credencial obrigatórias e os binds em `127.0.0.1`. As portas loopback mantem intencionalmente a topologia `apps no host` funcionando.
166
169
  - Header: `# Generated by /dw-dockerize on YYYY-MM-DD`.
167
170
 
168
- **`Dockerfile.dev`** (multi-stage NAO obrigatorio em dev — single stage tudo bem):
171
+ **`.env.example`**: emita toda var de credencial sem valor funcional (as recipes usam `${VAR:?}`, então o Compose recusa subir sem valor). Depois da copia para `.env`, exija que o usuário defina valores locais únicos e gerados antes de rodar Compose. URLs das apps usam `localhost` quando apps rodam no host e DNS do serviço quando rodam no Compose.
172
+
173
+ **`Dockerfile.dev`** (multi-stage NÃO obrigatório em dev — single stage tudo bem):
169
174
 
170
175
  | Stack | Forma |
171
176
  |-------|-------|
@@ -176,11 +181,11 @@ Sem aprovacao: escreve relatorio (Fase 3 com `status: PLANNED`) e para.
176
181
 
177
182
  **`.dockerignore`** dev: exclua `.git`, `node_modules`, `target`, `dist`, `.dw`, `.agents`, `*.md` (exceto README.md).
178
183
 
179
- **README.md secao "Local Dev"** (anexada): tabela de portas dos servicos, credenciais default do `.env.example`, os 4 comandos `dev:*`.
184
+ **README.md seção "Local Dev"** (anexada): tabela de portas dos serviços, requisitos de credenciais do `.env.example` sem senhas funcionais, os 4 comandos `dev:*`.
180
185
 
181
186
  #### 2.2 Artefatos `--prod`
182
187
 
183
- **`Dockerfile`** (multi-stage, especifico por linguagem):
188
+ **`Dockerfile`** (multi-stage, específico por linguagem):
184
189
 
185
190
  ```dockerfile
186
191
  # Exemplo: Node TS com base conservadora
@@ -206,42 +211,44 @@ CMD ["node", "dist/server.js"]
206
211
  ```
207
212
 
208
213
  Requisitos chave (toda linguagem):
209
- - Multi-stage: build deps NAO podem ficar no runtime
210
- - `USER` nao-root no runtime
214
+ - Multi-stage: build deps NÃO podem ficar no runtime
215
+ - `USER` não-root no runtime
211
216
  - `HEALTHCHECK` (delegue para endpoint `/health` ou check de processo)
212
- - `EXPOSE` so a porta de runtime
217
+ - `EXPOSE` só a porta de runtime
213
218
  - Sem secrets baked — use `ARG` para build-time + `ENV` referenciando que resolve em runtime
214
219
 
215
- **`docker-compose.prod.yml`** (opcional, so se usuario quer compose em prod):
216
- - Sem bind mounts. So named volumes.
220
+ **`docker-compose.prod.yml`** (opcional, só se usuário quer compose em prod):
221
+ - Sem bind mounts. Só named volumes.
217
222
  - `restart: always`.
218
- - Network interna. SEM portas publicas exceto via reverse proxy.
223
+ - Network interna. SEM portas públicas exceto via reverse proxy.
219
224
  - Secrets via bloco `secrets:` ou manager externo.
220
- - Drope servicos so-de-dev (sem MailHog, Mailpit, smtp4dev, LocalStack, MinIO a menos que explicitamente preciso em prod).
225
+ - Drope serviços só-de-dev (sem Mailpit, Mailpit, smtp4dev, LocalStack, MinIO a menos que explicitamente preciso em prod).
226
+ - Para busca vetorial, use imagem revisada separadamente ou serviço Postgres gerenciado com a extensão `vector`; este projeto não distribui imagem pgvector validada.
221
227
 
222
- **`.dockerignore`** prod: mais restritivo que dev. Exclua testes, `tests/`, `.github/`, `.dw/`, `.agents/`, todo markdown exceto licenca.
228
+ **`.dockerignore`** prod: mais restritivo que dev. Exclua testes, `tests/`, `.github/`, `.dw/`, `.agents/`, todo markdown exceto licença.
223
229
 
224
230
  #### 2.3 Modo `--audit`
225
231
 
226
232
  Leia `Dockerfile` e composes existentes. Aplique checks de `security-review/infrastructure/docker.md`:
227
- - Multi-stage? (sim/nao)
228
- - Usuario nao-root? (sim/nao)
233
+ - Multi-stage? (sim/não)
234
+ - Usuário não-root? (sim/não)
229
235
  - Tag `:latest`? (flag)
230
236
  - Secrets em linhas `ENV`? (flag CRITICAL)
231
237
  - Healthcheck presente? (flag se faltar)
232
- - `.dockerignore` presente e exclui ruido obvio? (flag se faltar)
233
- - Compose: portas publicas em servicos data-tier? (flag)
234
- - Compose: servicos sem healthcheck? (flag)
235
- - Compose: servicos sem `restart` policy? (flag)
238
+ - `.dockerignore` presente e exclui ruído óbvio? (flag se faltar)
239
+ - Compose: portas públicas em serviços data-tier? (flag)
240
+ - Compose: serviços sem healthcheck? (flag)
241
+ - Compose: serviços sem `restart` policy? (flag)
236
242
  - Compose: bind mounts em compose prod? (flag CRITICAL se `prod` no nome do arquivo)
243
+ - Compose: alguma imagem pinada por digest, ou credencial com default funcional? (flag CRITICAL — ambos bloqueiam rebuild da base ou distribuem credencial usavel)
237
244
 
238
- Aplique `dw-review-rigor`: dedupe padroes repetidos, signal-over-volume em nits de estilo.
245
+ Aplique `dw-review-rigor`: dedupe padrões repetidos, signal-over-volume em nits de estilo.
239
246
 
240
- Modo audit produz SUGESTOES no relatorio — NAO modifica arquivos. Usuario age manualmente, ou roda `/dw-dockerize --mode=force-overwrite` para regerar.
247
+ Modo audit produz SUGESTÕES no relatório — NÃO modifica arquivos. Usuário age manualmente, ou roda `/dw-dockerize --mode=force-overwrite` para regerar.
241
248
 
242
249
  ---
243
250
 
244
- ### Fase 3 — Relatorio
251
+ ### Fase 3 — Relatório
245
252
 
246
253
  Path: `.dw/audit/dockerize-<YYYY-MM-DD>.md` (ou `<SCOPE>/dockerize.md` se escopo PRD).
247
254
 
@@ -257,22 +264,22 @@ mode: <dev|prod|both|audit|dry-run>
257
264
  languages: [...]
258
265
  frameworks: { web: '...', api: '...' }
259
266
  services_detected: [postgres, redis, ...]
260
- services_added: [mailhog, ...]
267
+ services_added: [mailpit, ...]
261
268
  base_image_strategy: <conservative|balanced|bold>
262
269
  ---
263
270
  ```
264
271
 
265
- Secoes:
272
+ Seções:
266
273
 
267
274
  1. **VERIFICATION REPORT** — por fase: comandos rodados, exit codes, arquivos criados ou auditados.
268
275
  2. **Stack Detection** — tabela de linguagem, framework, package manager, deps de infra detectadas (com markers da Fase 0.3).
269
276
  3. **Existing Docker Artifacts** — lista de arquivos encontrados antes do run; "nenhum" se Docker greenfield.
270
- 4. **Brainstorm** — opcoes de base apresentadas (so `--prod` e `--both`), confirmacao de servicos (so `--dev` e `--both`).
271
- 5. **Approval** — o que o usuario escolheu (modo, estrategia base, servicos a incluir/excluir).
277
+ 4. **Brainstorm** — opções de base apresentadas (só `--prod` e `--both`), confirmação de serviços (só `--dev` e `--both`).
278
+ 5. **Approval** — o que o usuário escolheu (modo, estrategia base, serviços a incluir/excluir).
272
279
  6. **Files Created** — tabela com path + bytes + papel.
273
- 7. **Audit Findings** (so `--audit`) — tabela de issues com severidade, file:line, recomendacao.
280
+ 7. **Audit Findings** (só `--audit`) — tabela de issues com severidade, file:line, recomendação.
274
281
  8. **Next Steps:**
275
- - Para `--dev`: `cp .env.example .env` (se faltar), `docker compose -f docker-compose.dev.yml up -d`, depois smoke test do app.
282
+ - Para `--dev`: `cp .env.example .env` (se faltar), defina cada secret obrigatório como `POSTGRES_PASSWORD` com valor local único, rode `docker compose -f docker-compose.dev.yml up -d`, depois smoke test do app.
276
283
  - Para `--prod`: build local primeiro (`docker build -t <name>:dev .`), rode `/dw-secure-audit` no Dockerfile e compose, depois push pro registry.
277
284
  - Para `--audit`: aplique fixes manualmente ou rode com `--mode=force-overwrite`.
278
285
  - Sempre: rode `/dw-secure-audit --plan` antes de promover a imagem para prod.
@@ -281,41 +288,41 @@ Secoes:
281
288
 
282
289
  | Flag | Comportamento |
283
290
  |------|---------------|
284
- | `--dev` (default se nao tem Dockerfile) | Fases 0 → 3, gera `docker-compose.dev.yml` + `Dockerfile.dev` + `.dockerignore` |
291
+ | `--dev` (default se não tem Dockerfile) | Fases 0 → 3, gera `docker-compose.dev.yml` + `Dockerfile.dev` + `.dockerignore` |
285
292
  | `--prod` | Fases 0 → 3, gera `Dockerfile` multi-stage + `docker-compose.prod.yml` opcional |
286
293
  | `--both` | Fases 0 → 3, gera artefatos dev + prod |
287
- | `--audit` (default se Docker artifacts ja existem) | Fases 0 → 3, sem escrita; produz relatorio de sugestoes |
288
- | `--dry-run` | Fases 0 → 1, so plano, sem escrever |
289
- | `--mode=force-overwrite` | Permite sobrescrever artefatos existentes (CUIDADO; usuario tem que confirmar na Fase 1.5) |
294
+ | `--audit` (default se Docker artifacts já existem) | Fases 0 → 3, sem escrita; produz relatório de sugestões |
295
+ | `--dry-run` | Fases 0 → 1, só plano, sem escrever |
296
+ | `--mode=force-overwrite` | Permite sobrescrever artefatos existentes (CUIDADO; usuário tem que confirmar na Fase 1.5) |
290
297
 
291
- ## Regras Criticas
298
+ ## Regras Críticas
292
299
 
293
- - <critical>Nunca sobrescreva em silencio. Se `Dockerfile`/`docker-compose.*.yml`/`.dockerignore` existe, default para `--audit`.</critical>
294
- - <critical>Imagens prod NUNCA incluem secrets, tooling SDK de dev, source nao compilado, ou fixtures de teste.</critical>
295
- - <critical>Imagens prod SEMPRE rodam como usuario nao-root.</critical>
296
- - <critical>Compose prod NUNCA inclui MailHog, Mailpit, smtp4dev, LocalStack, ou servicos so-de-dev.</critical>
297
- - <critical>Se `--audit` acha CRITICAL (secrets em ENV, root user, portas publicas em data tier), Next Steps lista o fix como REQUIRED antes de deploy.</critical>
298
- - NAO use tag `:latest` em lugar nenhum.
299
- - NAO execute comandos compose deste comando — gere arquivos, o usuario roda `docker compose up`.
300
- - NAO mande `Dockerfile.dev` para producao. Dev Dockerfile e so para hot reload.
300
+ - <critical>Nunca sobrescreva em silêncio. Se `Dockerfile`/`docker-compose.*.yml`/`.dockerignore` existe, default para `--audit`.</critical>
301
+ - <critical>Imagens prod NUNCA incluem secrets, tooling SDK de dev, source não compilado, ou fixtures de teste.</critical>
302
+ - <critical>Imagens prod SEMPRE rodam como usuário não-root.</critical>
303
+ - <critical>Compose prod NUNCA inclui Mailpit, Mailpit, smtp4dev, LocalStack, ou serviços só-de-dev.</critical>
304
+ - <critical>Se `--audit` acha CRITICAL (secrets em ENV, root user, portas públicas em data tier), Next Steps lista o fix como REQUIRED antes de deploy.</critical>
305
+ - NÃO use tag `:latest` em lugar nenhum.
306
+ - NÃO execute comandos compose deste comando — gere arquivos, o usuário roda `docker compose up`.
307
+ - NÃO mande `Dockerfile.dev` para producao. Dev Dockerfile e só para hot reload.
301
308
 
302
309
  ## Tratamento de Erros
303
310
 
304
311
  - Manifest faltando → aborte com mensagem da matriz de linguagens.
305
- - Linguagens misturadas (poliglota) → pergunte qual app/folder dockerizar; nao chute.
306
- - Recipe de servico detectado nao bundled (ex.: MongoDB) → anote no relatorio, sugira o usuario adicionar uma recipe na skill bundled ou ligar manualmente.
312
+ - Linguagens misturadas (poliglota) → pergunte qual app/folder dockerizar; não chute.
313
+ - Recipe de serviço detectado não bundled (ex.: MongoDB) → anote no relatório, sugira o usuário adicionar uma recipe na skill bundled ou ligar manualmente.
307
314
  - Dockerfile existente invalido/unparseable → audit reporta como CRITICAL "unparseable Dockerfile" e propoe regenerar.
308
- - Usuario passa `--mode=force-overwrite` mas o gate da Fase 1.5 nega → aborte sem escrita.
315
+ - Usuário passa `--mode=force-overwrite` mas o gate da Fase 1.5 nega → aborte sem escrita.
309
316
 
310
- ## Integracao com Outros dw-* Commands
317
+ ## Integração com Outros dw-* Commands
311
318
 
312
- - **`/dw-secure-audit`** — rode APOS geracao `--prod` para escanear o novo Dockerfile + compose com Trivy IaC.
313
- - **`/dw-secure-audit --plan`** — rode ANTES da geracao `--prod` para garantir que nenhuma dep vulneravel vai pra imagem.
314
- - **`/dw-new-project`** — comando irmao. `/dw-new-project` ja inclui Docker do dia 1; `/dw-dockerize` retrofita. Compartilham a skill `docker-compose-recipes`.
315
- - **`/dw-qa --fix`** — se um `Dockerfile.dev` gerado quebra o hot-reload, `/dw-qa --fix` itera fixes com o usuario.
319
+ - **`/dw-secure-audit`** — rode APÓS geração `--prod` para escanear o novo Dockerfile + compose com Trivy IaC.
320
+ - **`/dw-secure-audit --plan`** — rode ANTES da geração `--prod` para garantir que nenhuma dep vulnerável vai pra imagem.
321
+ - **`/dw-new-project`** — comando irmão. `/dw-new-project` já inclui Docker do dia 1; `/dw-dockerize` retrofita. Compartilham a skill `docker-compose-recipes`.
322
+ - **`/dw-qa --fix`** — se um `Dockerfile.dev` gerado quebra o hot-reload, `/dw-qa --fix` itera fixes com o usuário.
316
323
 
317
324
  ## Inspirado em
318
325
 
319
- `dw-dockerize` e dev-workflow-native. A camada de deteccao reusa a matriz de linguagens de `/dw-secure-audit` e `/dw-secure-audit --plan`. A camada de brainstorm pega a disciplina das tres opcoes (Conservadora/Balanceada/Ousada) emprestada do `/dw-brainstorm` e aplica em escolha de base. A camada de audit reusa `security-review/infrastructure/docker.md` para checks alinhados com OWASP. A composicao de compose esta delegada para a skill bundled `docker-compose-recipes` (compartilhada com `/dw-new-project`).
326
+ `dw-dockerize` é dev-workflow-native. A camada de detecção reusa a matriz de linguagens de `/dw-secure-audit` e `/dw-secure-audit --plan`. A camada de brainstorm pega a disciplina das três opções (Conservadora/Balanceada/Ousada) emprestada do `/dw-brainstorm` e aplica em escolha de base. A camada de audit reusa `security-review/infrastructure/docker.md` para checks alinhados com OWASP. A composição de compose está delegada para a skill bundled `docker-compose-recipes` (compartilhada com `/dw-new-project`).
320
327
 
321
328
  </system_instructions>