@polymorphism-tech/morph-spec 7.9.3 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/CLAUDE.md +2 -2
  2. package/README.md +31 -2
  3. package/bin/morph-spec.js +50 -2
  4. package/bin/validate.js +379 -379
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +38 -1
  7. package/docs/QUICKSTART.md +60 -1
  8. package/framework/CLAUDE.md +13 -2
  9. package/framework/MORPH.md +38 -2
  10. package/framework/agents.json +22 -3
  11. package/framework/commands/commit.md +166 -166
  12. package/framework/commands/morph-hotfix.md +39 -0
  13. package/framework/commands/morph-infra.md +215 -215
  14. package/framework/commands/morph-preflight.md +205 -205
  15. package/framework/commands/morph-troubleshoot.md +124 -124
  16. package/framework/hooks/README.md +25 -10
  17. package/framework/hooks/claude-code/core/gate-guard.js +4 -2
  18. package/framework/hooks/claude-code/core/loop-detect.js +2 -1
  19. package/framework/hooks/claude-code/core/post-edit-typecheck.js +14 -5
  20. package/framework/hooks/claude-code/core/tasks-json-guard.js +4 -2
  21. package/framework/hooks/claude-code/core/validate-completion.js +1 -1
  22. package/framework/hooks/claude-code/core/worktree-context.js +160 -0
  23. package/framework/hooks/claude-code/statusline.py +679 -679
  24. package/framework/hooks/claude-code/statusline.sh +11 -11
  25. package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
  26. package/framework/hooks/git/pre-commit/agents.sh +25 -25
  27. package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
  28. package/framework/hooks/git/pre-commit/specs.sh +50 -50
  29. package/framework/hooks/git/pre-push/run-tests.sh +44 -44
  30. package/framework/hooks/shared/activity-logger.js +160 -160
  31. package/framework/hooks/shared/build-check.js +2 -2
  32. package/framework/hooks/shared/hook-response.js +17 -5
  33. package/framework/hooks/shared/payload-utils.js +42 -0
  34. package/framework/hooks/shared/state-reader.js +22 -2
  35. package/framework/hooks/shared/stdin-reader.js +26 -26
  36. package/framework/rubrics/backend.json +41 -41
  37. package/framework/rules/ai-agents-standards.md +45 -45
  38. package/framework/rules/dotnet-templates.md +86 -86
  39. package/framework/rules/frontend-standards.md +13 -13
  40. package/framework/rules/infrastructure-standards.md +27 -27
  41. package/framework/rules/neon-standards.md +25 -25
  42. package/framework/rules/nextjs-standards.md +20 -20
  43. package/framework/rules/nextjs-templates.md +40 -40
  44. package/framework/schemas/feature.schema.json +95 -1
  45. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  46. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  47. package/framework/skills/core/morph-apply/SKILL.md +39 -8
  48. package/framework/skills/core/morph-brainstorming/SKILL.md +9 -1
  49. package/framework/skills/core/morph-eval/SKILL.md +6 -1
  50. package/framework/skills/core/morph-hotfix/SKILL.md +136 -0
  51. package/framework/skills/core/morph-implement/SKILL.md +8 -4
  52. package/framework/skills/core/morph-plan/SKILL.md +5 -1
  53. package/framework/skills/core/morph-proposal/SKILL.md +24 -1
  54. package/framework/skills/core/morph-review/SKILL.md +3 -2
  55. package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
  56. package/framework/skills/core/morph-standards/SKILL.md +1 -1
  57. package/framework/standards/STANDARDS.json +7 -2
  58. package/framework/standards/ai-agents/agent-session.md +160 -160
  59. package/framework/standards/ai-agents/batching.md +193 -193
  60. package/framework/standards/ai-agents/context-providers.md +188 -188
  61. package/framework/standards/ai-agents/mcp-server.md +250 -250
  62. package/framework/standards/ai-agents/mcp-tools.md +197 -197
  63. package/framework/standards/ai-agents/middleware-patterns.md +207 -207
  64. package/framework/standards/ai-agents/modalities-image-gen.md +173 -173
  65. package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -171
  66. package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -181
  67. package/framework/standards/ai-agents/modalities-vision.md +201 -201
  68. package/framework/standards/ai-agents/multi-agent-patterns.md +155 -155
  69. package/framework/standards/ai-agents/production.md +275 -275
  70. package/framework/standards/ai-agents/prompts-in-db.md +214 -214
  71. package/framework/standards/ai-agents/providers/model-registry.md +158 -158
  72. package/framework/standards/ai-agents/service-tier-flex.md +135 -135
  73. package/framework/standards/ai-agents/structured-output.md +249 -249
  74. package/framework/standards/ai-agents/sweet-spot.md +109 -109
  75. package/framework/standards/backend/integrations/neon-auth/neon-auth.md +45 -3
  76. package/framework/templates/.idea/morph-templates.xml +92 -0
  77. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  78. package/framework/templates/IDE-SNIPPETS.md +262 -262
  79. package/framework/templates/REGISTRY.json +0 -62
  80. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
  81. package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
  82. package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
  83. package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
  84. package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -95
  85. package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
  86. package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
  87. package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
  88. package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -281
  89. package/framework/templates/code/dotnet/database/migration.cs +83 -83
  90. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
  91. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
  92. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
  93. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
  94. package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -58
  95. package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
  96. package/framework/templates/code/typescript/contracts.ts +167 -167
  97. package/framework/templates/docs/clarifications.md +253 -253
  98. package/framework/templates/docs/schema-analysis.md +119 -119
  99. package/framework/templates/docs/ui-components.md +52 -52
  100. package/framework/templates/docs/ui-design-system.md +76 -76
  101. package/framework/templates/docs/ui-flows.md +167 -167
  102. package/framework/templates/docs/ui-mockups.md +98 -98
  103. package/framework/templates/feature/decisions.md +122 -122
  104. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
  105. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
  106. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
  107. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
  108. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
  109. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
  110. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
  111. package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
  112. package/framework/templates/infrastructure/docker/docker-compose.template.yml +50 -50
  113. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  114. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  115. package/framework/templates/infrastructure/github/README.md +56 -56
  116. package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
  117. package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
  118. package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
  119. package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
  120. package/framework/templates/integrations/asaas-client.cs +387 -387
  121. package/framework/templates/integrations/asaas-webhook.cs +351 -351
  122. package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
  123. package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
  124. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
  125. package/framework/templates/project/validate.js +120 -120
  126. package/framework/templates/state.template.json +17 -17
  127. package/framework/templates/ui/design-system.css +226 -226
  128. package/package.json +1 -1
  129. package/src/commands/dashboard/dashboard.js +53 -53
  130. package/src/commands/index.js +13 -13
  131. package/src/commands/mcp/mcp-setup.js +519 -519
  132. package/src/commands/project/checkpoint.js +209 -209
  133. package/src/commands/project/doctor.js +4 -2
  134. package/src/commands/project/init.js +46 -2
  135. package/src/commands/project/update.js +5 -3
  136. package/src/commands/project/worktree.js +1005 -46
  137. package/src/commands/state/advance.js +17 -2
  138. package/src/commands/state/approve.js +18 -1
  139. package/src/commands/state/create.js +158 -14
  140. package/src/commands/state/retype.js +126 -0
  141. package/src/commands/state/score.js +4 -0
  142. package/src/commands/tasks/dag.js +32 -0
  143. package/src/commands/validation/index.js +1 -0
  144. package/src/commands/validation/validate-feature.js +33 -5
  145. package/src/commands/validation/verify.js +190 -0
  146. package/src/core/state/phase-state-machine.js +197 -197
  147. package/src/core/state/state-manager.js +35 -10
  148. package/src/core/templates/template-renderer.js +477 -477
  149. package/src/core/work-types.js +79 -0
  150. package/src/dashboard/app/components/DetailPanel.jsx +11 -11
  151. package/src/dashboard/app/components/FlowGraph.jsx +17 -17
  152. package/src/dashboard/app/components/SearchFilter.jsx +22 -22
  153. package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
  154. package/src/dashboard/app/main.jsx +13 -13
  155. package/src/dashboard/app/pages/AgentMap.jsx +370 -370
  156. package/src/dashboard/app/pages/HookInspector.jsx +418 -418
  157. package/src/dashboard/app/pages/LiveState.jsx +11 -1
  158. package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
  159. package/src/dashboard/app/pages/RulesMap.jsx +273 -273
  160. package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
  161. package/src/dashboard/app/pages/Standards.jsx +332 -332
  162. package/src/dashboard/app/styles/index.css +47 -47
  163. package/src/dashboard/index.html +12 -12
  164. package/src/dashboard/package.json +24 -24
  165. package/src/dashboard/scanner/hooks-scanner.js +41 -41
  166. package/src/dashboard/scanner/phases-scanner.js +15 -15
  167. package/src/dashboard/scanner/rubrics-scanner.js +12 -12
  168. package/src/dashboard/scanner/rules-scanner.js +37 -37
  169. package/src/dashboard/scanner/skills-scanner.js +43 -43
  170. package/src/dashboard/scanner/squads-scanner.js +13 -13
  171. package/src/dashboard/scanner/standards-scanner.js +26 -26
  172. package/src/dashboard/scanner/state-scanner.js +42 -0
  173. package/src/dashboard/vite-plugin-morph-data.js +17 -17
  174. package/src/dashboard/vite.config.js +24 -24
  175. package/src/lib/agents/metrics-aggregator.js +56 -56
  176. package/src/lib/agents/metrics-calculator.js +125 -125
  177. package/src/lib/agents/output-collector.js +73 -73
  178. package/src/lib/detectors/claude-config-detector.js +152 -152
  179. package/src/lib/detectors/design-system-detector.js +231 -231
  180. package/src/lib/detectors/index.js +217 -217
  181. package/src/lib/generators/architecture-scanner.js +639 -639
  182. package/src/lib/generators/design-system-generator.js +508 -508
  183. package/src/lib/generators/index.js +13 -13
  184. package/src/lib/generators/settings-generator.js +209 -209
  185. package/src/lib/hooks/hook-executor.js +167 -167
  186. package/src/lib/installers/mcp-installer.js +719 -719
  187. package/src/lib/installers/memory-installer.js +1 -1
  188. package/src/lib/risk-detector.js +16 -0
  189. package/src/lib/tasks/dispatch-planner.js +122 -4
  190. package/src/lib/tasks/mermaid-renderer.js +132 -0
  191. package/src/lib/tasks/task-classifier.js +30 -30
  192. package/src/lib/tasks/task-parser.js +209 -209
  193. package/src/lib/tasks/test-runner.js +27 -6
  194. package/src/lib/validators/architecture/architecture-validator.js +259 -259
  195. package/src/lib/validators/checkpoint-persistence.js +39 -39
  196. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -274
  197. package/src/lib/validators/css/css-validator.js +340 -340
  198. package/src/lib/validators/packages/package-validator.js +347 -347
  199. package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
  200. package/src/lib/validators/shared/issue-counter.js +14 -14
  201. package/src/lib/validators/validation-runner.js +349 -349
  202. package/src/lib/validators/verify-runner.js +322 -0
  203. package/src/lib/work-type-detector.js +143 -0
  204. package/src/scripts/setup-infra.js +32 -5
  205. package/src/utils/agent-id-mapper.js +11 -11
  206. package/src/utils/agents-installer.js +10 -6
  207. package/src/utils/claude-settings-manager.js +300 -300
  208. package/src/utils/file-copier.js +43 -0
  209. package/src/utils/hooks-installer.js +41 -11
  210. package/src/utils/skills-installer.js +174 -174
  211. package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  212. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  213. package/src/lib/tasks/wave-resolver.js +0 -353
