@polymorphism-tech/morph-spec 7.9.4 → 8.1.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 (212) hide show
  1. package/CLAUDE.md +2 -2
  2. package/README.md +31 -2
  3. package/bin/morph-spec.js +50 -2
  4. package/bin/validate.js +379 -379
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +38 -1
  7. package/docs/QUICKSTART.md +60 -1
  8. package/framework/CLAUDE.md +14 -3
  9. package/framework/MORPH.md +41 -5
  10. package/framework/agents.json +22 -3
  11. package/framework/commands/commit.md +166 -166
  12. package/framework/commands/morph-hotfix.md +39 -0
  13. package/framework/commands/morph-infra.md +215 -215
  14. package/framework/commands/morph-preflight.md +205 -205
  15. package/framework/commands/morph-troubleshoot.md +124 -124
  16. package/framework/hooks/README.md +25 -11
  17. package/framework/hooks/claude-code/core/gate-guard.js +4 -2
  18. package/framework/hooks/claude-code/core/loop-detect.js +2 -1
  19. package/framework/hooks/claude-code/core/post-edit-typecheck.js +14 -5
  20. package/framework/hooks/claude-code/core/tasks-json-guard.js +4 -2
  21. package/framework/hooks/claude-code/core/validate-completion.js +1 -1
  22. package/framework/hooks/claude-code/core/worktree-context.js +160 -0
  23. package/framework/hooks/claude-code/statusline.py +679 -679
  24. package/framework/hooks/claude-code/statusline.sh +11 -11
  25. package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
  26. package/framework/hooks/git/pre-commit/agents.sh +25 -25
  27. package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
  28. package/framework/hooks/git/pre-commit/specs.sh +50 -50
  29. package/framework/hooks/git/pre-push/run-tests.sh +44 -44
  30. package/framework/hooks/shared/activity-logger.js +160 -160
  31. package/framework/hooks/shared/build-check.js +2 -2
  32. package/framework/hooks/shared/hook-response.js +17 -5
  33. package/framework/hooks/shared/payload-utils.js +42 -0
  34. package/framework/hooks/shared/state-reader.js +22 -2
  35. package/framework/hooks/shared/stdin-reader.js +26 -26
  36. package/framework/rubrics/backend.json +41 -41
  37. package/framework/rules/ai-agents-standards.md +45 -45
  38. package/framework/rules/dotnet-templates.md +86 -86
  39. package/framework/rules/frontend-standards.md +13 -13
  40. package/framework/rules/infrastructure-standards.md +27 -27
  41. package/framework/rules/neon-standards.md +25 -25
  42. package/framework/rules/nextjs-standards.md +20 -20
  43. package/framework/rules/nextjs-templates.md +40 -40
  44. package/framework/schemas/feature.schema.json +95 -1
  45. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  46. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  47. package/framework/skills/core/morph-apply/SKILL.md +49 -27
  48. package/framework/skills/core/morph-brainstorming/SKILL.md +9 -1
  49. package/framework/skills/core/morph-eval/SKILL.md +6 -1
  50. package/framework/skills/core/morph-hotfix/SKILL.md +134 -0
  51. package/framework/skills/core/morph-implement/SKILL.md +17 -22
  52. package/framework/skills/core/morph-plan/SKILL.md +5 -1
  53. package/framework/skills/core/morph-proposal/SKILL.md +24 -1
  54. package/framework/skills/core/morph-review/SKILL.md +13 -16
  55. package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
  56. package/framework/skills/core/morph-standards/SKILL.md +1 -1
  57. package/framework/standards/ai-agents/agent-session.md +160 -160
  58. package/framework/standards/ai-agents/batching.md +193 -193
  59. package/framework/standards/ai-agents/context-providers.md +188 -188
  60. package/framework/standards/ai-agents/mcp-server.md +250 -250
  61. package/framework/standards/ai-agents/mcp-tools.md +197 -197
  62. package/framework/standards/ai-agents/middleware-patterns.md +207 -207
  63. package/framework/standards/ai-agents/modalities-image-gen.md +173 -173
  64. package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -171
  65. package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -181
  66. package/framework/standards/ai-agents/modalities-vision.md +201 -201
  67. package/framework/standards/ai-agents/multi-agent-patterns.md +155 -155
  68. package/framework/standards/ai-agents/production.md +275 -275
  69. package/framework/standards/ai-agents/prompts-in-db.md +214 -214
  70. package/framework/standards/ai-agents/providers/model-registry.md +158 -158
  71. package/framework/standards/ai-agents/service-tier-flex.md +135 -135
  72. package/framework/standards/ai-agents/structured-output.md +249 -249
  73. package/framework/standards/ai-agents/sweet-spot.md +109 -109
  74. package/framework/templates/.idea/morph-templates.xml +92 -0
  75. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  76. package/framework/templates/IDE-SNIPPETS.md +262 -262
  77. package/framework/templates/REGISTRY.json +0 -62
  78. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
  79. package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
  80. package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
  81. package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
  82. package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -95
  83. package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
  84. package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
  85. package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
  86. package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -281
  87. package/framework/templates/code/dotnet/database/migration.cs +83 -83
  88. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
  89. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
  90. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
  91. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
  92. package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -58
  93. package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
  94. package/framework/templates/code/typescript/contracts.ts +167 -167
  95. package/framework/templates/docs/clarifications.md +253 -253
  96. package/framework/templates/docs/schema-analysis.md +119 -119
  97. package/framework/templates/docs/ui-components.md +52 -52
  98. package/framework/templates/docs/ui-design-system.md +76 -76
  99. package/framework/templates/docs/ui-flows.md +167 -167
  100. package/framework/templates/docs/ui-mockups.md +98 -98
  101. package/framework/templates/feature/decisions.md +122 -122
  102. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
  103. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
  104. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
  105. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
  106. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
  107. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
  108. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
  109. package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
  110. package/framework/templates/infrastructure/docker/docker-compose.template.yml +50 -50
  111. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  112. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  113. package/framework/templates/infrastructure/github/README.md +56 -56
  114. package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
  115. package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
  116. package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
  117. package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
  118. package/framework/templates/integrations/asaas-client.cs +387 -387
  119. package/framework/templates/integrations/asaas-webhook.cs +351 -351
  120. package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
  121. package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
  122. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
  123. package/framework/templates/project/validate.js +120 -120
  124. package/framework/templates/state.template.json +17 -17
  125. package/framework/templates/ui/design-system.css +226 -226
  126. package/package.json +1 -1
  127. package/src/commands/dashboard/dashboard.js +53 -53
  128. package/src/commands/index.js +13 -13
  129. package/src/commands/mcp/mcp-setup.js +519 -519
  130. package/src/commands/project/checkpoint.js +209 -209
  131. package/src/commands/project/doctor.js +4 -2
  132. package/src/commands/project/init.js +46 -2
  133. package/src/commands/project/update.js +5 -3
  134. package/src/commands/project/worktree.js +1005 -46
  135. package/src/commands/state/advance.js +17 -2
  136. package/src/commands/state/approve.js +18 -1
  137. package/src/commands/state/create.js +158 -14
  138. package/src/commands/state/retype.js +126 -0
  139. package/src/commands/state/score.js +4 -0
  140. package/src/commands/tasks/dag.js +32 -0
  141. package/src/commands/validation/index.js +1 -0
  142. package/src/commands/validation/validate-feature.js +33 -5
  143. package/src/commands/validation/verify.js +190 -0
  144. package/src/core/state/phase-state-machine.js +197 -197
  145. package/src/core/state/state-manager.js +35 -10
  146. package/src/core/templates/template-renderer.js +477 -477
  147. package/src/core/work-types.js +79 -0
  148. package/src/dashboard/app/components/DetailPanel.jsx +11 -11
  149. package/src/dashboard/app/components/FlowGraph.jsx +17 -17
  150. package/src/dashboard/app/components/SearchFilter.jsx +22 -22
  151. package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
  152. package/src/dashboard/app/main.jsx +13 -13
  153. package/src/dashboard/app/pages/AgentMap.jsx +370 -370
  154. package/src/dashboard/app/pages/HookInspector.jsx +418 -418
  155. package/src/dashboard/app/pages/LiveState.jsx +11 -1
  156. package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
  157. package/src/dashboard/app/pages/RulesMap.jsx +273 -273
  158. package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
  159. package/src/dashboard/app/pages/Standards.jsx +332 -332
  160. package/src/dashboard/app/styles/index.css +47 -47
  161. package/src/dashboard/index.html +12 -12
  162. package/src/dashboard/package.json +24 -24
  163. package/src/dashboard/scanner/hooks-scanner.js +41 -41
  164. package/src/dashboard/scanner/phases-scanner.js +15 -15
  165. package/src/dashboard/scanner/rubrics-scanner.js +12 -12
  166. package/src/dashboard/scanner/rules-scanner.js +37 -37
  167. package/src/dashboard/scanner/skills-scanner.js +43 -43
  168. package/src/dashboard/scanner/squads-scanner.js +13 -13
  169. package/src/dashboard/scanner/standards-scanner.js +26 -26
  170. package/src/dashboard/scanner/state-scanner.js +42 -0
  171. package/src/dashboard/vite-plugin-morph-data.js +17 -17
  172. package/src/dashboard/vite.config.js +24 -24
  173. package/src/lib/agents/metrics-aggregator.js +56 -56
  174. package/src/lib/agents/metrics-calculator.js +125 -125
  175. package/src/lib/agents/output-collector.js +73 -73
  176. package/src/lib/detectors/claude-config-detector.js +152 -152
  177. package/src/lib/detectors/design-system-detector.js +231 -231
  178. package/src/lib/detectors/index.js +217 -217
  179. package/src/lib/generators/architecture-scanner.js +639 -639
  180. package/src/lib/generators/design-system-generator.js +508 -508
  181. package/src/lib/generators/index.js +13 -13
  182. package/src/lib/generators/settings-generator.js +209 -209
  183. package/src/lib/hooks/hook-executor.js +167 -167
  184. package/src/lib/installers/mcp-installer.js +719 -719
  185. package/src/lib/installers/memory-installer.js +1 -1
  186. package/src/lib/risk-detector.js +16 -0
  187. package/src/lib/tasks/dispatch-planner.js +122 -4
  188. package/src/lib/tasks/mermaid-renderer.js +132 -0
  189. package/src/lib/tasks/task-classifier.js +30 -30
  190. package/src/lib/tasks/task-parser.js +209 -209
  191. package/src/lib/tasks/test-runner.js +27 -6
  192. package/src/lib/validators/architecture/architecture-validator.js +259 -259
  193. package/src/lib/validators/checkpoint-persistence.js +39 -39
  194. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -274
  195. package/src/lib/validators/css/css-validator.js +340 -340
  196. package/src/lib/validators/packages/package-validator.js +347 -347
  197. package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
  198. package/src/lib/validators/shared/issue-counter.js +14 -14
  199. package/src/lib/validators/validation-runner.js +349 -349
  200. package/src/lib/validators/verify-runner.js +322 -0
  201. package/src/lib/work-type-detector.js +143 -0
  202. package/src/scripts/setup-infra.js +32 -5
  203. package/src/utils/agent-id-mapper.js +11 -11
  204. package/src/utils/agents-installer.js +10 -6
  205. package/src/utils/claude-settings-manager.js +300 -300
  206. package/src/utils/file-copier.js +43 -0
  207. package/src/utils/hooks-installer.js +43 -34
  208. package/src/utils/skills-installer.js +174 -174
  209. package/framework/hooks/claude-code/core/subagent-report-guard.js +0 -95
  210. package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  211. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  212. package/src/lib/tasks/wave-resolver.js +0 -353
