@polymorphism-tech/morph-spec 8.34.2 → 8.35.1

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 (328) hide show
  1. package/CLAUDE.md +22 -5
  2. package/README.md +2 -2
  3. package/bin/morph-spec.js +18 -4
  4. package/bin/validate.js +379 -379
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +5 -4
  7. package/docs/QUICKSTART.md +1 -1
  8. package/framework/MORPH.md +16 -17
  9. package/framework/agents.json +197 -44
  10. package/framework/ai-pin.json +22 -0
  11. package/framework/commands/morph-media.md +45 -0
  12. package/framework/docs/CLI.md +236 -11
  13. package/framework/evals/proof-rubrics/README.md +76 -0
  14. package/framework/evals/proof-rubrics/eval-de-modelo.md +64 -0
  15. package/framework/evals/proof-rubrics/fiacao.md +54 -0
  16. package/framework/evals/proof-rubrics/guard-cego.md +52 -0
  17. package/framework/evals/proof-rubrics/media-claims.md +109 -0
  18. package/framework/evals/proof-rubrics/mutation-proof.md +77 -0
  19. package/framework/evals/proof-rubrics/observabilidade-genai.md +119 -0
  20. package/framework/evals/proof-rubrics/verde-nao-e-coberto.md +48 -0
  21. package/framework/evals/rubrics/architecture.md +30 -0
  22. package/framework/evals/rubrics/code-quality.md +26 -0
  23. package/framework/evals/rubrics/test-coverage.md +20 -0
  24. package/framework/hooks/claude-code/core/protect-spec-files.js +41 -4
  25. package/framework/hooks/claude-code/core/worktree-env-inject.js +43 -0
  26. package/framework/hooks/claude-code/statusline.sh +11 -11
  27. package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
  28. package/framework/hooks/git/pre-commit/agents.sh +25 -25
  29. package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
  30. package/framework/hooks/git/pre-commit/specs.sh +50 -50
  31. package/framework/hooks/git/pre-push/run-tests.sh +44 -44
  32. package/framework/hooks/shared/e2e-check.js +135 -22
  33. package/framework/hooks/shared/payload-utils.js +15 -2
  34. package/framework/hooks/shared/stdin-reader.js +26 -26
  35. package/framework/rules/ai-agents-standards.md +14 -2
  36. package/framework/schemas/ai-pin.schema.json +97 -0
  37. package/framework/schemas/config.schema.json +107 -0
  38. package/framework/schemas/feature.schema.json +23 -4
  39. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  40. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  41. package/framework/skills/core/morph-apply/SKILL.md +26 -5
  42. package/framework/skills/core/morph-brainstorming/SKILL.md +1 -1
  43. package/framework/skills/core/morph-eval/SKILL.md +1 -1
  44. package/framework/skills/core/morph-hotfix/SKILL.md +2 -2
  45. package/framework/skills/core/morph-implement/SKILL.md +18 -2
  46. package/framework/skills/core/morph-media/SKILL.md +215 -0
  47. package/framework/skills/core/morph-plan/SKILL.md +33 -2
  48. package/framework/skills/core/morph-proposal/SKILL.md +1 -1
  49. package/framework/skills/core/morph-review/SKILL.md +166 -9
  50. package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
  51. package/framework/skills/core/morph-standards/SKILL.md +1 -1
  52. package/framework/skills/core/morph-uiux/SKILL.md +1 -1
  53. package/framework/standards/PROVENANCE.json +81 -3
  54. package/framework/standards/STANDARDS.json +1483 -839
  55. package/framework/standards/ai-agents/agent-archetypes.md +160 -0
  56. package/framework/standards/ai-agents/agent-session.md +164 -68
  57. package/framework/standards/ai-agents/agent-spec.md +196 -0
  58. package/framework/standards/ai-agents/batching.md +61 -37
  59. package/framework/standards/ai-agents/context-providers.md +97 -24
  60. package/framework/standards/ai-agents/conversational-agent-with-phases.md +239 -0
  61. package/framework/standards/ai-agents/cost-and-budget.md +256 -0
  62. package/framework/standards/ai-agents/durable-workflows-hitl.md +98 -5
  63. package/framework/standards/ai-agents/evals-with-cache.md +289 -0
  64. package/framework/standards/ai-agents/guardrails.md +222 -0
  65. package/framework/standards/ai-agents/llm-runtime-defaults.md +226 -0
  66. package/framework/standards/ai-agents/mcp-server.md +119 -18
  67. package/framework/standards/ai-agents/mcp-tools.md +85 -32
  68. package/framework/standards/ai-agents/media-pipeline.md +352 -0
  69. package/framework/standards/ai-agents/media-video.md +267 -0
  70. package/framework/standards/ai-agents/middleware-patterns.md +39 -5
  71. package/framework/standards/ai-agents/modalities-image-gen.md +354 -105
  72. package/framework/standards/ai-agents/modalities-speech-to-text.md +8 -2
  73. package/framework/standards/ai-agents/modalities-text-to-speech.md +10 -2
  74. package/framework/standards/ai-agents/modalities-vision.md +6 -2
  75. package/framework/standards/ai-agents/multi-agent-patterns.md +61 -5
  76. package/framework/standards/ai-agents/observability-patterns.md +227 -17
  77. package/framework/standards/ai-agents/production.md +38 -9
  78. package/framework/standards/ai-agents/prompt-sources.md +389 -0
  79. package/framework/standards/ai-agents/providers/model-registry.md +174 -39
  80. package/framework/standards/ai-agents/rag-custom-pgvector.md +69 -4
  81. package/framework/standards/ai-agents/service-tier-flex.md +27 -19
  82. package/framework/standards/ai-agents/setup.md +166 -50
  83. package/framework/standards/ai-agents/structured-output.md +34 -3
  84. package/framework/standards/ai-agents/sweet-spot.md +23 -3
  85. package/framework/standards/ai-agents/testing-ai.md +236 -0
  86. package/framework/standards/ai-agents/vector-data-extensions.md +50 -20
  87. package/framework/standards/ai-agents/workflows.md +27 -7
  88. package/framework/standards/frontend/design-system/ai-image-generation.md +12 -0
  89. package/framework/standards/frontend/design-system/ai-video-generation.md +13 -0
  90. package/framework/standards/infrastructure/docker/local-compose-isolation.md +3 -1
  91. package/framework/templates/.idea/morph-templates.xml +92 -0
  92. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  93. package/framework/templates/IDE-SNIPPETS.md +262 -262
  94. package/framework/templates/REGISTRY.json +13 -0
  95. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
  96. package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
  97. package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
  98. package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
  99. package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +1 -1
  100. package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
  101. package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
  102. package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
  103. package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -281
  104. package/framework/templates/code/dotnet/database/migration.cs +83 -83
  105. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
  106. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
  107. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
  108. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
  109. package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +1 -1
  110. package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
  111. package/framework/templates/code/typescript/contracts.ts +167 -167
  112. package/framework/templates/docs/clarifications.md +253 -253
  113. package/framework/templates/docs/schema-analysis.md +119 -119
  114. package/framework/templates/docs/ui-components.md +52 -52
  115. package/framework/templates/docs/ui-design-system.md +76 -76
  116. package/framework/templates/docs/ui-flows.md +167 -167
  117. package/framework/templates/docs/ui-mockups.md +98 -98
  118. package/framework/templates/dotnet/ai-kit/Directory.Build.props +25 -0
  119. package/framework/templates/dotnet/ai-kit/Directory.Packages.props +26 -0
  120. package/framework/templates/dotnet/ai-kit/Morph.AiKit.sln +56 -0
  121. package/framework/templates/dotnet/ai-kit/NuGet.config +12 -0
  122. package/framework/templates/dotnet/ai-kit/README.md +128 -0
  123. package/framework/templates/dotnet/ai-kit/global.json +9 -0
  124. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentApi.cs +65 -0
  125. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs +289 -0
  126. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactoryOptions.cs +91 -0
  127. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentSpec.cs +91 -0
  128. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentSpecOptions.cs +181 -0
  129. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/AiKitAssemblyMarker.cs +14 -0
  130. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Conversation/ConversationStore.cs +174 -0
  131. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Conversation/IConversationStore.cs +54 -0
  132. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Conversation/InMemoryConversationStore.cs +75 -0
  133. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/CountingChatClient.cs +71 -0
  134. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalAssertion.cs +246 -0
  135. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalCacheMissException.cs +57 -0
  136. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalCacheOptions.cs +78 -0
  137. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalCacheStamp.cs +225 -0
  138. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalFixture.cs +463 -0
  139. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalMode.cs +32 -0
  140. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalQualityEvaluators.cs +49 -0
  141. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalScenario.cs +214 -0
  142. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalSummary.cs +168 -0
  143. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/OfflineChatClient.cs +142 -0
  144. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Evals/ShortPathResponseCache.cs +349 -0
  145. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/IMediaGenerator.cs +42 -0
  146. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/IMediaProvider.cs +77 -0
  147. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaArtifact.cs +28 -0
  148. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaDisclosure.cs +107 -0
  149. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaGenerator.cs +253 -0
  150. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaIdempotencyKey.cs +103 -0
  151. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaJob.cs +259 -0
  152. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaJobId.cs +21 -0
  153. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaJobState.cs +47 -0
  154. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaPricing.cs +102 -0
  155. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaProvenance.cs +44 -0
  156. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaRequest.cs +192 -0
  157. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaResult.cs +94 -0
  158. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaReview.cs +99 -0
  159. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaSeams.cs +97 -0
  160. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MediaStore.cs +133 -0
  161. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/MorphMedia.cs +93 -0
  162. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/Providers/GoogleImageProvider.cs +112 -0
  163. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/Providers/OpenAIImageProvider.cs +288 -0
  164. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Media/Providers/VeoVideoProvider.cs +158 -0
  165. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Middleware/IUsageCostSink.cs +29 -0
  166. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Middleware/UsageCostMiddleware.cs +208 -0
  167. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Middleware/UsageCostRecord.cs +95 -0
  168. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Morph.AiKit.csproj +38 -0
  169. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Observability/MorphOpenTelemetryExtensions.cs +119 -0
  170. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Observability/MorphTelemetryOptions.cs +82 -0
  171. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Providers/IProviderClientFactory.cs +33 -0
  172. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Providers/ModelAlias.cs +267 -0
  173. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Providers/ModelRegistry.cs +474 -0
  174. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Providers/model-registry.v2.json +87 -0
  175. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Rag/DeltaIngest.cs +169 -0
  176. package/framework/templates/dotnet/ai-kit/src/Morph.AiKit/Rag/DeltaPlan.cs +49 -0
  177. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/AgentFactoryTests.cs +495 -0
  178. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/AgentSpecTests.cs +260 -0
  179. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/ConversationStoreTests.cs +405 -0
  180. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/DeltaIngestTests.cs +379 -0
  181. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/EvalAssertionTests.cs +197 -0
  182. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/EvalCacheMissTests.cs +139 -0
  183. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/EvalCacheStampTests.cs +157 -0
  184. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/EvalFailuresTests.cs +178 -0
  185. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/EvalFixtureTests.cs +153 -0
  186. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/EvalRefreshTests.cs +194 -0
  187. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/EvalWorkspace.cs +86 -0
  188. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/KitEvals.cs +213 -0
  189. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Evals/OfflineChatClientTests.cs +95 -0
  190. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeChatClient.cs +225 -0
  191. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeChatClientTests.cs +215 -0
  192. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeClock.cs +33 -0
  193. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeMediaProvider.cs +89 -0
  194. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeProviderClientFactory.cs +55 -0
  195. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeUsageCostSink.cs +60 -0
  196. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/InMemoryMediaStore.cs +131 -0
  197. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaAccessibilityTests.cs +133 -0
  198. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaAliasIsNotAnAgentTests.cs +127 -0
  199. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaDisclosureTests.cs +216 -0
  200. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaGeneratorTests.cs +264 -0
  201. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaIdempotencyKeyTests.cs +148 -0
  202. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaJobStateTests.cs +184 -0
  203. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaReviewTests.cs +89 -0
  204. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaStoreTests.cs +98 -0
  205. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/ModelRegistryTests.cs +451 -0
  206. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Morph.AiKit.Tests.csproj +76 -0
  207. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/SkeletonSmokeTests.cs +33 -0
  208. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/TelemetryTests.cs +261 -0
  209. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/UsageCostMiddlewareTests.cs +374 -0
  210. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/.morph-eval-cache.json +12 -0
  211. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/orcamento.acme.a-resposta-estruturada/1/CF70A7CE27BBD66A/contents.data +13 -0
  212. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/orcamento.acme.a-resposta-estruturada/1/CF70A7CE27BBD66A/entry.json +7 -0
  213. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/triagem.acme.a-saudacao/1/19F631228C6E00BA/contents.data +13 -0
  214. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/triagem.acme.a-saudacao/1/19F631228C6E00BA/entry.json +7 -0
  215. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/triagem.acme.b-escalonamento/1/A24A7C9BDD8239D8/contents.data +13 -0
  216. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/triagem.acme.b-escalonamento/1/A24A7C9BDD8239D8/entry.json +7 -0
  217. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/triagem.globex.a-saudacao/1/E38CD37DF003EDB7/contents.data +13 -0
  218. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-cache/cache/triagem.globex.a-saudacao/1/E38CD37DF003EDB7/entry.json +7 -0
  219. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-datasets/orcamento/acme/a-resposta-estruturada.json +24 -0
  220. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-datasets/triagem/acme/a-saudacao.json +23 -0
  221. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-datasets/triagem/acme/b-escalonamento.json +24 -0
  222. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/eval-datasets/triagem/globex/a-saudacao.json +23 -0
  223. package/framework/templates/feature/decisions.md +122 -122
  224. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
  225. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
  226. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
  227. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
  228. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
  229. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
  230. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
  231. package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
  232. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  233. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  234. package/framework/templates/infrastructure/github/README.md +56 -56
  235. package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
  236. package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
  237. package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
  238. package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
  239. package/framework/templates/integrations/asaas-client.cs +387 -387
  240. package/framework/templates/integrations/asaas-webhook.cs +351 -351
  241. package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
  242. package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
  243. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
  244. package/framework/templates/project/validate.js +120 -120
  245. package/framework/templates/state.template.json +17 -17
  246. package/framework/templates/ui/design-system.css +226 -226
  247. package/package.json +3 -3
  248. package/src/commands/dashboard/dashboard.js +53 -53
  249. package/src/commands/e2e/e2e.js +15 -2
  250. package/src/commands/index.js +13 -13
  251. package/src/commands/project/checkpoint.js +209 -209
  252. package/src/commands/project/doctor.js +148 -6
  253. package/src/commands/project/update.js +469 -153
  254. package/src/commands/project/worktree.js +76 -4
  255. package/src/commands/state/advance.js +24 -2
  256. package/src/commands/state/approve.js +33 -1
  257. package/src/commands/state/create.js +72 -11
  258. package/src/commands/state/finish.js +379 -24
  259. package/src/commands/state/gate-check.js +190 -6
  260. package/src/commands/state/score.js +36 -1
  261. package/src/commands/validation/verify.js +134 -25
  262. package/src/core/state/phase-state-machine.js +197 -197
  263. package/src/core/state/state-manager.js +9 -1
  264. package/src/core/templates/template-renderer.js +477 -477
  265. package/src/dashboard/app/components/DetailPanel.jsx +11 -11
  266. package/src/dashboard/app/components/FlowGraph.jsx +17 -17
  267. package/src/dashboard/app/components/SearchFilter.jsx +22 -22
  268. package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
  269. package/src/dashboard/app/main.jsx +13 -13
  270. package/src/dashboard/app/pages/AgentMap.jsx +370 -370
  271. package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
  272. package/src/dashboard/app/pages/RulesMap.jsx +273 -273
  273. package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
  274. package/src/dashboard/app/pages/Standards.jsx +332 -332
  275. package/src/dashboard/app/styles/index.css +47 -47
  276. package/src/dashboard/index.html +12 -12
  277. package/src/dashboard/package.json +24 -24
  278. package/src/dashboard/scanner/phases-scanner.js +15 -15
  279. package/src/dashboard/scanner/rubrics-scanner.js +12 -12
  280. package/src/dashboard/scanner/rules-scanner.js +37 -37
  281. package/src/dashboard/scanner/skills-scanner.js +43 -43
  282. package/src/dashboard/scanner/squads-scanner.js +13 -13
  283. package/src/dashboard/vite-plugin-morph-data.js +17 -17
  284. package/src/dashboard/vite.config.js +24 -24
  285. package/src/lib/ai/ai-checks.js +182 -0
  286. package/src/lib/ai/ai-project-scan.js +347 -0
  287. package/src/lib/ai/code-audit.js +181 -0
  288. package/src/lib/ai/comment-stripper.js +184 -0
  289. package/src/lib/ai/pin-drift.js +138 -0
  290. package/src/lib/ai/registry-audit.js +285 -0
  291. package/src/lib/detectors/design-system-detector.js +188 -188
  292. package/src/lib/detectors/index.js +217 -217
  293. package/src/lib/e2e/compose-env.js +50 -4
  294. package/src/lib/evaluator-report.js +269 -15
  295. package/src/lib/generators/design-system-generator.js +508 -508
  296. package/src/lib/generators/settings-generator.js +209 -209
  297. package/src/lib/git/default-branch.js +92 -4
  298. package/src/lib/git/pr-files.js +56 -0
  299. package/src/lib/hooks/hook-executor.js +167 -167
  300. package/src/lib/installers/effects.js +193 -0
  301. package/src/lib/installers/mcp-installer.js +719 -719
  302. package/src/lib/installers/templates-reconcile.js +3 -3
  303. package/src/lib/risk-detector.js +284 -0
  304. package/src/lib/standards/verified-against.js +276 -0
  305. package/src/lib/tasks/eval-node.js +485 -0
  306. package/src/lib/tasks/linux-runner.js +297 -0
  307. package/src/lib/tasks/task-classifier.js +30 -30
  308. package/src/lib/tasks/task-parser.js +209 -209
  309. package/src/lib/tasks/test-nodes.js +486 -0
  310. package/src/lib/tasks/test-runner.js +410 -33
  311. package/src/lib/validators/checkpoint-persistence.js +39 -39
  312. package/src/lib/validators/css/css-validator.js +340 -340
  313. package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
  314. package/src/lib/validators/shared/issue-counter.js +14 -14
  315. package/src/lib/validators/verify-runner.js +583 -28
  316. package/src/lib/worktree/docker-audit.js +287 -0
  317. package/src/lib/worktree/env-allocator.js +24 -0
  318. package/src/lib/worktree/worktree-audit.js +30 -1
  319. package/src/scripts/setup-infra.js +24 -11
  320. package/src/utils/agent-id-mapper.js +11 -11
  321. package/src/utils/agents-installer.js +18 -8
  322. package/src/utils/claude-md-injector.js +10 -5
  323. package/src/utils/claude-settings-manager.js +300 -300
  324. package/src/utils/file-copier.js +11 -4
  325. package/src/utils/hooks-installer.js +29 -26
  326. package/src/utils/skills-installer.js +36 -29
  327. package/src/utils/version-checker.js +68 -3
  328. package/framework/standards/ai-agents/prompts-in-db.md +0 -214
