@devtrack-solution/codesdd 1.2.3 → 1.2.4-rc3

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 (139) hide show
  1. package/.sdd/skills/curated/devtrack-api/SKILL.md +12 -5
  2. package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +8 -0
  3. package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +8 -0
  4. package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +8 -0
  5. package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +8 -0
  6. package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +8 -0
  7. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -2
  8. package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +10 -0
  9. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +2 -2
  10. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +55 -0
  11. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +13 -13
  12. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +2 -3
  13. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +1 -1
  14. package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +41 -0
  15. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +7 -9
  16. package/README.md +159 -5
  17. package/dist/applications/sdd/index.d.ts +16 -0
  18. package/dist/applications/sdd/index.js +16 -0
  19. package/dist/commands/config.js +171 -10
  20. package/dist/commands/sdd/execution.js +345 -15
  21. package/dist/commands/sdd/plugin.js +5 -0
  22. package/dist/commands/sdd/shared.d.ts +1 -0
  23. package/dist/commands/sdd/shared.js +10 -0
  24. package/dist/commands/sdd.js +38 -3
  25. package/dist/core/cli/command-matrix.js +9 -0
  26. package/dist/core/cli-command-quality.js +9 -0
  27. package/dist/core/completions/command-registry.js +45 -0
  28. package/dist/core/config-schema.d.ts +18 -1
  29. package/dist/core/config-schema.js +48 -5
  30. package/dist/core/global-config.d.ts +16 -0
  31. package/dist/core/sdd/agent-binding.d.ts +10 -10
  32. package/dist/core/sdd/agent-runtime-contract.d.ts +204 -0
  33. package/dist/core/sdd/agent-runtime-contract.js +200 -0
  34. package/dist/core/sdd/check.d.ts +2 -0
  35. package/dist/core/sdd/check.js +40 -2
  36. package/dist/core/sdd/coordination/coordination-adapters.d.ts +15 -8
  37. package/dist/core/sdd/coordination/coordination-adapters.js +43 -15
  38. package/dist/core/sdd/coordination/index.d.ts +1 -0
  39. package/dist/core/sdd/coordination/index.js +1 -0
  40. package/dist/core/sdd/coordination/redis-runtime.d.ts +131 -0
  41. package/dist/core/sdd/coordination/redis-runtime.js +698 -0
  42. package/dist/core/sdd/deepagent-contracts.d.ts +98 -4
  43. package/dist/core/sdd/deepagent-contracts.js +62 -0
  44. package/dist/core/sdd/default-bootstrap-files.d.ts +2 -2
  45. package/dist/core/sdd/default-bootstrap-files.js +14 -8
  46. package/dist/core/sdd/default-skills.js +108 -4
  47. package/dist/core/sdd/devtrack-api-appliance.d.ts +8 -1
  48. package/dist/core/sdd/devtrack-api-appliance.js +46 -23
  49. package/dist/core/sdd/docs-sync.js +21 -15
  50. package/dist/core/sdd/domain/capability-diff.d.ts +63 -0
  51. package/dist/core/sdd/domain/capability-diff.js +200 -0
  52. package/dist/core/sdd/domain/change-safety-guardrails.d.ts +74 -0
  53. package/dist/core/sdd/domain/change-safety-guardrails.js +333 -0
  54. package/dist/core/sdd/domain/semantic-intent-classifier.d.ts +29 -0
  55. package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
  56. package/dist/core/sdd/foundation-artifact-map-validator.d.ts +16 -0
  57. package/dist/core/sdd/foundation-artifact-map-validator.js +71 -0
  58. package/dist/core/sdd/foundation-layer-manifest.d.ts +24 -0
  59. package/dist/core/sdd/foundation-layer-manifest.js +117 -0
  60. package/dist/core/sdd/intent-guard.d.ts +22 -0
  61. package/dist/core/sdd/intent-guard.js +67 -0
  62. package/dist/core/sdd/json-schema.js +9 -1
  63. package/dist/core/sdd/legacy-operations.js +76 -1
  64. package/dist/core/sdd/migrate-workspace.js +39 -0
  65. package/dist/core/sdd/package-security-gates.d.ts +21 -0
  66. package/dist/core/sdd/package-security-gates.js +119 -0
  67. package/dist/core/sdd/package-structure-gate.js +3 -8
  68. package/dist/core/sdd/parallel-feat-automation.d.ts +181 -3
  69. package/dist/core/sdd/parallel-feat-automation.js +212 -0
  70. package/dist/core/sdd/plugin-broker.d.ts +223 -4
  71. package/dist/core/sdd/plugin-broker.js +10 -0
  72. package/dist/core/sdd/plugin-cli.d.ts +30 -0
  73. package/dist/core/sdd/plugin-cli.js +70 -3
  74. package/dist/core/sdd/plugin-evidence.d.ts +73 -0
  75. package/dist/core/sdd/plugin-manifest.d.ts +69 -1
  76. package/dist/core/sdd/plugin-manifest.js +10 -0
  77. package/dist/core/sdd/plugin-policy-pack.d.ts +1 -1
  78. package/dist/core/sdd/plugin-registry.d.ts +141 -5
  79. package/dist/core/sdd/plugin-sdk-contract.d.ts +363 -0
  80. package/dist/core/sdd/plugin-sdk-contract.js +268 -0
  81. package/dist/core/sdd/plugin-skill-binding.d.ts +1 -1
  82. package/dist/core/sdd/quality-validation.d.ts +84 -11
  83. package/dist/core/sdd/release-readiness.d.ts +19 -0
  84. package/dist/core/sdd/release-readiness.js +472 -0
  85. package/dist/core/sdd/runtime-boundary-contract.d.ts +45 -0
  86. package/dist/core/sdd/runtime-boundary-contract.js +90 -0
  87. package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +150 -0
  88. package/dist/core/sdd/sdk-agent-plugin-quality-gates.js +258 -0
  89. package/dist/core/sdd/services/agent-run.service.d.ts +38 -6
  90. package/dist/core/sdd/services/agent-run.service.js +73 -1
  91. package/dist/core/sdd/services/capability-diff.service.d.ts +18 -0
  92. package/dist/core/sdd/services/capability-diff.service.js +26 -0
  93. package/dist/core/sdd/services/change-safety-preflight.service.d.ts +17 -0
  94. package/dist/core/sdd/services/change-safety-preflight.service.js +17 -0
  95. package/dist/core/sdd/services/context.service.d.ts +43 -340
  96. package/dist/core/sdd/services/context.service.js +323 -9
  97. package/dist/core/sdd/services/finalize.service.d.ts +25 -0
  98. package/dist/core/sdd/services/finalize.service.js +178 -16
  99. package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
  100. package/dist/core/sdd/services/semantic-intent-classifier.service.d.ts +6 -0
  101. package/dist/core/sdd/services/semantic-intent-classifier.service.js +7 -0
  102. package/dist/core/sdd/state.d.ts +1 -0
  103. package/dist/core/sdd/state.js +251 -29
  104. package/dist/core/sdd/store/sdd-stores.js +2 -2
  105. package/dist/core/sdd/structural-health.d.ts +13 -13
  106. package/dist/core/sdd/types.d.ts +27 -12
  107. package/dist/core/sdd/types.js +4 -0
  108. package/dist/core/sdd/views.js +17 -0
  109. package/dist/core/sdd/workspace-schemas.d.ts +387 -7
  110. package/dist/core/sdd/workspace-schemas.js +196 -64
  111. package/dist/domains/sdd/index.d.ts +6 -0
  112. package/dist/domains/sdd/index.js +6 -0
  113. package/dist/infrastructures/sdd/index.d.ts +7 -0
  114. package/dist/infrastructures/sdd/index.js +6 -0
  115. package/dist/presentations/cli/sdd/index.d.ts +3 -0
  116. package/dist/presentations/cli/sdd/index.js +3 -0
  117. package/dist/shared/sdd/index.d.ts +3 -0
  118. package/dist/shared/sdd/index.js +2 -0
  119. package/package.json +9 -6
  120. package/schemas/sdd/2-plan.schema.json +207 -2
  121. package/schemas/sdd/5-quality.schema.json +281 -25
  122. package/schemas/sdd/agent-runtime-command-plan.schema.json +212 -0
  123. package/schemas/sdd/agent-runtime-opencode-run-evidence.schema.json +270 -0
  124. package/schemas/sdd/codesdd-plugin.schema.json +171 -0
  125. package/schemas/sdd/deepagent-run-request.schema.json +316 -0
  126. package/schemas/sdd/parallel-feat-automation-plan.schema.json +89 -0
  127. package/schemas/sdd/parallel-feat-scheduler-request.schema.json +116 -0
  128. package/schemas/sdd/parallel-feat-scheduler-result.schema.json +404 -0
  129. package/schemas/sdd/plugin-artifact-manifest.schema.json +109 -0
  130. package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
  131. package/schemas/sdd/plugin-evidence-manifest.schema.json +109 -0
  132. package/schemas/sdd/plugin-language-runtime.schema.json +103 -0
  133. package/schemas/sdd/plugin-package-governance.schema.json +74 -0
  134. package/schemas/sdd/plugin-registry.schema.json +171 -0
  135. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +109 -0
  136. package/schemas/sdd/quality-evidence-bundle.schema.json +109 -0
  137. package/schemas/sdd/sdk-agent-plugin-quality-gate-input.schema.json +168 -0
  138. package/schemas/sdd/sdk-agent-plugin-quality-gate-report.schema.json +160 -0
  139. package/schemas/sdd/workspace-catalog.schema.json +3776 -398