@@ -1,205 +1,205 @@
1
- ---
2
- description: Validate project readiness before deploy — checks specs, contracts, tests, Docker, Neon/PostgreSQL, and Coolify configuration
3
- argument-hint: [feature-name]
4
- allowed-tools: Read, Bash, Glob, Grep
5
- ---
6
-
7
- # Pre-Flight Check for Deployment
8
-
9
- Validates project readiness before deploying to Docker/Coolify + Neon/PostgreSQL.
10
-
11
- ## Usage
12
-
13
- ```
14
- /morph-preflight
15
- ```
16
-
17
- ## Purpose
18
-
19
- Detect problems **before** deploy that would cause production failures. Saves time and avoids debugging in production.
20
-
21
- ---
22
-
23
- ## MORPH-SPEC Validation (run before all other checks)
24
-
25
- These checks verify that the morph-spec workflow is complete for the feature being deployed.
26
-
27
- ```bash
28
- # Verify implementation is complete
29
- morph-spec status {feature}
30
- morph-spec approval-status {feature}
31
- morph-spec validate {feature}
32
- ```
33
-
34
- | Check | Command | Pass Criteria |
35
- |-------|---------|---------------|
36
- | Phase is implement or later | `status` | phase derived as `implement` or `review` |
37
- | All gates approved | `approval-status` | proposal, plan, review gates all approved |
38
- | Feature validation passes | `validate` | 100% pass rate |
39
- | All tasks complete | `status` → tasks | 0 tasks in `pending` or `in_progress` |
40
- | Recap generated | Read `3-implement/recap.md` | File exists and is non-empty |
41
-
42
- **If any MORPH check fails:** Show which check failed and recommend: `Run /morph-apply {feature} to complete implementation before deploying.`
43
-
44
- ---
45
-
46
- ## Test Suite (run before infrastructure checks)
47
-
48
- ```bash
49
- dotnet test --verbosity normal
50
- ```
51
-
52
- **Pass criteria:** 100% test pass rate. Zero tolerance — any failing test blocks deployment.
53
-
54
- ---
55
-
56
- ## Validations Performed
57
-
58
- ### 1. Package Version Conflicts
59
-
60
- **What it checks:**
61
- - No version conflicts (NU1605, NU1608)
62
- - Critical packages with compatible versions
63
-
64
- **How to check:**
65
- ```bash
66
- dotnet restore --verbosity normal 2>&1 | grep -E "(NU1605|NU1608|warning)"
67
- ```
68
-
69
- ---
70
-
71
- ### 2. Database Migrations (Neon/PostgreSQL)
72
-
73
- **What it checks:**
74
- - Database is reachable
75
- - No pending migrations
76
- - RLS policies defined for all public tables
77
- - Database schema matches expected state
78
-
79
- **How to check:**
80
- ```bash
81
- # Step 0: Verify database connectivity
82
- psql "$(neonctl connection-string)" -c "SELECT 1" 2>/dev/null && \
83
- echo "✓ Database reachable" || \
84
- echo "✗ Database unreachable — skip remaining migration checks"
85
-
86
- # Check for pending migrations (skip if connectivity failed)
87
- neonctl branches diff <branch>
88
-
89
- # Verify RLS is enabled on all tables
90
- psql "$(neonctl connection-string)" -c "SELECT tablename FROM pg_tables WHERE schemaname='public' AND tablename NOT IN (SELECT tablename FROM pg_policies)"
91
- ```
92
-
93
- > **Important:** If the database connectivity check fails, skip all migration checks and warn the user. Do not block the preflight — the database may be intentionally scaled to zero.
94
-
95
- **Common fix:**
96
- ```bash
97
- dotnet ef migrations add <migration-name>
98
- ```
99
-
100
- ---
101
-
102
- ### 3. Dockerfile Validation
103
-
104
- **What it checks:**
105
- - Dockerfile exists for each service (API, Web)
106
- - Multi-stage build configured
107
- - EXPOSE ports correct
108
- - ENTRYPOINT defined
109
- - .dockerignore present
110
-
111
- **How to check:**
112
- ```bash
113
- # Validate API Dockerfile
114
- docker build --check -f Dockerfile.api .
115
-
116
- # Validate Web Dockerfile
117
- docker build --check -f Dockerfile.web .
118
- ```
119
-
120
- ---
121
-
122
- ### 4. Docker Compose
123
-
124
- **What it checks:**
125
- - `docker-compose.yml` exists and is valid
126
- - All services have health checks
127
- - Environment variables reference `.env` (not hardcoded)
128
- - Volumes mapped correctly
129
-
130
- **How to check:**
131
- ```bash
132
- docker compose config --quiet
133
- ```
134
-
135
- ---
136
-
137
- ### 5. Environment Variables & Secrets
138
-
139
- **What it checks:**
140
- - Connection strings not hardcoded in code
141
- - Secrets in environment variables (not in appsettings)
142
- - `.env.example` exists with all required vars documented
143
- - No credentials in source code
144
-
145
- **How to check:**
146
- ```bash
147
- # Detect passwords in appsettings
148
- grep -rE "(Password=|Pwd=|Secret=|sk_live|pk_live)" appsettings*.json src/ --include="*.cs" --include="*.json" | grep -v Development
149
-
150
- # Verify .env.example exists
151
- test -f .env.example && echo "OK" || echo "MISSING .env.example"
152
- ```
153
-
154
- ---
155
-
156
- ### 6. Coolify Configuration
157
-
158
- **What it checks:**
159
- - Application correctly defined in Coolify (source repo, Dockerfile path, port)
160
- - Health check endpoints exist (`/health` or `/healthz`)
161
- - Port mappings match Dockerfile EXPOSE
162
-
163
- **How to check:**
164
- ```bash
165
- # Verify health endpoint exists in code
166
- grep -rn "MapGet.*health" src/ --include="*.cs"
167
-
168
- # Verify Coolify config placeholders were filled in (local file only)
169
- grep -E "REPLACE_WITH_" coolify.json 2>/dev/null && echo "✗ coolify.json still has unfilled placeholders" || echo "✓ coolify.json configured"
170
- ```
171
-
172
- > Coolify has no MCP/CLI — its API is only reachable via SSH into the VPS. `morph-preflight` never does this itself; it only checks the project's local files. Live verification against the running instance is a manual step for whoever holds VPS access.
173
-
174
- ---
175
-
176
- ## Example Output
177
-
178
- ```
179
- MORPH Pre-Flight Check: Deployment
180
-
181
- Packages: No version conflicts detected
182
- Migrations: No pending changes
183
- Dockerfile: Valid multi-stage build (API + Web)
184
- Docker Compose: Valid configuration
185
- Secrets: No hardcoded credentials found
186
- Coolify: Health endpoint found at /healthz
187
-
188
- Summary: 6 passed, 0 failed, 0 warnings
189
-
190
- READY TO DEPLOY
191
- ```
192
-
193
- ---
194
-
195
- ## Usage Workflow
196
-
197
- ### Before creating PR for production
198
-
199
- ```bash
200
- /morph-preflight
201
- ```
202
-
203
- ---
204
-
205
- *MORPH-SPEC by Polymorphism Tech*
1
+ ---
2
+ description: Validate project readiness before deploy — checks specs, contracts, tests, Docker, Neon/PostgreSQL, and Coolify configuration
3
+ argument-hint: [feature-name]
4
+ allowed-tools: Read, Bash, Glob, Grep
5
+ ---
6
+
7
+ # Pre-Flight Check for Deployment
8
+
9
+ Validates project readiness before deploying to Docker/Coolify + Neon/PostgreSQL.
10
+
11
+ ## Usage
12
+
13
+ ```
14
+ /morph-preflight
15
+ ```
16
+
17
+ ## Purpose
18
+
19
+ Detect problems **before** deploy that would cause production failures. Saves time and avoids debugging in production.
20
+
21
+ ---
22
+
23
+ ## MORPH-SPEC Validation (run before all other checks)
24
+
25
+ These checks verify that the morph-spec workflow is complete for the feature being deployed.
26
+
27
+ ```bash
28
+ # Verify implementation is complete
29
+ morph-spec status {feature}
30
+ morph-spec approval-status {feature}
31
+ morph-spec validate {feature}
32
+ ```
33
+
34
+ | Check | Command | Pass Criteria |
35
+ |-------|---------|---------------|
36
+ | Phase is implement or later | `status` | phase derived as `implement` or `review` |
37
+ | All gates approved | `approval-status` | proposal, plan, review gates all approved |
38
+ | Feature validation passes | `validate` | 100% pass rate |
39
+ | All tasks complete | `status` → tasks | 0 tasks in `pending` or `in_progress` |
40
+ | Recap generated | Read `3-implement/recap.md` | File exists and is non-empty |
41
+
42
+ **If any MORPH check fails:** Show which check failed and recommend: `Run /morph-apply {feature} to complete implementation before deploying.`
43
+
44
+ ---
45
+
46
+ ## Test Suite (run before infrastructure checks)
47
+
48
+ ```bash
49
+ dotnet test --verbosity normal
50
+ ```
51
+
52
+ **Pass criteria:** 100% test pass rate. Zero tolerance — any failing test blocks deployment.
53
+
54
+ ---
55
+
56
+ ## Validations Performed
57
+
58
+ ### 1. Package Version Conflicts
59
+
60
+ **What it checks:**
61
+ - No version conflicts (NU1605, NU1608)
62
+ - Critical packages with compatible versions
63
+
64
+ **How to check:**
65
+ ```bash
66
+ dotnet restore --verbosity normal 2>&1 | grep -E "(NU1605|NU1608|warning)"
67
+ ```
68
+
69
+ ---
70
+
71
+ ### 2. Database Migrations (Neon/PostgreSQL)
72
+
73
+ **What it checks:**
74
+ - Database is reachable
75
+ - No pending migrations
76
+ - RLS policies defined for all public tables
77
+ - Database schema matches expected state
78
+
79
+ **How to check:**
80
+ ```bash
81
+ # Step 0: Verify database connectivity
82
+ psql "$(neonctl connection-string)" -c "SELECT 1" 2>/dev/null && \
83
+ echo "✓ Database reachable" || \
84
+ echo "✗ Database unreachable — skip remaining migration checks"
85
+
86
+ # Check for pending migrations (skip if connectivity failed)
87
+ neonctl branches diff <branch>
88
+
89
+ # Verify RLS is enabled on all tables
90
+ psql "$(neonctl connection-string)" -c "SELECT tablename FROM pg_tables WHERE schemaname='public' AND tablename NOT IN (SELECT tablename FROM pg_policies)"
91
+ ```
92
+
93
+ > **Important:** If the database connectivity check fails, skip all migration checks and warn the user. Do not block the preflight — the database may be intentionally scaled to zero.
94
+
95
+ **Common fix:**
96
+ ```bash
97
+ dotnet ef migrations add <migration-name>
98
+ ```
99
+
100
+ ---
101
+
102
+ ### 3. Dockerfile Validation
103
+
104
+ **What it checks:**
105
+ - Dockerfile exists for each service (API, Web)
106
+ - Multi-stage build configured
107
+ - EXPOSE ports correct
108
+ - ENTRYPOINT defined
109
+ - .dockerignore present
110
+
111
+ **How to check:**
112
+ ```bash
113
+ # Validate API Dockerfile
114
+ docker build --check -f Dockerfile.api .
115
+
116
+ # Validate Web Dockerfile
117
+ docker build --check -f Dockerfile.web .
118
+ ```
119
+
120
+ ---
121
+
122
+ ### 4. Docker Compose
123
+
124
+ **What it checks:**
125
+ - `docker-compose.yml` exists and is valid
126
+ - All services have health checks
127
+ - Environment variables reference `.env` (not hardcoded)
128
+ - Volumes mapped correctly
129
+
130
+ **How to check:**
131
+ ```bash
132
+ docker compose config --quiet
133
+ ```
134
+
135
+ ---
136
+
137
+ ### 5. Environment Variables & Secrets
138
+
139
+ **What it checks:**
140
+ - Connection strings not hardcoded in code
141
+ - Secrets in environment variables (not in appsettings)
142
+ - `.env.example` exists with all required vars documented
143
+ - No credentials in source code
144
+
145
+ **How to check:**
146
+ ```bash
147
+ # Detect passwords in appsettings
148
+ grep -rE "(Password=|Pwd=|Secret=|sk_live|pk_live)" appsettings*.json src/ --include="*.cs" --include="*.json" | grep -v Development
149
+
150
+ # Verify .env.example exists
151
+ test -f .env.example && echo "OK" || echo "MISSING .env.example"
152
+ ```
153
+
154
+ ---
155
+
156
+ ### 6. Coolify Configuration
157
+
158
+ **What it checks:**
159
+ - Application correctly defined in Coolify (source repo, Dockerfile path, port)
160
+ - Health check endpoints exist (`/health` or `/healthz`)
161
+ - Port mappings match Dockerfile EXPOSE
162
+
163
+ **How to check:**
164
+ ```bash
165
+ # Verify health endpoint exists in code
166
+ grep -rn "MapGet.*health" src/ --include="*.cs"
167
+
168
+ # Verify Coolify config placeholders were filled in (local file only)
169
+ grep -E "REPLACE_WITH_" coolify.json 2>/dev/null && echo "✗ coolify.json still has unfilled placeholders" || echo "✓ coolify.json configured"
170
+ ```
171
+
172
+ > Coolify has no MCP/CLI — its API is only reachable via SSH into the VPS. `morph-preflight` never does this itself; it only checks the project's local files. Live verification against the running instance is a manual step for whoever holds VPS access.
173
+
174
+ ---
175
+
176
+ ## Example Output
177
+
178
+ ```
179
+ MORPH Pre-Flight Check: Deployment
180
+
181
+ Packages: No version conflicts detected
182
+ Migrations: No pending changes
183
+ Dockerfile: Valid multi-stage build (API + Web)
184
+ Docker Compose: Valid configuration
185
+ Secrets: No hardcoded credentials found
186
+ Coolify: Health endpoint found at /healthz
187
+
188
+ Summary: 6 passed, 0 failed, 0 warnings
189
+
190
+ READY TO DEPLOY
191
+ ```
192
+
193
+ ---
194
+
195
+ ## Usage Workflow
196
+
197
+ ### Before creating PR for production
198
+
199
+ ```bash
200
+ /morph-preflight
201
+ ```
202
+
203
+ ---
204
+
205
+ *MORPH-SPEC by Polymorphism Tech*
@@ -1,124 +1,124 @@
1
- ---
2
- description: Find solutions for common .NET/Next.js development errors with root-cause analysis
3
- argument-hint: "[error-message]"
4
- allowed-tools: Read, Bash, Glob, Grep
5
- ---
6
-
7
- # Troubleshoot - Find Solutions for Errors
8
-
9
- Find solutions for common .NET/Next.js development errors and problems.
10
-
11
- ## Usage
12
-
13
- ```
14
- /morph-troubleshoot <error description or keywords>
15
- ```
16
-
17
- ## Examples
18
-
19
- ```bash
20
- /morph-troubleshoot DbContext second operation
21
- /morph-troubleshoot Include returns empty
22
- /morph-troubleshoot PendingModelChanges
23
- /morph-troubleshoot next/navigation error
24
- ```
25
-
26
- ## 3-Level Workflow
27
-
28
- ### Level 1: Search Standards (Primary)
29
-
30
- Search the known problems and standards files for matching patterns:
31
-
32
- ```bash
33
- # Search in framework standards
34
- Grep: "{keywords}" in framework/standards/ (glob: "*.md")
35
- Grep: "{keywords}" in .morph/framework/standards/ (glob: "*.md")
36
- ```
37
-
38
- Read matching files and extract the relevant solution sections.
39
-
40
- ### Level 2: Search Codebase (Automatic)
41
-
42
- If standards don't cover the issue, search the codebase for the error pattern:
43
-
44
- ```bash
45
- Grep: "{error pattern}" in src/ (glob: "*.cs,*.tsx,*.ts")
46
- ```
47
-
48
- Check if similar patterns exist elsewhere in the codebase that work correctly.
49
-
50
- ### Level 3: Web Search (If needed)
51
-
52
- **IMPORTANT:** If levels 1 and 2 don't find a solution, use Claude Code's native **WebSearch** tool to search the following sources:
53
-
54
- **Recommended queries:**
55
-
56
- ```
57
- # GitHub Issues (.NET)
58
- site:github.com/dotnet/aspnetcore {error}
59
- site:github.com/dotnet/efcore {error}
60
-
61
- # Stack Overflow
62
- site:stackoverflow.com [entity-framework-core] {error}
63
- site:stackoverflow.com [next.js] {error}
64
-
65
- # Microsoft Documentation
66
- site:learn.microsoft.com {error}
67
- ```
68
-
69
- **WebSearch usage example:**
70
-
71
- If the user asks about a SignalR error:
72
- 1. First: search standards/codebase via Grep
73
- 2. If not found: WebSearch with `site:github.com/dotnet/aspnetcore SignalR connection closed`
74
- 3. Return formatted relevant links
75
-
76
- ## Available Categories
77
-
78
- | Category | Description |
79
- |-----------|-----------|
80
- | `efcore` | Entity Framework Core, DbContext, migrations, queries |
81
- | `nextjs` | Next.js App Router, pages, components, routing |
82
- | `auth` | Authentication, authorization, tokens, claims |
83
- | `deploy` | Deployment, CI/CD, pipelines, containers |
84
-
85
- ## Output Format
86
-
87
- When finding a solution, present in the following format:
88
-
89
- ```
90
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
91
-
92
- 🔴 CRITICAL: {problem title}
93
-
94
- 📁 File: {path to file with solution}
95
- 📂 Section: {specific section}
96
-
97
- ❌ Error:
98
- {error pattern that identifies the problem}
99
-
100
- 💡 Cause:
101
- {root cause explanation}
102
-
103
- ✅ Solution:
104
- {code or steps to resolve}
105
-
106
- 📚 See full: open {file}
107
-
108
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
109
- ```
110
-
111
- ## Quick Troubleshooting
112
-
113
- ### Most Common Problems
114
-
115
- | Error | Quick Fix |
116
- |------|----------------|
117
- | `PendingModelChangesWarning` | `dotnet ef migrations add <Name>` before update |
118
- | `DbContext second operation` | Use `IDbContextFactory` for background tasks |
119
- | `Include()` empty | Use `HasMany(x => x.Nav)` instead of `HasMany<T>()` |
120
- | `next/navigation error` | Check App Router vs Pages Router usage |
121
-
122
- ---
123
-
124
- **Input:** $ARGUMENTS
1
+ ---
2
+ description: Find solutions for common .NET/Next.js development errors with root-cause analysis
3
+ argument-hint: "[error-message]"
4
+ allowed-tools: Read, Bash, Glob, Grep
5
+ ---
6
+
7
+ # Troubleshoot - Find Solutions for Errors
8
+
9
+ Find solutions for common .NET/Next.js development errors and problems.
10
+
11
+ ## Usage
12
+
13
+ ```
14
+ /morph-troubleshoot <error description or keywords>
15
+ ```
16
+
17
+ ## Examples
18
+
19
+ ```bash
20
+ /morph-troubleshoot DbContext second operation
21
+ /morph-troubleshoot Include returns empty
22
+ /morph-troubleshoot PendingModelChanges
23
+ /morph-troubleshoot next/navigation error
24
+ ```
25
+
26
+ ## 3-Level Workflow
27
+
28
+ ### Level 1: Search Standards (Primary)
29
+
30
+ Search the known problems and standards files for matching patterns:
31
+
32
+ ```bash
33
+ # Search in framework standards
34
+ Grep: "{keywords}" in framework/standards/ (glob: "*.md")
35
+ Grep: "{keywords}" in .morph/framework/standards/ (glob: "*.md")
36
+ ```
37
+
38
+ Read matching files and extract the relevant solution sections.
39
+
40
+ ### Level 2: Search Codebase (Automatic)
41
+
42
+ If standards don't cover the issue, search the codebase for the error pattern:
43
+
44
+ ```bash
45
+ Grep: "{error pattern}" in src/ (glob: "*.cs,*.tsx,*.ts")
46
+ ```
47
+
48
+ Check if similar patterns exist elsewhere in the codebase that work correctly.
49
+
50
+ ### Level 3: Web Search (If needed)
51
+
52
+ **IMPORTANT:** If levels 1 and 2 don't find a solution, use Claude Code's native **WebSearch** tool to search the following sources:
53
+
54
+ **Recommended queries:**
55
+
56
+ ```
57
+ # GitHub Issues (.NET)
58
+ site:github.com/dotnet/aspnetcore {error}
59
+ site:github.com/dotnet/efcore {error}
60
+
61
+ # Stack Overflow
62
+ site:stackoverflow.com [entity-framework-core] {error}
63
+ site:stackoverflow.com [next.js] {error}
64
+
65
+ # Microsoft Documentation
66
+ site:learn.microsoft.com {error}
67
+ ```
68
+
69
+ **WebSearch usage example:**
70
+
71
+ If the user asks about a SignalR error:
72
+ 1. First: search standards/codebase via Grep
73
+ 2. If not found: WebSearch with `site:github.com/dotnet/aspnetcore SignalR connection closed`
74
+ 3. Return formatted relevant links
75
+
76
+ ## Available Categories
77
+
78
+ | Category | Description |
79
+ |-----------|-----------|
80
+ | `efcore` | Entity Framework Core, DbContext, migrations, queries |
81
+ | `nextjs` | Next.js App Router, pages, components, routing |
82
+ | `auth` | Authentication, authorization, tokens, claims |
83
+ | `deploy` | Deployment, CI/CD, pipelines, containers |
84
+
85
+ ## Output Format
86
+
87
+ When finding a solution, present in the following format:
88
+
89
+ ```
90
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
91
+
92
+ 🔴 CRITICAL: {problem title}
93
+
94
+ 📁 File: {path to file with solution}
95
+ 📂 Section: {specific section}
96
+
97
+ ❌ Error:
98
+ {error pattern that identifies the problem}
99
+
100
+ 💡 Cause:
101
+ {root cause explanation}
102
+
103
+ ✅ Solution:
104
+ {code or steps to resolve}
105
+
106
+ 📚 See full: open {file}
107
+
108
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
109
+ ```
110
+
111
+ ## Quick Troubleshooting
112
+
113
+ ### Most Common Problems
114
+
115
+ | Error | Quick Fix |
116
+ |------|----------------|
117
+ | `PendingModelChangesWarning` | `dotnet ef migrations add <Name>` before update |
118
+ | `DbContext second operation` | Use `IDbContextFactory` for background tasks |
119
+ | `Include()` empty | Use `HasMany(x => x.Nav)` instead of `HasMany<T>()` |
120
+ | `next/navigation error` | Check App Router vs Pages Router usage |
121
+
122
+ ---
123
+
124
+ **Input:** $ARGUMENTS