workflow.schema.json
439 lines · archify/schemas/workflow.schema.json at a406594
1{
2 "$schema": "https://json-schema.org/draft/2020-12/schema",
3 "$id": "https://github.com/tt-a1i/archify/schemas/workflow.schema.json",
4 "title": "Archify Workflow Diagram",
5 "type": "object",
6 "additionalProperties": false,
7 "required": [
8 "schema_version",
9 "diagram_type",
10 "meta",
11 "lanes",
12 "nodes",
13 "edges"
14 ],
15 "properties": {
16 "schema_version": {
17 "enum": [
18 1,
19 2
20 ]
21 },
22 "diagram_type": {
23 "const": "workflow"
24 },
25 "meta": {
26 "type": "object",
27 "additionalProperties": false,
28 "required": [
29 "title",
30 "output"
31 ],
32 "properties": {
33 "title": {
34 "type": "string",
35 "minLength": 1
36 },
37 "locale": {
38 "$ref": "common.schema.json#/$defs/locale"
39 },
40 "translations": {
41 "$ref": "common.schema.json#/$defs/translations"
42 },
43 "subtitle": {
44 "type": "string"
45 },
46 "output": {
47 "$ref": "common.schema.json#/$defs/portableOutputPath"
48 },
49 "animation": {
50 "enum": [
51 "trace",
52 "none"
53 ]
54 },
55 "visual_preset": {
56 "enum": [
57 "classic",
58 "signal-flow",
59 "blueprint",
60 "editorial"
61 ]
62 },
63 "quality_profile": {
64 "enum": [
65 "standard",
66 "showcase"
67 ]
68 },
69 "repository": {
70 "$ref": "common.schema.json#/$defs/repository"
71 },
72 "views": {
73 "$ref": "common.schema.json#/$defs/guidedViews"
74 },
75 "legend": {
76 "type": "object",
77 "additionalProperties": false,
78 "properties": {
79 "mode": { "$ref": "common.schema.json#/$defs/legendMode" },
80 "entries": {
81 "type": "object",
82 "additionalProperties": false,
83 "properties": {
84 "frontend": { "$ref": "common.schema.json#/$defs/legendEntry" },
85 "backend": { "$ref": "common.schema.json#/$defs/legendEntry" },
86 "database": { "$ref": "common.schema.json#/$defs/legendEntry" },
87 "cloud": { "$ref": "common.schema.json#/$defs/legendEntry" },
88 "security": { "$ref": "common.schema.json#/$defs/legendEntry" },
89 "messagebus": { "$ref": "common.schema.json#/$defs/legendEntry" },
90 "external": { "$ref": "common.schema.json#/$defs/legendEntry" }
91 }
92 }
93 }
94 },
95 "viewBox": {
96 "type": "array",
97 "prefixItems": [
98 {
99 "type": "number",
100 "minimum": 700
101 },
102 {
103 "type": "number",
104 "minimum": 240
105 }
106 ],
107 "items": false,
108 "minItems": 2,
109 "maxItems": 2
110 }
111 }
112 },
113 "lanes": {
114 "type": "array",
115 "minItems": 1,
116 "items": {
117 "type": "object",
118 "additionalProperties": false,
119 "required": [
120 "id",
121 "label"
122 ],
123 "properties": {
124 "id": {
125 "$ref": "common.schema.json#/$defs/id"
126 },
127 "label": {
128 "type": "string",
129 "minLength": 1
130 },
131 "variant": {
132 "enum": [
133 "normal",
134 "exception"
135 ]
136 }
137 }
138 }
139 },
140 "phases": {
141 "type": "array",
142 "items": {
143 "type": "object",
144 "additionalProperties": false,
145 "required": [
146 "id",
147 "label",
148 "fromCol",
149 "toCol"
150 ],
151 "properties": {
152 "id": {
153 "$ref": "common.schema.json#/$defs/id"
154 },
155 "label": {
156 "type": "string",
157 "minLength": 1
158 },
159 "fromCol": {
160 "type": "integer",
161 "minimum": 0,
162 "maximum": 5
163 },
164 "toCol": {
165 "type": "integer",
166 "minimum": 0,
167 "maximum": 5
168 },
169 "variant": {
170 "enum": [
171 "default",
172 "emphasis",
173 "security",
174 "dashed"
175 ]
176 }
177 }
178 }
179 },
180 "groups": {
181 "type": "array",
182 "items": {
183 "type": "object",
184 "additionalProperties": false,
185 "required": [
186 "id",
187 "label",
188 "lane",
189 "fromCol",
190 "toCol"
191 ],
192 "properties": {
193 "id": {
194 "$ref": "common.schema.json#/$defs/id"
195 },
196 "label": {
197 "type": "string",
198 "minLength": 1
199 },
200 "lane": {
201 "$ref": "common.schema.json#/$defs/id"
202 },
203 "fromCol": {
204 "type": "integer",
205 "minimum": 0,
206 "maximum": 5
207 },
208 "toCol": {
209 "type": "integer",
210 "minimum": 0,
211 "maximum": 5
212 },
213 "variant": {
214 "enum": [
215 "default",
216 "emphasis",
217 "security",
218 "dashed"
219 ]
220 }
221 }
222 }
223 },
224 "mainPath": {
225 "type": "array",
226 "minItems": 2,
227 "items": {
228 "$ref": "common.schema.json#/$defs/id"
229 }
230 },
231 "semanticChecks": {
232 "type": "object",
233 "additionalProperties": false,
234 "minProperties": 1,
235 "properties": {
236 "allowedRoots": {
237 "type": "array",
238 "items": {
239 "$ref": "common.schema.json#/$defs/id"
240 }
241 },
242 "allowedTerminals": {
243 "type": "array",
244 "items": {
245 "$ref": "common.schema.json#/$defs/id"
246 }
247 },
248 "requiredEdges": {
249 "type": "array",
250 "items": {
251 "$ref": "#/$defs/semanticRelation"
252 }
253 },
254 "requiredPaths": {
255 "type": "array",
256 "items": {
257 "$ref": "#/$defs/semanticRelation"
258 }
259 }
260 }
261 },
262 "nodes": {
263 "type": "array",
264 "minItems": 1,
265 "items": {
266 "type": "object",
267 "additionalProperties": false,
268 "required": [
269 "id",
270 "lane",
271 "col",
272 "type",
273 "label"
274 ],
275 "properties": {
276 "id": {
277 "$ref": "common.schema.json#/$defs/id"
278 },
279 "lane": {
280 "$ref": "common.schema.json#/$defs/id"
281 },
282 "col": {
283 "type": "integer",
284 "minimum": 0,
285 "maximum": 5
286 },
287 "type": {
288 "$ref": "common.schema.json#/$defs/componentType"
289 },
290 "label": {
291 "type": "string",
292 "minLength": 1
293 },
294 "sublabel": {
295 "type": "string"
296 },
297 "tag": {
298 "type": "string"
299 },
300 "icon": { "$ref": "common.schema.json#/$defs/nodeIcon" },
301 "brand": {
302 "$ref": "common.schema.json#/$defs/brandMark"
303 },
304 "sources": {
305 "$ref": "common.schema.json#/$defs/sourceReferences"
306 },
307 "width": {
308 "type": "number",
309 "minimum": 32
310 },
311 "height": {
312 "type": "number",
313 "minimum": 32
314 },
315 "yOffset": {
316 "type": "number"
317 }
318 }
319 }
320 },
321 "edges": {
322 "type": "array",
323 "items": {
324 "type": "object",
325 "additionalProperties": false,
326 "required": [
327 "from",
328 "to"
329 ],
330 "properties": {
331 "id": {
332 "$ref": "common.schema.json#/$defs/id"
333 },
334 "from": {
335 "$ref": "common.schema.json#/$defs/id"
336 },
337 "to": {
338 "$ref": "common.schema.json#/$defs/id"
339 },
340 "label": {
341 "type": "string"
342 },
343 "variant": {
344 "$ref": "common.schema.json#/$defs/variant"
345 },
346 "role": {
347 "enum": [
348 "main",
349 "branch",
350 "async",
351 "return",
352 "error"
353 ]
354 },
355 "fromSide": {
356 "$ref": "#/$defs/side"
357 },
358 "toSide": {
359 "$ref": "#/$defs/side"
360 },
361 "route": {
362 "enum": [
363 "auto",
364 "straight",
365 "drop",
366 "outside-right",
367 "return-left",
368 "bottom-channel",
369 "up-channel"
370 ]
371 },
372 "via": {
373 "type": "array",
374 "items": {
375 "$ref": "common.schema.json#/$defs/point"
376 }
377 },
378 "labelAt": {
379 "$ref": "common.schema.json#/$defs/point"
380 },
381 "labelDx": {
382 "type": "number"
383 },
384 "labelDy": {
385 "type": "number"
386 },
387 "labelSegment": {
388 "type": "integer",
389 "minimum": 0
390 },
391 "channelX": {
392 "type": "number"
393 },
394 "channelY": {
395 "type": "number"
396 },
397 "bias": {
398 "type": "number",
399 "minimum": 0,
400 "maximum": 1
401 },
402 "width": {
403 "type": "number",
404 "minimum": 0.5
405 }
406 }
407 }
408 },
409 "cards": {
410 "$ref": "common.schema.json#/$defs/cards"
411 }
412 },
413 "$defs": {
414 "semanticRelation": {
415 "type": "object",
416 "additionalProperties": false,
417 "required": [
418 "from",
419 "to"
420 ],
421 "properties": {
422 "from": {
423 "$ref": "common.schema.json#/$defs/id"
424 },
425 "to": {
426 "$ref": "common.schema.json#/$defs/id"
427 }
428 }
429 },
430 "side": {
431 "enum": [
432 "left",
433 "right",
434 "top",
435 "bottom"
436 ]
437 }
438 }
439}