@brunosps00/dev-workflow 1.5.0 → 1.6.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/plugin.json +1 -1
- package/README.md +2 -2
- package/lib/constants.js +4 -4
- package/package.json +4 -2
- package/scaffold/en/commands/dw-adr.md +49 -11
- package/scaffold/en/commands/dw-analyze-project.md +5 -0
- package/scaffold/en/commands/dw-brainstorm.md +103 -32
- package/scaffold/en/commands/dw-claude-run.md +8 -5
- package/scaffold/en/commands/dw-plan.md +34 -5
- package/scaffold/en/templates/adr-template.md +8 -4
- package/scaffold/en/templates/idea-onepager.md +44 -2
- package/scaffold/pt-br/commands/dw-adr.md +49 -11
- package/scaffold/pt-br/commands/dw-analyze-project.md +5 -0
- package/scaffold/pt-br/commands/dw-brainstorm.md +105 -32
- package/scaffold/pt-br/commands/dw-claude-run.md +8 -5
- package/scaffold/pt-br/commands/dw-plan.md +34 -5
- package/scaffold/pt-br/templates/adr-template.md +8 -4
- package/scaffold/pt-br/templates/idea-onepager.md +44 -2
- package/scaffold/skill-registry.json +25 -1
- package/scaffold/skills/dw-cli-run/SKILL.md +10 -8
- package/scaffold/skills/dw-domain-modeling/SKILL.md +84 -0
- package/scaffold/skills/dw-domain-modeling/references/adr-policy.md +48 -0
- package/scaffold/skills/dw-domain-modeling/references/glossary-format.md +66 -0
- package/scaffold/skills/dw-grilling/SKILL.md +98 -0
- package/scaffold/skills/dw-grilling/references/decision-tree.md +56 -0
- package/scaffold/skills/dw-grilling/references/interview-loop.md +52 -0
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: idea-onepager
|
|
3
|
-
schema_version: "1.
|
|
4
|
-
status: draft
|
|
3
|
+
schema_version: "1.1"
|
|
4
|
+
status: draft | paused | aligned
|
|
5
5
|
date: YYYY-MM-DD
|
|
6
6
|
classification: improves | consolidates | new
|
|
7
|
+
alignment:
|
|
8
|
+
confirmed_by_user: false # set true ONLY when the user explicitly confirms shared understanding
|
|
9
|
+
confirmed_on: null # ISO date of that confirmation
|
|
7
10
|
---
|
|
8
11
|
|
|
12
|
+
> **Schema 1.1.** The `## Grill Alignment` block below is populated by a `/dw-brainstorm` grill session. Without a
|
|
13
|
+
> Grill, leave that block empty and keep `status: draft`. `status: aligned` is allowed ONLY when every dependency
|
|
14
|
+
> branch is resolved, glossary/code contradictions are closed, no blocking decision remains, and the user has
|
|
15
|
+
> explicitly confirmed shared understanding — otherwise use `draft` or `paused`.
|
|
16
|
+
|
|
9
17
|
# Idea: [Short, imperative title]
|
|
10
18
|
|
|
11
19
|
## Problem Statement
|
|
@@ -81,6 +89,40 @@ Ideally 2-4 stories. If it's more than 5, it's probably not MVP.]
|
|
|
81
89
|
- [Question 1 affecting scope]
|
|
82
90
|
- [Question 2 affecting priority]
|
|
83
91
|
|
|
92
|
+
## Grill Alignment
|
|
93
|
+
|
|
94
|
+
_(schema 1.1 — filled by a `/dw-brainstorm` grill session; consumed by `/dw-plan`, which does NOT re-ask resolved decisions. Leave empty for a non-grilled one-pager.)_
|
|
95
|
+
|
|
96
|
+
### Resolved Decisions
|
|
97
|
+
|
|
98
|
+
| Decision | Recommended | Chosen | Alternative rejected | Evidence |
|
|
99
|
+
|----------|-------------|--------|----------------------|----------|
|
|
100
|
+
| [the decision] | [what Grill recommended] | [what the user chose] | [the rejected option + its trade-off] | [one-pager/repo source] |
|
|
101
|
+
|
|
102
|
+
### Evidence
|
|
103
|
+
|
|
104
|
+
[Facts discovered during Grill from the repo/rules/intel/docs — each with its source (`path:line`, doc, or intel query) — that were used instead of asking the user.]
|
|
105
|
+
|
|
106
|
+
- **[fact]** — source: `[path:line or doc]`
|
|
107
|
+
|
|
108
|
+
### Canonical Vocabulary
|
|
109
|
+
|
|
110
|
+
[Links into `.dw/domain/**` for the terms this idea depends on. Do not restate definitions here — point to the glossary.]
|
|
111
|
+
|
|
112
|
+
- **[Term]** → `.dw/domain/glossary.md#term` (or `.dw/domain/contexts/<slug>.md#term` for a multi-context project)
|
|
113
|
+
|
|
114
|
+
### Remaining Decisions
|
|
115
|
+
|
|
116
|
+
[Non-blocking decisions still open after alignment, with their owner. A blocking decision means the one-pager is NOT `aligned`.]
|
|
117
|
+
|
|
118
|
+
- **[open decision]** — owner: [who] — blocking? [no]
|
|
119
|
+
|
|
120
|
+
### Alignment State
|
|
121
|
+
|
|
122
|
+
- **State:** `draft` | `paused` | `aligned`
|
|
123
|
+
- **Shared understanding confirmed by user:** [yes/no — `aligned` requires an explicit yes]
|
|
124
|
+
- **Why not aligned (if draft/paused):** [the blocking node or unclosed contradiction that stopped alignment]
|
|
125
|
+
|
|
84
126
|
## Next Step
|
|
85
127
|
|
|
86
128
|
Pick ONE:
|
|
@@ -1,36 +1,71 @@
|
|
|
1
1
|
<system_instructions>
|
|
2
|
-
Você é um registrador de decisões arquiteturais. Sua função é criar um **Architecture Decision Record (ADR)** que documente uma decisão técnica importante
|
|
2
|
+
Você é um registrador de decisões arquiteturais. Sua função é criar um **Architecture Decision Record (ADR)** que documente uma decisão técnica importante — repo-wide (`--scope=repo`, válido mesmo antes de qualquer PRD existir) ou vinculada a um PRD ativo (`--scope=prd`).
|
|
3
3
|
|
|
4
4
|
## Quando Usar
|
|
5
5
|
- Use quando uma decisão arquitetural ou de design foi tomada e precisa ser registrada para referência futura (escolha de biblioteca, padrão de comunicação, tradeoff de performance, restrição imposta por compliance, etc.)
|
|
6
6
|
- Use durante `/dw-plan techspec` ou `/dw-run` quando a justificativa da decisão não cabe no techspec nem no task file
|
|
7
|
+
- Use **antes de qualquer PRD existir** para registrar uma decisão repo-wide — passe `--scope=repo` (escreve em `.dw/adrs/`).
|
|
7
8
|
- NÃO use para decisões triviais ou reversíveis sem custo (escolha de nome de variável, ordem de import)
|
|
8
9
|
- NÃO use para registrar bugs ou incidents (use `/dw-bugfix` ou notas operacionais)
|
|
9
10
|
|
|
11
|
+
<critical>Ofereça ou crie um ADR SOMENTE quando os três critérios valem: (1) **difícil de reverter**, (2) **surpreendente sem contexto**, e (3) um **trade-off real** (uma alternativa real foi considerada e descartada). Se qualquer um falta, pule o ADR — não vire ruído no log de ADRs. A criação SEMPRE exige aprovação explícita do usuário, mesmo quando os três valem.</critical>
|
|
12
|
+
|
|
10
13
|
## Posição no Pipeline
|
|
11
|
-
**Antecessor:** qualquer ponto
|
|
14
|
+
**Antecessor:** qualquer ponto (ADRs com scope repo funcionam mesmo antes de `/dw-plan prd`) | **Sucessor:** continua o fluxo anterior (techspec, task, review)
|
|
12
15
|
|
|
13
16
|
O ADR é **aditivo**: ele não substitui nenhuma etapa do pipeline. Qualquer command existente pode invocar `/dw-adr` quando uma decisão não-trivial precisar de registro permanente.
|
|
14
17
|
|
|
18
|
+
## Scope (`--scope=repo|prd`)
|
|
19
|
+
|
|
20
|
+
| Scope | Diretório | Quando |
|
|
21
|
+
|-------|-----------|--------|
|
|
22
|
+
| `repo` | `.dw/adrs/adr-NNN.md` | Decisão repo-wide, e qualquer decisão tomada **antes de um PRD existir**. |
|
|
23
|
+
| `prd` | `{{PRD_PATH}}/adrs/adr-NNN.md` | Decisão vinculada a um PRD ativo específico. |
|
|
24
|
+
|
|
25
|
+
**Resolução default** quando `--scope` não é passado (`--scope=` é sempre autoritativo e sobrepõe isto):
|
|
26
|
+
|
|
27
|
+
1. Determine os **candidatos a PRD ativo** (ver "PRD ativo" abaixo) — diretórios de PRD em `.dw/spec/prd-*/` que NÃO são terminais/históricos.
|
|
28
|
+
2. Exatamente um candidato → default `prd` (esse PRD).
|
|
29
|
+
3. Zero candidatos (nenhum PRD existe, ou todo PRD é terminal) → default `repo`.
|
|
30
|
+
4. Dois ou mais candidatos sem sinal desambiguador → **pergunte** qual PRD (ou `repo`); nunca adivinhe.
|
|
31
|
+
|
|
32
|
+
### PRD ativo (definição operacional)
|
|
33
|
+
|
|
34
|
+
Distinga um PRD **ativo** de um **histórico/terminal** de forma determinística e conservadora, usando evidência já presente no repo — nesta precedência:
|
|
35
|
+
|
|
36
|
+
1. **Alvo explícito** — um PRD nomeado no pedido ou passado como `{{PRD_PATH}}`. Vence direto.
|
|
37
|
+
2. **Sessão ativa** — o PRD referenciado por `.dw/STATE.md` (o spec de trabalho atual), quando presente.
|
|
38
|
+
3. **Branch atual** — um checkout `feat/prd-<slug>` aponta para `prd-<slug>`.
|
|
39
|
+
|
|
40
|
+
Um diretório de PRD é **terminal/histórico** (excluído dos candidatos) quando o frontmatter/status do seu `prd.md` o marca como shipped, merged, delivered, done, archived, superseded ou cancelled. Quando nenhum dos sinais 1–3 desambigua e resta mais de um PRD não-terminal, **pergunte** — não adivinhe. Isto lê apenas o que o repo já registra; nunca inventa estado, campo de status, nem migração.
|
|
41
|
+
|
|
42
|
+
A numeração (`NNN`) é sequencial **dentro do diretório de ADR do scope escolhido** — ADRs de repo e ADRs por PRD têm contadores independentes.
|
|
43
|
+
|
|
15
44
|
## Variáveis de Entrada
|
|
16
45
|
|
|
17
46
|
| Variável | Descrição | Exemplo |
|
|
18
47
|
|----------|-----------|---------|
|
|
19
|
-
| `{{
|
|
48
|
+
| `{{SCOPE}}` | `repo` ou `prd` (opcional; resolvido pelas regras default acima) | `repo` |
|
|
49
|
+
| `{{PRD_PATH}}` | Caminho da pasta do PRD ativo (só para `scope=prd`) | `.dw/spec/prd-minha-feature` |
|
|
20
50
|
| `{{TITLE}}` | Título curto da decisão (imperativo) | "Usar PostgreSQL ao invés de MongoDB" |
|
|
21
51
|
|
|
22
|
-
Se `{{PRD_PATH}}` não for fornecido, pergunte ao usuário qual PRD está ativo (leia `.dw/spec/` e liste). Se `{{TITLE}}` não for fornecido, pergunte.
|
|
52
|
+
Se `{{SCOPE}}` não for fornecido, resolva pela seção Scope (PRD único → `prd`; nenhum PRD → `repo`; múltiplos PRDs → pergunte). Para `scope=prd`, se `{{PRD_PATH}}` não for fornecido, pergunte ao usuário qual PRD está ativo (leia `.dw/spec/` e liste). Se `{{TITLE}}` não for fornecido, pergunte.
|
|
23
53
|
|
|
24
54
|
## Localização dos Arquivos
|
|
25
55
|
|
|
26
|
-
-
|
|
27
|
-
-
|
|
56
|
+
- **`scope=repo`** → diretório `.dw/adrs/`, arquivo novo `.dw/adrs/adr-NNN.md`.
|
|
57
|
+
- **`scope=prd`** → diretório `{{PRD_PATH}}/adrs/`, arquivo novo `{{PRD_PATH}}/adrs/adr-NNN.md`.
|
|
58
|
+
- NNN zero-padded para 3 dígitos, sequencial dentro do diretório do scope escolhido.
|
|
28
59
|
- Template: `.dw/templates/adr-template.md`
|
|
29
60
|
|
|
30
61
|
## Fluxo de Trabalho
|
|
31
62
|
|
|
63
|
+
### 0. Resolver o scope
|
|
64
|
+
- Determine o `scope` a partir de `--scope=` ou da resolução default (PRD ativo único → `prd`; nenhum PRD → `repo`; múltiplos PRDs ambíguos → pergunte). Defina o diretório-alvo de ADR de acordo (`.dw/adrs/` para repo, `{{PRD_PATH}}/adrs/` para prd).
|
|
65
|
+
- Confirme que o gate de três critérios vale (difícil de reverter + surpreendente + trade-off real) e obtenha aprovação explícita do usuário antes de escrever.
|
|
66
|
+
|
|
32
67
|
### 1. Descobrir o próximo número
|
|
33
|
-
- Liste os arquivos
|
|
68
|
+
- Liste os arquivos no diretório-alvo de ADR (crie o diretório se não existir)
|
|
34
69
|
- O próximo número é `max(existentes) + 1`, ou `1` se vazio
|
|
35
70
|
|
|
36
71
|
### 2. Coletar contexto (perguntas mínimas)
|
|
@@ -52,8 +87,9 @@ id: NNN
|
|
|
52
87
|
status: Proposed | Accepted | Deprecated | Superseded
|
|
53
88
|
title: [título do ADR]
|
|
54
89
|
date: YYYY-MM-DD
|
|
55
|
-
|
|
56
|
-
|
|
90
|
+
scope: repo | prd
|
|
91
|
+
prd: [slug do PRD para scope=prd, ou "n/a" para scope=repo]
|
|
92
|
+
schema_version: "1.1"
|
|
57
93
|
---
|
|
58
94
|
|
|
59
95
|
# ADR-NNN: [Título]
|
|
@@ -86,11 +122,13 @@ schema_version: "1.0"
|
|
|
86
122
|
|
|
87
123
|
### 4. Atualizar referências cruzadas
|
|
88
124
|
|
|
89
|
-
Se o ADR for criado
|
|
125
|
+
Se o ADR for criado com **`scope=prd`** (durante a execução de um PRD), adicionar uma linha na seção "Related ADRs" dos artefatos relacionados:
|
|
90
126
|
- `prd.md`, `techspec.md`, ou `[N]_task.md`, conforme o escopo da decisão
|
|
91
127
|
|
|
92
128
|
Se a seção "Related ADRs" não existir no arquivo, adicioná-la ao final.
|
|
93
129
|
|
|
130
|
+
Para ADRs com **`scope=repo`** não há PRD dono — defina `prd: n/a` no frontmatter e linke artefatos relacionados só quando genuinamente aplicáveis (ex. `.dw/constitution.md`, `.dw/rules/`). ADRs de repo são o lar natural de decisões tomadas durante uma sessão de Grill greenfield antes de qualquer PRD existir.
|
|
131
|
+
|
|
94
132
|
### 5. Reportar
|
|
95
133
|
|
|
96
134
|
Apresente ao usuário:
|
|
@@ -110,7 +148,7 @@ Este command é inspirado no padrão de ADRs de `/tmp/compozy/.agents/skills/cy-
|
|
|
110
148
|
|
|
111
149
|
- Paths são `.dw/spec/<prd>/adrs/` ao invés de `.compozy/tasks/<name>/adrs/`
|
|
112
150
|
- 4 perguntas mínimas em vez do fluxo interativo mais longo (alinhado com o estilo conciso de outros commands dw-*)
|
|
113
|
-
- Integração explícita com `schema_version` dos templates
|
|
151
|
+
- Integração explícita com `schema_version` v1.1 dos templates (adiciona `scope`; o link de PRD é condicional para ADRs de escopo repo serem coerentes)
|
|
114
152
|
|
|
115
153
|
Credit: Compozy project.
|
|
116
154
|
|
|
@@ -32,6 +32,7 @@ As rules geradas por este comando são consumidas por:
|
|
|
32
32
|
<critical>NUNCA modifique código fonte, apenas leia e documente</critical>
|
|
33
33
|
<critical>Gere os arquivos de rules em .dw/rules/ na raiz do workspace</critical>
|
|
34
34
|
<critical>Inclua exemplos de código do próprio projeto nas rules geradas</critical>
|
|
35
|
+
<critical>PRESERVE os artefatos de domínio do fluxo de Grill. `.dw/domain/**` (glossary / context-map / arquivos por contexto) é vocabulário canônico curado à mão, dono do `/dw-brainstorm` grill — este comando NUNCA pode regenerar, mesclar ou sobrescrevê-lo. Quando `.dw/domain/**` existe, LEIA e LINKE a partir de `.dw/rules/index.md`; não copie seus termos para os arquivos auto-gerados de `.dw/rules/`. Este comando é dono de `.dw/rules/**`; o fluxo de Grill é dono de `.dw/domain/**`.</critical>
|
|
35
36
|
|
|
36
37
|
## Objetivo
|
|
37
38
|
|
|
@@ -454,8 +455,11 @@ workspace-root/
|
|
|
454
455
|
## Referência Rápida
|
|
455
456
|
- Ver [{módulo}]({módulo}.md) para rules detalhadas por módulo
|
|
456
457
|
- Ver [integrations.md](integrations.md) para comunicação entre projetos (se monorepo)
|
|
458
|
+
- Ver [glossário de domínio](../domain/glossary.md) — ou [context map](../domain/context-map.md) — para vocabulário canônico (só quando `.dw/domain/` existe; dono do Grill, read-only aqui, nunca regenerado)
|
|
457
459
|
```
|
|
458
460
|
|
|
461
|
+
> Quando `.dw/domain/**` existe, adicione o(s) link(s) de Domain Vocabulary acima ao `index.md` gerado e deixe os arquivos de domínio intocados. Quando não existe, omita o link — este comando nunca cria `.dw/domain/**` (só o `/dw-brainstorm` grill cria, após autorização explícita).
|
|
462
|
+
|
|
459
463
|
#### 7.2 `.dw/rules/integrations.md` (apenas para monorepo / multi-projeto)
|
|
460
464
|
|
|
461
465
|
Gerar este arquivo quando 2+ projetos forem detectados.
|
|
@@ -824,6 +828,7 @@ Este passo é aditivo e reversível; nunca edita código de componente, só docu
|
|
|
824
828
|
- [ ] Step 9 (mapa de concerns) apresentou candidatos, aguardou aprovação, escreveu `.dw/rules/concerns.md` (ou anotou que não há sinais)
|
|
825
829
|
- [ ] Passo 10 (autoridade de design) rodou para projetos frontend: autoridade existente respeitada, ou `DESIGN.md` gerado a partir de tokens reais, ou bootstrap via curated-defaults recomendado
|
|
826
830
|
- [ ] Blocos com marker preserved em concerns.md mantidos verbatim no refresh
|
|
831
|
+
- [ ] `.dw/domain/**` (glossary / context-map) preservado verbatim e linkado do index.md quando presente — nunca regenerado ou sobrescrito
|
|
827
832
|
|
|
828
833
|
## Exemplo de Uso
|
|
829
834
|
|
|
@@ -20,8 +20,8 @@ Modos internos (o dispatcher seleciona 1+):
|
|
|
20
20
|
|
|
21
21
|
| Modo | Dispara automaticamente quando |
|
|
22
22
|
|------|--------------------------------|
|
|
23
|
-
| **option-matrix** (
|
|
24
|
-
| **grill** |
|
|
23
|
+
| **option-matrix** (surface padrão) | 3-7 opções (conservadora / equilibrada / ousada) com tags `[IMPROVES] / [CONSOLIDATES] / [NEW]`. Roda por padrão **exceto quando Grill é a fase ativa** — `grill` e `option-matrix` são mutuamente exclusivos num turn (um override explícito ou um Grill autorizado também a pula). |
|
|
24
|
+
| **grill** (nativo, com estado — exige autorização explícita) | O plan/PRD ou o vocabulário está instável. O Signal Reading pode **recomendar** Grill, mas é uma sessão de alinhamento com estado que escreve em `.dw/domain/**` e no one-pager; começa só com **intenção explícita** — `--mode=grill`, uma frase direta como "me questione" / "grill me", ou um **sim** à oferta única. Mutuamente exclusivo com `option-matrix`. |
|
|
25
25
|
| **prototype** | Usuário pergunta "esse modelo de estado faz sentido?" / "como isso deveria parecer?" sem resposta clara; ou o próximo passo razoável é RODAR código, não escrever palavras. |
|
|
26
26
|
| **council** | Duas ou mais abordagens competem sem vencedor óbvio; ou o consenso se forma rápido demais (sinal de false-consensus). |
|
|
27
27
|
| **research** | A pergunta depende de state-of-the-art externo ("qual é a best practice atual para X", comparações multi-fonte, landscape regulatório ou de framework). |
|
|
@@ -68,6 +68,8 @@ Quando disponíveis no projeto em `./.agents/skills/`, use para enriquecer a ide
|
|
|
68
68
|
- `dw-ui-discipline`: use quando o brainstorm envolver frontend ou direção de UI — o hard-gate (scene sentence, surface job) é forcing function generativa durante ideação, não só check de review. Também usado pelo branch UI do modo **prototype**.
|
|
69
69
|
- `vercel-react-best-practices`: use quando explorar arquitetura React/Next.js ou trade-offs de performance.
|
|
70
70
|
- `security-review`: use quando o brainstorm tocar auth, manipulação de dados ou features sensíveis à segurança.
|
|
71
|
+
- `dw-grilling`: o motor de entrevista do modo **grill** — árvore de decisão ordenada por dependência, exatamente uma decisão por turn, cada uma com resposta recomendada. Interna, lida por path; nunca exportada.
|
|
72
|
+
- `dw-domain-modeling`: o motor de vocabulário do modo **grill** — glossário canônico em `.dw/domain/**`, desafio de termos vagos/sobrecarregados, cross-check com o código, e a política de ADR raro. Interna, lida por path; nunca exportada.
|
|
71
73
|
|
|
72
74
|
## Referência do Template
|
|
73
75
|
|
|
@@ -92,9 +94,9 @@ Antes de produzir qualquer output, **leia a situação**:
|
|
|
92
94
|
1. Inspecione `.dw/spec/prd-*/`, `.dw/rules/`, `.dw/constitution.md`, `.dw/intel/` se existirem. Anote vocabulário atual e PRDs recentes.
|
|
93
95
|
2. Inspecione git recente (`git log --oneline -20`) pra detectar trabalho em andamento.
|
|
94
96
|
3. Releia o pedido do usuário contra a tabela de Auto-Dispatch no topo desse arquivo. Casa sinais com modos.
|
|
95
|
-
4. Decida o dispatch: **option-matrix**
|
|
96
|
-
5. Diga ao usuário em uma linha curta qual o dispatch decidido: ex. "Dispatch: option-matrix + onepager (PRD está um passo à frente)" ou "
|
|
97
|
-
6. Depois, execute os modos nessa ordem (quando encadeados): grill → research → option-matrix → council → refactor-audit → prototype → onepager. Pule modos fora do dispatch.
|
|
97
|
+
4. Decida o dispatch: **option-matrix** roda por padrão salvo override que pule OU Grill ser a fase ativa (os dois são mutuamente exclusivos). **grill** nunca é auto-iniciado — se os sinais aparecem, **recomende**-o e peça uma autorização explícita antes de iniciar a sessão com estado ou escrever qualquer arquivo (um brainstorm normal não pode escrever artefatos de Grill só porque o vocabulário parece instável). Os outros modos (prototype, council, research, refactor-audit, onepager) disparam **aditivamente** quando seus sinais estão presentes.
|
|
98
|
+
5. Diga ao usuário em uma linha curta qual o dispatch decidido: ex. "Dispatch: option-matrix + onepager (PRD está um passo à frente)" ou, para grill, uma recomendação que precisa de consentimento: "Recomendando: grill (vocabulário instável) — autoriza iniciar a sessão com estado?". Não esconda — surface antes de rodar.
|
|
99
|
+
6. Depois, execute os modos nessa ordem (quando encadeados): grill (só se autorizado) → research → option-matrix → council → refactor-audit → prototype → onepager. Como grill e option-matrix são mutuamente exclusivos, um Grill autorizado roda até o alinhamento primeiro e só **oferece** option-matrix como fase posterior separada e explicitamente anunciada. Pule modos fora do dispatch.
|
|
98
100
|
|
|
99
101
|
### Fluxo padrão (modo option-matrix)
|
|
100
102
|
|
|
@@ -181,7 +183,7 @@ Ao final, sempre deixe o usuario em uma destas situacoes:
|
|
|
181
183
|
- com o one-pager em `.dw/spec/ideas/<slug>.md` (se modo **onepager** disparou)
|
|
182
184
|
- com o relatório de research em `~/Documents/<Tópico>_Research_<data>/` (se modo **research** disparou)
|
|
183
185
|
- com o plano de refactor em `<target>/refactor-plan.md` (se modo **refactor-audit** disparou)
|
|
184
|
-
- com entradas de glossário
|
|
186
|
+
- com entradas de glossário canônico em `.dw/domain/**` e um one-pager de ideia alinhado (se **grill** rodou com autorização)
|
|
185
187
|
- com um protótipo throwaway rodável + template de verdict (se modo **prototype** disparou)
|
|
186
188
|
|
|
187
189
|
## Modo: research (research multi-fonte)
|
|
@@ -331,57 +333,116 @@ Salvo em `<target>/refactor-plan.md`:
|
|
|
331
333
|
- Propor refactors sem teste ou não-testáveis → alto risco, não shippa.
|
|
332
334
|
- Ignorar decisões arquiteturais documentadas em `.dw/rules/` → flagar design intencional como smell.
|
|
333
335
|
|
|
334
|
-
## Modo: grill (
|
|
336
|
+
## Modo: grill (alinhamento nativo com estado)
|
|
335
337
|
|
|
336
|
-
|
|
338
|
+
Grill é uma **sessão de alinhamento com estado** que entrevista o plan/PRD até *shared understanding* e persiste
|
|
339
|
+
vocabulário canônico em `.dw/domain/**`. **Não** é um turn normal de brainstorm: mantém uma árvore de decisão
|
|
340
|
+
entre turns e escreve arquivos. Por ser stateful e mutante, começa **só com intenção explícita**.
|
|
337
341
|
|
|
338
|
-
<critical>
|
|
342
|
+
<critical>Intenção explícita de Grill = `--mode=grill`, uma frase direta como "me questione" / "grill me" / "grilla esse plano", OU um **sim** à oferta única abaixo. O Signal Reading automático pode **recomendar** Grill, mas DEVE pedir uma autorização explícita antes de iniciar a sessão ou escrever QUALQUER arquivo. Um brainstorm normal nunca escreve artefatos de Grill só porque o vocabulário parece instável.</critical>
|
|
339
343
|
|
|
340
|
-
|
|
344
|
+
<critical>`grill` e `option-matrix` são **mutuamente exclusivos** num turn. Grill converge decisões; NÃO gera matriz de opções nem um veredito final de option-matrix — mas **cada pergunta da entrevista ainda carrega uma resposta recomendada** (com rationale e uma alternativa/trade-off). "Sem recomendação" se refere só ao veredito de option-matrix, nunca à recomendação por pergunta. Após o alinhamento, Grill pode **oferecer** option-matrix como fase posterior separada e explicitamente anunciada.</critical>
|
|
341
345
|
|
|
342
|
-
|
|
346
|
+
<critical>Pergunte exatamente UMA decisão não-resolvida por interação, e espere. Nunca despeje uma lista de perguntas.</critical>
|
|
347
|
+
|
|
348
|
+
Grill é movido por duas skills internas (lidas por path em `./.agents/skills/`, nunca exportadas):
|
|
349
|
+
- **`dw-grilling`** — o motor de entrevista em árvore de decisão (ordenação por dependência, uma decisão por
|
|
350
|
+
turn, uma resposta recomendada para cada pergunta, fatos descobertos em vez de perguntados, o gate de
|
|
351
|
+
shared-understanding).
|
|
352
|
+
- **`dw-domain-modeling`** — o motor de vocabulário (termos canônicos, desafio de termos vagos/sobrecarregados,
|
|
353
|
+
cross-check com o código, e persistência lazy e segura em `.dw/domain/**`).
|
|
354
|
+
|
|
355
|
+
### Quando Grill é o movimento certo
|
|
356
|
+
|
|
357
|
+
- Antes de `/dw-plan prd` quando o domínio ou o plano parece instável ou o time usa termos competindo.
|
|
343
358
|
- Depois de `/dw-plan prd` quando reviewers flagam linguagem ambígua no PRD.
|
|
344
|
-
-
|
|
345
|
-
- Quando
|
|
359
|
+
- Quando "módulo", "serviço", "componente" (ou dois sinônimos) são usados de forma intercambiável e o termo canônico precisa ser fixado.
|
|
360
|
+
- Quando um nome proposto conflita com o glossário existente, ou um plano esconde decisões não-resolvidas.
|
|
361
|
+
|
|
362
|
+
Quando esses sinais aparecem no auto-dispatch, **recomende** Grill em uma linha e ofereça iniciá-lo — ex.
|
|
363
|
+
*"O plano deixa 4 decisões de produto abertas e `Account` está sobrecarregado. Iniciar uma sessão de Grill
|
|
364
|
+
(stateful, escreve em `.dw/domain/**` e no one-pager)? [sim/não]"*. Comece só com um sim explícito.
|
|
365
|
+
|
|
366
|
+
### A sessão (após autorização)
|
|
346
367
|
|
|
347
|
-
|
|
368
|
+
1. **Construa a árvore de decisão primeiro.** Antes da primeira pergunta, inspecione os fatos do projeto —
|
|
369
|
+
PRDs/TechSpecs atuais, `.dw/rules/`, `.dw/intel/` (via `/dw-intel`), `.dw/constitution.md`, `.dw/domain/**` e
|
|
370
|
+
git recente — e monte uma árvore de decisão **ordenada por dependências** (nunca pergunte uma decisão
|
|
371
|
+
downstream antes do seu bloqueador).
|
|
372
|
+
2. **Pergunte exatamente uma decisão não-resolvida por interação e espere.** Cada pergunta inclui: evidência
|
|
373
|
+
quando disponível (com fonte), a resposta recomendada, uma rationale curta, e uma alternativa/trade-off
|
|
374
|
+
significativa. Siga `dw-grilling` (`references/interview-loop.md`, `references/decision-tree.md`).
|
|
375
|
+
3. **Fatos são descobertos, decisões são perguntadas.** Busque fatos no repo/rules/intel/docs; leve só decisões
|
|
376
|
+
genuínas ao usuário, e deixe a escolha com o usuário.
|
|
377
|
+
4. **Sharpen o vocabulário com `dw-domain-modeling`.** Desafie termos vagos/sobrecarregados, stress-test com
|
|
378
|
+
cenários concretos de edge case, e cross-check cada termo contra o código (surface contradições `file:line`).
|
|
379
|
+
5. **Uma resposta resolvida autoriza a atualização correspondente.** Resolvida a decisão, você pode persistir a
|
|
380
|
+
mudança de glossário/alinhamento correspondente (ver allowlist). Criação de ADR ainda exige **aprovação
|
|
381
|
+
explícita separada** — nunca crie um automaticamente.
|
|
348
382
|
|
|
349
|
-
|
|
383
|
+
### Escritas com estado permitidas (só após autorização + a decisão relevante resolvida)
|
|
350
384
|
|
|
351
|
-
|
|
385
|
+
- `.dw/domain/**` — o glossário canônico / context-map (via `dw-domain-modeling`).
|
|
386
|
+
- O one-pager ativo `.dw/spec/ideas/<slug>.md` (estendido para schema `1.1`, abaixo).
|
|
387
|
+
- Um PRD/TechSpec **explicitamente ativo** — só **depois de mostrar a mudança proposta** e obter concordância.
|
|
388
|
+
- Paths de ADR roteados via `/dw-adr --scope=repo|prd` (após aprovação separada de ADR).
|
|
352
389
|
|
|
353
|
-
|
|
390
|
+
**Nunca edite código-fonte durante o Grill.** Se a autorização falta, continue entrevistando e reporte o que
|
|
391
|
+
você *persistiria*.
|
|
354
392
|
|
|
355
|
-
|
|
393
|
+
### Artefatos de domínio nativos (não `.dw/rules/`, não `CONTEXT.md` na raiz)
|
|
356
394
|
|
|
357
|
-
|
|
395
|
+
Vocabulário canônico vive em `.dw/domain/**`, criado **lazy** só depois que um termo é resolvido e existe
|
|
396
|
+
autorização de escrita:
|
|
358
397
|
|
|
359
|
-
|
|
398
|
+
- Contexto único → `.dw/domain/glossary.md`.
|
|
399
|
+
- Múltiplos contextos → `.dw/domain/context-map.md` + `.dw/domain/contexts/<slug>.md`.
|
|
400
|
+
|
|
401
|
+
Uma definição de glossário é uma ou duas frases que dizem o que o termo de domínio **é**, lista sinônimos
|
|
402
|
+
desencorajados (`_Avoid:_`), e exclui detalhes de implementação, requisitos, notas de rascunho e conceitos gerais
|
|
403
|
+
de programação. **Não** guarde vocabulário curado nos arquivos auto-gerados de `.dw/rules/`. `/dw-analyze-project`
|
|
404
|
+
lê e linka `.dw/domain/**` e deve preservá-lo, nunca regenerá-lo.
|
|
405
|
+
|
|
406
|
+
### Handoff alinhado — o one-pager de ideia (schema `1.1`)
|
|
407
|
+
|
|
408
|
+
Grill estende `.dw/spec/ideas/<slug>.md` para o schema `1.1`, adicionando: **Resolved Decisions** (cada uma com a
|
|
409
|
+
resposta recomendada, a escolha do usuário e a alternativa rejeitada), **Evidence** (fatos descobertos com fontes),
|
|
410
|
+
**Canonical Vocabulary** (links para `.dw/domain/**`), **Remaining Decisions** e **Alignment State**.
|
|
411
|
+
|
|
412
|
+
Defina `status: aligned` **só quando todas** valem: cada branch de dependência resolvida, contradições
|
|
413
|
+
glossário/código fechadas, nenhuma decisão bloqueante aberta, E o usuário **confirma explicitamente** o shared
|
|
414
|
+
understanding. Senão persista um estado `draft`/`paused` (com a árvore de decisão e os nós abertos) e **pare**.
|
|
415
|
+
`/dw-plan` consome um handoff alinhado sem re-perguntar as decisões de produto já resolvidas.
|
|
360
416
|
|
|
361
417
|
### Disciplina de criação de ADR
|
|
362
418
|
|
|
363
|
-
Só
|
|
419
|
+
Só ofereça um ADR (via `/dw-adr --scope=repo|prd`) quando **todos os três** valem — e a criação sempre exige
|
|
420
|
+
aprovação explícita separada do usuário (`dw-domain-modeling/references/adr-policy.md`):
|
|
364
421
|
|
|
365
422
|
| Critério | Teste |
|
|
366
423
|
|----------|-------|
|
|
367
|
-
| **Difícil de reverter** | Se mudarmos em 6 meses, custa
|
|
424
|
+
| **Difícil de reverter** | Se mudarmos em 6 meses, custa significativamente mais que um dia? |
|
|
368
425
|
| **Surpreendente sem contexto** | Um novo contribuinte chegaria razoavelmente a uma decisão diferente? |
|
|
369
426
|
| **Trade-off real** | Havia uma alternativa real considerada e descartada? |
|
|
370
427
|
|
|
371
|
-
|
|
428
|
+
Roteamento de scope: `repo` → `.dw/adrs/adr-NNN.md` (funciona antes de qualquer PRD); `prd` →
|
|
429
|
+
`.dw/spec/<prd>/adrs/adr-NNN.md`. Se algum critério falta, pule o ADR — não vire ruído no log de ADRs.
|
|
372
430
|
|
|
373
431
|
### Output
|
|
374
432
|
|
|
375
433
|
O modo grill produz:
|
|
376
|
-
-
|
|
377
|
-
- **
|
|
378
|
-
-
|
|
379
|
-
- **
|
|
434
|
+
- **Vocabulário canônico em `.dw/domain/**`** (glossary, ou context-map + arquivos por contexto) para termos resolvidos.
|
|
435
|
+
- **Um one-pager estendido** em `.dw/spec/ideas/<slug>.md` (schema `1.1`) — `aligned` só após confirmação explícita, senão `draft`/`paused`.
|
|
436
|
+
- **PRD / TechSpec atualizado** só se explicitamente ativo e a mudança foi mostrada antes.
|
|
437
|
+
- **ADR roteado opcional** via `/dw-adr --scope=…` se os três critérios valem e o usuário aprova.
|
|
438
|
+
- **NÃO** produz option matrix nem um veredito final de option-matrix — mas cada pergunta da entrevista ainda carrega uma resposta recomendada (option-matrix é fase posterior separada se oferecida e aceita).
|
|
380
439
|
|
|
381
440
|
### Quando a disciplina dobra
|
|
382
441
|
|
|
383
|
-
- **Projeto greenfield sem `.dw/
|
|
384
|
-
|
|
442
|
+
- **Projeto greenfield sem `.dw/domain/`**: grille mesmo assim (uma vez autorizado); a sessão produz as PRIMEIRAS
|
|
443
|
+
entradas em `.dw/domain/glossary.md`. Isso é o valor. ADRs antes de qualquer PRD roteiam para `--scope=repo`.
|
|
444
|
+
- **Discordância cosmética de terminologia** ("usamos `userId` ou `user_id`?"): pule grill; use uma nota de
|
|
445
|
+
convenção de código na seção Naming de `.dw/rules/index.md` — estilo de nome não é termo de domínio.
|
|
385
446
|
|
|
386
447
|
## Modo: prototype (protótipo descartável)
|
|
387
448
|
|
|
@@ -445,8 +506,20 @@ O padrão de codebase-grounded idea refinement é inspirado em [`addyosmani/agen
|
|
|
445
506
|
- Output em `.dw/spec/ideas/<slug>.md` (irmão de `prd-<slug>/`) em vez de `docs/ideas/` — mantém a convenção de paths do dev-workflow.
|
|
446
507
|
- Integração com o pipeline existente: `/dw-plan prd` aceita o one-pager como input, reduzindo perguntas de clarificação.
|
|
447
508
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
509
|
+
O modo **grill** é uma reimplementação nativa da disciplina de grilling do Matt Pocock (MIT), baseada em três
|
|
510
|
+
skills upstream: [`skills/engineering/grill-with-docs`](https://github.com/mattpocock/skills/blob/main/skills/engineering/grill-with-docs/SKILL.md)
|
|
511
|
+
(entrevista que produz docs conforme avança), [`skills/productivity/grilling`](https://github.com/mattpocock/skills/blob/main/skills/productivity/grilling/SKILL.md)
|
|
512
|
+
(entrevista uma-decisão-por-vez com resposta recomendada, fatos buscados e não perguntados, gate de
|
|
513
|
+
shared-understanding), e [`skills/engineering/domain-modeling`](https://github.com/mattpocock/skills/blob/main/skills/engineering/domain-modeling/SKILL.md)
|
|
514
|
+
(glossário canônico, desafio de termos vagos, ADRs raros). Adaptações dev-workflow: comportamento reimplementado
|
|
515
|
+
na voz deste repo (sem copiar prosa upstream) e extraído em duas skills **internas e não-exportadas** —
|
|
516
|
+
`dw-grilling` e `dw-domain-modeling` — invocadas por este modo; o glossário vive em **`.dw/domain/**`** (não no
|
|
517
|
+
`CONTEXT.md` da raiz do upstream nem no nosso `.dw/rules/` auto-gerado); Grill é uma **sessão com estado que exige
|
|
518
|
+
uma autorização explícita** antes de escrever; o alinhamento produz um one-pager de ideia no schema `1.1`
|
|
519
|
+
consumido pelo `/dw-plan`; e a criação de ADR é gated no teste 3-critérios e roteada via `/dw-adr --scope=repo|prd`.
|
|
520
|
+
O modo **prototype** é adaptado de [`mattpocock/skills/prototype`](https://github.com/mattpocock/skills) (MIT) como
|
|
521
|
+
modo interno auto-dispatchado.
|
|
522
|
+
|
|
523
|
+
Crédito: Addy Osmani (idea-refine) e Matt Pocock (grill-with-docs, grilling, domain-modeling, prototype).
|
|
451
524
|
|
|
452
525
|
</system_instructions>
|
|
@@ -11,18 +11,19 @@ para implementar um prompt/spec ja preparado, captura a execucao inteira num log
|
|
|
11
11
|
|
|
12
12
|
| Slot | Valor Claude |
|
|
13
13
|
|---|---|
|
|
14
|
-
| `DISPATCH` | `UUID=$(cat /proc/sys/kernel/random/uuid); cd <WORKTREE> && claude -p --session-id "$UUID" --model <MODEL> --output-format stream-json --include-partial-messages --verbose --dangerously-skip-permissions "$(cat <PROMPT>)" </dev/null > <AUDIT>/<slug>.log 2>&1` |
|
|
14
|
+
| `DISPATCH` | `UUID=$(cat /proc/sys/kernel/random/uuid); cd <WORKTREE> && claude -p --session-id "$UUID" --model <MODEL> --effort <EFFORT> --output-format stream-json --include-partial-messages --verbose --dangerously-skip-permissions "$(cat <PROMPT>)" </dev/null > <AUDIT>/<slug>.log 2>&1` |
|
|
15
15
|
| `STREAM` | `--output-format stream-json --include-partial-messages --verbose` (`--verbose` e **obrigatorio** com `stream-json` no modo `-p`) |
|
|
16
16
|
| `AUTO` | `--dangerously-skip-permissions` (auto-aprovacao headless; justificavel porque a worktree e isolada). Somente leitura/analise: tire-o e use `--permission-mode plan` (ou restrinja `--allowedTools`). |
|
|
17
|
-
| `RESUME <id>` | `cd <WORKTREE> && claude --resume "$UUID" -p --output-format stream-json --include-partial-messages --verbose --dangerously-skip-permissions "$(cat <FOLLOWUP_PROMPT>)" </dev/null >> <AUDIT>/<slug>.log 2>&1` |
|
|
17
|
+
| `RESUME <id>` | `cd <WORKTREE> && claude --resume "$UUID" -p --effort <EFFORT> --output-format stream-json --include-partial-messages --verbose --dangerously-skip-permissions "$(cat <FOLLOWUP_PROMPT>)" </dev/null >> <AUDIT>/<slug>.log 2>&1` |
|
|
18
18
|
| `RESUME_LAST` | `claude -c -p …` (continua a conversa mais recente nesta cwd) |
|
|
19
19
|
| `SESSION_ID` | **FIXADO por voce** — voce passa `--session-id "$UUID"` na 1a run, entao o id e conhecido de antemao. Gere-o (`cat /proc/sys/kernel/random/uuid` ou `uuidgen`) e grave em `<AUDIT>/<slug>.session` ANTES/no dispatch. Sem scraping do stream — o Claude e o caso facil. |
|
|
20
20
|
| `DONE_SIGNAL` | a mensagem final `{"type":"result"}` no stream (traz `subtype`, `usage`, `total_cost_usd`, `num_turns`) |
|
|
21
21
|
| `USAGE` | o `usage` da mensagem `result` → `input_tokens` / `cache_read_input_tokens` / `cache_creation_input_tokens` / `output_tokens`, + `total_cost_usd`. Extrair: `grep -oE '"usage":\{[^}]*\}' <AUDIT>/<slug>.log \| tail -1` |
|
|
22
22
|
|
|
23
|
-
**Modelo + effort:** `--model` escolhe o tier (`opus` · `sonnet` · `haiku`, ou um id completo).
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
**Modelo + effort:** `--model` escolhe o tier (`opus` · `sonnet` · `haiku`, ou um id completo). `--effort` escolhe
|
|
24
|
+
o budget de raciocinio: `low` · `medium` · `high` · `xhigh` · `max` (suportado pelo Claude CLI ≥ 2.1.206). Escale
|
|
25
|
+
conforme a `dw-cli-run`: suba `--effort` primeiro (low→medium→high→xhigh→max), depois suba `--model` um tier e
|
|
26
|
+
resete o effort. Comece um notch abaixo do teto.
|
|
26
27
|
|
|
27
28
|
## Resume de sessao (o coracao)
|
|
28
29
|
Como voce passa `--session-id "$UUID"`, o id e **fixo e conhecido** no dispatch — grave-o em
|
|
@@ -38,6 +39,8 @@ o Claude recarrega a mesma conversa (raciocinio + arquivos ja tocados). Fallback
|
|
|
38
39
|
| `<PROMPT>` | caminho do prompt/spec preparado | `.dw/spec/prd-billing-integrador/codex-prompt.md` |
|
|
39
40
|
| `<slug>` | chave da tarefa p/ arquivos de audit/sessao | `prd-billing-integrador` |
|
|
40
41
|
| `<AUDIT>` | dir de auditoria duravel FORA da worktree | `~/code/vizzita/.dw/cli-run` |
|
|
42
|
+
| `<MODEL>` | tier do Claude ou id completo do modelo | `opus` / `sonnet` / `haiku` |
|
|
43
|
+
| `<EFFORT>` | budget de raciocinio (Claude CLI ≥ 2.1.206) | `low` / `medium` / `high` / `xhigh` / `max` |
|
|
41
44
|
|
|
42
45
|
Retorne pelo **Structured Return** da `dw-cli-run` (Status/Score/Scope/Evidence/Artifacts/Decisions/Risks/
|
|
43
46
|
Telemetria/Next Step), incluindo o `session-id` fixo (UUID), o caminho do sidecar, e o comando `RESUME` exato pra
|
|
@@ -55,7 +55,36 @@ Claude Code e OpenCode podem usar agentes nativos. Codex e Copilot usam `.agents
|
|
|
55
55
|
|
|
56
56
|
<critical>Quando uma ferramenta estruturada de entrevista/input do usuario estiver disponivel, `/dw-plan` DEVE usa-la para as perguntas de clarificacao de PRD e TechSpec. Nao rebaixe para chat comum por conveniencia. Se nenhuma ferramenta desse tipo existir no runtime, faca as mesmas perguntas no chat e registre explicitamente: `Ferramenta de entrevista estruturada indisponivel; usando fallback em chat.`</critical>
|
|
57
57
|
|
|
58
|
-
A ferramenta e obrigatoria no planejamento porque preserva escolhas explicitas do usuario e impede o agent de responder as proprias perguntas.
|
|
58
|
+
A ferramenta e obrigatoria no planejamento porque preserva escolhas explicitas do usuario e impede o agent de responder as proprias perguntas.
|
|
59
|
+
|
|
60
|
+
## Entrevista dirigida por cobertura (sem cotas fixas de perguntas)
|
|
61
|
+
|
|
62
|
+
<critical>`/dw-plan` NÃO faz um número fixo de perguntas. Cada estágio monta uma **coverage matrix** sobre suas dimensões obrigatórias, descobre fatos do repo/rules/intel/artefatos de domínio, **credita evidência já resolvida num handoff de Grill alinhado**, e então pergunta — uma decisão por vez — SOMENTE as dimensões que continuam descobertas. Nunca re-pergunte uma decisão de produto que o usuário já resolveu no Grill.</critical>
|
|
63
|
+
|
|
64
|
+
### Handoff alinhado (do grill do `/dw-brainstorm`)
|
|
65
|
+
|
|
66
|
+
Antes do Stage 1, verifique se há um one-pager de ideia em `.dw/spec/ideas/<slug>.md` e o vocabulário canônico em `.dw/domain/**`.
|
|
67
|
+
|
|
68
|
+
<critical>Valide o handoff e FALHE FECHADO. Credite um handoff alinhado — i.e. suprima as perguntas de produto que suas decisões cobrem — SOMENTE quando TODAS valem:
|
|
69
|
+
- `schema_version: "1.1"`;
|
|
70
|
+
- `status: aligned`;
|
|
71
|
+
- `alignment.confirmed_by_user: true`;
|
|
72
|
+
- toda branch de dependência resolvida (nenhum nó de decisão aberto);
|
|
73
|
+
- contradições glossário/código fechadas;
|
|
74
|
+
- nenhuma entrada **bloqueante** resta em Remaining Decisions.
|
|
75
|
+
Se QUALQUER check falha — ou o arquivo está malformado, internamente inconsistente, `draft` ou `paused` — o one-pager é **input, não handoff confiável**: leia para contexto, mas trate todas as suas decisões como **descobertas** e pergunte normalmente. Nunca suprima uma pergunta de produto só pela força do `status: aligned`; `alignment.confirmed_by_user: true` e uma árvore resolvida, não-bloqueante e sem contradições também são exigidos.</critical>
|
|
76
|
+
|
|
77
|
+
Quando (e só quando) o handoff é totalmente válido:
|
|
78
|
+
- Carregue suas **Resolved Decisions**, **Evidence** e links de **Canonical Vocabulary**.
|
|
79
|
+
- Marque toda dimensão de PRD que essas decisões cobrem como **já coberta** (cite o one-pager como evidência) — NÃO re-pergunte.
|
|
80
|
+
- Só dimensões descobertas viram perguntas, uma por vez.
|
|
81
|
+
|
|
82
|
+
### Coverage matrices
|
|
83
|
+
|
|
84
|
+
- **Dimensões do PRD:** objetivos, usuários-alvo, limites de escopo, métricas de sucesso, estratégia de rollout, pontos de integração, edge cases.
|
|
85
|
+
- **Dimensões do TechSpec:** domain placement, data flow, dependências, core interfaces, estratégia de testes, reuse-vs-build, integração multi-projeto (quando aplicável).
|
|
86
|
+
|
|
87
|
+
Para cada estágio: monte a matriz, marque cada dimensão `coberta` (fato descoberto ou evidência alinhada creditada) ou `descoberta`, e pergunte só as `descobertas` — uma decisão por turn, cada uma com resposta recomendada. **Decisões técnicas que um Grill de produto não cobriu ainda podem ser perguntadas durante o TechSpec** — Grill alinha vocabulário e decisões de produto, não o design técnico completo.
|
|
59
88
|
|
|
60
89
|
## Constitution Gate
|
|
61
90
|
|
|
@@ -78,11 +107,11 @@ Roda em modo padrão OU `plan prd`.
|
|
|
78
107
|
|
|
79
108
|
### Pré-requisitos
|
|
80
109
|
- Ideia ou tópico do usuário.
|
|
81
|
-
- (Opcional) one-pager de brainstorm em `.dw/spec/ideas/<slug>.md`
|
|
110
|
+
- (Opcional) um one-pager de ideia do `/dw-brainstorm` em `.dw/spec/ideas/<slug>.md`. Se estiver `status: aligned` (schema `1.1`, de uma sessão de Grill), consuma como handoff — suas Resolved Decisions são creditadas, não re-perguntadas (ver Entrevista dirigida por cobertura).
|
|
82
111
|
|
|
83
112
|
### Comportamento obrigatório
|
|
84
113
|
|
|
85
|
-
1. **
|
|
114
|
+
1. **Coverage matrix sobre as dimensões do PRD** (objetivos, usuários-alvo, limites de escopo, métricas de sucesso, estratégia de rollout, pontos de integração, edge cases). Monte a matriz, credite evidência de handoff alinhado e fatos descobertos do repo, e pergunte SOMENTE as dimensões descobertas — uma decisão por vez, cada uma com resposta recomendada — usando a ferramenta de entrevista estruturada quando disponível (registre o fallback em chat caso contrário). Sem contagem fixa de perguntas; nunca re-pergunte uma decisão resolvida num one-pager alinhado.
|
|
86
115
|
2. **Web search MÍNIMO 3 queries** para padrões de mercado, contexto regulatório, abordagens de competidores quando relevante.
|
|
87
116
|
3. **Constitution alignment.** Cada requisito funcional (FR-N.M) inclui linha `Constitution Alignment: respects P-NNN, P-MMM` OU `no applicable principle: <motivo>`.
|
|
88
117
|
4. **Awareness multi-projeto.** Se feature cruza projetos do workspace, consulte `.dw/rules/integrations.md` e documente escopo na seção "Projetos Impactados".
|
|
@@ -106,7 +135,7 @@ Roda em modo padrão (após aprovação do PRD) OU `plan techspec` OU `plan --fr
|
|
|
106
135
|
### Comportamento obrigatório
|
|
107
136
|
|
|
108
137
|
1. **Hard gate: open questions do PRD.** Se `.dw/spec/prd-<feature>/prd.md` tem seção "Open Questions" com itens não resolvidos, PARE e peça pra usuário resolver primeiro.
|
|
109
|
-
2. **
|
|
138
|
+
2. **Coverage matrix sobre as dimensões do TechSpec** (domain placement, data flow, dependências, core interfaces, estratégia de testes, reuse-vs-build, integração multi-projeto quando aplicável). Credite evidência de handoff alinhado e fatos descobertos, e pergunte SOMENTE as dimensões descobertas — uma decisão por vez — usando a ferramenta de entrevista estruturada quando disponível (registre o fallback em chat caso contrário). Decisões técnicas não cobertas por um Grill de produto ainda podem ser perguntadas aqui. Sem contagem fixa de perguntas.
|
|
110
139
|
3. **Web search MÍNIMO 3 queries** + Context7 MCP para framework/library specifics.
|
|
111
140
|
4. **Source grounding (`dw-source-grounding`).** Toda decisão de framework/library carrega `[source: <url>, version: X.Y, retrieved: YYYY-MM-DD]`.
|
|
112
141
|
5. **Constitution gate.** Cada decisão arquitetural lista `Respects: P-NNN` ou `Deviates: P-NNN — justification: <slug ADR ou racional>`. Desvios de princípios `severity: high/critical` sem ADR → PARE.
|
|
@@ -187,7 +216,7 @@ Após plan completo, o diretório do PRD contém:
|
|
|
187
216
|
|
|
188
217
|
## Diretrizes finais
|
|
189
218
|
|
|
190
|
-
- Cada estágio
|
|
219
|
+
- Cada estágio roda uma coverage matrix sobre suas próprias dimensões — sem cota fixa de perguntas. Credite evidência de handoff alinhado e fatos descobertos; pergunte só decisões descobertas, uma por vez. Estágios diferentes precisam de framing diferente. Use a ferramenta de entrevista estruturada sempre que disponivel.
|
|
191
220
|
- Web search é obrigatório; Context7 MCP para libraries. Sem pular pra "acho que sei a versão mais recente."
|
|
192
221
|
- Constitution gate roda na entrada de cada estágio; defaults são auto-instalados quando ausente (nunca bloqueia).
|
|
193
222
|
- Os três estágios produzem Markdown commitado — esses são os artefatos canônicos de planejamento. Eles evoluem com a feature.
|
|
@@ -3,8 +3,9 @@ id: NNN
|
|
|
3
3
|
status: Proposed
|
|
4
4
|
title: [Título imperativo curto da decisão]
|
|
5
5
|
date: YYYY-MM-DD
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
scope: repo | prd
|
|
7
|
+
prd: [slug do PRD para scope=prd, ex: prd-user-auth; "n/a" para scope=repo]
|
|
8
|
+
schema_version: "1.1"
|
|
8
9
|
supersedes: null
|
|
9
10
|
superseded_by: null
|
|
10
11
|
---
|
|
@@ -46,8 +47,11 @@ Proposed | Accepted | Deprecated | Superseded by ADR-XXX
|
|
|
46
47
|
|
|
47
48
|
## Related
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
<!-- scope=prd: linke o PRD/TechSpec dono. scope=repo: sem PRD dono — omita as linhas de PRD/TechSpec
|
|
51
|
+
(ou escreva "n/a") e linke `.dw/constitution.md` / `.dw/rules/` só quando genuinamente aplicáveis. -->
|
|
52
|
+
|
|
53
|
+
- PRD: `.dw/spec/[prd-slug]/prd.md` (só scope=prd; "n/a" para scope=repo)
|
|
54
|
+
- TechSpec: `.dw/spec/[prd-slug]/techspec.md` (se aplicável; só scope=prd)
|
|
51
55
|
- Tasks afetadas: [lista de tasks, se aplicável]
|
|
52
56
|
- ADRs relacionadas: [lista, se aplicável]
|
|
53
57
|
|