@haystackeditor/cli 0.27.2 → 0.28.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.
- package/README.md +4 -3
- package/dist/commands/capture-brief.js +2 -2
- package/dist/commands/init.js +10 -2
- package/dist/commands/verify.js +85 -77
- package/dist/index.js +21 -41
- package/dist/schema.js +2 -3
- package/package.json +1 -1
- package/schemas/verify-raw.v1.json +672 -2
- package/schemas/verify.v2.json +672 -2
- package/schemas/pre-verify.v1.json +0 -235
- package/schemas/pre-verify.v2.json +0 -240
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://docs.haystackeditor.com/cli/schemas/verify-raw.v1.json",
|
|
4
4
|
"title": "Haystack verify --raw: the service's whole crawl record (CRAWL-V1)",
|
|
5
|
-
"description": "Machine-readable output of `haystack verify --raw`, for scripts. the caller's crawl of the exact captured checkout (its code and its change title), as GET /api/agent/cloud-verifier/crawls?repository=&workCommit= or, for a crawl the command just submitted, GET /api/agent/cloud-verifier/crawls/:runId?repository= returns it, or null when no crawl of the capture could be started. The crawl shapes mirror infra/lambda/haystack-design-verifier-shared/crawl_contracts.ts (with amendments 1, 8, 9, 10 and 11); that file wins where they differ. Crawl amendment 11 (schema 1.0.1): when the capture's base is not onboarded yet, `onboarding` is the base's OnboardingStatusV1 (onboarding_contracts.ts, APP-ONBOARDING-V1) and `crawl` is null until the app is ready; it is null when onboarding was not involved.",
|
|
5
|
+
"description": "Machine-readable output of `haystack verify --raw`, for scripts. the caller's crawl of the exact captured checkout (its code and its change title), as GET /api/agent/cloud-verifier/crawls?repository=&workCommit= or, for a crawl the command just submitted, GET /api/agent/cloud-verifier/crawls/:runId?repository= returns it, or null when no crawl of the capture could be started. The crawl shapes mirror infra/lambda/haystack-design-verifier-shared/crawl_contracts.ts (with amendments 1, 8, 9, 10 and 11); that file wins where they differ. Crawl amendment 11 (schema 1.0.1): when the capture's base is not onboarded yet, `onboarding` is the base's OnboardingStatusV1 (onboarding_contracts.ts, APP-ONBOARDING-V1) and `crawl` is null until the app is ready; it is null when onboarding was not involved. With no --intent on a change no crawl has started for, `crawl` is null and `handshake` holds the brief.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": [
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
]
|
|
22
22
|
},
|
|
23
23
|
"schema_version": {
|
|
24
|
-
"const": "1.
|
|
24
|
+
"const": "1.1.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.",
|
|
@@ -56,6 +56,79 @@
|
|
|
56
56
|
"$ref": "#/$defs/crawlView"
|
|
57
57
|
}
|
|
58
58
|
]
|
|
59
|
+
},
|
|
60
|
+
"handshake": {
|
|
61
|
+
"description": "Present only for the handshake (a plain `haystack verify` on a change no crawl has started for, exit 4): what the change touches and Haystack's ideas, then `next`, the command to steer the crawl with.",
|
|
62
|
+
"type": "object",
|
|
63
|
+
"additionalProperties": false,
|
|
64
|
+
"required": [
|
|
65
|
+
"run",
|
|
66
|
+
"brief",
|
|
67
|
+
"capture",
|
|
68
|
+
"next"
|
|
69
|
+
],
|
|
70
|
+
"properties": {
|
|
71
|
+
"run": {
|
|
72
|
+
"oneOf": [
|
|
73
|
+
{
|
|
74
|
+
"type": "null"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"type": "object",
|
|
78
|
+
"required": [
|
|
79
|
+
"runId",
|
|
80
|
+
"status"
|
|
81
|
+
],
|
|
82
|
+
"properties": {
|
|
83
|
+
"runId": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"pattern": "^cv_[0-9a-f]{48}$"
|
|
86
|
+
},
|
|
87
|
+
"status": {
|
|
88
|
+
"enum": [
|
|
89
|
+
"queued",
|
|
90
|
+
"preparing",
|
|
91
|
+
"crawling",
|
|
92
|
+
"draining",
|
|
93
|
+
"completed",
|
|
94
|
+
"prepared",
|
|
95
|
+
"incomplete",
|
|
96
|
+
"cancelled"
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
"brief": {
|
|
104
|
+
"oneOf": [
|
|
105
|
+
{
|
|
106
|
+
"type": "null"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"$ref": "#/$defs/brief"
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"capture": {
|
|
114
|
+
"description": "CAPTURE-V1 rule 7b (2.0.0): what consenting real users do on the routes this change touches, from Haystack's capture tag, one section per app whose .haystack/capture.json records it (`haystack init` writes it in the app's directory, such as apps/web in a monorepo; `app` is that directory, '.' for the root); null when the checkout has none (capture not set up). The change's files (the brief's function files and the changed files) are joined to routes through each app's route manifest source entries; shares are of distinct captured sessions over the window; sessions on pages no route names are `unmapped`, never counted as zero. A read that fails is `unavailable` and never fails the command.",
|
|
115
|
+
"oneOf": [
|
|
116
|
+
{
|
|
117
|
+
"type": "null"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"type": "array",
|
|
121
|
+
"minItems": 1,
|
|
122
|
+
"items": {
|
|
123
|
+
"$ref": "#/$defs/captureSection"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
"next": {
|
|
129
|
+
"type": "string"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
59
132
|
}
|
|
60
133
|
},
|
|
61
134
|
"$defs": {
|
|
@@ -1127,6 +1200,603 @@
|
|
|
1127
1200
|
]
|
|
1128
1201
|
}
|
|
1129
1202
|
}
|
|
1203
|
+
},
|
|
1204
|
+
"captureSection": {
|
|
1205
|
+
"oneOf": [
|
|
1206
|
+
{
|
|
1207
|
+
"type": "object",
|
|
1208
|
+
"additionalProperties": false,
|
|
1209
|
+
"required": [
|
|
1210
|
+
"app",
|
|
1211
|
+
"applicationId",
|
|
1212
|
+
"state",
|
|
1213
|
+
"window"
|
|
1214
|
+
],
|
|
1215
|
+
"properties": {
|
|
1216
|
+
"app": {
|
|
1217
|
+
"type": "string"
|
|
1218
|
+
},
|
|
1219
|
+
"applicationId": {
|
|
1220
|
+
"type": "string"
|
|
1221
|
+
},
|
|
1222
|
+
"state": {
|
|
1223
|
+
"const": "ready"
|
|
1224
|
+
},
|
|
1225
|
+
"window": {
|
|
1226
|
+
"$ref": "#/$defs/captureWindow"
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
{
|
|
1231
|
+
"type": "object",
|
|
1232
|
+
"additionalProperties": false,
|
|
1233
|
+
"required": [
|
|
1234
|
+
"app",
|
|
1235
|
+
"applicationId",
|
|
1236
|
+
"state"
|
|
1237
|
+
],
|
|
1238
|
+
"properties": {
|
|
1239
|
+
"app": {
|
|
1240
|
+
"type": "string"
|
|
1241
|
+
},
|
|
1242
|
+
"applicationId": {
|
|
1243
|
+
"type": "string"
|
|
1244
|
+
},
|
|
1245
|
+
"state": {
|
|
1246
|
+
"const": "no-data"
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
},
|
|
1250
|
+
{
|
|
1251
|
+
"type": "object",
|
|
1252
|
+
"additionalProperties": false,
|
|
1253
|
+
"required": [
|
|
1254
|
+
"app",
|
|
1255
|
+
"applicationId",
|
|
1256
|
+
"state",
|
|
1257
|
+
"reason"
|
|
1258
|
+
],
|
|
1259
|
+
"properties": {
|
|
1260
|
+
"app": {
|
|
1261
|
+
"type": "string"
|
|
1262
|
+
},
|
|
1263
|
+
"applicationId": {
|
|
1264
|
+
"oneOf": [
|
|
1265
|
+
{
|
|
1266
|
+
"type": "null"
|
|
1267
|
+
},
|
|
1268
|
+
{
|
|
1269
|
+
"type": "string"
|
|
1270
|
+
}
|
|
1271
|
+
]
|
|
1272
|
+
},
|
|
1273
|
+
"state": {
|
|
1274
|
+
"const": "unavailable"
|
|
1275
|
+
},
|
|
1276
|
+
"reason": {
|
|
1277
|
+
"type": "string"
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
]
|
|
1282
|
+
},
|
|
1283
|
+
"brief": {
|
|
1284
|
+
"type": "object",
|
|
1285
|
+
"required": [
|
|
1286
|
+
"functions",
|
|
1287
|
+
"leftOut",
|
|
1288
|
+
"planning"
|
|
1289
|
+
],
|
|
1290
|
+
"properties": {
|
|
1291
|
+
"functions": {
|
|
1292
|
+
"description": "Every affected function the front half listed (at most 2000), nearest first. distance 0 is edited by the change; 1 is one engine edge away.",
|
|
1293
|
+
"type": "array",
|
|
1294
|
+
"maxItems": 2000,
|
|
1295
|
+
"items": {
|
|
1296
|
+
"type": "object",
|
|
1297
|
+
"required": [
|
|
1298
|
+
"file",
|
|
1299
|
+
"name",
|
|
1300
|
+
"lines",
|
|
1301
|
+
"distance",
|
|
1302
|
+
"direction"
|
|
1303
|
+
],
|
|
1304
|
+
"properties": {
|
|
1305
|
+
"file": {
|
|
1306
|
+
"type": "string"
|
|
1307
|
+
},
|
|
1308
|
+
"name": {
|
|
1309
|
+
"type": "string"
|
|
1310
|
+
},
|
|
1311
|
+
"lines": {
|
|
1312
|
+
"type": "array",
|
|
1313
|
+
"minItems": 2,
|
|
1314
|
+
"maxItems": 2,
|
|
1315
|
+
"items": {
|
|
1316
|
+
"type": "integer",
|
|
1317
|
+
"minimum": 0
|
|
1318
|
+
}
|
|
1319
|
+
},
|
|
1320
|
+
"distance": {
|
|
1321
|
+
"type": "integer",
|
|
1322
|
+
"minimum": 0
|
|
1323
|
+
},
|
|
1324
|
+
"direction": {
|
|
1325
|
+
"enum": [
|
|
1326
|
+
"changed",
|
|
1327
|
+
"upstream",
|
|
1328
|
+
"downstream"
|
|
1329
|
+
]
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
},
|
|
1334
|
+
"leftOut": {
|
|
1335
|
+
"description": "Functions the blast radius found but did not list, counted with why.",
|
|
1336
|
+
"type": "array",
|
|
1337
|
+
"items": {
|
|
1338
|
+
"type": "object",
|
|
1339
|
+
"required": [
|
|
1340
|
+
"reason",
|
|
1341
|
+
"count"
|
|
1342
|
+
],
|
|
1343
|
+
"properties": {
|
|
1344
|
+
"reason": {
|
|
1345
|
+
"type": "string"
|
|
1346
|
+
},
|
|
1347
|
+
"count": {
|
|
1348
|
+
"type": "integer",
|
|
1349
|
+
"minimum": 0
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
},
|
|
1354
|
+
"production": {
|
|
1355
|
+
"description": "CRAWL-V1 amendment 19, only when the repository's own Haystack telemetry holds data in the last 7 days: how the brief's functions ran in production, by their index in `functions` (production runs the code before the change; lines are moved through the change's diff). A function with no row is unknown, not unused.",
|
|
1356
|
+
"type": "object",
|
|
1357
|
+
"required": [
|
|
1358
|
+
"windowDays",
|
|
1359
|
+
"payloads",
|
|
1360
|
+
"newestAt",
|
|
1361
|
+
"partial",
|
|
1362
|
+
"functions"
|
|
1363
|
+
],
|
|
1364
|
+
"properties": {
|
|
1365
|
+
"windowDays": {
|
|
1366
|
+
"type": "integer",
|
|
1367
|
+
"minimum": 1
|
|
1368
|
+
},
|
|
1369
|
+
"payloads": {
|
|
1370
|
+
"type": "integer",
|
|
1371
|
+
"minimum": 1
|
|
1372
|
+
},
|
|
1373
|
+
"newestAt": {
|
|
1374
|
+
"type": "string"
|
|
1375
|
+
},
|
|
1376
|
+
"partial": {
|
|
1377
|
+
"type": "boolean",
|
|
1378
|
+
"description": "The read stopped at its byte budget: every count is a lower bound."
|
|
1379
|
+
},
|
|
1380
|
+
"functions": {
|
|
1381
|
+
"type": "array",
|
|
1382
|
+
"items": {
|
|
1383
|
+
"type": "object",
|
|
1384
|
+
"required": [
|
|
1385
|
+
"index",
|
|
1386
|
+
"branches",
|
|
1387
|
+
"branchesOmitted",
|
|
1388
|
+
"values",
|
|
1389
|
+
"valuesOmitted"
|
|
1390
|
+
],
|
|
1391
|
+
"properties": {
|
|
1392
|
+
"index": {
|
|
1393
|
+
"type": "integer",
|
|
1394
|
+
"minimum": 0
|
|
1395
|
+
},
|
|
1396
|
+
"branches": {
|
|
1397
|
+
"type": "array",
|
|
1398
|
+
"maxItems": 100,
|
|
1399
|
+
"items": {
|
|
1400
|
+
"type": "object",
|
|
1401
|
+
"required": [
|
|
1402
|
+
"line",
|
|
1403
|
+
"whenTrue",
|
|
1404
|
+
"whenFalse",
|
|
1405
|
+
"capped"
|
|
1406
|
+
],
|
|
1407
|
+
"properties": {
|
|
1408
|
+
"line": {
|
|
1409
|
+
"type": "integer",
|
|
1410
|
+
"minimum": 1
|
|
1411
|
+
},
|
|
1412
|
+
"whenTrue": {
|
|
1413
|
+
"type": "integer",
|
|
1414
|
+
"minimum": 0
|
|
1415
|
+
},
|
|
1416
|
+
"whenFalse": {
|
|
1417
|
+
"type": "integer",
|
|
1418
|
+
"minimum": 0
|
|
1419
|
+
},
|
|
1420
|
+
"capped": {
|
|
1421
|
+
"type": "boolean",
|
|
1422
|
+
"description": "A counter hit its cap: the counts are lower bounds."
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
},
|
|
1427
|
+
"branchesOmitted": {
|
|
1428
|
+
"type": "integer",
|
|
1429
|
+
"minimum": 0
|
|
1430
|
+
},
|
|
1431
|
+
"values": {
|
|
1432
|
+
"type": "array",
|
|
1433
|
+
"maxItems": 100,
|
|
1434
|
+
"items": {
|
|
1435
|
+
"type": "object",
|
|
1436
|
+
"required": [
|
|
1437
|
+
"line",
|
|
1438
|
+
"what",
|
|
1439
|
+
"shapes"
|
|
1440
|
+
],
|
|
1441
|
+
"properties": {
|
|
1442
|
+
"line": {
|
|
1443
|
+
"type": "integer",
|
|
1444
|
+
"minimum": 1
|
|
1445
|
+
},
|
|
1446
|
+
"what": {
|
|
1447
|
+
"type": "string",
|
|
1448
|
+
"description": "The value observed, e.g. parameter:email or binding:options."
|
|
1449
|
+
},
|
|
1450
|
+
"shapes": {
|
|
1451
|
+
"type": "array",
|
|
1452
|
+
"items": {
|
|
1453
|
+
"type": "object",
|
|
1454
|
+
"required": [
|
|
1455
|
+
"shape",
|
|
1456
|
+
"count"
|
|
1457
|
+
],
|
|
1458
|
+
"properties": {
|
|
1459
|
+
"shape": {
|
|
1460
|
+
"type": "string",
|
|
1461
|
+
"description": "A value-free category, e.g. undefined, string:empty:empty, array:few."
|
|
1462
|
+
},
|
|
1463
|
+
"count": {
|
|
1464
|
+
"type": "integer",
|
|
1465
|
+
"minimum": 0
|
|
1466
|
+
}
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1470
|
+
}
|
|
1471
|
+
}
|
|
1472
|
+
},
|
|
1473
|
+
"valuesOmitted": {
|
|
1474
|
+
"type": "integer",
|
|
1475
|
+
"minimum": 0
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
},
|
|
1482
|
+
"planning": {
|
|
1483
|
+
"description": "Incident planning; null when it did not run for this change.",
|
|
1484
|
+
"oneOf": [
|
|
1485
|
+
{
|
|
1486
|
+
"type": "null"
|
|
1487
|
+
},
|
|
1488
|
+
{
|
|
1489
|
+
"type": "object",
|
|
1490
|
+
"required": [
|
|
1491
|
+
"groups",
|
|
1492
|
+
"unresolved",
|
|
1493
|
+
"ideas"
|
|
1494
|
+
],
|
|
1495
|
+
"properties": {
|
|
1496
|
+
"groups": {
|
|
1497
|
+
"description": "Behavior groups of the change, each with the failure patterns selected for it.",
|
|
1498
|
+
"type": "array",
|
|
1499
|
+
"items": {
|
|
1500
|
+
"type": "object",
|
|
1501
|
+
"required": [
|
|
1502
|
+
"id",
|
|
1503
|
+
"changeKeys",
|
|
1504
|
+
"patterns"
|
|
1505
|
+
],
|
|
1506
|
+
"properties": {
|
|
1507
|
+
"id": {
|
|
1508
|
+
"type": "string"
|
|
1509
|
+
},
|
|
1510
|
+
"changeKeys": {
|
|
1511
|
+
"type": "array",
|
|
1512
|
+
"items": {
|
|
1513
|
+
"type": "string"
|
|
1514
|
+
}
|
|
1515
|
+
},
|
|
1516
|
+
"patterns": {
|
|
1517
|
+
"type": "array",
|
|
1518
|
+
"items": {
|
|
1519
|
+
"type": "object",
|
|
1520
|
+
"required": [
|
|
1521
|
+
"entryId",
|
|
1522
|
+
"mechanism",
|
|
1523
|
+
"symptom"
|
|
1524
|
+
],
|
|
1525
|
+
"properties": {
|
|
1526
|
+
"entryId": {
|
|
1527
|
+
"type": "string"
|
|
1528
|
+
},
|
|
1529
|
+
"mechanism": {
|
|
1530
|
+
"type": "string"
|
|
1531
|
+
},
|
|
1532
|
+
"symptom": {
|
|
1533
|
+
"type": "string"
|
|
1534
|
+
}
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
},
|
|
1541
|
+
"unresolved": {
|
|
1542
|
+
"description": "Changes no behavior group holds, and why.",
|
|
1543
|
+
"type": "array",
|
|
1544
|
+
"items": {
|
|
1545
|
+
"type": "object",
|
|
1546
|
+
"required": [
|
|
1547
|
+
"changeKey",
|
|
1548
|
+
"reason"
|
|
1549
|
+
],
|
|
1550
|
+
"properties": {
|
|
1551
|
+
"changeKey": {
|
|
1552
|
+
"type": "string"
|
|
1553
|
+
},
|
|
1554
|
+
"reason": {
|
|
1555
|
+
"type": "string"
|
|
1556
|
+
}
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
},
|
|
1560
|
+
"ideas": {
|
|
1561
|
+
"description": "Haystack's own ideas: the selected situations, in plan order (at most 64). Every crawl explores them; pass the ones you want first, and your own, to `haystack verify --idea`.",
|
|
1562
|
+
"type": "array",
|
|
1563
|
+
"maxItems": 64,
|
|
1564
|
+
"items": {
|
|
1565
|
+
"type": "object",
|
|
1566
|
+
"required": [
|
|
1567
|
+
"id",
|
|
1568
|
+
"groupId",
|
|
1569
|
+
"pattern",
|
|
1570
|
+
"why",
|
|
1571
|
+
"failure",
|
|
1572
|
+
"setup",
|
|
1573
|
+
"exercise",
|
|
1574
|
+
"watch",
|
|
1575
|
+
"start"
|
|
1576
|
+
],
|
|
1577
|
+
"properties": {
|
|
1578
|
+
"id": {
|
|
1579
|
+
"type": "string"
|
|
1580
|
+
},
|
|
1581
|
+
"groupId": {
|
|
1582
|
+
"type": "string"
|
|
1583
|
+
},
|
|
1584
|
+
"pattern": {
|
|
1585
|
+
"type": "string",
|
|
1586
|
+
"description": "The failure pattern's library id."
|
|
1587
|
+
},
|
|
1588
|
+
"why": {
|
|
1589
|
+
"type": "string",
|
|
1590
|
+
"description": "How that pattern could arise in this code."
|
|
1591
|
+
},
|
|
1592
|
+
"failure": {
|
|
1593
|
+
"type": "string",
|
|
1594
|
+
"description": "What would go wrong."
|
|
1595
|
+
},
|
|
1596
|
+
"setup": {
|
|
1597
|
+
"type": "array",
|
|
1598
|
+
"items": {
|
|
1599
|
+
"type": "string"
|
|
1600
|
+
},
|
|
1601
|
+
"description": "What must be set up or true first."
|
|
1602
|
+
},
|
|
1603
|
+
"exercise": {
|
|
1604
|
+
"type": "string",
|
|
1605
|
+
"description": "What to do."
|
|
1606
|
+
},
|
|
1607
|
+
"watch": {
|
|
1608
|
+
"type": "string",
|
|
1609
|
+
"description": "What to watch."
|
|
1610
|
+
},
|
|
1611
|
+
"start": {
|
|
1612
|
+
"type": "string",
|
|
1613
|
+
"description": "Where it starts: the start screen, or a prepared start."
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
}
|
|
1619
|
+
}
|
|
1620
|
+
]
|
|
1621
|
+
}
|
|
1622
|
+
}
|
|
1623
|
+
},
|
|
1624
|
+
"captureWindow": {
|
|
1625
|
+
"type": "object",
|
|
1626
|
+
"required": [
|
|
1627
|
+
"applicationId",
|
|
1628
|
+
"days",
|
|
1629
|
+
"newestHour",
|
|
1630
|
+
"ageHours",
|
|
1631
|
+
"stale",
|
|
1632
|
+
"sessions",
|
|
1633
|
+
"routes",
|
|
1634
|
+
"union",
|
|
1635
|
+
"unmapped",
|
|
1636
|
+
"releasesWithoutManifest",
|
|
1637
|
+
"dropped"
|
|
1638
|
+
],
|
|
1639
|
+
"properties": {
|
|
1640
|
+
"applicationId": {
|
|
1641
|
+
"type": "string"
|
|
1642
|
+
},
|
|
1643
|
+
"days": {
|
|
1644
|
+
"description": "The UTC days the window covers, oldest first.",
|
|
1645
|
+
"type": "array",
|
|
1646
|
+
"items": {
|
|
1647
|
+
"type": "string"
|
|
1648
|
+
}
|
|
1649
|
+
},
|
|
1650
|
+
"newestHour": {
|
|
1651
|
+
"description": "The newest receipt hour holding events, yyyy-mm-ddThh (UTC).",
|
|
1652
|
+
"oneOf": [
|
|
1653
|
+
{
|
|
1654
|
+
"type": "null"
|
|
1655
|
+
},
|
|
1656
|
+
{
|
|
1657
|
+
"type": "string"
|
|
1658
|
+
}
|
|
1659
|
+
]
|
|
1660
|
+
},
|
|
1661
|
+
"ageHours": {
|
|
1662
|
+
"oneOf": [
|
|
1663
|
+
{
|
|
1664
|
+
"type": "null"
|
|
1665
|
+
},
|
|
1666
|
+
{
|
|
1667
|
+
"type": "number",
|
|
1668
|
+
"minimum": 0
|
|
1669
|
+
}
|
|
1670
|
+
]
|
|
1671
|
+
},
|
|
1672
|
+
"stale": {
|
|
1673
|
+
"description": "Older than 24 hours, or no data.",
|
|
1674
|
+
"type": "boolean"
|
|
1675
|
+
},
|
|
1676
|
+
"sessions": {
|
|
1677
|
+
"description": "Distinct captured sessions in the window.",
|
|
1678
|
+
"type": "integer",
|
|
1679
|
+
"minimum": 0
|
|
1680
|
+
},
|
|
1681
|
+
"routes": {
|
|
1682
|
+
"description": "The changed routes, most sessions first.",
|
|
1683
|
+
"type": "array",
|
|
1684
|
+
"items": {
|
|
1685
|
+
"type": "object",
|
|
1686
|
+
"required": [
|
|
1687
|
+
"route",
|
|
1688
|
+
"match",
|
|
1689
|
+
"source",
|
|
1690
|
+
"sessions",
|
|
1691
|
+
"share"
|
|
1692
|
+
],
|
|
1693
|
+
"properties": {
|
|
1694
|
+
"route": {
|
|
1695
|
+
"description": "The route id from the app's route manifest.",
|
|
1696
|
+
"type": "string"
|
|
1697
|
+
},
|
|
1698
|
+
"match": {
|
|
1699
|
+
"description": "Its match rule, in the framework adapter's syntax.",
|
|
1700
|
+
"type": "string"
|
|
1701
|
+
},
|
|
1702
|
+
"source": {
|
|
1703
|
+
"description": "The repository file that defines it.",
|
|
1704
|
+
"type": "string"
|
|
1705
|
+
},
|
|
1706
|
+
"sessions": {
|
|
1707
|
+
"type": "integer",
|
|
1708
|
+
"minimum": 0
|
|
1709
|
+
},
|
|
1710
|
+
"share": {
|
|
1711
|
+
"oneOf": [
|
|
1712
|
+
{
|
|
1713
|
+
"type": "null"
|
|
1714
|
+
},
|
|
1715
|
+
{
|
|
1716
|
+
"type": "number",
|
|
1717
|
+
"minimum": 0,
|
|
1718
|
+
"maximum": 1
|
|
1719
|
+
}
|
|
1720
|
+
]
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
},
|
|
1725
|
+
"union": {
|
|
1726
|
+
"description": "Sessions that visited at least one changed route (exact, not a sum).",
|
|
1727
|
+
"type": "object",
|
|
1728
|
+
"required": [
|
|
1729
|
+
"sessions",
|
|
1730
|
+
"share"
|
|
1731
|
+
],
|
|
1732
|
+
"properties": {
|
|
1733
|
+
"sessions": {
|
|
1734
|
+
"type": "integer",
|
|
1735
|
+
"minimum": 0
|
|
1736
|
+
},
|
|
1737
|
+
"share": {
|
|
1738
|
+
"oneOf": [
|
|
1739
|
+
{
|
|
1740
|
+
"type": "null"
|
|
1741
|
+
},
|
|
1742
|
+
{
|
|
1743
|
+
"type": "number",
|
|
1744
|
+
"minimum": 0,
|
|
1745
|
+
"maximum": 1
|
|
1746
|
+
}
|
|
1747
|
+
]
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
},
|
|
1751
|
+
"unmapped": {
|
|
1752
|
+
"description": "Sessions on pages no route names: unknown whether they reach the change.",
|
|
1753
|
+
"oneOf": [
|
|
1754
|
+
{
|
|
1755
|
+
"type": "null"
|
|
1756
|
+
},
|
|
1757
|
+
{
|
|
1758
|
+
"type": "object",
|
|
1759
|
+
"required": [
|
|
1760
|
+
"sessions",
|
|
1761
|
+
"share"
|
|
1762
|
+
],
|
|
1763
|
+
"properties": {
|
|
1764
|
+
"sessions": {
|
|
1765
|
+
"type": "integer",
|
|
1766
|
+
"minimum": 0
|
|
1767
|
+
},
|
|
1768
|
+
"share": {
|
|
1769
|
+
"oneOf": [
|
|
1770
|
+
{
|
|
1771
|
+
"type": "null"
|
|
1772
|
+
},
|
|
1773
|
+
{
|
|
1774
|
+
"type": "number",
|
|
1775
|
+
"minimum": 0,
|
|
1776
|
+
"maximum": 1
|
|
1777
|
+
}
|
|
1778
|
+
]
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
]
|
|
1783
|
+
},
|
|
1784
|
+
"releasesWithoutManifest": {
|
|
1785
|
+
"description": "Releases whose route manifest Haystack does not hold; their pages are unmapped.",
|
|
1786
|
+
"type": "array",
|
|
1787
|
+
"items": {
|
|
1788
|
+
"type": "string"
|
|
1789
|
+
}
|
|
1790
|
+
},
|
|
1791
|
+
"dropped": {
|
|
1792
|
+
"description": "Events dropped at ingest in the window, per reason.",
|
|
1793
|
+
"type": "object",
|
|
1794
|
+
"additionalProperties": {
|
|
1795
|
+
"type": "integer",
|
|
1796
|
+
"minimum": 0
|
|
1797
|
+
}
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1130
1800
|
}
|
|
1131
1801
|
}
|
|
1132
1802
|
}
|