@polymorphism-tech/morph-spec 4.12.0 → 4.14.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 (316) hide show
  1. package/CLAUDE.md +7 -7
  2. package/README.md +28 -34
  3. package/bin/morph-spec.js +41 -24
  4. package/bin/task-manager.js +962 -1341
  5. package/bin/validate.js +1 -1
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +14 -16
  8. package/docs/QUICKSTART.md +15 -15
  9. package/framework/CLAUDE.md +5 -2
  10. package/framework/agents/README.md +3 -4
  11. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  12. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  13. package/framework/agents/architecture/standards-architect.md +21 -31
  14. package/framework/agents/backend/dotnet-senior.md +160 -86
  15. package/framework/agents/backend/ef-modeler.md +2 -6
  16. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  17. package/framework/agents/backend/ms-agent-expert.md +1 -1
  18. package/framework/agents/frontend/nextjs-expert.md +198 -133
  19. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  20. package/framework/agents/infrastructure/infra-architect.md +191 -27
  21. package/framework/agents/integrations/clerk-auth.md +19 -26
  22. package/framework/agents/integrations/hangfire-integration.md +1 -4
  23. package/framework/agents.json +1084 -2278
  24. package/framework/commands/morph-apply.md +4 -6
  25. package/framework/commands/morph-preflight.md +192 -269
  26. package/framework/commands/morph-proposal.md +210 -238
  27. package/framework/commands/morph-status.md +72 -92
  28. package/framework/commands/morph-troubleshoot.md +6 -13
  29. package/framework/hooks/README.md +1 -6
  30. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  31. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  32. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  34. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  35. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  36. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  37. package/framework/hooks/claude-code/statusline.py +4 -5
  38. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  39. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  40. package/framework/hooks/shared/compact-restore.js +28 -5
  41. package/framework/hooks/shared/phase-utils.js +4 -8
  42. package/framework/hooks/shared/state-reader.js +34 -3
  43. package/framework/phases.json +162 -200
  44. package/framework/rules/ai-agents-standards.md +15 -0
  45. package/framework/rules/asaas-standards.md +13 -0
  46. package/framework/rules/clerk-standards.md +13 -0
  47. package/framework/rules/csharp-standards.md +8 -4
  48. package/framework/rules/data-standards.md +18 -0
  49. package/framework/rules/dotnet-templates.md +87 -0
  50. package/framework/rules/frontend-standards.md +13 -13
  51. package/framework/rules/hangfire-standards.md +13 -0
  52. package/framework/rules/infrastructure-standards.md +27 -16
  53. package/framework/rules/morph-workflow.md +73 -13
  54. package/framework/rules/nextjs-standards.md +1 -0
  55. package/framework/rules/nextjs-templates.md +40 -0
  56. package/framework/rules/resend-standards.md +12 -0
  57. package/framework/rules/supabase-standards.md +29 -0
  58. package/framework/skills/README.md +6 -8
  59. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  60. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  61. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  62. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  63. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  64. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  65. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  66. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  67. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  68. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  69. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  71. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  73. package/framework/skills/level-1-workflows/README.md +1 -1
  74. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  75. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +57 -123
  76. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  78. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  79. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +1 -1
  80. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  81. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  82. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  83. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  85. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +143 -172
  86. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  87. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +57 -77
  88. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  89. package/framework/squad-templates/backend-only.json +6 -6
  90. package/framework/squad-templates/frontend-only.json +17 -8
  91. package/framework/squad-templates/full-stack.json +29 -24
  92. package/framework/standards/STANDARDS.json +1021 -2369
  93. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  94. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  95. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  96. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  97. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  98. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  99. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  100. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  101. package/framework/templates/IDE-SNIPPETS.md +2 -6
  102. package/framework/templates/README.md +709 -814
  103. package/framework/templates/REGISTRY.json +223 -762
  104. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  105. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  106. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  107. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  108. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  109. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  110. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  111. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  112. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  113. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  114. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  115. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  116. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  117. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  118. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  119. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  120. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  121. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  122. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  123. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  124. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  125. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  126. package/framework/templates/code/dotnet/test.cs +192 -106
  127. package/framework/templates/context/ARCHITECTURE.md +89 -0
  128. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  129. package/framework/templates/context/CONTEXT.md +180 -181
  130. package/framework/templates/context/design-system.md +1 -5
  131. package/framework/templates/docs/onboarding.md +2 -3
  132. package/framework/templates/docs/proposal.md +171 -182
  133. package/framework/templates/docs/spec.md +1 -3
  134. package/framework/templates/docs/ui-components.md +0 -72
  135. package/framework/templates/examples/design-system-examples.md +4 -4
  136. package/framework/templates/feature/decisions.md +0 -66
  137. package/framework/templates/feature/recap.md +1 -2
  138. package/framework/templates/infrastructure/github/README.md +56 -593
  139. package/framework/templates/integrations/clerk-config.cs +0 -41
  140. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  141. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  142. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  143. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  144. package/framework/templates/project/validate.js +2 -4
  145. package/framework/templates/ui/design-system.css +1 -1
  146. package/framework/workflows/README.md +8 -8
  147. package/framework/workflows/configs/fast-track.json +51 -0
  148. package/framework/workflows/configs/full.json +68 -0
  149. package/framework/workflows/configs/standard.json +7 -3
  150. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  151. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  152. package/framework/workflows/docs/full-morph.md +69 -76
  153. package/framework/workflows/docs/standard.md +49 -44
  154. package/framework/workflows/docs/ui-refresh.md +1 -1
  155. package/package.json +3 -3
  156. package/src/commands/agents/dispatch-agents.js +55 -116
  157. package/src/commands/context/context-refresh.js +79 -0
  158. package/src/commands/phase/phase-reset.js +1 -1
  159. package/src/commands/project/doctor.js +10 -32
  160. package/src/commands/project/init.js +12 -0
  161. package/src/commands/project/status.js +6 -12
  162. package/src/commands/scaffold/scaffold.js +131 -0
  163. package/src/commands/scope/escalate.js +1 -1
  164. package/src/commands/state/advance-phase.js +15 -29
  165. package/src/commands/state/state.js +20 -5
  166. package/src/commands/tasks/task.js +0 -30
  167. package/src/commands/validation/validate-feature.js +3 -10
  168. package/src/core/paths/output-schema.js +12 -13
  169. package/src/core/state/phase-state-machine.js +211 -217
  170. package/src/core/state/state-manager.js +9 -9
  171. package/src/lib/agents/agents-manager.js +2 -2
  172. package/src/lib/agents/output-collector.js +1 -2
  173. package/src/lib/detectors/design-system-detector.js +4 -4
  174. package/src/lib/detectors/index.js +1 -11
  175. package/src/lib/generators/architecture-scanner.js +640 -0
  176. package/src/lib/generators/context-generator.js +3 -3
  177. package/src/lib/generators/design-system-generator.js +508 -587
  178. package/src/lib/generators/index.js +12 -10
  179. package/src/lib/generators/metadata-extractor.js +386 -387
  180. package/src/lib/generators/recap-generator.js +4 -4
  181. package/src/lib/generators/scaffold-generator.js +317 -0
  182. package/src/lib/generators/settings-generator.js +0 -1
  183. package/src/lib/phase-chain/phase-validator.js +64 -42
  184. package/src/lib/stack/stack-profile.js +2 -2
  185. package/src/lib/standards/digest-builder.js +72 -285
  186. package/src/lib/tasks/task-parser.js +11 -5
  187. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  188. package/src/lib/validators/content/content-validator.js +287 -287
  189. package/src/lib/validators/css/css-validator.js +340 -352
  190. package/src/lib/validators/packages/package-validator.js +347 -360
  191. package/src/lib/validators/shared/issue-counter.js +14 -18
  192. package/src/lib/validators/validation-runner.js +3 -19
  193. package/src/scripts/setup-infra.js +1 -1
  194. package/src/utils/agents-installer.js +61 -10
  195. package/src/utils/file-copier.js +1 -0
  196. package/src/utils/hooks-installer.js +11 -19
  197. package/src/utils/skills-installer.js +178 -178
  198. package/framework/agents/architecture/prompt-engineer.md +0 -195
  199. package/framework/agents/backend/api-designer.md +0 -106
  200. package/framework/agents/frontend/blazor-builder.md +0 -229
  201. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  202. package/framework/agents/infrastructure/azure-architect.md +0 -150
  203. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  204. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  205. package/framework/agents/infrastructure/container-specialist.md +0 -137
  206. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  207. package/framework/agents/integrations/azure-identity.md +0 -148
  208. package/framework/agents/quality/code-analyzer.md +0 -239
  209. package/framework/agents/quality/testing-specialist.md +0 -130
  210. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  211. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  212. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  213. package/framework/index/troubleshooting-index.json +0 -184
  214. package/framework/rules/testing-standards.md +0 -14
  215. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  216. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  217. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  218. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  219. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  220. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  221. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  222. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  223. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  224. package/framework/standards/architecture/ddd/entities.md +0 -99
  225. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  226. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  227. package/framework/standards/backend/api/minimal-api.md +0 -494
  228. package/framework/standards/backend/api/rest.md +0 -492
  229. package/framework/standards/backend/authentication/passkeys.md +0 -428
  230. package/framework/standards/backend/database/ef-core.md +0 -199
  231. package/framework/standards/backend/database/migrations.md +0 -393
  232. package/framework/standards/backend/database/repository-patterns.md +0 -528
  233. package/framework/standards/backend/dotnet/async.md +0 -366
  234. package/framework/standards/backend/dotnet/core.md +0 -117
  235. package/framework/standards/backend/dotnet/di.md +0 -439
  236. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  237. package/framework/standards/context/analytics.md +0 -96
  238. package/framework/standards/context/bundles.md +0 -110
  239. package/framework/standards/context/priming.md +0 -78
  240. package/framework/standards/core/architecture.md +0 -185
  241. package/framework/standards/core/coding.md +0 -214
  242. package/framework/standards/core/git-branching-strategy.md +0 -403
  243. package/framework/standards/core/git.md +0 -185
  244. package/framework/standards/core/testing.md +0 -295
  245. package/framework/standards/data/nosql/blob-storage.md +0 -102
  246. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  247. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  248. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  249. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  250. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  251. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  252. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  253. package/framework/standards/frontend/blazor/state.md +0 -191
  254. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -266
  255. package/framework/standards/frontend/design-system/design-trends.md +0 -171
  256. package/framework/standards/infrastructure/azure/azure.md +0 -624
  257. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  258. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  259. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  260. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  261. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  262. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  263. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  264. package/framework/standards/integration/api/graphql.md +0 -91
  265. package/framework/standards/integration/api/grpc.md +0 -114
  266. package/framework/standards/integration/api/rest-design.md +0 -95
  267. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  268. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  269. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  270. package/framework/standards/observability/logging.md +0 -131
  271. package/framework/standards/observability/metrics.md +0 -121
  272. package/framework/standards/observability/monitoring.md +0 -114
  273. package/framework/standards/observability/tracing.md +0 -132
  274. package/framework/standards/workflows/parallel-execution.md +0 -112
  275. package/framework/standards/workflows/thread-management.md +0 -113
  276. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  277. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  278. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  279. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  280. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  281. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  282. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  283. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  284. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  285. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  286. package/framework/templates/infrastructure/azure/README.md +0 -286
  287. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  288. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  289. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  290. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  291. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  292. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  293. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  294. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  295. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  296. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  297. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  299. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  300. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  301. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  302. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  303. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  304. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  305. package/framework/templates/saas/subscription.cs +0 -347
  306. package/framework/templates/saas/tenant.cs +0 -338
  307. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  308. package/framework/templates/ui/MudTheme.cs +0 -281
  309. package/framework/workflows/configs/nodejs-cli.json +0 -40
  310. package/src/commands/standards/context-budget.js +0 -89
  311. package/src/lib/standards/index.js +0 -7
  312. package/src/lib/standards/standards-context-injector.js +0 -302
  313. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  314. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  315. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  316. package/src/lib/validators/blazor/index.js +0 -9
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: morph-phase-design
3
- description: MORPH-SPEC Phase 2 (Design). Schema-first interactive design: reads EF models/Supabase/DB, validates findings with user, then routes to VSA Blueprint or DDD Architecture Blueprint based on config.architecture.style, producing spec.md, contracts.cs, schema-analysis.md, and decisions.md through a quality loop (score 0-100). Use after setup phase to create technical specifications grounded in the real database schema.
3
+ description: MORPH-SPEC Phase 2 (Design). Schema-first interactive design: reads EF models/Supabase/DB, validates findings with user, then generates VSA Blueprint based on config.architecture.style, producing spec.md, contracts.cs, schema-analysis.md, and decisions.md through a unified quality + clarification loop (score 0-100). Use after proposal phase to create technical specifications grounded in the real database schema.
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, Agent
7
- cliVersion: "4.12.0"
7
+ cliVersion: "4.14.0"
8
8
  ---
