@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.
@@ -1,11 +1,19 @@
1
1
  ---
2
2
  type: idea-onepager
3
- schema_version: "1.0"
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 feita durante a fase atual do PRD.
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 do pipeline após `/dw-plan prd` | **Sucessor:** continua o fluxo anterior (techspec, task, review)
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
- | `{{PRD_PATH}}` | Caminho da pasta do PRD ativo | `.dw/spec/prd-minha-feature` |
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
- - Diretório de ADRs: `{{PRD_PATH}}/adrs/`
27
- - Arquivo novo: `{{PRD_PATH}}/adrs/adr-NNN.md` (NNN zero-padded para 3 dígitos)
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 em `{{PRD_PATH}}/adrs/` (crie o diretório se não existir)
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
- prd: [slug do PRD]
56
- schema_version: "1.0"
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 **durante** a execução de um PRD, adicionar uma linha na seção "Related ADRs" dos artefatos relacionados:
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 v1.0
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** (default sempre ativo) | Surface padrão: 3-7 opções (conservadora / equilibrada / ousada) com tags `[IMPROVES] / [CONSOLIDATES] / [NEW]`. Sempre roda salvo override explícito. |
24
- | **grill** | Vocabulário está instável — termos do usuário divergem de `.dw/rules/` / `.dw/constitution.md`, ou dois sinônimos competem na mesma conversa, ou alguém propõe um nome que conflita com o glossário. |
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** sempre roda salvo override que pule. Outros modos (grill, prototype, council, research, refactor-audit, onepager) disparam **aditivamente** quando seus sinais estão presentes.
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 "Dispatch: grill (vocabulário instável no PRD atual)". Não esconda — surface antes de rodar.
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 sharpened em `.dw/rules/` (se modo **grill** disparou)
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 (domain-grilling)
336
+ ## Modo: grill (alinhamento nativo com estado)
335
337
 
336
- Dispara quando o vocabulário está instável — termos do usuário divergem de `.dw/rules/` / `.dw/constitution.md`, dois sinônimos competem, ou alguém propõe um nome que conflita com o glossário. Override: `--mode=grill`. Substitui o option-matrix por um **stress-test estilo entrevista** do plan/PRD contra o vocabulário do projeto. Cada rodada sharpens um pedaço. Atualiza `.dw/rules/` (ou `.dw/constitution.md`) inline conforme termos cristalizam — nunca adia pra "depois da conversa".
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>Pergunte UMA pergunta de cada vez. Espere a resposta. Não despeje 5 perguntas e torça pelo melhor.</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
- ### Quando usar grill mode
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
- - Antes de `/dw-plan prd` quando o domínio parece instável ou o time usa termos competindo.
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
- - Durante discussão de arquitetura quando "módulo", "serviço", "componente" são usados de forma intercambiável e precisa fixar o termo canônico.
345
- - Quando alguém propõe um nome que não combina com o glossário existente do projeto.
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
- ### Disciplinas durante a sessão
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
- 1. **Desafie contra o glossário.** Leia `.dw/rules/index.md` + `.dw/rules/<modulo>.md` + `.dw/constitution.md`. Flague conflitos de terminologia no instante em que o usuário usa um termo que diverge do que já está documentado.
383
+ ### Escritas com estado permitidas (só após autorização + a decisão relevante resolvida)
350
384
 
351
- 2. **Sharpen linguagem vaga.** Quando o usuário disser "a coisa do user" ou "aquele lance de pedidos", proponha um termo canônico preciso. Não finja que entendeu — empurre de volta.
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
- 3. **Discuta cenários concretos.** Force precisão com edge cases específicos: "O que acontece com a Order no estado X quando o evento Y chega durante o retry Z?" Respostas vagas voltam como mais perguntas.
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
- 4. **Cross-reference o código.** Quando o usuário afirmar um comportamento, olhe rápido no codebase pra confirmar. Surface contradições: "Você disse que a API retorna `OrderId` mas `src/api/orders.ts:42` retorna `{ order_id, status }`." Não argumente em generalidades.
393
+ ### Artefatos de domínio nativos (não `.dw/rules/`, não `CONTEXT.md` na raiz)
356
394
 
