@polymorphism-tech/morph-spec 8.47.0 → 9.0.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 (222) hide show
  1. package/CLAUDE.md +48 -39
  2. package/README.md +3 -4
  3. package/bin/morph-spec.js +37 -51
  4. package/bin/validate.js +3 -111
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +1 -1
  7. package/docs/QUICKSTART.md +1 -1
  8. package/framework/CLAUDE.md +41 -101
  9. package/framework/MORPH.md +95 -252
  10. package/framework/agents.json +75 -18
  11. package/framework/commands/morph-apply.md +5 -28
  12. package/framework/commands/morph-archive.md +1 -1
  13. package/framework/commands/morph-hotfix.md +8 -8
  14. package/framework/commands/morph-infra.md +1 -1
  15. package/framework/commands/morph-preflight.md +2 -3
  16. package/framework/commands/morph-proposal.md +2 -50
  17. package/framework/commands/morph-status.md +3 -3
  18. package/framework/docs/CLI.md +585 -286
  19. package/framework/evals/review-checklist.md +82 -41
  20. package/framework/hooks/README.md +10 -11
  21. package/framework/hooks/claude-code/core/comment-guard.js +1 -1
  22. package/framework/hooks/claude-code/core/denylist.json +33 -3
  23. package/framework/hooks/claude-code/core/enforce-phase-writes.js +16 -20
  24. package/framework/hooks/claude-code/core/gate-guard.js +2 -11
  25. package/framework/hooks/claude-code/core/pre-bash-denylist.js +38 -0
  26. package/framework/hooks/claude-code/core/protect-spec-files.js +30 -242
  27. package/framework/hooks/claude-code/core/state-sync.js +7 -21
  28. package/framework/hooks/claude-code/core/telemetry-log.js +3 -3
  29. package/framework/hooks/claude-code/core/validate-completion.js +33 -97
  30. package/framework/hooks/claude-code/core/warn-bash-source-write.js +31 -0
  31. package/framework/hooks/claude-code/core/worktree-context.js +5 -4
  32. package/framework/hooks/claude-code/statusline.py +55 -41
  33. package/framework/hooks/package.json +3 -0
  34. package/framework/hooks/shared/activity-logger.js +1 -1
  35. package/framework/hooks/shared/build-check.js +10 -6
  36. package/framework/hooks/shared/command-tokens.js +169 -0
  37. package/framework/hooks/shared/comment-rules.js +1 -1
  38. package/framework/hooks/shared/comment-scanner.js +10 -23
  39. package/framework/hooks/shared/comment-stripper.js +1 -1
  40. package/framework/hooks/shared/e2e-check.js +64 -27
  41. package/framework/hooks/shared/errata.js +72 -0
  42. package/framework/hooks/shared/feature-locator.js +1 -1
  43. package/framework/hooks/shared/frontend-locations.js +6 -0
  44. package/framework/hooks/shared/gate-question.js +18 -0
  45. package/framework/hooks/shared/phase-utils.js +15 -32
  46. package/framework/hooks/shared/slice-progress.js +118 -0
  47. package/framework/hooks/shared/spawn-command.js +23 -0
  48. package/framework/hooks/shared/state-reader.js +61 -87
  49. package/framework/hooks/shared/state-writer.js +2 -3
  50. package/framework/mcp/registry.json +3 -4
  51. package/framework/phases.json +23 -39
  52. package/framework/schemas/config.schema.json +14 -9
  53. package/framework/schemas/feature.schema.json +15 -50
  54. package/framework/skills/README.md +3 -4
  55. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  56. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  57. package/framework/skills/core/morph-apply/SKILL.md +149 -222
  58. package/framework/skills/core/morph-hotfix/SKILL.md +33 -42
  59. package/framework/skills/core/morph-machine/SKILL.md +2 -2
  60. package/framework/skills/core/morph-media/SKILL.md +1 -1
  61. package/framework/skills/core/morph-plan/SKILL.md +137 -299
  62. package/framework/skills/core/morph-review/SKILL.md +111 -136
  63. package/framework/skills/core/morph-standards/SKILL.md +27 -39
  64. package/framework/skills/core/morph-uiux/SKILL.md +77 -152
  65. package/framework/standards/STANDARDS.json +86 -1218
  66. package/framework/standards/STANDARDS.meta.json +1305 -0
  67. package/framework/standards/ai-agents/evals-with-cache.md +1 -2
  68. package/framework/standards/ai-agents/setup.md +1 -1
  69. package/framework/standards/architecture/code-comments.md +6 -6
  70. package/framework/standards/integration/mcp/mcp-tools.md +7 -7
  71. package/framework/templates/README.md +2 -3
  72. package/framework/templates/REGISTRY.json +6 -170
  73. package/framework/templates/docs/plan.md +72 -0
  74. package/framework/templates/dotnet/ai-kit/README.md +1 -9
  75. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Morph.AiKit.Tests.csproj +0 -10
  76. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -1
  77. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +1 -1
  78. package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +1 -1
  79. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +3 -4
  80. package/package.json +1 -1
  81. package/src/commands/e2e/e2e.js +2 -2
  82. package/src/commands/observability/cost.js +18 -60
  83. package/src/commands/project/doctor-procs.js +1 -1
  84. package/src/commands/project/doctor.js +9 -9
  85. package/src/commands/project/fleet.js +4 -4
  86. package/src/commands/project/heavy.js +3 -3
  87. package/src/commands/project/init.js +4 -0
  88. package/src/commands/project/setup-infra-cmd.js +2 -1
  89. package/src/commands/project/stack-scan.js +58 -0
  90. package/src/commands/project/standards.js +79 -25
  91. package/src/commands/project/status.js +29 -69
  92. package/src/commands/project/update.js +17 -1
  93. package/src/commands/project/worktree.js +1 -1
  94. package/src/commands/state/advance.js +62 -46
  95. package/src/commands/state/approve.js +81 -141
  96. package/src/commands/state/archive.js +20 -84
  97. package/src/commands/state/auto-approval.js +68 -0
  98. package/src/commands/state/create.js +28 -1
  99. package/src/commands/state/delete.js +1 -1
  100. package/src/commands/state/finish.js +11 -23
  101. package/src/commands/state/gate-check.js +85 -84
  102. package/src/commands/state/gate-decision.js +6 -4
  103. package/src/commands/state/handoff.js +1 -1
  104. package/src/commands/state/list.js +9 -9
  105. package/src/commands/state/report-check.js +157 -311
  106. package/src/commands/state/retype.js +9 -3
  107. package/src/commands/validation/mutate.js +77 -14
  108. package/src/commands/validation/plan-check.js +81 -0
  109. package/src/commands/validation/validate-feature.js +60 -135
  110. package/src/commands/validation/verify.js +40 -72
  111. package/src/core/paths/output-schema.js +19 -66
  112. package/src/core/state/gate-order.js +5 -6
  113. package/src/core/state/lifecycle-audit.js +2 -2
  114. package/src/core/state/state-manager.js +17 -98
  115. package/src/core/templates/template-registry.js +2 -2
  116. package/src/core/templates/template-seed.js +22 -0
  117. package/src/core/work-types.js +10 -10
  118. package/src/dashboard/app/components/ActivityFeed.jsx +2 -3
  119. package/src/dashboard/app/components/CommandPalette.jsx +5 -5
  120. package/src/dashboard/app/components/EntityLink.jsx +1 -1
  121. package/src/dashboard/app/hooks/useMorphQuery.js +1 -1
  122. package/src/dashboard/app/lib/phases.js +2 -4
  123. package/src/dashboard/app/pages/Activity.jsx +1 -1
  124. package/src/dashboard/app/pages/FeatureDetail.jsx +139 -129
  125. package/src/dashboard/app/pages/Features.jsx +9 -9
  126. package/src/dashboard/app/pages/Guide.jsx +2 -2
  127. package/src/dashboard/app/pages/PhasePipeline.jsx +3 -4
  128. package/src/dashboard/app/pages/Standards.jsx +1 -1
  129. package/src/dashboard/scanner/activity-scanner.js +5 -15
  130. package/src/dashboard/scanner/agents-scanner.js +1 -1
  131. package/src/dashboard/scanner/docs-scanner.js +2 -2
  132. package/src/dashboard/scanner/features-scanner.js +95 -60
  133. package/src/dashboard/scanner/project-api.js +1 -1
  134. package/src/dashboard/scanner/standards-scanner.js +2 -1
  135. package/src/lib/ci/ci-verify.js +17 -1
  136. package/src/lib/ci/github-ci.js +1 -1
  137. package/src/lib/detectors/index.js +3 -8
  138. package/src/lib/generators/handoff-generator.js +34 -65
  139. package/src/lib/generators/settings-generator.js +11 -89
  140. package/src/lib/git/evidence-staleness.js +1 -1
  141. package/src/lib/git/tree-fingerprint.js +19 -7
  142. package/src/lib/git/tree-state.js +2 -2
  143. package/src/lib/heavy/cleanup.js +1 -5
  144. package/src/lib/installers/memory-installer.js +6 -8
  145. package/src/lib/mutation/commands.js +3 -2
  146. package/src/lib/{tasks/dotnet-test-introspection.js → mutation/dotnet-introspection.js} +17 -282
  147. package/src/lib/mutation/plan.js +14 -6
  148. package/src/lib/mutation/runner.js +1 -1
  149. package/src/lib/mutation/subset.js +46 -9
  150. package/src/lib/plan/artifact-vocabulary.js +60 -0
  151. package/src/lib/plan/checks.js +234 -0
  152. package/src/lib/plan/plan-parser.js +209 -0
  153. package/src/lib/plan/plan-template.js +18 -0
  154. package/src/lib/review-reports.js +222 -0
  155. package/src/lib/risk-detector.js +131 -140
  156. package/src/lib/specs/adr-index.js +50 -69
  157. package/src/lib/specs/design-seed.js +18 -0
  158. package/src/lib/specs/frontmatter.js +44 -0
  159. package/src/lib/specs/gfm-table.js +17 -0
  160. package/src/lib/specs/old-format.js +68 -0
  161. package/src/lib/specs/revocations.js +37 -95
  162. package/src/lib/specs/screen-checklist.js +18 -17
  163. package/src/lib/stack/dotnet-build-ignores.js +47 -0
  164. package/src/lib/stack/stack-scan.js +267 -0
  165. package/src/lib/standards/registry.js +43 -0
  166. package/src/lib/standards/sections.js +58 -0
  167. package/src/lib/tasks/eval-node.js +4 -12
  168. package/src/lib/tasks/test-nodes.js +1 -74
  169. package/src/lib/tasks/test-runner.js +75 -117
  170. package/src/lib/telemetry/metrics.js +8 -69
  171. package/src/lib/telemetry/telemetry-reader.js +5 -118
  172. package/src/lib/telemetry/verify-event.js +5 -7
  173. package/src/lib/validators/code-budget/code-budget-validator.js +1 -1
  174. package/src/lib/validators/contracts/contract-compliance-validator.js +2 -2
  175. package/src/lib/validators/reuse/reuse-validator.js +22 -45
  176. package/src/lib/validators/traceability-check.js +85 -129
  177. package/src/lib/validators/verify-runner.js +118 -235
  178. package/src/lib/worktree/docker-audit.js +1 -2
  179. package/src/lib/worktree/fleet-scanner.js +25 -38
  180. package/src/scripts/setup-infra.js +9 -0
  181. package/src/utils/agents-installer.js +76 -9
  182. package/src/utils/claude-settings-manager.js +0 -35
  183. package/src/utils/file-copier.js +27 -1
  184. package/src/utils/hooks-installer.js +16 -9
  185. package/src/utils/skills-installer.js +1 -2
  186. package/framework/evals/trace-schema.md +0 -67
  187. package/framework/hooks/claude-code/core/tasks-json-guard.js +0 -83
  188. package/framework/hooks/claude-code/core/trace-autogen.js +0 -277
  189. package/framework/hooks/git/pre-commit/specs.sh +0 -50
  190. package/framework/hooks/shared/tasks-validator.js +0 -111
  191. package/framework/rules/morph-task-tracking.md +0 -54
  192. package/framework/rules/morph-workflow.md +0 -244
  193. package/framework/schemas/tasks.schema.json +0 -79
  194. package/framework/skills/core/morph-brainstorming/SKILL.md +0 -161
  195. package/framework/skills/core/morph-implement/SKILL.md +0 -194
  196. package/framework/skills/core/morph-proposal/SKILL.md +0 -152
  197. package/framework/skills/core/morph-stack-scan/SKILL.md +0 -145
  198. package/framework/templates/docs/proposal.md +0 -192
  199. package/framework/templates/docs/spec.md +0 -57
  200. package/framework/templates/docs/ui-components.md +0 -52
  201. package/framework/templates/docs/ui-design-system.md +0 -76
  202. package/framework/templates/docs/ui-flows.md +0 -167
  203. package/framework/templates/examples/spec-examples.md +0 -91
  204. package/framework/templates/feature/decisions.md +0 -124
  205. package/framework/templates/feature/recap.md +0 -145
  206. package/framework/templates/tasks.template.json +0 -17
  207. package/src/commands/state/usecase.js +0 -143
  208. package/src/commands/tasks/dag.js +0 -181
  209. package/src/lib/agents/output-collector.js +0 -76
  210. package/src/lib/evaluator-report.js +0 -104
  211. package/src/lib/specs/acervo-format.js +0 -70
  212. package/src/lib/specs/acervo-lifecycle.js +0 -264
  213. package/src/lib/specs/done-criteria-check.js +0 -200
  214. package/src/lib/specs/usecase-check.js +0 -301
  215. package/src/lib/specs/usecase-promoter.js +0 -301
  216. package/src/lib/specs/usecase-registry.js +0 -237
  217. package/src/lib/tasks/dispatch-planner.js +0 -319
  218. package/src/lib/tasks/mermaid-renderer.js +0 -132
  219. package/src/lib/tasks/task-classifier.js +0 -30
  220. package/src/lib/tasks/task-parser.js +0 -209
  221. package/src/lib/tasks/tasks-json-parser.js +0 -296
  222. package/src/lib/tasks/test-scope.js +0 -597