9
9
 
10
10
  # MORPH Design — Phase 2
@@ -15,9 +15,8 @@ Schema-first interactive design: read the real schema, validate with user, gener
15
15
 
16
16
  ## Prerequisites
17
17
 
18
- - [ ] Phase 1 (Setup) completed
19
- - [ ] Phase 1.5 (UI/UX) completed OR skipped
20
18
  - [ ] Proposal approved by the user
19
+ - [ ] Phase 2 (UI/UX) completed OR skipped
21
20
 
22
21
  ## Recommended Tools
23
22
 
@@ -29,16 +28,14 @@ Schema-first interactive design: read the real schema, validate with user, gener
29
28
  |--------|------|-------------|
30
29
  | Read proposal + UI specs | **Read** output files | — |
31
30
  | **Detect architecture** | **Read** `.morph/config/config.json` → check `architecture.style` | **Bash** `grep` |
32
- | **Schema: Supabase** | **Supabase MCP** `list_tables()`, `get_table_schema()`, `get_relationships()` | — |
31
+ | **Schema: Supabase** | **Bash** `npx supabase status` → `npx supabase db dump --local` / `psql <DB_URL>` | **Grep** `.from(` in code |
33
32
  | **Schema: EF Core** | **Glob** `**/Entities/**/*.cs` + **Glob** `**/*Context.cs` → **Read** | **Grep** `DbSet<` |
