assertledger 1.4.0 → 1.5.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 (107) hide show
  1. package/README.fr.md +5 -2
  2. package/README.md +5 -2
  3. package/conformance/schema-extensions.json +15 -0
  4. package/dist/build-info.json +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +213 -8
  7. package/dist/cli.js.map +1 -1
  8. package/dist/contracts/index.d.ts +467 -4
  9. package/dist/contracts/index.d.ts.map +1 -1
  10. package/dist/contracts/index.js +256 -3
  11. package/dist/contracts/index.js.map +1 -1
  12. package/dist/contracts/qualification.d.ts +528 -0
  13. package/dist/contracts/qualification.d.ts.map +1 -0
  14. package/dist/contracts/qualification.js +357 -0
  15. package/dist/contracts/qualification.js.map +1 -0
  16. package/dist/core/index.d.ts +9 -0
  17. package/dist/core/index.d.ts.map +1 -1
  18. package/dist/core/index.js +46 -2
  19. package/dist/core/index.js.map +1 -1
  20. package/dist/core/qualification.d.ts +17 -0
  21. package/dist/core/qualification.d.ts.map +1 -0
  22. package/dist/core/qualification.js +571 -0
  23. package/dist/core/qualification.js.map +1 -0
  24. package/dist/diagnostics.d.ts.map +1 -1
  25. package/dist/diagnostics.js +81 -4
  26. package/dist/diagnostics.js.map +1 -1
  27. package/dist/engine/adapters/bun-native.d.ts +35 -0
  28. package/dist/engine/adapters/bun-native.d.ts.map +1 -0
  29. package/dist/engine/adapters/bun-native.js +179 -0
  30. package/dist/engine/adapters/bun-native.js.map +1 -0
  31. package/dist/engine/adapters/bun-test-designated-profile.d.ts +23 -0
  32. package/dist/engine/adapters/bun-test-designated-profile.d.ts.map +1 -0
  33. package/dist/engine/adapters/bun-test-designated-profile.js +24 -0
  34. package/dist/engine/adapters/bun-test-designated-profile.js.map +1 -0
  35. package/dist/engine/container.d.ts +7 -0
  36. package/dist/engine/container.d.ts.map +1 -1
  37. package/dist/engine/container.js +22 -7
  38. package/dist/engine/container.js.map +1 -1
  39. package/dist/engine/git-regression.d.ts.map +1 -1
  40. package/dist/engine/git-regression.js +9 -2
  41. package/dist/engine/git-regression.js.map +1 -1
  42. package/dist/engine/index.d.ts +14 -0
  43. package/dist/engine/index.d.ts.map +1 -1
  44. package/dist/engine/index.js +828 -97
  45. package/dist/engine/index.js.map +1 -1
  46. package/dist/engine/qualification.d.ts +154 -0
  47. package/dist/engine/qualification.d.ts.map +1 -0
  48. package/dist/engine/qualification.js +725 -0
  49. package/dist/engine/qualification.js.map +1 -0
  50. package/dist/engine/test-closure.d.ts +39 -0
  51. package/dist/engine/test-closure.d.ts.map +1 -0
  52. package/dist/engine/test-closure.js +513 -0
  53. package/dist/engine/test-closure.js.map +1 -0
  54. package/dist/engine/witness-import.d.ts +31 -0
  55. package/dist/engine/witness-import.d.ts.map +1 -0
  56. package/dist/engine/witness-import.js +224 -0
  57. package/dist/engine/witness-import.js.map +1 -0
  58. package/dist/index.d.ts +3 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +3 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/mcp/index.d.ts.map +1 -1
  63. package/dist/mcp/index.js +65 -0
  64. package/dist/mcp/index.js.map +1 -1
  65. package/dist/sdk/index.d.ts +292 -3
  66. package/dist/sdk/index.d.ts.map +1 -1
  67. package/dist/sdk/index.js +39 -1
  68. package/dist/sdk/index.js.map +1 -1
  69. package/docs/container-isolation.md +6 -0
  70. package/docs/migration-orchestration-qualification-v1.md +109 -0
  71. package/docs/migration-verification-v4.md +94 -0
  72. package/docs/orchestration-qualification.md +167 -0
  73. package/docs/reference.md +7 -0
  74. package/docs/witness-import.md +67 -0
  75. package/examples/orchestration/README.md +68 -0
  76. package/examples/orchestration/consumer-obligations.json +101 -0
  77. package/examples/orchestration/workspace/bitbucket-pipelines.yml +10 -0
  78. package/examples/orchestration/workspace/command-shape.test.mjs +25 -0
  79. package/examples/orchestration/workspace/commands.mjs +14 -0
  80. package/examples/orchestration/workspace/completion.mjs +39 -0
  81. package/examples/orchestration/workspace/faults.json +1 -0
  82. package/examples/orchestration/workspace/native.test.ts +4 -0
  83. package/examples/orchestration/workspace/package.json +6 -0
  84. package/examples/orchestration/workspace/packages/app/package.json +12 -0
  85. package/examples/orchestration/workspace/packages/app/verdict.txt +1 -0
  86. package/examples/orchestration/workspace/packages/leaf/package.json +9 -0
  87. package/examples/orchestration/workspace/packages/leaf/verdict.txt +1 -0
  88. package/examples/orchestration/workspace/pnpm-lock.yaml +170 -0
  89. package/examples/orchestration/workspace/pnpm-workspace.yaml +2 -0
  90. package/examples/orchestration/workspace/task.mjs +23 -0
  91. package/examples/orchestration/workspace/turbo.json +38 -0
  92. package/examples/orchestration/workspace/wrapper.mjs +45 -0
  93. package/integrations/bun/driver.d.mts +30 -1
  94. package/integrations/bun/driver.mjs +215 -6
  95. package/integrations/bun/preload.mjs +186 -5
  96. package/integrations/bun-native/README.md +86 -0
  97. package/integrations/bun-native/driver.mjs +396 -0
  98. package/integrations/bun-native/preload.mjs +375 -0
  99. package/integrations/skill/SKILL.md +25 -5
  100. package/package.json +1 -1
  101. package/schemas/evidence-manifest.v4.json +995 -0
  102. package/schemas/qualification-execution-request.v1.json +571 -0
  103. package/schemas/qualification-plan.v1.json +528 -0
  104. package/schemas/qualification-receipt.v1.json +821 -0
  105. package/schemas/qualification-replay-result.v1.json +37 -0
  106. package/schemas/verification-request.v4.json +590 -0
  107. package/schemas/witness-import-request.v1.json +231 -0
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "valid": {
6
+ "type": "boolean"
7
+ },
8
+ "integrityValid": {
9
+ "type": "boolean"
10
+ },
11
+ "semanticsValid": {
12
+ "type": "boolean"
13
+ },
14
+ "domainValid": {
15
+ "type": "boolean"
16
+ },
17
+ "reexecuted": {
18
+ "type": "boolean",
19
+ "const": false
20
+ },
21
+ "producerAuthenticated": {
22
+ "type": "boolean",
23
+ "const": false
24
+ }
25
+ },
26
+ "required": [
27
+ "valid",
28
+ "integrityValid",
29
+ "semanticsValid",
30
+ "domainValid",
31
+ "reexecuted",
32
+ "producerAuthenticated"
33
+ ],
34
+ "additionalProperties": false,
35
+ "$id": "https://testforge.dev/schemas/qualification-replay-result.v1.json",
36
+ "title": "Orchestration qualification replay result v1"
37
+ }
@@ -0,0 +1,590 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": {
6
+ "$ref": "#/$defs/__schema0"
7
+ },
8
+ "repository": {
9
+ "$ref": "#/$defs/__schema1"
10
+ },
11
+ "adapter": {
12
+ "$ref": "#/$defs/__schema3"
13
+ },
14
+ "isolation": {
15
+ "$ref": "#/$defs/__schema8"
16
+ },
17
+ "candidateRoots": {
18
+ "$ref": "#/$defs/__schema11"
19
+ },
20
+ "budgets": {
21
+ "$ref": "#/$defs/__schema13"
22
+ },
23
+ "policy": {
24
+ "$ref": "#/$defs/__schema14"
25
+ },
26
+ "worlds": {
27
+ "$ref": "#/$defs/__schema16"
28
+ },
29
+ "candidates": {
30
+ "$ref": "#/$defs/__schema20"
31
+ }
32
+ },
33
+ "required": [
34
+ "schemaVersion",
35
+ "repository",
36
+ "adapter",
37
+ "isolation",
38
+ "candidateRoots",
39
+ "budgets",
40
+ "policy",
41
+ "worlds",
42
+ "candidates"
43
+ ],
44
+ "additionalProperties": false,
45
+ "title": "AssertLedger verification request v4",
46
+ "description": "A versioned campaign that can designate existing Bun tests, snapshot dependencies, and declare Windows-native execution.",
47
+ "$defs": {
48
+ "__schema0": {
49
+ "type": "string",
50
+ "const": "4.0.0"
51
+ },
52
+ "__schema1": {
53
+ "type": "object",
54
+ "properties": {
55
+ "root": {
56
+ "type": "string",
57
+ "minLength": 1
58
+ },
59
+ "exclude": {
60
+ "maxItems": 1000,
61
+ "type": "array",
62
+ "items": {
63
+ "$ref": "#/$defs/__schema2"
64
+ }
65
+ },
66
+ "includeDependencies": {
67
+ "type": "boolean"
68
+ },
69
+ "git": {
70
+ "type": "string",
71
+ "enum": ["excluded", "synthesized"]
72
+ }
73
+ },
74
+ "required": ["root", "exclude", "includeDependencies", "git"],
75
+ "additionalProperties": false
76
+ },
77
+ "__schema2": {
78
+ "type": "string",
79
+ "minLength": 1,
80
+ "maxLength": 512
81
+ },
82
+ "__schema3": {
83
+ "oneOf": [
84
+ {
85
+ "type": "object",
86
+ "properties": {
87
+ "kind": {
88
+ "type": "string",
89
+ "const": "node-test"
90
+ },
91
+ "executable": {
92
+ "type": "string",
93
+ "minLength": 1
94
+ },
95
+ "baseTestFiles": {
96
+ "minItems": 1,
97
+ "maxItems": 1000,
98
+ "type": "array",
99
+ "items": {
100
+ "$ref": "#/$defs/__schema4"
101
+ }
102
+ },
103
+ "extraArguments": {
104
+ "maxItems": 0,
105
+ "type": "array",
106
+ "items": {
107
+ "$ref": "#/$defs/__schema5"
108
+ }
109
+ }
110
+ },
111
+ "required": ["kind", "executable", "baseTestFiles"],
112
+ "additionalProperties": false
113
+ },
114
+ {
115
+ "type": "object",
116
+ "properties": {
117
+ "kind": {
118
+ "type": "string",
119
+ "const": "testforge-command"
120
+ },
121
+ "executable": {
122
+ "type": "string",
123
+ "minLength": 1
124
+ },
125
+ "arguments": {
126
+ "maxItems": 100,
127
+ "type": "array",
128
+ "items": {
129
+ "$ref": "#/$defs/__schema6"
130
+ }
131
+ },
132
+ "protocolVersion": {
133
+ "type": "string",
134
+ "const": "1.0.0"
135
+ }
136
+ },
137
+ "required": ["kind", "executable", "arguments", "protocolVersion"],
138
+ "additionalProperties": false
139
+ },
140
+ {
141
+ "type": "object",
142
+ "properties": {
143
+ "kind": {
144
+ "type": "string",
145
+ "const": "bun-test"
146
+ },
147
+ "executable": {
148
+ "type": "string",
149
+ "minLength": 1
150
+ },
151
+ "baseTestFiles": {
152
+ "minItems": 1,
153
+ "maxItems": 1000,
154
+ "type": "array",
155
+ "items": {
156
+ "$ref": "#/$defs/__schema7"
157
+ }
158
+ }
159
+ },
160
+ "required": ["kind", "executable", "baseTestFiles"],
161
+ "additionalProperties": false
162
+ },
163
+ {
164
+ "type": "object",
165
+ "properties": {
166
+ "kind": {
167
+ "type": "string",
168
+ "const": "bun-test-designated"
169
+ },
170
+ "executable": {
171
+ "type": "string",
172
+ "minLength": 1
173
+ },
174
+ "testTimeoutMs": {
175
+ "anyOf": [
176
+ {
177
+ "type": "integer",
178
+ "minimum": 1,
179
+ "maximum": 3600000
180
+ },
181
+ {
182
+ "type": "null"
183
+ }
184
+ ]
185
+ }
186
+ },
187
+ "required": ["kind", "executable", "testTimeoutMs"],
188
+ "additionalProperties": false
189
+ }
190
+ ]
191
+ },
192
+ "__schema4": {
193
+ "type": "string",
194
+ "minLength": 1
195
+ },
196
+ "__schema5": {
197
+ "type": "string"
198
+ },
199
+ "__schema6": {
200
+ "type": "string"
201
+ },
202
+ "__schema7": {
203
+ "type": "string",
204
+ "minLength": 1
205
+ },
206
+ "__schema8": {
207
+ "oneOf": [
208
+ {
209
+ "type": "object",
210
+ "properties": {
211
+ "kind": {
212
+ "type": "string",
213
+ "const": "trusted-local"
214
+ },
215
+ "acknowledgedUnsafeExecution": {
216
+ "type": "boolean"
217
+ },
218
+ "environmentAllowlist": {
219
+ "maxItems": 100,
220
+ "type": "array",
221
+ "items": {
222
+ "$ref": "#/$defs/__schema9"
223
+ }
224
+ }
225
+ },
226
+ "required": ["kind", "acknowledgedUnsafeExecution", "environmentAllowlist"],
227
+ "additionalProperties": false
228
+ },
229
+ {
230
+ "type": "object",
231
+ "properties": {
232
+ "kind": {
233
+ "type": "string",
234
+ "const": "container"
235
+ },
236
+ "image": {
237
+ "type": "string",
238
+ "maxLength": 512,
239
+ "pattern": "^(?:[A-Za-z0-9][A-Za-z0-9.-]*(?::[0-9]{1,5})?\\/)?[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*)*(?::[A-Za-z0-9_][A-Za-z0-9._-]{0,127})?@sha256:[a-f0-9]{64}$"
240
+ },
241
+ "environment": {
242
+ "maxItems": 100,
243
+ "type": "array",
244
+ "items": {
245
+ "$ref": "#/$defs/__schema10"
246
+ }
247
+ },
248
+ "limits": {
249
+ "type": "object",
250
+ "properties": {
251
+ "memoryBytes": {
252
+ "type": "integer",
253
+ "minimum": 67108864,
254
+ "maximum": 68719476736
255
+ },
256
+ "cpuMillicores": {
257
+ "type": "integer",
258
+ "minimum": 100,
259
+ "maximum": 256000
260
+ },
261
+ "pids": {
262
+ "type": "integer",
263
+ "minimum": 16,
264
+ "maximum": 65536
265
+ },
266
+ "temporaryDirectoryBytes": {
267
+ "type": "integer",
268
+ "minimum": 1048576,
269
+ "maximum": 17179869184
270
+ }
271
+ },
272
+ "required": ["memoryBytes", "cpuMillicores", "pids", "temporaryDirectoryBytes"],
273
+ "additionalProperties": false
274
+ }
275
+ },
276
+ "required": ["kind", "image", "environment", "limits"],
277
+ "additionalProperties": false
278
+ },
279
+ {
280
+ "type": "object",
281
+ "properties": {
282
+ "kind": {
283
+ "type": "string",
284
+ "const": "windows-native"
285
+ },
286
+ "acknowledgedUnsafeExecution": {
287
+ "type": "boolean"
288
+ },
289
+ "environmentAllowlist": {
290
+ "maxItems": 100,
291
+ "type": "array",
292
+ "items": {
293
+ "$ref": "#/$defs/__schema9"
294
+ }
295
+ }
296
+ },
297
+ "required": ["kind", "acknowledgedUnsafeExecution", "environmentAllowlist"],
298
+ "additionalProperties": false
299
+ }
300
+ ]
301
+ },
302
+ "__schema9": {
303
+ "type": "string",
304
+ "minLength": 1,
305
+ "maxLength": 128,
306
+ "pattern": "^(?!(?:[Nn][Oo][Dd][Ee]_[Oo][Pp][Tt][Ii][Oo][Nn][Ss]$|[Tt][Ee][Ss][Tt][Ff][Oo][Rr][Gg][Ee]_|[Nn][Oo][Dd][Ee]_[Tt][Ee][Ss][Tt]_)).+$"
307
+ },
308
+ "__schema10": {
309
+ "type": "object",
310
+ "properties": {
311
+ "name": {
312
+ "$ref": "#/$defs/__schema9"
313
+ },
314
+ "value": {
315
+ "type": "string",
316
+ "maxLength": 4096
317
+ }
318
+ },
319
+ "required": ["name", "value"],
320
+ "additionalProperties": false
321
+ },
322
+ "__schema11": {
323
+ "minItems": 1,
324
+ "maxItems": 100,
325
+ "type": "array",
326
+ "items": {
327
+ "$ref": "#/$defs/__schema12"
328
+ }
329
+ },
330
+ "__schema12": {
331
+ "type": "string",
332
+ "minLength": 1,
333
+ "maxLength": 512
334
+ },
335
+ "__schema13": {
336
+ "type": "object",
337
+ "properties": {
338
+ "maximumCandidates": {
339
+ "type": "integer",
340
+ "minimum": 1,
341
+ "maximum": 1000
342
+ },
343
+ "maximumWorlds": {
344
+ "type": "integer",
345
+ "minimum": 3,
346
+ "maximum": 1000
347
+ },
348
+ "maximumExecutions": {
349
+ "type": "integer",
350
+ "minimum": 1,
351
+ "maximum": 1000000
352
+ },
353
+ "maximumRepositoryFiles": {
354
+ "type": "integer",
355
+ "minimum": 1,
356
+ "maximum": 10000000
357
+ },
358
+ "maximumRepositoryBytes": {
359
+ "type": "integer",
360
+ "minimum": 1,
361
+ "maximum": 1000000000000
362
+ },
363
+ "maximumWorldOverlayBytes": {
364
+ "type": "integer",
365
+ "minimum": 1,
366
+ "maximum": 1000000000000
367
+ },
368
+ "maximumCandidateBytes": {
369
+ "type": "integer",
370
+ "minimum": 1,
371
+ "maximum": 100000000
372
+ },
373
+ "maximumTotalCandidateBytes": {
374
+ "type": "integer",
375
+ "minimum": 1,
376
+ "maximum": 100000000000
377
+ },
378
+ "timeoutMsPerExecution": {
379
+ "type": "integer",
380
+ "minimum": 10,
381
+ "maximum": 86400000
382
+ },
383
+ "maximumOutputBytes": {
384
+ "type": "integer",
385
+ "minimum": 128,
386
+ "maximum": 100000000
387
+ }
388
+ },
389
+ "required": [
390
+ "maximumCandidates",
391
+ "maximumWorlds",
392
+ "maximumExecutions",
393
+ "maximumRepositoryFiles",
394
+ "maximumRepositoryBytes",
395
+ "maximumWorldOverlayBytes",
396
+ "maximumCandidateBytes",
397
+ "maximumTotalCandidateBytes",
398
+ "timeoutMsPerExecution",
399
+ "maximumOutputBytes"
400
+ ],
401
+ "additionalProperties": false
402
+ },
403
+ "__schema14": {
404
+ "type": "object",
405
+ "properties": {
406
+ "policyVersion": {
407
+ "type": "string",
408
+ "const": "1.0.0"
409
+ },
410
+ "requiredAttempts": {
411
+ "type": "integer",
412
+ "minimum": 1,
413
+ "maximum": 1000
414
+ },
415
+ "minimumTargetWeightPermille": {
416
+ "type": "integer",
417
+ "minimum": 1,
418
+ "maximum": 1000
419
+ },
420
+ "maximumSelectedCandidates": {
421
+ "type": "integer",
422
+ "minimum": 1,
423
+ "maximum": 1000
424
+ },
425
+ "acceptedTargetOutcomes": {
426
+ "minItems": 1,
427
+ "maxItems": 1,
428
+ "type": "array",
429
+ "items": {
430
+ "$ref": "#/$defs/__schema15"
431
+ }
432
+ }
433
+ },
434
+ "required": [
435
+ "policyVersion",
436
+ "requiredAttempts",
437
+ "minimumTargetWeightPermille",
438
+ "maximumSelectedCandidates",
439
+ "acceptedTargetOutcomes"
440
+ ],
441
+ "additionalProperties": false
442
+ },
443
+ "__schema15": {
444
+ "type": "string",
445
+ "const": "ASSERTION_FAILURE"
446
+ },
447
+ "__schema16": {
448
+ "minItems": 1,
449
+ "maxItems": 1000,
450
+ "type": "array",
451
+ "items": {
452
+ "$ref": "#/$defs/__schema17"
453
+ }
454
+ },
455
+ "__schema17": {
456
+ "type": "object",
457
+ "properties": {
458
+ "id": {
459
+ "$ref": "#/$defs/__schema18"
460
+ },
461
+ "kind": {
462
+ "type": "string",
463
+ "enum": ["REFERENCE", "TARGET", "NEUTRAL"]
464
+ },
465
+ "required": {
466
+ "type": "boolean"
467
+ },
468
+ "weight": {
469
+ "type": "integer",
470
+ "minimum": 0,
471
+ "maximum": 1000000
472
+ },
473
+ "provenance": {
474
+ "type": "string",
475
+ "minLength": 1,
476
+ "maxLength": 1024
477
+ },
478
+ "files": {
479
+ "maxItems": 1000,
480
+ "type": "array",
481
+ "items": {
482
+ "$ref": "#/$defs/__schema19"
483
+ }
484
+ }
485
+ },
486
+ "required": ["id", "kind", "required", "weight", "provenance", "files"],
487
+ "additionalProperties": false
488
+ },
489
+ "__schema18": {
490
+ "type": "string",
491
+ "minLength": 1,
492
+ "maxLength": 128,
493
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
494
+ },
495
+ "__schema19": {
496
+ "type": "object",
497
+ "properties": {
498
+ "path": {
499
+ "type": "string",
500
+ "minLength": 1,
501
+ "maxLength": 512
502
+ },
503
+ "content": {
504
+ "type": "string",
505
+ "maxLength": 1048576
506
+ }
507
+ },
508
+ "required": ["path", "content"],
509
+ "additionalProperties": false
510
+ },
511
+ "__schema20": {
512
+ "minItems": 1,
513
+ "maxItems": 1000,
514
+ "type": "array",
515
+ "items": {
516
+ "$ref": "#/$defs/__schema21"
517
+ }
518
+ },
519
+ "__schema21": {
520
+ "anyOf": [
521
+ {
522
+ "type": "object",
523
+ "properties": {
524
+ "id": {
525
+ "$ref": "#/$defs/__schema18"
526
+ },
527
+ "files": {
528
+ "minItems": 1,
529
+ "maxItems": 100,
530
+ "type": "array",
531
+ "items": {
532
+ "$ref": "#/$defs/__schema19"
533
+ }
534
+ }
535
+ },
536
+ "required": ["id", "files"],
537
+ "additionalProperties": false
538
+ },
539
+ {
540
+ "type": "object",
541
+ "properties": {
542
+ "id": {
543
+ "$ref": "#/$defs/__schema18"
544
+ },
545
+ "test": {
546
+ "type": "object",
547
+ "properties": {
548
+ "file": {
549
+ "type": "string",
550
+ "minLength": 1,
551
+ "maxLength": 512
552
+ },
553
+ "path": {
554
+ "minItems": 1,
555
+ "maxItems": 32,
556
+ "type": "array",
557
+ "items": {
558
+ "$ref": "#/$defs/__schema22"
559
+ }
560
+ }
561
+ },
562
+ "required": ["file", "path"],
563
+ "additionalProperties": false
564
+ },
565
+ "expectedFailure": {
566
+ "anyOf": [
567
+ {
568
+ "type": "string",
569
+ "minLength": 1,
570
+ "maxLength": 1024
571
+ },
572
+ {
573
+ "type": "null"
574
+ }
575
+ ]
576
+ }
577
+ },
578
+ "required": ["id", "test", "expectedFailure"],
579
+ "additionalProperties": false
580
+ }
581
+ ]
582
+ },
583
+ "__schema22": {
584
+ "type": "string",
585
+ "minLength": 1,
586
+ "maxLength": 1024
587
+ }
588
+ },
589
+ "$id": "https://testforge.dev/schemas/verification-request.v4.json"
590
+ }