@polymorphism-tech/morph-spec 4.5.0 → 4.7.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 (292) hide show
  1. package/CLAUDE.md +77 -56
  2. package/README.md +394 -700
  3. package/docs/ARCHITECTURE.md +331 -0
  4. package/docs/CHEATSHEET.md +221 -0
  5. package/docs/COMMAND-FLOWS.md +368 -0
  6. package/docs/QUICKSTART.md +212 -0
  7. package/docs/examples/order-management/contracts.cs +84 -0
  8. package/docs/examples/order-management/proposal.md +24 -0
  9. package/docs/examples/order-management/spec.md +162 -0
  10. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +1153 -0
  11. package/docs/plans/2026-02-23-ddd-nextsteps.md +682 -0
  12. package/docs/plans/2026-02-23-infra-architect-refactor.md +437 -0
  13. package/docs/plans/2026-02-23-nextjs-code-review-design.md +156 -0
  14. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +1254 -0
  15. package/docs/plans/2026-02-23-nextjs-standards-design.md +149 -0
  16. package/docs/plans/2026-02-23-nextjs-standards-impl.md +1846 -0
  17. package/framework/{skills/level-2-domains → agents}/README.md +14 -14
  18. package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +1 -4
  19. package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +1 -2
  20. package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +1 -2
  21. package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +1 -2
  22. package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +159 -162
  23. package/framework/agents/backend/api-designer.md +103 -0
  24. package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +1 -2
  25. package/framework/agents/backend/ef-modeler.md +119 -0
  26. package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +1 -4
  27. package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +1 -4
  28. package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +1 -4
  29. package/framework/agents/frontend/nextjs-expert.md +118 -0
  30. package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +1 -2
  31. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +147 -148
  32. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +1 -2
  33. package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +1 -4
  34. package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +1 -4
  35. package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +1 -4
  36. package/framework/agents/infrastructure/infra-architect.md +45 -0
  37. package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +1 -4
  38. package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +1 -4
  39. package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +1 -4
  40. package/framework/{skills/level-2-domains → agents}/integrations/hangfire-integration.md +1 -2
  41. package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +1 -4
  42. package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +1 -4
  43. package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +1 -4
  44. package/framework/agents.json +1145 -278
  45. package/framework/hooks/claude-code/statusline.py +384 -85
  46. package/framework/hooks/shared/phase-utils.js +129 -129
  47. package/framework/rules/frontend-standards.md +0 -3
  48. package/framework/rules/nextjs-standards.md +17 -0
  49. package/framework/skills/README.md +66 -0
  50. package/framework/skills/level-0-meta/{brainstorming.md → brainstorming/SKILL.md} +3 -1
  51. package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
  52. package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +3 -2
  53. package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
  54. package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
  55. package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +147 -0
  56. package/framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md +254 -0
  57. package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +2 -5
  58. package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +6 -7
  59. package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +3 -6
  60. package/framework/skills/level-0-meta/{tool-usage-guide.md → tool-usage-guide/SKILL.md} +4 -5
  61. package/framework/skills/level-0-meta/{verification-before-completion.md → verification-before-completion/SKILL.md} +3 -1
  62. package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
  63. package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +3 -3
  64. package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
  65. package/framework/skills/level-1-workflows/{phase-codebase-analysis.md → phase-codebase-analysis/SKILL.md} +2 -3
  66. package/framework/skills/level-1-workflows/{phase-design.md → phase-design/SKILL.md} +46 -182
  67. package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
  68. package/framework/skills/level-1-workflows/{phase-implement.md → phase-implement/SKILL.md} +3 -3
  69. package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
  70. package/framework/skills/level-1-workflows/{phase-setup.md → phase-setup/SKILL.md} +2 -3
  71. package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +42 -3
  72. package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
  73. package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
  74. package/framework/skills/level-1-workflows/{phase-uiux.md → phase-uiux/SKILL.md} +2 -3
  75. package/framework/standards/STANDARDS.json +121 -0
  76. package/framework/standards/architecture/ddd/bounded-contexts.md +105 -0
  77. package/framework/standards/architecture/ddd/complexity-levels.md +108 -0
  78. package/framework/standards/architecture/ddd/ubiquitous-language.md +58 -0
  79. package/framework/standards/frontend/nextjs/app-router.md +123 -0
  80. package/framework/standards/frontend/nextjs/components.md +132 -0
  81. package/framework/standards/frontend/nextjs/data-fetching.md +126 -0
  82. package/framework/standards/frontend/nextjs/forms.md +128 -0
  83. package/framework/standards/frontend/nextjs/naming-conventions.md +67 -0
  84. package/framework/standards/frontend/nextjs/project-structure.md +102 -0
  85. package/framework/standards/frontend/nextjs/state-management.md +72 -0
  86. package/framework/standards/frontend/nextjs/testing.md +111 -0
  87. package/framework/templates/REGISTRY.json +538 -142
  88. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +69 -0
  89. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +86 -0
  90. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +41 -0
  91. package/framework/templates/docs/spec.md +49 -0
  92. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -0
  93. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -0
  94. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -0
  95. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -0
  96. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -0
  97. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -0
  98. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -0
  99. package/framework/templates/project-structure/dotnet-ddd.md +70 -0
  100. package/framework/workflows/docs/enforcement-pipeline.md +2 -1
  101. package/package.json +1 -1
  102. package/scripts/scan-nextjs.mjs +169 -0
  103. package/src/commands/project/doctor.js +52 -1
  104. package/src/commands/project/init.js +19 -65
  105. package/src/commands/project/update.js +7 -63
  106. package/src/lib/detectors/claude-config-detector.js +1 -3
  107. package/src/lib/standards/standards-context-injector.js +5 -0
  108. package/src/lib/validators/nextjs/index.js +6 -0
  109. package/src/lib/validators/nextjs/next-component-validator.js +181 -0
  110. package/src/lib/validators/validation-runner.js +5 -0
  111. package/src/utils/agents-installer.js +16 -4
  112. package/src/utils/skills-installer.js +59 -15
  113. package/.morph/.morphversion +0 -5
  114. package/.morph/analytics/threads-log.jsonl +0 -44
  115. package/.morph/config/config.json +0 -8
  116. package/.morph/context/README.md +0 -17
  117. package/.morph/framework/agents.json +0 -948
  118. package/.morph/framework/standards/STANDARDS.json +0 -812
  119. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  120. package/.morph/framework/standards/ai-agents/production.md +0 -415
  121. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  122. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  123. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  124. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  125. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  126. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  127. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  128. package/.morph/framework/standards/backend/api/rest.md +0 -492
  129. package/.morph/framework/standards/backend/api/validation.md +0 -88
  130. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  131. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  132. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  133. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  134. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  135. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  136. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  137. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  138. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  139. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  140. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  141. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  142. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  143. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  144. package/.morph/framework/standards/context/analytics.md +0 -96
  145. package/.morph/framework/standards/context/bundles.md +0 -110
  146. package/.morph/framework/standards/context/priming.md +0 -78
  147. package/.morph/framework/standards/core/architecture.md +0 -185
  148. package/.morph/framework/standards/core/coding.md +0 -214
  149. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  150. package/.morph/framework/standards/core/git.md +0 -185
  151. package/.morph/framework/standards/core/testing.md +0 -295
  152. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  153. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  154. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  155. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  156. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  157. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  158. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  159. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  160. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  161. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  162. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  163. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  164. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  165. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  166. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -198
  167. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  168. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  169. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  170. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  171. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  172. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  173. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  174. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  175. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  176. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  177. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  178. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  179. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  180. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  181. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  182. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  183. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  184. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  185. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  186. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  187. package/.morph/framework/standards/observability/logging.md +0 -131
  188. package/.morph/framework/standards/observability/metrics.md +0 -121
  189. package/.morph/framework/standards/observability/monitoring.md +0 -114
  190. package/.morph/framework/standards/observability/tracing.md +0 -132
  191. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  192. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  193. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  194. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  195. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  196. package/.morph/framework/templates/README.md +0 -814
  197. package/.morph/framework/templates/REGISTRY.json +0 -1492
  198. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  199. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  200. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  201. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  202. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  203. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  204. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  205. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  206. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
  207. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  208. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  209. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  210. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  211. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  212. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  213. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  214. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  215. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  216. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  217. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  218. package/.morph/framework/templates/docs/clarifications.md +0 -253
  219. package/.morph/framework/templates/docs/onboarding.md +0 -123
  220. package/.morph/framework/templates/docs/proposal.md +0 -182
  221. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  222. package/.morph/framework/templates/docs/spec.md +0 -149
  223. package/.morph/framework/templates/docs/ui-components.md +0 -124
  224. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  225. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  226. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  227. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  228. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  229. package/.morph/framework/templates/feature/decisions.md +0 -187
  230. package/.morph/framework/templates/feature/recap.md +0 -146
  231. package/.morph/framework/templates/feature/tasks.md +0 -199
  232. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  233. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  234. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  235. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  236. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  237. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  238. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  239. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  240. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  241. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  242. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  243. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  244. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  245. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  246. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  247. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  248. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  249. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  250. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  251. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  252. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  253. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  254. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  255. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  256. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  257. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  258. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  259. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  260. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  261. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  262. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  263. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  264. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  265. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  266. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  267. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  268. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  269. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  270. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  271. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  272. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  273. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  274. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  275. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  276. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  277. package/.morph/framework/templates/saas/subscription.cs +0 -347
  278. package/.morph/framework/templates/saas/tenant.cs +0 -338
  279. package/.morph/framework/templates/state.template.json +0 -17
  280. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  281. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  282. package/.morph/framework/templates/ui/design-system.css +0 -226
  283. package/.morph/logs/tool-failures.log +0 -51
  284. package/.morph/memory/pre-compact-2026-02-22T17-01-01-658Z.json +0 -16
  285. package/.morph/state.json +0 -48
  286. package/framework/skills/level-2-domains/backend/api-designer.md +0 -66
  287. package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -65
  288. package/framework/skills/level-2-domains/frontend/nextjs-expert.md +0 -161
  289. package/framework/skills/level-3-technologies/README.md +0 -7
  290. package/framework/skills/level-4-patterns/README.md +0 -7
  291. package/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  292. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