357
- 5. **Atualize `.dw/rules/` inline.** Quando um termo cristaliza, escreva no arquivo de rules apropriado no mesmo turn da conversa. Lazy file creation: se o arquivo não existir, crie. Formato segue a disciplina de glossário do projeto (ver `.dw/rules/index.md`).
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
- 6. **Pule detalhe de implementação no glossário.** `.dw/rules/` e `.dw/constitution.md` descrevem vocabulário e princípios — não implementação. "Order: pedido de um cliente para comprar itens, em um destes estados: pending, paid, shipped, delivered, refunded" é bom. "Order: uma classe TypeScript em `src/orders/`" é vazamento de implementação.
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ó proponha um ADR via `/dw-adr` quando **todos os três** valem:
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 >1 semana de trabalho? |
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
- Se algum falta, pule o ADR. Não ADR toda decisão casual — vira ruído na pasta de ADRs.
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
- - **`.dw/rules/<modulo>.md` ou `.dw/constitution.md` atualizado** com termos cristalizados.
377
- - **PRD / TechSpec atualizado** se grill rodou no meio do planejamento (termos alinhados com o glossário).
378
- - **`.dw/spec/<prd>/adrs/adr-NNN.md` opcional** se os critérios acima valem.
379
- - **NÃO** produz option matrix ou recomendação (esse é o option-matrix; grill é só sharpening). Se o dispatcher encadeou grill+option-matrix, o option matrix roda em fase separada.
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/rules/`**: grille mesmo assim; a conversa produz as PRIMEIRAS entradas em `.dw/rules/index.md`. Isso é o valor.
384
- - **Discordância cosmética de terminologia** ("usamos `userId` ou `user_id`?"): pule grill mode; use ADR de convenção de código ou seção Naming em `.dw/rules/index.md`.
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
- Os modos **grill** e **prototype** são adaptados de [`mattpocock/skills/grill-with-docs`](https://github.com/mattpocock/skills/tree/main/grill-with-docs) e [`mattpocock/skills/prototype`](https://github.com/mattpocock/skills/tree/main/prototype) (Matt Pocock, MIT). Adaptação dev-workflow: integrados como modos INTERNOS auto-dispatchados em vez de skills separadas, paths rebaseados em `.dw/rules/` + `.dw/spec/<prd>/`, criação de ADR gated no teste 3-critérios (difícil de reverter + surpreendente + trade-off real).
449
-
450
- Crédito: Addy Osmani (idea-refine) e Matt Pocock (grill-with-docs, prototype).
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). O Claude nao tem
24
- flag numerica de effort; mapeie "escalonamento" para o tier do modelo (e, quando precisar, peca extended thinking
25
- no prompt). Comece um tier abaixo do teto; escale conforme a `dw-cli-run`.
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. Cada estagio mantem sua propria cota: PRD exige 7+ perguntas de produto; TechSpec exige 7+ perguntas tecnicas.
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` via `/dw-brainstorm --onepager`.
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. **Perguntas de clarificação (MÍNIMO 7).** Antes de escrever qualquer coisa, use a ferramenta de entrevista estruturada quando disponivel para fazer 7+ perguntas cobrindo: objetivos, usuários-alvo, limites de escopo, métricas de sucesso, estratégia de rollout, pontos de integração, edge cases. Se a ferramenta estiver indisponivel, use fallback em chat e registre o fallback.
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. **Perguntas de clarificação (MÍNIMO 7).** Use a ferramenta de entrevista estruturada quando disponivel para fazer perguntas tecnicas cobrindo: domain placement, data flow, dependências, core interfaces, estratégia de testes, reuse-vs-build, integração multi-projeto se aplicável. Se a ferramenta estiver indisponivel, use fallback em chat e registre o fallback.
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 tem sua própria cota de perguntas de clarificação — não recicle. Estágios diferentes precisam de framing diferente. Use a ferramenta de entrevista estruturada sempre que disponivel.
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
- prd: [slug do PRD, ex: prd-user-auth]
7
- schema_version: "1.0"
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
- - PRD: `.dw/spec/[prd-slug]/prd.md`
50
- - TechSpec: `.dw/spec/[prd-slug]/techspec.md` (se aplicável)
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