34
33
  | **Schema: Next.js/TS** | **Glob** `src/**/types/**/*.ts` + **Grep** `interface\|type.*=` | — |
35
- | Schema: RLS policies | **Supabase MCP** `query()` with `pg_policies` | **Read** policy files |
36
- | Dispatch vsa-architect | **Agent** `subagent_type=vsa-architect` + `prompt=agent.taskPrompt` | — |
37
- | Dispatch domain-architect | **Agent** `subagent_type=domain-architect` + `prompt=agent.taskPrompt` | — |
34
+ | Schema: RLS policies | **Bash** `psql <DB_URL> -c "SELECT ... FROM pg_policies"` | **Read** policy files |
35
+ | Dispatch dotnet-senior | **Agent** `subagent_type="morph-dotnet-senior"` — agent .md file provides the prompt | — |
38
36
  | Dispatch tech leads | **Agent** for each active agent from dispatch config | — |
39
37
  | Research library | **Context7 MCP** `query_docs()` | **WebSearch** + **WebFetch** |
40
38
  | Render contracts VSA | **Bash** `morph-spec template render dotnet-contracts-vsa ...` | — |
41
- | Render contracts DDD | **Bash** `morph-spec template render dotnet-contracts-level{N} ...` | — |
42
39
  | Render spec.md | **Bash** `morph-spec template render docs/spec ...` | — |