@@ -0,0 +1,437 @@
1
+ # infra-architect Refactor Implementation Plan
2
+
3
+ > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
+
5
+ **Goal:** Introduce a cloud-agnostic `infra-architect` tier-2 squad leader, demote `azure-architect` to tier-3 specialist, and update all references so non-Azure projects aren't burdened with an always-active Azure agent.
6
+
7
+ **Architecture:** Add a new `infra-architect` agent (tier 2, always_active: true) that owns infrastructure coordination regardless of cloud provider. `azure-architect` becomes a tier-3 specialist under it (always_active: false), activated only when Azure infra work is needed. `bicep-architect` stays tier-3 (already always_active: false... wait, it IS true — fix that too).
8
+
9
+ **Tech Stack:** Node.js/ESM, `framework/agents.json`, `.claude/agents/`, `src/lib/standards/standards-context-injector.js`, `test/utils/agents-installer.test.js`
10
+
11
+ ---
12
+
13
+ ## Scope Summary
14
+
15
+ | File | Action |
16
+ |------|--------|
17
+ | `framework/agents.json` | Add `infra-architect` (tier-2), demote `azure-architect` (tier-3), fix `bicep-architect` always_active, update refs, update counts |
18
+ | `framework/agents/infrastructure/infra-architect.md` | CREATE cloud-agnostic squad leader spec |
19
+ | `framework/agents/infrastructure/azure-architect.md` | Remove "always active Core Agent" trigger text |
20
+ | `framework/agents/README.md` | Update squad leader reference |
21
+ | `.claude/agents/morph-azure-architect.md` | DELETE (no longer tier-2, installAgents won't generate it) |
22
+ | `.claude/agents/morph-infra-architect.md` | CREATE new squad leader agent file |
23
+ | `src/lib/standards/standards-context-injector.js` | Add `infra-architect` entry, keep `azure-architect` entry |
24
+ | `test/utils/agents-installer.test.js` | Replace `morph-azure-architect.md` check → `morph-infra-architect.md` |
25
+
26
+ ---
27
+
28
+ ### Task 1: Update `framework/agents.json` — add infra-architect, demote azure-architect
29
+
30
+ **Files:**
31
+ - Modify: `framework/agents.json`
32
+
33
+ **Step 1: Add the `infra-architect` agent entry in the tier-2 section (after `dotnet-senior`, before `azure-architect` current slot)**
34
+
35
+ Insert before the `"azure-architect"` key:
36
+
37
+ ```json
38
+ "infra-architect": {
39
+ "tier": 2,
40
+ "role": "domain-leader",
41
+ "title": "Infrastructure Squad Leader",
42
+ "domains": ["infrastructure"],
43
+ "keywords": ["infrastructure", "infra", "cloud", "deployment", "hosting", "ci/cd", "container", "iac", "pipeline"],
44
+ "always_active": true,
45
+ "validators": ["architecture"],
46
+ "relationships": {
47
+ "reports_to": "standards-architect",
48
+ "coordinates": ["azure-architect", "bicep-architect", "devops-engineer", "container-specialist", "observability-expert", "azure-identity"],
49
+ "escalates_to": "standards-architect",
50
+ "collaborates_with": ["dotnet-senior", "ui-designer"],
51
+ "team_role": "domain_leader"
52
+ },
53
+ "standards": ["core/coding.md", "core/architecture.md"],
54
+ "teammate": {
55
+ "role": "Infrastructure Squad Leader",
56
+ "icon": "🏗️",
57
+ "spawn_prompt": "You are the Infrastructure Squad Leader. Coordinate infra specialists regardless of cloud provider (azure-architect, devops-engineer, container-specialist, observability-expert). Focus on IaC, CI/CD, containerization, cost optimization. Delegate to azure-architect for Azure-specific work. Escalate to standards-architect on conflicts."
58
+ }
59
+ },
60
+ ```
61
+
62
+ **Step 2: Demote `azure-architect` from tier-2 to tier-3**
63
+
64
+ In the `azure-architect` entry change:
65
+ - `"tier": 2` → `"tier": 3`
66
+ - `"role": "domain-leader"` → `"role": "specialist"`
67
+ - `"always_active": true` → `"always_active": false`
68
+ - `"relationships.reports_to": "standards-architect"` → `"infra-architect"`
69
+ - `"relationships.escalates_to": "standards-architect"` → `"infra-architect"`
70
+ - Remove `"collaborates_with": ["dotnet-senior", "blazor-builder", "nextjs-expert"]` (now a specialist, not a leader)
71
+ - Remove `"team_role": "domain_leader"` → `"team_role": "specialist"`
72
+ - Add `"collaborates_with": ["bicep-architect", "devops-engineer", "container-specialist"]`
73
+
74
+ **Step 3: Fix `bicep-architect` — set `always_active: false`**
75
+
76
+ `bicep-architect` is currently `always_active: true`, which is wrong (it's Azure Bicep-specific). Change to `false`.
77
+
78
+ **Step 4: Update tier counts and cross-references**
79
+
80
+ - `"total_agents": 37` → `38` (infra-architect is new)
81
+ - `"tier_2_leaders": 3` stays at `3` (azure-architect leaves, infra-architect joins — net zero)
82
+ - `"tier_3_specialists": 26` → `27` (azure-architect joins tier-3)
83
+ - `standards-architect.relationships.coordinates`: replace `"azure-architect"` → `"infra-architect"`
84
+ - `dotnet-senior.relationships.collaborates_with`: replace `"azure-architect"` → `"infra-architect"`
85
+ - `event-architect.relationships.collaborates_with`: replace `"azure-architect"` → `"infra-architect"`
86
+ - `nosql-cache-expert.relationships.collaborates_with`: check and replace `"azure-architect"` → `"infra-architect"` if present
87
+ - `blazor-builder.relationships.collaborates_with`: replace `"azure-architect"` → `"infra-architect"` if present
88
+ - `nextjs-expert.relationships.collaborates_with`: replace `"azure-architect"` → `"infra-architect"` if present
89
+ - `hangfire-orchestrator.relationships.collaborates_with`: replace `"azure-architect"` → `"infra-architect"` if present
90
+ - `devops-engineer`, `container-specialist`, `observability-expert`, `azure-identity`: change `reports_to`/`escalates_to` from `"azure-architect"` → stays as `"azure-architect"` IF they are Azure-specific; OR change to `"infra-architect"` since the squad leader is now `infra-architect`
91
+ - Decision: `devops-engineer`, `container-specialist`, `observability-expert`, `azure-identity` are still sub-specialties that `azure-architect` may coordinate. But the squad leader is `infra-architect`. Change their `reports_to`/`escalates_to` → `"infra-architect"`.
92
+ - `bicep-architect` stays `reports_to: "azure-architect"` (Bicep is Azure-specific, azure-architect coordinates it)
93
+
94
+ **Step 5: Validate JSON is well-formed**
95
+
96
+ Run: `node -e "JSON.parse(require('fs').readFileSync('framework/agents.json','utf8')); console.log('OK')"`
97
+ Expected: `OK`
98
+
99
+ **Step 6: Verify counts**
100
+
101
+ Run: `node -e "const d=JSON.parse(require('fs').readFileSync('framework/agents.json','utf8')); const agents=Object.entries(d.agents).filter(([k])=>!k.startsWith('_comment')); const t2=agents.filter(([,v])=>v.tier===2); const t3=agents.filter(([,v])=>v.tier===3); console.log('total',agents.length,'t2',t2.length,'t3',t3.length,'always_active',agents.filter(([,v])=>v.always_active).map(([k])=>k).join(','));"`
102
+
103
+ Expected: `total 38 t2 3 t3 27 always_active standards-architect,dotnet-senior,infra-architect,...` (azure-architect and bicep-architect should NOT be in the always_active list)
104
+
105
+ **Step 7: Commit**
106
+
107
+ ```bash
108
+ git add framework/agents.json
109
+ git commit -m "refactor(agents): introduce infra-architect tier-2 squad leader, demote azure-architect to tier-3 specialist"
110
+ ```
111
+
112
+ ---
113
+
114
+ ### Task 2: Create `framework/agents/infrastructure/infra-architect.md`
115
+
116
+ **Files:**
117
+ - Create: `framework/agents/infrastructure/infra-architect.md`
118
+
119
+ **Step 1: Write the new agent spec file**
120
+
121
+ ```markdown
122
+ ---
123
+ name: infra-architect
124
+ description: Infrastructure Squad Leader for cloud-agnostic infrastructure coordination. Use when planning deployments, provisioning any cloud resources, setting up CI/CD pipelines, containerizing applications, or designing infrastructure architecture regardless of cloud provider.
125
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
126
+ ---
127
+
128
+ # Infrastructure Squad Leader
129
+
130
+ Cloud-agnostic infrastructure coordinator. Delegates to cloud-specific specialists.
131
+
132
+ ## Responsabilidades
133
+
134
+ 1. **Coordenar especialistas de infra** (azure-architect, devops-engineer, container-specialist, observability-expert)
135
+ 2. **Decidir stack de infra** com base no config do projeto (cloud: azure | aws | gcp | self-hosted)
136
+ 3. **Garantir IaC** — tudo via código, nada manual
137
+ 4. **CI/CD** — pipelines para todos os ambientes
138
+
139
+ ## Quando ativar sub-especialistas
140
+
141
+ | Cenário | Especialista |
142
+ |---------|-------------|
143
+ | Deploy em Azure | azure-architect |
144
+ | Templates Bicep | bicep-architect (via azure-architect) |
145
+ | Pipelines CI/CD | devops-engineer |
146
+ | Docker / containers | container-specialist |
147
+ | Logs / métricas | observability-expert |
148
+ | Auth Microsoft/Entra | azure-identity |
149
+
150
+ ## Princípio: Infrastructure as Code
151
+
152
+ > Nunca criar recursos de infra manualmente. Toda infra via código (Bicep, Terraform, Pulumi, Compose).
153
+
154
+ ## Checklist de Infra
155
+
156
+ - [ ] Cloud provider definido em config.json
157
+ - [ ] IaC templates criados e validados
158
+ - [ ] Ambientes dev/staging/prod separados
159
+ - [ ] Secrets nunca hardcoded
160
+ - [ ] CI/CD pipeline configurado
161
+ - [ ] Observability básica (logs + métricas)
162
+ - [ ] Estimativa de custos documentada
163
+
164
+ ---
165
+
166
+ *MORPH-SPEC by Polymorphism Tech*
167
+ ```
168
+
169
+ **Step 2: Commit**
170
+
171
+ ```bash
172
+ git add framework/agents/infrastructure/infra-architect.md
173
+ git commit -m "feat(agents): add infra-architect cloud-agnostic squad leader spec"
174
+ ```
175
+
176
+ ---
177
+
178
+ ### Task 3: Update `framework/agents/infrastructure/azure-architect.md`
179
+
180
+ **Files:**
181
+ - Modify: `framework/agents/infrastructure/azure-architect.md`
182
+
183
+ **Step 1: Remove "always active" claim from Triggers section**
184
+
185
+ Find and replace:
186
+ ```
187
+ ## Triggers
188
+
189
+ Ativado automaticamente em todo projeto MORPH-SPEC (Core Agent).
190
+ ```
191
+
192
+ ```
193
+ ## Triggers
194
+
195
+ Ativado quando o projeto usa Azure como provedor de cloud. Coordenado pelo `infra-architect`.
196
+ ```
197
+
198
+ **Step 2: Verify the file looks correct**
199
+
200
+ Read the file and confirm the Triggers section no longer claims it's always-on.
201
+
202
+ **Step 3: Commit**
203
+
204
+ ```bash
205
+ git add framework/agents/infrastructure/azure-architect.md
206
+ git commit -m "fix(agents): azure-architect is no longer always-active, ativado apenas em projetos Azure"
207
+ ```
208
+
209
+ ---
210
+
211
+ ### Task 4: Update `framework/agents/README.md`
212
+
213
+ **Files:**
214
+ - Modify: `framework/agents/README.md`
215
+
216
+ **Step 1: Update squad leader reference**
217
+
218
+ Change:
219
+ ```
220
+ - infrastructure/ - Infrastructure Squad (led by azure-architect)
221
+ ```
222
+
223
+ ```
224
+ - infrastructure/ - Infrastructure Squad (led by infra-architect)
225
+ ```
226
+
227
+ **Step 2: Commit**
228
+
229
+ ```bash
230
+ git add framework/agents/README.md
231
+ git commit -m "docs(agents): update infra squad leader reference to infra-architect"
232
+ ```
233
+
234
+ ---
235
+
236
+ ### Task 5: Update `.claude/agents/` installed agent files
237
+
238
+ **Files:**
239
+ - Delete: `.claude/agents/morph-azure-architect.md`
240
+ - Create: `.claude/agents/morph-infra-architect.md`
241
+
242
+ **Step 1: Delete the old tier-2 azure-architect agent file**
243
+
244
+ `azure-architect` is no longer tier-2, so `installAgents()` won't generate `morph-azure-architect.md`. Delete the stale file.
245
+
246
+ ```bash
247
+ rm ".claude/agents/morph-azure-architect.md"
248
+ ```
249
+
250
+ **Step 2: Create the new infra-architect agent file**
251
+
252
+ ```markdown
253
+ ---
254
+ name: Infrastructure Squad Leader
255
+ description: Infrastructure Squad Leader
256
+ model: inherit
257
+ tools: Read, Grep, Glob, Bash
258
+ maxTurns: 20
259
+ skills:
260
+ - morph-checklist
261
+ memory: local
262
+ ---
263
+
264
+ You are the Infrastructure Squad Leader. Coordinate infra specialists regardless of cloud provider (azure-architect, devops-engineer, container-specialist, observability-expert). Focus on IaC, CI/CD, containerization, and cost optimization. Delegate to azure-architect for Azure-specific work. Escalate to standards-architect on conflicts.
265
+
266
+ ## Standards to Reference
267
+ - core/coding.md
268
+ - core/architecture.md
269
+ ```
270
+
271
+ **Step 3: Verify the correct files exist**
272
+
273
+ Run: `ls ".claude/agents/" | grep -E "morph-(infra|azure)" `
274
+ Expected: `morph-domain-azure-architect.md`, `morph-infra-architect.md` — no `morph-azure-architect.md`
275
+
276
+ **Step 4: Commit**
277
+
278
+ ```bash
279
+ git add ".claude/agents/morph-infra-architect.md"
280
+ git rm ".claude/agents/morph-azure-architect.md"
281
+ git commit -m "fix(agents): replace morph-azure-architect with morph-infra-architect as tier-2 squad leader"
282
+ ```
283
+
284
+ ---
285
+
286
+ ### Task 6: Update `src/lib/standards/standards-context-injector.js`
287
+
288
+ **Files:**
289
+ - Modify: `src/lib/standards/standards-context-injector.js:47`
290
+
291
+ **Step 1: Add `infra-architect` entry and rename existing entry**
292
+
293
+ The current entry at line 47:
294
+ ```js
295
+ 'azure-architect': [
296
+ 'infrastructure/azure/azure', // Stack-specific
297
+ 'core/architecture',
298
+ 'backend/dotnet/core'
299
+ ],
300
+ ```
301
+
302
+ **After** the `ui-designer` entry (end of tier-2 section), add:
303
+ ```js
304
+ 'infra-architect': [
305
+ 'core/architecture',
306
+ 'core/coding'
307
+ ],
308
+ ```
309
+
310
+ Keep the existing `'azure-architect'` entry as-is (it's now a tier-3 specialist entry, still valid).
311
+
312
+ **Step 2: Add a comment clarifying the section**
313
+
314
+ Above `'azure-architect'`: add `// Tier 3: Specialists - Infrastructure Squad`
315
+
316
+ **Step 3: Verify no syntax errors**
317
+
318
+ Run: `node -e "require('./src/lib/standards/standards-context-injector.js'); console.log('OK')"`
319
+ Expected: `OK`
320
+
321
+ **Step 4: Commit**
322
+
323
+ ```bash
324
+ git add src/lib/standards/standards-context-injector.js
325
+ git commit -m "feat(standards): add infra-architect to standards context injector"
326
+ ```
327
+
328
+ ---
329
+
330
+ ### Task 7: Update `test/utils/agents-installer.test.js`
331
+
332
+ **Files:**
333
+ - Modify: `test/utils/agents-installer.test.js`
334
+
335
+ **Step 1: Find and update the tier-2 file check**
336
+
337
+ Current (around line 101-105):
338
+ ```js
339
+ // Find a tier-2 file (dotnet-senior, azure-architect, or ui-designer)
340
+ ...
341
+ f === 'morph-azure-architect.md' ||
342
+ ```
343
+
344
+ Change `morph-azure-architect.md` → `morph-infra-architect.md`
345
+
346
+ **Step 2: Run the test suite to verify**
347
+
348
+ Run: `node --test test/utils/agents-installer.test.js`
349
+ Expected: All tests pass (no failures)
350
+
351
+ **Step 3: Run the full test suite**
352
+
353
+ Run: `npm test`
354
+ Expected: Same pass count as before (or +0 failures)
355
+
356
+ **Step 4: Commit**
357
+
358
+ ```bash
359
+ git add test/utils/agents-installer.test.js
360
+ git commit -m "test(agents-installer): update tier-2 file check to morph-infra-architect"
361
+ ```
362
+
363
+ ---
364
+
365
+ ### Task 8: Update agents-installer.js to regenerate correctly
366
+
367
+ **Files:**
368
+ - Modify: `src/utils/agents-installer.js` (only if the installer hardcodes azure-architect anywhere)
369
+
370
+ **Step 1: Check for hardcoded references**
371
+
372
+ Run: `grep -n "azure-architect\|infra-architect" src/utils/agents-installer.js`
373
+
374
+ If only data-driven (reads from agents.json) — no changes needed.
375
+ If hardcoded references exist — update them to use `infra-architect`.
376
+
377
+ **Step 2: Verify installAgents() generates the right files by dry-running**
378
+
379
+ Run: `node -e "
380
+ const {installAgents} = require('./src/utils/agents-installer.js');
381
+ const path = require('path');
382
+ const os = require('os');
383
+ const tmp = require('fs').mkdtempSync(path.join(os.tmpdir(), 'morph-test-'));
384
+ installAgents(process.cwd(), tmp).then(r => { console.log(r.installed); require('fs').rmdirSync(tmp, {recursive:true}); });
385
+ "`
386
+ Expected: Output includes `morph-infra-architect` but NOT `morph-azure-architect` in the tier-1/2 installed list.
387
+
388
+ **Step 3: Commit if changes were needed**
389
+
390
+ ```bash
391
+ git add src/utils/agents-installer.js
392
+ git commit -m "fix(agents-installer): update hardcoded azure-architect references if present"
393
+ ```
394
+
395
+ ---
396
+
397
+ ### Task 9: Final verification
398
+
399
+ **Step 1: Run the full test suite**
400
+
401
+ Run: `npm test`
402
+ Expected: All previously passing tests still pass. No new failures.
403
+
404
+ **Step 2: Verify always_active agents are correct**
405
+
406
+ Run: `node -e "
407
+ const d = JSON.parse(require('fs').readFileSync('framework/agents.json', 'utf8'));
408
+ const always = Object.entries(d.agents)
409
+ .filter(([k, v]) => !k.startsWith('_comment') && v.always_active)
410
+ .map(([k, v]) => k + ' (tier ' + v.tier + ')');
411
+ console.log('Always active:', always.join(', '));
412
+ "`
413
+ Expected: `infra-architect` is listed, `azure-architect` and `bicep-architect` are NOT listed.
414
+
415
+ **Step 3: Final commit (version bump if needed)**
416
+
417
+ The change is a `refactor` — no version bump required unless maintainer decides otherwise.
418
+
419
+ ```bash
420
+ git log --oneline -8
421
+ ```
422
+
423
+ ---
424
+
425
+ ## Files Changed Summary
426
+
427
+ | File | Type |
428
+ |------|------|
429
+ | `framework/agents.json` | Modified |
430
+ | `framework/agents/infrastructure/infra-architect.md` | Created |
431
+ | `framework/agents/infrastructure/azure-architect.md` | Modified |
432
+ | `framework/agents/README.md` | Modified |
433
+ | `.claude/agents/morph-azure-architect.md` | Deleted |
434
+ | `.claude/agents/morph-infra-architect.md` | Created |
435
+ | `src/lib/standards/standards-context-injector.js` | Modified |
436
+ | `test/utils/agents-installer.test.js` | Modified |
437
+ | `src/utils/agents-installer.js` | Modified only if hardcoded refs found |
@@ -0,0 +1,156 @@
1
+ # Next.js Code Review & Scan — Design Doc
2
+
3
+ > **Date:** 2026-02-23
4
+ > **Status:** Approved
5
+ > **Approach:** Approach 1 — Trio completo (wire + scan script + skill)
6
+
7
+ ---
8
+
9
+ ## Problem
10
+
11
+ The MORPH-SPEC framework has a two-layer validation architecture for .NET/Blazor (programmatic validators + `code-review` skill) but Next.js is severely under-covered:
12
+
13
+ - `nextjs-expert.validators = ["packages"]` — only 1 validator; blazor-builder has 6
14
+ - `next-component-validator.js` was created but **never wired** into agents.json
15
+ - No `code-review-nextjs` skill exists
16
+ - `scripts/scan-csharp.mjs` referenced in `code-review` skill but doesn't exist
17
+ - The `scan-nextjs.mjs` would be the **first scan script** in the framework
18
+
19
+ ## Design
20
+
21
+ ### Three layers (full parity with intended .NET design)
22
+
23
+ ```
24
+ Layer 1 (auto) agents.json → validation-runner.js → validators/*.js
25
+ Layer 2 (CLI) scripts/scan-nextjs.mjs → validateNextComponent() + additional checks
26
+ Layer 3 (LLM) code-review-nextjs skill → scan script first, then manual checklist
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Layer 1: Wire `nextjs-component` validator
32
+
33
+ **Change:** `agents.json` — `nextjs-expert.validators`
34
+
35
+ ```json
36
+ // Before
37
+ "validators": ["packages"]
38
+
39
+ // After
40
+ "validators": ["packages", "nextjs-component"]
41
+ ```
42
+
43
+ **Also register** the validator key in `validation-runner.js`'s validator registry so `nextjs-component` maps to `next-component-validator.js`.
44
+
45
+ ---
46
+
47
+ ## Layer 2: `scripts/scan-nextjs.mjs`
48
+
49
+ CLI scan script for CRITICAL/HIGH violation detection before manual review.
50
+
51
+ **Interface:**
52
+ ```bash
53
+ node scripts/scan-nextjs.mjs [path] # defaults to src/
54
+ node scripts/scan-nextjs.mjs src/features/ # specific dir
55
+ node scripts/scan-nextjs.mjs --json # JSON output for CI
56
+ ```
57
+
58
+ **What it checks (delegates to `validateNextComponent` + adds):**
59
+ 1. `'use client'` without interactivity (warning → HIGH)
60
+ 2. React hooks without `'use client'` (error → CRITICAL)
61
+ 3. PascalCase `.tsx` file names (warning → HIGH)
62
+ 4. `useEffect` used for data fetching (`useEffect(() => { fetch(...)` pattern) → CRITICAL
63
+ 5. Default exports on non-special files (should use named exports) → MEDIUM
64
+ 6. Deep path imports instead of feature index (`from '@/features/users/components/x'` instead of `from '@/features/users'`) → MEDIUM
65
+
66
+ **Output format** (mirrors intended `scan-csharp.mjs` style):
67
+ ```
68
+ 🔍 Scanning src/ (42 files)...
69
+
70
+ CRITICAL (1)
71
+ components/UserCard.tsx:1 — React hooks used (useState) without 'use client'
72
+
73
+ HIGH (2)
74
+ components/UserList.tsx — 'use client' with no interactivity detected
75
+ components/UserCard.tsx — PascalCase filename (should be user-card.tsx)
76
+
77
+ ✅ No issues found in 39 files
78
+
79
+ Summary: 42 files scanned | 3 issues (1 critical, 2 high, 0 medium)
80
+ Exit code: 1 (errors found)
81
+ ```
82
+
83
+ **Exit codes:** `0` = clean, `1` = errors, `2` = scan failed
84
+
85
+ ---
86
+
87
+ ## Layer 3: `code-review-nextjs` skill
88
+
89
+ Skill file: `framework/skills/level-0-meta/code-review-nextjs/SKILL.md`
90
+ Reference: `framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md`
91
+
92
+ **Structure mirrors `code-review.md`:**
93
+
94
+ 1. Run scan script first (automated CRITICAL/HIGH)
95
+ 2. Naming & Style checklist (8 standards ref)
96
+ 3. Component Architecture checklist (tier violations, use client discipline)
97
+ 4. Data Fetching checklist (TanStack Query v5, no useEffect fetch)
98
+ 5. Forms checklist (zodResolver, schema-first, shadcn Form)
99
+ 6. State Management checklist (no unnecessary Zustand/Context for server state)
100
+ 7. TypeScript checklist (no `any`, z.infer<> usage)
101
+ 8. Structure checklist (feature boundary rules, index imports)
102
+ 9. Testing checklist (userEvent over fireEvent, MSW over mock fetch)
103
+ 10. Quick Pre-Merge Checklist
104
+
105
+ **Severity levels:**
106
+ - `[CRITICAL]` — breaks app or violates core Next.js rules
107
+ - `[HIGH]` — significant pattern violation, reviewer must fix before merge
108
+ - `[MEDIUM]` — best practice violation, should fix
109
+ - `[LOW]` — style/consistency, nice to fix
110
+
111
+ ---
112
+
113
+ ## Testing Strategy
114
+
115
+ **End-to-end tests using real temp directory user cases** (not mocks):
116
+
117
+ ### Test cases for `scan-nextjs.mjs`:
118
+ 1. **Clean project** — a `src/` with properly written components → 0 issues, exit 0
119
+ 2. **Component with `useState` but no `'use client'`** → CRITICAL finding
120
+ 3. **Unnecessary `'use client'`** on static component → HIGH finding
121
+ 4. **PascalCase filename** `UserCard.tsx` → HIGH finding
122
+ 5. **`useEffect` for fetch** → CRITICAL finding
123
+ 6. **Mixed project** — some clean, some violations → correct counts, exit 1
124
+ 7. **`--json` flag** → valid JSON output with `{ files, issues, exitCode }`
125
+ 8. **Empty directory** → 0 files, exit 0
126
+ 9. **Non-existent path** → graceful error, exit 2
127
+
128
+ ### Test cases for validation-runner wiring:
129
+ 10. **Feature with `nextjs-expert` active** → `nextjs-component` validator runs
130
+ 11. **Feature without `nextjs-expert` active** → `nextjs-component` validator doesn't run
131
+
132
+ ---
133
+
134
+ ## Artifacts
135
+
136
+ | File | Type | Notes |
137
+ |------|------|-------|
138
+ | `framework/agents.json` | Modified | Add `nextjs-component` to validators |
139
+ | `src/lib/validators/validation-runner.js` | Modified | Register `nextjs-component` key |
140
+ | `scripts/scan-nextjs.mjs` | New | CLI scan script |
141
+ | `test/scripts/scan-nextjs.test.mjs` | New | E2E tests with real temp dirs |
142
+ | `framework/skills/level-0-meta/code-review-nextjs/SKILL.md` | New | Code review skill |
143
+ | `framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md` | New | Filled review example |
144
+ | `.claude/skills/code-review-nextjs.md` | Installed | Via installSkills() |
145
+
146
+ ---
147
+
148
+ ## Out of Scope
149
+
150
+ - `scan-csharp.mjs` — exists conceptually, not implemented. Follow-up task.
151
+ - AST-based analysis — regex is sufficient for the current check set
152
+ - IDE integration — out of scope for this iteration
153
+
154
+ ---
155
+
156
+ *MORPH-SPEC by Polymorphism Tech*