@@ -4,7 +4,7 @@ description: Conduz a fase de revisão e produz o review-report.md para o Gate 3
4
4
  version: core
5
5
  when-to-invoke: ao iniciar a fase review, após todas as tasks de tasks.json estarem com status `done`
6
6
  user-invokable: true
7
- cliVersion: "8.34.2"
7
+ cliVersion: "8.35.1"
8
8
  ---
9
9
 
10
10
  # morph-review
@@ -59,16 +59,21 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
59
59
  que este passo trata — prossiga com o dispatch abaixo.
60
60
 
61
61
  **Despache o avaliador independente** — o score do Gate 3 nunca é auto-atribuído por quem implementou:
62
- - Rode `morph-spec verify {feature} --json` (escopo feature) e capture o JSON — é a saída real de build+testes+validadores+e2e que você anexa ao prompt do avaliador independente (`morph-evaluator`).
62
+ - Rode `morph-spec verify {feature} --json` (escopo feature) e capture o JSON — é a saída real de build+testes+validadores+e2e que você anexa ao prompt do avaliador independente (`morph-evaluator`). **Sem `--filter`, sempre:** o `--filter` é do loop por task, onde o relógio de uma task não paga a suíte inteira; a prova que o avaliador lê tem de cobrir **todos** os nós de `nodes.tests.runs[]` (uma suíte filtrada aparece como `skip` nomeando o filtro — Gate 3 aberto sobre isso é verde sobre código não testado). Se a suíte inteira não couber numa chamada, rode-a em background; não a encolha com `--filter`.
63
63
  - **Confira o nó `e2e` do verify antes de despachar.** Ele carrega o estado do stack:
