@polymorphism-tech/morph-spec 7.7.3 β 7.8.1
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.
- package/README.md +2 -2
- package/bin/validate.js +379 -379
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +1 -1
- package/framework/MORPH.md +3 -2
- package/framework/agents.json +1 -1
- package/framework/commands/commit.md +166 -166
- package/framework/commands/morph-infra.md +215 -215
- package/framework/commands/morph-preflight.md +205 -205
- package/framework/commands/morph-troubleshoot.md +124 -124
- package/framework/evals/scenarios/dotnet-crud.yaml +1 -1
- package/framework/hooks/claude-code/statusline.py +679 -679
- package/framework/hooks/claude-code/statusline.sh +11 -11
- package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
- package/framework/hooks/git/pre-commit/agents.sh +25 -25
- package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
- package/framework/hooks/git/pre-commit/specs.sh +50 -50
- package/framework/hooks/git/pre-push/run-tests.sh +44 -44
- package/framework/hooks/shared/activity-logger.js +160 -160
- package/framework/hooks/shared/hook-response.js +45 -45
- package/framework/hooks/shared/payload-utils.js +78 -78
- package/framework/hooks/shared/stdin-reader.js +26 -26
- package/framework/rubrics/backend.json +41 -41
- package/framework/rules/ai-agents-standards.md +45 -45
- package/framework/rules/dotnet-templates.md +86 -87
- package/framework/rules/frontend-standards.md +13 -13
- package/framework/rules/infrastructure-standards.md +27 -27
- package/framework/rules/neon-standards.md +25 -25
- package/framework/rules/nextjs-standards.md +20 -20
- package/framework/rules/nextjs-templates.md +40 -40
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +1 -1
- package/framework/skills/core/morph-brainstorming/SKILL.md +9 -5
- package/framework/skills/core/morph-eval/SKILL.md +1 -1
- package/framework/skills/core/morph-implement/SKILL.md +1 -1
- package/framework/skills/core/morph-plan/SKILL.md +11 -6
- package/framework/skills/core/morph-proposal/SKILL.md +1 -1
- package/framework/skills/core/morph-review/SKILL.md +13 -7
- package/framework/skills/core/morph-stack-scan/SKILL.md +5 -5
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/standards/STANDARDS.json +1 -1
- package/framework/standards/ai-agents/agent-session.md +160 -160
- package/framework/standards/ai-agents/batching.md +193 -193
- package/framework/standards/ai-agents/context-providers.md +188 -188
- package/framework/standards/ai-agents/mcp-server.md +250 -250
- package/framework/standards/ai-agents/mcp-tools.md +197 -197
- package/framework/standards/ai-agents/middleware-patterns.md +207 -207
- package/framework/standards/ai-agents/modalities-image-gen.md +173 -173
- package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -171
- package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -181
- package/framework/standards/ai-agents/modalities-vision.md +201 -201
- package/framework/standards/ai-agents/multi-agent-patterns.md +155 -155
- package/framework/standards/ai-agents/production.md +275 -275
- package/framework/standards/ai-agents/prompts-in-db.md +214 -214
- package/framework/standards/ai-agents/providers/model-registry.md +158 -158
- package/framework/standards/ai-agents/service-tier-flex.md +135 -135
- package/framework/standards/ai-agents/structured-output.md +249 -249
- package/framework/standards/ai-agents/sweet-spot.md +109 -109
- package/framework/standards/architecture/vertical-slice/vertical-slice.md +34 -35
- package/framework/standards/backend/api/validation.md +2 -2
- package/framework/standards/backend/dotnet/scrutor.md +1 -3
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +42 -37
- package/framework/standards/data/nosql/cache/redis.md +2 -2
- package/framework/templates/CLAUDE.md.core.template +1 -1
- package/framework/templates/IDE-SNIPPETS.md +262 -262
- package/framework/templates/README.md +0 -1
- package/framework/templates/REGISTRY.json +0 -21
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
- package/framework/templates/code/dotnet/abstractions/handler.cs +0 -3
- package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
- package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
- package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
- package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -95
- package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
- package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
- package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
- package/framework/templates/code/dotnet/constants/api-tags.cs +1 -1
- package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -282
- package/framework/templates/code/dotnet/database/migration.cs +83 -83
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
- package/framework/templates/code/dotnet/feature/handler.cs.hbs +23 -24
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
- package/framework/templates/code/dotnet/jobs/job.cs +15 -15
- package/framework/templates/code/dotnet/test.cs +72 -101
- package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -58
- package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
- package/framework/templates/code/typescript/contracts.ts +167 -167
- package/framework/templates/docs/clarifications.md +253 -253
- package/framework/templates/docs/schema-analysis.md +119 -119
- package/framework/templates/docs/ui-components.md +52 -52
- package/framework/templates/docs/ui-design-system.md +76 -76
- package/framework/templates/docs/ui-flows.md +167 -167
- package/framework/templates/docs/ui-mockups.md +98 -98
- package/framework/templates/feature/decisions.md +122 -122
- package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
- package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
- package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
- package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
- package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
- package/framework/templates/infrastructure/docker/docker-compose.template.yml +50 -50
- package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
- package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
- package/framework/templates/infrastructure/github/README.md +56 -56
- package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
- package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
- package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
- package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
- package/framework/templates/integrations/asaas-client.cs +387 -387
- package/framework/templates/integrations/asaas-webhook.cs +351 -351
- package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
- package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
- package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +113 -113
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
- package/framework/templates/project/validate.js +120 -120
- package/framework/templates/state.template.json +17 -17
- package/framework/templates/ui/design-system.css +226 -226
- package/package.json +1 -1
- package/src/commands/dashboard/dashboard.js +53 -53
- package/src/commands/index.js +13 -13
- package/src/commands/mcp/mcp-setup.js +519 -519
- package/src/commands/project/checkpoint.js +209 -209
- package/src/commands/project/update.js +7 -4
- package/src/core/state/phase-state-machine.js +197 -197
- package/src/core/templates/template-renderer.js +477 -477
- package/src/dashboard/app/components/DetailPanel.jsx +11 -11
- package/src/dashboard/app/components/FlowGraph.jsx +17 -17
- package/src/dashboard/app/components/SearchFilter.jsx +22 -22
- package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
- package/src/dashboard/app/main.jsx +13 -13
- package/src/dashboard/app/pages/AgentMap.jsx +370 -370
- package/src/dashboard/app/pages/HookInspector.jsx +418 -418
- package/src/dashboard/app/pages/LiveState.jsx +239 -239
- package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
- package/src/dashboard/app/pages/RulesMap.jsx +273 -273
- package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
- package/src/dashboard/app/pages/Standards.jsx +332 -332
- package/src/dashboard/app/styles/index.css +47 -47
- package/src/dashboard/index.html +12 -12
- package/src/dashboard/package.json +24 -24
- package/src/dashboard/scanner/hooks-scanner.js +41 -41
- package/src/dashboard/scanner/phases-scanner.js +15 -15
- package/src/dashboard/scanner/rubrics-scanner.js +12 -12
- package/src/dashboard/scanner/rules-scanner.js +37 -37
- package/src/dashboard/scanner/skills-scanner.js +43 -43
- package/src/dashboard/scanner/squads-scanner.js +13 -13
- package/src/dashboard/scanner/standards-scanner.js +26 -26
- package/src/dashboard/vite-plugin-morph-data.js +17 -17
- package/src/dashboard/vite.config.js +24 -24
- package/src/lib/agents/metrics-aggregator.js +56 -56
- package/src/lib/agents/metrics-calculator.js +125 -125
- package/src/lib/agents/output-collector.js +73 -73
- package/src/lib/detectors/claude-config-detector.js +152 -152
- package/src/lib/detectors/design-system-detector.js +231 -231
- package/src/lib/detectors/index.js +217 -217
- package/src/lib/generators/architecture-scanner.js +639 -639
- package/src/lib/generators/design-system-generator.js +508 -508
- package/src/lib/generators/index.js +13 -13
- package/src/lib/generators/settings-generator.js +209 -209
- package/src/lib/hooks/hook-executor.js +167 -167
- package/src/lib/installers/mcp-installer.js +719 -719
- package/src/lib/tasks/task-classifier.js +30 -30
- package/src/lib/tasks/task-parser.js +209 -209
- package/src/lib/tasks/test-runner.js +81 -81
- package/src/lib/validators/architecture/architecture-validator.js +259 -259
- package/src/lib/validators/checkpoint-persistence.js +39 -39
- package/src/lib/validators/contracts/contract-compliance-validator.js +274 -274
- package/src/lib/validators/css/css-validator.js +340 -340
- package/src/lib/validators/packages/package-validator.js +347 -347
- package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
- package/src/lib/validators/shared/issue-counter.js +14 -14
- package/src/lib/validators/validation-runner.js +349 -349
- package/src/scripts/setup-infra.js +383 -383
- package/src/utils/agent-id-mapper.js +11 -11
- package/src/utils/banner.js +52 -43
- package/src/utils/claude-settings-manager.js +300 -300
- package/src/utils/skills-installer.js +172 -172
- package/framework/templates/.idea/morph-templates.xml +0 -92
- package/framework/templates/.vscode/morph-templates.code-snippets +0 -186
- package/framework/templates/code/dotnet/backend/repository.cs +0 -141
|
@@ -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
|
|
@@ -28,7 +28,7 @@ dimensions:
|
|
|
28
28
|
spec:
|
|
29
29
|
specificity: "API contracts with sealed record DTOs, Result<T> return types, FluentValidation rules, specific HTTP status codes"
|
|
30
30
|
data_model: "Product entity with all fields, EF Core configuration, Neon PostgreSQL constraints"
|
|
31
|
-
architecture: "VSA feature folders, IHandler pattern, Scrutor pipeline, IApiEndpoint discovery,
|
|
31
|
+
architecture: "VSA feature folders, IHandler pattern, Scrutor pipeline, IApiEndpoint discovery, ApplicationDbContext direto no slice (sem repository genΓ©rico)"
|
|
32
32
|
completeness: "All CRUD endpoints, pagination params (page/pageSize), search filters, error responses via Result<T>"
|
|
33
33
|
tasks:
|
|
34
34
|
granularity: "Each task 15-60 minutes, no mega-tasks"
|