@polymorphism-tech/morph-spec 8.19.0 → 8.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +3 -11
- package/framework/MORPH.md +53 -55
- package/framework/docs/CLI.md +1 -1
- package/framework/phases.json +1 -1
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +1 -1
- package/framework/skills/core/morph-brainstorming/SKILL.md +2 -2
- package/framework/skills/core/morph-eval/SKILL.md +1 -1
- package/framework/skills/core/morph-hotfix/SKILL.md +1 -1
- package/framework/skills/core/morph-implement/SKILL.md +1 -1
- package/framework/skills/core/morph-plan/SKILL.md +3 -1
- package/framework/skills/core/morph-proposal/SKILL.md +10 -1
- package/framework/skills/core/morph-review/SKILL.md +1 -1
- package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/skills/core/morph-uiux/SKILL.md +135 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Spec-driven development framework for multi-stack projects. Turns feature requests into implementation-ready code through structured, AI-orchestrated phases.
|
|
4
4
|
|
|
5
5
|
**Package:** `@polymorphism-tech/morph-spec`
|
|
6
|
-
**Version:** 8.
|
|
6
|
+
**Version:** 8.20.0
|
|
7
7
|
**Requires:** Node.js 22+, Claude Code
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -368,4 +368,4 @@ Code generated by morph-spec (contracts, templates, implementation output) belon
|
|
|
368
368
|
|
|
369
369
|
---
|
|
370
370
|
|
|
371
|
-
*morph-spec v8.
|
|
371
|
+
*morph-spec v8.20.0 by [Polymorphism Tech](https://polymorphism.tech)*
|
package/claude-plugin.json
CHANGED
package/docs/CHEATSHEET.md
CHANGED
package/docs/QUICKSTART.md
CHANGED
package/framework/CLAUDE.md
CHANGED
|
@@ -79,6 +79,7 @@ Prefixo de todo comando: `morph-spec`. Flags/exemplos: `.morph/framework/CLI.md`
|
|
|
79
79
|
|-------|-------------|
|
|
80
80
|
| `morph-brainstorming` | Entender negócio, escanear stack, produzir proposal.md |
|
|
81
81
|
| `morph-stack-scan` | Detectar desvios de stack em projeto brownfield |
|
|
82
|
+
| `morph-uiux` | Ramo opcional uiux — design system, mockups, componentes, fluxos |
|
|
82
83
|
| `morph-plan` | Destilar use cases e produzir spec.md + mandate.md + tasks.json |
|
|
83
84
|
| `morph-implement` | Executar uma tarefa com auto-advance entre tasks |
|
|
84
85
|
| `morph-eval` | Aplicar rubricas e produzir score 0-10 |
|
|
@@ -88,7 +89,7 @@ Prefixo de todo comando: `morph-spec`. Flags/exemplos: `.morph/framework/CLI.md`
|
|
|
88
89
|
|
|
89
90
|
## Roteamento por tipo de trabalho
|
|
90
91
|
|
|
91
|
-
`workType` (`create --type <tipo>` ou classificado de `--request`) dimensiona o pipeline: `feature` completo, `bug` enxuto, `chore` fast-track (Gates 1/2 por política), `hotfix` scout→fix→gate humano→ship. Canônico: `MORPH.md` §2.1/§5.
|
|
92
|
+
`workType` (`create --type <tipo>` ou classificado de `--request`) dimensiona o pipeline: `feature` completo (+ ramo uiux quando há superfície de UI), `bug` enxuto, `chore` fast-track (Gates 1/2 por política), `hotfix` scout→fix→gate humano→ship. Canônico: `MORPH.md` §2.1/§5.
|
|
92
93
|
|
|
93
94
|
Features independentes rodam em paralelo, uma por git worktree (`create --worktree`/`worktree setup`), bloco de portas próprio + handoff.md. Fechamento: `finish <f> --pr|--merge`; agregado: `fleet`. Canônico: `MORPH.md` §2.2.
|
|
94
95
|
|
|
@@ -104,15 +105,6 @@ Drift entre `agents.json` e os `.md` gerados é detectado por `morph-spec doctor
|
|
|
104
105
|
|
|
105
106
|
## Regra de precedência de skills
|
|
106
107
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
| Em vez de | Use |
|
|
110
|
-
|-----------|-----|
|
|
111
|
-
| `superpowers:brainstorming` | `morph-brainstorming` |
|
|
112
|
-
| `superpowers:writing-plans` | `morph-plan` |
|
|
113
|
-
| `superpowers:executing-plans` | `morph-apply` |
|
|
114
|
-
| `superpowers:test-driven-development` | seguir `mandate.md` (TDD está embutido) |
|
|
115
|
-
|
|
116
|
-
As skills `morph-*` aplicam Gates e leem/produzem outputs nos paths corretos de `.morph/`. As `superpowers:*` são genéricas e não conhecem o contexto morph-spec.
|
|
108
|
+
Prefira `morph-*` a `superpowers:*` equivalentes (`brainstorming`→`morph-brainstorming`, `writing-plans`→`morph-plan`, `executing-plans`→`morph-apply`, `test-driven-development`→seguir `mandate.md`, TDD embutido): `morph-*` aplica Gates e paths corretos de `.morph/`; `superpowers:*` é genérico, sem esse contexto.
|
|
117
109
|
|
|
118
110
|
*MORPH-SPEC v5 by Polymorphism Tech*
|
package/framework/MORPH.md
CHANGED
|
@@ -12,19 +12,19 @@
|
|
|
12
12
|
|
|
13
13
|
Entre gates, você opera com autonomia total. O dev valida. Você executa.
|
|
14
14
|
|
|
15
|
-
| Situação
|
|
16
|
-
|
|
17
|
-
| Gate 1 / 2 / 3 aprovado
|
|
18
|
-
| Tarefa completada na fase implement
|
|
19
|
-
| Ambiguidade de escopo coberta pelo mandate
|
|
20
|
-
| Ambiguidade bloqueante (requisito ausente ou contraditório)
|
|
21
|
-
| Sub-agent retornou relatório (qualquer auto-score)
|
|
22
|
-
| Sub-agent com auto-score < 7
|
|
23
|
-
| Build/typecheck quebra
|
|
24
|
-
| Task implementada (código escrito)
|
|
25
|
-
| Score morph-eval ≥ 9
|
|
26
|
-
| Score morph-eval < 9 numa task
|
|
27
|
-
| Score morph-eval < 9 após 3 tentativas
|
|
15
|
+
| Situação | O que você faz |
|
|
16
|
+
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
|
|
17
|
+
| Gate 1 / 2 / 3 aprovado | Avançar para próxima fase imediatamente |
|
|
18
|
+
| Tarefa completada na fase implement | Iniciar a próxima task do tasks.json sem aguardar instrução |
|
|
19
|
+
| Ambiguidade de escopo coberta pelo mandate | Resolver conservadoramente e registrar em decisions.md |
|
|
20
|
+
| Ambiguidade bloqueante (requisito ausente ou contraditório) | UMA pergunta via AskUserQuestion |
|
|
21
|
+
| Sub-agent retornou relatório (qualquer auto-score) | Auto-score é triagem, não aprovação: a task só avança com morph-eval ≥ 9 |
|
|
22
|
+
| Sub-agent com auto-score < 7 | Re-despachar com feedback específico (ou corrigir inline) antes do morph-eval |
|
|
23
|
+
| Build/typecheck quebra | Corrigir antes de marcar tarefa como done |
|
|
24
|
+
| Task implementada (código escrito) | `morph-spec verify <feature> <task>` ANTES do juiz: vermelho = feedback ao loop sem gastar o morph-eval; verde → morph-eval avalia o que o código não pega |
|
|
25
|
+
| Score morph-eval ≥ 9 | Silêncio (aprovação implícita), próxima tarefa |
|
|
26
|
+
| Score morph-eval < 9 numa task | Loop de correção autônomo: re-implementar com feedback priorizado, até 3 tentativas, sem pausa humana |
|
|
27
|
+
| Score morph-eval < 9 após 3 tentativas | Escalar ao usuário (aceitar/continuar/pular) — único ponto de pausa do loop |
|
|
28
28
|
|
|
29
29
|
**Regra de ouro:** dúvida que não bloqueia → resolver e registrar; dúvida que bloqueia → uma pergunta, máximo. Vale **entre gates** (plan/implement/review) — **não** vale na abertura da feature: a fase proposal pode rodar em **modo entrevista** (escolhido na pergunta de abertura, `morph-brainstorming` Parte 2), onde perguntar até fechar o entendimento é o comportamento desejado.
|
|
30
30
|
|
|
@@ -36,16 +36,16 @@ Entre gates, você opera com autonomia total. O dev valida. Você executa.
|
|
|
36
36
|
|
|
37
37
|
O harness conhece o stack por padrão. Não pergunte sobre tecnologia a menos que haja ambiguidade real.
|
|
38
38
|
|
|
39
|
-
| Camada
|
|
40
|
-
|
|
41
|
-
| Backend
|
|
42
|
-
| ORM/DB
|
|
43
|
-
| IDs
|
|
44
|
-
| Classes
|
|
45
|
-
| Erros
|
|
46
|
-
| IA
|
|
47
|
-
| Frontend
|
|
48
|
-
| Jobs async | Hangfire — apenas quando há razão real
|
|
39
|
+
| Camada | Stack |
|
|
40
|
+
| ------------ | -------------------------------------------------------------------------------------------------- |
|
|
41
|
+
| Backend | .NET 10 + VSA (feature-folder: handler + validator + endpoint + errors + tests) |
|
|
42
|
+
| ORM/DB | EF Core + Neon (Postgres) |
|
|
43
|
+
| IDs | `Guid.CreateVersion7()` (nunca `Guid.NewGuid()`) |
|
|
44
|
+
| Classes | `sealed` por padrão |
|
|
45
|
+
| Erros | Result pattern com `result.Match()` (nunca exceptions como fluxo) |
|
|
46
|
+
| IA | Microsoft Agent Framework (MAF) — quando houver agentes |
|
|
47
|
+
| Frontend | Next.js App Router + Tailwind + Framer Motion + Shadcn |
|
|
48
|
+
| Jobs async | Hangfire — apenas quando há razão real |
|
|
49
49
|
|
|
50
50
|
Padrões proibidos automaticamente injetados no mandate:
|
|
51
51
|
- `Guid.NewGuid()` → `Guid.CreateVersion7()`
|
|
@@ -77,16 +77,16 @@ Os papéis não são exclusivos — numa sessão longa você transita entre eles
|
|
|
77
77
|
|
|
78
78
|
O fluxo padrão de uma feature tem quatro fases, cada uma com pasta dedicada em `.morph/features/{feature}/`. Estado autoritativo e commitado: `.morph/features/{feature}/feature.json` (status, approvalGates, outputs, tasks, gateDecisions, taskScores, archivedAt); `.morph/state.json` na raiz é só índice fino gitignored derivado dele; identidade do projeto em `.morph/config/config.json` (commitado).
|
|
79
79
|
|
|
80
|
-
| Fase
|
|
81
|
-
|
|
82
|
-
| proposal
|
|
83
|
-
| plan
|
|
84
|
-
| implement
|
|
85
|
-
| review
|
|
80
|
+
| Fase | Pasta | Gate | O que termina a fase |
|
|
81
|
+
| ------------- | ---------------- | ----------------------- | ------------------------------------------------- |
|
|
82
|
+
| proposal | `0-proposal/` | Gate 1 (trust-aware) | `proposal.md` aprovado e commitado |
|
|
83
|
+
| plan | `2-plan/` | Gate 2 (trust-aware) | `spec.md`, `mandate.md`, `tasks.json` aprovados |
|
|
84
|
+
| implement | `3-implement/` | Nenhum | Todas as tasks do tasks.json com status `done` |
|
|
85
|
+
| review | `4-review/` | Gate 3 (trust-aware) | `review-report.md` aprovado e commitado |
|
|
86
86
|
|
|
87
87
|
A fase `proposal` tem dois **modos de descoberta**, escolhidos pelo usuário na abertura (só `workType: feature`/`bug` — `chore`/`hotfix` nascem em `implement`): **entrevista** (uma pergunta por vez até a árvore de decisões abertas zerar; Gate 1 pausa sempre) e **automático** (até 4 perguntas em lote; Gate 1 trust-aware). Nos dois modos a varredura do ambiente roda **antes** de qualquer pergunta — fato que `morph-stack-scan` ou o acervo de use cases responde não vira pergunta. Detalhes em `morph-brainstorming`.
|
|
88
88
|
|
|
89
|
-
A fase `1-design/`
|
|
89
|
+
A fase `1-design/` é opcional — critério objetivo de entrada em §2.1.
|
|
90
90
|
|
|
91
91
|
Não avance de fase sem o gate correspondente ter sido confirmado.
|
|
92
92
|
|
|
@@ -95,12 +95,14 @@ Não avance de fase sem o gate correspondente ter sido confirmado.
|
|
|
95
95
|
Nem todo trabalho merece o pipeline completo. Cada feature nasce com **identidade** (`name` = slug + `description` obrigatória) e um **workType** (`morph-spec create <f> --description "<o quê/porquê>" --type <tipo>`, ou classificado de `--request "<pedido>"`, que também semeia a descrição) que dimensiona o pipeline:
|
|
96
96
|
|
|
97
97
|
| Tipo | Pipeline | Gates |
|
|
98
|
-
|
|
98
|
+
| ------ | ---------- | ------- |
|
|
99
99
|
| `feature` | proposal → [uiux] → plan → implement → review (completo) | 1, 2, 3 |
|
|
100
100
|
| `bug` | repro+diagnóstico enxuto (proposal lean) → plan enxuto → implement → review | 1, 2, 3 |
|
|
101
101
|
| `chore` | fast-track: direto para implement (Gates 1/2 carimbados por política no nascimento) → review leve | só 3 |
|
|
102
102
|
| `hotfix` | scout (diagnóstico read-only) → fix cirúrgico → **aprovação humana obrigatória** → test loop → ship | 3 (humano sempre) |
|
|
103
103
|
|
|
104
|
+
**Ramo uiux (critério objetivo):** feature/bug que cria ou altera superfície de UI (componente, página, tela, estilo, fluxo de navegação) toma o ramo `1-design/` via `morph-spec advance {feature} --design`; sem superfície de UI, direto para plan. Skill: `morph-uiux`. Avaliado por `morph-proposal`/`morph-brainstorming` no fecho do Gate 1 — não redecida em nenhum outro ponto do pipeline.
|
|
105
|
+
|
|
104
106
|
**Como classificar (router):** sinais determinísticos primeiro — `morph-spec create --request "<texto>"` roda o detector por keywords (hotfix: "produção caiu/urgente/incident/p0"; bug: "bug/corrigir/exception/regressão"; chore: "typo/rename/bump/config/docs/cleanup"). As keywords casam como **palavra inteira** ("group0" não é `p0`, "prefix" não é `fix`, "debug" não é `bug`) — casar demais pularia gates num pedido inócuo; por isso plural e flexão são listados explicitamente ("bugs", "incidentes", "configs"). Confiança `high` → usa o tipo. Empate (`tie`) ou nenhum sinal (`none`) → o comando sai com código 2 e os candidatos; **você decide como roteador** e re-roda com `--type`. Só vale uma `AskUserQuestion` quando o pedido é genuinamente indeterminado.
|
|
105
107
|
|
|
106
108
|
**Como o skip funciona:** `chore`/`hotfix` têm os gates `proposal`/`plan` carimbados no nascimento com `approvedBy: "policy:{tipo}"`. Como `derivePhase` é gate-aware, o trabalho já nasce em `implement` — sem tocar `phases.json`. Artefatos reutilizam os nomes canônicos (hotfix escreve brief curto em `proposal.md`; ambos escrevem `2-plan/tasks.json` mínimo de 1-3 tasks para ligar trace/score/dag).
|
|
@@ -212,7 +214,7 @@ Gates são pontos de **pausa potencial**. Em `trust: "auto"` (default), auto-pas
|
|
|
212
214
|
**Sinais de risco que forçam pausa em auto** (`gate-check` aplica esta tabela via `shouldPauseGate` — fonte única; sinal que só a sessão conhece escala via `gate-decision` manual):
|
|
213
215
|
|
|
214
216
|
| Sinal | Threshold | Quando aplica |
|
|
215
|
-
|
|
217
|
+
| ------- | ----------- | --------------- |
|
|
216
218
|
| `designSystemDivergence` | true | Brainstorming detecta fontes conflitantes (spec antigo vs bundle local) |
|
|
217
219
|
| `standardsViolations` | array.length > 0 | Mandate ou implementation viola padrões proibidos |
|
|
218
220
|
| `evalScore` | < 9 | score composto da feature (via morph-review) abaixo do mínimo |
|
|
@@ -220,7 +222,7 @@ Gates são pontos de **pausa potencial**. Em `trust: "auto"` (default), auto-pas
|
|
|
220
222
|
| `workType` | === 'hotfix' | Gate 3 pausa SEMPRE (detalhe abaixo, "Gates por tipo de trabalho") |
|
|
221
223
|
|
|
222
224
|
| Gate | Sinais | Skill responsável |
|
|
223
|
-
|
|
225
|
+
| ------ | -------- | -------------------- |
|
|
224
226
|
| 1 — Proposta | `designSystemDivergence`, `standardsViolations` (improvável) | `morph-brainstorming` |
|
|
225
227
|
| 2 — Plano | Gate 1 + `taskCount`, `standardsViolations` em mandate | `morph-plan` |
|
|
226
228
|
| 3 — Review | `evalScore` composite, `standardsViolations` em implementation | `morph-review` |
|
|
@@ -287,7 +289,7 @@ morph-spec report-check <feature> [task] --json
|
|
|
287
289
|
```
|
|
288
290
|
|
|
289
291
|
| veredito | o que significa | ação |
|
|
290
|
-
|
|
292
|
+
| --- | --- | --- |
|
|
291
293
|
| `ok` | relatório presente e com os 4 itens | siga o fluxo |
|
|
292
294
|
| `report-incomplete` | relatório existe, faltam itens (ele lista quais) | complete a partir da mensagem de retorno, carimbe **DEGRADADO** |
|
|
293
295
|
| `work-landed-report-missing` | sem relatório, mas os `outputs` da task estão no disco | **não re-despache** — grave você mesmo o relatório canônico a partir da mensagem de retorno, carimbado **DEGRADADO** |
|
|
@@ -330,27 +332,23 @@ Não invoque uma skill fora do momento indicado.
|
|
|
330
332
|
|
|
331
333
|
Path de cada skill: `framework/skills/core/{nome}/SKILL.md`.
|
|
332
334
|
|
|
333
|
-
| Skill
|
|
334
|
-
|
|
335
|
-
| **morph-proposal**
|
|
336
|
-
| **morph-apply**
|
|
337
|
-
| morph-brainstorming
|
|
338
|
-
| morph-stack-scan
|
|
339
|
-
| morph-
|
|
340
|
-
| morph-
|
|
341
|
-
| morph-
|
|
342
|
-
| morph-
|
|
343
|
-
| morph-
|
|
344
|
-
| morph-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
Slash commands são atalhos: o agente pode chamar `Skill(morph-proposal)` diretamente quando o usuário pede "use /morph-proposal".
|
|
352
|
-
|
|
353
|
-
Cada skill contém instruções passo a passo. Leia, siga, não desvie sem justificativa no recap.md. Apenas `framework/skills/core/` é instalado. Nenhuma skill deve ser invocada proativamente por um hook ou script — skills são instrumentos do modelo, você decide quando a situação pede o rigor que a skill fornece.
|
|
335
|
+
| Skill | Quando invocar |
|
|
336
|
+
| ----------------------- | --------------------------------------------------------------------------- |
|
|
337
|
+
| **morph-proposal** | **Orquestrador**: brainstorming → Gate 1 → plan → Gate 2 (entry point) |
|
|
338
|
+
| **morph-apply** | **Orquestrador**: DAG-adaptive implement loop → review → Gate 3 |
|
|
339
|
+
| morph-brainstorming | Invocada pela morph-proposal — entendimento de negócio + stack-scan |
|
|
340
|
+
| morph-stack-scan | Detecta stack atual; curto-circuita em greenfield |
|
|
341
|
+
| morph-uiux | Ramo opcional uiux (§2.1) — design system, mockups, componentes, fluxos |
|
|
342
|
+
| morph-plan | Invocada pela morph-proposal — produz spec/mandate/tasks.json |
|
|
343
|
+
| morph-implement | Invocada pela morph-apply — executa cada task |
|
|
344
|
+
| morph-eval | Após concluir uma task ou fase |
|
|
345
|
+
| morph-review | Invocada pela morph-apply — produz review-report + Gate 3 |
|
|
346
|
+
| morph-hotfix | **Orquestrador**: ADW cirúrgico de hotfix (scout → fix → gate humano → ship) |
|
|
347
|
+
| morph-standards | Quando precisar localizar ou aplicar um standard específico |
|
|
348
|
+
|
|
349
|
+
Slash commands (`/morph-proposal`, `/morph-apply`, `/morph-hotfix` — linhas acima) são atalhos que invocam a `Skill()` correspondente; o agente pode chamá-la direto quando o usuário pede "use /morph-proposal".
|
|
350
|
+
|
|
351
|
+
Cada skill contém instruções passo a passo — leia, siga, não desvie sem justificativa no recap.md. Só `framework/skills/core/` é instalado. Nenhuma skill é invocada proativamente por hook ou script — você decide quando a situação pede o rigor dela.
|
|
354
352
|
|
|
355
353
|
---
|
|
356
354
|
|
package/framework/docs/CLI.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
## Gates e estado
|
|
8
8
|
|
|
9
|
-
- **`morph-spec approve <feature> <gate> --mode auto`** — aprova um gate (`proposal`/`plan`/`review`) em `trust: auto`. **O Gate 3 exige `4-review/evaluator-report.md`**: sem o relatório do avaliador independente o comando recusa (exit 1). Se o dispatch do avaliador for impossível nesta sessão, aprove com `--self-assessed` — a degradação é gravada em `approvalGates.review.selfAssessed` e aparece marcada no `morph-spec list`. `--force` **não** dispensa esta regra (é só para ordem de gate). **Exceção `hotfix`:** esse tipo nunca despacha o avaliador (`morph-hotfix` §7); o Gate 3 exige `4-review/review-report.md` no lugar do `evaluator-report.md`, e a assinatura humana continua obrigatória via `--approver` (o backstop de `--mode auto` acima permanece recusando).
|
|
9
|
+
- **`morph-spec approve <feature> <gate> --mode auto`** — aprova um gate (`proposal`/`uiux`/`plan`/`review`) em `trust: auto`. **`uiux`** é o único gate cujo `AskUserQuestion` o hook `state-sync.js` não reconhece por texto (só casa "Gate 1/2/3") — aprove-o sempre explicitamente por este comando ou por `advance`, nunca contando com o hook. **O Gate 3 exige `4-review/evaluator-report.md`**: sem o relatório do avaliador independente o comando recusa (exit 1). Se o dispatch do avaliador for impossível nesta sessão, aprove com `--self-assessed` — a degradação é gravada em `approvalGates.review.selfAssessed` e aparece marcada no `morph-spec list`. `--force` **não** dispensa esta regra (é só para ordem de gate). **Exceção `hotfix`:** esse tipo nunca despacha o avaliador (`morph-hotfix` §7); o Gate 3 exige `4-review/review-report.md` no lugar do `evaluator-report.md`, e a assinatura humana continua obrigatória via `--approver` (o backstop de `--mode auto` acima permanece recusando).
|
|
10
10
|
- **`morph-spec advance <feature>`** — aprova o gate da fase corrente **e** cria a pasta da próxima fase num passo só (`--design` toma o ramo opcional de uiux a partir da proposta).
|
|
11
11
|
- **`morph-spec score <feature> <task> <score> [--dims a,c,q,t]`** — grava `taskScores` no feature.json com timestamp server-side; **nunca edite taskScores à mão**. Em PowerShell, cite o valor de `--dims` entre aspas (`--dims "9.5,9,9,9"`) — sem aspas, a lista pode chegar como tokens separados; o parser aceita ambas as formas, mas citar evita qualquer ambiguidade.
|
|
12
12
|
- **`morph-spec gate-check <feature> <gate> [--signals <json>] [--trust <mode>] [--json]`** — o caminho **default**: coleta do disco os sinais que `shouldPauseGate` (risk-detector.js) já sabe avaliar (`workType`, `taskCount`, verificação, sha/diffstat), decide a pausa e persiste `gateDecisions.{gate}`. `--signals` aceita só as chaves que o disco genuinamente não expõe sozinho — `designSystemDivergence`, `standardsViolations`, `evalScore` — qualquer outra chave é ignorada com aviso. No **review**, o `evalScore` real vem do token `**Composite-Score:** {n.n}` do `evaluator-report.md` (o avaliador o grava por contrato); sem o token, cai no proxy (média das `taskScores`); `--signals` vence ambos. Um stamp de `verification` com status `fail` (último `morph-spec verify` vermelho) **força pausa** em qualquer gate.
|
package/framework/phases.json
CHANGED
|
@@ -4,7 +4,7 @@ description: Guia a criação de uma landing page nova ponta-a-ponta a partir do
|
|
|
4
4
|
version: core
|
|
5
5
|
when-to-invoke: ao iniciar um novo projeto de LP com o template Umbraco genérico
|
|
6
6
|
user-invokable: true
|
|
7
|
-
cliVersion: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
stacks:
|
|
9
9
|
- umbraco
|
|
10
10
|
---
|
|
@@ -4,7 +4,7 @@ description: Migra uma landing page existente (React/Vite, Next.js estático ou
|
|
|
4
4
|
version: core
|
|
5
5
|
when-to-invoke: ao receber instrução "use /migrate-lp-to-umbraco {projeto}" do usuário, ou quando o usuário descrever necessidade de migrar uma LP para Umbraco
|
|
6
6
|
user-invokable: true
|
|
7
|
-
cliVersion: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
stacks:
|
|
9
9
|
- umbraco
|
|
10
10
|
---
|
|
@@ -4,7 +4,7 @@ description: Orquestra a execução autônoma de tasks de uma feature morph-spec
|
|
|
4
4
|
version: core
|
|
5
5
|
when-to-invoke: após Gate 2 aprovado, ao receber instrução "use /morph-apply" ou "implementar feature"
|
|
6
6
|
user-invokable: true
|
|
7
|
-
cliVersion: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-apply
|
|
@@ -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: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-brainstorming
|
|
@@ -88,7 +88,7 @@ options:
|
|
|
88
88
|
|
|
89
89
|
1. Produza `proposal.md` em `.morph/features/{feature}/0-proposal/` com:
|
|
90
90
|
- **Problema:** o que está sendo resolvido e para quem (máx. 2 parágrafos)
|
|
91
|
-
- **Escopo:** o que está incluído e o que está explicitamente excluído
|
|
91
|
+
- **Escopo:** o que está incluído e o que está explicitamente excluído — registre se a mudança cria ou altera superfície de UI (componente, página, tela, estilo, fluxo de navegação): é o fato que decide o roteamento para o ramo uiux na `morph-proposal` (critério objetivo em `MORPH.md` §2.1)
|
|
92
92
|
- **Usuários e fluxos críticos:** quem usa e qual é o caminho principal
|
|
93
93
|
- **Stack:** confirme o stack padrão ou documente desvios aprovados
|
|
94
94
|
- **Riscos e dependências:** o que pode dar errado, o que esta feature depende
|
|
@@ -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: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-eval
|
|
@@ -4,7 +4,7 @@ description: ADW cirúrgico de hotfix — resolve uma queda/bug crítico de prod
|
|
|
4
4
|
version: core
|
|
5
5
|
when-to-invoke: ao receber "/morph-hotfix {feature}", quando a morph-proposal classifica o pedido como workType hotfix (Passo 0), ou o usuário diz "produção caiu / hotfix / urgente"
|
|
6
6
|
user-invokable: true
|
|
7
|
-
cliVersion: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-hotfix
|
|
@@ -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: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-implement
|
|
@@ -4,7 +4,7 @@ description: Guia a produção dos artefatos de planejamento de uma feature (use
|
|
|
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: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-plan
|
|
@@ -132,6 +132,8 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
|
|
|
132
132
|
- `agent`: o `id` da persona (chave do objeto `agents`, sem prefixo `morph-`) cujo `domains` cobre o `group`/domínio da task — o mesmo casamento que `morph-implement` §3 e `morph-apply` §3b fariam manualmente a cada dispatch; aqui você faz uma vez, no plano.
|
|
133
133
|
- `standards`: o array `standards` dessa persona, mais qualquer standard adicional que a task especificamente exija (some, não substitua).
|
|
134
134
|
|
|
135
|
+
**Task que cria ou altera superfície de UI** (componente, página, estilo, fluxo de navegação) carimba `agent: "ui-designer"` — inclusive numa feature que não tomou o ramo uiux (MORPH.md §2.1): o critério de agente é por domínio da task, não por fase percorrida.
|
|
136
|
+
|
|
135
137
|
Uma task cujo domínio não bate com nenhuma persona registrada (ex.: task pura de config/docs) fica sem `agent` — `morph-implement` cai no fallback de Read de `agents.json` nesse caso.
|
|
136
138
|
|
|
137
139
|
**O `doneCriteria` carrega a pós-condição LITERAL.** Este é o elo que amarra a cadeia inteira: a pós-condição escrita em linguagem de negócio chega **sem tradução** ao critério que o `morph-spec verify` e o `morph-eval` cobram. Copie o texto da pós-condição, prefixado pelo seu rótulo (`"P2 — Cada veterinário traz..."`). Reescrever com outras palavras aqui é exatamente o ponto em que o requisito se perde hoje.
|
|
@@ -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: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-proposal
|
|
@@ -98,6 +98,13 @@ morph-spec approve {feature} proposal --mode auto
|
|
|
98
98
|
morph-spec advance {feature}
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
+
### 3a. Roteamento uiux (após o Gate 1)
|
|
102
|
+
|
|
103
|
+
Critério objetivo em `MORPH.md` §2.1: a mudança cria ou altera superfície de UI (componente, página, tela, estilo, fluxo de navegação)?
|
|
104
|
+
|
|
105
|
+
- **Sim** → em vez do `advance {feature}` do passo 3, rode `morph-spec advance {feature} --design` (cria `1-design/`) e invoque `Skill(morph-uiux)`. Ela conduz a fase de design e, com o Gate uiux aprovado, devolve o controle aqui — siga para o passo 4.
|
|
106
|
+
- **Não** → nenhuma ação extra; o `advance {feature}` do passo 3 já criou `2-plan/` direto.
|
|
107
|
+
|
|
101
108
|
### 4. Verificar retomada antes de morph-plan
|
|
102
109
|
|
|
103
110
|
- Se `.morph/features/{feature}/2-plan/spec.md` já existe: pular para passo 6 (Gate 2).
|
|
@@ -129,6 +136,7 @@ Mesma mecânica do passo 3: a decisão já foi tomada e persistida pela `morph-p
|
|
|
129
136
|
## Output esperado
|
|
130
137
|
|
|
131
138
|
- `.morph/features/{feature}/0-proposal/proposal.md`
|
|
139
|
+
- `.morph/features/{feature}/1-design/` (se o ramo uiux — passo 3a — foi tomado)
|
|
132
140
|
- `.morph/features/{feature}/2-plan/spec.md`
|
|
133
141
|
- `.morph/features/{feature}/2-plan/mandate.md`
|
|
134
142
|
- `.morph/features/{feature}/2-plan/tasks.json`
|
|
@@ -139,6 +147,7 @@ Mesma mecânica do passo 3: a decisão já foi tomada e persistida pela `morph-p
|
|
|
139
147
|
- `.morph/framework/MORPH.md` — charter NLH completo
|
|
140
148
|
- `.morph/framework/MORPH.md` §2.1 — roteamento por tipo de trabalho (Passo 0)
|
|
141
149
|
- `framework/skills/core/morph-brainstorming/SKILL.md`
|
|
150
|
+
- `framework/skills/core/morph-uiux/SKILL.md` — invocada no passo 3a quando a feature toma o ramo uiux
|
|
142
151
|
- `framework/skills/core/morph-plan/SKILL.md`
|
|
143
152
|
- `framework/skills/core/morph-hotfix/SKILL.md` — pipeline invocado pelo branch `hotfix` do Passo 0
|
|
144
153
|
- `.morph/framework/MORPH.md` §5 — regras de pausa de gate (trust mode)
|
|
@@ -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: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-review
|
|
@@ -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: "8.
|
|
7
|
+
cliVersion: "8.20.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: "8.
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-standards
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: morph-uiux
|
|
3
|
+
description: Conduz a fase opcional de UI/UX — design system, mockups, componentes e fluxos — entre o Gate 1 e o plan, despachando a persona ui-designer para o trabalho visual.
|
|
4
|
+
version: core
|
|
5
|
+
when-to-invoke: ao tomar o ramo uiux (morph-spec advance --design), depois do Gate 1 e antes do morph-plan
|
|
6
|
+
user-invokable: true
|
|
7
|
+
cliVersion: "8.20.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# morph-uiux
|
|
11
|
+
|
|
12
|
+
## Objetivo
|
|
13
|
+
|
|
14
|
+
Produzir os artefatos de `1-design/` com qualidade de produção — boas práticas de UI/UX, usabilidade, consistência com o padrão visual do projeto, tecnologia de ponta do stack instalado — e apresentar o Gate uiux antes de entregar a feature ao `morph-plan`.
|
|
15
|
+
|
|
16
|
+
## Quando invocar
|
|
17
|
+
|
|
18
|
+
Ao tomar o ramo opcional uiux: feature/bug cuja mudança cria ou altera superfície de UI (componente, página, tela, estilo, fluxo de navegação) — critério objetivo em `MORPH.md` §2.1. Normalmente invocada pela `morph-proposal` logo após o Gate 1, via `morph-spec advance {feature} --design`. Sem essa condição a feature segue direto para `morph-plan` e esta skill nunca é chamada.
|
|
19
|
+
|
|
20
|
+
## O que fazer
|
|
21
|
+
|
|
22
|
+
1. **Garanta os insumos em contexto** — use a tool Read se não estiver:
|
|
23
|
+
- `.morph/features/{feature}/0-proposal/proposal.md` — problema, escopo, usuários e fluxos.
|
|
24
|
+
- `.morph/context/design-system.md` (se existir) — o design system **vivo** do projeto: toda decisão de token/componente parte dele, nunca do zero. Ausente → greenfield de design; use `.morph/framework/templates/context/design-system.md` como forma de partida.
|
|
25
|
+
- `.morph/config/config.json` → `project.stack` — decide a tecnologia de ponta a aplicar (`nextjs` → Tailwind + shadcn + Framer Motion; outro stack → o equivalente idiomático dele). Nunca hardcode Next.js quando o stack detectado é outro.
|
|
26
|
+
- `.morph/features/{feature}/0-proposal/stack-scan.md` (se existir) — desvios de stack já detectados.
|
|
27
|
+
|
|
28
|
+
2. **Princípios de qualidade** (decisão do produto — não são opcionais):
|
|
29
|
+
- **Usabilidade e acessibilidade:** WCAG AA, todos os estados de componente interativo cobertos (default/hover/focus/disabled/loading/error) — não só o caminho feliz.
|
|
30
|
+
- **Consistência:** reusa tokens/componentes existentes de `.morph/context/design-system.md` antes de criar novos; um token novo precisa de justificativa (o existente não cobre o caso).
|
|
31
|
+
- **Tecnologia de ponta condicionada ao stack real** (passo 1) — nunca a suposição de que o projeto é Next.js.
|
|
32
|
+
- **Sistemas, não telas isoladas** — mesmo critério da persona `ui-designer`: componentes reutilizáveis antes de composições de uso único.
|
|
33
|
+
|
|
34
|
+
3. **Despache `morph-ui-designer`** para o trabalho visual — dispatch é o default aqui (domínio diferente do Orchestrator, MORPH.md §6). `morph-ui-designer` tem `Read/Write/Edit/Glob/Grep` + MCPs `stitch`/`gemini-image`/`playwright`/`context7`, mas **não tem Bash** — não peça build, testes nem `morph-spec` a ele; isso é do orquestrador.
|
|
35
|
+
|
|
36
|
+
**Fallback — caminho normal fora de stack Next.js** (`ui-designer.stack = ["nextjs"]` em `agents.json`, então em qualquer outro stack o subagent não está registrado): `general-purpose` colando o campo `persona` (Read em `.morph/framework/agents.json`) no prompt, registrando o fallback no relatório. Isto não é uma exceção rara — é o caminho normal para projetos não-Next.js.
|
|
37
|
+
|
|
38
|
+
Template do prompt (contrato do relatório em forma curta — copia o padrão de `morph-implement` §4, sem a cláusula de build/isolamento, que não se aplica a um agente sem Bash):
|
|
39
|
+
```
|
|
40
|
+
Produzir os artefatos de UI/UX de [feature] em `.morph/features/{feature}/1-design/`.
|
|
41
|
+
|
|
42
|
+
Contexto: [problema/escopo do proposal.md] + design system atual
|
|
43
|
+
(`.morph/context/design-system.md`, tokens/componentes a reusar) + stack: [stack real do config.json]
|
|
44
|
+
|
|
45
|
+
Produza, NESTA ORDEM — design-system.md primeiro, os demais só como aplicável ao escopo:
|
|
46
|
+
1. `design-system.md` — tokens (cor, tipografia, espaço, motion) consistentes com o projeto
|
|
47
|
+
2. `mockups.md` — descrição estruturada de cada tela nova/alterada (+ imagem via MCP
|
|
48
|
+
gemini-image/stitch quando disponível; fallback: descrição textual detalhada)
|
|
49
|
+
3. `components.md` — inventário de componentes novos/reusados, com props e os estados do
|
|
50
|
+
princípio 2 acima
|
|
51
|
+
4. `flows.md` — fluxos de navegação/interação entre as telas
|
|
52
|
+
|
|
53
|
+
Done quando: os artefatos aplicáveis existem e cada um cita os tokens/componentes do
|
|
54
|
+
design-system.md em vez de reinventar valores soltos.
|
|
55
|
+
|
|
56
|
+
Contrato do relatório final:
|
|
57
|
+
1. GRAVE um relatório por artefato produzido em
|
|
58
|
+
`1-design/reports/[artefato]-report.md` (ex.: `1-design/reports/design-system-report.md`)
|
|
59
|
+
ANTES de encerrar — é o retorno autoritativo, não a sua mensagem final (cortesia
|
|
60
|
+
best-effort, pode não chegar inteira). NÃO chame SendMessage.
|
|
61
|
+
2. Você não tem Bash — não rode `morph-spec`, build nem testes; a aprovação do Gate uiux
|
|
62
|
+
e qualquer comando CLI são do orquestrador.
|
|
63
|
+
3. NÃO toque em tasks.json, feature.json, state.json nem no board de sessão.
|
|
64
|
+
|
|
65
|
+
Cada relatório contém: (1) o que foi feito em 2-3 frases, (2) o artefato produzido,
|
|
66
|
+
(3) decisões de design e por quê (token reusado vs. novo, padrão de acessibilidade
|
|
67
|
+
aplicado), (4) auto-score 0-10 com justificativa em uma linha. Relatório ausente, oco,
|
|
68
|
+
ou sem os 4 itens, é falha de protocolo.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Após o retorno: **leia primeiro** `1-design/reports/*-report.md` — valor de retorno autoritativo, a mensagem de texto é atalho best-effort quando chega inteira. `design-system.md` é o único output obrigatório (`phases.json → uiux.requiredOutputs`); sem ele em disco, `morph-spec advance` recusa avançar — confirme que existe antes de rodar `advance` no passo 6.
|
|
72
|
+
|
|
73
|
+
4. **Atualize o design system vivo do projeto** — se a Parte 3 introduziu tokens/componentes novos, aplique o mesmo protocolo do `morph-brainstorming` (Parte 0): atualize `.morph/context/design-system.md` com a adição e uma entrada de changelog (data, motivo). `1-design/design-system.md` é o artefato **da feature** (o que ela usa/introduz); `.morph/context/design-system.md` é o acervo vivo do **projeto** — não confunda os dois.
|
|
74
|
+
|
|
75
|
+
5. **Os artefatos alimentam o `morph-plan` seguinte.** Use cases e tasks de UI referenciam `1-design/mockups.md`/`components.md` **por path** (ex.: doneCriteria citando a seção do mockup) — não redigite conteúdo visual em `spec.md`.
|
|
76
|
+
|
|
77
|
+
6. Apresente o Gate uiux.
|
|
78
|
+
|
|
79
|
+
Rode `morph-spec gate-check {feature} uiux [--json]` — mesma mecânica de `morph-plan`/`morph-review`: lê `trust`, decide via `shouldPauseGate` e persiste `gateDecisions.uiux` com timestamp server-side. Divergência de design-system detectada aqui (fonte do projeto vs. o que a feature precisa) é uma das poucas chaves que `--signals` aceita sobrescrever:
|
|
80
|
+
```
|
|
81
|
+
morph-spec gate-check {feature} uiux --signals '{"designSystemDivergence":true}'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Se `pause === true`**, use `AskUserQuestion`:
|
|
85
|
+
```
|
|
86
|
+
question: "Gate uiux — Design de {feature} aprovado?{ reason ? ' Sinal: ' + reason : '' }"
|
|
87
|
+
header: "Gate uiux"
|
|
88
|
+
options:
|
|
89
|
+
- { label: "aprovado, prosseguir", description: "Aceitar design-system/mockups/components/flows e avançar para o plano" }
|
|
90
|
+
- { label: "preciso ajustar", description: "Apontar mudanças no design antes de prosseguir" }
|
|
91
|
+
- { label: "cancelar feature", description: "Abortar" }
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Aguardar resposta. Se "preciso ajustar", aplicar e reapresentar.
|
|
95
|
+
|
|
96
|
+
**Divergência do hook state-sync — só neste gate:** ao contrário de Gate 1/2/3, o hook `state-sync.js` (`gateFromQuestion`) não reconhece o texto "Gate uiux" — uma resposta "aprovado" aqui **não** grava o gate sozinha. Depois do "aprovado", grave explicitamente:
|
|
97
|
+
```
|
|
98
|
+
morph-spec approve {feature} uiux --approver <quem respondeu>
|
|
99
|
+
# ou, para já aprovar e criar 2-plan/ num passo só:
|
|
100
|
+
morph-spec advance {feature} --approver <quem respondeu>
|
|
101
|
+
```
|
|
102
|
+
(o `--approver` importa aqui: sem ele, num terminal não-interativo `advance`/`approve` resolvem `approvedBy: "auto"` — que MORPH.md §5 proíbe registrar quando quem aprovou foi um humano.)
|
|
103
|
+
|
|
104
|
+
**Se `pause === false`** (auto-aprovação, sem `AskUserQuestion`), exibir summary curto e já aprovar via CLI:
|
|
105
|
+
```
|
|
106
|
+
## Gate uiux (auto-aprovado)
|
|
107
|
+
|
|
108
|
+
**Design system:** {tokens novos, se houver} | **Mockups:** {N telas}
|
|
109
|
+
**Components:** {N novos / N reusados} | **Flows:** {N fluxos}
|
|
110
|
+
```
|
|
111
|
+
```
|
|
112
|
+
morph-spec advance {feature}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Os 4 outputs de `1-design/` (`protected: true, approvalGate: 'uiux'`) travam na aprovação — retrabalho de design depois do gate passa pelo gate de novo (revogar, ajustar, reapresentar), nunca por Edit direto no arquivo travado.
|
|
116
|
+
|
|
117
|
+
**Próximo passo (não é desta skill):** com o Gate uiux aprovado e `2-plan/` criado, devolva o controle a quem invocou (`morph-proposal`, passo 4/5) — ela invoca `Skill(morph-plan)`. Não invoque `morph-plan` diretamente daqui.
|
|
118
|
+
|
|
119
|
+
## Output esperado
|
|
120
|
+
|
|
121
|
+
- `.morph/features/{feature}/1-design/design-system.md` — obrigatório
|
|
122
|
+
- `.morph/features/{feature}/1-design/mockups.md`, `components.md`, `flows.md` — conforme o escopo exigir
|
|
123
|
+
- `.morph/features/{feature}/1-design/reports/*-report.md` — relatório(s) bruto(s) do `morph-ui-designer` despachado no passo 3
|
|
124
|
+
- `.morph/context/design-system.md` atualizado (se tokens/componentes novos entraram) com entrada de changelog
|
|
125
|
+
- Gate uiux registrado aprovado em `.morph/features/{feature}/feature.json` (autoritativo)
|
|
126
|
+
|
|
127
|
+
## Referências
|
|
128
|
+
|
|
129
|
+
- `.morph/framework/MORPH.md` §2.1 — critério objetivo de entrada no ramo uiux
|
|
130
|
+
- `.morph/framework/MORPH.md` §6 — protocolo de dispatch e contrato do relatório final
|
|
131
|
+
- `.morph/framework/MORPH.md` §5 — regras de pausa de gate (trust mode)
|
|
132
|
+
- `.morph/framework/agents.json` — persona `ui-designer` (tools, MCPs, standards)
|
|
133
|
+
- `.morph/framework/templates/context/design-system.md` — forma de partida quando o projeto não tem design system vivo
|
|
134
|
+
- `framework/skills/core/morph-brainstorming/SKILL.md` — protocolo de reconciliação/changelog do design-system vivo (Parte 0), reaplicado no passo 4
|
|
135
|
+
- `framework/skills/core/morph-plan/SKILL.md` — consome os artefatos desta fase por path
|