@polymorphism-tech/morph-spec 8.46.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/CLAUDE.md +53 -44
  2. package/README.md +3 -4
  3. package/bin/morph-spec.js +38 -55
  4. package/bin/validate.js +5 -134
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +2 -2
  7. package/docs/QUICKSTART.md +1 -1
  8. package/framework/CLAUDE.md +41 -101
  9. package/framework/MORPH.md +95 -252
  10. package/framework/agents.json +75 -18
  11. package/framework/commands/create-umbraco-lp.md +2 -0
  12. package/framework/commands/migrate-lp-to-umbraco.md +2 -0
  13. package/framework/commands/morph-apply.md +5 -28
  14. package/framework/commands/morph-archive.md +2 -2
  15. package/framework/commands/morph-hotfix.md +8 -8
  16. package/framework/commands/morph-infra.md +17 -203
  17. package/framework/commands/morph-media.md +3 -0
  18. package/framework/commands/morph-preflight.md +7 -31
  19. package/framework/commands/morph-proposal.md +2 -50
  20. package/framework/commands/morph-status.md +3 -3
  21. package/framework/commands/morph-troubleshoot.md +2 -14
  22. package/framework/docs/CLI.md +585 -286
  23. package/framework/evals/review-checklist.md +82 -41
  24. package/framework/hooks/README.md +10 -11
  25. package/framework/hooks/claude-code/core/comment-guard.js +1 -1
  26. package/framework/hooks/claude-code/core/denylist.json +33 -3
  27. package/framework/hooks/claude-code/core/enforce-phase-writes.js +16 -20
  28. package/framework/hooks/claude-code/core/gate-guard.js +2 -11
  29. package/framework/hooks/claude-code/core/pre-bash-denylist.js +38 -0
  30. package/framework/hooks/claude-code/core/protect-spec-files.js +30 -242
  31. package/framework/hooks/claude-code/core/state-sync.js +17 -19
  32. package/framework/hooks/claude-code/core/telemetry-log.js +3 -3
  33. package/framework/hooks/claude-code/core/validate-completion.js +33 -97
  34. package/framework/hooks/claude-code/core/warn-bash-source-write.js +31 -0
  35. package/framework/hooks/claude-code/core/worktree-context.js +5 -4
  36. package/framework/hooks/claude-code/statusline.py +55 -41
  37. package/framework/hooks/package.json +3 -0
  38. package/framework/hooks/shared/activity-logger.js +1 -1
  39. package/framework/hooks/shared/build-check.js +10 -6
  40. package/framework/hooks/shared/command-tokens.js +169 -0
  41. package/framework/hooks/shared/comment-rules.js +1 -1
  42. package/framework/hooks/shared/comment-scanner.js +10 -23
  43. package/framework/hooks/shared/comment-stripper.js +1 -1
  44. package/framework/hooks/shared/e2e-check.js +67 -31
  45. package/framework/hooks/shared/errata.js +72 -0
  46. package/framework/hooks/shared/feature-locator.js +1 -1
  47. package/framework/hooks/shared/frontend-locations.js +6 -0
  48. package/framework/hooks/shared/gate-question.js +18 -0
  49. package/framework/hooks/shared/phase-utils.js +15 -32
  50. package/framework/hooks/shared/slice-progress.js +118 -0
  51. package/framework/hooks/shared/spawn-command.js +23 -0
  52. package/framework/hooks/shared/state-reader.js +61 -87
  53. package/framework/hooks/shared/state-writer.js +3 -3
  54. package/framework/mcp/registry.json +3 -4
  55. package/framework/phases.json +23 -39
  56. package/framework/rules/ai-agents-standards.md +18 -16
  57. package/framework/rules/asaas-standards.md +3 -1
  58. package/framework/rules/csharp-standards.md +10 -8
  59. package/framework/rules/data-standards.md +5 -5
  60. package/framework/rules/dotnet-templates.md +1 -1
  61. package/framework/rules/frontend-standards.md +4 -2
  62. package/framework/rules/gsap-standards.md +10 -5
  63. package/framework/rules/hangfire-standards.md +3 -1
  64. package/framework/rules/infrastructure-standards.md +4 -2
  65. package/framework/rules/neon-auth-standards.md +3 -1
  66. package/framework/rules/neon-standards.md +6 -4
  67. package/framework/rules/nextjs-standards.md +13 -11
  68. package/framework/rules/nextjs-templates.md +1 -1
  69. package/framework/rules/resend-standards.md +3 -1
  70. package/framework/schemas/config.schema.json +14 -9
  71. package/framework/schemas/feature.schema.json +15 -52
  72. package/framework/skills/README.md +4 -5
  73. package/framework/skills/core/create-umbraco-lp/SKILL.md +3 -3
  74. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +3 -3
  75. package/framework/skills/core/morph-apply/SKILL.md +150 -223
  76. package/framework/skills/core/morph-hotfix/SKILL.md +34 -43
  77. package/framework/skills/core/morph-machine/SKILL.md +4 -4
  78. package/framework/skills/core/morph-media/SKILL.md +3 -3
  79. package/framework/skills/core/morph-plan/SKILL.md +138 -300
  80. package/framework/skills/core/morph-review/SKILL.md +112 -137
  81. package/framework/skills/core/morph-standards/SKILL.md +29 -41
  82. package/framework/skills/core/morph-uiux/SKILL.md +78 -153
  83. package/framework/standards/STANDARDS.json +90 -1219
  84. package/framework/standards/STANDARDS.meta.json +1305 -0
  85. package/framework/standards/ai-agents/evals-with-cache.md +2 -3
  86. package/framework/standards/ai-agents/llm-runtime-defaults.md +1 -1
  87. package/framework/standards/ai-agents/modalities-speech-to-text.md +36 -26
  88. package/framework/standards/ai-agents/prompt-sources.md +6 -4
  89. package/framework/standards/ai-agents/providers/model-registry.md +1 -1
  90. package/framework/standards/ai-agents/rag-custom-pgvector.md +67 -39
  91. package/framework/standards/ai-agents/setup.md +2 -2
  92. package/framework/standards/ai-agents/structured-output.md +1 -1
  93. package/framework/standards/ai-agents/sweet-spot.md +1 -1
  94. package/framework/standards/architecture/code-comments.md +8 -8
  95. package/framework/standards/architecture/vertical-slice/vertical-slice.md +18 -9
  96. package/framework/standards/backend/api/validation.md +135 -47
  97. package/framework/standards/backend/database/postgresql/database.md +11 -7
  98. package/framework/standards/backend/database/vector-search-rag.md +207 -324
  99. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +14 -8
  100. package/framework/standards/backend/dotnet/result-pattern.md +40 -6
  101. package/framework/standards/backend/dotnet/scalar-ui.md +13 -7
  102. package/framework/standards/backend/dotnet/scrutor.md +1 -1
  103. package/framework/standards/backend/dotnet/testing.md +1 -1
  104. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +7 -7
  105. package/framework/standards/backend/integrations/asaas/asaas-api.md +309 -165
  106. package/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +134 -154
  107. package/framework/standards/data/nosql/cache/redis.md +120 -44
  108. package/framework/standards/data/nosql/cosmos-db.md +114 -71
  109. package/framework/standards/frontend/design-system/animations.md +1 -1
  110. package/framework/standards/frontend/design-system/naming.md +1 -1
  111. package/framework/standards/frontend/nextjs/motion-patterns.md +45 -29
  112. package/framework/standards/frontend/nextjs/naming-conventions.md +1 -1
  113. package/framework/standards/infrastructure/docker/coolify-deploy.md +8 -6
  114. package/framework/standards/infrastructure/neon/neon-pgvector.md +120 -75
  115. package/framework/standards/infrastructure/neon/neon-setup.md +53 -31
  116. package/framework/standards/integration/mcp/mcp-tools.md +7 -7
  117. package/framework/templates/README.md +2 -3
  118. package/framework/templates/REGISTRY.json +6 -170
  119. package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +2 -2
  120. package/framework/templates/code/dotnet/extensions/database-extensions.cs +1 -1
  121. package/framework/templates/code/dotnet/extensions/result-extensions.cs +27 -0
  122. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +2 -2
  123. package/framework/templates/docs/plan.md +72 -0
  124. package/framework/templates/dotnet/ai-kit/README.md +1 -9
  125. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaDisclosureTests.cs +1 -1
  126. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Morph.AiKit.Tests.csproj +0 -10
  127. package/framework/templates/infrastructure/docker/coolify.template.json +3 -3
  128. package/framework/templates/infrastructure/github/README.md +2 -1
  129. package/framework/templates/infrastructure/github/workflows/deploy-coolify.yml.hbs +2 -1
  130. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -1
  131. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +1 -1
  132. package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +1 -1
  133. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +3 -4
  134. package/package.json +1 -1
  135. package/src/commands/e2e/e2e.js +2 -2
  136. package/src/commands/observability/cost.js +18 -60
  137. package/src/commands/observability/telemetry.js +3 -5
  138. package/src/commands/project/doctor-procs.js +1 -1
  139. package/src/commands/project/doctor.js +9 -9
  140. package/src/commands/project/fleet.js +4 -4
  141. package/src/commands/project/heavy.js +3 -3
  142. package/src/commands/project/init.js +6 -1
  143. package/src/commands/project/setup-infra-cmd.js +2 -1
  144. package/src/commands/project/stack-scan.js +58 -0
  145. package/src/commands/project/standards.js +79 -25
  146. package/src/commands/project/status.js +29 -69
  147. package/src/commands/project/update.js +33 -19
  148. package/src/commands/project/worktree.js +1 -1
  149. package/src/commands/state/advance.js +62 -46
  150. package/src/commands/state/approve.js +95 -138
  151. package/src/commands/state/archive.js +20 -84
  152. package/src/commands/state/auto-approval.js +68 -0
  153. package/src/commands/state/create.js +28 -1
  154. package/src/commands/state/delete.js +1 -1
  155. package/src/commands/state/finish.js +11 -23
  156. package/src/commands/state/gate-check.js +86 -95
  157. package/src/commands/state/gate-decision.js +6 -4
  158. package/src/commands/state/handoff.js +1 -1
  159. package/src/commands/state/list.js +9 -9
  160. package/src/commands/state/report-check.js +157 -311
  161. package/src/commands/state/retype.js +9 -3
  162. package/src/commands/validation/mutate.js +77 -14
  163. package/src/commands/validation/plan-check.js +81 -0
  164. package/src/commands/validation/validate-feature.js +60 -135
  165. package/src/commands/validation/verify.js +41 -82
  166. package/src/core/paths/output-schema.js +20 -67
  167. package/src/core/state/gate-order.js +5 -6
  168. package/src/core/state/lifecycle-audit.js +2 -2
  169. package/src/core/state/state-manager.js +17 -98
  170. package/src/core/templates/template-registry.js +2 -2
  171. package/src/core/templates/template-seed.js +22 -0
  172. package/src/core/work-types.js +10 -10
  173. package/src/dashboard/app/App.jsx +0 -2
  174. package/src/dashboard/app/components/ActivityFeed.jsx +2 -3
  175. package/src/dashboard/app/components/CommandPalette.jsx +7 -8
  176. package/src/dashboard/app/components/EntityLink.jsx +1 -2
  177. package/src/dashboard/app/components/Markdown.jsx +1 -1
  178. package/src/dashboard/app/components/Sidebar.jsx +1 -2
  179. package/src/dashboard/app/hooks/useMorphQuery.js +1 -1
  180. package/src/dashboard/app/lib/phases.js +2 -4
  181. package/src/dashboard/app/pages/Activity.jsx +1 -1
  182. package/src/dashboard/app/pages/FeatureDetail.jsx +139 -129
  183. package/src/dashboard/app/pages/Features.jsx +9 -9
  184. package/src/dashboard/app/pages/Guide.jsx +2 -2
  185. package/src/dashboard/app/pages/PhasePipeline.jsx +3 -4
  186. package/src/dashboard/app/pages/RulesMap.jsx +3 -3
  187. package/src/dashboard/app/pages/SkillsLibrary.jsx +3 -3
  188. package/src/dashboard/app/pages/Standards.jsx +1 -1
  189. package/src/dashboard/scanner/activity-scanner.js +6 -16
  190. package/src/dashboard/scanner/agents-scanner.js +1 -1
  191. package/src/dashboard/scanner/docs-scanner.js +5 -23
  192. package/src/dashboard/scanner/features-scanner.js +95 -60
  193. package/src/dashboard/scanner/index.js +0 -2
  194. package/src/dashboard/scanner/project-api.js +1 -1
  195. package/src/dashboard/scanner/rules-scanner.js +15 -10
  196. package/src/dashboard/scanner/skills-scanner.js +2 -3
  197. package/src/dashboard/scanner/standards-scanner.js +2 -1
  198. package/src/lib/ci/ci-verify.js +17 -1
  199. package/src/lib/ci/github-ci.js +1 -1
  200. package/src/lib/detectors/index.js +3 -8
  201. package/src/lib/generators/handoff-generator.js +34 -65
  202. package/src/lib/generators/settings-generator.js +11 -89
  203. package/src/lib/git/evidence-staleness.js +1 -1
  204. package/src/lib/git/tree-fingerprint.js +19 -7
  205. package/src/lib/git/tree-state.js +2 -2
  206. package/src/lib/heavy/cleanup.js +1 -5
  207. package/src/lib/installers/memory-installer.js +6 -8
  208. package/src/lib/mutation/commands.js +3 -2
  209. package/src/lib/{tasks/dotnet-test-introspection.js → mutation/dotnet-introspection.js} +17 -282
  210. package/src/lib/mutation/plan.js +14 -6
  211. package/src/lib/mutation/runner.js +1 -1
  212. package/src/lib/mutation/subset.js +46 -9
  213. package/src/lib/plan/artifact-vocabulary.js +60 -0
  214. package/src/lib/plan/checks.js +234 -0
  215. package/src/lib/plan/plan-parser.js +209 -0
  216. package/src/lib/plan/plan-template.js +18 -0
  217. package/src/lib/review-reports.js +222 -0
  218. package/src/lib/risk-detector.js +134 -135
  219. package/src/lib/specs/adr-index.js +50 -69
  220. package/src/lib/specs/design-seed.js +18 -0
  221. package/src/lib/specs/frontmatter.js +44 -0
  222. package/src/lib/specs/gfm-table.js +17 -0
  223. package/src/lib/specs/old-format.js +68 -0
  224. package/src/lib/specs/revocations.js +37 -95
  225. package/src/lib/specs/screen-checklist.js +18 -17
  226. package/src/lib/stack/dotnet-build-ignores.js +47 -0
  227. package/src/lib/stack/stack-profile.js +1 -1
  228. package/src/lib/stack/stack-scan.js +267 -0
  229. package/src/lib/standards/registry.js +43 -0
  230. package/src/lib/standards/sections.js +58 -0
  231. package/src/lib/tasks/eval-node.js +4 -12
  232. package/src/lib/tasks/test-nodes.js +1 -74
  233. package/src/lib/tasks/test-runner.js +75 -117
  234. package/src/lib/telemetry/metrics.js +8 -69
  235. package/src/lib/telemetry/telemetry-reader.js +5 -118
  236. package/src/lib/telemetry/verify-event.js +5 -7
  237. package/src/lib/validators/code-budget/code-budget-validator.js +1 -1
  238. package/src/lib/validators/contracts/contract-compliance-validator.js +2 -2
  239. package/src/lib/validators/reuse/reuse-validator.js +24 -48
  240. package/src/lib/validators/reuse/symbol-scanner.js +2 -4
  241. package/src/lib/validators/traceability-check.js +85 -129
  242. package/src/lib/validators/validation-runner.js +8 -88
  243. package/src/lib/validators/verify-runner.js +134 -301
  244. package/src/lib/worktree/docker-audit.js +1 -2
  245. package/src/lib/worktree/fleet-scanner.js +25 -38
  246. package/src/scripts/setup-infra.js +42 -22
  247. package/src/utils/agents-installer.js +92 -13
  248. package/src/utils/claude-settings-manager.js +0 -35
  249. package/src/utils/file-copier.js +34 -6
  250. package/src/utils/hooks-installer.js +16 -9
  251. package/src/utils/skills-installer.js +1 -2
  252. package/framework/commands/commit.md +0 -166
  253. package/framework/evals/trace-schema.md +0 -67
  254. package/framework/hooks/claude-code/core/tasks-json-guard.js +0 -83
  255. package/framework/hooks/claude-code/core/trace-autogen.js +0 -277
  256. package/framework/hooks/git/pre-commit/specs.sh +0 -50
  257. package/framework/hooks/shared/tasks-validator.js +0 -111
  258. package/framework/rubrics/backend.json +0 -41
  259. package/framework/rubrics/default.json +0 -36
  260. package/framework/rubrics/frontend.json +0 -36
  261. package/framework/rules/morph-task-tracking.md +0 -54
  262. package/framework/rules/morph-workflow.md +0 -244
  263. package/framework/schemas/tasks.schema.json +0 -79
  264. package/framework/skills/core/morph-brainstorming/SKILL.md +0 -161
  265. package/framework/skills/core/morph-implement/SKILL.md +0 -194
  266. package/framework/skills/core/morph-proposal/SKILL.md +0 -152
  267. package/framework/skills/core/morph-stack-scan/SKILL.md +0 -145
  268. package/framework/templates/docs/proposal.md +0 -192
  269. package/framework/templates/docs/spec.md +0 -57
  270. package/framework/templates/docs/ui-components.md +0 -52
  271. package/framework/templates/docs/ui-design-system.md +0 -76
  272. package/framework/templates/docs/ui-flows.md +0 -167
  273. package/framework/templates/examples/spec-examples.md +0 -91
  274. package/framework/templates/feature/decisions.md +0 -124
  275. package/framework/templates/feature/recap.md +0 -145
  276. package/framework/templates/project/validate.js +0 -97
  277. package/framework/templates/tasks.template.json +0 -17
  278. package/src/commands/state/usecase.js +0 -143
  279. package/src/commands/tasks/dag.js +0 -181
  280. package/src/dashboard/app/pages/Rubrics.jsx +0 -97
  281. package/src/dashboard/scanner/rubrics-scanner.js +0 -12
  282. package/src/lib/agents/output-collector.js +0 -76
  283. package/src/lib/evaluator-report.js +0 -91
  284. package/src/lib/specs/acervo-format.js +0 -70
  285. package/src/lib/specs/acervo-lifecycle.js +0 -264
  286. package/src/lib/specs/done-criteria-check.js +0 -200
  287. package/src/lib/specs/usecase-check.js +0 -301
  288. package/src/lib/specs/usecase-promoter.js +0 -301
  289. package/src/lib/specs/usecase-registry.js +0 -237
  290. package/src/lib/tasks/dispatch-planner.js +0 -319
  291. package/src/lib/tasks/mermaid-renderer.js +0 -132
  292. package/src/lib/tasks/task-classifier.js +0 -30
  293. package/src/lib/tasks/task-parser.js +0 -209
  294. package/src/lib/tasks/tasks-json-parser.js +0 -296
  295. package/src/lib/tasks/test-scope.js +0 -597
  296. package/src/lib/validators/architecture/architecture-validator.js +0 -270
  297. package/src/lib/validators/architecture/index.js +0 -7
  298. package/src/lib/validators/css/css-validator.js +0 -340
  299. package/src/lib/validators/css/index.js +0 -7
  300. package/src/lib/validators/design-system/design-system-validator.js +0 -237
  301. package/src/lib/validators/design-system/index.js +0 -7
  302. package/src/lib/validators/score-aggregator.js +0 -244
  303. package/src/lib/validators/ui/index.js +0 -7
  304. package/src/lib/validators/ui/ui-contrast-validator.js +0 -422
