@polymorphism-tech/morph-spec 7.3.0 → 7.5.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 (61) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +2 -2
  3. package/bin/morph-spec.js +22 -2
  4. package/claude-plugin.json +1 -1
  5. package/docs/CHEATSHEET.md +1 -1
  6. package/docs/QUICKSTART.md +1 -1
  7. package/framework/CLAUDE.md +10 -5
  8. package/framework/MORPH.md +31 -14
  9. package/framework/agents.json +132 -132
  10. package/framework/commands/create-umbraco-lp.md +35 -0
  11. package/framework/commands/migrate-lp-to-umbraco.md +33 -0
  12. package/framework/commands/morph-archive.md +17 -27
  13. package/framework/evals/rubrics/README.md +9 -8
  14. package/framework/hooks/README.md +2 -0
  15. package/framework/hooks/claude-code/core/enforce-phase-writes.js +115 -90
  16. package/framework/hooks/claude-code/core/gate-guard.js +160 -0
  17. package/framework/hooks/claude-code/core/protect-spec-files.js +32 -30
  18. package/framework/hooks/claude-code/core/state-sync.js +16 -36
  19. package/framework/hooks/claude-code/core/validate-completion.js +105 -0
  20. package/framework/hooks/shared/state-reader.js +302 -221
  21. package/framework/hooks/shared/state-writer.js +124 -0
  22. package/framework/rules/morph-task-tracking.md +69 -49
  23. package/framework/rules/morph-workflow.md +192 -191
  24. package/framework/skills/README.md +1 -1
  25. package/framework/skills/core/create-umbraco-lp/SKILL.md +252 -0
  26. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +452 -0
  27. package/framework/skills/core/morph-apply/SKILL.md +69 -27
  28. package/framework/skills/core/morph-brainstorming/SKILL.md +6 -2
  29. package/framework/skills/core/morph-eval/SKILL.md +4 -5
  30. package/framework/skills/core/morph-implement/SKILL.md +51 -22
  31. package/framework/skills/core/morph-plan/SKILL.md +10 -4
  32. package/framework/skills/core/morph-proposal/SKILL.md +8 -7
  33. package/framework/skills/core/morph-review/SKILL.md +15 -8
  34. package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
  35. package/framework/skills/core/morph-standards/SKILL.md +1 -1
  36. package/framework/standards/ai-agents/setup.md +258 -244
  37. package/framework/templates/REGISTRY.json +1 -3
  38. package/framework/templates/context/CONTEXT-FEATURE.md +10 -17
  39. package/framework/templates/context/CONTEXT.md +181 -180
  40. package/framework/templates/docs/onboarding.md +122 -118
  41. package/framework/templates/docs/proposal.md +10 -0
  42. package/framework/templates/docs/spec.md +228 -228
  43. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +80 -80
  44. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +90 -89
  45. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +2 -1
  46. package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +44 -43
  47. package/framework/templates/meta-prompts/validators/checkpoint-validator.md +107 -107
  48. package/package.json +1 -1
  49. package/src/commands/project/init.js +517 -515
  50. package/src/commands/project/update.js +415 -368
  51. package/src/commands/project/worktree.js +212 -210
  52. package/src/commands/state/advance.js +82 -0
  53. package/src/commands/state/approve.js +251 -213
  54. package/src/commands/state/archive.js +111 -0
  55. package/src/commands/validation/validate-feature.js +244 -79
  56. package/src/core/state/state-manager.js +256 -74
  57. package/src/dashboard/scanner/state-scanner.js +35 -8
  58. package/src/lib/generators/context-generator.js +12 -8
  59. package/src/lib/risk-detector.js +2 -2
  60. package/src/utils/file-copier.js +7 -0
  61. package/src/utils/hooks-installer.js +527 -516
@@ -4,7 +4,7 @@ description: Entende o negócio, os usuários e a arquitetura antes de qualquer
4
4
  version: core
5
5
  when-to-invoke: ao receber um novo request de feature, antes de morph-plan
6
6
  user-invokable: true
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-brainstorming
@@ -87,6 +87,10 @@ O harness conhece o stack por padrão. Não pergunte sobre tecnologia a menos qu
87
87
  const riskList = getRiskSignals(signals);
