@haystackeditor/cli 0.28.1 → 0.30.1
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 +9 -4
- package/dist/commands/capture-brief.js +16 -6
- package/dist/commands/crawl-contract.js +5 -0
- package/dist/commands/crawl-report.js +57 -2
- package/dist/commands/init.js +3 -2
- package/dist/commands/verify-flows.js +62 -0
- package/dist/commands/verify-onboarding.js +51 -0
- package/dist/commands/verify.js +248 -18
- package/dist/index.js +46 -5
- package/dist/schema.js +3 -2
- package/package.json +1 -1
- package/schemas/verify-flow.v1.json +181 -0
- package/schemas/verify-raw.v1.json +155 -2
- package/schemas/verify.v2.json +210 -2
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://haystackeditor.com/schemas/verify-flow.v1.json",
|
|
4
|
+
"title": "haystack verify flow --json",
|
|
5
|
+
"description": "CRAWL-V1 amendment 21: one flow of this checkout's change, from the brief of the change's run: its functions, the brief's production rows for them (shares of observed calls), its routes per app with capture set up (share of captured sessions, devices, the journeys the window keeps through them; an ambiguous press or submit key is marked ambiguous), and Haystack's ideas for it.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema_version",
|
|
10
|
+
"run",
|
|
11
|
+
"flow"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"schema_version": {
|
|
15
|
+
"const": "1.0.0"
|
|
16
|
+
},
|
|
17
|
+
"run": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"required": [
|
|
20
|
+
"runId",
|
|
21
|
+
"status"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"runId": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^cv_[0-9a-f]{48}$"
|
|
27
|
+
},
|
|
28
|
+
"status": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"flow": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"required": [
|
|
36
|
+
"number",
|
|
37
|
+
"id",
|
|
38
|
+
"name",
|
|
39
|
+
"changeKeys",
|
|
40
|
+
"functions",
|
|
41
|
+
"production",
|
|
42
|
+
"capture",
|
|
43
|
+
"ideas"
|
|
44
|
+
],
|
|
45
|
+
"properties": {
|
|
46
|
+
"number": {
|
|
47
|
+
"type": "integer",
|
|
48
|
+
"minimum": 1
|
|
49
|
+
},
|
|
50
|
+
"id": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"name": {
|
|
54
|
+
"type": "string"
|
|
55
|
+
},
|
|
56
|
+
"changeKeys": {
|
|
57
|
+
"type": "array",
|
|
58
|
+
"items": {
|
|
59
|
+
"type": "string"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"functions": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"required": [
|
|
67
|
+
"index",
|
|
68
|
+
"file",
|
|
69
|
+
"name",
|
|
70
|
+
"lines",
|
|
71
|
+
"distance",
|
|
72
|
+
"direction"
|
|
73
|
+
],
|
|
74
|
+
"properties": {
|
|
75
|
+
"index": {
|
|
76
|
+
"type": "integer",
|
|
77
|
+
"minimum": 0
|
|
78
|
+
},
|
|
79
|
+
"file": {
|
|
80
|
+
"type": "string"
|
|
81
|
+
},
|
|
82
|
+
"name": {
|
|
83
|
+
"type": "string"
|
|
84
|
+
},
|
|
85
|
+
"lines": {
|
|
86
|
+
"type": "array",
|
|
87
|
+
"items": {
|
|
88
|
+
"type": "integer"
|
|
89
|
+
},
|
|
90
|
+
"minItems": 2,
|
|
91
|
+
"maxItems": 2
|
|
92
|
+
},
|
|
93
|
+
"distance": {
|
|
94
|
+
"type": "integer",
|
|
95
|
+
"minimum": 0
|
|
96
|
+
},
|
|
97
|
+
"direction": {
|
|
98
|
+
"enum": [
|
|
99
|
+
"changed",
|
|
100
|
+
"upstream",
|
|
101
|
+
"downstream"
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"production": {
|
|
108
|
+
"description": "The brief's production object (see verify.v2.json $defs.brief.production) with only this flow's function rows; null without production telemetry.",
|
|
109
|
+
"oneOf": [
|
|
110
|
+
{
|
|
111
|
+
"type": "null"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"type": "object"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"capture": {
|
|
119
|
+
"oneOf": [
|
|
120
|
+
{
|
|
121
|
+
"type": "null"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"type": "array",
|
|
125
|
+
"items": {
|
|
126
|
+
"type": "object",
|
|
127
|
+
"required": [
|
|
128
|
+
"app"
|
|
129
|
+
],
|
|
130
|
+
"properties": {
|
|
131
|
+
"app": {
|
|
132
|
+
"type": "string"
|
|
133
|
+
},
|
|
134
|
+
"applicationId": {
|
|
135
|
+
"type": [
|
|
136
|
+
"string",
|
|
137
|
+
"null"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
"state": {
|
|
141
|
+
"enum": [
|
|
142
|
+
"no-data",
|
|
143
|
+
"unavailable"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
"reason": {
|
|
147
|
+
"type": "string"
|
|
148
|
+
},
|
|
149
|
+
"window": {
|
|
150
|
+
"type": "object"
|
|
151
|
+
},
|
|
152
|
+
"routes": {
|
|
153
|
+
"type": "array",
|
|
154
|
+
"items": {
|
|
155
|
+
"type": "object",
|
|
156
|
+
"required": [
|
|
157
|
+
"route",
|
|
158
|
+
"match",
|
|
159
|
+
"source",
|
|
160
|
+
"sessions",
|
|
161
|
+
"share",
|
|
162
|
+
"devices",
|
|
163
|
+
"journeys"
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
"ideas": {
|
|
173
|
+
"type": "array",
|
|
174
|
+
"items": {
|
|
175
|
+
"type": "object"
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
]
|
|
22
22
|
},
|
|
23
23
|
"schema_version": {
|
|
24
|
-
"const": "1.
|
|
24
|
+
"const": "1.3.0"
|
|
25
25
|
},
|
|
26
26
|
"change": {
|
|
27
27
|
"description": "Schema 1.0.2: what this verify checked: the capture's base commit (where HEAD meets origin's default branch), its work commit (committed and uncommitted changes), and the files that differ between them.",
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"run",
|
|
66
66
|
"brief",
|
|
67
67
|
"capture",
|
|
68
|
+
"flows",
|
|
68
69
|
"next"
|
|
69
70
|
],
|
|
70
71
|
"properties": {
|
|
@@ -77,7 +78,8 @@
|
|
|
77
78
|
"type": "object",
|
|
78
79
|
"required": [
|
|
79
80
|
"runId",
|
|
80
|
-
"status"
|
|
81
|
+
"status",
|
|
82
|
+
"error"
|
|
81
83
|
],
|
|
82
84
|
"properties": {
|
|
83
85
|
"runId": {
|
|
@@ -95,6 +97,29 @@
|
|
|
95
97
|
"incomplete",
|
|
96
98
|
"cancelled"
|
|
97
99
|
]
|
|
100
|
+
},
|
|
101
|
+
"error": {
|
|
102
|
+
"oneOf": [
|
|
103
|
+
{
|
|
104
|
+
"type": "null"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"type": "object",
|
|
108
|
+
"additionalProperties": false,
|
|
109
|
+
"required": [
|
|
110
|
+
"code",
|
|
111
|
+
"message"
|
|
112
|
+
],
|
|
113
|
+
"properties": {
|
|
114
|
+
"code": {
|
|
115
|
+
"type": "string"
|
|
116
|
+
},
|
|
117
|
+
"message": {
|
|
118
|
+
"type": "string"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
]
|
|
98
123
|
}
|
|
99
124
|
}
|
|
100
125
|
}
|
|
@@ -127,6 +152,84 @@
|
|
|
127
152
|
},
|
|
128
153
|
"next": {
|
|
129
154
|
"type": "string"
|
|
155
|
+
},
|
|
156
|
+
"flows": {
|
|
157
|
+
"description": "Amendment 21 (2.1.1): the brief's flows in its order, each with its number (from 1, as `haystack verify flow <n>` takes it), files, function counts and, per app with capture set up, its routes' share of captured sessions (null without capture). Empty when the brief has none.",
|
|
158
|
+
"type": "array",
|
|
159
|
+
"items": {
|
|
160
|
+
"type": "object",
|
|
161
|
+
"required": [
|
|
162
|
+
"number",
|
|
163
|
+
"id",
|
|
164
|
+
"name",
|
|
165
|
+
"files",
|
|
166
|
+
"functions",
|
|
167
|
+
"changedFunctions",
|
|
168
|
+
"capture"
|
|
169
|
+
],
|
|
170
|
+
"properties": {
|
|
171
|
+
"number": {
|
|
172
|
+
"type": "integer",
|
|
173
|
+
"minimum": 1
|
|
174
|
+
},
|
|
175
|
+
"id": {
|
|
176
|
+
"type": "string"
|
|
177
|
+
},
|
|
178
|
+
"name": {
|
|
179
|
+
"type": "string"
|
|
180
|
+
},
|
|
181
|
+
"files": {
|
|
182
|
+
"type": "array",
|
|
183
|
+
"items": {
|
|
184
|
+
"type": "string"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"functions": {
|
|
188
|
+
"type": "integer",
|
|
189
|
+
"minimum": 0
|
|
190
|
+
},
|
|
191
|
+
"changedFunctions": {
|
|
192
|
+
"type": "integer",
|
|
193
|
+
"minimum": 0
|
|
194
|
+
},
|
|
195
|
+
"capture": {
|
|
196
|
+
"oneOf": [
|
|
197
|
+
{
|
|
198
|
+
"type": "null"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"type": "array",
|
|
202
|
+
"items": {
|
|
203
|
+
"type": "object",
|
|
204
|
+
"required": [
|
|
205
|
+
"app",
|
|
206
|
+
"applicationId",
|
|
207
|
+
"state"
|
|
208
|
+
],
|
|
209
|
+
"properties": {
|
|
210
|
+
"app": {
|
|
211
|
+
"type": "string"
|
|
212
|
+
},
|
|
213
|
+
"state": {
|
|
214
|
+
"enum": [
|
|
215
|
+
"ready",
|
|
216
|
+
"no-data",
|
|
217
|
+
"unavailable"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
"routes": {
|
|
221
|
+
"$ref": "#/$defs/captureWindow"
|
|
222
|
+
},
|
|
223
|
+
"reason": {
|
|
224
|
+
"type": "string"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
130
233
|
}
|
|
131
234
|
}
|
|
132
235
|
}
|
|
@@ -931,6 +1034,56 @@
|
|
|
931
1034
|
"planning"
|
|
932
1035
|
]
|
|
933
1036
|
},
|
|
1037
|
+
"health": {
|
|
1038
|
+
"description": "Schema 1.2.0, CRAWL-V1 amendment 22, in the final answer and the sealed manifest only: whether the copy of the app worked, so the crawl could test the change. not-judged carries only its reason. Otherwise status (app-broken: Clef answered app_broken and scored it working under 0.3, so the findings are the environment's; ok), working (0 to 1), tested (tested, app_broken, not_reached or unclear), reason (one sentence), evidence (the start screen's texts, messages and overlays and what each build reported with nobody clicking, at most 40 lines each, and at most 8 commonest difference lines with their counts) and images (health/old.png and health/new.png in the bundle, null in answers).",
|
|
1039
|
+
"type": "object",
|
|
1040
|
+
"required": [
|
|
1041
|
+
"status",
|
|
1042
|
+
"reason"
|
|
1043
|
+
],
|
|
1044
|
+
"properties": {
|
|
1045
|
+
"status": {
|
|
1046
|
+
"enum": [
|
|
1047
|
+
"ok",
|
|
1048
|
+
"app-broken",
|
|
1049
|
+
"not-judged"
|
|
1050
|
+
]
|
|
1051
|
+
},
|
|
1052
|
+
"reason": {
|
|
1053
|
+
"type": "string"
|
|
1054
|
+
},
|
|
1055
|
+
"working": {
|
|
1056
|
+
"type": "number",
|
|
1057
|
+
"minimum": 0,
|
|
1058
|
+
"maximum": 1
|
|
1059
|
+
},
|
|
1060
|
+
"tested": {
|
|
1061
|
+
"enum": [
|
|
1062
|
+
"tested",
|
|
1063
|
+
"app_broken",
|
|
1064
|
+
"not_reached",
|
|
1065
|
+
"unclear"
|
|
1066
|
+
]
|
|
1067
|
+
},
|
|
1068
|
+
"evidence": {
|
|
1069
|
+
"type": "object",
|
|
1070
|
+
"required": [
|
|
1071
|
+
"texts",
|
|
1072
|
+
"messages",
|
|
1073
|
+
"overlays",
|
|
1074
|
+
"background",
|
|
1075
|
+
"commonDifferences"
|
|
1076
|
+
]
|
|
1077
|
+
},
|
|
1078
|
+
"images": {
|
|
1079
|
+
"type": "object",
|
|
1080
|
+
"required": [
|
|
1081
|
+
"old",
|
|
1082
|
+
"new"
|
|
1083
|
+
]
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
},
|
|
934
1087
|
"notFinishedInTime": {
|
|
935
1088
|
"$ref": "#/$defs/count"
|
|
936
1089
|
},
|
package/schemas/verify.v2.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
],
|
|
12
12
|
"properties": {
|
|
13
13
|
"schema_version": {
|
|
14
|
-
"const": "2.
|
|
14
|
+
"const": "2.3.0"
|
|
15
15
|
},
|
|
16
16
|
"change": {
|
|
17
17
|
"description": "Schema 1.0.2: what this verify checked: the capture's base commit (where HEAD meets origin's default branch), its work commit (committed and uncommitted changes), and the files that differ between them.",
|
|
@@ -70,6 +70,7 @@
|
|
|
70
70
|
"neverRan",
|
|
71
71
|
"notFinishedInTime",
|
|
72
72
|
"outsideServiceGaps",
|
|
73
|
+
"health",
|
|
73
74
|
"error",
|
|
74
75
|
"machinesNotProvenShutDown"
|
|
75
76
|
],
|
|
@@ -342,6 +343,70 @@
|
|
|
342
343
|
},
|
|
343
344
|
"description": "Calls the copy's stand-ins could not serve: missing coverage, never bugs."
|
|
344
345
|
},
|
|
346
|
+
"health": {
|
|
347
|
+
"description": "Schema 2.2.0 (CRAWL-V1 amendment 22): whether the copy of the app worked, so the crawl could test the change; null when the results say nothing of it (a crawl that did not explore, or a service from before it). app-broken: the copy was itself broken, so the change was not tested and the findings are the environment's; the command says so first and exits 5 (a run cancelled or failed after it answered keeps its own exit code). For app-broken, shows (what the start screen shows that reads as an error), failedRequests and consoleErrors (logged with nobody clicking, each with the builds it was in) and whatToDo; empty and null otherwise.",
|
|
348
|
+
"oneOf": [
|
|
349
|
+
{
|
|
350
|
+
"type": "null"
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"type": "object",
|
|
354
|
+
"additionalProperties": false,
|
|
355
|
+
"required": [
|
|
356
|
+
"status",
|
|
357
|
+
"reason",
|
|
358
|
+
"shows",
|
|
359
|
+
"failedRequests",
|
|
360
|
+
"consoleErrors",
|
|
361
|
+
"whatToDo"
|
|
362
|
+
],
|
|
363
|
+
"properties": {
|
|
364
|
+
"status": {
|
|
365
|
+
"enum": [
|
|
366
|
+
"ok",
|
|
367
|
+
"app-broken",
|
|
368
|
+
"not-judged"
|
|
369
|
+
]
|
|
370
|
+
},
|
|
371
|
+
"reason": {
|
|
372
|
+
"type": "string",
|
|
373
|
+
"description": "One sentence in plain words."
|
|
374
|
+
},
|
|
375
|
+
"shows": {
|
|
376
|
+
"type": "array",
|
|
377
|
+
"items": {
|
|
378
|
+
"type": "string"
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
"failedRequests": {
|
|
382
|
+
"type": "array",
|
|
383
|
+
"items": {
|
|
384
|
+
"type": "string"
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
"consoleErrors": {
|
|
388
|
+
"type": "array",
|
|
389
|
+
"items": {
|
|
390
|
+
"type": "string"
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
"whatToDo": {
|
|
394
|
+
"oneOf": [
|
|
395
|
+
{
|
|
396
|
+
"type": "null"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"type": "array",
|
|
400
|
+
"items": {
|
|
401
|
+
"type": "string"
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
]
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
]
|
|
409
|
+
},
|
|
345
410
|
"error": {
|
|
346
411
|
"oneOf": [
|
|
347
412
|
{
|
|
@@ -380,6 +445,7 @@
|
|
|
380
445
|
"run",
|
|
381
446
|
"brief",
|
|
382
447
|
"capture",
|
|
448
|
+
"flows",
|
|
383
449
|
"next"
|
|
384
450
|
],
|
|
385
451
|
"properties": {
|
|
@@ -392,7 +458,8 @@
|
|
|
392
458
|
"type": "object",
|
|
393
459
|
"required": [
|
|
394
460
|
"runId",
|
|
395
|
-
"status"
|
|
461
|
+
"status",
|
|
462
|
+
"error"
|
|
396
463
|
],
|
|
397
464
|
"properties": {
|
|
398
465
|
"runId": {
|
|
@@ -410,6 +477,29 @@
|
|
|
410
477
|
"incomplete",
|
|
411
478
|
"cancelled"
|
|
412
479
|
]
|
|
480
|
+
},
|
|
481
|
+
"error": {
|
|
482
|
+
"oneOf": [
|
|
483
|
+
{
|
|
484
|
+
"type": "null"
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"type": "object",
|
|
488
|
+
"additionalProperties": false,
|
|
489
|
+
"required": [
|
|
490
|
+
"code",
|
|
491
|
+
"message"
|
|
492
|
+
],
|
|
493
|
+
"properties": {
|
|
494
|
+
"code": {
|
|
495
|
+
"type": "string"
|
|
496
|
+
},
|
|
497
|
+
"message": {
|
|
498
|
+
"type": "string"
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
]
|
|
413
503
|
}
|
|
414
504
|
}
|
|
415
505
|
}
|
|
@@ -442,6 +532,84 @@
|
|
|
442
532
|
},
|
|
443
533
|
"next": {
|
|
444
534
|
"type": "string"
|
|
535
|
+
},
|
|
536
|
+
"flows": {
|
|
537
|
+
"description": "Amendment 21 (2.1.1): the brief's flows in its order, each with its number (from 1, as `haystack verify flow <n>` takes it), files, function counts and, per app with capture set up, its routes' share of captured sessions (null without capture). Empty when the brief has none.",
|
|
538
|
+
"type": "array",
|
|
539
|
+
"items": {
|
|
540
|
+
"type": "object",
|
|
541
|
+
"required": [
|
|
542
|
+
"number",
|
|
543
|
+
"id",
|
|
544
|
+
"name",
|
|
545
|
+
"files",
|
|
546
|
+
"functions",
|
|
547
|
+
"changedFunctions",
|
|
548
|
+
"capture"
|
|
549
|
+
],
|
|
550
|
+
"properties": {
|
|
551
|
+
"number": {
|
|
552
|
+
"type": "integer",
|
|
553
|
+
"minimum": 1
|
|
554
|
+
},
|
|
555
|
+
"id": {
|
|
556
|
+
"type": "string"
|
|
557
|
+
},
|
|
558
|
+
"name": {
|
|
559
|
+
"type": "string"
|
|
560
|
+
},
|
|
561
|
+
"files": {
|
|
562
|
+
"type": "array",
|
|
563
|
+
"items": {
|
|
564
|
+
"type": "string"
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
"functions": {
|
|
568
|
+
"type": "integer",
|
|
569
|
+
"minimum": 0
|
|
570
|
+
},
|
|
571
|
+
"changedFunctions": {
|
|
572
|
+
"type": "integer",
|
|
573
|
+
"minimum": 0
|
|
574
|
+
},
|
|
575
|
+
"capture": {
|
|
576
|
+
"oneOf": [
|
|
577
|
+
{
|
|
578
|
+
"type": "null"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"type": "array",
|
|
582
|
+
"items": {
|
|
583
|
+
"type": "object",
|
|
584
|
+
"required": [
|
|
585
|
+
"app",
|
|
586
|
+
"applicationId",
|
|
587
|
+
"state"
|
|
588
|
+
],
|
|
589
|
+
"properties": {
|
|
590
|
+
"app": {
|
|
591
|
+
"type": "string"
|
|
592
|
+
},
|
|
593
|
+
"state": {
|
|
594
|
+
"enum": [
|
|
595
|
+
"ready",
|
|
596
|
+
"no-data",
|
|
597
|
+
"unavailable"
|
|
598
|
+
]
|
|
599
|
+
},
|
|
600
|
+
"routes": {
|
|
601
|
+
"$ref": "#/$defs/captureWindow"
|
|
602
|
+
},
|
|
603
|
+
"reason": {
|
|
604
|
+
"type": "string"
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
]
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
445
613
|
}
|
|
446
614
|
}
|
|
447
615
|
}
|
|
@@ -1141,6 +1309,13 @@
|
|
|
1141
1309
|
}
|
|
1142
1310
|
}
|
|
1143
1311
|
]
|
|
1312
|
+
},
|
|
1313
|
+
"flows": {
|
|
1314
|
+
"description": "Amendment 21: absent when incident planning did not run (or its flows could not be named).",
|
|
1315
|
+
"type": "array",
|
|
1316
|
+
"items": {
|
|
1317
|
+
"$ref": "#/$defs/briefFlow"
|
|
1318
|
+
}
|
|
1144
1319
|
}
|
|
1145
1320
|
}
|
|
1146
1321
|
},
|
|
@@ -1320,6 +1495,39 @@
|
|
|
1320
1495
|
}
|
|
1321
1496
|
}
|
|
1322
1497
|
}
|
|
1498
|
+
},
|
|
1499
|
+
"briefFlow": {
|
|
1500
|
+
"description": "CRAWL-V1 amendment 21 (2.1.1): one flow of the change: a behavior group of incident planning, named in a few plain words, with the brief functions its code owns (indexes into functions, changed ones first). A function can be in several flows.",
|
|
1501
|
+
"type": "object",
|
|
1502
|
+
"required": [
|
|
1503
|
+
"id",
|
|
1504
|
+
"name",
|
|
1505
|
+
"changeKeys",
|
|
1506
|
+
"functions"
|
|
1507
|
+
],
|
|
1508
|
+
"properties": {
|
|
1509
|
+
"id": {
|
|
1510
|
+
"type": "string"
|
|
1511
|
+
},
|
|
1512
|
+
"name": {
|
|
1513
|
+
"type": "string",
|
|
1514
|
+
"minLength": 1,
|
|
1515
|
+
"maxLength": 120
|
|
1516
|
+
},
|
|
1517
|
+
"changeKeys": {
|
|
1518
|
+
"type": "array",
|
|
1519
|
+
"items": {
|
|
1520
|
+
"type": "string"
|
|
1521
|
+
}
|
|
1522
|
+
},
|
|
1523
|
+
"functions": {
|
|
1524
|
+
"type": "array",
|
|
1525
|
+
"items": {
|
|
1526
|
+
"type": "integer",
|
|
1527
|
+
"minimum": 0
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1323
1531
|
}
|
|
1324
1532
|
}
|
|
1325
1533
|
}
|