@@ -1,145 +0,0 @@
1
- ---
2
- name: morph-stack-scan
3
- description: Varre o codebase existente, detecta stack atual, compara com o stack padrão e registra desvios em stack-scan.md
4
- version: core
5
- when-to-invoke: ao iniciar uma feature em projeto brownfield (codebase já existente)
6
- user-invokable: true
7
- cliVersion: "8.46.0"
8
- ---
9
-
10
- # morph-stack-scan
11
-
12
- ## Objetivo
13
- Identificar o estado real do codebase antes de planejar qualquer feature — garantindo que a implementação não adicione inconsistência a um projeto já existente.
14
-
15
- ## Quando invocar
16
- Quando o projeto já tem código existente e você precisa entender o estado atual antes de propor uma feature. Normalmente invocado pelo morph-brainstorming, mas pode ser invocado diretamente.
17
-
18
- ## Stack padrão de referência
19
-
20
- O "Esperado" da comparação do passo 2 é o stack baked-in (runtime .NET 10 + VSA, EF Core/Neon, `Guid.CreateVersion7()`, `sealed`, result pattern, MAF, Next.js/Tailwind/Shadcn, Hangfire) e a lista de padrões proibidos (`Guid.NewGuid()`, classes não-sealed, Service/Manager layer, repository genérico, SQL cru sem justificativa) — regra canônica em `MORPH.md` § "Stack baked-in". Os templates de `stack-scan.md` abaixo (greenfield e brownfield) escrevem essa lista por extenso no artefato da feature, para que quem ler o `stack-scan.md` depois não precise reabrir o `MORPH.md`.
21
-
22
- ## Greenfield short-circuit
23
-
24
- Antes de despachar Explore, verifique se o projeto é greenfield:
25
-
26
- 1. Use `Glob` para detectar presença de qualquer um destes:
27
- - `**/*.csproj`
28
- - `**/*.sln`
29
- - `package.json` (na raiz)
30
- - `src/**/*.cs` ou `src/**/*.ts` ou `src/**/*.tsx`
31
- - `migrations/**/*`
32
-
33
- 2. Se **nenhum** for encontrado, o projeto é greenfield. Produza este `stack-scan.md` em `.morph/features/{feature}/0-proposal/` e retorne sem chamar Explore:
34
-
35
- ```markdown
36
- # Stack Scan — {feature}
37
-
38
- **Status:** GREENFIELD (sem código source detectado)
39
-
40
- ## Stack
41
- Project empty. Aplicar stack padrão de MORPH.md:
42
- - Backend: .NET 10 + VSA + EF Core + Neon
43
- - Frontend: Next.js App Router + Tailwind + Shadcn + Framer Motion
44
- - IA: MAF (quando aplicável à feature)
45
- - Jobs: Hangfire (apenas se necessário)
46
-
47
- ## Padrões obrigatórios
48
- - IDs: `Guid.CreateVersion7()`
49
- - Classes: `sealed` por padrão
50
- - Erros: Result pattern (`result.Match()`)
51
-
52
- ## Padrões proibidos
53
- `Guid.NewGuid()`, classes não-sealed sem justificativa, exceptions como fluxo de controle, 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`.
54
-
55
- ## Recomendação
56
- Compliance trivial (greenfield). Prosseguir para morph-brainstorming.
57
- ```
58
-
59
- 3. Se algum dos arquivos foi encontrado, o projeto é brownfield — siga para o passo seguinte.
60
-
61
- ## O que fazer (brownfield)
62
-
63
- 0. **Se houver grafo, ele responde a pergunta do repository genérico melhor que o grep.**
64
-
65
- ```bash
66
- morph-spec graph status --json # available:false? pule este passo
67
- morph-spec graph affected IRepository --uses-only --json
68
- morph-spec graph explain IRepository --json # o registro no DI aparece aqui
69
- ```
70
-
71
- A pergunta do passo 1 é *"quantos CONSUMIDORES REAIS"*, e é exatamente aí que o grep erra: no ProspectPRO ele aponta **23 arquivos**, mas 20 são interfaces filhas **herdando** o contrato e só **2** são uso real. Quem lê 23 conclui "está em uso, não é código morto" — e a conclusão certa é a oposta. `--uses-only` exclui `inherits`/`implements`/`extends` e devolve os 2. O `explain` do mesmo símbolo entrega de brinde a outra metade da pergunta: onde ele está registrado no DI.
72
-
73
- **Fallback:** grafo ausente (`no-graph`), símbolo não encontrado ou ambíguo — siga com o `Explore` e o grep do passo 1, e **registre no `stack-scan.md` que a contagem veio do grep**, que superestima consumidores por não separar herança de uso.
74
-
75
- 1. Despache um `Explore` subagent para varrer o codebase:
76
-
77
- ```
78
- Varredura de stack compliance — morph-stack-scan.
79
-
80
- Leia os seguintes arquivos/pastas e reporte o que encontrar:
81
-
82
- BACKEND:
83
- - Todos os .csproj: qual TargetFramework? Quais PackageReferences relevantes?
84
- - Procure por: Guid.NewGuid() vs Guid.CreateVersion7(), sealed classes, result pattern vs exceptions
85
- - Estrutura de src/: segue feature-folder (VSA)? Tem Controllers? Tem repository genérico (IRepository<T>/IUnitOfWork)? Se tiver, reporte como código morto: liste onde está registrado no DI e quantos consumidores reais existem em src/ e tests/
86
- - Migrations/: qual ORM? Neon/Postgres ou outro banco?
87
- - Microsoft.Agents.* ou Microsoft.Extensions.AI nos PackageReferences?
88
-
89
- FRONTEND:
90
- - package.json: Next.js? Tailwind? Framer Motion? Shadcn/ui?
91
- - Estrutura de app/ ou pages/: App Router ou Pages Router?
92
-
93
- JOBS:
94
- - Hangfire nos PackageReferences?
95
-
96
- Para cada item acima, responda: presente/ausente, e se presente qual versão ou padrão.
97
- Não faça sugestões — apenas reporte o que existe.
98
- ```
99
-
100
- 2. Com os resultados da varredura, compare com o stack padrão item por item e classifique cada desvio:
101
-
102
- | Severidade | Critério |
103
- |------------|---------|
104
- | **Bloqueante** | Runtime diferente (.NET 8 ou anterior), ORM diferente (Dapper puro sem EF Core), banco diferente (MySQL, SQL Server) |
105
- | **Alto** | `Guid.NewGuid()` generalizado, camada de Service/Manager entre handler e dados, repository genérico (`IRepository<T>`/`IUnitOfWork`) presente — código morto: migração é deletar a pasta `Repository/` + as 2 linhas de DI, SQL cru generalizado, exceptions como fluxo de controle |
106
- | **Médio** | Classes não-sealed, Pages Router em vez de App Router, biblioteca de UI diferente |
107
- | **Baixo** | Versões de pacotes desatualizadas mas compatíveis |
108
-
109
- 3. Produza `stack-scan.md` em `.morph/features/{feature}/0-proposal/`:
110
-
111
- ```markdown
112
- # Stack Scan — {feature}
113
-
114
- ## Resultado
115
- {Em compliance / Desvios detectados}
116
-
117
- ## Stack detectado
118
- | Camada | Detectado | Esperado | Status |
119
- |--------|-----------|----------|--------|
120
- | Runtime | .NET X | .NET 10 | ✓ / ✗ |
121
- ...
122
-
123
- ## Desvios (ordenados por severidade)
124
- ### Bloqueantes
125
- - {desvio}: {onde foi encontrado} — impacto: {o que quebra se não migrar} — esforço: {estimativa}
126
-
127
- ### Não bloqueantes
128
- - {desvio}: {onde foi encontrado} — migração: {como resolver} — esforço: {estimativa}
129
-
130
- ## Recomendação
131
- {Em compliance — prosseguir para morph-brainstorming}
132
- {ou: Migração necessária antes de prosseguir — ver Desvios acima}
133
- ```
134
-
135
- 4. Se houver desvios bloqueantes ou altos, pergunte via `AskUserQuestion`: "Esta migração deve ser incluída na feature atual ou tratada numa feature separada?" A resposta é decisão humana — registre-a na seção "Compliance de stack" do `proposal.md` (produzido pela `morph-brainstorming`), não num artefato novo: a lista de desvios com impacto/esforço já vive no `stack-scan.md` acima.
136
-
137
- 5. Se não houver desvios (ou apenas baixos): informe "codebase em compliance com o stack padrão" e prossiga para morph-brainstorming ou morph-plan conforme o contexto.
138
-
139
- ## Output esperado
140
- - `.morph/features/{feature}/0-proposal/stack-scan.md` — resultado da varredura, com desvios ordenados por severidade e esforço estimado
141
- - Decisão documentada: incluir migração nesta feature ou separar (registrada no proposal.md pela morph-brainstorming)
142
-
143
- ## Referências
144
- - `.morph/framework/MORPH.md` — seção 4 (Standards), seção 2 (Fases)
145
- - `.claude/skills/morph-brainstorming/SKILL.md` — fluxo greenfield/brownfield
@@ -1,192 +0,0 @@
1
- # Feature Proposal: {{titleCase FEATURE_NAME}}
2
-
3
- > Proposal for a new feature. This document describes WHAT and WHY.
4
- > For technical details, see `spec.md`.
5
-
6
- ## Metadata
7
-
8
- | Field | Value |
9
- |-------|-------|
10
- | **Proposed** | {{DATE}} |
11
- | **Author** | {{AUTHOR}} |
12
- | **Status** | Draft / Under Review / Approved / Rejected |
13
- | **Priority** | High / Medium / Low |
14
- {{#if STACK}}| **Stack** | {{STACK}} |{{/if}}
15
-
16
- ---
17
-
18
- ## Overview
19
-
20
- {Brief 2-3 sentence summary of the feature}
21
-
22
- ---
23
-
24
- ## Acceptance Criteria
25
-
26
- Verifiable conditions that mean this feature is done:
27
-
28
- - [ ] {Criterion 1 — observable / testable}
29
- - [ ] {Criterion 2}
30
- - [ ] {Criterion 3}
31
-
32
- ---
33
-
34
- ## Problem Statement
35
-
36
- ### What is the problem?
37
-
38
- {Describe the problem this feature solves. Be specific.}
39
-
40
- ### Who is affected?
41
-
42
- {Who suffers from this problem? End users? Developers? Operations?}
43
-
44
- ### What is the impact?
45
-
46
- {What is the impact of NOT solving this problem?}
47
- - User productivity loss: {X}
48
- - Revenue/Cost impact: {X}
49
- - User satisfaction: {X}
50
-
51
- ---
52
-
53
- ## Proposed Solution
54
-
55
- ### Overview
56
-
57
- {Describe the proposed solution in 2-3 paragraphs}
58
-
59
- ### Key Features
60
-
61
- 1. **{Feature 1}** - {brief description}
62
- 2. **{Feature 2}** - {brief description}
63
- 3. **{Feature 3}** - {brief description}
64
-
65
- {{#if (eq STACK "nextjs-neon")}}
66
- ### Technical Approach
67
-
68
- | Layer | Technology | Role |
69
- |-------|-----------|------|
70
- | **Database** | Neon (PostgreSQL + RLS) | {tables, policies, storage} |
71
- | **Backend API** | .NET 10 Minimal API | {endpoints, business logic} |
72
- | **Frontend** | Next.js 15 (App Router) | {pages, components, auth} |
73
- | **Infra** | Coolify + Docker | {deployment, SSL} |
74
- {{/if}}
75
-
76
- ### User Journey
77
-
78
- ```
79
- 1. User {initial action}
80
- 2. System {response}
81
- 3. User {next action}
82
- 4. System {final result}
83
- ```
84
-
85
- ---
86
-
87
- {{#if (eq STACK "nextjs-neon")}}
88
- ## Cost Estimate
89
-
90
- | Resource | Provider | Monthly Cost | Notes |
91
- |----------|----------|-------------|-------|
92
- | Neon | Free / Launch | $0 - $19 | {DB, Connection Pooling, Branching} |
93
- | VPS (Coolify) | {provider} | ${X} | {API + Web containers} |
94
- | External APIs | {provider} | ${X} | {if applicable} |
95
- | **Total** | | **${X}/month** | |
96
-
97
- ---
98
-
99
- {{/if}}
100
- ## Success Metrics
101
-
102
- How will we know this feature is successful?
103
-
104
- | Metric | Current | Target |
105
- |--------|---------|--------|
106
- | {Metric 1} | {X} | {Y} |
107
- | {Metric 2} | {X} | {Y} |
108
-
109
- ---
110
-
111
- ## Scope
112
-
113
- ### In Scope
114
-
115
- - {Item 1 that is included}
116
- - {Item 2 that is included}
117
- - {Item 3 that is included}
118
-
119
- ### Out of Scope
120
-
121
- - {Item 1 that is NOT included}
122
- - {Item 2 that is NOT included}
123
-
124
- ### Future Considerations
125
-
126
- - {Item that could be added later}
127
-
128
- ---
129
-
130
- ## Risks & Concerns
131
-
132
- | Risk | Likelihood | Impact | Mitigation |
133
- |------|------------|--------|------------|
134
- | {Risk 1} | High/Med/Low | High/Med/Low | {mitigation strategy} |
135
- | {Risk 2} | High/Med/Low | High/Med/Low | {mitigation strategy} |
136
-
137
- ---
138
-
139
- ## Conflitos com o acervo
140
-
141
- UCs (`.morph/specs/usecases/`), ADRs ativos (`.morph/specs/adrs/`) and `.morph/context/*.md` that
142
- this request contradicts. `Nenhum conflito encontrado.` when there is none — the section is always present.
143
-
144
- | Fonte | O que diz hoje | O que o pedido muda | Decisão |
145
- |-------|----------------|---------------------|---------|
146
- | {UC-133} | {Public Sans + Lora em toda a interface} | {admin passa a Geist} | {vale o novo no admin; a vitrine mantém o antigo — decisions.md ADR-001} |
147
-
148
- ---
149
-
150
- ## Dependencies
151
-
152
- - [ ] {Dependency 1} - {status}
153
- - [ ] {Dependency 2} - {status}
154
-
155
- ---
156
-
157
- ## Estimated Effort
158
-
159
- | Phase | Estimate |
160
- |-------|----------|
161
- | Design & Spec | {X}h |
162
- {{#if (eq STACK "nextjs-neon")}}| Database & Migrations | {X}h |
163
- | Backend API | {X}h |
164
- | Frontend | {X}h |
165
- {{else}}| Implementation | {X}h |
166
- {{/if}}| Testing | {X}h |
167
- | **Total** | **{X}h** |
168
-
169
- ---
170
-
171
- ## Questions & Clarifications
172
-
173
- 1. {Question 1 that needs answering}
174
- 2. {Question 2 that needs answering}
175
-
176
- ---
177
-
178
- ## Next Steps
179
-
180
- Once approved:
181
- 1. Create detailed `spec.md` with technical design
182
- {{#if (eq STACK "nextjs-neon")}}2. Define contracts (`contracts.cs` + `contracts.ts`)
183
- 3. Record decisions in `decisions.md`
184
- 4. Break down into `tasks.json`
185
- 5. Begin implementation
186
- {{else}}2. Break down into `tasks.json`
187
- 3. Begin implementation
188
- {{/if}}
189
-
190
- ---
191
-
192
- *Created with MORPH Framework*
@@ -1,57 +0,0 @@
1
- # Feature Specification: {{titleCase FEATURE_NAME}}
2
-
3
- | Field | Value |
4
- |-------|-------|
5
- | **ID** | {{FEATURE_NAME}} |
6
- | **Created** | {{DATE}} |
7
- | **Stack** | {{STACK}} |
8
-
9
- > Behavior lives in the use cases (`2-plan/usecases/UC-*.md`). This file says HOW they are realized —
10
- > do not repeat postconditions here.
11
-
12
- ## Architecture
13
-
14
- {Components, how they connect, main data flows. Enough to implement without basic questions.}
15
-
16
- ### Data Model
17
-
18
- | Entity | Field | Type | Notes |
19
- |--------|-------|------|-------|
20
- | {Entity} | {field} | {type} | {constraint, index, relation} |
21
-
22
- ### Contracts
23
-
24
- ```
25
- {METHOD} /api/{route}
26
- Request: { ... }
27
- Response: { ... } | ProblemDetails 400/404/409
28
- ```
29
-
30
- ## Technical edge cases
31
-
32
- - {Edge case} → {how it is handled}
33
-
34
- ## UCs e ADRs que esta feature altera ou revoga
35
-
36
- > Read by `morph-spec finish`: in the archive commit, each row marks the project acervo — a UC turns
37
- > `status: superseded` + `superseded_by` (+ `scope` when partial); an ADR leaves `.morph/specs/adrs/`
38
- > (total) or keeps its file with the scope where it still holds (partial). Columns are positional.
39
- > `morph-spec usecase check {feature}` reports a bad row while this file can still change (it freezes at Gate 2).
40
- > Nothing revoked → replace the table with `Nenhum.`
41
-
42
- | Id | Mudança | Substituto | Escopo em que o antigo ainda vale |
43
- |----|---------|------------|-----------------------------------|
44
- | UC-{nn} | parcial | UC-{nn} | {where the old one still holds} |
45
- | {feature}/ADR-{nnn} | total | — | — |
46
-
47
- ## Contrato de implementação
48
-
49
- - **Standards:** {ids from `morph-spec standards --find`, plus `architecture-code-comments` and the stack's test standard}
50
- - **Proibições desta feature:** {beyond MORPH.md "Stack baked-in", or "nenhuma"}
51
- - **Verificação de runtime:** {how the stack comes up (`morph-spec e2e up {feature}`), which flows the evaluator navigates, which become Playwright specs, auth setup — or why it does not apply}
52
- - **Baseline:** {the COMMAND that measures it — `dotnet test`, `npm test` — never a number}
53
- - **Pré-requisito:** {a PREDICATE — `git merge-base --is-ancestor origin/main HEAD` exits 0 — never a SHA}
54
-
55
- ## Out of Scope
56
-
57
- - {Item}
@@ -1,52 +0,0 @@
1
- # UI Components: {{titleCase FEATURE_NAME}}
2
-
3
- | Field | Value |
4
- |-------|-------|
5
- | **Feature** | {{FEATURE_NAME}} |
6
- | **Created** | {{DATE}} |
7
- | **Stack** | {{STACK}} |
8
-
9
- ---
10
-
11
- {{#if (eq STACK "nextjs-neon")}}
12
- ## Component Library: shadcn/ui
13
-
14
- ### C001: Button
15
-
16
- ```tsx
17
- import { Button } from '@/components/ui/button';
18
-
19
- <Button onClick={handleSave} disabled={!isValid}>
20
- Save
21
- </Button>
22
- ```
23
-
24
- ### C002: Data Table
25
-
26
- ```tsx
27
- import { DataTable } from '@/components/ui/data-table';
28
-
29
- <DataTable columns={columns} data={items} />
30
- ```
31
-
32
- {{/if}}
33
-
34
- ---
35
-
36
- ## Form Validation
37
-
38
- | Field | Rule | Error Message |
39
- |-------|------|---------------|
40
- | **Name** | Required, max 100 | "Name is required" |
41
- | **Email** | Valid email | "Invalid email" |
42
-
43
- ---
44
-
45
- ## Accessibility
46
- - [ ] All inputs have labels
47
- - [ ] Error messages announced
48
- - [ ] Keyboard navigation works
49
-
50
- ---
51
-
52
- *Generated with MORPH Framework*
@@ -1,76 +0,0 @@
1
- # UI Design System: {{titleCase FEATURE_NAME}}
2
-
3
- | Field | Value |
4
- |-------|-------|
5
- | **Feature** | {{FEATURE_NAME}} |
6
- | **Created** | {{DATE}} |
7
- | **Project** | {{PROJECT_NAME}} |
8
-
9
- ---
10
-
11
- ## Color Palette
12
-
13
- ### Primary Colors
14
- | Token | Value | Usage |
15
- |-------|-------|-------|
16
- | `--color-primary` | #0078D4 | Primary actions, links |
17
- | `--color-primary-hover` | #106EBE | Hover states |
18
-
19
- ### Semantic Colors
20
- | Token | Value | Usage |
21
- |-------|-------|-------|
22
- | `--color-success` | #107C10 | Success states |
23
- | `--color-warning` | #F7630C | Warnings |
24
- | `--color-error` | #D13438 | Errors |
25
-
26
- ---
27
-
28
- ## Typography
29
-
30
- | Token | Size | Weight | Usage |
31
- |-------|------|--------|-------|
32
- | `--text-h1` | 24px | 600 | Section headers |
33
- | `--text-body` | 14px | 400 | Body text |
34
- | `--text-caption` | 12px | 400 | Labels |
35
-
36
- ---
37
-
38
- ## Spacing
39
-
40
- | Token | Value | Usage |
41
- |-------|-------|-------|
42
- | `--space-sm` | 8px | Compact spacing |
43
- | `--space-md` | 16px | Standard spacing |
44
- | `--space-lg` | 24px | Wide spacing |
45
-
46
- ---
47
-
48
- ## Components
49
-
50
- ### Buttons
51
- - **Primary**: `--color-primary` background, white text
52
- - **Secondary**: Transparent, `--color-primary` border
53
- - **Sizes**: Small (24px), Medium (32px), Large (40px)
54
-
55
- ### Forms
56
- - **Input height**: 32px
57
- - **Focus**: 2px solid `--color-primary`
58
- - **Error**: 1px solid `--color-error`
59
-
60
- ---
61
-
62
- ## Accessibility
63
- - [ ] 4.5:1 contrast ratio (WCAG AA)
64
- - [ ] Touch targets minimum 44x44px
65
- - [ ] Keyboard navigation supported
66
-
67
- ---
68
-
69
- ## Responsive Breakpoints
70
- - **Mobile**: < 768px
71
- - **Tablet**: 768px - 1199px
72
- - **Desktop**: ≥ 1200px
73
-
74
- ---
75
-
76
- *Generated with MORPH Framework*
@@ -1,167 +0,0 @@
1
- # UI Flows: {{titleCase FEATURE_NAME}}
2
-
3
- | Field | Value |
4
- |-------|-------|
5
- | **Feature** | {{FEATURE_NAME}} |
6
- | **Created** | {{DATE}} |
7
-
8
- ---
9
-
10
- ## User Stories
11
-
12
- ### US001: {Primary User Story}
13
-
14
- **As** a {user type}
15
- **I want** to {capability}
16
- **So that** {benefit}
17
-
18
- **Acceptance Criteria:**
19
- 1. {Criterion 1}
20
- 2. {Criterion 2}
21
-
22
- ---
23
-
24
- ## Flow Inventory
25
-
26
- | Flow ID | Name | Priority |
27
- |---------|------|----------|
28
- | **F001** | Create New Item | High |
29
- | **F002** | Edit Existing Item | High |
30
- | **F003** | Delete Item | Medium |
31
-
32
- ---
33
-
34
- ## F001: Create New Item
35
-
36
- ### Happy Path
37
-
38
- ```
39
- START
40
- ↓
41
- [User clicks "Add New"]
42
- ↓
43
- [Modal opens with form]
44
- ↓
45
- [User fills required fields]
46
- ↓
47
- [User clicks "Submit"]
48
- ↓
49
- [Validation passes] ✓
50
- ↓
51
- [API call: POST /api/items]
52
- ↓
53
- [Success response]
54
- ↓
55
- [Modal closes]
56
- ↓
57
- [Success toast: "Item created"]
58
- ↓
59
- [Table refreshes]
60
- ↓
61
- END
62
- ```
63
-
64
- **Duration:** 15-30 seconds
65
- **Success Rate Target:** 95%
66
-
67
- ---
68
-
69
- ### Alternative Path: Validation Error
70
-
71
- ```
72
- [User clicks "Submit"]
73
- ↓
74
- [Validation fails] ✕
75
- ↓
76
- [Error messages shown inline]
77
- ↓
78
- [User corrects errors]
79
- ↓
80
- [Real-time validation clears errors]
81
- ↓
82
- → Returns to Happy Path
83
- ```
84
-
85
- ---
86
-
87
- ### Edge Cases
88
-
89
- | Scenario | Behavior |
90
- |----------|----------|
91
- | **Duplicate Name** | Show warning, allow submit |
92
- | **Network Error** | Show error toast, preserve data |
93
- | **Session Expired** | Redirect to login |
94
-
95
- ---
96
-
97
- ## F002: Edit Existing Item
98
-
99
- ```
100
- [User clicks "Edit"]
101
- ↓
102
- [Modal opens with pre-filled form]
103
- ↓
104
- [User modifies fields]
105
- ↓
106
- [User clicks "Save"]
107
- ↓
108
- [API call: PUT /api/items/{id}]
109
- ↓
110
- [Success toast]
111
- ↓
112
- [Table refreshes]
113
- END
114
- ```
115
-
116
- ---
117
-
118
- ## F003: Delete Item
119
-
120
- ```
121
- [User clicks "Delete"]
122
- ↓
123
- [Confirmation dialog: "Delete item?"]
124
- ↓
125
- [User confirms]
126
- ↓
127
- [API call: DELETE /api/items/{id}]
128
- ↓
129
- [Success toast]
130
- ↓
131
- [Table refreshes]
132
- END
133
- ```
134
-
135
- ---
136
-
137
- ## Toast Notifications
138
-
139
- | Event | Type | Message | Duration |
140
- |-------|------|---------|----------|
141
- | **Item Created** | Success | "Item created successfully" | 3s |
142
- | **Item Updated** | Success | "Item updated successfully" | 3s |
143
- | **Item Deleted** | Success | "Item deleted successfully" | 3s |
144
- | **Error** | Error | "Something went wrong" | 5s |
145
-
146
- ---
147
-
148
- ## Keyboard Shortcuts
149
-
150
- | Shortcut | Action |
151
- |----------|--------|
152
- | **Ctrl+N** | New Item |
153
- | **Escape** | Close modal |
154
- | **Enter** | Submit form |
155
-
156
- ---
157
-
158
- ## Performance Targets
159
-
160
- | Flow | Target |
161
- |------|--------|
162
- | **Create Item** | < 2s (API response) |
163
- | **Search** | < 500ms |
164
-
165
- ---
166
-
167
- *Generated with MORPH Framework*