@polymorphism-tech/morph-spec 3.1.0 → 4.2.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 (333) hide show
  1. package/CLAUDE.md +882 -3
  2. package/README.md +79 -18
  3. package/bin/detect-agents.js +1 -1
  4. package/bin/morph-spec.js +163 -26
  5. package/bin/task-manager.cjs +101 -7
  6. package/bin/validate.js +1 -1
  7. package/docs/cli-auto-detection.md +219 -0
  8. package/docs/getting-started.md +0 -5
  9. package/docs/llm-interaction-config.md +735 -0
  10. package/docs/troubleshooting.md +269 -0
  11. package/docs/v3.0/AGENTS.md +521 -0
  12. package/docs/v3.0/ANALYSIS.md +555 -0
  13. package/docs/v3.0/ARCHITECTURE.md +436 -0
  14. package/docs/v3.0/EXECUTION-FLOW.md +1304 -0
  15. package/docs/v3.0/FEATURES.md +688 -0
  16. package/docs/v3.0/README.md +231 -0
  17. package/docs/v3.0/ROADMAP.md +801 -0
  18. package/docs/validation-checklist.md +0 -1
  19. package/package.json +5 -1
  20. package/src/commands/agents/index.js +4 -0
  21. package/src/commands/agents/spawn-team.js +172 -0
  22. package/src/commands/{create-story.js → feature/create-story.js} +357 -354
  23. package/src/commands/feature/index.js +6 -0
  24. package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
  25. package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
  26. package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
  27. package/src/commands/{generate.js → generation/generate.js} +130 -3
  28. package/src/commands/generation/index.js +5 -0
  29. package/src/commands/index.js +16 -0
  30. package/src/commands/learning/capture-pattern.js +121 -0
  31. package/src/commands/learning/index.js +5 -0
  32. package/src/commands/learning/search-patterns.js +126 -0
  33. package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
  34. package/src/commands/project/detect-workflow.js +174 -0
  35. package/src/commands/{detect.js → project/detect.js} +104 -104
  36. package/src/commands/{doctor.js → project/doctor.js} +356 -356
  37. package/src/commands/project/index.js +10 -0
  38. package/src/commands/{init.js → project/init.js} +305 -258
  39. package/src/commands/{sync.js → project/sync.js} +167 -167
  40. package/src/commands/{update.js → project/update.js} +240 -204
  41. package/src/commands/{advance-phase.js → state/advance-phase.js} +416 -266
  42. package/src/commands/state/approve.js +221 -0
  43. package/src/commands/state/index.js +8 -0
  44. package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
  45. package/src/commands/{state.js → state/state.js} +334 -334
  46. package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
  47. package/src/commands/tasks/index.js +4 -0
  48. package/src/commands/{task.js → tasks/task.js} +78 -78
  49. package/src/commands/templates/index.js +8 -0
  50. package/src/commands/templates/template-customize.js +101 -0
  51. package/src/commands/templates/template-list.js +128 -0
  52. package/src/commands/templates/template-render.js +95 -0
  53. package/src/commands/templates/template-show.js +131 -0
  54. package/src/commands/templates/template-validate.js +91 -0
  55. package/src/commands/utils/index.js +7 -0
  56. package/src/commands/utils/migrate-state.js +158 -0
  57. package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
  58. package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
  59. package/src/commands/utils/upgrade.js +346 -0
  60. package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
  61. package/src/commands/validation/index.js +8 -0
  62. package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
  63. package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
  64. package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
  65. package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
  66. package/src/core/index.js +10 -0
  67. package/src/core/registry/command-registry.js +302 -0
  68. package/src/core/registry/index.js +8 -0
  69. package/src/core/registry/validator-registry.js +204 -0
  70. package/src/core/state/index.js +8 -0
  71. package/src/core/state/phase-state-machine.js +214 -0
  72. package/src/{lib → core/state}/state-manager.js +572 -414
  73. package/src/core/templates/index.js +9 -0
  74. package/src/core/templates/template-data-sources.js +325 -0
  75. package/src/core/templates/template-registry.js +335 -0
  76. package/src/core/templates/template-renderer.js +477 -0
  77. package/src/core/templates/template-validator.js +296 -0
  78. package/src/core/workflows/index.js +7 -0
  79. package/src/core/workflows/workflow-detector.js +354 -0
  80. package/src/generator/config-generator.js +206 -0
  81. package/src/generator/templates/config.json.template +40 -0
  82. package/src/generator/templates/project.md.template +67 -0
  83. package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
  84. package/src/lib/analysis/index.js +7 -0
  85. package/src/lib/checkpoints/checkpoint-hooks.js +258 -0
  86. package/src/lib/checkpoints/index.js +7 -0
  87. package/src/lib/detectors/config-detector.js +223 -223
  88. package/src/lib/detectors/conversation-analyzer.js +163 -163
  89. package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
  90. package/src/lib/detectors/index.js +87 -84
  91. package/src/lib/detectors/standards-generator.js +275 -275
  92. package/src/lib/detectors/structure-detector.js +245 -245
  93. package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
  94. package/src/lib/generators/index.js +10 -0
  95. package/src/lib/generators/metadata-extractor.js +387 -0
  96. package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
  97. package/src/lib/learning/index.js +7 -0
  98. package/src/lib/orchestration/index.js +7 -0
  99. package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
  100. package/src/lib/stacks/index.js +7 -0
  101. package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
  102. package/src/lib/standards/index.js +7 -0
  103. package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
  104. package/src/lib/troubleshooting/index.js +8 -0
  105. package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
  106. package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
  107. package/src/lib/validators/architecture/architecture-validator.js +387 -0
  108. package/src/lib/validators/architecture/index.js +7 -0
  109. package/src/lib/validators/architecture-validator.js +40 -367
  110. package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
  111. package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
  112. package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
  113. package/src/lib/validators/blazor/index.js +9 -0
  114. package/src/lib/validators/content/content-validator.js +351 -0
  115. package/src/lib/validators/content/index.js +7 -0
  116. package/src/lib/validators/content-validator.js +164 -0
  117. package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
  118. package/src/lib/validators/contracts/index.js +7 -0
  119. package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
  120. package/src/lib/validators/css/index.js +7 -0
  121. package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
  122. package/src/lib/validators/design-system/index.js +7 -0
  123. package/src/lib/validators/package-validator.js +41 -340
  124. package/src/lib/validators/packages/index.js +7 -0
  125. package/src/lib/validators/packages/package-validator.js +360 -0
  126. package/src/lib/validators/shared/index.js +12 -0
  127. package/src/lib/validators/shared/issue-counter.js +18 -0
  128. package/src/lib/validators/shared/result-formatter.js +124 -0
  129. package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
  130. package/src/lib/validators/ui/index.js +7 -0
  131. package/src/lib/validators/ui/ui-contrast-validator.js +422 -0
  132. package/src/lib/validators/ui-contrast-validator.js +31 -409
  133. package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
  134. package/src/llm/analyzer.js +215 -0
  135. package/src/llm/environment-detector.js +43 -0
  136. package/src/llm/few-shot-examples.js +216 -0
  137. package/src/llm/project-config-schema.json +188 -0
  138. package/src/llm/prompt-builder.js +96 -0
  139. package/src/orchestrator.js +206 -0
  140. package/src/sanitizer/context-sanitizer.js +221 -0
  141. package/src/sanitizer/patterns.js +163 -0
  142. package/src/scanner/project-scanner.js +242 -0
  143. package/src/ui/diff-display.js +91 -0
  144. package/src/ui/interactive-wizard.js +96 -0
  145. package/src/ui/user-review.js +211 -0
  146. package/src/ui/wizard-questions.js +188 -0
  147. package/src/utils/color-utils.js +70 -0
  148. package/src/utils/file-copier.js +188 -189
  149. package/src/utils/process-handler.js +97 -0
  150. package/src/writer/file-writer.js +86 -0
  151. package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +3 -3
  152. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/api-designer.md +59 -0
  153. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +45 -255
  154. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +33 -88
  155. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +25 -89
  156. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
  157. package/stacks/blazor-azure/.morph/config/agents.json +879 -764
  158. package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
  159. package/stacks/blazor-azure/.morph/templates/.gitkeep +0 -0
  160. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
  161. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
  162. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
  163. package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +221 -0
  164. package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +79 -0
  165. package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +529 -0
  166. package/stacks/nextjs-supabase/.claude/commands/morph-infra.md +209 -0
  167. package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +227 -0
  168. package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +122 -0
  169. package/stacks/nextjs-supabase/.claude/commands/morph-status.md +86 -0
  170. package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +122 -0
  171. package/stacks/nextjs-supabase/.claude/settings.local.json +6 -0
  172. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +30 -150
  173. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
  174. package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
  175. package/stacks/nextjs-supabase/.morph/templates/.gitkeep +0 -0
  176. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
  177. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
  178. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
  179. package/stacks/nextjs-supabase/README.md +6 -15
  180. package/bin/render-template.js +0 -303
  181. package/bin/semantic-detect-agents.js +0 -247
  182. package/bin/validate-agents-skills.js +0 -257
  183. package/bin/validate-agents.js +0 -70
  184. package/bin/validate-phase.js +0 -263
  185. package/docs/examples.md +0 -328
  186. package/scripts/reorganize-skills.cjs +0 -175
  187. package/scripts/validate-agents-structure.cjs +0 -52
  188. package/scripts/validate-skills.cjs +0 -180
  189. package/src/commands/deploy.js +0 -780
  190. package/src/lib/continuous-validator.js +0 -421
  191. package/src/lib/decision-constraint-loader.js +0 -109
  192. package/src/lib/design-system-scaffolder.js +0 -299
  193. package/src/lib/hook-executor.js +0 -257
  194. package/src/lib/mockup-generator.js +0 -366
  195. package/src/lib/ui-detector.js +0 -350
  196. package/stacks/blazor-azure/.azure/README.md +0 -293
  197. package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
  198. package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
  199. package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
  200. package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
  201. package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
  202. package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
  203. package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
  204. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
  205. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
  206. package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
  207. package/stacks/blazor-azure/.claude/settings.local.json +0 -15
  208. package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
  209. package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
  210. package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
  211. package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
  212. package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
  213. package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
  214. package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
  215. package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
  216. package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
  217. package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
  218. package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
  219. package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
  220. package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
  221. package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
  222. package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
  223. package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
  224. package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
  225. package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
  226. package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
  227. package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
  228. package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
  229. package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
  230. package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
  231. package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
  232. package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
  233. package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
  234. package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
  235. package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
  236. package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
  237. package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
  238. package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
  239. package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
  240. package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
  241. package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
  242. package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
  243. package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
  244. package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
  245. package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
  246. package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
  247. package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
  248. package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
  249. package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
  250. package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
  251. package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
  252. package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
  253. package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
  254. package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
  255. package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
  256. package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
  257. package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
  258. package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
  259. package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
  260. package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
  261. package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
  262. package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
  263. package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
  264. package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
  265. package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
  266. package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
  267. package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
  268. package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
  269. package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
  270. package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
  271. package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
  272. package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
  273. package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
  274. package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
  275. package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
  276. package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
  277. package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
  278. package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
  279. package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
  280. package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
  281. package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
  282. package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
  283. package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
  284. package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
  285. package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
  286. package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
  287. package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
  288. package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
  289. package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
  290. package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
  291. package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
  292. package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
  293. package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
  294. package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
  295. package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
  296. package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
  297. package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
  298. package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
  299. package/stacks/blazor-azure/.morph/templates/story.md +0 -143
  300. package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
  301. package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
  302. package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
  303. package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
  304. package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
  305. package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
  306. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
  307. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
  308. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
  309. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
  310. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
  311. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
  312. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
  313. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
  314. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
  315. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
  316. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
  317. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
  318. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
  319. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
  320. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
  321. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
  322. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
  323. package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
  324. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
  325. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
  326. package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
  327. package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
  328. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
  329. package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
  330. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
  331. package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
  332. /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
  333. /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