88
88
  ```
89
89
 
90
+ **Persista a decisão no `feature.json` autoritativo da feature ANTES de apresentar ou auto-aprovar** — grave
91
+ `gateDecisions.proposal = { pause, reason, signals, trust, decidedAt: <ISO> }` em `.morph/features/{feature}/feature.json`
92
+ (Edit em `.morph/features/**` é permitido pela allowlist). O hook `gate-guard.js` confere depois se a ação (pausar vs auto-aprovar) bateu com esta decisão e avisa em divergência. Sem o registro o guard não verifica — não pule.
93
+
90
94
  **Se `pause === true`** (manual mode OU risco detectado em auto), use `AskUserQuestion`:
91
95
 
92
96
  ```
@@ -112,7 +116,7 @@ O harness conhece o stack por padrão. Não pergunte sobre tecnologia a menos qu
112
116
  **Riscos:** {principal} (sinais detectados: nenhum)
113
117
  ```
114
118
 
115
- O hook state-sync.js detecta a aprovação automaticamente. Em modo auto sem AskUserQuestion, a skill atualiza `.morph/state.json` via Edit direto (allowlist permite — ver settings.local.json).
119
+ No caminho manual, o hook state-sync.js detecta a aprovação automaticamente (grava o gate no `feature.json` autoritativo, `approvedBy: "manual"`). Em modo auto sem AskUserQuestion, aprove via `morph-spec approve {feature} proposal --mode auto` (ou `morph-spec advance {feature}` para já criar a pasta 2-plan/) — nunca via Edit à mão de state.json.
116
120
 
117
121
  ## Output esperado
118
122
  - `.morph/features/{feature}/0-proposal/proposal.md` — proposta aprovada
@@ -4,7 +4,7 @@ description: Avalia a qualidade de uma tarefa ou fase com rubricas graduadas 0-1
4
4
  version: core
5
5
  when-to-invoke: ao completar uma tarefa ou ao finalizar uma fase de implementação
6
6
  user-invokable: false
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-eval
@@ -32,9 +32,8 @@ Também invocado ao receber o retorno de um sub-agent com auto-score < 7.
32
32
  4. Calcule o score composto: (arch × 0.30) + (contracts × 0.25) + (quality × 0.25) + (tests × 0.20).
33
33
 
34
34
  5. Aja conforme o score composto:
35
- - **8-10:** Aprovado — nenhuma saída necessária no contexto, siga para próxima tarefa.
36
- - **6-7.9:** Feedback priorizado — liste o que melhorar (bloqueantes primeiro), modelo continua.
37
- - **< 6:** Escale para revisão humana — produza relatório detalhado com scores por dimensão e itens bloqueantes.
35
+ - **9-10:** Aprovado — nenhuma saída necessária no contexto, a task avança.
36
+ - **< 9:** Produza **feedback priorizado** (bloqueantes primeiro) — este feedback é a entrada do loop de correção autônomo da `morph-apply`: ela re-invoca `morph-implement` passando esse feedback para a próxima tentativa. NÃO escale ao humano aqui; a escalada só acontece quando o loop esgota 3 tentativas sem atingir 9. O feedback deve ser acionável (o que corrigir, onde), não só descritivo.
38
37
 
39
38
  6. Registre o score no recap.md da tarefa avaliada.
40
39
 
@@ -45,7 +44,7 @@ Também invocado ao receber o retorno de um sub-agent com auto-score < 7.
45
44
 
46
45
  ## Output esperado
47
46
  - Score composto 0-10 com scores por dimensão
48
- - Ação tomada com base no score (aprovado / feedback / escalado)
47
+ - Ação tomada com base no score (aprovado em >=9 / feedback acionável para o loop em <9)
49
48
  - Entrada no recap.md com scores
50
49
  - Trace atualizado com `eval_score` e `eval_dimensions`
51
50
 
@@ -4,7 +4,7 @@ description: Guia a execução de cada tarefa de implementação com standard e
4
4
  version: core
5
5
  when-to-invoke: ao iniciar cada task de implementação listada em tasks.json
6
6
  user-invokable: false
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-implement
@@ -18,26 +18,36 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
18
18
 
19
19
  ## O que fazer
20
20
 
21
- 1. Leia o mandate.md em `.morph/features/{feature}/2-plan/mandate.md`.
22
- Identifique os standards obrigatórios e patterns proibidos para esta feature.
21
+ 1. **Garanta que o conteúdo do plano está no seu contexto antes de implementar** — `mandate.md`, `spec.md` e `decisions.md` de `.morph/features/{feature}/2-plan/`. Se você não tem o conteúdo atual desses arquivos em contexto (sessão fresca / cold start de `/morph-apply`, ou conteúdo possivelmente desatualizado), **use a tool Read para carregá-los**: primeiro `mandate.md`, depois `spec.md`, depois `decisions.md`.
22
+
23
+ > Por que "garanta que está em contexto" e não "sempre Read": numa sessão quente, onde você acabou de escrever esses arquivos no mesmo turno, o conteúdo já está disponível e um Read seria redundante. Mas o contrato é o conteúdo estar em contexto — não confie em cache de turnos anteriores que pode ter sido truncado ou evictado. Na dúvida, Read. Nunca implemente sem o mandate em contexto.
24
+
25
+ Do `mandate.md`, identifique os standards obrigatórios e patterns proibidos. Do `spec.md`, a arquitetura e as seções de FRs referenciadas pela `description` da task corrente. Do `decisions.md`, as ADRs já registradas — para não contradizê-las nem re-decidir o que já foi decidido.
26
+
27
+ **Se a `morph-apply` passou `feedback` de uma tentativa anterior** (loop de correção — a task foi implementada mas o `morph-eval` deu score < 9): isto NÃO é uma implementação do zero. Leia o feedback priorizado, identifique os pontos bloqueantes listados, e **corrija especificamente esses pontos** no código já existente. Não reescreva o que já passou; foque no que o eval apontou. Registre no recap qual feedback foi endereçado em qual tentativa.
23
28
 
24
29
  2. Identifique o standard mais relevante para a tarefa atual:
25
30
  - Consulte `framework/standards/STANDARDS.json` — filtre por `category` e `tags`.
26
- - Leia apenas o arquivo `.md` do standard identificado (campo `path` no JSON).
31
+ - **Use a tool Read no arquivo `.md` do standard identificado** (campo `path` no JSON) — não baste o digest do index; abra o arquivo. O index só diz que o standard existe; as convenções estão no `.md`.
32
+ - **Tarefas de agente de IA (MAF):** Read os `framework/standards/ai-agents/*.md` relevantes para a task. Mesmo que você consulte docs externas (context7) para a superfície da API do `Microsoft.Agents.AI`, as **convenções de projeto** (single-agent por padrão, provider/caching/observability, A2A, middleware) vêm desses standards. Uma fonte externa não as conhece.
27
33
  - Se nenhum standard cobrir o caso, registre no decisions.md e adote o critério mais conservador.
28
34
 
29
35
  3. Identifique a persona de agente adequada para a tarefa:
30
- - Consulte `framework/agents.json` — encontre o agente cujo `domains` cobre o domínio da tarefa.
31
- - Leia o campo `persona` do agente e adote esse ponto de vista durante a implementação.
36
+ - **Use a tool Read em `.morph/framework/agents.json`** — não recupere a persona de memória. O registro existe para ser consultado; pular o Read significa que a persona vira um rótulo inventado em vez de uma seleção auditável. Encontre o agente cujo `domains` cobre o domínio da tarefa.
37
+ - Leia o campo `persona` do agente e adote esse ponto de vista durante a implementação. O array `standards` desse agente é o ponto de partida para o passo 2.
38
+ - O `**Persona:**` que você grava no recap (passo 6) **deve** ser o `name` exato de um agente que existe em `agents.json` — é assim que o reviewer audita de qual ponto de vista a task foi feita. Uma persona que não casa com nenhum agente do registro é um sinal de que o consult não aconteceu.
32
39
 
33
- 4. Avalie se a task se qualifica para sub-agent dispatch (ver critérios em `.morph/framework/MORPH.md` seção 6):
34
- - Duração estimada > 5 minutos (effort L ou XL)
35
- - Mais de 3 tentativas de correção falharam no mesmo problema
36
- - Análise de arquivo com > 500 linhas
37
- - Task repetitiva com > 3 instâncias do mesmo padrão
38
- - Risco de contaminar o contexto principal com detalhes de baixo nível irrelevantes para o fluxo
40
+ 4. Decida se a task deve ser despachada para um sub-agent. Dispatch é o **default** para o caso pesado/multi-domínio (ver `.morph/framework/MORPH.md` seção 6) — despache quando a task dispara qualquer gatilho:
41
+ - **Domínio diferente do que você tem carregado agora** (a persona do passo 3 difere da que você vinha usando) — gatilho mais importante: o especialista carrega seus próprios standards sem inchar seu contexto.
42
+ - Esforço L ou XL (duração estimada > 5 minutos).
43
+ - Mais de 3 tentativas de correção falharam no mesmo problema.
44
+ - Análise de arquivo com > 500 linhas.
45
+ - Task repetitiva com > 3 instâncias do mesmo padrão.
46
+ - Risco de contaminar o contexto principal com detalhes de baixo nível irrelevantes para o fluxo.
39
47
 
40
- **Se sim — despache sub-agent com este template:**
48
+ Inline é aceitável só para tasks S/M **dentro do domínio já carregado**. Se for inline numa task que dispara um gatilho, registre a justificativa em uma linha no `decisions.md` — inline silencioso numa task pesada/multi-domínio é o anti-padrão da seção 6.
49
+
50
+ **Se for despachar — use este template (passe a persona e o standard escopados, nunca um agente genérico sem contexto de domínio):**
41
51
  ```
42
52
  Implementar [ID]: [title da task]
43
53
 
@@ -57,12 +67,30 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
57
67
  Se encontrar ambiguidade de escopo não coberta pelo mandate, registre no decisions.md
58
68
  e resolva da forma mais conservadora — não pause para perguntar, a menos que seja bloqueante.
59
69
 
60
- 6. Ao concluir a tarefa, atualize `recap.md` em `.morph/features/{feature}/3-implement/`:
61
- - ID da tarefa concluída
62
- - O que foi feito (2-3 frases)
63
- - Arquivos modificados
64
- - Standard consultado
65
- - Problemas encontrados e como foram resolvidos
70
+ 6. Ao concluir a tarefa, **append** um bloco a `recap.md` em `.morph/features/{feature}/3-implement/`
71
+ usando este template **obrigatório** (campos não-opcionais — sem standard, a entrada não conta):
72
+
73
+ ```markdown
74
+ ## T{N} — {title}
75
+
76
+ **Standard:** {standard-id} (`.morph/framework/standards/{path}.md`)
77
+ **Persona:** {agent-name}
78
+ **Files:**
79
+ - `{path}`
80
+ - `{path}`
81
+
82
+ {2-3 frases sobre o que foi feito}
83
+
84
+ **Issues encontrados:** {breve descrição ou "nenhum"}
85
+ ```
86
+
87
+ Regras:
88
+ - **Standard é obrigatório** — sempre referenciar pelo menos um standard de
89
+ `framework/standards/STANDARDS.json` que justificou as escolhas de implementação.
90
+ Se nenhum standard existente cobre, registre a decisão em `decisions.md` E cite
91
+ `Standard: ad-hoc (see decisions.md ADR-{N})` no recap.
92
+ - Sem standard ⇒ a task falha no validador de Gate 3 (`validate-completion`)
93
+ e o reviewer não consegue auditar de onde veio a decisão técnica.
66
94
 
67
95
  7. Registre a entrada no trace de execução em `.morph/traces/YYYY-MM-DD-{feature}-implement.json`:
68
96
  - Crie o arquivo se não existir (use o schema em `framework/evals/trace-schema.md`)
@@ -81,9 +109,10 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
81
109
 
82
110
  `tasks.json` é protegido após o Gate 2, mas os campos de progresso (`status`,
83
111
  `outputs`, `notes`) continuam graváveis durante a fase implement. `writeTasksJson`
84
- grava o arquivo **inteiro** (Write) — esse é o caminho permitido. Nunca use a
85
- tool `Edit` em `tasks.json` após o Gate 2: o hook `protect-spec-files` bloqueia
86
- Edit e qualquer mudança em campos de plano (`title`, `dependencies`, `doneCriteria`…).
112
+ grava o arquivo inteiro (Write) e é o caminho mais simples; **uma `Edit` que mexe
113
+ só nesses campos mutáveis também é permitida** — o hook `protect-spec-files` faz
114
+ diff semântico e libera Write ou Edit desde que nenhum campo de contrato do plano
115
+ (`title`, `description`, `dependencies`, `effort`, `doneCriteria`, `group`) mude.
87
116
 
88
117
  9. Quando invocada por `morph-apply`, retornar o controle à skill orquestradora — ela decide qual task vem em seguida via `getReadyTasks(data)`. Quando invocada manualmente, verificar se há próxima task ready e iniciá-la imediatamente aplicando esta skill desde o passo 1 (auto-advance). Pause apenas se encontrar ambiguidade bloqueante não coberta pelo mandate.
89
118
 
@@ -4,7 +4,7 @@ description: Guia a produção dos três artefatos de planejamento de uma featur
4
4
  version: core
5
5
  when-to-invoke: ao iniciar a fase plan de uma feature, após o Gate 1 (proposal aprovado)
6
6
  user-invokable: true
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-plan
@@ -20,7 +20,7 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
20
20
 
21
21
  ## O que fazer
22
22
 
23
- 1. Leia o `proposal.md` em `.morph/features/{feature}/0-proposal/` para entender escopo e critérios de aceite.
23
+ 1. **Garanta que `proposal.md` e `stack-scan.md` estão no seu contexto antes de planejar.** Se não tem o conteúdo atual em contexto (sessão fresca, ou conteúdo possivelmente desatualizado), **use a tool Read para carregá-los** — não confie em cache de turnos anteriores. Na dúvida, Read. `.morph/features/{feature}/0-proposal/proposal.md` (escopo, critérios de aceite, riscos) e `.morph/features/{feature}/0-proposal/stack-scan.md` (contexto técnico detectado: greenfield vs brownfield, stack atual, drift). Em brownfield, o stack-scan informa decisões de spec/mandate — não invente padrões que conflitam com o detectado.
24
24
 
25
25
  2. Produza `spec.md` em `.morph/features/{feature}/2-plan/`:
26
26
  - Arquitetura da solução: quais componentes, como se conectam, fluxos de dados principais.
@@ -37,6 +37,7 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
37
37
  - Camada de Service/Manager entre handler e dados → handler usa `IRepository<T>` ou `DbContext` direto
38
38
  - SQL cru (`FromSqlRaw`, `ExecuteQuery(string)`) sem justificativa em `decisions.md` → usar LINQ
39
39
  - Política de acesso a dados (registre no mandate como orientação, não proibição): `IRepository<T>` + `IUnitOfWork` para CRUD simples; `ApplicationDbContext` injetado direto no slice para queries específicas (joins, projeção, paginação).
40
+ - **Features com agentes de IA (MAF):** se a feature envolve um agente (Microsoft Agent Framework), **use a tool Read** nos standards relevantes de `framework/standards/ai-agents/*.md` (ex.: `setup`, `agent-session`, `middleware-patterns`, `mcp-server`, `mcp-tools`, `multi-agent-patterns`, `production`) — filtre pelo que a feature exige via STANDARDS.json. Esses standards carregam as **convenções de projeto** (single-agent por padrão — Workflows só para fan-in/out real; provider, caching, observability, A2A) que uma fonte externa de docs (ex.: context7) não conhece. Padrão de divisão: **superfície da API** pode vir de docs ao vivo/context7 (mais frescas para um SDK em evolução), mas **as convenções vêm dos standards** — registre ambas no mandate. Não pule os `ai-agents/*.md` só porque o STANDARDS.json index lista que eles existem.
40
41
  - Checklist de done com critérios verificáveis por tarefa.
41
42
 
42
43
  4. Produza `tasks.json` em `.morph/features/{feature}/2-plan/` seguindo o schema em `.morph/framework/schemas/tasks.schema.json`.
@@ -93,6 +94,10 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
93
94
  const { pause, reason } = shouldPauseGate(config, signals);
94
95
  ```
95
96
 
97
+ **Persista a decisão no `feature.json` autoritativo da feature ANTES de apresentar ou auto-aprovar** — grave
98
+ `gateDecisions.plan = { pause, reason, signals, trust, decidedAt: <ISO> }` em `.morph/features/{feature}/feature.json`
99
+ (Edit em `.morph/features/**` é permitido pela allowlist). Isso deixa o raciocínio de trust auditável no disco: o hook `gate-guard.js` confere depois se a ação tomada (pausar vs auto-aprovar) bateu com esta decisão e avisa em caso de divergência. Sem este registro o guard não tem como verificar — não pule.
100
+
96
101
  **Se `pause === true`**, use `AskUserQuestion`:
97
102
 
98
103
  ```
@@ -116,14 +121,14 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
116
121
  **Tasks:** {N} | Esforço total: {soma} | Caminho crítico: {IDs sem deps paralelas}
117
122
  ```
118
123
 
119
- O hook state-sync registra a aprovação automaticamente em answers de AskUserQuestion. Em auto sem AskUserQuestion, a skill edita `state.json` diretamente.
124
+ No caminho manual, o hook state-sync registra a aprovação automaticamente em answers de AskUserQuestion (grava o gate no `feature.json` autoritativo, `approvedBy: "manual"`). Em auto sem AskUserQuestion, aprove via `morph-spec approve {feature} plan --mode auto` (ou `morph-spec advance {feature}` para já criar a pasta da próxima fase) — nunca via Edit à mão de state.json.
120
125
 
121
126
  ## Output esperado
122
127
 
123
128
  - `.morph/features/{feature}/2-plan/spec.md` — especificação técnica completa
124
129
  - `.morph/features/{feature}/2-plan/mandate.md` — contrato de implementação
125
130
  - `.morph/features/{feature}/2-plan/tasks.json` — task list estruturada válida contra schema
126
- - Gate 2 marcado aprovado em `state.json`
131
+ - Gate 2 registrado aprovado em `.morph/features/{feature}/feature.json` (autoritativo)
127
132
 
128
133
  ## Referências
129
134
 
@@ -131,5 +136,6 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
131
136
  - `.morph/framework/standards/STANDARDS.json` — para identificar standards relevantes ao mandate
132
137
  - `.morph/framework/schemas/tasks.schema.json` — schema obrigatório de tasks.json
133
138
  - `.morph/features/{feature}/0-proposal/proposal.md` — escopo da feature
139
+ - `.morph/features/{feature}/0-proposal/stack-scan.md` — contexto técnico detectado
134
140
  - `src/lib/tasks/tasks-json-parser.js` — `validateTasksJson`, `writeTasksJson`
135
141
  - `src/lib/risk-detector.js` — `shouldPauseGate`, `getRiskSignals`
@@ -4,7 +4,7 @@ description: Orquestra a fase de proposta+plano de uma feature morph-spec. Encad
4
4
  version: core
5
5
  when-to-invoke: ao receber instrução "use /morph-proposal" do usuário, ou ao iniciar uma nova feature
6
6
  user-invokable: true
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-proposal
@@ -17,7 +17,7 @@ Conduzir uma feature do request inicial até o plano aprovado (Gate 2), sem inte
17
17
 
18
18
  - Usuário pede "use /morph-proposal {feature}" ou "vamos planejar {feature}".
19
19
  - Início de qualquer feature nova num projeto morph-spec.
20
- - Em sessões retomadas, antes de continuar uma feature em progresso, verificar via `.morph/state.json` se a feature já passou pelos Gates.
20
+ - Em sessões retomadas, antes de continuar uma feature em progresso, verificar via `.morph/features/{feature-name}/feature.json` (estado autoritativo da feature) se ela já passou pelos Gates.
21
21
 
22
22
  ## Argumentos
23
23
 
@@ -82,11 +82,12 @@ Escopo: {incluído} | Excluído: {exclusões}
82
82
  Stack: {compliance}
83
83
  ```
84
84
 
85
- O hook `state-sync.js` registra a aprovação automaticamente via PostToolUse em AskUserQuestion. Quando auto-aprovado, marcar manualmente:
85
+ No caminho manual, o hook `state-sync.js` registra a aprovação automaticamente via PostToolUse quando a `AskUserQuestion` é respondida com "aprovado" (grava o gate no `feature.json` autoritativo, `approvedBy: "manual"`). Em `trust: auto` (sem AskUserQuestion), **aprove via CLI — nunca via Edit à mão de state.json**:
86
86
 
87
- ```js
88
- // auto-aprovação: o hook detecta "aprovado" no answer label, mas em auto-mode
89
- // não há AskUserQuestion. Skill atualiza .morph/state.json via Edit fallback.
87
+ ```
88
+ morph-spec approve {feature} proposal --mode auto
89
+ # ou, para já aprovar o Gate 1 e criar a pasta 2-plan/ num passo só:
90
+ morph-spec advance {feature}
90
91
  ```
91
92
 
92
93
  ### 4. Verificar retomada antes de morph-plan
@@ -128,7 +129,7 @@ Lógica idêntica ao passo 3 (`shouldPauseGate` + AskUserQuestion ou auto-aprova
128
129
  - `.morph/features/{feature}/2-plan/spec.md`
129
130
  - `.morph/features/{feature}/2-plan/mandate.md`
130
131
  - `.morph/features/{feature}/2-plan/tasks.json`
131
- - Gates 1 e 2 marcados aprovados em `.morph/state.json` (via hook state-sync).
132
+ - Gates 1 e 2 registrados aprovados em `.morph/features/{feature}/feature.json` (autoritativo) — via `morph-spec approve`/`morph-spec advance` em auto, ou via hook state-sync no caminho manual.
132
133
 
133
134
  ## Referências
134
135
 
@@ -4,7 +4,7 @@ description: Conduz a fase de revisão e produz o review-report.md para o Gate 3
4
4
  version: core
5
5
  when-to-invoke: ao iniciar a fase review, após todas as tasks de tasks.json estarem com status `done`
6
6
  user-invokable: true
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-review
@@ -19,11 +19,14 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
19
19
 
20
20
  ## O que fazer
21
21
 
22
- 1. Leia o mandate.md em `.morph/features/{feature}/2-plan/mandate.md`.
23
- Liste os critérios de done, standards obrigatórios e patterns proibidos.
22
+ 1. **Garanta que todos os artefatos de plano estão no seu contexto antes de revisar.** Se você não tem o conteúdo atual em contexto (sessão fresca, ou conteúdo possivelmente desatualizado), **use a tool Read para carregá-los** — não confie em cache de turnos anteriores que pode ter sido truncado ou evictado. Na dúvida, Read:
23
+ - `.morph/features/{feature}/2-plan/mandate.md` — critérios de done, standards obrigatórios, patterns proibidos.
24
+ - `.morph/features/{feature}/2-plan/spec.md` — arquitetura, FRs/NFRs, contratos esperados.
25
+ - `.morph/features/{feature}/2-plan/decisions.md` (se existir) — ADRs que devem ter sido seguidos pela implementação. Use para validar coerência entre decisão registrada e código produzido.
24
26
 
25
- 2. Leia o recap.md em `.morph/features/{feature}/3-implement/recap.md`.
26
- Verifique se todas as tarefas têm entrada e se os problemas foram resolvidos.
27
+ > O contrato é o conteúdo estar em contexto, não o número de chamadas a Read. Numa sessão quente onde você acabou de produzir esses artefatos, eles já estão disponíveis. Mas uma revisão sem o mandate em contexto não é uma revisão — é um chute. Nunca produza o review-report sem ter o mandate, spec e decisions disponíveis.
28
+
29
+ 2. **Use a tool Read em `.morph/features/{feature}/3-implement/recap.md`**. Verifique se todas as tarefas têm entrada e se os problemas foram resolvidos.
27
30
 
28
31
  3. Para cada critério do mandate.md, verifique se foi atendido:
29
32
  - Se atendido: registre como "aprovado" com evidência (arquivo ou comportamento).
@@ -39,8 +42,10 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
39
42
  - Lista de melhorias recomendadas (não bloqueantes)
40
43
  - Recomendação final: Aprovado / Rejeitar com condições / Reprovar
41
44
 
42
- 6. Se houver itens bloqueantes (score < 6 em qualquer dimensão bloqueante), corrija antes
45
+ 6. Se houver itens bloqueantes (score < 8 em qualquer dimensão bloqueante), corrija antes
43
46
  de apresentar o review-report.md ao usuário. Não abra o Gate 3 com bloqueantes em aberto.
47
+ (A barra de avanço por task é 9; uma dimensão individual abaixo de 8 no review da feature
48
+ inteira é um bloqueante crítico que o loop de correção deveria ter pego.)
44
49
 
45
50
  7. Finalize o trace de execução em `.morph/traces/YYYY-MM-DD-{feature}-implement.json`:
46
51
  - Preencha `phase_summary.tasks_completed`, `tasks_failed`, `avg_eval_score`
@@ -83,17 +88,19 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
83
88
  **Recomendação:** Aprovado
84
89
  ```
85
90
 
86
- O hook state-sync detecta a aprovação em answers de AskUserQuestion e marca `features[X].approvalGates.review = true`. Em auto sem AskUserQuestion, a skill atualiza state.json direto.
91
+ No caminho manual, o hook state-sync detecta a aprovação em answers de AskUserQuestion e grava `approvalGates.review = { approved: true, timestamp, approvedBy: "manual" }` no `feature.json` autoritativo da feature. Em auto sem AskUserQuestion, aprove via `morph-spec approve {feature} review --mode auto` — nunca via Edit à mão de state.json.
87
92
 
88
93
  ## Output esperado
89
94
  - `.morph/features/{feature}/4-review/review-report.md` com scores e recomendação
90
95
  - Trace da fase com `phase_summary` preenchido
91
- - Gate 3 marcado aprovado em state.json (auto ou manual)
96
+ - Gate 3 registrado aprovado em `.morph/features/{feature}/feature.json` (autoritativo), na forma canônica `{ approved, timestamp, approvedBy }` — via `morph-spec approve` em auto, ou pelo hook state-sync no caminho manual
92
97
 
93
98
  ## Referências
94
99
  - `.morph/framework/MORPH.md` — seção 5 (Gate 3), seção 1 (papel Evaluator), Trust Mode
95
100
  - `framework/skills/core/morph-eval/SKILL.md` — para calcular scores por dimensão
96
101
  - `.morph/framework/evals/trace-schema.md` — formato canônico do trace
97
102
  - `.morph/features/{feature}/2-plan/mandate.md` — critérios de done da feature
103
+ - `.morph/features/{feature}/2-plan/spec.md` — arquitetura e contratos
104
+ - `.morph/features/{feature}/2-plan/decisions.md` — ADRs registrados (se existir)
98
105
  - `.morph/features/{feature}/3-implement/recap.md` — registro de execução
99
106
  - `src/lib/risk-detector.js` — `shouldPauseGate` para Gate 3
@@ -4,7 +4,7 @@ description: Varre o codebase existente, detecta stack atual, compara com o stac
4
4
  version: core
5
5
  when-to-invoke: ao iniciar uma feature em projeto brownfield (codebase já existente)
6
6
  user-invokable: true
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-stack-scan
@@ -4,7 +4,7 @@ description: Localiza e carrega um standard específico do STANDARDS.json sob de
4
4
  version: core
5
5
  when-to-invoke: quando precisar consultar um standard específico durante a implementação
6
6
  user-invokable: true
7
- cliVersion: "7.3.0"
7
+ cliVersion: "7.5.0"
8
8
  ---
9
9
 
10
10
  # morph-standards