43
40
  | Render decisions.md | **Bash** `morph-spec template render docs/decisions ...` | — |
44
41
  | Update state | **Bash** `morph-spec state mark-output $ARGUMENTS <type>` | — |
@@ -53,6 +50,16 @@ Schema-first interactive design: read the real schema, validate with user, gener
53
50
 
54
51
  ## PRE-FLIGHT
55
52
 
53
+ ## Pre-flight — Tool Availability
54
+
55
+ Check session context lines for tool readiness:
56
+ - `docker ✓` + `supabase ✓` → Supabase CLI method for schema analysis
57
+ - `docker ✗` or `supabase ✗` → Static code analysis fallback (Grep/Read)
58
+ - `context7 ✓` → Use for library docs when writing spec.md
59
+ - `context7 ✗` → WebSearch + WebFetch fallback
60
+
61
+ ---
62
+
56
63
  ## MANDATORY: Session Tasks
57
64
 
58
65
  > **BEFORE starting any design work**, analyze the workflow below and create session tasks.
@@ -75,15 +82,11 @@ Check the `"phase"` field in the output:
75
82
 
76
83
  **If `"phase": "proposal"`** → execute in sequence:
77
84
  1. `morph-spec state mark-output $ARGUMENTS proposal`
78
- 2. `morph-spec phase advance $ARGUMENTS` (→ setup)
79
- 3. `morph-spec phase advance $ARGUMENTS` (→ design)
80
-
81
- **If `"phase": "setup"`** → execute:
82
- 1. `morph-spec phase advance $ARGUMENTS` (→ design)
85
+ 2. `morph-spec phase advance $ARGUMENTS` (→ design)
83
86
 
84
87
  **Any other value** → do not proceed — inconsistent state, report to user.
85
88
 
86
- > **Rule:** Never write to `1-design/` while the phase is not `design`. The hook will block and the sequence will be corrupted.
89
+ > **Rule:** Never write to `2-design/` while the phase is not `design`. The hook will block and the sequence will be corrupted.
87
90
 
88
91
  ---
89
92
 
@@ -99,7 +102,7 @@ Read: .morph/features/$ARGUMENTS/0-proposal/proposal.md
99
102
  | Value of `config.architecture.style` | Path |
100
103
  |--------------------------------------|------|
101
104
  | `"vertical-slice"` | → **VSA** (CHECKPOINT 2-VSA + VSA contracts) |
102
- | any other value or absent | → **DDD** (CHECKPOINT 2-DDD + DDD contracts) |
105
+ | any other value or absent | → **Standard** design flow (no architecture-specific blueprint) |
103
106
 
104
107
  If scope ≥ 20 tasks or refactor touches ≥ 5 domain files → **EnterPlanMode** before continuing.
105
108
 
@@ -113,10 +116,18 @@ If scope ≥ 20 tasks or refactor touches ≥ 5 domain files → **EnterPlanMode
113
116
 
114
117
  Execute in parallel according to the stack detected in `config.json`:
115
118
 