@@ -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: "7.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # create-umbraco-lp
@@ -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: "7.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # migrate-lp-to-umbraco
@@ -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: "7.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-apply
@@ -50,6 +50,8 @@ O comando analisa `dependencies`, `group` e `effort` das tasks pendentes e impri
50
50
  3. **Raízes independentes (fan-out na largura).** Tasks 100% independentes (`dependencies: []`). **≥ 3 raízes com effort M ou maior** → dispachar essas raízes em **paralelo**, depois cair em sequencial para o resto.
51
51
  4. Caso contrário: **sequencial puro** com auto-advance.
52
52
 
53
+ > O `dag` também imprime uma recomendação de **isolamento**: se dois fluxos paralelos planejam escrever no mesmo path (colisão de `outputs`), ele reporta `isolation.recommended: "worktree"` — nesse caso siga a §3b-w em vez da §3b.
54
+
53
55
  > **Peso de esforço:** a decisão é ponderada por `effort` (S=1, M=2, L=4, XL=8). **Raízes e fluxos compostos só de tasks S não ganham dispatch próprio** — overhead > trabalho. O comando os lista como `inline` (você os executa no modo sequencial) ou os agrupa num **único** agente quando são muitos. O cap de **4 agentes simultâneos** (anti-padrão abaixo) vale para ambas as formas. Se um fluxo de domínio é uma cadeia longa, despache o **fluxo inteiro** a um sub-agent (que executa a cadeia em ordem internamente) — um agente por fluxo, não um agente por task.
54
56
 
55
57
  > **DAG × gatilho de effort — decisões ortogonais que coexistem:** a decisão deste comando governa o **paralelismo ENTRE tasks** (quantos sub-agents ao mesmo tempo: fluxos/raízes independentes em batch). O gatilho de effort/domínio de `morph-implement` §4 governa o **dispatch INDIVIDUAL** de cada task quando ela chega ao topo do loop sequencial. `DAG: sequencial` significa "uma task por vez, na ordem" — **NÃO significa "tudo inline"**. Exemplo: cadeia única backend de 12 tasks → o DAG decide sequencial; T7 tem effort L → ao chegar em T7, o orquestrador a despacha **sozinha** para `morph-dotnet-senior` e aguarda o retorno (um agente por vez); T8 (S, mesmo domínio já carregado) roda inline. As duas regras nunca conflitam: o DAG decide *quantos ao mesmo tempo*, o gatilho de effort decide *quem executa cada task*.
@@ -79,7 +81,16 @@ while (true):
79
81
  while attempt < 3:
80
82
  attempt += 1
81
83
  invoke Skill(morph-implement) with task