package/README.md CHANGED
@@ -34,10 +34,78 @@
34
34
 
35
35
  MORPH-SPEC é um framework de desenvolvimento orientado por especificações com **30 agentes AI especializados** organizados em 4 tiers hierárquicos. Cada agente tem expertise em tecnologias específicas e segue workflows estruturados para entregar código production-ready.
36
36
 
37
- **Stacks suportadas:** .NET 10/Blazor, .NET 10/Next.js
38
- **Infraestrutura:** Azure Bicep (IaC)
37
+ **Stacks suportadas:** .NET 10/Blazor, .NET 10/Next.js, Node.js, Monorepos
38
+ **Infraestrutura:** Azure Bicep (IaC) + Docker
39
39
  **Ferramenta:** Claude Code
40
40
  **Validação:** Pipeline automático de enforcement com gates por fase
41
+ **Auto-Detecção:** ✨ LLM-powered context detection (v3.1+)
42
+
43
+ ---
44
+
45
+ ## 🚀 Novidade v3.0: LLM Interaction Enhancements
46
+
47
+ MORPH-SPEC v3.0 torna o framework **explícito e orientado** para Claude Code com 8 melhorias fundamentais:
48
+
49
+ ### 1. **Approval Gates** (Portões de Aprovação)
50
+ - ✅ Rastreamento explícito de aprovações em `state.json`
51
+ - 🚫 Bloqueio de transições de fase até aprovação explícita
52
+ - 📝 Comandos: `approve`, `reject`, `approval-status`
53
+
54
+ ### 2. **Checkpoint Automation** (Validação Automática)
55
+ - 🔍 Auto-validação a cada 3 tasks (T003, T006, T009...)
56
+ - 🛡️ 4 validators: architecture, packages, security, design-system
57
+ - 🚧 Bloqueia progresso se falhas detectadas
58
+
59
+ ### 3. **Stricter Phase Validation** (Validação Estrita)
60
+ - 🎯 State machine com transições válidas
61
+ - 📋 Validação de conteúdo (spec.md, tasks.json)
62
+ - 5️⃣ Sistema de 5 gates de validação
63
+
64
+ ### 4. **Agent Team Spawning** (Spawning de Agentes)
65
+ - 🤖 Detecção automática quando spawnar (5+ agents, 15+ files, multi-domain)
66
+ - 🏗️ Comando `spawn-team` gera configs para Task tool
67
+ - 📄 Templates prontos para agent context
68
+
69
+ ### 5. **Metadata Generation** (Geração de Metadados)
70
+ - 📊 Auto-gera `metadata.json` após cada task
71
+ - ⚡ Reduz uso de tokens em 60-80%
72
+ - 🔗 Links rápidos para spec, tasks, decisões
73
+
74
+ ### 6. **Learning System** (Sistema de Aprendizado)
75
+ - 📚 11 patterns pré-configurados (389 linhas)
76
+ - 🔎 Busca: `search-patterns "{keyword}"`
77
+ - 📝 Captura: `capture-pattern {feature} success "Description"`
78
+
79
+ ### 7. **MCP Template Enhancement** (Templates Dinâmicos)
80
+ - 🌐 17 placeholders com dados do projeto
81
+ - 📈 Injeta: files, coverage, compliance, commits
82
+ - 🎨 Templates: `proposal-with-mcp.md`, `spec-with-mcp.md`
83
+
84
+ ### 8. **Interactive Decisions** (Decisões Estruturadas)
85
+ - 💬 Templates para AskUserQuestion
86
+ - 🎯 6 padrões documentados (scope, architecture, validation, etc.)
87
+ - 📖 Guia completo em `.morph/templates/decision-prompts.md`
88
+
89
+ **Configuração:** `.morph/config/llm-interaction.json` com 3 presets (strict, lightweight, no-guardrails)
90
+
91
+ **Documentação:** [docs/llm-interaction-config.md](docs/llm-interaction-config.md)
92
+
93
+ **Migration:** `npx morph-spec upgrade --preset strict`
94
+
95
+ ---
96
+
97
+ ## ✨ Novidade v3.1: Auto-Detecção Inteligente
98
+
99
+ MORPH-SPEC agora **detecta automaticamente** o contexto do seu projeto usando Claude Code:
100
+
101
+ - 🤖 **LLM Analysis**: Analisa package.json, .csproj, README, estrutura de pastas
102
+ - 🎯 **90%+ Accuracy**: Few-shot learning com exemplos reais (Next.js, Blazor, Monorepo)
103
+ - 🔒 **Privacy-First**: Processamento local, zero chamadas externas de API
104
+ - 🛡️ **Secret Sanitization**: Redação automática de API keys, passwords, tokens
105
+ - 🧙 **Wizard Fallback**: Wizard interativo de 7 perguntas se LLM falhar
106
+ - ⚡ **Zero Manual Work**: Gera `.morph/project.md` e `config.json` em segundos
107
+
108
+ **Saiba mais:** [docs/cli-auto-detection.md](docs/cli-auto-detection.md)
41
109
 
