@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
|
@@ -9,28 +9,28 @@ related_concerns: []
|
|
|
9
9
|
|
|
10
10
|
# Bugfix Summary — {{NNN}}-{{slug}}
|
|
11
11
|
|
|
12
|
-
Registro de uma
|
|
12
|
+
Registro de uma página de um bugfix. Arquivos irmãos neste diretório:
|
|
13
13
|
|
|
14
|
-
- `TASK.md` — a triagem original, respostas das perguntas de
|
|
15
|
-
- `fix-report.md` —
|
|
14
|
+
- `TASK.md` — a triagem original, respostas das perguntas de clarificação e o plano de fix que rodou
|
|
15
|
+
- `fix-report.md` — evidência de verificação (saída do `dw-verify` PASS, prova de reprodução, execução do teste de regressão)
|
|
16
16
|
- `review/` — populado por `/dw-review --bugfix {{NNN}}-{{slug}}`
|
|
17
|
-
- `QA/` — populado por `/dw-qa --bugfix {{NNN}}-{{slug}}` (quando
|
|
17
|
+
- `QA/` — populado por `/dw-qa --bugfix {{NNN}}-{{slug}}` (quando aplicável)
|
|
18
18
|
|
|
19
19
|
## Sintoma
|
|
20
20
|
|
|
21
|
-
O que o
|
|
21
|
+
O que o usuário observou. Cite a descrição original do bug verbatim; não parafraseie.
|
|
22
22
|
|
|
23
23
|
> _"…"_
|
|
24
24
|
|
|
25
25
|
## Causa Raiz
|
|
26
26
|
|
|
27
|
-
O que estava de fato quebrado, em uma frase.
|
|
27
|
+
O que estava de fato quebrado, em uma frase. Não o sintoma — a causa.
|
|
28
28
|
|
|
29
29
|
_…_
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## Resolução
|
|
32
32
|
|
|
33
|
-
O que mudou, em 2-4 bullets. Paths de arquivos,
|
|
33
|
+
O que mudou, em 2-4 bullets. Paths de arquivos, não snippets.
|
|
34
34
|
|
|
35
35
|
- _mudanca 1_
|
|
36
36
|
- _mudanca 2_
|
|
@@ -39,28 +39,28 @@ O que mudou, em 2-4 bullets. Paths de arquivos, nao snippets.
|
|
|
39
39
|
|
|
40
40
|
Lista completa, incluindo testes. <=5 — se mais, o safety valve deveria ter escalado para `/dw-plan`.
|
|
41
41
|
|
|
42
|
-
| Path |
|
|
42
|
+
| Path | Mudança |
|
|
43
43
|
|------|---------|
|
|
44
|
-
| `src/foo/bar.ts` | _fix
|
|
45
|
-
| `src/foo/bar.test.ts` | _teste de
|
|
44
|
+
| `src/foo/bar.ts` | _fix cirúrgico em X_ |
|
|
45
|
+
| `src/foo/bar.test.ts` | _teste de regressão adicionado_ |
|
|
46
46
|
|
|
47
|
-
##
|
|
47
|
+
## Verificação
|
|
48
48
|
|
|
49
|
-
Como o fix foi provado,
|
|
49
|
+
Como o fix foi provado, além de "os testes passam".
|
|
50
50
|
|
|
51
|
-
- **
|
|
52
|
-
- **
|
|
53
|
-
- **Teste de
|
|
54
|
-
- **
|
|
51
|
+
- **Reprodução antes do fix:** _passo que disparava o bug, capturado_
|
|
52
|
+
- **Reprodução depois do fix:** _mesmo passo, agora passa_
|
|
53
|
+
- **Teste de regressão:** _nome + path_
|
|
54
|
+
- **Relatório de verify:** `fix-report.md`
|
|
55
55
|
|
|
56
56
|
## Relacionado
|
|
57
57
|
|
|
58
|
-
- **Concerns tocados:** _refs de `.dw/rules/concerns.md` se o fix caiu em
|
|
59
|
-
- **Bugfixes adjacentes:** _slugs de fixes anteriores no mesmo
|
|
58
|
+
- **Concerns tocados:** _refs de `.dw/rules/concerns.md` se o fix caiu em área flagada_
|
|
59
|
+
- **Bugfixes adjacentes:** _slugs de fixes anteriores no mesmo módulo, se houver_
|
|
60
60
|
- **Contexto de PRD:** _se o bug apareceu dentro de uma feature em andamento, link para o path do PRD_
|
|
61
61
|
|
|
62
62
|
## Followups
|
|
63
63
|
|
|
64
|
-
Pontas soltas que este fix descobriu mas
|
|
64
|
+
Pontas soltas que este fix descobriu mas não resolveu. Adicione ao `.dw/STATE.md` Open-Loops ao fechar.
|
|
65
65
|
|
|
66
66
|
- _nenhum_
|
|
@@ -6,54 +6,54 @@ last_refreshed: ""
|
|
|
6
6
|
|
|
7
7
|
# Concerns — Mapa de Riscos
|
|
8
8
|
|
|
9
|
-
Mapa de riscos deste codebase.
|
|
9
|
+
Mapa de riscos deste codebase. Não são convenções ("como fazemos as coisas" — isso e `.dw/rules/`), não é arquitetura ("como está construído" — isso e `.dw/intel/arch.md`). Este arquivo responde uma única pergunta: **onde é perigoso mexer?**
|
|
10
10
|
|
|
11
|
-
Carregado on-demand por `/dw-plan`, `/dw-run` e `/dw-bugfix` quando o alvo deles toca uma entrada abaixo. Auto-instalado pelo `/dw-analyze-project` Step 9; nunca bloqueia (
|
|
11
|
+
Carregado on-demand por `/dw-plan`, `/dw-run` e `/dw-bugfix` quando o alvo deles toca uma entrada abaixo. Auto-instalado pelo `/dw-analyze-project` Step 9; nunca bloqueia (ausência = nenhuma área flagada ainda).
|
|
12
12
|
|
|
13
13
|
## Hot Spots
|
|
14
14
|
|
|
15
|
-
Arquivos ou
|
|
15
|
+
Arquivos ou módulos com churn alto, reports frequentes de bug ou histórico repetido de "mexi aqui e quebrou algo". Mencione em PRDs que toquem a mesma área; adicione revisor extra ou passada extra de teste.
|
|
16
16
|
|
|
17
|
-
| Path | Por que
|
|
17
|
+
| Path | Por que é quente | Primeiro flag | Último incidente |
|
|
18
18
|
|------|------------------|---------------|------------------|
|
|
19
19
|
| _ex. `src/auth/session.ts`_ | _3 fixes de token em 60d_ | _YYYY-MM-DD_ | _YYYY-MM-DD_ |
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Integrações Fragis
|
|
22
22
|
|
|
23
|
-
Sistemas externos (APIs, filas, vendors, bancos legados) com
|
|
23
|
+
Sistemas externos (APIs, filas, vendors, bancos legados) com histórico de falhas silenciosas, drift de schema, surpresas de rate-limit ou comportamento não-documentado. Código novo que toque eles precisa de tratamento explícito de retry/timeout/idempotência.
|
|
24
24
|
|
|
25
|
-
|
|
|
25
|
+
| Integração | Modo de falha | Mitigação esperada |
|
|
26
26
|
|------------|---------------|--------------------|
|
|
27
|
-
| _ex. export SAP legado_ | _200 OK silencioso com body vazio quando source
|
|
27
|
+
| _ex. export SAP legado_ | _200 OK silencioso com body vazio quando source está lockado_ | _checar tamanho do body; logar e alertar_ |
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Código Hostil
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
Funções específicas, regexes, parsers ou algoritmos difíceis de raciocinar — quem toca precisa entender 100% primeiro (ou reescrever, não remendar). Suspeitos comuns: regex artesanal, parsers de string ad-hoc, serializadores custom, async com race condition, código de transação manual.
|
|
32
32
|
|
|
33
|
-
| Path /
|
|
33
|
+
| Path / função | Por que é hostil | Owner / contexto |
|
|
34
34
|
|---------------|------------------|------------------|
|
|
35
35
|
| _ex. `src/billing/parseInvoice.ts:parseLine`_ | _regex de 900 chars com 12 alternativas, sem comentarios_ | _Bruno escreveu em 2024; reescrever se quebrar_ |
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Histórico de Bugs Conhecidos
|
|
38
38
|
|
|
39
|
-
Agregado de `.dw/bugfixes/*/SUMMARY.md` pelo `/dw-intel --build`. Lista
|
|
39
|
+
Agregado de `.dw/bugfixes/*/SUMMARY.md` pelo `/dw-intel --build`. Lista módulos com >=2 fixes historicos. Leia junto com Hot Spots ao planejar trabalho relacionado.
|
|
40
40
|
|
|
41
|
-
|
|
|
41
|
+
| Módulo | Contagem de bugs | Slugs recentes |
|
|
42
42
|
|--------|------------------|----------------|
|
|
43
43
|
| _ex. `src/payments/`_ | _4_ | _002-stripe-webhook-retry, 007-refund-rounding_ |
|
|
44
44
|
|
|
45
45
|
## Tech Debt — Reconhecida
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
Pedaços de debt que o time concorda que existem. Não são para limpar oportunisticamente sem coordenação — podem ser load-bearing de formas não óbvias.
|
|
48
48
|
|
|
49
|
-
|
|
|
49
|
+
| Área | Descrição do debt | Por que fica | Trigger de cleanup |
|
|
50
50
|
|------|-------------------|--------------|--------------------|
|
|
51
|
-
| _ex. `src/legacy/userMapper.ts`_ | _Dois codepaths paralelos de field-mapping_ | _Esperando
|
|
51
|
+
| _ex. `src/legacy/userMapper.ts`_ | _Dois codepaths paralelos de field-mapping_ | _Esperando migração v3 da API_ | _Q3 2026 após cutover do vendor_ |
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
55
55
|
**Como manter este arquivo:**
|
|
56
56
|
|
|
57
|
-
- `/dw-analyze-project` reescreve a cada
|
|
58
|
-
- Quando um bugfix descobrir uma nova
|
|
59
|
-
- Promova entradas para `.dw/constitution.md` quando virarem regras
|
|
57
|
+
- `/dw-analyze-project` reescreve a cada execução. Entradas escritas a mão entre `<!-- preserved:start -->` e `<!-- preserved:end -->` são mantidas.
|
|
58
|
+
- Quando um bugfix descobrir uma nova área perigosa, adicione manualmente em Hot Spots e deixe a próxima análise confirmar.
|
|
59
|
+
- Promova entradas para `.dw/constitution.md` quando virarem regras não-negociáveis ("nunca toque X sem ADR").
|
|
@@ -93,6 +93,34 @@ Idealmente 2-4 stories. Se são mais de 5, provavelmente não é MVP.]
|
|
|
93
93
|
|
|
94
94
|
_(schema 1.1 — preenchido por uma sessão de grill do `/dw-brainstorm`; consumido pelo `/dw-plan`, que NÃO re-pergunta decisões resolvidas. Deixe vazio para um one-pager sem grill.)_
|
|
95
95
|
|
|
96
|
+
### Decision Map
|
|
97
|
+
|
|
98
|
+
[Árvore durável do Grill. Registra apenas estrutura e estado de retomada; mantenha resultado da decisão,
|
|
99
|
+
recomendação, alternativa e evidência em **Resolved Decisions** abaixo.]
|
|
100
|
+
|
|
101
|
+
**Frontier:** [IDs de nós com `State: open-ready`, separados por vírgula, ou `none`]
|
|
102
|
+
|
|
103
|
+
| ID | Nó de decisão | State | Depends on: | Frontier? | Notas |
|
|
104
|
+
|----|---------------|-------|-------------|-----------|-------|
|
|
105
|
+
| D1 | [decisão upstream] | resolved | none | no | [nota estrutural; resultado fica em Resolved Decisions] |
|
|
106
|
+
| D2 | [decisão aberta que pode ser perguntada agora] | open-ready | D1 | yes | [por que está pronta] |
|
|
107
|
+
| D3 | [decisão aberta ainda bloqueada] | open-blocked | D2 | no | [o que bloqueia] |
|
|
108
|
+
|
|
109
|
+
`State` é a fonte da verdade. `Frontier?` e a linha `**Frontier:**` são derivados dele por
|
|
110
|
+
legibilidade — se algum dia discordarem do `State`, o `State` vence e os derivados são reescritos.
|
|
111
|
+
|
|
112
|
+
Valores permitidos de `State`:
|
|
113
|
+
- `resolved` — o usuário resolveu o nó; detalhes ficam em **Resolved Decisions**.
|
|
114
|
+
- `open-ready` — aberto e decidível agora; este nó está na **Frontier**.
|
|
115
|
+
- `open-blocked` — aberto, mas aguardando um ou mais nós em `Depends on:`.
|
|
116
|
+
|
|
117
|
+
#### Decision Fog
|
|
118
|
+
|
|
119
|
+
[Áreas conhecidas não resolvidas que ainda não estão nítidas o suficiente para virar nós de decisão. Mantenha
|
|
120
|
+
curto; cada item gradua para **Decision Map** quando virar uma decisão concreta.]
|
|
121
|
+
|
|
122
|
+
- [área desconhecida] — [por que ainda não dá para formular como decisão]
|
|
123
|
+
|
|
96
124
|
### Resolved Decisions
|
|
97
125
|
|
|
98
126
|
| Decisão | Recomendado | Escolhido | Alternativa rejeitada | Evidência |
|
|
@@ -13,44 +13,45 @@ services: []
|
|
|
13
13
|
|
|
14
14
|
# Projeto: [Nome do projeto]
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## Propósito
|
|
17
17
|
|
|
18
|
-
[Um
|
|
18
|
+
[Um parágrafo em linguagem de produto. Quem vai usar, qual problema resolve, como o sucesso se parece em 6-12 semanas. Evite linguagem de implementação.]
|
|
19
19
|
|
|
20
20
|
## Stack Selecionado
|
|
21
21
|
|
|
22
22
|
| Camada | Escolha | Justificativa |
|
|
23
23
|
|--------|---------|---------------|
|
|
24
|
-
| Forma | frontend / backend / fullstack | [por que essa forma —
|
|
24
|
+
| Forma | frontend / backend / fullstack | [por que essa forma — superfície única, API para parceiros, etc.] |
|
|
25
25
|
| Frontend | Next.js / Vite+React / n/a | [por que esse framework — SSR, simplicidade SPA, etc.] |
|
|
26
|
-
| Backend | NestJS / Fastify / FastAPI / ASP.NET Core minimal / Axum / n/a | [por que — expertise do time, ecosystem, alvo de
|
|
27
|
-
| Database | Postgres /
|
|
28
|
-
| Cache | Redis / Memcached / nenhum | [por que ou por que
|
|
29
|
-
| Fila | pg-boss / BullMQ / Celery / RabbitMQ / LocalStack SQS / nenhum | [por que ou
|
|
30
|
-
| Email — dev | Mailpit (default) /
|
|
26
|
+
| Backend | NestJS / Fastify / FastAPI / ASP.NET Core minimal / Axum / n/a | [por que — expertise do time, ecosystem, alvo de latência] |
|
|
27
|
+
| Database | Postgres / MySQL / SQLite / MongoDB / nenhum | [por que esse DB — relacional, transacional, etc. Busca vetorial não tem recipe bundled; nomeie a imagem revisada ou serviço gerenciado se o projeto precisar] |
|
|
28
|
+
| Cache | Redis / Memcached / nenhum | [por que ou por que não] |
|
|
29
|
+
| Fila | pg-boss / BullMQ / Celery / RabbitMQ / LocalStack SQS / nenhum | [por que ou não + sync vs async workers] |
|
|
30
|
+
| Email — dev | Mailpit (default) / smtp4dev / nenhum | [normalmente Mailpit — captura only, nunca envia real] |
|
|
31
31
|
| Email — prod | SMTP / SendGrid / Resend / Postmark / SES / nenhum | [por que esse provider — volume, deliverability, custo] |
|
|
32
|
-
| Object storage | S3 / MinIO (dev) / GCS / nenhum | [por que ou
|
|
32
|
+
| Object storage | S3 / MinIO (dev) / GCS / nenhum | [por que ou não] |
|
|
33
33
|
| Search | Meilisearch / Typesense / Elasticsearch / nenhum | [por que esse engine — features, escala, simplicidade] |
|
|
34
|
-
| Observability | Sentry / OTel + Jaeger / nenhum | [por que essa abordagem —
|
|
35
|
-
| Reverse proxy | Traefik / Caddy / nenhum | [normalmente
|
|
36
|
-
| Auth | Auth.js / OIDC
|
|
37
|
-
| Linter / formatter | Biome / ESLint+Prettier / Ruff+Black / dotnet format / cargo fmt+clippy | [
|
|
38
|
-
| Package manager | pnpm / npm / yarn / poetry / uv / cargo / dotnet | [
|
|
39
|
-
| Workspace + task runner | pnpm workspaces + Turborepo / npm workspaces / Nx / n/a | [
|
|
34
|
+
| Observability | Sentry / OTel + Jaeger / nenhum | [por que essa abordagem — só error tracking, tracing completo, etc.] |
|
|
35
|
+
| Reverse proxy | Traefik / Caddy / nenhum | [normalmente só multi-host dev ou prod] |
|
|
36
|
+
| Auth | Auth.js / OIDC genérico / Clerk / fastapi-users / dotnet Identity / JWT custom / nenhum | [por que — social login, B2B, etc.] |
|
|
37
|
+
| Linter / formatter | Biome / ESLint+Prettier / Ruff+Black / dotnet format / cargo fmt+clippy | [preferência do time] |
|
|
38
|
+
| Package manager | pnpm / npm / yarn / poetry / uv / cargo / dotnet | [preferência do time] |
|
|
39
|
+
| Workspace + task runner | pnpm workspaces + Turborepo / npm workspaces / Nx / n/a | [só para fullstack — caching/build] |
|
|
40
40
|
| Topologia de dev | apps no host / tudo no Compose | [trade-off de hot reload e paridade] |
|
|
41
|
-
| CI | GitHub Actions / nenhum | [normalmente GitHub Actions; pular
|
|
41
|
+
| CI | GitHub Actions / nenhum | [normalmente GitHub Actions; pular só para repos não-públicos] |
|
|
42
42
|
|
|
43
|
-
##
|
|
43
|
+
## Serviços & Infra
|
|
44
44
|
|
|
45
|
-
[
|
|
45
|
+
[Serviços gerados a partir da skill docker-compose-recipes. Preenchido pelo /dw-new-project.]
|
|
46
46
|
|
|
47
|
-
|
|
|
48
|
-
|
|
49
|
-
| postgres | 5432 | — | POSTGRES_USER=app, POSTGRES_PASSWORD
|
|
47
|
+
| Serviço | Porta (host) | UI | Credenciais |
|
|
48
|
+
|---------|--------------|----|-------------|
|
|
49
|
+
| postgres | 127.0.0.1:5432 | — | POSTGRES_USER=app, POSTGRES_PASSWORD obrigatória no `.env` (sem default), POSTGRES_DB=app |
|
|
50
50
|
| redis | 6379 | — | (sem auth em dev) |
|
|
51
51
|
| mailpit | 1025 (smtp), 8025 (UI) | http://localhost:8025 | (sem auth) |
|
|
52
52
|
| ... | ... | ... | ... |
|
|
53
53
|
|
|
54
|
+
|
|
54
55
|
## Diagrama da Arquitetura
|
|
55
56
|
|
|
56
57
|
```
|
|
@@ -70,7 +71,7 @@ services: []
|
|
|
70
71
|
|
|
71
72
|
## Arquivos Gerados
|
|
72
73
|
|
|
73
|
-
[Preenchido pelo /dw-new-project
|
|
74
|
+
[Preenchido pelo /dw-new-project após Fase 3 — lista de arquivos criados com origem.]
|
|
74
75
|
|
|
75
76
|
```
|
|
76
77
|
{{TARGET_DIR}}/
|
|
@@ -95,16 +96,16 @@ services: []
|
|
|
95
96
|
|
|
96
97
|
## Escopo MVP
|
|
97
98
|
|
|
98
|
-
[A primeira feature menor que
|
|
99
|
+
[A primeira feature menor que você vai entregar. Pensada como user stories — vai dirigir a primeira rodada de /dw-plan prd.]
|
|
99
100
|
|
|
100
|
-
- Como [persona], eu posso [
|
|
101
|
-
- Como [persona], eu posso [
|
|
101
|
+
- Como [persona], eu posso [ação] para que [benefício]
|
|
102
|
+
- Como [persona], eu posso [ação] para que [benefício]
|
|
102
103
|
|
|
103
|
-
Se
|
|
104
|
+
Se você ainda não tem a primeira feature em mente, tudo bem — deixa placeholder e roda o /dw-plan prd quando tiver.
|
|
104
105
|
|
|
105
|
-
##
|
|
106
|
+
## Não Estou Fazendo (explícito)
|
|
106
107
|
|
|
107
|
-
[Itens tentadores adiados.
|
|
108
|
+
[Itens tentadores adiados. Força disciplina de escopo.]
|
|
108
109
|
|
|
109
110
|
- **[item 1]** — motivo: [fora do v1 porque...]
|
|
110
111
|
- **[item 2]** — motivo: [pode virar v2 se a hipotese X validar]
|
|
@@ -112,19 +113,19 @@ Se voce ainda nao tem a primeira feature em mente, tudo bem — deixa placeholde
|
|
|
112
113
|
## Premissas-Chave
|
|
113
114
|
|
|
114
115
|
- **[premissa sobre usuarios / mercado / escala]** — teste: [como validar]
|
|
115
|
-
- **[premissa sobre
|
|
116
|
+
- **[premissa sobre latência / volume / SLAs]** — teste: [load profile, métrica alvo]
|
|
116
117
|
|
|
117
118
|
## Perguntas em Aberto
|
|
118
119
|
|
|
119
|
-
[O que este one-pager
|
|
120
|
+
[O que este one-pager não consegue responder sozinho. Resolva antes do /dw-plan prd ou escale para um stakeholder.]
|
|
120
121
|
|
|
121
122
|
- [pergunta 1]
|
|
122
123
|
- [pergunta 2]
|
|
123
124
|
|
|
124
|
-
##
|
|
125
|
+
## Próximo Passo
|
|
125
126
|
|
|
126
127
|
Escolha UM:
|
|
127
128
|
|
|
128
|
-
- **`/dw-plan prd`** — quando
|
|
129
|
-
- **`/dw-analyze-project`** —
|
|
130
|
-
- **`/dw-secure-audit --plan --scan-only`** — para confirmar que nenhuma dep
|
|
129
|
+
- **`/dw-plan prd`** — quando você tem a primeira feature em mente e quer rascunhar o PRD em cima deste stack
|
|
130
|
+
- **`/dw-analyze-project`** — após primeiro commit substancial, para enriquecer `.dw/rules/` com convenções por módulo
|
|
131
|
+
- **`/dw-secure-audit --plan --scan-only`** — para confirmar que nenhuma dep vulnerável veio dos templates `create-*`
|
|
@@ -4,51 +4,51 @@ last_paused: ""
|
|
|
4
4
|
last_resumed: ""
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Estado da
|
|
7
|
+
# Estado da Sessão
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Memória de trabalho entre sessões. Índice leve do que está em andamento, do que foi decidido, do que ficou parado. Atualizado por `/dw-pause` (consolida) e lido por `/dw-resume` (orienta).
|
|
10
10
|
|
|
11
|
-
Diferente do `MEMORY.md` por-PRD (
|
|
11
|
+
Diferente do `MEMORY.md` por-PRD (memória de workflow para uma feature) ou dos ADRs (decisões arquiteturais duráveis), este arquivo vive no nível do projeto e sobrevive entre PRDs, branches e sessões. Edite livremente entre pausas.
|
|
12
12
|
|
|
13
13
|
## Open Loops (Pontas Soltas)
|
|
14
14
|
|
|
15
|
-
O que
|
|
15
|
+
O que está em andamento — trabalho começado mas não terminado. Cada entrada: label curto + path/alvo + próxima ação concreta.
|
|
16
16
|
|
|
17
17
|
- _nenhum_
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Decisões
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Decisões transversais que ainda não viraram ADR (porque não justificam um, ou porque a formalização foi adiada). Formato: `YYYY-MM-DD — decisao — contexto (1 linha)`.
|
|
22
22
|
|
|
23
23
|
- _nenhuma_
|
|
24
24
|
|
|
25
25
|
## Bloqueios
|
|
26
26
|
|
|
27
|
-
O que
|
|
27
|
+
O que está impedindo o avanço. Externo (esperando alguém), interno (lacuna de conhecimento) ou técnico (tooling quebrado). Cada entrada: label curto + o que está bloqueado + dono / condição de desbloqueio.
|
|
28
28
|
|
|
29
29
|
- _nenhum_
|
|
30
30
|
|
|
31
31
|
## Todos
|
|
32
32
|
|
|
33
|
-
Pequenos follow-ups que
|
|
33
|
+
Pequenos follow-ups que não justificam um PRD ou task. Uma linha cada. Limpe conforme forem feitos ou migrados para um PRD.
|
|
34
34
|
|
|
35
35
|
- _nenhum_
|
|
36
36
|
|
|
37
37
|
## Ideias Adiadas
|
|
38
38
|
|
|
39
|
-
Ideias consideradas mas parqueadas. Capture para
|
|
39
|
+
Ideias consideradas mas parqueadas. Capture para não perder; revisite quando o escopo mudar. Cada entrada: ideia + motivo do park + trigger de revisita (se conhecido).
|
|
40
40
|
|
|
41
41
|
- _nenhuma_
|
|
42
42
|
|
|
43
|
-
##
|
|
43
|
+
## Lições
|
|
44
44
|
|
|
45
|
-
Pequenas
|
|
45
|
+
Pequenas lições aprendidas no trabalho recente — padrões que funcionaram, pegadinhas, "da próxima vez eu...". Não são arquiteturais (essas vão para ADRs); são operacionais.
|
|
46
46
|
|
|
47
47
|
- _nenhuma_
|
|
48
48
|
|
|
49
|
-
##
|
|
49
|
+
## Preferências
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Convenções acordadas durante o trabalho que afetam como o agent deve se comportar dali em diante. Exemplos: "sempre rodar `pnpm typecheck` antes do commit", "preferir named exports a default exports em utils".
|
|
52
52
|
|
|
53
53
|
- _nenhuma_
|
|
54
54
|
|
|
@@ -12,7 +12,8 @@ status: pending
|
|
|
12
12
|
|
|
13
13
|
[Breve descrição da tarefa]
|
|
14
14
|
|
|
15
|
-
**Requisitos Funcionais cobertos**: RF
|
|
15
|
+
**Requisitos Funcionais cobertos**: RF-X.Y, RF-X.Z (máximo 2 por task)
|
|
16
|
+
Depends on: none
|
|
16
17
|
|
|
17
18
|
<requirements>
|
|
18
19
|
[Lista de requisitos obrigatórios]
|
|
@@ -19,17 +19,20 @@ feat/prd-[nome-funcionalidade]
|
|
|
19
19
|
|
|
20
20
|
## Tarefas
|
|
21
21
|
|
|
22
|
-
| Task | Descrição | RFs | Status |
|
|
23
|
-
|
|
24
|
-
| 1.0 | [Título] |
|
|
25
|
-
| 2.0 | [Título] |
|
|
26
|
-
| 3.0 | [Título] |
|
|
22
|
+
| Task | Descrição | Depends on | RFs | Status | Commit |
|
|
23
|
+
|------|-----------|------------|-----|--------|--------|
|
|
24
|
+
| 1.0 | [Título] | none | RF-1.1, RF-1.2 | Pendente | — |
|
|
25
|
+
| 2.0 | [Título] | 1.0 | RF-2.1 | Pendente | — |
|
|
26
|
+
| 3.0 | [Título] | 1.0, 2.0 | RF-3.1, RF-3.2 | Pendente | — |
|
|
27
|
+
|
|
28
|
+
`Commit` guarda o SHA curto escrito de volta pelo `/dw-run` quando a task fecha (passo 6). É o que torna o diff da task localizável depois — deixe `—` até a task commitar.
|
|
29
|
+
`Depends on` é o grafo de dependência consumido pelo `/dw-run`; escreva `none` quando uma task não tiver dependência.
|
|
27
30
|
|
|
28
31
|
## Progresso
|
|
29
32
|
|
|
30
|
-
- [ ] 1.0 Título da Tarefa Principal
|
|
31
|
-
- [ ] 2.0 Título da Tarefa Principal
|
|
32
|
-
- [ ] 3.0 Título da Tarefa Principal
|
|
33
|
+
- [ ] 1.0 Título da Tarefa Principal Depends on: none
|
|
34
|
+
- [ ] 2.0 Título da Tarefa Principal Depends on: 1.0
|
|
35
|
+
- [ ] 3.0 Título da Tarefa Principal Depends on: 1.0, 2.0
|
|
33
36
|
|
|
34
37
|
## Workflow
|
|
35
38
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Needs Info: <título>
|
|
2
|
+
|
|
3
|
+
## Perguntas Bloqueantes
|
|
4
|
+
|
|
5
|
+
- [ ] <pergunta 1>
|
|
6
|
+
- [ ] <pergunta 2>
|
|
7
|
+
- [ ] <pergunta 3>
|
|
8
|
+
|
|
9
|
+
## Por Que Isto Bloqueia a Triagem
|
|
10
|
+
|
|
11
|
+
<Explique por que a informação ausente impede confiança na categoria/estado ou na verificação.>
|
|
12
|
+
|
|
13
|
+
## Resposta do Autor
|
|
14
|
+
|
|
15
|
+
<Cole ou resuma a resposta do autor. Quando o autor responder, mova o estado de triagem de `needs-info` para `needs-triage` e rode novamente a etapa de recomendação.>
|
|
16
|
+
|
|
17
|
+
## Evidência Solicitada
|
|
18
|
+
|
|
19
|
+
- Passos de reprodução:
|
|
20
|
+
- Comportamento esperado vs atual:
|
|
21
|
+
- Ambiente ou massa de teste:
|
|
22
|
+
- PR diff ou branch/ref:
|
|
23
|
+
- Screenshots/logs/traces:
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: out-of-scope
|
|
3
|
+
schema_version: "1.0"
|
|
4
|
+
concept: "<concept-slug>"
|
|
5
|
+
created_at: "YYYY-MM-DD"
|
|
6
|
+
updated_at: "YYYY-MM-DD"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Fora de Escopo: <Nome do Conceito>
|
|
10
|
+
|
|
11
|
+
## Decisão
|
|
12
|
+
|
|
13
|
+
Rejeitado em YYYY-MM-DD.
|
|
14
|
+
|
|
15
|
+
## Motivo
|
|
16
|
+
|
|
17
|
+
<Registre o motivo durável. Não escreva apenas "wontfix"; explique a fronteira de produto, técnica, operacional ou de política.>
|
|
18
|
+
|
|
19
|
+
## Aplica-se A
|
|
20
|
+
|
|
21
|
+
- <Formulação de domínio dos pedidos que esta decisão cobre>
|
|
22
|
+
- <Redações alternativas conhecidas que mapeiam para o mesmo conceito>
|
|
23
|
+
|
|
24
|
+
## Evidência
|
|
25
|
+
|
|
26
|
+
- Registro de triagem: `.dw/triage/NNN-<slug>.md`
|
|
27
|
+
- Busca no codebase:
|
|
28
|
+
- Decisões anteriores:
|
|
29
|
+
|
|
30
|
+
## Condições de Reabertura
|
|
31
|
+
|
|
32
|
+
<O que precisaria mudar para este conceito ser reconsiderado?>
|
|
33
|
+
|
|
34
|
+
## Histórico
|
|
35
|
+
|
|
36
|
+
- YYYY-MM-DD — rejected — <actor> — <reason>
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: triage-record
|
|
3
|
+
schema_version: "1.0"
|
|
4
|
+
id: "NNN-<slug>"
|
|
5
|
+
category: "bug | enhancement"
|
|
6
|
+
state: "needs-triage | needs-info | ready-for-work | needs-human | wontfix"
|
|
7
|
+
created_at: "YYYY-MM-DD"
|
|
8
|
+
updated_at: "YYYY-MM-DD"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Triagem: <título>
|
|
12
|
+
|
|
13
|
+
## Fonte
|
|
14
|
+
|
|
15
|
+
| Campo | Valor |
|
|
16
|
+
|-------|-------|
|
|
17
|
+
| Tipo de Fonte | paste / file / github-issue / github-pr / other |
|
|
18
|
+
| Referência da Fonte | <caminho, URL, número de issue, número de PR, ou marcador de sessão colada> |
|
|
19
|
+
| Autor | <nome ou desconhecido> |
|
|
20
|
+
| Reportado em | <data ou desconhecida> |
|
|
21
|
+
| Recuperado por | local / gh / pasted / owner-provided |
|
|
22
|
+
|
|
23
|
+
## Resumo de Intake
|
|
24
|
+
|
|
25
|
+
<Resumo curto do pedido em linguagem de domínio.>
|
|
26
|
+
|
|
27
|
+
## Classificação
|
|
28
|
+
|
|
29
|
+
| Campo | Valor |
|
|
30
|
+
|-------|-------|
|
|
31
|
+
| Categoria | bug / enhancement |
|
|
32
|
+
| Estado | needs-triage / needs-info / ready-for-work / needs-human / wontfix |
|
|
33
|
+
| Conceito de Domínio | <slug do conceito e nome humano> |
|
|
34
|
+
| Motivo do Desfecho | <por que este estado foi escolhido> |
|
|
35
|
+
|
|
36
|
+
## Checks do Codebase
|
|
37
|
+
|
|
38
|
+
### Busca de Redundância
|
|
39
|
+
|
|
40
|
+
| Área Pesquisada | Query / Conceito | Resultado |
|
|
41
|
+
|-----------------|------------------|-----------|
|
|
42
|
+
| `.dw/domain/**` | <concept> | <match / no match / missing> |
|
|
43
|
+
| `.dw/spec/**` | <concept> | <match / no match / missing> |
|
|
44
|
+
| `.dw/bugfixes/**` | <concept> | <match / no match / missing> |
|
|
45
|
+
| `.dw/rules/**` | <concept> | <match / no match / missing> |
|
|
46
|
+
| Código / testes / docs | <concept> | <match / no match> |
|
|
47
|
+
|
|
48
|
+
### Busca de Rejeição Anterior
|
|
49
|
+
|
|
50
|
+
| Registro | Similaridade | Decisão |
|
|
51
|
+
|----------|--------------|---------|
|
|
52
|
+
| `.dw/out-of-scope/<concept>.md` | <por que é similar> | aplica / não aplica / reaberta |
|
|
53
|
+
|
|
54
|
+
## Verificação
|
|
55
|
+
|
|
56
|
+
| Campo | Valor |
|
|
57
|
+
|-------|-------|
|
|
58
|
+
| Status da Verificação | confirmed / failed-to-reproduce / insufficient-detail |
|
|
59
|
+
| Método de Verificação | passos de reprodução / revisão do diff do PR / testes relevantes / check de inventário de produto |
|
|
60
|
+
| Comandos Rodados | <comandos ou n/a> |
|
|
61
|
+
| Arquivos Inspecionados | <caminhos> |
|
|
62
|
+
| Evidência | <o que foi observado> |
|
|
63
|
+
|
|
64
|
+
## Needs Info
|
|
65
|
+
|
|
66
|
+
<!-- Se o estado for needs-info, cole aqui o corpo de triage-needs-info-template.md. Caso contrário, escreva "n/a". -->
|
|
67
|
+
|
|
68
|
+
n/a
|
|
69
|
+
|
|
70
|
+
## Roteamento
|
|
71
|
+
|
|
72
|
+
| Condição | Rota |
|
|
73
|
+
|----------|------|
|
|
74
|
+
| ready-for-work + bug | `/dw-bugfix` |
|
|
75
|
+
| ready-for-work + enhancement | `/dw-plan prd` |
|
|
76
|
+
| pedido malformado | `/dw-brainstorm --mode=grill` |
|
|
77
|
+
| needs-human | ação do dono |
|
|
78
|
+
| wontfix | sem trabalho downstream |
|
|
79
|
+
|
|
80
|
+
Rota selecionada: <rota ou n/a>
|
|
81
|
+
|
|
82
|
+
## Link Out-of-Scope
|
|
83
|
+
|
|
84
|
+
<Se rejeitado, linke `.dw/out-of-scope/<concept>.md`. Se já implementado, linke a implementação e declare que nenhum registro out-of-scope foi escrito.>
|
|
85
|
+
|
|
86
|
+
## Histórico
|
|
87
|
+
|
|
88
|
+
- YYYY-MM-DD — needs-triage -> <state> — <actor> — <reason>
|