116
- **Supabase (preferred if available):**
119
+ **Supabase (local Docker via CLI):**
120
+
121
+ > **Supabase CLI:** Run `npx supabase status` to get the local DB URL (port may vary across instances).
122
+ > Then use `npx supabase db dump --local` for full schema export, or `psql <DB_URL>` for targeted queries.
123
+ > Always query the **local Docker instance** — never production. Cross-reference existing schema with the proposal to avoid duplicating tables or missing foreign keys to existing data.
124
+ > If local Supabase is not running, rely on EF Core/TypeScript entity scanning as described below.
125
+
117
126
  ```
118
- Supabase MCP: list_tables() → get_table_schema(table) for each relevant table
119
- + get_relationships() → RLS policies if applicable
127
+ Bash: npx supabase status → extract DB URL
128
+ + npx supabase db dump --local | grep -A20 "CREATE TABLE relevant_table"
129
+ + psql <DB_URL> -c "SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = 'X'"
130
+ + psql <DB_URL> -c "SELECT tablename, policyname, cmd, qual FROM pg_policies WHERE schemaname = 'public'"
120
131
  ```
121
132
 
122
133
  **EF Core (.NET):**
@@ -134,7 +145,7 @@ Grep: "export interface|export type" → Read found files
134
145
 
135
146
  ### 1.2 Generate schema-analysis.md
136
147
 
137
- Write `.morph/features/$ARGUMENTS/1-design/schema-analysis.md` with:
148
+ Write `.morph/features/$ARGUMENTS/2-design/schema-analysis.md` with:
138
149
 
139
150
  ```markdown
140
151
  # Schema Analysis — {Feature}
@@ -188,16 +199,16 @@ Use `AskUserQuestion`:
188
199
 
189
200
  ### CHECKPOINT 2-VSA — Vertical Slice Architecture
190
201
 
191
- #### 2-VSA.1 Dispatch vsa-architect
202
+ #### 2-VSA.1 Dispatch dotnet-senior (VSA mode)
192
203
 
193
204
  ```bash
194
205
  morph-spec dispatch-agents $ARGUMENTS design
195
206
  ```
196
207
 
197
- Use the `taskPrompt` from the `vsa-architect` agent in the result. Call:
208
+ Use the `recommended` field to find the dotnet-senior agent. The agent `.md` file is self-contained. Call:
198
209
 
199
210
  ```
200
- Agent(subagent_type=vsa-architect, prompt=<taskPrompt + contents of proposal.md + schema-analysis.md>)
211
+ Agent(subagent_type="morph-dotnet-senior", prompt="Design VSA blueprint for feature {feature}. Read .morph/features/{feature}/0-proposal/proposal.md and schema-analysis.md for context.")
201
212
  ```
202
213
 
203
214
  The agent produces a VSA Blueprint with:
@@ -232,60 +243,6 @@ Present the generated blueprint in a readable format and use `AskUserQuestion`:
232
243
 
233
244
  ---
234
245
 
235
- ### CHECKPOINT 2-DDD — Domain-Driven Design
236
-
237
- #### 2-DDD.1 Determine Complexity Level
238
-
239
- Read the proposal and evaluate using the 5 detection questions in `framework/standards/architecture/ddd/complexity-levels.md`:
240
-
241
- | Level | When to use |
242
- |-------|-------------|
243
- | **Level 1 (CRUD)** | Simple entities, no complex business rules, basic CRUD |
244
- | **Level 2 (Business Logic)** | Domain invariants, business workflows, multiple related entities |
245
- | **Level 3 (Bounded Context)** | Context isolation, integration events, distributed systems |
246
-
247
- > If uncertain, assume Level 1 and use `AskUserQuestion` to confirm.
248
-
249
- #### 2-DDD.2 Dispatch domain-architect
250
-
251
- ```bash
252
- morph-spec dispatch-agents $ARGUMENTS design
253
- ```
254
-
255
- Use the `taskPrompt` from the `domain-architect` agent in the result. Call:
256
-
257
- ```
258
- Agent(subagent_type=domain-architect, prompt=<taskPrompt + contents of proposal.md + schema-analysis.md + detected level>)
259
- ```
260
-
261
- The agent produces an Architecture Blueprint with:
262
- - **Level 1:** Entities, repositories, services, DTOs
263
- - **Level 2:** AggregateRoot, Value Objects, Domain Events, CQRS handlers
264
- - **Level 3:** BC setup, Integration Events, Anti-corruption layer
265
-
266
- **Parallelize** with other active agents from the dispatch config.
267
-
268
- #### 2-DDD.3 Validate Blueprint with user
269
-
270
- Present the generated blueprint in a readable format and use `AskUserQuestion`:
271
-
272
- ```json
273
- {
274
- "questions": [{
275
- "header": "Blueprint OK?",
276
- "question": "Planned this domain architecture for the feature. Confirm before generating spec and contracts?",
277
- "multiSelect": false,
278
- "options": [
279
- { "label": "Confirm blueprint", "description": "Generate spec.md and contracts with this blueprint" },
280
- { "label": "Need adjustments", "description": "Use Other to describe what to change" }
281
- ]
282
- }]
283
- }
284
- ```
285
-
286
- - **"Confirm"** → proceed to DDD generation
287
- - **"Need adjustments" / Other** → update blueprint and repeat 2-DDD.3
288
-
289
246
  ---
290
247
 
291
248
  ## Artifact Generation
@@ -296,11 +253,12 @@ With schema validated (Checkpoint 1) and blueprint confirmed (Checkpoint 2):
296
253
 
297
254
  > Detailed structure: `references/spec-authoring-guide.md`
298
255
 
299
- Read the spec-authoring-guide first, then create `.morph/features/$ARGUMENTS/1-design/spec.md` with:
256
+ > **MCP:** Before writing spec.md, use **Context7 MCP** (`resolve-library-id` → `query-docs`) to fetch current API docs for libraries referenced in the proposal (e.g., FluentValidation, MediatR, TanStack Query). This ensures spec references correct method signatures and patterns. If Context7 is not available, use **WebSearch** + **WebFetch** to look up the official documentation.
257
+
258
+ Read the spec-authoring-guide first, then create `.morph/features/$ARGUMENTS/2-design/spec.md` with:
300
259
  - Overview, Functional Requirements (FR001...) with measurable acceptance criteria
301
260
  - Non-Functional Requirements, Data Model
302
261
  - **VSA:** section `## Architecture Style: Vertical Slice` with slices and operations