64
64
  - `pass` → a aplicação subiu e está saudável; o avaliador pode navegá-la. **Passe a URL no prompt**
65
65
  — cada feature roda no seu bloco de portas, não em `localhost:3000`; pegue de
66
66
  `morph-spec e2e status {feature} --json` (`baseUrl`) e não deixe o avaliador adivinhar.
67
67
  - `fail` → **não abra o Gate 3.** Volte ao loop de correção: a app não sobe, ou as specs quebraram.
68
- - `skip` → leia a razão e decida se a dispensa é legítima. "não containeriza" num projeto sem UI é
69
- legítimo; "docker indisponível no ambiente" numa feature de UI **não** é — registre você mesmo
70
- `morph-spec gate-decision {feature} review --pause true --reason "e2e não verificado: {razão}"`.
71
- O disco não distingue dispensa legítima de verificação que faltou; esse julgamento é seu.
68
+ - `skip` → **a classificação já é do `gate-check`, não sua.** A razão literal do skip viaja no
69
+ stamp `verification` (`e2eReason`) e `classifyE2eSkip` — em `risk-detector.js`, fonte única —
70
+ decide: `project` ("não containeriza") e `scope` ("o grupo de tasks não toca runtime") são
71
+ **dispensa legítima** e passam com o motivo gravado em `gateDecisions.review.signals`;
72
+ `environment` ("docker indisponível"), `requested` (`--skip-e2e`) e `unknown` (qualquer outra
73
+ razão, **inclusive razão nenhuma**) **pausam o Gate 3 sozinhos**. Não registre `gate-decision`
74
+ à mão para esses casos — deixou de ser necessário. O que continua sendo seu: dizer ao avaliador
75
+ que a app **não** foi exercida, e atacar a causa (rodar o e2e onde ele possa rodar) em vez de
76
+ despachar como se ela tivesse sido.
72
77
  - **Confira também `traceability.warnings`** (advisory, nunca faz `verify` falhar): cada entrada é