82
- (no attempt > 1: passar o feedback priorizado do morph-eval anterior como input)
84
+ (no attempt > 1: passar o feedback priorizado da tentativa anterior como input)
85
+
86
+ // CÓDIGO ANTES DO JUIZ — barreira determinística e barata (build+testes+validadores).
87
+ run: morph-spec verify {feature} {task.id} --json
88
+ if verify.status == 'fail':
89
+ // vermelho: feedback determinístico direto ao loop, SEM gastar o juiz LLM.
90
+ feedback = verify.feedback // usado como input do próximo attempt
91
+ continue // conta como tentativa; não invoca morph-eval sobre código que não builda/não passa
92
+
93
+ // verde: o juiz avalia só o que o código não pega (arquitetura, contratos, qualidade).
83
94
  result = invoke Skill(morph-eval) with implementation output
84
95
  if result.score > best.score: best = result
85
96
  // Persista o score no feature.json autoritativo — torna o evalScore um signal
@@ -102,6 +113,8 @@ while (true):
102
113
  options: [aceitar (marca done com ressalva no recap), continuar tentando (+3 tentativas), pular task (marca blocked)]
103
114
  ```
104
115
 
116
+ > **Verify vermelho consome uma tentativa** do loop (≤3) e devolve `feedback[]` acionável (erros de build, falhas de teste, issues de validador). O `morph-eval` NUNCA é invocado sobre código que não passou no verify — o juiz julga arquitetura/contratos/qualidade, o que o código determinístico não pega sozinho. Código roda antes, grátis; o juiz gasta tokens só no que sobra.
117
+
105
118
  > **Por que loop e não pausa:** MORPH.md §0 manda auto-avançar entre tasks. Score baixo numa task individual é um problema de qualidade que o modelo deve **corrigir sozinho**, não delegar ao humano no meio da implementação. A pausa só existe quando o loop de correção se esgota (3 tentativas) — o "escape" do modelo autônomo. O trust mode não muda esse loop: ele governa os **gates** (proposal/plan/review), não o ciclo de correção intra-task.
106
119
 
107
120
  ### 3b. Modo Paralelo (para o subset independente)
@@ -121,41 +134,37 @@ dispatch Agent (subagent_type: "morph-{id}") with prompt:
121
134
  Implemente esta task (ou cadeia de tasks do fluxo) isoladamente.
122
135
  Não modifique spec.md, mandate.md.
123
136
 
124
- Protocolo obrigatório:
125
- 1. ATO FINAL OBRIGATÓRIO — relatório via SendMessage: chame a tool
126
- SendMessage com to:"main" e o relatório completo no content como a
127
- ÚLTIMA tool call do seu turno. Sua última mensagem em texto NÃO chega
128
- ao orquestrador — só SendMessage chega. Encerre IMEDIATAMENTE depois
129
- da chamada: zero texto adicional, zero nova tool call, zero "aguardando
130
- confirmação" — o SendMessage É o encerramento, não um passo
131
- intermediário.
132
- Exemplo literal (última chamada de tool da sua sessão, sem nada depois):
133
- SendMessage({ to: "main", content: "Fluxo backend concluído (T2→T7).
134
- Sumário: ... Arquivos: src/... Standards: vsa-handler-patterns.
135
- Auto-score: 9/10" })
136
- Terminar idle sem SendMessage, ou continuar agindo depois dele, é
137
- falha de protocolo — cada segundo entre o SendMessage e o fim real do
138
- turno é cauda que o orquestrador espera sem necessidade.
137
+ Contrato do relatório final:
138
+ 1. ATO FINAL — o seu relatório é a sua ÚLTIMA MENSAGEM DE TEXTO: ela é o
139
+ valor de retorno desta sessão e chega inteira ao orquestrador. NÃO chame
140
+ SendMessage: ele gera um evento a mais além da notificação de término,
141
+ custando um turno inútil ao orquestrador. Escreva o relatório e encerre.
142
+ Relatório oco, ou sem os itens abaixo, é falha de protocolo.
139
143
  2. NÃO toque em tasks.json, feature.json, state.json nem no board de sessão
140
144
  (TaskCreate/TaskUpdate) — todo estado (status de task, scores, gates) é
141
145
  gravado exclusivamente pelo orquestrador.
142
- 3. Você roda em batch paralelo: NÃO rode build/test da suíte compartilhada
143
- (dotnet test / npm test do projeto inteiro) — edições concorrentes quebram
144
- o build umas das outras; a verificação é do orquestrador, pós-batch.
145
-
146
- Retorne no content do SendMessage:
146
+ 3. Verificação condicional ao isolamento:
147
+ - Batch SEM isolamento (working tree compartilhada): NÃO rode build/test da
148
+ suíte compartilhada — edições concorrentes quebram o build umas das outras;
149
+ a verificação é do orquestrador, uma vez, pós-batch (`morph-spec verify`).
150
+ - Batch COM isolamento (você recebeu `isolation: "worktree"`): rode build/test
151
+ DENTRO do seu worktree; commite seu trabalho na branch do worktree como
152
+ último ato antes do relatório; reporte a branch + status de build no
153
+ relatório; NUNCA faça merge nem toque na árvore principal.
154
+
155
+ Seu relatório final deve conter:
147
156
  - sumário das mudanças
148
157
  - arquivos modificados (paths)
149
158
  - standard(s) consultado(s)
150
159
  - auto-score 0-10 (rubric: completeness, correctness, mandate compliance)
151
160
  ```
152
161
 
153
- > Este template é deliberadamente paritário com o template sequencial em `morph-implement` §4: ambos despacham o **subagent registrado do domínio (`morph-{id}`)** com standard escopado e as mesmas cláusulas de protocolo. A única diferença é que aqui múltiplos agentes rodam ao mesmo tempo, um por fluxo independente.
162
+ > Este template é deliberadamente paritário com o template sequencial em `morph-implement` §4: ambos despacham o **subagent registrado do domínio (`morph-{id}`)** com standard escopado e as mesmas cláusulas do contrato do relatório final. A única diferença é que aqui múltiplos agentes rodam ao mesmo tempo, um por fluxo independente.
154
163
 
155
- > **Alternativa quando os fluxos tocam os mesmos projetos/arquivos** (ex.: o mesmo csproj de testes compartilhado): despache com `isolation: "worktree"` — cada agente trabalha numa working tree própria e o orquestrador integra ao final. Nesse caso a cláusula 3 vira "rode build/test apenas dentro do seu worktree".
164
+ > **Alternativa quando os fluxos tocam os mesmos projetos/arquivos** (ex.: o mesmo csproj de testes compartilhado): siga a §3b-w abaixo em vez desta seção — despache com `isolation: "worktree"`, cada agente trabalha numa working tree própria e o orquestrador integra ao final.
156
165
 