@@ -1,160 +1,85 @@
1
1
  ---
2
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.
3
+ description: Conduz a fase opcional de UI/UX de uma feature com plano aprovado — design system, mockups com checklist de tela, componentes e fluxos — despachando a persona ui-designer, e apresenta o Gate uiux antes da implementação.
4
4
  version: core
5
- when_to_use: Use quando o ramo uiux for tomado (morph-spec advance --design), depois do Gate 1 e antes do morph-plan
5
+ when_to_use: Use quando o ramo de design for tomado (morph-spec advance {feature} --design, depois do gate do plano) e antes de /morph-apply
6
6
  user-invocable: true
7
- cliVersion: "8.47.0"
7
+ cliVersion: "9.0.0"
8
8
  ---
9
9
 
10
10
  # morph-uiux
11
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
- - **Toda tela sai com o checklist de tela preenchido** (template no passo 3) — a superfície, o volume esperado de dados, paginação, ordenação, filtro, os três estados (vazio, carregando, erro), o comportamento no mobile e abas × página longa. "Não se aplica" vale, **desde que escrito**. É o checklist que faz a lista de 2 000 linhas paginar: o que o design não decide não vira `doneCriteria` (`morph-plan` §5d), e o que não é critério ninguém entrega. Tela de dados segue os standards de `admin-app` (lista/tabela, formulário, feedback, estrutura de página), que a persona cita na superfície `admin-app`.
34
-
35
- 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 o escopo das implementadoras (com Bash) + `Skill` + MCPs `stitch`/`playwright`/`context7`/`graphify` + o MCP de mídia morph-assets (imagem e vídeo). Bash serve para `morph-spec standards --find`, `npx`, screenshot e leitura de `git`; build/test da suíte, `verify` e aprovação de gate continuam do orquestrador (cláusula 3, como nas outras personas).
36
-
37
- **Persona universal** (`ui-designer.stack = ["*"]` em `agents.json`, mesmo mecanismo de `evaluator`/`scout`): UI/UX importa sempre que há superfície de UI, então o subagent está registrado em **todo** projeto — .NET/Blazor incluído, não só Next.js. **Fallback** (caso raro: instalação anterior a essa mudança, `.claude/agents/morph-ui-designer.md` ainda não regenerado): `general-purpose` colando o campo `persona` (Read em `.morph/framework/agents.json`) no prompt, registrando o fallback no relatório — resolvido rodando `morph-spec setup-infra --reinstall`.
38
-
39
- Template do prompt (contrato do relatório em forma curta — copia o padrão de `morph-implement` §4; a cláusula de build/isolamento vira "sem build/test da suíte", porque o design não entrega código a verificar):
40
- ```
41
- Produzir os artefatos de UI/UX de [feature] em `.morph/features/{feature}/1-design/`.
42
-
43
- Contexto: [problema/escopo do proposal.md] + design system atual
44
- (`.morph/context/design-system.md`, tokens/componentes a reusar) + stack: [stack real do config.json]
45
-
46
- Produza, NESTA ORDEM — design-system.md primeiro, os demais só como aplicável ao escopo:
47
- 1. `design-system.md` — tokens (cor, tipografia, espaço, motion) consistentes com o projeto
48
- 2. `mockups.md` — descrição estruturada de cada tela nova/alterada (+ imagem via MCP
49
- stitch ou o MCP de mídia (imagem/vídeo) quando disponível; fallback: descrição textual detalhada).
50
- Cada tela é um `## Tela: <nome>` e traz, dentro dela, o checklist abaixo, com cada `…`
51
- trocado pela decisão — "não se aplica" vale se escrito; `…`, vazio ou "a definir" não.
52
- O que cada item decide: Superfície (admin-app | marketing-site — ela escolhe que
53
- standards você lê para ESSA tela, seção "Standards by surface" da sua persona),
54
- Volume esperado (registros hoje e em 1 ano), Paginação (servidor, N por página — ou
55
- por que não pagina), Ordenação (colunas + padrão, no servidor), Filtro (filtros e
56
- busca, no servidor), Estado vazio (sem registros × sem resultado para o filtro),
57
- Estado carregando, Estado de erro (mensagem + como tentar de novo), Mobile (o que a
58
- tela vira abaixo de md), Abas (abas × página longa × wizard, e por quê).
59
- ### Checklist de tela
60
- | Item | Decisão |
61
- |---|---|
62
- | Superfície | … |
63
- | Volume esperado | … |
64
- | Paginação | … |
65
- | Ordenação | … |
66
- | Filtro | … |
67
- | Estado vazio | … |
68
- | Estado carregando | … |
69
- | Estado de erro | … |
70
- | Mobile | … |
71
- | Abas | … |
72
- 3. `components.md` — inventário de componentes novos/reusados, com props e os estados do
73
- princípio 2 acima
74
- 4. `flows.md` — fluxos de navegação/interação entre as telas
75
-
76
- Done quando: os artefatos aplicáveis existem, cada um cita os tokens/componentes do
77
- design-system.md em vez de reinventar valores soltos, e toda `## Tela:` do mockups.md
78
- tem o checklist completo.
79
-
80
- Contrato do relatório final:
81
- 1. GRAVE um relatório por artefato produzido em
82
- `1-design/reports/[artefato]-report.md` (ex.: `1-design/reports/design-system-report.md`)
83
- ANTES de encerrar — é o retorno autoritativo, não a sua mensagem final (cortesia
84
- best-effort, pode não chegar inteira). NÃO chame SendMessage.
85
- 2. Bash só para consulta (`morph-spec standards --find`, `npx`, screenshot, `git log/diff`):
86
- NÃO rode build, testes nem `morph-spec verify`/`approve`/`advance` — a verificação e a
87
- aprovação do Gate uiux são do orquestrador.
88
- 3. NÃO toque em tasks.json, feature.json, state.json nem no board de sessão.
89
-
90
- Cada relatório contém: (1) o que foi feito em 2-3 frases, (2) o artefato produzido,
91
- (3) decisões de design e por quê (token reusado vs. novo, padrão de acessibilidade
92
- aplicado), (4) o que ficou em aberto. Relatório ausente ou oco é falha de protocolo.
93
- ```
94
-
95
- 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.
96
-
97
- 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): **reescreva o corpo** de `.morph/context/design-system.md` com a adição — o token ou a regra que mudou é substituído na própria seção, nunca empilhado ao lado do antigo — e registre no changelog só data e 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.
98
-
99
- 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`.
100
-
101
- 6. Apresente o Gate uiux.
102
-
103
- 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. **O checklist de tela é cobrado aqui, por código:** com `1-design/mockups.md` presente, tela sem o bloco, item ausente, resposta vazia ou "a definir" — ou nenhuma `## Tela:` — **pausa** o gate nomeando tela e item (`signals.screenChecklist`), e o `approve`/`advance` com assinatura `auto` recusam encerrar a fase pela mesma regra (só o mockup no formato antigo, telas `## S001:`, é isento — e o sinal diz isso). Complete o mockup antes de apresentar o gate: não peça ao humano que aprove um design que ainda não decidiu se a lista pagina. Divergência de design-system detectada aqui (fonte do projeto vs. o que a feature precisa) é uma das poucas chaves que `--signals` aceita sobrescrever:
104
- ```
105
- morph-spec gate-check {feature} uiux --signals '{"designSystemDivergence":true}'
106
- ```
107
-
108
- **Se `pause === true`**, use `AskUserQuestion`:
109
- ```
110
- question: "Gate uiux — Design de {feature} aprovado?{ reason ? ' Sinal: ' + reason : '' }"
111
- header: "Gate uiux"
112
- options:
113
- - { label: "aprovado, prosseguir", description: "Aceitar design-system/mockups/components/flows e avançar para o plano" }
114
- - { label: "preciso ajustar", description: "Apontar mudanças no design antes de prosseguir" }
115
- - { label: "cancelar feature", description: "Abortar" }
116
- ```
117
-
118
- Aguardar resposta. Se "preciso ajustar", aplicar e reapresentar.
119
-
120
- **Hook state-sync reconhece este gate, como os demais.** Igual a Gate 1/2/3, o hook `state-sync.js` (`gateFromQuestion`) reconhece o texto "Gate uiux" — uma resposta "aprovado" ao template acima grava sozinha `approvalGates.uiux = { approved: true, timestamp, approvedBy: "manual" }` no `feature.json` autoritativo, atribuído pelo nome da feature que a pergunta cita (MORPH.md §5). Sem nome na pergunta, ou fora de `AskUserQuestion` (headless/CI): aprove explicitamente:
121
- ```
122
- morph-spec approve {feature} uiux --approver <quem respondeu>
123
- # ou, para já aprovar e criar 2-plan/ num passo só:
124
- morph-spec advance {feature} --approver <quem respondeu>
125
- ```
126
- (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.)
127
-
128
- **Se `pause === false`** (auto-aprovação, sem `AskUserQuestion`), exibir summary curto e já aprovar via CLI:
129
- ```
130
- ## Gate uiux (auto-aprovado)
131
-
132
- **Design system:** {tokens novos, se houver} | **Mockups:** {N telas}
133
- **Components:** {N novos / N reusados} | **Flows:** {N fluxos}
134
- ```
135
- ```
136
- morph-spec advance {feature}
137
- ```
138
-
139
- 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.
140
-
141
- **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.
142
-
143
- ## Output esperado
144
-
145
- - `.morph/features/{feature}/1-design/design-system.md` — obrigatório
146
- - `.morph/features/{feature}/1-design/mockups.md`, `components.md`, `flows.md` — conforme o escopo exigir; no `mockups.md`, toda `## Tela:` com o `### Checklist de tela` completo (cobrado pelo `gate-check uiux` e pelo `approve`/`advance` com assinatura `auto`)
147
- - `.morph/features/{feature}/1-design/reports/*-report.md` — relatório(s) bruto(s) do `morph-ui-designer` despachado no passo 3
148
- - `.morph/context/design-system.md` com o corpo reescrito (se tokens/componentes novos entraram) e uma entrada de changelog (data, motivo)
149
- - Gate uiux registrado aprovado em `.morph/features/{feature}/feature.json` (autoritativo)
150
-
151
- ## Referências
152
-
153
- - `.morph/framework/MORPH.md` §2.1 — critério objetivo de entrada no ramo uiux
154
- - `.morph/framework/MORPH.md` §6 — protocolo de dispatch e contrato do relatório final
155
- - `.morph/framework/MORPH.md` §5 — regras de pausa de gate (trust mode)
156
- - `.morph/framework/agents.json` — persona `ui-designer` (tools, MCPs, standards; `surfaces` separa os de `marketing-site` e os de `admin-app`)
157
- - `.morph/framework/standards/frontend/admin-app/` — lista e tabela, formulário, confirmação e toast, abas × página longa × wizard: o que o checklist de tela decide numa tela de dados
158
- - `.morph/framework/templates/context/design-system.md` — forma de partida quando o projeto não tem design system vivo
159
- - `.claude/skills/morph-brainstorming/SKILL.md` — protocolo de reconciliação/changelog do design-system vivo (Parte 0), reaplicado no passo 4
160
- - `.claude/skills/morph-plan/SKILL.md` — consome os artefatos desta fase por path
12
+ Entra depois do gate do plano, quando a `morph-plan` §6 decidiu que a feature cria ou altera superfície de UI (componente, página, tela, estilo, fluxo de navegação). Sai com `1-design/` aprovado; o próximo passo é `/morph-apply {feature}`.
13
+
14
+ ## 1. Insumos
15
+
16
+ - `2-plan/plan.md` — problema, cenários e as fatias de UI (`persona: ui-designer`, com `superfície:`). O plano está congelado: esta fase **nunca** edita `plan.md` nem `checks.json`; refere as fatias pelo id (`F2`).
17
+ - `.morph/context/design-system.md` — o design system **vivo**: toda decisão de token ou componente parte dele. Ausente, o `advance --design` já o escreveu a partir do template do pacote como forma de partida.
18
+ - `.morph/config/config.json` → `project.stack` decide a tecnologia (`nextjs` → Tailwind + shadcn + Framer Motion; outro stack, o equivalente idiomático). Nunca suponha Next.js.
19
+ - `2-plan/stack-scan.md`, se existir.
20
+
21
+ ## 2. Princípios (não são opcionais)
22
+
23
+ - WCAG AA e todos os estados de componente interativo (default/hover/focus/disabled/loading/error), não só o caminho feliz.
24
+ - Reusa token e componente existentes antes de criar; token novo precisa de justificativa. Sistemas, não telas isoladas.
25
+ - **Toda tela sai com o checklist de tela preenchido.** O `advance --design` já escreveu `1-design/mockups.md` a partir do template do pacote, a fonte única dos dez itens (tabela `### Checklist de tela` dentro de cada `## Tela:`). "Não se aplica" vale se escrito; `…`, vazio ou "a definir" reprovam. Design sem tela nova ou alterada (só componente ou estilo): apague o `1-design/mockups.md` semeado. É o checklist que faz a lista de 2 000 linhas paginar: o verificador do Gate 3 cobra cada item decidido em `## Checklist de tela`. Tela de dados segue os standards de `admin-app` (lista/tabela, formulário, feedback, estrutura de página).
26
+
27
+ ## 3. Dispatch
28
+
29
+ Despache `subagent_type: "morph-ui-designer"` — persona universal, registrada em todo projeto. Não registrado (instalação antiga): `general-purpose` com o campo `persona` de `.morph/framework/agents.json` colado no prompt, registrando o fallback; resolve com `morph-spec setup-infra --reinstall`. O corpo da persona já carrega o contrato fixo (teto de turnos, relatório `PARCIAL`); o prompt leva só o que varia:
30
+
31
+ ```
32
+ Feature [feature]: artefatos de UI/UX em `.morph/features/[feature]/1-design/`.
33
+ Plano: `2-plan/plan.md` — fatias de UI [F2 (admin-app), F3 …]. Stack: [project.stack].
34
+ Design system: `.morph/context/design-system.md` (tokens e componentes a reusar).
35
+
36
+ Nesta ordem, só o aplicável ao escopo:
37
+ 1. `1-design/design-system.md` (obrigatório: sem ele o `advance` recusa) — tokens (cor, tipografia, espaço, motion) que a feature usa ou acrescenta, consistentes com o projeto; token novo também reescreve `.morph/context/design-system.md` (§4).
38
+ 2. `mockups.md` — um `## Tela: <nome>` por tela nova ou alterada, com a fatia que a entrega
39
+ e a tabela `### Checklist de tela` que o `advance --design` já escreveu em `1-design/mockups.md`,
40
+ cada item decidido. Imagem via MCP stitch ou o de mídia quando houver; senão, descrição detalhada.
41
+ 3. `components.md` — componentes novos e reusados, com props e estados.
42
+ 4. `flows.md` — navegação entre as telas.
43
+
44
+ Relatório por artefato em `1-design/reports/[artefato]-report.md`: o que foi feito (2-3 frases),
45
+ o artefato, as decisões de design e por quê, o que ficou aberto. É o retorno; a mensagem final é cortesia.
46
+ Bash só para consulta (`morph-spec standards --find`, `npx`, screenshot, `git log/diff`): sem build,
47
+ teste, `verify`, `approve` ou `advance`. Não toque `feature.json`, `state.json`, `plan.md` nem `checks.json`.
48
+ ```
49
+
50
+ Ao retomar, **leia primeiro** `1-design/reports/*-report.md`. `design-system.md` é o único output obrigatório: sem ele, o `advance` recusa.
51
+
52
+ ## 4. Design system vivo
53
+
54
+ Tokens ou componentes novos: aplique o protocolo da `morph-plan` §2 — **reescreva o corpo** de `.morph/context/design-system.md` (o valor que mudou substitui o antigo na própria seção) e registre no changelog só data e motivo. `1-design/design-system.md` é da feature; `.morph/context/design-system.md` é do projeto.
55
+
56
+ ## 5. Todo aviso de capacidade tem destino
57
+
58
+ Antes do gate:
59
+
60
+ ```bash
61
+ grep -riE "capacidade nova|precisa de backend|dimensionar junto" .morph/features/{feature}/1-design/
62
+ ```
63
+
64
+ Cada ocorrência **nunca fica sem destino**: a fatia do plano que já a cobre (cite o id no mockup), uma exclusão registrada no `mockups.md` com o motivo, ou — se é escopo novo — `morph-spec unapprove {feature} plan`, ajuste do plan.md, `morph-spec plan-check {feature}` e o gate do plano de novo. Sem hits, o passo é um no-op.
65
+
66
+ ## 6. Gate uiux
67
+
68
+ ```
69
+ morph-spec gate-check {feature} uiux [--json]
70
+ ```
71
+
72
+ O checklist é cobrado por código: tela sem a tabela, item ausente ou não decidido, ou nenhuma `## Tela:` **pausa** o gate nomeando tela e item, e `approve`/`advance` com assinatura `auto` recusam pela mesma regra (só o mockup antigo, telas `## S001:`, é isento). Complete o mockup antes de apresentar: não peça aprovação de um design que ainda não decidiu se a lista pagina. Divergência de design system vista aqui: `--signals '{"designSystemDivergence":true}'`.
73
+
74
+ **`pause === true`**: `AskUserQuestion`, header "Gate uiux":
75
+
76
+ ```
77
+ question: "Gate uiux — Design de {feature} aprovado?{ reason ? ' Sinal: ' + reason : '' }"
78
+ options: "aprovado, prosseguir" | "preciso ajustar" | "cancelar feature"
79
+ ```
80
+
81
+ O hook `state-sync` reconhece "Gate uiux" e grava a aprovação pela feature nomeada. Sem `AskUserQuestion` (headless): `morph-spec advance {feature} --approver <quem>` — sem `--approver`, um terminal não interativo grava `approvedBy: "auto"` num gate que um humano aprovou.
82
+
83
+ **`pause === false`**: resumo (tokens novos, N telas, componentes novos/reusados, fluxos) e `morph-spec advance {feature}`.
84
+
85
+ Aprovado o gate, os quatro artefatos de `1-design/` travam: retrabalho de design passa pelo gate de novo, nunca por Edit no arquivo travado. Diga ao usuário que `/morph-apply {feature}` está pronto; não despache a apply.