42
110
  ---
43
111
 
@@ -116,13 +184,19 @@ Veja também: [Troubleshooting](#troubleshooting)
116
184
 
117
185
  | Comando | Descrição |
118
186
  |---------|-----------|
119
- | `morph-spec init` | Inicializa MORPH no diretório atual |
187
+ | `morph-spec init` | Inicializa MORPH e **detecta automaticamente** o contexto do projeto ✨ |
188
+ | `morph-spec init --wizard` | Inicializa com wizard manual (sem auto-detecção LLM) |
189
+ | `morph-spec init --skip-detection` | Inicializa sem detectar contexto (configuração manual) |
120
190
  | `morph-spec init --force` | Sobrescreve instalação existente |
121
- | `morph-spec update` | Atualiza projeto para versão mais recente |
191
+ | `morph-spec update` | Atualiza projeto e **re-analisa contexto** automaticamente |
192
+ | `morph-spec update --wizard` | Atualiza com wizard manual |
193
+ | `morph-spec update --skip-detection` | Atualiza sem re-analisar contexto |
122
194
  | `morph-spec update --templates` | Atualiza apenas templates |
123
195
  | `morph-spec update --standards` | Atualiza apenas standards |
124
196
  | `morph-spec doctor` | Verifica saúde e versões da instalação |
125
197
 
198
+ > ✨ **Novo em v3.1+:** Auto-detecção inteligente de stack, arquitetura e infraestrutura usando Claude Code!
199
+
126
200
  ### Verificar Instalação
127
201
 
128
202
  ```bash
@@ -414,18 +488,6 @@ MORPH-SPEC possui **30 agentes** organizados em 4 tiers hierárquicos com squads
414
488
 
415
489
  ---
416
490
 
417
- ## Exemplos
418
-
419
- | Exemplo | Descrição |
420
- |---------|-----------|
421
- | [micro-saas](stacks/blazor-azure/.morph/examples/micro-saas/) | SaaS completo com Blazor + Asaas billing |
422
- | [api-nextjs](stacks/blazor-azure/.morph/examples/api-nextjs/) | .NET API + Next.js frontend |
423
- | [multi-agent](stacks/blazor-azure/.morph/examples/multi-agent/) | Sistema multi-agente com Microsoft Agent Framework |
424
-
425
- Cada exemplo inclui: `README.md`, `spec.md`, `contracts.cs`, `tasks.md`, `decisions.md`
426
-
427
- ---
428
-
429
491
  ## Estrutura do Projeto
430
492
 
431
493
  Após a instalação, seu projeto terá:
@@ -449,7 +511,6 @@ seu-projeto/
449
511
  │ │ ├── infra/
450
512
  │ │ ├── integrations/
451
513
  │ │ └── saas/
452
- │ ├── examples/ # Exemplos completos
453
514
  │ ├── features/ # Features em desenvolvimento
454
515
  │ └── archive/ # Features concluídas
455
516
  └── .claude/
@@ -629,7 +690,7 @@ Todo código gerado usando MORPH-SPEC é **100% seu** para usar como quiser, inc
629
690
 
630
691
  - [npm Package](https://www.npmjs.com/package/@polymorphism-tech/morph-spec)
631
692
  - [Documentação](docs/)
632
- - [Exemplos](stacks/blazor-azure/.morph/examples/)
693
+ - [Wiki (Base de Conhecimento)](.wiki/) - 33 artigos sobre .NET, Azure, IA, SaaS e Claude Code
633
694
  - [Polymorphism Tech](https://polymorphism.com.br)
634
695
 
635
696
  ---
@@ -15,7 +15,7 @@
15
15
  import { readFileSync } from 'fs';
16
16
  import { join, dirname } from 'path';
17
17
  import { fileURLToPath } from 'url';
18
- import { resolveAgentsConfigPath } from '../src/lib/stack-resolver.js';
18
+ import { resolveAgentsConfigPath } from '../src/lib/stacks/stack-resolver.js';
19
19
 
20
20
  const __dirname = dirname(fileURLToPath(import.meta.url));
21
21
  const frameworkRoot = join(__dirname, '..');
package/bin/morph-spec.js CHANGED
@@ -5,33 +5,66 @@ import chalk from 'chalk';
5
5
  import { fileURLToPath } from 'url';
6
6
  import { dirname, join } from 'path';
7
7
  import { readFileSync } from 'fs';
8
- import { setGlobalStack } from '../src/lib/stack-resolver.js';
9
-
10
- import { initCommand } from '../src/commands/init.js';
11
- import { updateCommand } from '../src/commands/update.js';
12
- import { doctorCommand } from '../src/commands/doctor.js';
13
- import { detectCommand } from '../src/commands/detect.js';
14
- import { detectAgentsCommand } from '../src/commands/detect-agents.js';
15
- import { syncCommand } from '../src/commands/sync.js';
16
- import { createStoryCommand } from '../src/commands/create-story.js';
17
- import { shardSpecCommand } from '../src/commands/shard-spec.js';
18
- import { sprintStatusCommand } from '../src/commands/sprint-status.js';
19
- import { stateCommand } from '../src/commands/state.js';
20
- import { taskDoneCommand, taskStartCommand, taskNextCommand } from '../src/commands/task.js';
21
- import { generateDesignSystemCommand } from '../src/commands/generate.js';
22
- import { generateContextCommand } from '../src/commands/generate-context.js';
8
+ import { setGlobalStack } from '../src/lib/stacks/stack-resolver.js';
9
+
10
+ // Project commands
11
+ import { initCommand } from '../src/commands/project/init.js';
12
+ import { updateCommand } from '../src/commands/project/update.js';
13
+ import { doctorCommand } from '../src/commands/project/doctor.js';
14
+ import { detectCommand } from '../src/commands/project/detect.js';
15
+ import { detectAgentsCommand } from '../src/commands/project/detect-agents.js';
16
+ import { detectWorkflowCommand } from '../src/commands/project/detect-workflow.js';
17
+ import { syncCommand } from '../src/commands/project/sync.js';
18
+
19
+ // Feature commands
20
+ import { createStoryCommand } from '../src/commands/feature/create-story.js';
21
+ import { shardSpecCommand } from '../src/commands/feature/shard-spec.js';
22
+ import { sprintStatusCommand } from '../src/commands/feature/sprint-status.js';
23
+
24
+ // State commands
25
+ import { stateCommand } from '../src/commands/state/state.js';
26
+ import { validatePhaseCommand } from '../src/commands/state/validate-phase.js';
27
+ import { rollbackPhaseCommand } from '../src/commands/state/rollback-phase.js';
28
+ import { advancePhaseCommand } from '../src/commands/state/advance-phase.js';
29
+ import { approveCommand, rejectCommand, approvalStatusCommand } from '../src/commands/state/approve.js';
30
+
31
+ // Task commands
32
+ import { taskDoneCommand, taskStartCommand, taskNextCommand } from '../src/commands/tasks/task.js';
33
+
34
+ // Generation commands
35
+ import { generateDesignSystemCommand, generateMetadataCommand } from '../src/commands/generation/generate.js';
36
+ import { generateContextCommand } from '../src/commands/generation/generate-context.js';
37
+
38
+ // Validation commands
23
39
  import { validateCommand } from './validate.js';
24
- import { validateBlazorCommand } from '../src/commands/validate-blazor.js';
25
- import { lintFluentCommand } from '../src/commands/lint-fluent.js';
26
- import { analyzeBlazorConcurrencyCommand } from '../src/commands/analyze-blazor-concurrency.js';
27
- import { validateBlazorStateCommand } from '../src/commands/validate-blazor-state.js';
28
- import { validateCssCommand } from '../src/commands/validate-css.js';
29
- import { LearningSystem } from '../src/lib/learning-system.js';
30
- import troubleshootCommand from '../src/commands/troubleshoot.js';
31
- import { validatePhaseCommand } from '../src/commands/validate-phase.js';
32
- import { sessionSummaryCommand } from '../src/commands/session-summary.js';
33
- import { rollbackPhaseCommand } from '../src/commands/rollback-phase.js';
34
- import { advancePhaseCommand } from '../src/commands/advance-phase.js';
40
+ import { validateBlazorCommand } from '../src/commands/validation/validate-blazor.js';
41
+ import { lintFluentCommand } from '../src/commands/validation/lint-fluent.js';
42
+ import { analyzeBlazorConcurrencyCommand } from '../src/commands/validation/analyze-blazor-concurrency.js';
43
+ import { validateBlazorStateCommand } from '../src/commands/validation/validate-blazor-state.js';
44
+ import { validateCssCommand } from '../src/commands/validation/validate-css.js';
45
+
46
+ // Template commands
47
+ import { templateListCommand } from '../src/commands/templates/template-list.js';
48
+ import { templateShowCommand } from '../src/commands/templates/template-show.js';
49
+ import { templateRenderCommand } from '../src/commands/templates/template-render.js';
50
+ import { templateCustomizeCommand } from '../src/commands/templates/template-customize.js';
51
+ import { templateValidateCommand } from '../src/commands/templates/template-validate.js';
52
+
53
+ // Agent commands
54
+ import { spawnTeamCommand } from '../src/commands/agents/spawn-team.js';
55
+
56
+ // Learning commands
57
+ import capturePatternProgram from '../src/commands/learning/capture-pattern.js';
58
+ import searchPatternsProgram from '../src/commands/learning/search-patterns.js';
59
+
60
+ // Utility commands
61
+ import troubleshootCommand from '../src/commands/utils/troubleshoot.js';
62
+ import { sessionSummaryCommand } from '../src/commands/utils/session-summary.js';
63
+ import migrateStateProgram from '../src/commands/utils/migrate-state.js';
64
+ import upgradeProgram from '../src/commands/utils/upgrade.js';
65
+
66
+ // Libraries
67
+ import { LearningSystem } from '../src/lib/learning/learning-system.js';
35
68
 
36
69
  const __dirname = dirname(fileURLToPath(import.meta.url));
37
70
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
@@ -90,6 +123,14 @@ program
90
123
  .option('-i, --ids-only', 'Output only agent IDs (one per line)')
91
124
  .action(detectAgentsCommand);
92
125
 
126
+ program
127
+ .command('detect-workflow <input...>')
128
+ .description('Detect appropriate workflow for a feature request')
129
+ .option('-v, --verbose', 'Show detailed detection reasoning')
130
+ .option('-j, --json', 'Output as JSON')
131
+ .option('-p, --project-path <path>', 'Project path (default: current directory)')
132
+ .action(detectWorkflowCommand);
133
+
93
134
  program
94
135
  .command('sync')
95
136
  .description('Sync standards from feature decisions')
@@ -189,6 +230,13 @@ generateCommand
189
230
  await generateContextCommand('.', feature);
190
231
  });
191
232
 
233
+ generateCommand
234
+ .command('metadata <feature>')
235
+ .description('Generate metadata.json summary from markdown outputs')
236
+ .option('--output <path>', 'Custom output path')
237
+ .option('--verbose', 'Show detailed extraction info')
238
+ .action((feature, options) => generateMetadataCommand(feature, options));
239
+
192
240
  // Validation commands (Sprint 4: Continuous Validation)
193
241
  program
194
242
  .command('validate [validator]')
@@ -321,6 +369,60 @@ learnCommand
321
369
  console.log(chalk.green('\n✅ Knowledge base reset\n'));
322
370
  });
323
371
 
372
+ // Template management commands
373
+ const templateCommand = program
374
+ .command('template')
375
+ .description('Template management (list | show | render | customize | validate)');
376
+
377
+ templateCommand
378
+ .command('list')
379
+ .description('List all available templates')
380
+ .option('--category <category>', 'Filter by category (documentation, code, infrastructure, context, examples)')
381
+ .option('--phase <phase>', 'Filter by phase (proposal, design, implement, etc.)')
382
+ .option('--stack <stack>', 'Filter by stack (blazor-azure, nextjs-supabase)')
383
+ .option('--required', 'Show only required templates')
384
+ .action(templateListCommand);
385
+
386
+ templateCommand
387
+ .command('show <template-id>')
388
+ .description('Show detailed information about a template')
389
+ .option('--show-path', 'Show resolved template file path')
390
+ .option('--preview', 'Show first 20 lines of template content')
391
+ .option('--stack <stack>', 'Stack for path resolution (default: blazor-azure)')
392
+ .option('--project-path <path>', 'Project path (default: current directory)')
393
+ .action(templateShowCommand);
394
+
395
+ templateCommand
396
+ .command('render <template-id> <output-path> <variables-json>')
397
+ .description('Render a template with variables')
398
+ .option('--dry-run', 'Preview without writing file')
399
+ .option('--stack <stack>', 'Stack for template resolution (default: blazor-azure)')
400
+ .option('--project-path <path>', 'Project path (default: current directory)')
401
+ .option('-v, --verbose', 'Show detailed output')
402
+ .action(templateRenderCommand);
403
+
404
+ templateCommand
405
+ .command('customize <template-id>')
406
+ .description('Copy framework template to project for customization')
407
+ .option('--stack <stack>', 'Target stack (default: blazor-azure)')
408
+ .option('--local', 'Copy to project .morph/templates/ instead of stack')
409
+ .option('--force', 'Overwrite existing customized template')
410
+ .option('--project-path <path>', 'Project path (default: current directory)')
411
+ .option('-v, --verbose', 'Show detailed output')
412
+ .action(templateCustomizeCommand);
413
+
414
+ templateCommand
415
+ .command('validate [template-id]')
416
+ .description('Validate template(s) for correct Handlebars syntax')
417
+ .option('--category <category>', 'Validate templates in specific category')
418
+ .option('--technology <technology>', 'Validate templates for specific technology')
419
+ .option('--include-deprecated', 'Include deprecated templates')
420
+ .option('--show-valid', 'Show valid templates in output')
421
+ .option('--strict', 'Exit with error on warnings')
422
+ .option('--project-path <path>', 'Project path (default: current directory)')
423
+ .option('-v, --verbose', 'Show detailed validation information')
424
+ .action(templateValidateCommand);
425
+
324
426
  // Troubleshooting command
325
427
  program
326
428
  .command('troubleshoot <keywords...>')
@@ -365,6 +467,41 @@ program
365
467
  .option('-v, --verbose', 'Show detailed output')
366
468
  .action(rollbackPhaseCommand);
367
469
 
470
+ // Approval workflow commands (MORPH-SPEC 3.0)
471
+ program
472
+ .command('approve <feature> <gate>')
473
+ .description('Approve a phase gate (design, tasks, uiux, proposal)')
474
+ .option('--approver <name>', 'Name of approver (default: current user)')
475
+ .option('--notes <notes>', 'Approval notes')
476
+ .action((feature, gate, options) => approveCommand(feature, gate, options));
477
+
478
+ program
479
+ .command('reject <feature> <gate> [reason]')
480
+ .description('Reject a phase gate with optional reason')
481
+ .action((feature, gate, reason, options) => rejectCommand(feature, gate, reason, options));
482
+
483
+ program
484
+ .command('approval-status <feature>')
485
+ .description('Show approval status for all gates')
486
+ .option('--json', 'Output as JSON')
487
+ .action((feature, options) => approvalStatusCommand(feature, options));
488
+
489
+ // Agent team spawning (MORPH-SPEC 3.0)
490
+ program
491
+ .command('spawn-team <feature>')
492
+ .description('Generate agent team configuration for Task tool')
493
+ .option('--json', 'Output as JSON')
494
+ .option('--verbose', 'Show detailed team configuration')
495
+ .action((feature, options) => spawnTeamCommand(feature, options));
496
+
497
+ // Pattern learning system (MORPH-SPEC 3.0) - Add as subcommands
498
+ program.addCommand(capturePatternProgram);
499
+ program.addCommand(searchPatternsProgram);
500
+
501
+ // Migration and upgrade commands (MORPH-SPEC 3.0) - Add as subcommands
502
+ program.addCommand(migrateStateProgram);
503
+ program.addCommand(upgradeProgram);
504
+
368
505
  // Wire global --stack flag to stack-resolver before any command executes
369
506
  program.hook('preAction', () => {
370
507
  const opts = program.opts();
@@ -138,6 +138,9 @@ class TaskManager {
138
138
  // Save state
139
139
  await this.saveState(state);
140
140
 
141
+ // Auto-generate metadata.json (for quick LLM access)
142
+ await this.generateMetadata(featureName, feature);
143
+
141
144
  // Display progress
142
145
  this.displayProgress(feature);
143
146
 
@@ -230,10 +233,40 @@ class TaskManager {
230
233
  * Auto-checkpoint every 3 tasks (includes validation summary)
231
234
  */
232
235
  async autoCheckpoint(feature, tasks, featureName) {
236
+ const tasksCompleted = feature.tasks?.completed || tasks.length;
237
+ const checkpointNum = Math.floor(tasksCompleted / 3);
238
+
239
+ console.log(chalk.magenta(`\n🔍 CHECKPOINT ${checkpointNum} - Running automated validation...`));
240
+
241
+ let checkpointResult = null;
233
242
  let validationNote = '';
234
243
 
235
- // Run validation and include summary in checkpoint
236
- if (featureName) {
244
+ // Run checkpoint hooks (new enhanced validation system)
245
+ try {
246
+ const { runCheckpointHooks, shouldRunCheckpoint } = await import('../src/lib/checkpoint-hooks.js');
247
+
248
+ if (shouldRunCheckpoint(tasksCompleted, 3)) {
249
+ checkpointResult = await runCheckpointHooks(featureName, checkpointNum);
250
+
251
+ if (checkpointResult.passed) {
252
+ validationNote = ' | ✓ All validations passed';
253
+ } else {
254
+ validationNote = ` | ✗ ${checkpointResult.summary.errors} errors, ${checkpointResult.summary.warnings} warnings`;
255
+
256
+ // Check if we should block progress
257
+ const config = await this.loadCheckpointConfig();
258
+ if (config.checkpoints?.onFailure?.blockProgress && checkpointResult.summary.errors > 0) {
259
+ console.log(chalk.red('\n❌ Checkpoint FAILED - Fix violations before proceeding'));
260
+ throw new Error('Checkpoint validation failed');
261
+ }
262
+ }
263
+ }
264
+ } catch (error) {
265
+ if (error.message === 'Checkpoint validation failed') {
266
+ throw error; // Re-throw to block task completion
267
+ }
268
+ // Fallback to old validation if checkpoint-hooks not available
269
+ console.log(chalk.yellow('⚠️ Checkpoint hooks not available, using legacy validation'));
237
270
  try {
238
271
  const { runValidation } = await import('../src/lib/validation-runner.js');
239
272
  const result = await runValidation('.', featureName, { verbose: false });
@@ -241,23 +274,84 @@ class TaskManager {
241
274
  ? ' | Validation: PASSED'
242
275
  : ` | Validation: ${result.errors.length} errors, ${result.warnings.length} warnings`;
243
276
  } catch {
244
- // Validation not available, skip
277
+ // No validation available
245
278
  }
246
279
  }
247
280
 
281
+ // Create checkpoint record
248
282
  const checkpoint = {
249
283
  id: `CHECKPOINT_AUTO_${Date.now()}`,
250
284
  timestamp: new Date().toISOString(),
251
285
  tasksCompleted: tasks.map(t => t.id),
252
- note: `Auto-checkpoint: ${tasks.length} tasks completed${validationNote}`
286
+ note: `Auto-checkpoint: ${tasks.length} tasks completed${validationNote}`,
287
+ validationResults: checkpointResult?.results || null
253
288
  };
254
289
 
255
290
  feature.checkpoints = feature.checkpoints || [];
256
291
  feature.checkpoints.push(checkpoint);
257
292
 
258
- console.log(chalk.magenta(`\n🎉 Auto-checkpoint reached! ${tasks.length} tasks completed`));
259
- if (validationNote) {
260
- console.log(chalk.gray(` ${validationNote.trim().replace(/^ \| /, '')}`));
293
+ if (checkpointResult?.passed) {
294
+ console.log(chalk.green(`\n✅ Checkpoint ${checkpointNum} PASSED`));
295
+ } else if (checkpointResult) {
296
+ console.log(chalk.yellow(`\n⚠️ Checkpoint ${checkpointNum} completed with warnings`));
297
+ } else {
298
+ console.log(chalk.magenta(`\n🎉 Auto-checkpoint ${checkpointNum} reached!`));
299
+ }
300
+ }
301
+
302
+ /**
303
+ * Load checkpoint configuration from llm-interaction.json
304
+ */
305
+ async loadCheckpointConfig() {
306
+ try {
307
+ const configPath = path.join(process.cwd(), '.morph/config/llm-interaction.json');
308
+ const content = await fs.readFile(configPath, 'utf-8');
309
+ return JSON.parse(content);
310
+ } catch {
311
+ // Return defaults if config doesn't exist
312
+ return {
313
+ checkpoints: {
314
+ frequency: 3,
315
+ autoValidate: true,
316
+ onFailure: {
317
+ blockProgress: false
318
+ }
319
+ }
320
+ };
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Auto-generate metadata.json after task completion
326
+ */
327
+ async generateMetadata(featureName, feature) {
328
+ try {
329
+ const config = await this.loadCheckpointConfig();
330
+
331
+ // Check if auto-generation is enabled
332
+ if (!config.metadata?.autoGenerate) {
333
+ return;
334
+ }
335
+
336
+ const { extractFeatureMetadata } = await import('../src/lib/metadata-extractor.js');
337
+ const metadata = extractFeatureMetadata(feature);
338
+
339
+ const outputPath = path.join(
340
+ process.cwd(),
341
+ `.morph/project/outputs/${featureName}/metadata.json`
342
+ );
343
+
344
+ // Ensure directory exists
345
+ const outputDir = path.dirname(outputPath);
346
+ await fs.mkdir(outputDir, { recursive: true });
347
+
348
+ // Write metadata
349
+ await fs.writeFile(outputPath, JSON.stringify(metadata, null, 2), 'utf-8');
350
+
351
+ console.log(chalk.gray(` 📊 Metadata updated: ${path.relative(process.cwd(), outputPath)}`));
352
+ } catch (error) {
353
+ // Don't block task completion if metadata generation fails
354
+ console.log(chalk.yellow(` ⚠️ Metadata generation failed: ${error.message}`));
261
355
  }
262
356
  }
263
357
 
package/bin/validate.js CHANGED
@@ -20,7 +20,7 @@ import chalk from 'chalk';
20
20
  import { validatePackages } from '../src/lib/validators/package-validator.js';
21
21
  import { validateArchitecture } from '../src/lib/validators/architecture-validator.js';
22
22
  import { validateContrast } from '../src/lib/validators/ui-contrast-validator.js';
23
- import { LearningSystem } from '../src/lib/learning-system.js';
23
+ import { LearningSystem } from '../src/lib/learning/learning-system.js';
24
24
 
25
25
  const VALIDATORS = {
26
26
  packages: {