@@ -0,0 +1,404 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schema_version": {
6
+ "type": "number",
7
+ "const": 1
8
+ },
9
+ "generated_at": {
10
+ "type": "string",
11
+ "format": "date-time",
12
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
13
+ },
14
+ "status": {
15
+ "type": "string",
16
+ "enum": [
17
+ "ready",
18
+ "blocked",
19
+ "empty"
20
+ ]
21
+ },
22
+ "plan": {
23
+ "type": "object",
24
+ "properties": {
25
+ "schema_version": {
26
+ "type": "number",
27
+ "const": 1
28
+ },
29
+ "generated_at": {
30
+ "type": "string",
31
+ "format": "date-time",
32
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
33
+ },
34
+ "status": {
35
+ "type": "string",
36
+ "enum": [
37
+ "ready",
38
+ "blocked",
39
+ "empty"
40
+ ]
41
+ },
42
+ "max_agents": {
43
+ "type": "integer",
44
+ "exclusiveMinimum": 0,
45
+ "maximum": 9007199254740991
46
+ },
47
+ "state_boundary": {
48
+ "type": "object",
49
+ "properties": {
50
+ "id": {
51
+ "type": "string",
52
+ "const": "codesdd-canonical-sdd-state"
53
+ },
54
+ "canonical_state_glob": {
55
+ "type": "string",
56
+ "const": ".sdd/state/*.yaml"
57
+ },
58
+ "project_state_root": {
59
+ "type": "string",
60
+ "const": ".sdd"
61
+ },
62
+ "hidden_state_allowed": {
63
+ "type": "boolean",
64
+ "const": false
65
+ },
66
+ "external_state_allowed": {
67
+ "type": "boolean",
68
+ "const": false
69
+ }
70
+ },
71
+ "required": [
72
+ "id",
73
+ "canonical_state_glob",
74
+ "project_state_root",
75
+ "hidden_state_allowed",
76
+ "external_state_allowed"
77
+ ],
78
+ "additionalProperties": false
79
+ },
80
+ "write_policy": {
81
+ "type": "object",
82
+ "properties": {
83
+ "allowed_root": {
84
+ "type": "string",
85
+ "const": ".sdd"
86
+ },
87
+ "canonical_state_glob": {
88
+ "type": "string",
89
+ "const": ".sdd/state/*.yaml"
90
+ },
91
+ "hidden_state_allowed": {
92
+ "type": "boolean",
93
+ "const": false
94
+ },
95
+ "external_state_allowed": {
96
+ "type": "boolean",
97
+ "const": false
98
+ }
99
+ },
100
+ "required": [
101
+ "allowed_root",
102
+ "canonical_state_glob",
103
+ "hidden_state_allowed",
104
+ "external_state_allowed"
105
+ ],
106
+ "additionalProperties": false
107
+ },
108
+ "rules": {
109
+ "default": [],
110
+ "type": "array",
111
+ "items": {
112
+ "type": "string",
113
+ "minLength": 1
114
+ }
115
+ },
116
+ "waves": {
117
+ "default": [],
118
+ "type": "array",
119
+ "items": {
120
+ "type": "object",
121
+ "properties": {
122
+ "wave_index": {
123
+ "type": "integer",
124
+ "exclusiveMinimum": 0,
125
+ "maximum": 9007199254740991
126
+ },
127
+ "max_parallel": {
128
+ "type": "integer",
129
+ "exclusiveMinimum": 0,
130
+ "maximum": 9007199254740991
131
+ },
132
+ "status": {
133
+ "type": "string",
134
+ "enum": [
135
+ "ready",
136
+ "blocked"
137
+ ]
138
+ },
139
+ "conflicts": {
140
+ "default": [],
141
+ "type": "array",
142
+ "items": {
143
+ "type": "string"
144
+ }
145
+ },
146
+ "steps": {
147
+ "default": [],
148
+ "type": "array",
149
+ "items": {
150
+ "type": "object",
151
+ "properties": {
152
+ "feature_ref": {
153
+ "type": "string",
154
+ "pattern": "^FEAT-\\d{4}$"
155
+ },
156
+ "title": {
157
+ "type": "string",
158
+ "minLength": 3
159
+ },
160
+ "sequence": {
161
+ "type": "integer",
162
+ "exclusiveMinimum": 0,
163
+ "maximum": 9007199254740991
164
+ },
165
+ "delegation": {
166
+ "type": "object",
167
+ "properties": {
168
+ "mode": {
169
+ "type": "string",
170
+ "enum": [
171
+ "local-codex",
172
+ "agent-adapter"
173
+ ]
174
+ },
175
+ "provider": {
176
+ "type": "string",
177
+ "enum": [
178
+ "codex",
179
+ "opencode",
180
+ "claude-code",
181
+ "cloudcode",
182
+ "deepagents",
183
+ "fake"
184
+ ]
185
+ }
186
+ },
187
+ "required": [
188
+ "mode"
189
+ ],
190
+ "additionalProperties": false
191
+ },
192
+ "commands": {
193
+ "minItems": 1,
194
+ "type": "array",
195
+ "items": {
196
+ "type": "string",
197
+ "minLength": 1
198
+ }
199
+ },
200
+ "commit_boundary": {
201
+ "type": "object",
202
+ "properties": {
203
+ "clean_worktree_required": {
204
+ "type": "boolean"
205
+ },
206
+ "finalize_before_commit": {
207
+ "type": "boolean"
208
+ },
209
+ "commit_per_feature": {
210
+ "type": "boolean"
211
+ },
212
+ "commit_message": {
213
+ "type": "string",
214
+ "minLength": 1
215
+ }
216
+ },
217
+ "required": [
218
+ "clean_worktree_required",
219
+ "finalize_before_commit",
220
+ "commit_per_feature",
221
+ "commit_message"
222
+ ],
223
+ "additionalProperties": false
224
+ },
225
+ "state_boundary_ref": {
226
+ "type": "string",
227
+ "const": "codesdd-canonical-sdd-state"
228
+ },
229
+ "allowed_state_writes": {
230
+ "minItems": 1,
231
+ "type": "array",
232
+ "items": {
233
+ "type": "string",
234
+ "minLength": 1
235
+ }
236
+ },
237
+ "forbidden_state_writes": {
238
+ "default": [
239
+ ".codesdd/**",
240
+ "external-context/**"
241
+ ],
242
+ "type": "array",
243
+ "items": {
244
+ "type": "string",
245
+ "minLength": 1
246
+ }
247
+ },
248
+ "evidence_required": {
249
+ "default": [],
250
+ "type": "array",
251
+ "items": {
252
+ "type": "string",
253
+ "minLength": 1
254
+ }
255
+ }
256
+ },
257
+ "required": [
258
+ "feature_ref",
259
+ "title",
260
+ "sequence",
261
+ "delegation",
262
+ "commands",
263
+ "commit_boundary",
264
+ "state_boundary_ref",
265
+ "allowed_state_writes",
266
+ "forbidden_state_writes",
267
+ "evidence_required"
268
+ ],
269
+ "additionalProperties": false
270
+ }
271
+ }
272
+ },
273
+ "required": [
274
+ "wave_index",
275
+ "max_parallel",
276
+ "status",
277
+ "conflicts",
278
+ "steps"
279
+ ],
280
+ "additionalProperties": false
281
+ }
282
+ },
283
+ "summary": {
284
+ "type": "object",
285
+ "properties": {
286
+ "feature_count": {
287
+ "type": "integer",
288
+ "minimum": 0,
289
+ "maximum": 9007199254740991
290
+ },
291
+ "wave_count": {
292
+ "type": "integer",
293
+ "minimum": 0,
294
+ "maximum": 9007199254740991
295
+ },
296
+ "blocked_wave_count": {
297
+ "type": "integer",
298
+ "minimum": 0,
299
+ "maximum": 9007199254740991
300
+ }
301
+ },
302
+ "required": [
303
+ "feature_count",
304
+ "wave_count",
305
+ "blocked_wave_count"
306
+ ],
307
+ "additionalProperties": false
308
+ }
309
+ },
310
+ "required": [
311
+ "schema_version",
312
+ "generated_at",
313
+ "status",
314
+ "max_agents",
315
+ "state_boundary",
316
+ "write_policy",
317
+ "rules",
318
+ "waves",
319
+ "summary"
320
+ ],
321
+ "additionalProperties": false
322
+ },
323
+ "blocked_features": {
324
+ "default": [],
325
+ "type": "array",
326
+ "items": {
327
+ "type": "object",
328
+ "properties": {
329
+ "feature_ref": {
330
+ "type": "string",
331
+ "pattern": "^FEAT-\\d{4}$"
332
+ },
333
+ "blocked_by": {
334
+ "default": [],
335
+ "type": "array",
336
+ "items": {
337
+ "type": "string",
338
+ "pattern": "^FEAT-\\d{4}$"
339
+ }
340
+ },
341
+ "reason": {
342
+ "type": "string",
343
+ "minLength": 1
344
+ }
345
+ },
346
+ "required": [
347
+ "feature_ref",
348
+ "blocked_by",
349
+ "reason"
350
+ ],
351
+ "additionalProperties": false
352
+ }
353
+ },
354
+ "summary": {
355
+ "type": "object",
356
+ "properties": {
357
+ "feature_count": {
358
+ "type": "integer",
359
+ "minimum": 0,
360
+ "maximum": 9007199254740991
361
+ },
362
+ "scheduled_feature_count": {
363
+ "type": "integer",
364
+ "minimum": 0,
365
+ "maximum": 9007199254740991
366
+ },
367
+ "done_feature_count": {
368
+ "type": "integer",
369
+ "minimum": 0,
370
+ "maximum": 9007199254740991
371
+ },
372
+ "blocked_feature_count": {
373
+ "type": "integer",
374
+ "minimum": 0,
375
+ "maximum": 9007199254740991
376
+ },
377
+ "wave_count": {
378
+ "type": "integer",
379
+ "minimum": 0,
380
+ "maximum": 9007199254740991
381
+ }
382
+ },
383
+ "required": [
384
+ "feature_count",
385
+ "scheduled_feature_count",
386
+ "done_feature_count",
387
+ "blocked_feature_count",
388
+ "wave_count"
389
+ ],
390
+ "additionalProperties": false
391
+ }
392
+ },
393
+ "required": [
394
+ "schema_version",
395
+ "generated_at",
396
+ "status",
397
+ "plan",
398
+ "blocked_features",
399
+ "summary"
400
+ ],
401
+ "additionalProperties": false,
402
+ "title": "CodeSDD Parallel FEAT Scheduler Result",
403
+ "description": "Machine-readable scheduler result linking chained FEAT waves, blocked dependencies, and the execution plan."
404
+ }
@@ -91,6 +91,115 @@
91
91
  },