73
78
  um arquivo citado no `recap.md` sem task dona em `outputs` — repasse ao avaliador como sinal de
74
79
  rastreabilidade para a dimensão de qualidade, não como bloqueio automático do gate.
@@ -118,6 +123,89 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
118
123
  dimensão e ainda assim piorou o produto — e essa pergunta é a única
119
124
  que o score não faz sozinho. Não aceite "agora tem teste" como
120
125
  fechamento: RE-EXECUTE os probes da rodada anterior.
126
+ PROCURE O QUE ESTÁ ERRADO — não confirme o que já foi dito.
127
+ Um relatório que só concorda com o recap não avaliou nada. A
128
+ pergunta que orienta a sua sessão inteira é: O QUE O IMPLEMENTADOR
129
+ NÃO VIU? O que ele não podia ver do lugar onde estava, o que ele
130
+ viu e não mediu, e o que ele mediu com a régua errada.
131
+ PROVE, não confie: um teste verde prova que o código RODA, nunca
132
+ que o teste MORDE. Aplique as cinco rubricas de PROVA e pontue-as
133
+ 0-10 (elas NÃO são dimensões do composto; impõem teto em
134
+ test-coverage):
135
+ .morph/framework/evals/proof-rubrics/mutation-proof.md
136
+ .morph/framework/evals/proof-rubrics/verde-nao-e-coberto.md
137
+ .morph/framework/evals/proof-rubrics/fiacao.md
138
+ .morph/framework/evals/proof-rubrics/guard-cego.md
139
+ .morph/framework/evals/proof-rubrics/eval-de-modelo.md
140
+ E, SÓ quando a feature chama LLM, mais uma — que impõe teto em
141
+ code-quality, não em test-coverage:
142
+ .morph/framework/evals/proof-rubrics/observabilidade-genai.md
143
+ A aplicabilidade dela NÃO é determinística, e isso é deliberado:
144
+ nenhuma leitura de tasks.json ou do mandate mede "esta feature
145
+ chama um modelo". São DUAS etapas. (1) FILTRO mecânico, de alta
146
+ recall: o mandate.md cita ao menos um standard ai-agents — falso
147
+ ⇒ `not_evaluated`, sem mais discussão. (2) DETERMINAÇÃO sua, por
148
+ escrito: a feature entrega código que CHAMA um modelo? Registre a
149
+ resposta COM O MOTIVO (o símbolo/arquivo que chama, ou por que o
150
+ diff não chama nada). Task com group em {docs, tests} é INDÍCIO
151
+ contra, nunca veredito — um harness de agente vive inteiro em
152
+ `tests`. `not_evaluated` NÃO aplica teto, e um not_evaluated MUDO
153
+ não é dispensa: é o escape que o standard ai-agents-guardrails
154
+ proíbe (standard, não rubrica — não existe rubrica de guardrails).
155
+ Ela pergunta a PROPRIEDADE ("dá para reconstruir o que foi
156
+ ao provedor, e o que ele respondeu, neste turno?"), nunca "tem span
157
+ OpenTelemetry?": telemetria própria COM teste de fidelidade alcança
158
+ 9-10 igual, e wiring sem evidência capturada não passa de 8.
159
+ MUTAÇÃO — o método, e a ordem dele importa:
160
+ - COMMITE O FIX ANTES DE MUTAR. Se a sessão morrer no meio, o
161
+ que sobrevive é a mutação, não a correção.
162
+ - Ancore no CALL SITE que carrega a decisão, não no `if`
163
+ refatorado. Uma rodada POR CLÁUSULA de um predicado composto.
164
+ - Rode a suíte INTEIRA (sem filtro): só ela autoriza a frase
165
+ "derruba N de M". Filtro estreito é prova vácua.
166
+ - LEIA O MOTIVO da falha, não só o md5: md5 prova que ALGO
167
+ mudou, jamais O QUÊ.
168
+ - REVERTA por snapshot/restore de BYTES (cópia feita ANTES) +
169
+ `os.utime` para devolver o mtime, e confirme por md5. NUNCA
170
+ `git checkout --`: ele descarta trabalho não commitado de
171
+ outra pessoa — aconteceu de verdade num Gate 3 desta epic.
172
+ - TERMINE com `git status --porcelain src/` VAZIO. Mutação
173
+ esquecida em produção é o pior desfecho deste método.
174
+ Grave no relatório a seção `## Mutações`, uma linha por mutação,
175
+ com os CINCO campos: arquivo:linha | diff | md5 antes/depois |
176
+ quantos testes derrubou (sobre o total da suíte) | o MOTIVO
177
+ literal da falha. Feature sem código de produção declara a seção
178
+ com a linha `não aplicável — feature sem código de produção`. A
179
+ seção é OBRIGATÓRIA: sem ela o `morph-spec gate-check` PAUSA o
180
+ Gate 3 sozinho, e nenhum score alto compra a passagem.
181
+ MÍDIA GERADA — rubrica CONDICIONAL, aplique SÓ se a feature gera
182
+ mídia (alguma task de tasks.json cita, em standards[], um destes:
183
+ standards/ai-agents/modalities-image-gen.md,
184
+ standards/ai-agents/media-video.md,
185
+ standards/ai-agents/media-pipeline.md). Nesse caso aplique também
186
+ e pontue 0-10:
187
+ .morph/framework/evals/proof-rubrics/media-claims.md
188
+ Ela cobra QUATRO afirmações — custo, revisão humana, marcação e
189
+ hot path não bloqueado — cada uma com o código que a prende e o
190
+ teste que a prova. Grave a seção `## Mídia gerada` com uma linha
191
+ por afirmação. A seção é OBRIGATÓRIA nessa condição: sem ela o
192
+ `morph-spec gate-check` PAUSA o Gate 3. Feature que NÃO gera mídia
193
+ não declara a seção nem a chave — a isenção é automática, e
194
+ escrever a seção "por precaução" é cerimônia vazia.
195
+ Grave também a linha literal, machine-readable:
196
+ `**Proof-Scores:** mutation={n} verde={n} fiacao={n} guard={n} eval={n}`
197
+ — os cinco 0-10, na ordem das rubricas acima. O MENOR deles
198
+ impõe o teto em test-coverage (tabela em
199
+ .morph/framework/evals/rubrics/test-coverage.md).
200
+ Se a feature gera mídia, acrescente ` media={n}` à MESMA linha.
201
+ Se a rubrica de observabilidade GenAI se aplicar, acrescente
202
+ ` obs={n}` (ou ` obs=not_evaluated`) à MESMA linha.
203
+ As duas são lidas À PARTE: NÃO entram no mínimo acima (um media ou
204
+ um obs baixo não pode derrubar o teto de teste por um motivo que
205
+ não é de teste). `media` impõe teto em ARQUITETURA (tabela em
206
+ .morph/framework/evals/rubrics/architecture.md) e `obs` impõe teto
207
+ em CODE-QUALITY (tabela em
208
+ .morph/framework/evals/rubrics/code-quality.md).
121
209
  Contrato do relatório final: GRAVE seu relatório em
122
210
  `.morph/features/{feature}/4-review/evaluator-report.md` ANTES de
123
211
  encerrar — esse arquivo é o valor de retorno autoritativo desta
@@ -137,6 +225,33 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
137
225
  é falha de protocolo.
138
226
  ```
139
227
  - **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).
228
+ - **Ao retomar o controle, HIGIENE DA ÁRVORE antes de qualquer leitura de score.** Rode, nesta
229
+ ordem e ANTES de abrir o relatório:
230
+ ```bash
231
+ git status --porcelain src/ # vazio = o avaliador reverteu o que mutou
232
+ grep -rn "MUTACAO" src/ # nenhum hit = nenhum marcador esquecido
233
+ ```
234
+ (No PowerShell, `Select-String -Path src -Pattern MUTACAO -Recurse` faz o mesmo; o shell do
235
+ harness é Git Bash, então a forma POSIX acima é a canônica.) **Por que antes:** o avaliador
236
+ muta código de produção de propósito, e um avaliador que morreu no meio da rodada deixa a
237
+ mutação NO DISCO. Ler o score primeiro e só depois descobrir a árvore suja significa ter
238
+ avaliado — e possivelmente aprovado — um estado que ninguém quis. E **não rode build/teste
239
+ enquanto o agente ainda está `running`**: ele muta o disco a meio, e o vermelho que você veria
240
+ seria da mutação dele, não do produto.
241
+
242
+ Árvore suja aqui é **falha de protocolo**. Reverta **pela mesma disciplina que o prompt exige
243
+ do avaliador** — nunca por git: peça o snapshot que ele diz ter feito (`cp` ANTES de mutar) e
244
+ restaure por cópia, conferindo `md5sum` de cada arquivo. Sem snapshot recuperável, o caminho é
245
+ desfazer a edição **linha a linha**, a partir do `diff` que a seção `## Mutações` obriga a
246
+ registrar. Registre o que fez na seção de método do review-report.
247
+
248
+ > **NUNCA `git checkout -- src/` aqui**, nem com ressalva. Na árvore típica de uma feature em
249
+ > review **não existe nenhum commit da feature** — o trabalho inteiro está não commitado, e o
250
+ > `checkout` o apaga junto com a mutação. Numa árvore desta epic havia 23 arquivos modificados
251
+ > e zero commits próprios; nesta mesma epic um avaliador rodou esse comando e destruiu
252
+ > alterações não commitadas de outro agente (só não houve perda porque ele tinha capturado o
253
+ > diff antes). É a mesma proibição que o prompt do passo 4 já dá ao avaliador: aqui ela vale
254
+ > para VOCÊ.
140
255
  - **Leia primeiro** `.morph/features/{feature}/4-review/evaluator-report.md` — é o valor de retorno autoritativo, não a mensagem de texto do dispatch (que é cortesia, útil só quando chega inteira). Os scores por dimensão e o composto do review-report vêm **desse arquivo**, não da sua auto-avaliação. Se o arquivo vier ausente, 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.
141
256
 
142
257
  5. Produza `review-report.md` em `.morph/features/{feature}/4-review/` com:
@@ -152,6 +267,24 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
152
267
  avaliador navegou. Dispensa (`skip`) entra aqui **por extenso**: o valor de um gate está tanto
153
268
  no que ele provou quanto no que ele deixou de provar, e uma dispensa silenciosa se lê como
154
269
  aprovação. Se houver spec Playwright recomendada pelo avaliador, liste-a como melhoria.
270
+ - **Prova de mutação** — a seção `## Mutações` do `evaluator-report.md`, repassada aqui em
271
+ resumo (quantas mutações, quantas derrubaram teste, e a linha `**Proof-Scores:**`). O formato
272
+ que o avaliador grava, e que o `morph-spec gate-check` cobra:
273
+
274
+ ```markdown
275
+ ## Mutações
276
+
277
+ | # | Arquivo:linha | Mutação (diff) | md5 antes | md5 depois | Testes derrubados | Motivo da falha |
278
+ |---|---|---|---|---|---|---|
279
+ | M1 | src/lib/x.js:42 | `- if (a && b)` / `+ if (a)` | abc… | def… | 3 de 2684 | `expected 3 got 0` em x.test.js:88 |
280
+
281
+ **Reversão:** snapshot/restore de bytes + `os.utime`; `git status --porcelain src/` vazio.
282
+ **Proof-Scores:** mutation=9 verde=8 fiacao=9 guard=7
283
+ ```
284
+
285
+ Feature sem código de produção declara a seção com `não aplicável — feature sem código de
286
+ produção`. **Sem a seção, o `gate-check review` PAUSA** — a regra vive em código
287
+ (`risk-detector.js`), não na boa vontade do prompt.
155
288
  - Lista de itens bloqueantes (se houver) — com descrição e critério de resolução
156
289
  - Lista de melhorias recomendadas (não bloqueantes)
157
290
  - Recomendação final: Aprovado / Rejeitar com condições / Reprovar
@@ -161,6 +294,20 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
161
294
  (A barra de avanço por task é 9; uma dimensão individual abaixo de 8 no review da feature
162
295
  inteira é um bloqueante crítico que o loop de correção deveria ter pego.)
163
296
 
297
+ **Para CONFIRMAR uma correção, retome o MESMO avaliador — não despache um frio.** Use
298
+ `SendMessage` com o id do agente que já avaliou, colando no recado o `git status --porcelain` e o
299
+ `git log --oneline` do que mudou desde o relatório dele. Ele já tem em contexto o que apontou e
300
+ os probes que rodou; um avaliador novo re-descobre o produto inteiro para checar um item, e
301
+ re-executa do zero os probes da rodada anterior.
302
+
303
+ > Isto **não** contradiz a cláusula que proíbe o **sub-agent** de chamar `SendMessage`. As
304
+ > direções são opostas: o sub-agent não chama `SendMessage` porque o retorno dele é o ARQUIVO, e
305
+ > uma mensagem a mais custa um turno inútil ao orquestrador. Aqui quem fala é o ORQUESTRADOR,
306
+ > para dentro de uma sessão que ele mesmo abriu — a única forma de continuar uma avaliação em vez
307
+ > de recomeçá-la. Se o agente já encerrou e o id não retoma, aí sim despache um novo, e diga a
308
+ > ele no prompt que é uma REAVALIAÇÃO (o relatório é append-only: ele acrescenta ao fim, e o
309
+ > `gate-check` lê o token do FIM, o vigente).
310
+
164
311
  7. **NÃO finalize o trace manualmente.** O hook `trace-autogen` gera e finaliza `.morph/traces/YYYY-MM-DD-{feature}-implement.json` automaticamente (incl. `phase_summary` e `completed_at`) no último write de `tasks.json` — quando a última task sai de `pending`/`in_progress`. Se o trace parecer desatualizado, a causa é um `morph-spec score` faltante ou um recap sem o bloco da task — corrija a fonte, não o trace.
165
312
 
166
313
  8. Apresente o Gate 3 segundo trust mode — **única apresentação do gate**: `morph-apply` §5 aponta
@@ -168,12 +315,14 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
168
315
 
169
316
  Rode `morph-spec gate-check {feature} review [--json]` — lê `trust` de `.morph/config/config.json`, decide via `shouldPauseGate` e persiste `gateDecisions.review` com timestamp server-side, imprimindo `pause`/`reason`/`signals`. É o default — não recompute a tabela do MORPH.md §5 em linguagem natural.
170
317
 
171
- **`evalScore` sem override é uma PROXY** (média das `taskScores`, não o composto real). Passe o composto retornado pelo **avaliador independente** (passo 4) e qualquer item bloqueante encontrado nas **verificações mecânicas sempre-rodar** do passo 3 via `--signals` — as únicas chaves que este comando aceita sobrescrever:
318
+ **NÃO passe `evalScore` por `--signals` aqui.** O composto do avaliador é lido do disco sozinho: o `gate-check` procura o token `**Composite-Score:**` em `4-review/evaluator-report.md` (passo 4) e carimba `evalScoreSource: evaluator-report` — a **única** procedência que o Gate 3 aceita. Um `evalScore` vindo por override troca o valor mas rebaixa a procedência para `signals-override`, e o Gate 3 **pausa** por "sem score do avaliador independente" sem sequer olhar o número — inclusive quando é o mesmo número do relatório. Sem o token (relatório ausente ou oco), o `evalScore` cai na **PROXY** das `taskScores` — auto-avaliação de quem implementou — e o gate pausa igual. A correção, nos dois casos, é produzir o relatório íntegro do passo 4; nunca o override.
319
+
320
+ Os itens bloqueantes das **verificações mecânicas sempre-rodar** do passo 3 continuam entrando por `--signals` — é para isso que a flag serve aqui:
172
321
  ```
173
- morph-spec gate-check {feature} review --signals '{"evalScore":9.2,"standardsViolations":[]}'
322
+ morph-spec gate-check {feature} review --signals '{"standardsViolations":[]}'
174
323
  ```
175
324
 
176
- Julgamento do revisor que nenhuma dessas chaves representa: use `gate-decision` direto em vez de `gate-check`.
325
+ Julgamento do revisor que nenhuma dessas chaves representa — e forçar a passagem apesar da pausa: use `gate-decision` direto em vez de `gate-check` (`morph-spec gate-decision {feature} review --pause false --reason "..."`), que é explícito e fica registrado.
177
326
 
178
327
  **Nunca edite `feature.json` à mão** (colide com o hook state-sync — erro "file modified since read"). Os caminhos acima gravam no mesmo lugar; o hook `gate-guard.js` confere depois se a ação bateu com a decisão persistida.
179
328
 
@@ -218,6 +367,14 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
218
367
  - `.morph/framework/MORPH.md` — seção 5 (Gate 3 + regras de pausa), seção 1 (papel Evaluator), Trust Mode
219
368
  - `.claude/agents/morph-evaluator.md` — subagent do avaliador (gerado de `.morph/framework/agents.json`), despachado no passo 4
220
369
  - `.claude/skills/morph-eval/SKILL.md` — rubricas e bandas que o avaliador aplica
370
+ - `.morph/framework/evals/proof-rubrics/` — as sete rubricas de PROVA citadas no prompt do passo 4
371
+ (`mutation-proof.md`, `verde-nao-e-coberto.md`, `fiacao.md`, `guard-cego.md`, `eval-de-modelo.md`, `media-claims.md`, `observabilidade-genai.md`):
372
+ não são dimensões do composto. **Cinco** impõem teto em `test-coverage` pelo MENOR delas — as quatro
373
+ universais mais `eval-de-modelo`, que perguntam a mesma coisa: *a evidência é real?*. As outras
374
+ duas são condicionais e entram FORA do menor-das-cinco: `media-claims.md`, em feature que gera
375
+ mídia, impõe teto em `architecture`; `observabilidade-genai.md`, em feature que chama LLM, impõe
376
+ teto em `code-quality`. Somá-las faria um `media=4` ou um `obs=4` derrubar o teto de TESTE por um
377
+ motivo que não tem nada a ver com teste.
221
378
  - `.morph/framework/evals/trace-schema.md` — formato canônico do trace
222
379
  - `.morph/features/{feature}/2-plan/mandate.md` — critérios de done da feature
223
380
  - `.morph/features/{feature}/2-plan/spec.md` — arquitetura e contratos
@@ -4,7 +4,7 @@ description: Varre o codebase existente, detecta stack atual, compara com o stac
4
4
  version: core
5
5
  when-to-invoke: ao iniciar uma feature em projeto brownfield (codebase já existente)
6
6
  user-invokable: true
7
- cliVersion: "8.34.2"
7
+ cliVersion: "8.35.1"
8
8
  ---
9
9
 
10
10
  # morph-stack-scan
@@ -4,7 +4,7 @@ description: Localiza um standard específico via busca server-side (morph-spec
4
4
  version: core
5
5
  when-to-invoke: quando precisar consultar um standard específico durante a implementação
6
6
  user-invokable: true
7
- cliVersion: "8.34.2"
7
+ cliVersion: "8.35.1"
8
8
  ---
9
9
 
10
10
  # morph-standards
@@ -4,7 +4,7 @@ description: Conduz a fase opcional de UI/UX — design system, mockups, compone
4
4
  version: core
5
5
  when-to-invoke: ao tomar o ramo uiux (morph-spec advance --design), depois do Gate 1 e antes do morph-plan
6
6
  user-invokable: true
7
- cliVersion: "8.34.2"
7
+ cliVersion: "8.35.1"
8
8
  ---
9
9
 
10
10
  # morph-uiux
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "_note": "Standards distilled from an external source. The source is not a dependency at runtime: it lives in another repository and is not needed to use the framework. This file exists so drift is detectable instead of silent. Pin `sourceTree` when distilling, and re-pin deliberately after reviewing what changed. See test/framework/standards-provenance.test.js.",
3
+ "_note": "Standards distilled from an external source. The source is not a dependency at runtime: it lives in another repository and is not needed to use the framework. The same mechanism covers content distilled into a SKILL — an entry declares `standards`, `skills`, or both, and every declared name must resolve. This file exists so drift is detectable instead of silent. Pin `sourceTree` when distilling, and re-pin deliberately after reviewing what changed. See test/framework/standards-provenance.test.js.",
4
4
  "sources": [
5
5
  {
6
6
  "id": "morph-lp-cinematic",
@@ -21,12 +21,11 @@
21
21
  "references/seedance-loop-prompt.md"
22
22
  ],
23
23
  "notDistilled": [
24
- "references/gates.md",
25
24
  "references/last-mile.md",
26
25
  "references/copy-and-messaging.md",
27
26
  "references/section-blueprint.md"
28
27
  ],
29
- "notDistilledReason": "Deliberate split: a standard carries knowledge, a skill carries process. HITL gates, deploy and copy strategy stay with the skill.",
28
+ "notDistilledReason": "Deliberate split: a standard carries knowledge, a skill carries process. Deploy and copy strategy stay with the skill. `references/gates.md` LEFT this list on 2026-09-09: the reason that kept it out was \"a skill carries process\", and the destination is now a skill — see the \"cinematic-lp\" source below, which distils it into morph-media.",
30
29
  "standards": [
31
30
  "frontend-scroll-driven-frame-scrub",
32
31
  "frontend-scroll-driven-smooth-scroll",
@@ -35,6 +34,85 @@
35
34
  "frontend-design-system-ai-image-generation",
36
35
  "frontend-design-system-ai-video-generation",
37
36
  "frontend-seo-meta-schema-audit"
37
+ ],
38
+ "skills": []
39
+ },
40
+ {
41
+ "id": "gemini-image",
42
+ "repo": "morph-HUB",
43
+ "path": "skills/gemini-image",
44
+ "envVar": "MORPH_HUB",
45
+ "defaultCheckout": "R:/Polymorphism Tech/repos/morph-HUB",
46
+ "sourceTree": "ec0abd827badfd5cd6d4c5f8b1843f81a3d183fe",
47
+ "sourceCommit": "b6bbfff",
48
+ "distilledOn": "2026-09-09",
49
+ "distilledFrom": [
50
+ "SKILL.md"
51
+ ],
52
+ "notDistilled": [
53
+ "skill.json",
54
+ "evals/"
55
+ ],
56
+ "notDistilledReason": "Manifest and eval fixtures of the source skill: packaging of the origin, not knowledge. The MCP tool names of the source were also NOT carried over — morph-media is about the authoring decisions, and a tool table pinned to one MCP server would rot on its own.",
57
+ "standards": [],
58
+ "skills": [
59
+ "morph-media"
60
+ ]
61
+ },
62
+ {
63
+ "id": "cinematic-lp",
64
+ "repo": "morph-HUB",
65
+ "path": "skills/cinematic-lp/references",
66
+ "envVar": "MORPH_HUB",
67
+ "defaultCheckout": "R:/Polymorphism Tech/repos/morph-HUB",
68
+ "sourceTree": "57a1734bc17651a6fed381a6e817c8b0c0a89edd",
69
+ "sourceCommit": "b6bbfff",
70
+ "distilledOn": "2026-09-09",
71
+ "distilledFrom": [
72
+ "gates.md"
73
+ ],
74
+ "notDistilled": [
75
+ "build-stack.md",
76
+ "component-recipes.md",
77
+ "copy-and-messaging.md",
78
+ "image-prompt.md",
79
+ "last-mile.md",
80
+ "mcp-setup.md",
81
+ "premium-finish.md",
82
+ "section-blueprint.md",
83
+ "seo-and-qa.md",
84
+ "video-loop-examples.md",
85
+ "video-loop-prompt.md",
86
+ "video-scrub-prompt.md"
87
+ ],
88
+ "notDistilledReason": "Only the HITL gate mechanics were distilled: the N-option picker, \"rejection goes back to the same step\", and \"show MOVEMENT, never a still\". The rest is either already a standard (the frame-scrub / smooth-scroll / premium-finish family, from the morph-lp-cinematic source above) or build/deploy strategy that belongs to the calling workflow.",
89
+ "standards": [],
90
+ "skills": [
91
+ "morph-media"
92
+ ]
93
+ },
94
+ {
95
+ "id": "brand-design",
96
+ "repo": "morph-HUB",
97
+ "path": "skills/brand-design/references",
98
+ "envVar": "MORPH_HUB",
99
+ "defaultCheckout": "R:/Polymorphism Tech/repos/morph-HUB",
100
+ "sourceTree": "d8801b8c277f63b06e1a22f57563ec468e7d4d9a",
101
+ "sourceCommit": "b6bbfff",
102
+ "distilledOn": "2026-09-09",
103
+ "distilledFrom": [
104
+ "image-generation.md"
105
+ ],
106
+ "notDistilled": [
107
+ "brand-book.md",
108
+ "checklist.md",
109
+ "example-identidade-visual.md",
110
+ "phases.md"
111
+ ],
112
+ "notDistilledReason": "Only the image-per-phase map and the \"concept, never the final vector\" rule were distilled. The narrative prompt recipes were NOT copied verbatim: they are bound to one brand pipeline, and morph-media carries the prompt STRUCTURE instead, which survives the model changing. Brand book, checklist and phases are the process of another skill.",
113
+ "standards": [],
114
+ "skills": [
115
+ "morph-media"
38
116
  ]
39
117
  }
40
118
  ]