@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
@@ -1,222 +1,222 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "title": "MORPH-SPEC State Schema",
4
- "description": "Schema for tracking project state, features, and progress in MORPH-SPEC framework",
5
- "type": "object",
6
- "properties": {
7
- "version": {
8
- "type": "string",
9
- "description": "MORPH-SPEC framework version",
10
- "pattern": "^\\d+\\.\\d+\\.\\d+$"
11
- },
12
- "project": {
13
- "type": "object",
14
- "description": "Project information",
15
- "properties": {
16
- "name": {
17
- "type": "string",
18
- "description": "Project name"
19
- },
20
- "type": {
21
- "type": "string",
22
- "enum": ["blazor-server", "nextjs", "shopify"],
23
- "description": "Primary stack type"
24
- },
25
- "createdAt": {
26
- "type": ["string", "null"],
27
- "format": "date-time",
28
- "description": "Project creation timestamp"
29
- },
30
- "updatedAt": {
31
- "type": ["string", "null"],
32
- "format": "date-time",
33
- "description": "Last update timestamp"
34
- }
35
- },
36
- "required": ["name", "type"]
37
- },
38
- "features": {
39
- "type": "object",
40
- "description": "Dictionary of features by name",
41
- "patternProperties": {
42
- "^[a-z0-9-]+$": {
43
- "type": "object",
44
- "properties": {
45
- "status": {
46
- "type": "string",
47
- "enum": ["draft", "in_review", "approved", "in_progress", "done", "archived"],
48
- "description": "Current feature status"
49
- },
50
- "phase": {
51
- "type": "string",
52
- "enum": ["proposal", "setup", "ui-ux-design", "design", "clarify", "tasks", "implement"],
53
- "description": "Current workflow phase"
54
- },
55
- "createdAt": {
56
- "type": "string",
57
- "format": "date-time"
58
- },
59
- "updatedAt": {
60
- "type": "string",
61
- "format": "date-time"
62
- },
63
- "activeAgents": {
64
- "type": "array",
65
- "description": "List of currently active agent IDs",
66
- "items": {
67
- "type": "string"
68
- }
69
- },
70
- "outputs": {
71
- "type": "object",
72
- "description": "Generated outputs for this feature",
73
- "properties": {
74
- "proposal": {
75
- "type": "object",
76
- "properties": {
77
- "created": { "type": "boolean" },
78
- "path": { "type": "string" }
79
- }
80
- },
81
- "spec": {
82
- "type": "object",
83
- "properties": {
84
- "created": { "type": "boolean" },
85
- "path": { "type": "string" }
86
- }
87
- },
88
- "contracts": {
89
- "type": "object",
90
- "properties": {
91
- "created": { "type": "boolean" },
92
- "path": { "type": "string" }
93
- }
94
- },
95
- "tasks": {
96
- "type": "object",
97
- "properties": {
98
- "created": { "type": "boolean" },
99
- "path": { "type": "string" }
100
- }
101
- },
102
- "uiDesignSystem": {
103
- "type": "object",
104
- "properties": {
105
- "created": { "type": "boolean" },
106
- "path": { "type": "string" }
107
- }
108
- },
109
- "uiMockups": {
110
- "type": "object",
111
- "properties": {
112
- "created": { "type": "boolean" },
113
- "path": { "type": "string" }
114
- }
115
- },
116
- "uiComponents": {
117
- "type": "object",
118
- "properties": {
119
- "created": { "type": "boolean" },
120
- "path": { "type": "string" }
121
- }
122
- },
123
- "uiFlows": {
124
- "type": "object",
125
- "properties": {
126
- "created": { "type": "boolean" },
127
- "path": { "type": "string" }
128
- }
129
- },
130
- "decisions": {
131
- "type": "object",
132
- "properties": {
133
- "created": { "type": "boolean" },
134
- "path": { "type": "string" }
135
- }
136
- },
137
- "recap": {
138
- "type": "object",
139
- "properties": {
140
- "created": { "type": "boolean" },
141
- "path": { "type": "string" }
142
- }
143
- }
144
- }
145
- },
146
- "tasks": {
147
- "type": "object",
148
- "description": "Task progress counters",
149
- "properties": {
150
- "total": { "type": "integer", "minimum": 0 },
151
- "completed": { "type": "integer", "minimum": 0 },
152
- "inProgress": { "type": "integer", "minimum": 0 },
153
- "pending": { "type": "integer", "minimum": 0 }
154
- }
155
- },
156
- "checkpoints": {
157
- "type": "array",
158
- "description": "List of checkpoints recorded",
159
- "items": {
160
- "type": "object",
161
- "properties": {
162
- "timestamp": {
163
- "type": "string",
164
- "format": "date-time"
165
- },
166
- "phase": { "type": "string" },
167
- "completedTasks": { "type": "integer" },
168
- "note": { "type": "string" }
169
- },
170
- "required": ["timestamp", "phase", "completedTasks"]
171
- }
172
- },
173
- "costs": {
174
- "type": "object",
175
- "description": "Cost tracking information",
176
- "properties": {
177
- "estimated": {
178
- "type": "number",
179
- "description": "Estimated monthly cost in USD"
180
- },
181
- "approved": { "type": "boolean" },
182
- "approvedBy": { "type": "string" },
183
- "approvedAt": {
184
- "type": ["string", "null"],
185
- "format": "date-time"
186
- }
187
- }
188
- }
189
- },
190
- "required": ["status", "phase", "createdAt", "updatedAt", "activeAgents", "outputs", "tasks"]
191
- }
192
- }
193
- },
194
- "metadata": {
195
- "type": "object",
196
- "description": "Global project metadata",
197
- "properties": {
198
- "totalFeatures": {
199
- "type": "integer",
200
- "description": "Total number of features ever created"
201
- },
202
- "completedFeatures": {
203
- "type": "integer",
204
- "description": "Number of completed features"
205
- },
206
- "totalCostEstimated": {
207
- "type": "number",
208
- "description": "Sum of all estimated costs"
209
- },
210
- "totalTimeSpent": {
211
- "type": "number",
212
- "description": "Total hours spent on all features"
213
- },
214
- "lastUpdated": {
215
- "type": ["string", "null"],
216
- "format": "date-time"
217
- }
218
- }
219
- }
220
- },
221
- "required": ["version", "project", "features", "metadata"]
222
- }
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "MORPH-SPEC State Schema",
4
+ "description": "Schema for tracking project state, features, and progress in MORPH-SPEC framework",
5
+ "type": "object",
6
+ "properties": {
7
+ "version": {
8
+ "type": "string",
9
+ "description": "MORPH-SPEC framework version",
10
+ "pattern": "^\\d+\\.\\d+\\.\\d+$"
11
+ },
12
+ "project": {
13
+ "type": "object",
14
+ "description": "Project information",
15
+ "properties": {
16
+ "name": {
17
+ "type": "string",
18
+ "description": "Project name"
19
+ },
20
+ "type": {
21
+ "type": "string",
22
+ "enum": ["blazor-server", "nextjs"],
23
+ "description": "Primary stack type"
24
+ },
25
+ "createdAt": {
26
+ "type": ["string", "null"],
27
+ "format": "date-time",
28
+ "description": "Project creation timestamp"
29
+ },
30
+ "updatedAt": {
31
+ "type": ["string", "null"],
32
+ "format": "date-time",
33
+ "description": "Last update timestamp"
34
+ }
35
+ },
36
+ "required": ["name", "type"]
37
+ },
38
+ "features": {
39
+ "type": "object",
40
+ "description": "Dictionary of features by name",
41
+ "patternProperties": {
42
+ "^[a-z0-9-]+$": {
43
+ "type": "object",
44
+ "properties": {
45
+ "status": {
46
+ "type": "string",
47
+ "enum": ["draft", "in_review", "approved", "in_progress", "done", "archived"],
48
+ "description": "Current feature status"
49
+ },
50
+ "phase": {
51
+ "type": "string",
52
+ "enum": ["proposal", "setup", "ui-ux-design", "design", "clarify", "tasks", "implement"],
53
+ "description": "Current workflow phase"
54
+ },
55
+ "createdAt": {
56
+ "type": "string",
57
+ "format": "date-time"
58
+ },
59
+ "updatedAt": {
60
+ "type": "string",
61
+ "format": "date-time"
62
+ },
63
+ "activeAgents": {
64
+ "type": "array",
65
+ "description": "List of currently active agent IDs",
66
+ "items": {
67
+ "type": "string"
68
+ }
69
+ },
70
+ "outputs": {
71
+ "type": "object",
72
+ "description": "Generated outputs for this feature",
73
+ "properties": {
74
+ "proposal": {
75
+ "type": "object",
76
+ "properties": {
77
+ "created": { "type": "boolean" },
78
+ "path": { "type": "string" }
79
+ }
80
+ },
81
+ "spec": {
82
+ "type": "object",
83
+ "properties": {
84
+ "created": { "type": "boolean" },
85
+ "path": { "type": "string" }
86
+ }
87
+ },
88
+ "contracts": {
89
+ "type": "object",
90
+ "properties": {
91
+ "created": { "type": "boolean" },
92
+ "path": { "type": "string" }
93
+ }
94
+ },
95
+ "tasks": {
96
+ "type": "object",
97
+ "properties": {
98
+ "created": { "type": "boolean" },
99
+ "path": { "type": "string" }
100
+ }
101
+ },
102
+ "uiDesignSystem": {
103
+ "type": "object",
104
+ "properties": {
105
+ "created": { "type": "boolean" },
106
+ "path": { "type": "string" }
107
+ }
108
+ },
109
+ "uiMockups": {
110
+ "type": "object",
111
+ "properties": {
112
+ "created": { "type": "boolean" },
113
+ "path": { "type": "string" }
114
+ }
115
+ },
116
+ "uiComponents": {
117
+ "type": "object",
118
+ "properties": {
119
+ "created": { "type": "boolean" },
120
+ "path": { "type": "string" }
121
+ }
122
+ },
123
+ "uiFlows": {
124
+ "type": "object",
125
+ "properties": {
126
+ "created": { "type": "boolean" },
127
+ "path": { "type": "string" }
128
+ }
129
+ },
130
+ "decisions": {
131
+ "type": "object",
132
+ "properties": {
133
+ "created": { "type": "boolean" },
134
+ "path": { "type": "string" }
135
+ }
136
+ },
137
+ "recap": {
138
+ "type": "object",
139
+ "properties": {
140
+ "created": { "type": "boolean" },
141
+ "path": { "type": "string" }
142
+ }
143
+ }
144
+ }
145
+ },
146
+ "tasks": {
147
+ "type": "object",
148
+ "description": "Task progress counters",
149
+ "properties": {
150
+ "total": { "type": "integer", "minimum": 0 },
151
+ "completed": { "type": "integer", "minimum": 0 },
152
+ "inProgress": { "type": "integer", "minimum": 0 },
153
+ "pending": { "type": "integer", "minimum": 0 }
154
+ }
155
+ },
156
+ "checkpoints": {
157
+ "type": "array",
158
+ "description": "List of checkpoints recorded",
159
+ "items": {
160
+ "type": "object",
161
+ "properties": {
162
+ "timestamp": {
163
+ "type": "string",
164
+ "format": "date-time"
165
+ },
166
+ "phase": { "type": "string" },
167
+ "completedTasks": { "type": "integer" },
168
+ "note": { "type": "string" }
169
+ },
170
+ "required": ["timestamp", "phase", "completedTasks"]
171
+ }
172
+ },
173
+ "costs": {
174
+ "type": "object",
175
+ "description": "Cost tracking information",
176
+ "properties": {
177
+ "estimated": {
178
+ "type": "number",
179
+ "description": "Estimated monthly cost in USD"
180
+ },
181
+ "approved": { "type": "boolean" },
182
+ "approvedBy": { "type": "string" },
183
+ "approvedAt": {
184
+ "type": ["string", "null"],
185
+ "format": "date-time"
186
+ }
187
+ }
188
+ }
189
+ },
190
+ "required": ["status", "phase", "createdAt", "updatedAt", "activeAgents", "outputs", "tasks"]
191
+ }
192
+ }
193
+ },
194
+ "metadata": {
195
+ "type": "object",
196
+ "description": "Global project metadata",
197
+ "properties": {
198
+ "totalFeatures": {
199
+ "type": "integer",
200
+ "description": "Total number of features ever created"
201
+ },
202
+ "completedFeatures": {
203
+ "type": "integer",
204
+ "description": "Number of completed features"
205
+ },
206
+ "totalCostEstimated": {
207
+ "type": "number",
208
+ "description": "Sum of all estimated costs"
209
+ },
210
+ "totalTimeSpent": {
211
+ "type": "number",
212
+ "description": "Total hours spent on all features"
213
+ },
214
+ "lastUpdated": {
215
+ "type": ["string", "null"],
216
+ "format": "date-time"
217
+ }
218
+ }
219
+ }
220
+ },
221
+ "required": ["version", "project", "features", "metadata"]
222
+ }