@brunosps00/dev-workflow 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +2 -2
  3. package/lib/constants.js +6 -4
  4. package/lib/install-deps.js +22 -1
  5. package/lib/install-open-design.js +89 -0
  6. package/package.json +4 -2
  7. package/scaffold/en/commands/dw-adr.md +49 -11
  8. package/scaffold/en/commands/dw-analyze-project.md +5 -0
  9. package/scaffold/en/commands/dw-brainstorm.md +103 -32
  10. package/scaffold/en/commands/dw-claude-run.md +8 -5
  11. package/scaffold/en/commands/dw-help.md +3 -1
  12. package/scaffold/en/commands/dw-open-design.md +324 -0
  13. package/scaffold/en/commands/dw-plan.md +34 -5
  14. package/scaffold/en/templates/adr-template.md +8 -4
  15. package/scaffold/en/templates/idea-onepager.md +44 -2
  16. package/scaffold/pt-br/commands/dw-adr.md +49 -11
  17. package/scaffold/pt-br/commands/dw-analyze-project.md +5 -0
  18. package/scaffold/pt-br/commands/dw-brainstorm.md +105 -32
  19. package/scaffold/pt-br/commands/dw-claude-run.md +8 -5
  20. package/scaffold/pt-br/commands/dw-help.md +3 -1
  21. package/scaffold/pt-br/commands/dw-open-design.md +323 -0
  22. package/scaffold/pt-br/commands/dw-plan.md +34 -5
  23. package/scaffold/pt-br/templates/adr-template.md +8 -4
  24. package/scaffold/pt-br/templates/idea-onepager.md +44 -2
  25. package/scaffold/scripts/open-design/capture-current.mjs +170 -0
  26. package/scaffold/scripts/open-design/gate-prototype.mjs +223 -0
  27. package/scaffold/skill-registry.json +25 -1
  28. package/scaffold/skills/dw-cli-run/SKILL.md +10 -8
  29. package/scaffold/skills/dw-domain-modeling/SKILL.md +84 -0
  30. package/scaffold/skills/dw-domain-modeling/references/adr-policy.md +48 -0
  31. package/scaffold/skills/dw-domain-modeling/references/glossary-format.md +66 -0
  32. package/scaffold/skills/dw-grilling/SKILL.md +98 -0
  33. package/scaffold/skills/dw-grilling/references/decision-tree.md +56 -0
  34. package/scaffold/skills/dw-grilling/references/interview-loop.md +52 -0
@@ -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
@@ -36,12 +36,13 @@ Use `/dw-autopilot "desejo"` como gateway pra maior parte do trabalho. Comandos
36
36
  | `/dw-commit` | Commits atômicos Conventional pra trabalho pendente. |
37
37
  | `/dw-generate-pr [target]` | Push branch, draft do PR body, abre browser. |
38
38
 
39
- ## Tier 3 — Especialidade (11)
39
+ ## Tier 3 — Especialidade (12)
40
40
 
41
41
  | Comando | O que |
42
42
  |---------|-------|
43
43
  | `/dw-analyze-project` | Scan do repo, escreve `.dw/rules/`, oferece `.dw/constitution.md`, gera `.dw/rules/concerns.md` e sintetiza `DESIGN.md` em frontend quando há tokens. |
44
44
  | `/dw-redesign-ui "target"` | Audit, propõe 2-3 direções, entrega. Enforça UI grounding + WCAG; pode rodar o detector determinístico do impeccable. |
45
+ | `/dw-open-design --brief <file>` | Gera, itera ou faz `--refactor` de prototipos HTML headless via Open Design `od`; refina briefs primeiro, pode capturar prints atuais com `--url --viewports` ou `--screenshot`, depois verifica arquivo + gate visual. |
45
46
  | `/dw-refactor "target"` | Audita code health e tech debt com smells Fowler, deep-modules e gates de teste preservando comportamento. |
46
47
  | `/dw-functional-doc` | Mapeia screens + flows em doc funcional validado com Playwright; usa resolução de browser resiliente no WSL. |
47
48
  | `/dw-context-budget` | Audita contexto de commands, skills, agentes, instrucoes e MCPs. |
@@ -108,6 +109,7 @@ Auto-invocados por comandos primários mas disponíveis standalone.
108
109
  | `research`, `compara`, `estado da arte` | `/dw-brainstorm --research` |
109
110
  | `refactor`, `smell`, `code health`, `tech debt` | `/dw-refactor` |
110
111
  | `ui`, `design`, `redesign` | `/dw-redesign-ui` |
112
+ | `open design`, `prototype`, `prototipo`, `od cli`, `html prototype` | `/dw-open-design --brief <file>`, `/dw-open-design --brief-glob "<glob>" --agent claude` ou `/dw-open-design --refactor --url <url> --viewports "1440x900,375x812"` |
111
113
  | `intel`, `onde está`, `o que usa` | `/dw-intel` (ou `--build`) |
112
114
  | `contexto`, `tokens`, `agente lento` | `/dw-context-budget` |
113
115
  | `harness`, `install`, `wrappers`, `agentes` | `/dw-harness-audit` |