303
- - **DDD:** section `## Domain Complexity` with level (1/2/3) and justification
304
262
  - Infrastructure Requirements (if applicable)
305
263
 
306
264
  ### Generate contracts — VSA
@@ -310,7 +268,7 @@ Read the spec-authoring-guide first, then create `.morph/features/$ARGUMENTS/1-d
310
268
  ```bash
311
269
  morph-spec template render \
312
270
  dotnet-contracts-vsa \
313
- .morph/features/$ARGUMENTS/1-design/contracts.cs \
271
+ .morph/features/$ARGUMENTS/2-design/contracts.cs \
314
272
  '{
315
273
  "FEATURE_NAME": "$ARGUMENTS",
316
274
  "NAMESPACE": "{ProjectNamespace}",
@@ -328,42 +286,19 @@ After rendering, fill in the `// placeholder:` sections with real fields from sc
328
286
  - `{Entity}Errors` static shared across all slices
329
287
  - CancellationToken in all async methods
330
288
 
331
- ### Generate contracts — DDD
332
-
333
- **Mandatory source:** fields from `schema-analysis.md` + components from the DDD Blueprint.
334
-
335
- ```bash
336
- # Replace {N} with the detected level (1, 2, or 3):
337
- morph-spec template render \
338
- dotnet-contracts-level{N} \
339
- .morph/features/$ARGUMENTS/1-design/contracts.cs \
340
- '{
341
- "FEATURE_NAME": "$ARGUMENTS",
342
- "NAMESPACE": "{ProjectNamespace}",
343
- "DATE": "{{TODAY}}"
344
- }'
345
- ```
346
-
347
- After rendering, fill in the `// placeholder:` sections with real fields from schema-analysis.md.
348
-
349
- **Mandatory DDD patterns:**
350
- - Level 1: repository interfaces + service with mapped methods
351
- - Level 2: AggregateRoot with invariants + immutable Value Objects + Domain Events
352
- - Level 3: adds Integration Events + Bounded Context boundary
353
-
354
289
  ### Stack adaptation for contracts
355
290
 
356
- For TypeScript/Next.js projects, generate `contracts.ts` instead of `contracts.cs`. Use TypeScript interfaces with the same DDD/VSA patterns adapted to the language (e.g., `readonly` fields for Value Objects, union types for status enums, typed event interfaces for Domain Events).
291
+ For TypeScript/Next.js projects, generate `contracts.ts` instead of `contracts.cs`. Use TypeScript interfaces with the same VSA patterns adapted to the language (e.g., `readonly` fields, union types for status enums, typed event interfaces).
357
292
 
358
293
  ### Generate decisions.md
359
294
 
360
295
  ```bash
361
296
  morph-spec template render docs/decisions \
362
- .morph/features/$ARGUMENTS/1-design/decisions.md \
297
+ .morph/features/$ARGUMENTS/2-design/decisions.md \
363
298
  '{"FEATURE_NAME": "$ARGUMENTS", "DATE": "{{TODAY}}", "decisions": []}'
364
299
  ```
365
300
 
366
- Mandatory ADRs: architecture choice (VSA vs DDD + justification), UI library (if UI/UX phase ran), external integrations, Azure resources with cost estimates.
301
+ Mandatory ADRs: architecture choice (VSA + justification), UI library (if UI/UX phase ran), external integrations, Azure resources with cost estimates.
367
302
 
368
303
  ---
369
304
 
