@polymorphism-tech/morph-spec 2.3.0 → 3.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 (166) hide show
  1. package/CLAUDE.md +446 -1730
  2. package/README.md +515 -516
  3. package/bin/morph-spec.js +366 -294
  4. package/bin/task-manager.js +429 -368
  5. package/bin/validate.js +369 -268
  6. package/content/.claude/commands/morph-apply.md +221 -158
  7. package/content/.claude/commands/morph-deploy.md +529 -0
  8. package/content/.claude/commands/morph-preflight.md +227 -0
  9. package/content/.claude/commands/morph-proposal.md +122 -101
  10. package/content/.claude/commands/morph-status.md +86 -86
  11. package/content/.claude/commands/morph-troubleshoot.md +122 -0
  12. package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
  13. package/content/.claude/skills/level-0-meta/README.md +7 -0
  14. package/content/.claude/skills/level-0-meta/code-review.md +226 -0
  15. package/content/.claude/skills/level-0-meta/morph-checklist.md +117 -0
  16. package/content/.claude/skills/level-0-meta/simulation-checklist.md +77 -0
  17. package/content/.claude/skills/level-1-workflows/README.md +7 -0
  18. package/content/.claude/skills/level-1-workflows/morph-replicate.md +213 -0
  19. package/content/.claude/{commands/morph-clarify.md → skills/level-1-workflows/phase-clarify.md} +131 -184
  20. package/content/.claude/{commands/morph-design.md → skills/level-1-workflows/phase-design.md} +213 -275
  21. package/content/.claude/skills/level-1-workflows/phase-setup.md +106 -0
  22. package/content/.claude/skills/level-1-workflows/phase-tasks.md +164 -0
  23. package/content/.claude/{commands/morph-uiux.md → skills/level-1-workflows/phase-uiux.md} +169 -211
  24. package/content/.claude/skills/level-2-domains/README.md +14 -0
  25. package/content/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
  26. package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +197 -197
  27. package/content/.claude/skills/level-2-domains/architecture/standards-architect.md +156 -0
  28. package/content/.claude/skills/level-2-domains/backend/dotnet-senior.md +287 -0
  29. package/content/.claude/skills/level-2-domains/backend/ef-modeler.md +113 -0
  30. package/content/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
  31. package/content/.claude/skills/level-2-domains/backend/ms-agent-expert.md +109 -0
  32. package/content/.claude/skills/level-2-domains/frontend/blazor-builder.md +210 -0
  33. package/content/.claude/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
  34. package/content/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
  35. package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +142 -142
  36. package/content/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
  37. package/content/.claude/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
  38. package/content/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
  39. package/content/.claude/skills/level-2-domains/integrations/asaas-financial.md +130 -0
  40. package/content/.claude/skills/level-2-domains/integrations/azure-identity.md +142 -0
  41. package/content/.claude/skills/level-2-domains/integrations/clerk-auth.md +108 -0
  42. package/content/.claude/skills/level-2-domains/integrations/resend-email.md +119 -0
  43. package/content/.claude/skills/level-2-domains/quality/code-analyzer.md +235 -0
  44. package/content/.claude/skills/level-2-domains/quality/testing-specialist.md +126 -0
  45. package/content/.claude/skills/level-3-technologies/README.md +7 -0
  46. package/content/.claude/skills/level-4-patterns/README.md +7 -0
  47. package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
  48. package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
  49. package/content/.morph/config/agents.json +762 -242
  50. package/content/.morph/config/config.template.json +122 -108
  51. package/content/.morph/docs/workflows/design-impl.md +37 -0
  52. package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
  53. package/content/.morph/docs/workflows/fast-track.md +29 -0
  54. package/content/.morph/docs/workflows/full-morph.md +76 -0
  55. package/content/.morph/docs/workflows/standard.md +44 -0
  56. package/content/.morph/docs/workflows/ui-refresh.md +39 -0
  57. package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
  58. package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
  59. package/content/.morph/examples/scheduled-reports/spec.md +267 -0
  60. package/content/.morph/hooks/README.md +348 -239
  61. package/content/.morph/hooks/pre-commit-agents.sh +24 -24
  62. package/content/.morph/hooks/task-completed.js +73 -0
  63. package/content/.morph/hooks/teammate-idle.js +68 -0
  64. package/content/.morph/schemas/tasks.schema.json +220 -0
  65. package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
  66. package/content/.morph/standards/agent-framework-production.md +410 -0
  67. package/content/.morph/standards/agent-framework-setup.md +413 -453
  68. package/content/.morph/standards/agent-framework-workflows.md +349 -0
  69. package/content/.morph/standards/agent-teams-workflow.md +474 -0
  70. package/content/.morph/standards/architecture.md +325 -325
  71. package/content/.morph/standards/azure.md +605 -379
  72. package/content/.morph/standards/dotnet10-migration.md +520 -494
  73. package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
  74. package/content/.morph/templates/CONTEXT.md +170 -0
  75. package/content/.morph/templates/agent.cs +163 -172
  76. package/content/.morph/templates/clarify-questions.md +159 -0
  77. package/content/.morph/templates/contracts/Commands.cs +74 -0
  78. package/content/.morph/templates/contracts/Entities.cs +25 -0
  79. package/content/.morph/templates/contracts/Queries.cs +74 -0
  80. package/content/.morph/templates/contracts/README.md +74 -0
  81. package/content/.morph/templates/decisions.md +123 -106
  82. package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
  83. package/content/.morph/templates/infra/deploy-checklist.md +426 -0
  84. package/content/.morph/templates/proposal.md +141 -155
  85. package/content/.morph/templates/recap.md +94 -105
  86. package/content/.morph/templates/simulation.md +353 -0
  87. package/content/.morph/templates/spec.md +149 -148
  88. package/content/.morph/templates/state.template.json +222 -222
  89. package/content/.morph/templates/tasks.md +257 -235
  90. package/content/.morph/templates/ui-components.md +362 -276
  91. package/content/CLAUDE.md +150 -442
  92. package/detectors/structure-detector.js +245 -250
  93. package/docs/README.md +144 -149
  94. package/docs/getting-started.md +301 -302
  95. package/docs/installation.md +361 -361
  96. package/docs/validation-checklist.md +265 -266
  97. package/package.json +80 -80
  98. package/src/commands/advance-phase.js +266 -0
  99. package/src/commands/analyze-blazor-concurrency.js +193 -0
  100. package/src/commands/deploy.js +780 -0
  101. package/src/commands/detect-agents.js +167 -0
  102. package/src/commands/doctor.js +356 -280
  103. package/src/commands/generate-context.js +40 -0
  104. package/src/commands/init.js +258 -245
  105. package/src/commands/lint-fluent.js +352 -0
  106. package/src/commands/rollback-phase.js +185 -0
  107. package/src/commands/session-summary.js +291 -0
  108. package/src/commands/task.js +78 -75
  109. package/src/commands/troubleshoot.js +222 -0
  110. package/src/commands/update.js +192 -159
  111. package/src/commands/validate-blazor-state.js +210 -0
  112. package/src/commands/validate-blazor.js +156 -0
  113. package/src/commands/validate-css.js +84 -0
  114. package/src/commands/validate-phase.js +221 -0
  115. package/src/lib/blazor-concurrency-analyzer.js +288 -0
  116. package/src/lib/blazor-state-validator.js +291 -0
  117. package/src/lib/blazor-validator.js +374 -0
  118. package/src/lib/complexity-analyzer.js +441 -292
  119. package/src/lib/context-generator.js +513 -0
  120. package/src/lib/continuous-validator.js +421 -440
  121. package/src/lib/css-validator.js +352 -0
  122. package/src/lib/decision-constraint-loader.js +109 -0
  123. package/src/lib/design-system-detector.js +187 -0
  124. package/src/lib/design-system-scaffolder.js +299 -0
  125. package/src/lib/hook-executor.js +256 -0
  126. package/src/lib/recap-generator.js +205 -0
  127. package/src/lib/spec-validator.js +258 -0
  128. package/src/lib/standards-context-injector.js +287 -0
  129. package/src/lib/state-manager.js +397 -340
  130. package/src/lib/team-orchestrator.js +322 -0
  131. package/src/lib/troubleshoot-grep.js +194 -0
  132. package/src/lib/troubleshoot-index.js +144 -0
  133. package/src/lib/validation-runner.js +283 -0
  134. package/src/lib/validators/contract-compliance-validator.js +273 -0
  135. package/src/lib/validators/design-system-validator.js +231 -0
  136. package/src/utils/file-copier.js +187 -139
  137. package/content/.claude/commands/morph-costs.md +0 -206
  138. package/content/.claude/commands/morph-setup.md +0 -100
  139. package/content/.claude/commands/morph-tasks.md +0 -319
  140. package/content/.claude/skills/infra/bicep-architect.md +0 -419
  141. package/content/.claude/skills/infra/container-specialist.md +0 -437
  142. package/content/.claude/skills/infra/devops-engineer.md +0 -405
  143. package/content/.claude/skills/integrations/asaas-financial.md +0 -333
  144. package/content/.claude/skills/integrations/azure-identity.md +0 -309
  145. package/content/.claude/skills/integrations/clerk-auth.md +0 -290
  146. package/content/.claude/skills/specialists/ai-system-architect.md +0 -604
  147. package/content/.claude/skills/specialists/cost-guardian.md +0 -110
  148. package/content/.claude/skills/specialists/ef-modeler.md +0 -211
  149. package/content/.claude/skills/specialists/hangfire-orchestrator.md +0 -255
  150. package/content/.claude/skills/specialists/ms-agent-expert.md +0 -263
  151. package/content/.claude/skills/specialists/standards-architect.md +0 -78
  152. package/content/.claude/skills/specialists/ui-ux-designer.md +0 -1100
  153. package/content/.claude/skills/stacks/dotnet-blazor.md +0 -606
  154. package/content/.claude/skills/stacks/dotnet-nextjs.md +0 -402
  155. package/content/.claude/skills/stacks/shopify.md +0 -445
  156. package/content/.morph/config/azure-pricing.json +0 -70
  157. package/content/.morph/config/azure-pricing.schema.json +0 -50
  158. package/content/.morph/hooks/pre-commit-costs.sh +0 -91
  159. package/docs/api/cost-calculator.js.html +0 -513
  160. package/docs/api/design-system-generator.js.html +0 -382
  161. package/docs/api/global.html +0 -5263
  162. package/docs/api/index.html +0 -96
  163. package/docs/api/state-manager.js.html +0 -423
  164. package/src/commands/cost.js +0 -181
  165. package/src/commands/update-pricing.js +0 -206
  166. package/src/lib/cost-calculator.js +0 -429
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * TaskCompleted Hook - Claude Code Agent Teams
5
+ *
6
+ * Triggered when a task is marked as completed.
7
+ * Validates the task deliverables before allowing the task to be marked done.
8
+ *
9
+ * Usage (from Claude Code hooks):
10
+ * task-completed.js <feature-name> <task-id> [--dry-run] [--verbose]
11
+ *
12
+ * Exit codes:
13
+ * 0 - All validators passed
14
+ * 1 - Validation failed and blocked
15
+ * 2 - Configuration error
16
+ */
17
+
18
+ import { executeHook, formatHookResults } from '../../../src/lib/hook-executor.js';
19
+ import { fileURLToPath } from 'url';
20
+ import { dirname, join } from 'path';
21
+
22
+ const __filename = fileURLToPath(import.meta.url);
23
+ const __dirname = dirname(__filename);
24
+
25
+ // Get project root (3 levels up from hooks dir)
26
+ const projectPath = join(__dirname, '../../..');
27
+
28
+ async function main() {
29
+ const args = process.argv.slice(2);
30
+
31
+ if (args.length < 2) {
32
+ console.error('Usage: task-completed.js <feature-name> <task-id> [--dry-run] [--verbose]');
33
+ process.exit(2);
34
+ }
35
+
36
+ const featureName = args[0];
37
+ const taskId = args[1];
38
+ const dryRun = args.includes('--dry-run');
39
+ const verbose = args.includes('--verbose');
40
+
41
+ console.log('🔔 TaskCompleted Hook Triggered');
42
+ console.log(` Feature: ${featureName}`);
43
+ console.log(` Task: ${taskId}`);
44
+ console.log(` Event: Task marked complete, validating deliverables...\n`);
45
+
46
+ try {
47
+ const results = await executeHook(projectPath, featureName, 'TaskCompleted', {
48
+ dryRun,
49
+ verbose
50
+ });
51
+
52
+ const output = formatHookResults(results, 'TaskCompleted');
53
+ console.log(output);
54
+
55
+ if (results.blocked) {
56
+ console.log('\n💡 TIP: Fix the errors above before the task can be marked complete.');
57
+ console.log(` Run: morph-spec task done ${featureName} ${taskId} --skip-validation`);
58
+ console.log(' (Not recommended - only use if you know what you\'re doing)');
59
+ process.exit(1);
60
+ }
61
+
62
+ console.log('\n✅ Task deliverables validated successfully.');
63
+ process.exit(0);
64
+ } catch (err) {
65
+ console.error(`\n❌ Hook execution error: ${err.message}`);
66
+ if (verbose) {
67
+ console.error(err.stack);
68
+ }
69
+ process.exit(2);
70
+ }
71
+ }
72
+
73
+ main();
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * TeammateIdle Hook - Claude Code Agent Teams
5
+ *
6
+ * Triggered when a teammate is idle and waiting for next instructions.
7
+ * Validates the teammate's recent work before allowing them to proceed.
8
+ *
9
+ * Usage (from Claude Code hooks):
10
+ * teammate-idle.js <feature-name> [--dry-run] [--verbose]
11
+ *
12
+ * Exit codes:
13
+ * 0 - All validators passed
14
+ * 1 - Validation failed and blocked
15
+ * 2 - Configuration error
16
+ */
17
+
18
+ import { executeHook, formatHookResults } from '../../../src/lib/hook-executor.js';
19
+ import { fileURLToPath } from 'url';
20
+ import { dirname, join } from 'path';
21
+
22
+ const __filename = fileURLToPath(import.meta.url);
23
+ const __dirname = dirname(__filename);
24
+
25
+ // Get project root (3 levels up from hooks dir)
26
+ const projectPath = join(__dirname, '../../..');
27
+
28
+ async function main() {
29
+ const args = process.argv.slice(2);
30
+
31
+ if (args.length === 0) {
32
+ console.error('Usage: teammate-idle.js <feature-name> [--dry-run] [--verbose]');
33
+ process.exit(2);
34
+ }
35
+
36
+ const featureName = args[0];
37
+ const dryRun = args.includes('--dry-run');
38
+ const verbose = args.includes('--verbose');
39
+
40
+ console.log('🔔 TeammateIdle Hook Triggered');
41
+ console.log(` Feature: ${featureName}`);
42
+ console.log(` Event: Teammate is idle, validating recent work...\n`);
43
+
44
+ try {
45
+ const results = await executeHook(projectPath, featureName, 'TeammateIdle', {
46
+ dryRun,
47
+ verbose
48
+ });
49
+
50
+ const output = formatHookResults(results, 'TeammateIdle');
51
+ console.log(output);
52
+
53
+ if (results.blocked) {
54
+ console.log('\n💡 TIP: Fix the errors above before the teammate can proceed.');
55
+ process.exit(1);
56
+ }
57
+
58
+ process.exit(0);
59
+ } catch (err) {
60
+ console.error(`\n❌ Hook execution error: ${err.message}`);
61
+ if (verbose) {
62
+ console.error(err.stack);
63
+ }
64
+ process.exit(2);
65
+ }
66
+ }
67
+
68
+ main();
@@ -0,0 +1,220 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://morph-spec.dev/schemas/tasks.schema.json",
4
+ "title": "MORPH-SPEC Tasks Schema",
5
+ "description": "Schema for tasks.json files in MORPH-SPEC features",
6
+ "type": "object",
7
+ "required": ["version", "feature", "tasks"],
8
+ "properties": {
9
+ "version": {
10
+ "type": "string",
11
+ "description": "Schema version",
12
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
13
+ "examples": ["3.0.0"]
14
+ },
15
+ "feature": {
16
+ "type": "string",
17
+ "description": "Feature name (kebab-case)",
18
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
19
+ "examples": ["scheduled-reports", "user-auth"]
20
+ },
21
+ "createdAt": {
22
+ "type": "string",
23
+ "format": "date-time",
24
+ "description": "Creation timestamp"
25
+ },
26
+ "updatedAt": {
27
+ "type": "string",
28
+ "format": "date-time",
29
+ "description": "Last update timestamp"
30
+ },
31
+ "summary": {
32
+ "type": "object",
33
+ "description": "Task summary statistics",
34
+ "properties": {
35
+ "total": { "type": "integer", "minimum": 0 },
36
+ "completed": { "type": "integer", "minimum": 0 },
37
+ "inProgress": { "type": "integer", "minimum": 0 },
38
+ "pending": { "type": "integer", "minimum": 0 },
39
+ "blocked": { "type": "integer", "minimum": 0 }
40
+ }
41
+ },
42
+ "tasks": {
43
+ "type": "array",
44
+ "description": "List of tasks",
45
+ "items": {
46
+ "$ref": "#/definitions/task"
47
+ }
48
+ },
49
+ "checkpoints": {
50
+ "type": "array",
51
+ "description": "Checkpoint definitions",
52
+ "items": {
53
+ "$ref": "#/definitions/checkpoint"
54
+ }
55
+ }
56
+ },
57
+ "definitions": {
58
+ "task": {
59
+ "type": "object",
60
+ "required": ["id", "title", "status"],
61
+ "properties": {
62
+ "id": {
63
+ "type": "string",
64
+ "description": "Task ID (format: T001, T002, etc.)",
65
+ "pattern": "^T\\d{3}$",
66
+ "examples": ["T001", "T002", "T010"]
67
+ },
68
+ "title": {
69
+ "type": "string",
70
+ "description": "Task title (short description)",
71
+ "maxLength": 100,
72
+ "examples": ["Create ScheduledReport entity"]
73
+ },
74
+ "description": {
75
+ "type": "string",
76
+ "description": "Detailed task description"
77
+ },
78
+ "status": {
79
+ "type": "string",
80
+ "enum": ["pending", "in_progress", "completed", "blocked", "skipped"],
81
+ "description": "Current task status"
82
+ },
83
+ "type": {
84
+ "type": "string",
85
+ "enum": ["entity", "command", "query", "handler", "service", "component", "page", "test", "migration", "config", "infra", "docs"],
86
+ "description": "Type of task"
87
+ },
88
+ "priority": {
89
+ "type": "string",
90
+ "enum": ["low", "medium", "high", "critical"],
91
+ "description": "Task priority"
92
+ },
93
+ "dependencies": {
94
+ "type": "array",
95
+ "description": "IDs of tasks that must be completed first",
96
+ "items": {
97
+ "type": "string",
98
+ "pattern": "^T\\d{3}$"
99
+ },
100
+ "examples": [["T001", "T002"]]
101
+ },
102
+ "files": {
103
+ "type": "array",
104
+ "description": "Files to be created or modified",
105
+ "items": {
106
+ "type": "string"
107
+ },
108
+ "examples": [["Domain/Entities/ScheduledReport.cs", "Infrastructure/Persistence/Config/ScheduledReportConfig.cs"]]
109
+ },
110
+ "checkpoint": {
111
+ "type": "string",
112
+ "description": "Checkpoint ID this task belongs to",
113
+ "pattern": "^CP\\d{3}$"
114
+ },
115
+ "estimatedLines": {
116
+ "type": "integer",
117
+ "description": "Estimated lines of code",
118
+ "minimum": 0
119
+ },
120
+ "actualLines": {
121
+ "type": "integer",
122
+ "description": "Actual lines of code (after completion)",
123
+ "minimum": 0
124
+ },
125
+ "completedAt": {
126
+ "type": "string",
127
+ "format": "date-time",
128
+ "description": "Completion timestamp"
129
+ },
130
+ "notes": {
131
+ "type": "string",
132
+ "description": "Additional notes or comments"
133
+ },
134
+ "blockedReason": {
135
+ "type": "string",
136
+ "description": "Reason for blocked status"
137
+ }
138
+ }
139
+ },
140
+ "checkpoint": {
141
+ "type": "object",
142
+ "required": ["id", "name"],
143
+ "properties": {
144
+ "id": {
145
+ "type": "string",
146
+ "description": "Checkpoint ID",
147
+ "pattern": "^CP\\d{3}$",
148
+ "examples": ["CP001", "CP002"]
149
+ },
150
+ "name": {
151
+ "type": "string",
152
+ "description": "Checkpoint name",
153
+ "examples": ["Entity Layer Complete", "Backend Complete"]
154
+ },
155
+ "afterTasks": {
156
+ "type": "array",
157
+ "description": "Task IDs after which this checkpoint triggers",
158
+ "items": {
159
+ "type": "string",
160
+ "pattern": "^T\\d{3}$"
161
+ }
162
+ },
163
+ "validation": {
164
+ "type": "array",
165
+ "description": "Validation steps for this checkpoint",
166
+ "items": {
167
+ "type": "string"
168
+ },
169
+ "examples": [["Run tests", "Build project", "Review code"]]
170
+ }
171
+ }
172
+ }
173
+ },
174
+ "examples": [
175
+ {
176
+ "version": "3.0.0",
177
+ "feature": "scheduled-reports",
178
+ "createdAt": "2024-01-15T10:00:00Z",
179
+ "summary": {
180
+ "total": 9,
181
+ "completed": 0,
182
+ "inProgress": 0,
183
+ "pending": 9,
184
+ "blocked": 0
185
+ },
186
+ "tasks": [
187
+ {
188
+ "id": "T001",
189
+ "title": "Create ScheduledReport entity",
190
+ "status": "pending",
191
+ "type": "entity",
192
+ "priority": "high",
193
+ "files": [
194
+ "Domain/Entities/ScheduledReport.cs",
195
+ "Infrastructure/Persistence/Config/ScheduledReportConfig.cs"
196
+ ],
197
+ "estimatedLines": 100
198
+ },
199
+ {
200
+ "id": "T002",
201
+ "title": "Create CreateReportCommand + Handler",
202
+ "status": "pending",
203
+ "type": "command",
204
+ "dependencies": ["T001"],
205
+ "files": [
206
+ "Application/Features/Reports/Commands/CreateReportCommand.cs"
207
+ ]
208
+ }
209
+ ],
210
+ "checkpoints": [
211
+ {
212
+ "id": "CP001",
213
+ "name": "Entity Layer Complete",
214
+ "afterTasks": ["T001", "T002", "T003"],
215
+ "validation": ["Build project", "Run unit tests"]
216
+ }
217
+ ]
218
+ }
219
+ ]
220
+ }