92
92
  "content_type": {
93
93
  "type": "string"
94
+ },
95
+ "artifact_kind": {
96
+ "type": "string",
97
+ "enum": [
98
+ "source",
99
+ "test",
100
+ "documentation",
101
+ "configuration",
102
+ "schema",
103
+ "evidence",
104
+ "migration",
105
+ "asset",
106
+ "package-metadata"
107
+ ]
108
+ },
109
+ "role": {
110
+ "type": "string",
111
+ "enum": [
112
+ "interface",
113
+ "type",
114
+ "implementation",
115
+ "abstraction",
116
+ "business-object",
117
+ "value-object",
118
+ "entity",
119
+ "repository-port",
120
+ "use-case",
121
+ "service",
122
+ "handler",
123
+ "adapter",
124
+ "mapper",
125
+ "module",
126
+ "controller",
127
+ "dto",
128
+ "validator",
129
+ "policy",
130
+ "manifest",
131
+ "fixture",
132
+ "test",
133
+ "documentation",
134
+ "evidence"
135
+ ]
136
+ },
137
+ "layer": {
138
+ "type": "string",
139
+ "enum": [
140
+ "root",
141
+ "domain",
142
+ "application",
143
+ "infrastructure",
144
+ "presentation",
145
+ "shared",
146
+ "tests",
147
+ "docs",
148
+ "sdd",
149
+ "config",
150
+ "assets"
151
+ ]
152
+ },
153
+ "language": {
154
+ "type": "string",
155
+ "enum": [
156
+ "typescript",
157
+ "javascript",
158
+ "python",
159
+ "java",
160
+ "go",
161
+ "rust",
162
+ "csharp",
163
+ "php",
164
+ "ruby",
165
+ "shell",
166
+ "other"
167
+ ]
168
+ },
169
+ "context": {
170
+ "type": "string",
171
+ "minLength": 1
172
+ },
173
+ "implementation": {
174
+ "type": "string",
175
+ "enum": [
176
+ "concrete",
177
+ "abstract",
178
+ "contract",
179
+ "generated",
180
+ "manual"
181
+ ]
182
+ },
183
+ "decision_refs": {
184
+ "type": "array",
185
+ "items": {
186
+ "type": "string",
187
+ "pattern": "^(?:ADR|DEB|EPIC|FEAT|INS)-\\d{4}$"
188
+ }
189
+ },
190
+ "source_refs": {
191
+ "type": "array",
192
+ "items": {
193
+ "type": "string",
194
+ "minLength": 1
195
+ }
196
+ },
197
+ "tags": {
198
+ "type": "array",
199
+ "items": {
200
+ "type": "string",
201
+ "minLength": 1
202
+ }
94
203
  }
95
204
  },
96
205
  "required": [