@@ -375,7 +310,7 @@ After generating artifacts, evaluate the design with the **Quality Score (0–10
375
310
  |-----------|-----|----------------------|
376
311
  | **Schema fidelity** | 25 | All fields in contracts have traceable origin in schema-analysis.md — zero guessed |
377
312
  | **Functional coverage** | 20 | All FRs from the proposal are in spec with measurable acceptance criteria |
378
- | **Blueprint complete** | 20 | **VSA:** all slices have handler, validator (except GetAll), endpoint and errors \| **DDD:** all entities/aggregates/services have components for the detected level |
313
+ | **Blueprint complete** | 20 | **VSA:** all slices have handler, validator (except GetAll), endpoint and errors |
379
314
  | **External integrations** | 20 | APIs/services with payload, error format and retry policy documented |
380
315
  | **Infra / costs** | 15 | Azure resources estimated with cost, or "N/A" explicitly documented |
381
316
 
@@ -406,7 +341,6 @@ Typical questions by dimension:
406
341
  | Schema fidelity | "The `metadata` field (JSONB) — what is its structure? Which keys?" |
407
342
  | Functional coverage | "FR003 says 'notify user' — by email, push, or both?" |
408
343
  | Blueprint VSA | "Should the CreateOrder slice trigger an email job or is it synchronous?" |
409
- | Blueprint DDD | "Should `Place()` on OrderAggregate emit `OrderPlacedEvent`?" |
410
344
  | Integrations | "Does the payment API use webhook or polling to confirm?" |
411
345
  | Infra/costs | "Does this feature need Azure storage? Which tier?" |
412
346
 
@@ -421,7 +355,7 @@ Maximum 3 technical questions per call. In the last call of each round, always i
421
355
  "multiSelect": false,
422
356
  "options": [
423
357
  { "label": "Continue refining", "description": "More open questions identified" },
424
- { "label": "Finalize design", "description": "Proceed to Clarify with current design" }
358
+ { "label": "Finalize design", "description": "Proceed to Plan phase with current design" }
425
359
  ]
426
360
  }