157
- Aguardar todos os agentes terminarem. O hook `subagent-report-guard` (Stop/SubagentStop) bloqueia uma vez o encerramento de um subagent despachado que não chamou SendMessage, com a instrução da cláusula 1 — o ciclo cobrar-esperar deixa de ser o caminho normal. **Fallback: se mesmo assim um agente ficar idle sem entregar o relatório, cobre-o via SendMessage e registre a falha de protocolo no recap.** Assim que o relatório de um agente chegar (SendMessage como teammate-message), **libere a sessão imediatamente** — chame `TaskStop(task_id: <id/nome do agente retornado pelo dispatch>)` antes de seguir para o próximo agente. Não espere o idle-detector do harness: sem esse `TaskStop`, a sessão fica pendurada minutos até o harness marcá-la idle sozinho e injetar um `idle_notification` vazio de volta nesta sessão. Trate falha do TaskStop (agente já finalizado sozinho) como não-fatal. Depois, sequencialmente:
158
- - **Rodar a verificação compartilhada uma única vez** (build + suíte de testes do projeto) — os agentes não a rodaram (cláusula 3 do protocolo).
166
+ Aguardar todos os agentes terminarem — o relatório de cada um chega como o resultado do seu dispatch. Se um relatório vier oco ou sem os itens da cláusula 1, registre a falha de protocolo no recap. Depois, sequencialmente:
167
+ - **Rodar `morph-spec verify {feature} --json` uma única vez, pós-batch** (escopo feature) — os agentes não a rodaram (cláusula 3). Vermelho: use `verify.feedback` para corrigir/redespachar ANTES de qualquer morph-eval. (Com isolamento por worktree, cada agente já rodou o verify dentro do seu worktree; o orquestrador roda o verify compartilhado UMA vez após o merge — ver §3b-w.)
159
168
  - Para cada relatório retornado:
160
169
  - Aplicar `Skill(morph-eval)`.
161
170
  - Gravar o score: `morph-spec score {feature} {taskId} {score} --dims {a},{c},{q},{t}`.
