@polymorphism-tech/morph-spec 4.8.10 → 4.8.12

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  > Spec-driven development framework for multi-stack projects. Turns feature requests into implementation-ready code through structured, AI-orchestrated phases.
4
4
 
5
5
  **Package:** `@polymorphism-tech/morph-spec`
6
- **Version:** 4.8.10
6
+ **Version:** 4.8.12
7
7
  **Requires:** Node.js 18+, Claude Code
8
8
 
9
9
  ---
@@ -376,4 +376,4 @@ Code generated by morph-spec (contracts, templates, implementation output) belon
376
376
 
377
377
  ---
378
378
 
379
- *morph-spec v4.8.10 by [Polymorphism Tech](https://polymorphism.tech)*
379
+ *morph-spec v4.8.12 by [Polymorphism Tech](https://polymorphism.tech)*
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "morph-spec",
3
- "version": "4.8.10",
3
+ "version": "4.8.12",
4
4
  "displayName": "MORPH-SPEC Framework",
5
5
  "description": "Spec-driven development with 38 agents and 8-phase workflow for .NET/Blazor/Next.js/Azure",
6
6
  "publisher": "polymorphism-tech",
@@ -200,4 +200,4 @@ These files are never edited directly. Use CLI commands or `morph-spec update` i
200
200
 
201
201
  ---
202
202
 
203
- *morph-spec v4.8.10 by Polymorphism Tech*
203
+ *morph-spec v4.8.12 by Polymorphism Tech*
@@ -203,4 +203,4 @@ morph-spec doctor
203
203
 
204
204
  ---
205
205
 
206
- *morph-spec v4.8.10 by Polymorphism Tech*
206
+ *morph-spec v4.8.12 by Polymorphism Tech*
@@ -7,7 +7,7 @@
7
7
  * Scope: Framework codebase only (dev hook)
8
8
  *
9
9
  * Blocks Write/Edit to files that contain hardcoded version patterns
10
- * like "MORPH-SPEC v4.8.10". Version should only be in package.json.
10
+ * like "MORPH-SPEC v4.8.12". Version should only be in package.json.
11
11
  *
12
12
  * Checked extensions: .md, .cs, .css, .js (covers templates + source)
13
13
  * Exceptions: CHANGELOG.md, node_modules/, test/, package.json, package-lock.json
@@ -11,8 +11,8 @@
11
11
  "install": {
12
12
  "autoInstall": true,
13
13
  "config": {
14
- "command": "npx",
15
- "args": ["-y", "@upstash/context7-mcp@latest"]
14
+ "command": "cmd",
15
+ "args": ["/c", "npx", "-y", "@upstash/context7-mcp@latest"]
16
16
  },
17
17
  "credentials": [],
18
18
  "prerequisites": [],
@@ -30,8 +30,8 @@
30
30
  "install": {
31
31
  "autoInstall": true,
32
32
  "config": {
33
- "command": "npx",
34
- "args": ["-y", "@playwright/mcp@latest"]
33
+ "command": "cmd",
34
+ "args": ["/c", "npx", "-y", "@playwright/mcp@latest"]
35
35
  },
36
36
  "credentials": [],
37
37
  "prerequisites": [],
@@ -49,8 +49,8 @@
49
49
  "install": {
50
50
  "autoInstall": false,
51
51
  "config": {
52
- "command": "npx",
53
- "args": ["-y", "@supabase/mcp-server-supabase"],
52
+ "command": "cmd",
53
+ "args": ["/c", "npx", "-y", "@supabase/mcp-server-supabase"],
54
54
  "env": {
55
55
  "SUPABASE_URL": "",
56
56
  "SUPABASE_SERVICE_ROLE_KEY": ""
@@ -85,8 +85,8 @@
85
85
  "install": {
86
86
  "autoInstall": false,
87
87
  "config": {
88
- "command": "npx",
89
- "args": ["-y", "@modelcontextprotocol/server-github"],
88
+ "command": "cmd",
89
+ "args": ["/c", "npx", "-y", "@modelcontextprotocol/server-github"],
90
90
  "env": {
91
91
  "GITHUB_PERSONAL_ACCESS_TOKEN": ""
92
92
  }
@@ -114,8 +114,8 @@
114
114
  "install": {
115
115
  "autoInstall": false,
116
116
  "config": {
117
- "command": "npx",
118
- "args": ["-y", "@anthropic/mcp-server-figma"],
117
+ "command": "cmd",
118
+ "args": ["/c", "npx", "-y", "@anthropic/mcp-server-figma"],
119
119
  "env": {
120
120
  "FIGMA_ACCESS_TOKEN": ""
121
121
  }
@@ -143,8 +143,8 @@
143
143
  "install": {
144
144
  "autoInstall": false,
145
145
  "config": {
146
- "command": "npx",
147
- "args": ["-y", "@modelcontextprotocol/server-docker"]
146
+ "command": "cmd",
147
+ "args": ["/c", "npx", "-y", "@modelcontextprotocol/server-docker"]
148
148
  },
149
149
  "credentials": [],
150
150
  "prerequisites": [
@@ -168,8 +168,8 @@
168
168
  "install": {
169
169
  "autoInstall": false,
170
170
  "config": {
171
- "command": "npx",
172
- "args": ["-y", "@azure/mcp-server"],
171
+ "command": "cmd",
172
+ "args": ["/c", "npx", "-y", "@azure/mcp-server"],
173
173
  "env": {
174
174
  "AZURE_SUBSCRIPTION_ID": ""
175
175
  }
@@ -250,6 +250,16 @@ For each detected integration with an available MCP:
250
250
 
251
251
  Only offer Figma, Docker, Azure if explicitly detected in `.env.example`.
252
252
 
253
+ > **Format rule:** Always write MCP entries using `cmd /c` format:
254
+ > ```json
255
+ > "mcp-name": {
256
+ > "command": "cmd",
257
+ > "args": ["/c", "npx", "-y", "@package/mcp-server"],
258
+ > "env": { "KEY": "VALUE" }
259
+ > }
260
+ > ```
261
+ > Never use `"command": "npx"` directly — it fails on Windows.
262
+
253
263
  ---
254
264
 
255
265
  ## Step 8 — Final Output
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 3 (Clarify). Reviews spec.md for ambiguities, gene
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.10"
7
+ cliVersion: "4.8.12"
8
8
  ---
9
9
 
10
10
  # MORPH Clarify - FASE 3
@@ -3,7 +3,7 @@ name: phase-codebase-analysis
3
3
  description: MORPH-SPEC Design sub-phase that analyzes existing codebase and database schema, producing schema-analysis.md with real column names, types, relationships, and field mismatches. Use at the start of Design phase before generating contracts.cs to prevent incorrect field names or types.
4
4
  user-invocable: false
5
5
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
- cliVersion: "4.8.10"
6
+ cliVersion: "4.8.12"
7
7
  ---
8
8
 
9
9
  # MORPH Codebase Analysis - Sub-fase de DESIGN
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 2 (Design). Analyzes codebase/schema, then produce
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.10"
7
+ cliVersion: "4.8.12"
8
8
  ---
9
9
 
10
10
  # MORPH Design - FASE 2
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  context: fork
7
7
  agent: general-purpose
8
8
  user-invocable: false
9
- cliVersion: "4.8.10"
9
+ cliVersion: "4.8.12"
10
10
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
11
11
  ---
12
12
 
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 1 (Setup). Reads project context, detects tech sta
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.10"
7
+ cliVersion: "4.8.12"
8
8
  ---
9
9
 
10
10
  # MORPH Setup - FASE 1
@@ -5,7 +5,7 @@ argument-hint: "[feature-name]"
5
5
  disable-model-invocation: true
6
6
  user-invocable: false
7
7
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
8
- cliVersion: "4.8.10"
8
+ cliVersion: "4.8.12"
9
9
  ---
10
10
 
11
11
  # MORPH Tasks - FASE 4
@@ -4,7 +4,7 @@ description: MORPH-SPEC Phase 1.5 (UI/UX). Creates design-system.md, mockups.md,
4
4
  argument-hint: "[feature-name]"
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
- cliVersion: "4.8.10"
7
+ cliVersion: "4.8.12"
8
8
  ---
9
9
 
10
10
  # MORPH UI/UX Design - FASE 1.5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polymorphism-tech/morph-spec",
3
- "version": "4.8.10",
3
+ "version": "4.8.12",
4
4
  "description": "MORPH-SPEC: AI-First development framework with validation pipeline and multi-stack support",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -15,7 +15,8 @@ import {
15
15
  pathExists,
16
16
  ensureDir,
17
17
  readJson,
18
- writeJson
18
+ writeJson,
19
+ updateGitignore
19
20
  } from '../../utils/file-copier.js';
20
21
  import {
21
22
  checkCLIOutdated,
@@ -52,12 +53,16 @@ async function backupUserConfig(morphPath) {
52
53
  * @param {string} targetPath - Project root path
53
54
  */
54
55
  async function cleanFrameworkDirs(morphPath, targetPath) {
56
+ const claudeDir = join(targetPath, '.claude');
55
57
  const dirsToClean = [
56
58
  join(morphPath, 'framework', 'templates'),
57
59
  join(morphPath, 'framework', 'standards'),
58
60
  join(morphPath, 'framework', 'hooks'),
59
61
  join(morphPath, 'config'),
60
- join(targetPath, '.claude')
62
+ join(claudeDir, 'commands'),
63
+ join(claudeDir, 'rules'),
64
+ join(claudeDir, 'skills'),
65
+ join(claudeDir, 'agents'),
61
66
  ];
62
67
 
63
68
  for (const dir of dirsToClean) {
@@ -311,6 +316,10 @@ export async function updateCommand(options) {
311
316
  await restoreUserConfig(morphPath, targetPath, configBackup, cliCheck.current);
312
317
  logger.dim(' ✓ User config restored with updated framework version');
313
318
 
319
+ // Update .gitignore with current morph rules
320
+ updateSpinner.text = 'Updating .gitignore...';
321
+ await updateGitignore(targetPath);
322
+
314
323
  // Update .morphversion
315
324
  updateSpinner.text = 'Saving version info...';
316
325
  await saveProjectMorphVersion(targetPath, cliCheck.current);
@@ -342,6 +351,7 @@ export async function updateCommand(options) {
342
351
  logger.dim(' ✓ .claude/CLAUDE.md (runtime quick reference)');
343
352
  logger.dim(' ✓ ~/.claude/statusline.sh (global statusline synced)');
344
353
  logger.dim(' ✓ CLAUDE.md');
354
+ logger.dim(' ✓ .gitignore (morph rules updated)');
345
355
  logger.blank();
346
356
  logger.info('Your config.json was preserved.');
347
357
  logger.dim('Review the updated files for any new features.');
@@ -98,16 +98,17 @@ export function checkPrerequisites(mcpEntry) {
98
98
 
99
99
  /**
100
100
  * Patch MCP config for the current platform.
101
- * On Windows, npx must be invoked via `cmd /C` to avoid ENOENT errors.
101
+ * On Windows, npx must be invoked via `cmd /c` to avoid ENOENT errors.
102
+ * Registry already stores cmd/c format; this handles legacy configs that still use npx directly.
102
103
  * @param {Object} config - MCP server config { command, args, env? }
103
104
  * @returns {Object} Patched config (new object, original unmodified)
104
105
  */
105
106
  export function patchConfigForPlatform(config) {
106
- if (process.platform !== 'win32' || config.command !== 'npx') return config;
107
+ if (config.command !== 'npx') return config;
107
108
  return {
108
109
  ...config,
109
110
  command: 'cmd',
110
- args: ['/C', 'npx', ...(config.args || [])]
111
+ args: ['/c', 'npx', ...(config.args || [])]
111
112
  };
112
113
  }
113
114
 
@@ -134,10 +134,14 @@ export async function updateGitignore(projectPath) {
134
134
  const morphRules = [
135
135
  '',
136
136
  '# MORPH-SPEC',
137
- '.morph/framework/templates/',
138
- '.morph/framework/hooks/',
137
+ '.morph/framework/',
139
138
  '.morph/memory/',
140
139
  '.morph/analytics/',
140
+ '.claude/commands/',
141
+ '.claude/rules/',
142
+ '.claude/skills/',
143
+ '.claude/agents/',
144
+ '.claude/CLAUDE.md',
141
145
  '.claude/settings.local.json',
142
146
  ''
143
147
  ];