427
361
  ```
@@ -459,10 +393,10 @@ morph-spec state set $ARGUMENTS costs.estimated {X.XX}
459
393
  {
460
394
  "questions": [{
461
395
  "header": "Approval",
462
- "question": "Design generated. Approve to continue to Clarify?",
396
+ "question": "Design generated. Approve to continue to Plan?",
463
397
  "multiSelect": false,
464
398
  "options": [
465
- { "label": "Approve and continue", "description": "Advance to Clarify phase" },
399
+ { "label": "Approve and continue", "description": "Advance to Plan phase" },
466
400
  { "label": "I have feedback", "description": "Describe what to change (Other)" }
467
401
  ]
468
402
  }]
@@ -478,16 +412,16 @@ morph-spec state set $ARGUMENTS costs.estimated {X.XX}
478
412
 
479
413
  ## Generated Outputs
480
414
 
481
- - `.morph/features/$ARGUMENTS/1-design/schema-analysis.md` — Real schema mapped and validated
482
- - `.morph/features/$ARGUMENTS/1-design/spec.md` — Complete technical specification
483
- - `.morph/features/$ARGUMENTS/1-design/contracts.cs` (or `.ts` for TypeScript projects) — Contracts based on real schema (VSA or DDD)
484
- - `.morph/features/$ARGUMENTS/1-design/decisions.md` — Documented ADRs
415
+ - `.morph/features/$ARGUMENTS/2-design/schema-analysis.md` — Real schema mapped and validated
416
+ - `.morph/features/$ARGUMENTS/2-design/spec.md` — Complete technical specification
417
+ - `.morph/features/$ARGUMENTS/2-design/contracts.cs` (or `.ts` for TypeScript projects) — Contracts based on real schema (VSA)
418
+ - `.morph/features/$ARGUMENTS/2-design/decisions.md` — Documented ADRs
485
419
 
486
420
  ## Advancement Criteria
487
421
 
488
422
  - [x] Architecture style detected from `config.architecture.style`
489
423
  - [x] Schema validated by user (Checkpoint 1)
490
- - [x] Blueprint confirmed by user (Checkpoint 2-VSA or 2-DDD)
424
+ - [x] Blueprint confirmed by user (Checkpoint 2-VSA)
491
425
  - [x] Quality score ≥ 85 OR user finalized
492
426
  - [x] All field names in contracts traceable to schema-analysis.md
493
427
  - [x] State updated
@@ -498,12 +432,12 @@ morph-spec state set $ARGUMENTS costs.estimated {X.XX}
498
432
  <!-- morph-outputs:design -->
499
433
  | Output | Caminho |
500
434
  |--------|---------|
501
- | `schemaAnalysis` | `.morph/features/{feature}/1-design/schema-analysis.md` |
502
- | `spec` | `.morph/features/{feature}/1-design/spec.md` |
503
- | `contracts` | `.morph/features/{feature}/1-design/contracts.cs` |
504
- | `contractsTs` | `.morph/features/{feature}/1-design/contracts.ts` |
505
- | `contractsVsa` | `.morph/features/{feature}/1-design/contracts-vsa.cs` |
506
- | `decisions` | `.morph/features/{feature}/1-design/decisions.md` |
435
+ | `schemaAnalysis` | `.morph/features/{feature}/2-design/schema-analysis.md` |
436
+ | `spec` | `.morph/features/{feature}/2-design/spec.md` |
437
+ | `contracts` | `.morph/features/{feature}/2-design/contracts.cs` |
438
+ | `contractsTs` | `.morph/features/{feature}/2-design/contracts.ts` |
439
+ | `contractsVsa` | `.morph/features/{feature}/2-design/contracts-vsa.cs` |
440
+ | `decisions` | `.morph/features/{feature}/2-design/decisions.md` |
507
441
  <!-- /morph-outputs -->
508
442
 
509
- Continue automatically to Phase 3 (Clarify) after approval.
443
+ Continue automatically to Plan phase after approval.
@@ -5,62 +5,17 @@
5
5
 
6
6
  ---
7
7
 
8
- ## Caminho A: `domain-architect` (DDD)
8
+ ## Caminho: `dotnet-senior` (VSA)
9
9
 
10
- **Quando usar:** Config **sem** `architecture.style: "vertical-slice"`.
11
-
12
- **Ref:** `framework/standards/architecture/ddd/complexity-levels.md`
13
-
14
- **Obtenha o taskPrompt do dispatch config** (`morph-spec dispatch-agents $ARGUMENTS design`) e use o Task tool:
15
-
16
- ```
17
- [Task tool — domain-architect]
18
- Prompt (do dispatch config, enriquecido com conteúdo da proposta):
19
-
20
- Você é o Domain Architect da feature '$ARGUMENTS'.
21
-
22
- Proposta da feature:
23
- [conteúdo de .morph/features/$ARGUMENTS/0-proposal/proposal.md]
24
-
25
- Standards de referência:
26
- [.morph/framework/standards/architecture/ddd/complexity-levels.md]
27
-
28
- Sua tarefa — responda cada ponto com "SIM" ou "NÃO" e cite trecho da proposta:
29
- 1. A entidade principal tem estados com transições? (ex: Draft → Confirmed → Shipped)
30
- 2. Existem invariants de negócio que impedem operações? (ex: "só cancela se Ativo")
31
- 3. Há cálculos derivados sobre a entidade? (ex: Total, Saldo, Desconto)
32
- 4. Outros módulos precisam reagir a mudanças? (Domain Events com consumidores reais)
33
- 5. A proposta declara explicitamente Bounded Context ou múltiplos domínios conflitantes?
34
-
35
- Regra de decisão:
36
- → Todas "NÃO": Nível 1 (CRUD simples)
37
- → Alguma de 1-4 "SIM": Nível 2 (Business Logic com AggregateRoot)
38
- → 5 "SIM" OU múltiplos domínios com modelos conflitantes: Nível 3 (Bounded Context)
39
-
40
- Retorne:
41
- - Nível detectado (1, 2 ou 3)
42
- - Justificativa com citações da proposta
43
- - Para Nível 2+: Aggregate Blueprint inicial (entidade principal, value objects, invariants)
44
- ```
45
-
46
- **Após receber o resultado:**
47
- - Documente no spec.md (seção `## Domain Complexity`)
48
- - **Para Nível 2+:** Preencha o `## Aggregate Blueprint` no spec.md
49
- - **Para Nível 3:** Adicione `BOUNDED_CONTEXT` como variável ao renderizar o template
50
-
51
- ---
52
-
53
- ## Caminho B: `vsa-architect` (VSA)
54
-
55
- **Quando usar:** Config com `architecture.style: "vertical-slice"`.
10
+ **Quando usar:** Default architecture style (Vertical Slice Architecture).
56
11
 
57
12
  **Ref:** `framework/standards/architecture/vertical-slice/vertical-slice.md`
58
13
 
59
- **Obtenha o taskPrompt do dispatch config** e use o Task tool:
14
+ **Use o Agent tool com o subagentType do dispatch recommendation:**
60
15
 
61
16
  ```
62
- [Task tool — vsa-architect]
63
- Prompt (do dispatch config, enriquecido com conteúdo da proposta):
17
+ Agent(subagent_type="morph-dotnet-senior", prompt="...")
18
+ Prompt (enriquecido com conteúdo da proposta):
64
19
 
65
20
  Você é o VSA Specialist da feature '$ARGUMENTS'.
66
21
 
@@ -10,7 +10,7 @@
10
10
  | **Stack** | blazor-azure |
11
11
  | **Complexity** | Medium |
12
12
  | **Estimated Cost** | ~$5.50/month |
13
- | **Agents** | Core: All / Specialists: azure-architect, dotnet-senior, blazor-builder |
13
+ | **Agents** | Core: All / Specialists: dotnet-senior, nextjs-expert, infra-architect |
14
14
 
15
15
  ---
16
16