@@ -164,6 +173,18 @@ Aguardar todos os agentes terminarem. O hook `subagent-report-guard` (Stop/Subag
164
173
 
165
174
  Depois do batch paralelo, executar o restante em modo sequencial (passo 3a).
166
175
 
176
+ ### 3b-w. Batch isolado por worktree (quando o dag recomenda)
177
+
178
+ Quando o `morph-spec dag {feature}` reporta `isolation.recommended: "worktree"` (dois fluxos paralelos planejam escrever no mesmo path — colisão de `outputs`), despache cada fluxo com o parâmetro `isolation: "worktree"` do tool Agent. Cada agente trabalha numa working tree própria; build/test rodam lá dentro sem colidir.
179
+
180
+ 1. **Dispatch:** mesmo `subagent_type: "morph-{id}"` e standards de §3b, mais `isolation: "worktree"`. Se a stack for Node e faltar `node_modules` no worktree, o agente roda `morph-spec worktree link` (fail-open) antes de testar; se ainda impossível, reporta "verificação: não executada" (o verify pós-merge cobre). O agente commita na branch do worktree e reporta a branch.
181
+ 2. **Integração (orquestrador, após todos os relatórios):** faça o merge de cada branch reportada, uma por vez, na ordem de chegada — `git merge --no-ff <branch>`. Conflito → `git merge --abort`, marque a task de volta a `pending` com nota "merge conflict — reexecutar sequencial", siga para a próxima branch. Os paths em conflito são exatamente os de `isolation.collisions` do dag.
182
+ 3. **Pós-merge:** rode `morph-spec verify {feature} --json` UMA vez (o merge é o novo ponto de integração — verificação compartilhada obrigatória), depois `morph-eval` + `morph-spec score` por relatório, como em §3b.
183
+ 4. **Cleanup:** `git worktree remove` + `git branch -d` das branches integradas + `git worktree prune` (fail-open). Branches não integradas ficam e são registradas no recap com o motivo.
184
+ 5. **Agente morto no meio:** se commitou, a branch sobrevive (retomável); senão, a task volta a `pending` na lane sequencial. Registre a falha de protocolo no recap.
185
+
186
+ > Anti-padrões: não misture unidades isoladas e não-isoladas no mesmo batch; o subagent nunca faz merge (integração é exclusiva do orquestrador).
187
+
167
188
  ### 4. Conclusão de tasks
168
189
 
169
190
  Quando `getPendingTasks(data).length === 0`:
@@ -222,7 +243,8 @@ O comando grava `gateDecisions.review = { pause, reason, signals, trust, decided
222
243
  - `framework/skills/core/morph-implement/SKILL.md`
223
244
  - `framework/skills/core/morph-eval/SKILL.md`
224
245
  - `framework/skills/core/morph-review/SKILL.md`
225
- - `morph-spec dag {feature}` — análise de DAG e decisão sequencial vs paralelo (ponderada por effort)
246
+ - `morph-spec dag {feature}` — análise de DAG e decisão sequencial vs paralelo (ponderada por effort), incluindo recomendação de isolamento (`isolation.recommended: "worktree"`)
247
+ - `morph-spec verify {feature} [task] --json` — cadeia determinística build+testes+validadores (código antes do juiz)
226
248
  - `morph-spec score {feature} {task} {score} [--dims a,c,q,t]` — grava taskScores no feature.json com timestamp server-side
227
249
  - `morph-spec gate-decision {feature} {gate} --pause {bool} [--reason ...] [--signals ...]` — grava gateDecisions no feature.json com timestamp server-side (shape em `.morph/framework/schemas/feature.schema.json`)
228
250
  - `.morph/framework/MORPH.md` §5 — regras de pausa de gate (trust mode)
@@ -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.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-brainstorming
@@ -29,6 +29,12 @@ O harness conhece o stack por padrão. Não pergunte sobre tecnologia a menos qu
29
29
 
30
30
  **Padrões proibidos:** `Guid.NewGuid()`, classes não-sealed sem justificativa, exceptions sem result pattern, camada de Service/Manager entre handler e dados, repository genérico (`IRepository<T>`/`IUnitOfWork`), SQL cru sem justificativa. Acesso a dados em VSA: `ApplicationDbContext` direto no slice (`DbSet<T>` já é repository, `DbContext` já é unit of work); para concorrência ou SQL específico, store dedicado hand-written com justificativa em `decisions.md`.
31
31
 
32
+ ## Modo bug-lean (`workType: bug`)
33
+
34
+ Quando a feature tem `workType: bug` (roteada pela `morph-proposal` — ver MORPH.md §2.1 "Roteamento por tipo de trabalho"), o brainstorming é enxuto: pule as 4 perguntas de negócio da Parte 1 e faça **no máximo 1 pergunta de repro** via `AskUserQuestion` (como reproduzir, em qual ambiente) — só se isso não estiver claro no pedido original. O `stack-scan` (Parte 2) continua rodando normalmente, o diagnóstico precisa do contexto técnico. O `proposal.md` (Parte 3) foca em **Repro / Diagnóstico / Root cause provável / Escopo do fix / Critérios de aceite**, sem as perguntas de negócio completas.
35
+
36
+ Para `workType: feature` (ou features sem `workType` — compat, ver MORPH.md §2.1), o fluxo completo abaixo permanece integral.
37
+
32
38
  ## O que fazer
33
39
 
34
40
  ### Parte 1 — Entendimento de negócio
@@ -71,6 +77,8 @@ O harness conhece o stack por padrão. Não pergunte sobre tecnologia a menos qu
71
77
  - **Riscos e dependências:** o que pode dar errado, o que esta feature depende
72
78
  - **Compliance de stack:** "Em compliance" ou lista de desvios detectados e plano de resolução
73
79
 
80
+ **Se `workType: bug`** (modo bug-lean, ver nota no início da skill), substitua a lista acima pela estrutura enxuta: **Repro** (passos para reproduzir), **Diagnóstico** (o que foi observado/investigado), **Root cause provável**, **Escopo do fix** (o que muda, o que fica de fora) e **Critérios de aceite** (condição verificável de que o bug foi corrigido) — sem as seções de negócio completas do fluxo `feature`.
81
+
74
82
  Um bom proposal.md tem no máximo 2 páginas. Se está crescendo além disso, o escopo precisa ser cortado.
75
83
 
76
84
  5. Apresente o Gate 1 segundo trust mode.
@@ -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.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-eval
@@ -17,10 +17,14 @@ O objetivo não é punir — é identificar o que melhorar antes de seguir adian
17
17
  Após concluir uma tarefa ou ao finalizar a fase de implementação.
18
18
  Também invocado ao receber o retorno de um sub-agent com auto-score < 7.
19
19
 
20
+ **Somente após `morph-spec verify {feature} {task}` verde** (a `morph-apply` garante isso no loop §3a). O verify é a barreira determinística (build+testes+validadores); esta skill julga o que o código não pega: arquitetura, contratos, qualidade, cobertura qualitativa.
21
+
20
22
  > **Escopo de fase (Gate 3):** a avaliação da feature inteira NÃO é feita por quem implementou — a `morph-review` despacha a persona `evaluator` de `agents.json` (contexto fresco, sem autoria; recebe mandate + diff + saída real dos testes) usando esta skill como guia. O eval por task pode ser inline; o score composto do Gate 3 vem sempre do avaliador independente.
21
23
 
22
24
  ## O que fazer
23
25
 
26
+ 0. Confirme que o `morph-spec verify` da task está verde (a morph-apply passa o resultado; numa invocação manual, rode `morph-spec verify {feature} {task} --json`). Se estiver vermelho, NÃO avalie — devolva o `feedback[]` do verify ao loop de correção.
27
+
24
28
  1. Identifique o escopo da avaliação: tarefa única ou fase completa.
25
29
 
26
30
  2. Para cada dimensão, leia a rubrica correspondente em `.morph/framework/evals/rubrics/`:
@@ -48,6 +52,7 @@ Também invocado ao receber o retorno de um sub-agent com auto-score < 7.
48
52
  - Score persistido em `taskScores` via `morph-spec score` (o trace é gerado automaticamente pelo hook `trace-autogen`)
49
53
 
50
54
  ## Referências
55
+ - `morph-spec verify {feature} [task] --json` — barreira determinística (build+testes+validadores) que precede esta skill
51
56
  - `.morph/framework/evals/rubrics/architecture.md` — rubrica de arquitetura (30%)
52
57
  - `.morph/framework/evals/rubrics/contracts.md` — rubrica de contratos (25%)
53
58
  - `.morph/framework/evals/rubrics/code-quality.md` — rubrica de qualidade (25%)
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: morph-hotfix
3
+ description: ADW cirúrgico de hotfix — resolve uma queda/bug crítico de produção com prioridade máxima em velocidade, com aprovação humana obrigatória antes do ship.
4
+ version: core
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
+ user-invokable: true
7
+ cliVersion: "8.1.0"
8
+ ---
9
+
10
+ # morph-hotfix
11
+
12
+ ## Objetivo
13
+
14
+ Resolver uma queda ou bug crítico de produção o mais rápido possível — prioridade é velocidade, não elegância — mantendo aprovação humana obrigatória antes do ship. É o pipeline dimensionado por `workType: hotfix` (MORPH.md §2.1): scout → fix cirúrgico → aprovação humana → test loop → ship.
15
+
16
+ ## Quando invocar
17
+
18
+ - Usuário roda `/morph-hotfix {feature}` diretamente.
19
+ - `Skill(morph-proposal)` classifica o pedido como `hotfix` no Passo 0 de roteamento e invoca esta skill.
20
+ - Usuário diz "produção caiu", "hotfix", "urgente", "incident", "P0" — sinais que o detector determinístico de `morph-spec create --request` já reconhece.
21
+
22
+ ## Argumentos
23
+
24
+ - `{feature-name}` — nome em kebab-case da feature. Se ausente, perguntar via `AskUserQuestion`.
25
+
26
+ ## Fluxo
27
+
28
+ ### 1. Nascimento da feature
29
+
30
+ ```
31
+ morph-spec create {feature} --type hotfix
32
+ ```
33
+
34
+ Carimba os gates `proposal` e `plan` como `approvedBy: "policy:hotfix"` e cria as pastas `0-proposal/`, `2-plan/`, `3-implement/` num passo só — a feature já nasce em `implement` (fase derivada é gate-aware). Se a feature já existe, siga adiante sem recriar.
35
+
36
+ ### 2. Scout — mapa do território (obrigatório)
37
+
38
+ Despache o scout com o sintoma reportado, antes de qualquer fix:
39
+
40
+ ```
41
+ subagent_type: "morph-scout"
42
+ ```
43
+
44
+ **Fallback** (se `morph-scout` não estiver registrado nos subagent types deste projeto): `general-purpose` com o campo `persona` do agente `scout` colado no prompt, **registrando o fallback nas notes da task**.
45
+
46
+ Peça ao scout: localizar o root cause provável, os arquivos afetados e o blast radius (o que mais pode quebrar). Ele é read-only (Read/Glob/Grep/Bash somente-leitura) — não escreve código. Inclua as 3 cláusulas do contrato do relatório final no prompt (template literal em `morph-implement` §4 / `morph-apply` §3b): ato final = o relatório é a última mensagem de texto, sem `SendMessage`; não tocar `tasks.json`/`feature.json`/`state.json` nem o board de sessão; sem build/test da suíte compartilhada em batch paralelo.
47
+
48
+ ### 3. Hotfix brief (`0-proposal/proposal.md`)
49
+
50
+ Escreva o brief curto (~20 linhas) reutilizando o nome canônico `proposal.md`:
51
+
52
+ - **Sintoma** — o que está quebrado, em produção, agora.
53
+ - **Root cause** — o que o scout localizou.
54
+ - **Blast radius** — o que mais pode quebrar com o fix.
55
+ - **Plano do fix** — a mudança mínima que resolve o sintoma.
56
+
57
+ ### 4. Plano mínimo (`2-plan/tasks.json`)
58
+
59
+ Escreva um `tasks.json` mínimo validado contra `framework/schemas/tasks.schema.json`:
60
+
61
+ - `T1` — o fix.
62
+ - `T2` — verify/regressão do blast radius.
63
+
64
+ Isso liga trace/score/dag de graça (o hook `trace-autogen` gera o trace a partir do primeiro write de `tasks.json`) — não pule esta escrita mesmo sob pressão de tempo.
65
+
66
+ ### 5. Fix cirúrgico
67
+
68
+ Implemente a mudança mínima — inline se estiver no domínio já carregado, ou despachando a persona de domínio via `subagent_type: "morph-{id}"` conforme `MORPH.md` §6 se a task cruzar domínio ou tiver esforço L/XL. Prioridade: tirar a falha do ar, não refatorar — melhorias de forma (não de correção) vão para o roadmap-fora-hotfix, não para este diff.
69
+
70
+ Aplique `morph-eval` com foco em correção: pese `contracts.md` e `test-coverage.md` mais que `architecture.md` — o objetivo do hotfix é parar a sangria com o menor blast radius, não elegância de arquitetura.
71
+
72
+ ### 6. Test loop no blast radius
73
+
74
+ Rode a cadeia determinística focada na(s) task(s) do fix, não uma suíte ad-hoc:
75
+
76
+ ```
77
+ morph-spec verify {feature} {task} --json
78
+ ```
79
+
80
+ Use `--skip-tests`/`--skip-build` quando fizer sentido para velocidade (ex.: iterar rápido no build antes de rodar a suíte completa), mas o `T2` de verify/regressão do passo 4 precisa fechar verde antes do Gate 3. Capture a saída real dos testes no `recap.md` — não descreva "testes passaram" sem colar a evidência.
81
+
82
+ ### 7. Gate 3 — SEMPRE humano
83
+
84
+ O hotfix tem `forcedPauseGates: ['review']` (`src/core/work-types.js`) — o Gate 3 pausa **sempre**, mesmo em `trust: auto`. Persista a decisão antes de apresentar:
85
+
86
+ ```
87
+ morph-spec gate-decision {feature} review --pause true --reason "hotfix: aprovação humana obrigatória" --signals '{"workType":"hotfix","evalScore":X}'
88
+ ```
89
+
90
+ Escreva `4-review/review-report.md` curto: diff do fix + evidência real de teste (saída do `verify` do passo 6). Depois, **`AskUserQuestion` SEMPRE**:
91
+
92
+ ```
93
+ question: "Gate 3 — Hotfix de {feature} pronto para ship?"
94
+ header: "Gate 3"
95
+ options:
96
+ - { label: "aprovado, ship", description: "Aceitar o fix e liberar para produção" }
97
+ - { label: "preciso ajustar", description: "Apontar correções antes de fechar" }
98
+ - { label: "rollback", description: "Desfazer o fix — voltar ao estado anterior" }
99
+ ```
100
+
101
+ **NUNCA `morph-spec approve {feature} review --mode auto`** — o CLI recusa explicitamente essa combinação (`src/commands/state/approve.js`: `gateName === 'review' && feature.workType === 'hotfix' && approvedBy === 'auto'` é bloqueado) porque `forcedPauseGates` sobrepõe qualquer trust mode. Em contexto headless (sem `AskUserQuestion` disponível), a resposta textual "aprovado" do usuário é registrada pelo hook `state-sync` como `approvedBy: "manual"` — nunca `"auto"`.
102
+
103
+ ### 8. Pós-gate (o "test loop → ship" de `MORPH.md` §2.1)
104
+
105
+ - Rode a suíte completa uma vez: `morph-spec verify {feature}` (sem escopo de task — cobertura da feature inteira, agora que o Gate 3 está aprovado).
106
+ - Sinalize ao usuário: commit do fix e `morph-spec archive {feature}` (ou `morph-spec worktree finish {feature}` se a feature nasceu em worktree — ver `MORPH.md` §2.2) estão prontos.
107
+ - Não arquive automaticamente — usuário decide quando.
108
+
109
+ ## Anti-padrões
110
+
111
+ - Não pular o scout — mesmo sob pressão, o mapa de blast radius evita um segundo incidente causado pelo próprio fix.
112
+ - Não auto-aprovar o Gate 3 — nunca tente `morph-spec approve {feature} review --mode auto` num hotfix; o backstop server-side existe exatamente para isso.
113
+ - Não "fazer do jeito certo" às custas da velocidade — refatoração, cobertura extra, ou hardening que não bloqueia o sintoma atual vira item no roadmap-fora-hotfix, não neste diff.
114
+ - Não rodar suíte ad-hoc fora do `morph-spec verify` — a cadeia determinística é a única fonte de evidência aceita no review-report.
115
+
116
+ ## Output esperado
117
+
118
+ - `.morph/features/{feature}/0-proposal/proposal.md` — hotfix brief (sintoma/root cause/blast radius/plano)
119
+ - `.morph/features/{feature}/2-plan/tasks.json` — T1 (fix) + T2 (verify/regressão)
120
+ - `.morph/features/{feature}/3-implement/recap.md` — evidência real de teste
121
+ - `.morph/features/{feature}/4-review/review-report.md` — diff + evidência, Gate 3 sempre humano
122
+ - Gates `proposal`/`plan` carimbados `approvedBy: "policy:hotfix"`; Gate 3 registrado `approvedBy: "manual"` em `feature.json` (autoritativo) — nunca `"auto"`
123
+
124
+ ## Referências
125
+
126
+ - `.morph/framework/MORPH.md` §2.1 — roteamento por tipo de trabalho
127
+ - `.morph/framework/MORPH.md` §5 — Gates de aprovação, gate humano forçado no hotfix
128
+ - `.morph/framework/MORPH.md` §6 — Sub-agents, persona de estágio scout, protocolo obrigatório
129
+ - `framework/skills/core/morph-proposal/SKILL.md` — Passo 0, roteamento que invoca esta skill
130
+ - `framework/skills/core/morph-implement/SKILL.md` §4 — template de dispatch e protocolo
131
+ - `src/core/work-types.js` — `scaffold`/`skippedGates`/`forcedPauseGates` do tipo `hotfix`
132
+ - `morph-spec create {feature} --type hotfix` — nascimento com política de gates
133
+ - `morph-spec verify {feature} [task] --json` — cadeia determinística build+testes+validadores
134
+ - `morph-spec gate-decision {feature} review --pause true [--reason ...] [--signals ...]` — persiste a decisão de pausa antes do Gate 3
@@ -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.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-implement
@@ -58,32 +58,27 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
58
58
  Arquivos relevantes: [lista de paths]
59
59
  Done quando: [doneCriteria do tasks.json]
60
60
 
61
- Protocolo obrigatório:
62
- 1. ATO FINAL OBRIGATÓRIO — relatório via SendMessage: chame a tool
63
- SendMessage com to:"main" e o relatório completo no content como a
64
- ÚLTIMA tool call do seu turno. Sua última mensagem em texto NÃO chega
65
- ao orquestrador — só SendMessage chega. Encerre IMEDIATAMENTE depois
66
- da chamada: zero texto adicional, zero nova tool call, zero "aguardando
67
- confirmação" — o SendMessage É o encerramento, não um passo
68
- intermediário antes de um encerramento "de verdade".
69
- Exemplo literal (última chamada de tool da sua sessão, sem nada depois):
70
- SendMessage({ to: "main", content: "T{N} concluída. (1) O que foi feito:
71
- handler + validator do slice X. (2) Arquivos: src/Features/X/Handler.cs,
72
- tests/X/HandlerTests.cs. (3) Problemas: nenhum. (4) Auto-score: 9/10" })
73
- Terminar idle sem SendMessage, ou continuar agindo depois dele, é
74
- falha de protocolo — cada segundo entre o SendMessage e o fim real do
75
- turno é cauda que o orquestrador espera sem necessidade.
61
+ Contrato do relatório final:
62
+ 1. ATO FINAL — o seu relatório é a sua ÚLTIMA MENSAGEM DE TEXTO: ela é o
63
+ valor de retorno desta sessão e chega inteira ao orquestrador. NÃO chame
64
+ SendMessage: ele gera um evento a mais além da notificação de término,
65
+ custando um turno inútil ao orquestrador. Escreva o relatório e encerre.
66
+ Relatório oco, ou sem os 4 itens abaixo, é falha de protocolo.
76
67
  2. NÃO toque em tasks.json, feature.json, state.json nem no board de sessão
77
68
  (TaskCreate/TaskUpdate) — todo estado é gravado exclusivamente pelo
78
69
  orquestrador.
79
- 3. Se você faz parte de um batch paralelo, NÃO rode build/test da suíte
80
- compartilhada — a verificação é do orquestrador, pós-batch.
81
-
82
- Retorne no content do SendMessage APENAS: (1) o que foi feito em 2-3 frases,
70
+ 3. Verificação condicional ao isolamento: em batch paralelo SEM isolamento,
71
+ NÃO rode build/test da suíte compartilhada — a verificação
72
+ (`morph-spec verify`) é do orquestrador, uma vez, pós-batch. Em batch
73
+ COM `isolation: "worktree"`, rode build/test dentro do seu worktree,
74
+ commite na branch do worktree como último ato antes do relatório
75
+ e reporte a branch — nunca faça merge.
76
+
77
+ Seu relatório final deve conter APENAS: (1) o que foi feito em 2-3 frases,
83
78
  (2) arquivos modificados, (3) problemas encontrados e como foram resolvidos,
84
79
  (4) auto-score 0-10.
85
80
  ```
86
- Após receber o retorno: o auto-score é **triagem, não aprovação** — se < 7, re-despache com o feedback específico (ou corrija inline) antes de prosseguir. Em qualquer caso, a task só avança quando `morph-eval` der score ≥ 9 (barra única do MORPH.md §0). **Libere a sessão do sub-agent imediatamente após consumir o relatório** — chame `TaskStop(task_id: <id/nome retornado pelo dispatch>)`. Isso evita que o idle-detector do harness dispare minutos depois e injete um `idle_notification` como teammate-message vazio na sua sessão; trate falha do TaskStop (agente já finalizado sozinho) como não-fatal. Integre o relatório ao recap.md e vá para o passo 7.
81
+ Após receber o retorno: o auto-score é **triagem, não aprovação** — se < 7, re-despache com o feedback específico (ou corrija inline) antes de prosseguir. Em qualquer caso, a task só avança quando `morph-eval` der score ≥ 9 (barra única do MORPH.md §0). Integre o relatório ao recap.md e vá para o passo 7.
87
82
 
88
83
  **Se não — siga para o passo 5.**
89
84
 
@@ -137,7 +132,7 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
137
132
  > tasks.json + recap.md + `taskScores` do feature.json. **NÃO escreva o trace
138
133
  > manualmente** — a escrita manual foi removida da cerimônia por task.
139
134
 
140
- 8. 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.
135
+ 8. Quando invocada por `morph-apply`, retornar o controle à skill orquestradora — ela decide qual task vem em seguida via `getReadyTasks(data)`. Não rode a suíte de testes inteira do projeto por conta própria ao fim da task quando invocada pela `morph-apply` — a verificação determinística (`morph-spec verify {feature} {task}`) é do orquestrador, logo após seu retorno (ver morph-apply §3a). 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.
141
136
 
142
137
  ## Output esperado
143
138
  - Código implementado conforme o standard consultado (direto ou via sub-agent)
@@ -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.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-plan
@@ -73,10 +73,14 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
73
73
  - `group` (opcional): backend, frontend, tests, infra, docs. Default backend.
74
74
  - `outputs` (opcional): array de paths que serão criados/modificados.
75
75
 
76
+ **Preencha `outputs` (paths planejados) em cada task** — o `morph-spec dag` usa os outputs para detectar colisão de arquivos entre fluxos paralelos e recomendar `isolation: "worktree"`. Task sem `outputs` entra como footprint desconhecido (não força isolamento, mas o dag não consegue protegê-la de colisão).
77
+
76
78
  Antes de retornar, valide rodando `morph-spec dag {feature}` — o comando parseia e valida o schema do tasks.json (ids únicos `T\d+`, enums de `status`/`effort`, `dependencies` válidas) e já imprime a análise de DAG que a `/morph-apply` vai usar. Erros de schema abortam com a lista do que corrigir.
77
79
 
78
80
  5. Apresente o Gate 2 segundo trust mode.
79
81
 
82
+ Você pode embutir o diagrama do DAG do plano via `morph-spec dag {feature} --mermaid` (flowchart Mermaid) para visualização no gate.
83
+
80
84
  Ler `.morph/config/config.json → trust` (default `"auto"`). Calcular os sinais de risco em linguagem natural — sem scripts:
81
85
 
82
86
  - `taskCount` = número de tasks do tasks.json.
@@ -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.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-proposal
@@ -30,6 +30,26 @@ Conduzir uma feature do request inicial até o plano aprovado (Gate 2), sem inte
30
30
 
31
31
  ## Fluxo
32
32
 
33
+ ### 0. Roteamento por tipo de trabalho
34
+
35
+ Antes de qualquer trabalho de negócio, classifique o pedido. Se `{feature-name}` ainda não foi determinado, pergunte via `AskUserQuestion` antes desta chamada (ver Argumentos):
36
+
37
+ ```
38
+ morph-spec create {feature-name} --request "<pedido do usuário>"
39
+ ```
40
+
41
+ (ou `--type <tipo>` diretamente quando o tipo é óbvio pelo pedido — ex.: o usuário já diz "isso é um hotfix").
42
+
43
+ - **Classificação `high` confidence** — a feature nasce com o `workType` decidido pelo detector determinístico (keywords: `hotfix` — "produção caiu/urgente/incident/p0"; `bug` — "bug/corrigir/exception/regressão"; `chore` — "typo/rename/bump/config/docs/cleanup"). Prossiga para o branch correspondente abaixo.
44
+ - **Exit 2** (empate `tie` ou nenhum sinal `none`) — o comando sai sem criar a feature e imprime `{ needsDecision, candidates, matched }`. **Você é o roteador**: decida o tipo entre os candidatos e re-rode com `morph-spec create {feature-name} --type <tipo>`. Só use `AskUserQuestion` para o usuário quando o pedido for genuinamente indeterminado — a maioria dos empates o roteador resolve sozinho pelo contexto da conversa.
45
+
46
+ **Branches por tipo** (dimensionamento completo em `MORPH.md` §2.1):
47
+
48
+ - **`hotfix`** → invoque `Skill(morph-hotfix)` passando `{feature-name}` e **ENCERRE** — não siga o restante deste fluxo. A skill cuida de scout, brief, fix cirúrgico, test loop e Gate 3 (sempre humano).
49
+ - **`chore`** → fast-track: os Gates 1 e 2 já nasceram carimbados `policy:chore` no `create`. Escreva um `2-plan/tasks.json` mínimo (1-3 tasks) e invoque `Skill(morph-apply)` diretamente — **exceção documentada** à regra do passo 7 ("não despachar `morph-apply` automaticamente"): não pausar numa mudança óbvia é exatamente o valor do fast-track.
50
+ - **`bug`** → siga para `Skill(morph-brainstorming)` em modo **bug-lean**: produz um `proposal.md` enxuto (repro / diagnóstico / root cause / escopo / critério de aceite — não a proposta completa de uma feature nova) e depois um plano enxuto via `Skill(morph-plan)`. Gates 1 e 2 continuam trust-aware (passos 3 e 6) — só o conteúdo dos artefatos é mais curto.
51
+ - **`feature`** (default — inclui features criadas antes do v8 sem `workType`) → siga o fluxo completo abaixo (passos 1-7): brainstorming → Gate 1 → plan → Gate 2.
52
+
33
53
  ### 1. Determinar feature name e estado
34
54
 
35
55
  - Se argumento ausente: perguntar via `AskUserQuestion` (1 pergunta, header "Feature").
@@ -117,6 +137,7 @@ Lógica idêntica ao passo 3 (`shouldPauseGate` + AskUserQuestion ou auto-aprova
117
137
  - Não pular o Gate 1 mesmo em trust:auto se houver divergência detectada.
118
138
  - Não escrever código nesta fase — apenas artefatos de planejamento.
119
139
  - Não perguntar sobre stack — o stack padrão está em MORPH.md / mandate.
140
+ - Não rodar o pipeline completo de 5 fases num `chore` ou `bug` óbvio — o Passo 0 existe para dimensionar o trabalho pelo `workType`, não para ser pulado "para simplificar".
120
141
 
121
142
  ## Output esperado
122
143
 
@@ -129,6 +150,8 @@ Lógica idêntica ao passo 3 (`shouldPauseGate` + AskUserQuestion ou auto-aprova
129
150
  ## Referências
130
151
 
131
152
  - `.morph/framework/MORPH.md` — charter NLH completo
153
+ - `.morph/framework/MORPH.md` §2.1 — roteamento por tipo de trabalho (Passo 0)
132
154
  - `framework/skills/core/morph-brainstorming/SKILL.md`
133
155
  - `framework/skills/core/morph-plan/SKILL.md`
156
+ - `framework/skills/core/morph-hotfix/SKILL.md` — pipeline invocado pelo branch `hotfix` do Passo 0
134
157
  - `.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: "7.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-review
@@ -43,7 +43,7 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
43
43
  outro propósito. Falha aqui é bloqueante — quebra silenciosa em runtime, não em build.
44
44
 
45
45
  4. **Despache o avaliador independente** — o score do Gate 3 nunca é auto-atribuído por quem implementou:
46
- - Rode a suíte de testes do projeto e capture a **saída real** (não um resumo seu).
46
+ - Rode `morph-spec verify {feature} --json` (escopo feature) e capture o JSON — é a saída real de build+testes+validadores que você anexa ao prompt do avaliador independente (`morph-evaluator`).
47
47
  - Gere o **diff da implementação** (`git diff` do range da feature, ou a lista de arquivos do recap.md com seus conteúdos atuais).
48
48
  - Despache o subagent registrado `morph-evaluator` (gerado de `agents.json` — a persona do avaliador é o system prompt dele, com tools read-only), com contexto fresco:
49
49
  ```
@@ -56,22 +56,18 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
56
56
  seguindo as bandas 0-10 de cada uma.
57
57
  NÃO reescreva código. NÃO toque em tasks.json, feature.json nem no board
58
58
  de sessão.
59
- Protocolo obrigatório — ATO FINAL: chame a tool SendMessage com
60
- to:"main" e o relatório completo no content como a ÚLTIMA tool call
61
- do seu turno; sua última mensagem em texto NÃO chega ao orquestrador
62
- — só SendMessage chega. Encerre IMEDIATAMENTE depois: zero texto
63
- adicional, zero nova tool call, zero "aguardando confirmação".
64
- Exemplo literal (última chamada de tool da sua sessão, sem nada depois):
65
- SendMessage({ to: "main", content: "Review de {feature}: arch=9.0
66
- contracts=9.5 quality=9.0 tests=8.5 → composto 9.05. Feedback: ..." })
67
- Terminar idle sem SendMessage, ou continuar agindo depois dele, é
68
- falha de protocolo.
69
- Retorne no content: score 0-10 por dimensão, score composto (arch×0.30 +
70
- contracts×0.25 + quality×0.25 + tests×0.20), e feedback priorizado
71
- (bloqueantes primeiro) para qualquer dimensão < 9.
59
+ Contrato do relatório final — ATO FINAL: o seu relatório é a sua
60
+ ÚLTIMA MENSAGEM DE TEXTO; ela é o valor de retorno desta sessão e
61
+ chega inteira ao orquestrador. NÃO chame SendMessage: ele gera um
62
+ evento a mais além da notificação de término, custando um turno
63
+ inútil ao orquestrador. Escreva o relatório e encerre.
64
+ Seu relatório final deve conter: score 0-10 por dimensão, score
65
+ composto (arch×0.30 + contracts×0.25 + quality×0.25 + tests×0.20), e
66
+ feedback priorizado (bloqueantes primeiro) para qualquer dimensão < 9.
67
+ Relatório oco, ou sem esses itens, é falha de protocolo.
72
68
  ```
73
69
  - **Fallback (tipo não registrado):** se `morph-evaluator` não estiver na sua lista de subagent types, despache `general-purpose` colando o campo `persona` do agente `evaluator` (Read em `.morph/framework/agents.json`) no topo do prompt — e **registre o fallback no review-report** (seção de método).
74
- - Os scores por dimensão e o composto do review-report vêm **desse retorno**, não da sua auto-avaliação. O hook `subagent-report-guard` bloqueia uma vez o encerramento do avaliador sem SendMessage; se mesmo assim ele ficar idle sem reportar, cobre via SendMessage antes de prosseguir (fallback). **Assim que o relatório chegar, libere a sessão do avaliador** — `TaskStop(task_id: <id/nome retornado pelo dispatch>)` — para não deixá-lo pendurado até o idle-detector do harness disparar um `idle_notification` de volta a esta sessão.
70
+ - Os scores por dimensão e o composto do review-report vêm **desse retorno**, não da sua auto-avaliação. Se o relatório vier oco ou sem os scores por dimensão, registre a falha de protocolo na seção de método do review-report e re-despache.
75
71
 
76
72
  5. Produza `review-report.md` em `.morph/features/{feature}/4-review/` com:
77
73
  - Scores por dimensão (arquitetura, contratos, qualidade, cobertura)
@@ -126,6 +122,7 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
126
122
  - 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
127
123
 
128
124
  ## Referências
125
+ - `morph-spec verify {feature} [task] --json` — cadeia determinística build+testes+validadores anexada ao prompt do avaliador (passo 4)
129
126
  - `.morph/framework/MORPH.md` — seção 5 (Gate 3 + regras de pausa), seção 1 (papel Evaluator), Trust Mode
130
127
  - `.claude/agents/morph-evaluator.md` — subagent do avaliador (gerado de `.morph/framework/agents.json`), despachado no passo 4
131
128
  - `framework/skills/core/morph-eval/SKILL.md` — rubricas e bandas que o avaliador aplica
@@ -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.9.4"
7
+ cliVersion: "8.1.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.9.4"
7
+ cliVersion: "8.1.0"
8
8
  ---
9
9
 
10
10
  # morph-standards