@dynamicalsystems/idl 0.6.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.
@@ -0,0 +1,1012 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/DynamicalSystemsGroup/dsg-idl/schema/dsg-infra-signed-law-v1.json",
4
+ "title": "dsg.infra.signed-law/1",
5
+ "$defs": {
6
+ "bundle": {
7
+ "additionalProperties": false,
8
+ "type": "object",
9
+ "required": [
10
+ "schemaVersion",
11
+ "kind",
12
+ "testOnly",
13
+ "deployedAuthority",
14
+ "payload",
15
+ "canonicalPayload",
16
+ "payloadSha256",
17
+ "canonicalSignatureInput",
18
+ "signature"
19
+ ],
20
+ "properties": {
21
+ "schemaVersion": {
22
+ "const": 1,
23
+ "type": "number"
24
+ },
25
+ "kind": {
26
+ "anyOf": [
27
+ {
28
+ "const": "dsg.infra.signed-law",
29
+ "type": "string"
30
+ },
31
+ {
32
+ "const": "dsg.infra.signed-law-fixture",
33
+ "type": "string"
34
+ }
35
+ ]
36
+ },
37
+ "testOnly": {
38
+ "type": "boolean"
39
+ },
40
+ "deployedAuthority": {
41
+ "type": "boolean"
42
+ },
43
+ "payload": {
44
+ "additionalProperties": false,
45
+ "type": "object",
46
+ "required": [
47
+ "schemaVersion",
48
+ "kind",
49
+ "lawId",
50
+ "status",
51
+ "authority",
52
+ "standingOrder",
53
+ "scope",
54
+ "validity",
55
+ "revocation",
56
+ "ceilings",
57
+ "capabilities",
58
+ "priceProfile",
59
+ "bootstrap",
60
+ "evaluationInputs"
61
+ ],
62
+ "properties": {
63
+ "schemaVersion": {
64
+ "const": 1,
65
+ "type": "number"
66
+ },
67
+ "kind": {
68
+ "const": "dsg.infra.law",
69
+ "type": "string"
70
+ },
71
+ "lawId": {
72
+ "minLength": 1,
73
+ "type": "string"
74
+ },
75
+ "status": {
76
+ "anyOf": [
77
+ {
78
+ "const": "unissued",
79
+ "type": "string"
80
+ },
81
+ {
82
+ "const": "issued",
83
+ "type": "string"
84
+ }
85
+ ]
86
+ },
87
+ "authority": {
88
+ "additionalProperties": false,
89
+ "type": "object",
90
+ "required": [
91
+ "issuerType",
92
+ "issuerReference",
93
+ "designationReference",
94
+ "signatureReference",
95
+ "humanSignatureRequired",
96
+ "releaseAutomationMayIssue"
97
+ ],
98
+ "properties": {
99
+ "issuerType": {
100
+ "const": "human",
101
+ "type": "string"
102
+ },
103
+ "issuerReference": {
104
+ "anyOf": [
105
+ {
106
+ "minLength": 1,
107
+ "type": "string"
108
+ },
109
+ {
110
+ "type": "null"
111
+ }
112
+ ]
113
+ },
114
+ "designationReference": {
115
+ "anyOf": [
116
+ {
117
+ "minLength": 1,
118
+ "type": "string"
119
+ },
120
+ {
121
+ "type": "null"
122
+ }
123
+ ]
124
+ },
125
+ "signatureReference": {
126
+ "anyOf": [
127
+ {
128
+ "minLength": 1,
129
+ "type": "string"
130
+ },
131
+ {
132
+ "type": "null"
133
+ }
134
+ ]
135
+ },
136
+ "humanSignatureRequired": {
137
+ "const": true,
138
+ "type": "boolean"
139
+ },
140
+ "releaseAutomationMayIssue": {
141
+ "const": false,
142
+ "type": "boolean"
143
+ }
144
+ }
145
+ },
146
+ "standingOrder": {
147
+ "additionalProperties": false,
148
+ "type": "object",
149
+ "required": [
150
+ "reference",
151
+ "designationReference",
152
+ "scopeReference",
153
+ "issuedAt",
154
+ "expiresAt"
155
+ ],
156
+ "properties": {
157
+ "reference": {
158
+ "anyOf": [
159
+ {
160
+ "minLength": 1,
161
+ "type": "string"
162
+ },
163
+ {
164
+ "type": "null"
165
+ }
166
+ ]
167
+ },
168
+ "designationReference": {
169
+ "anyOf": [
170
+ {
171
+ "minLength": 1,
172
+ "type": "string"
173
+ },
174
+ {
175
+ "type": "null"
176
+ }
177
+ ]
178
+ },
179
+ "scopeReference": {
180
+ "minLength": 1,
181
+ "type": "string"
182
+ },
183
+ "issuedAt": {
184
+ "anyOf": [
185
+ {
186
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
187
+ "type": "string"
188
+ },
189
+ {
190
+ "type": "null"
191
+ }
192
+ ]
193
+ },
194
+ "expiresAt": {
195
+ "anyOf": [
196
+ {
197
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
198
+ "type": "string"
199
+ },
200
+ {
201
+ "type": "null"
202
+ }
203
+ ]
204
+ }
205
+ }
206
+ },
207
+ "scope": {
208
+ "additionalProperties": false,
209
+ "type": "object",
210
+ "required": [
211
+ "actions",
212
+ "workloadClasses",
213
+ "providers",
214
+ "regions",
215
+ "resourceDescriptorVersion"
216
+ ],
217
+ "properties": {
218
+ "actions": {
219
+ "minItems": 1,
220
+ "uniqueItems": true,
221
+ "type": "array",
222
+ "items": {
223
+ "minLength": 1,
224
+ "type": "string"
225
+ }
226
+ },
227
+ "workloadClasses": {
228
+ "minItems": 1,
229
+ "uniqueItems": true,
230
+ "type": "array",
231
+ "items": {
232
+ "minLength": 1,
233
+ "type": "string"
234
+ }
235
+ },
236
+ "providers": {
237
+ "minItems": 1,
238
+ "uniqueItems": true,
239
+ "type": "array",
240
+ "items": {
241
+ "const": "provider-neutral",
242
+ "type": "string"
243
+ }
244
+ },
245
+ "regions": {
246
+ "uniqueItems": true,
247
+ "type": "array",
248
+ "items": {
249
+ "minLength": 1,
250
+ "type": "string"
251
+ }
252
+ },
253
+ "resourceDescriptorVersion": {
254
+ "const": "dsg.infra.resource-descriptor/1",
255
+ "type": "string"
256
+ }
257
+ }
258
+ },
259
+ "validity": {
260
+ "additionalProperties": false,
261
+ "type": "object",
262
+ "required": ["clock", "notBefore", "notAfter"],
263
+ "properties": {
264
+ "clock": {
265
+ "const": "UTC",
266
+ "type": "string"
267
+ },
268
+ "notBefore": {
269
+ "anyOf": [
270
+ {
271
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
272
+ "type": "string"
273
+ },
274
+ {
275
+ "type": "null"
276
+ }
277
+ ]
278
+ },
279
+ "notAfter": {
280
+ "anyOf": [
281
+ {
282
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
283
+ "type": "string"
284
+ },
285
+ {
286
+ "type": "null"
287
+ }
288
+ ]
289
+ }
290
+ }
291
+ },
292
+ "revocation": {
293
+ "additionalProperties": false,
294
+ "type": "object",
295
+ "required": ["snapshotReference", "failClosed", "checks"],
296
+ "properties": {
297
+ "snapshotReference": {
298
+ "anyOf": [
299
+ {
300
+ "minLength": 1,
301
+ "type": "string"
302
+ },
303
+ {
304
+ "type": "null"
305
+ }
306
+ ]
307
+ },
308
+ "failClosed": {
309
+ "const": true,
310
+ "type": "boolean"
311
+ },
312
+ "checks": {
313
+ "minItems": 1,
314
+ "uniqueItems": true,
315
+ "type": "array",
316
+ "items": {
317
+ "minLength": 1,
318
+ "type": "string"
319
+ }
320
+ }
321
+ }
322
+ },
323
+ "ceilings": {
324
+ "additionalProperties": false,
325
+ "type": "object",
326
+ "required": [
327
+ "gpuSecondsPerPersonUtcWeek",
328
+ "usdMicroUnitsPerPersonUtcMonth",
329
+ "usdMicroUnitsPerOrganizationUtcMonth"
330
+ ],
331
+ "properties": {
332
+ "gpuSecondsPerPersonUtcWeek": {
333
+ "additionalProperties": false,
334
+ "type": "object",
335
+ "required": ["unit", "period", "scope", "value"],
336
+ "properties": {
337
+ "unit": {
338
+ "minLength": 1,
339
+ "type": "string"
340
+ },
341
+ "period": {
342
+ "minLength": 1,
343
+ "type": "string"
344
+ },
345
+ "scope": {
346
+ "anyOf": [
347
+ {
348
+ "const": "person",
349
+ "type": "string"
350
+ },
351
+ {
352
+ "const": "organization",
353
+ "type": "string"
354
+ }
355
+ ]
356
+ },
357
+ "value": {
358
+ "anyOf": [
359
+ {
360
+ "minimum": 0,
361
+ "type": "integer"
362
+ },
363
+ {
364
+ "type": "null"
365
+ }
366
+ ]
367
+ }
368
+ }
369
+ },
370
+ "usdMicroUnitsPerPersonUtcMonth": {
371
+ "additionalProperties": false,
372
+ "type": "object",
373
+ "required": ["unit", "period", "scope", "value"],
374
+ "properties": {
375
+ "unit": {
376
+ "minLength": 1,
377
+ "type": "string"
378
+ },
379
+ "period": {
380
+ "minLength": 1,
381
+ "type": "string"
382
+ },
383
+ "scope": {
384
+ "anyOf": [
385
+ {
386
+ "const": "person",
387
+ "type": "string"
388
+ },
389
+ {
390
+ "const": "organization",
391
+ "type": "string"
392
+ }
393
+ ]
394
+ },
395
+ "value": {
396
+ "anyOf": [
397
+ {
398
+ "minimum": 0,
399
+ "type": "integer"
400
+ },
401
+ {
402
+ "type": "null"
403
+ }
404
+ ]
405
+ }
406
+ }
407
+ },
408
+ "usdMicroUnitsPerOrganizationUtcMonth": {
409
+ "additionalProperties": false,
410
+ "type": "object",
411
+ "required": ["unit", "period", "scope", "value"],
412
+ "properties": {
413
+ "unit": {
414
+ "minLength": 1,
415
+ "type": "string"
416
+ },
417
+ "period": {
418
+ "minLength": 1,
419
+ "type": "string"
420
+ },
421
+ "scope": {
422
+ "anyOf": [
423
+ {
424
+ "const": "person",
425
+ "type": "string"
426
+ },
427
+ {
428
+ "const": "organization",
429
+ "type": "string"
430
+ }
431
+ ]
432
+ },
433
+ "value": {
434
+ "anyOf": [
435
+ {
436
+ "minimum": 0,
437
+ "type": "integer"
438
+ },
439
+ {
440
+ "type": "null"
441
+ }
442
+ ]
443
+ }
444
+ }
445
+ }
446
+ }
447
+ },
448
+ "capabilities": {
449
+ "additionalProperties": false,
450
+ "type": "object",
451
+ "required": ["providerNeutral", "descriptorVersion", "profiles"],
452
+ "properties": {
453
+ "providerNeutral": {
454
+ "const": true,
455
+ "type": "boolean"
456
+ },
457
+ "descriptorVersion": {
458
+ "const": "dsg.infra.resource-descriptor/1",
459
+ "type": "string"
460
+ },
461
+ "profiles": {
462
+ "minProperties": 1,
463
+ "type": "object",
464
+ "patternProperties": {
465
+ "^(.*)$": {
466
+ "additionalProperties": false,
467
+ "type": "object",
468
+ "required": [
469
+ "lifecycle",
470
+ "machinePrefixes",
471
+ "accelerators",
472
+ "maxRunSeconds",
473
+ "maxParallelism",
474
+ "maxGpuInstances",
475
+ "maxVcpus",
476
+ "network",
477
+ "externalIpAllowed"
478
+ ],
479
+ "properties": {
480
+ "lifecycle": {
481
+ "anyOf": [
482
+ {
483
+ "const": "ephemeral",
484
+ "type": "string"
485
+ },
486
+ {
487
+ "const": "durable",
488
+ "type": "string"
489
+ }
490
+ ]
491
+ },
492
+ "machinePrefixes": {
493
+ "minItems": 1,
494
+ "uniqueItems": true,
495
+ "type": "array",
496
+ "items": {
497
+ "minLength": 1,
498
+ "type": "string"
499
+ }
500
+ },
501
+ "accelerators": {
502
+ "uniqueItems": true,
503
+ "type": "array",
504
+ "items": {
505
+ "minLength": 1,
506
+ "type": "string"
507
+ }
508
+ },
509
+ "maxRunSeconds": {
510
+ "anyOf": [
511
+ {
512
+ "minimum": 0,
513
+ "type": "integer"
514
+ },
515
+ {
516
+ "type": "null"
517
+ }
518
+ ]
519
+ },
520
+ "maxParallelism": {
521
+ "anyOf": [
522
+ {
523
+ "minimum": 1,
524
+ "type": "integer"
525
+ },
526
+ {
527
+ "type": "null"
528
+ }
529
+ ]
530
+ },
531
+ "maxGpuInstances": {
532
+ "anyOf": [
533
+ {
534
+ "minimum": 0,
535
+ "type": "integer"
536
+ },
537
+ {
538
+ "type": "null"
539
+ }
540
+ ]
541
+ },
542
+ "maxVcpus": {
543
+ "anyOf": [
544
+ {
545
+ "minimum": 1,
546
+ "type": "integer"
547
+ },
548
+ {
549
+ "type": "null"
550
+ }
551
+ ]
552
+ },
553
+ "network": {
554
+ "const": "private",
555
+ "type": "string"
556
+ },
557
+ "externalIpAllowed": {
558
+ "const": false,
559
+ "type": "boolean"
560
+ }
561
+ }
562
+ }
563
+ }
564
+ }
565
+ }
566
+ },
567
+ "priceProfile": {
568
+ "additionalProperties": false,
569
+ "type": "object",
570
+ "required": [
571
+ "reference",
572
+ "status",
573
+ "currency",
574
+ "unit",
575
+ "basis",
576
+ "rates",
577
+ "safetyFactorBps",
578
+ "validFrom",
579
+ "validUntil"
580
+ ],
581
+ "properties": {
582
+ "reference": {
583
+ "minLength": 1,
584
+ "type": "string"
585
+ },
586
+ "status": {
587
+ "anyOf": [
588
+ {
589
+ "const": "unassigned",
590
+ "type": "string"
591
+ },
592
+ {
593
+ "const": "retained",
594
+ "type": "string"
595
+ }
596
+ ]
597
+ },
598
+ "currency": {
599
+ "const": "USD",
600
+ "type": "string"
601
+ },
602
+ "unit": {
603
+ "const": "micro_usd",
604
+ "type": "string"
605
+ },
606
+ "basis": {
607
+ "const": "retained-conservative-on-demand",
608
+ "type": "string"
609
+ },
610
+ "rates": {
611
+ "additionalProperties": false,
612
+ "type": "object",
613
+ "properties": {
614
+ "vcpuSecond": {
615
+ "minimum": 0,
616
+ "type": "integer"
617
+ },
618
+ "memoryGiBSecond": {
619
+ "minimum": 0,
620
+ "type": "integer"
621
+ },
622
+ "gpuSecond": {
623
+ "minimum": 0,
624
+ "type": "integer"
625
+ },
626
+ "startup": {
627
+ "minimum": 0,
628
+ "type": "integer"
629
+ }
630
+ }
631
+ },
632
+ "safetyFactorBps": {
633
+ "anyOf": [
634
+ {
635
+ "minimum": 10000,
636
+ "type": "integer"
637
+ },
638
+ {
639
+ "type": "null"
640
+ }
641
+ ]
642
+ },
643
+ "validFrom": {
644
+ "anyOf": [
645
+ {
646
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
647
+ "type": "string"
648
+ },
649
+ {
650
+ "type": "null"
651
+ }
652
+ ]
653
+ },
654
+ "validUntil": {
655
+ "anyOf": [
656
+ {
657
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
658
+ "type": "string"
659
+ },
660
+ {
661
+ "type": "null"
662
+ }
663
+ ]
664
+ }
665
+ }
666
+ },
667
+ "bootstrap": {
668
+ "additionalProperties": false,
669
+ "type": "object",
670
+ "required": [
671
+ "mode",
672
+ "rootReferences",
673
+ "allowedActions",
674
+ "maxUses",
675
+ "expiresAt",
676
+ "projectCreationAllowed",
677
+ "requiresHumanSignature",
678
+ "automationCanSatisfy"
679
+ ],
680
+ "properties": {
681
+ "mode": {
682
+ "const": "finite-human-root",
683
+ "type": "string"
684
+ },
685
+ "rootReferences": {
686
+ "uniqueItems": true,
687
+ "type": "array",
688
+ "items": {
689
+ "minLength": 1,
690
+ "type": "string"
691
+ }
692
+ },
693
+ "allowedActions": {
694
+ "minItems": 1,
695
+ "uniqueItems": true,
696
+ "type": "array",
697
+ "items": {
698
+ "anyOf": [
699
+ {
700
+ "const": "enroll_human_root",
701
+ "type": "string"
702
+ },
703
+ {
704
+ "const": "initialize_kernel_record",
705
+ "type": "string"
706
+ },
707
+ {
708
+ "const": "restore_kernel_record",
709
+ "type": "string"
710
+ },
711
+ {
712
+ "const": "cutover_single_writer",
713
+ "type": "string"
714
+ }
715
+ ]
716
+ }
717
+ },
718
+ "maxUses": {
719
+ "minimum": 1,
720
+ "maximum": 1,
721
+ "type": "integer"
722
+ },
723
+ "expiresAt": {
724
+ "anyOf": [
725
+ {
726
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
727
+ "type": "string"
728
+ },
729
+ {
730
+ "type": "null"
731
+ }
732
+ ]
733
+ },
734
+ "projectCreationAllowed": {
735
+ "const": false,
736
+ "type": "boolean"
737
+ },
738
+ "requiresHumanSignature": {
739
+ "const": true,
740
+ "type": "boolean"
741
+ },
742
+ "automationCanSatisfy": {
743
+ "const": false,
744
+ "type": "boolean"
745
+ }
746
+ }
747
+ },
748
+ "evaluationInputs": {
749
+ "additionalProperties": false,
750
+ "type": "object",
751
+ "required": ["policyBundle", "lawInputs"],
752
+ "properties": {
753
+ "policyBundle": {
754
+ "additionalProperties": false,
755
+ "type": "object",
756
+ "required": ["digest", "manifest"],
757
+ "properties": {
758
+ "digest": {
759
+ "pattern": "^sha256:[0-9a-f]{64}$",
760
+ "type": "string"
761
+ },
762
+ "manifest": {
763
+ "additionalProperties": false,
764
+ "minProperties": 1,
765
+ "type": "object",
766
+ "patternProperties": {
767
+ "^policy/[A-Za-z0-9._-]+\\.rego$": {
768
+ "pattern": "^[0-9a-f]{64}$",
769
+ "type": "string"
770
+ }
771
+ }
772
+ }
773
+ }
774
+ },
775
+ "lawInputs": {
776
+ "additionalProperties": false,
777
+ "type": "object",
778
+ "required": ["cloudflare", "planLimits", "profiles"],
779
+ "properties": {
780
+ "cloudflare": {
781
+ "additionalProperties": false,
782
+ "type": "object",
783
+ "required": ["approvedZoneId", "approvedAccountId"],
784
+ "properties": {
785
+ "approvedZoneId": {
786
+ "minLength": 1,
787
+ "type": "string"
788
+ },
789
+ "approvedAccountId": {
790
+ "minLength": 1,
791
+ "type": "string"
792
+ }
793
+ }
794
+ },
795
+ "planLimits": {
796
+ "additionalProperties": false,
797
+ "type": "object",
798
+ "required": ["maxGpuInstances", "maxTotalVcpus", "approvedLocations"],
799
+ "properties": {
800
+ "maxGpuInstances": {
801
+ "minimum": 0,
802
+ "type": "integer"
803
+ },
804
+ "maxTotalVcpus": {
805
+ "minimum": 1,
806
+ "type": "integer"
807
+ },
808
+ "approvedLocations": {
809
+ "minItems": 1,
810
+ "uniqueItems": true,
811
+ "type": "array",
812
+ "items": {
813
+ "minLength": 1,
814
+ "type": "string"
815
+ }
816
+ }
817
+ }
818
+ },
819
+ "profiles": {
820
+ "additionalProperties": false,
821
+ "type": "object",
822
+ "required": ["compute", "plane"],
823
+ "properties": {
824
+ "compute": {
825
+ "additionalProperties": false,
826
+ "type": "object",
827
+ "required": [
828
+ "requiresRunCeiling",
829
+ "requiresExpirationLabel",
830
+ "maxRunSeconds",
831
+ "allowExternalIp",
832
+ "machinePrefixes",
833
+ "accelerators",
834
+ "maxGpuInstances",
835
+ "maxTotalVcpus",
836
+ "maxParallelism",
837
+ "network"
838
+ ],
839
+ "properties": {
840
+ "requiresRunCeiling": {
841
+ "type": "boolean"
842
+ },
843
+ "requiresExpirationLabel": {
844
+ "type": "boolean"
845
+ },
846
+ "maxRunSeconds": {
847
+ "minimum": 1,
848
+ "type": "integer"
849
+ },
850
+ "allowExternalIp": {
851
+ "const": false,
852
+ "type": "boolean"
853
+ },
854
+ "machinePrefixes": {
855
+ "minItems": 1,
856
+ "uniqueItems": true,
857
+ "type": "array",
858
+ "items": {
859
+ "minLength": 1,
860
+ "type": "string"
861
+ }
862
+ },
863
+ "accelerators": {
864
+ "uniqueItems": true,
865
+ "type": "array",
866
+ "items": {
867
+ "minLength": 1,
868
+ "type": "string"
869
+ }
870
+ },
871
+ "maxGpuInstances": {
872
+ "minimum": 0,
873
+ "type": "integer"
874
+ },
875
+ "maxTotalVcpus": {
876
+ "minimum": 1,
877
+ "type": "integer"
878
+ },
879
+ "maxParallelism": {
880
+ "minimum": 1,
881
+ "type": "integer"
882
+ },
883
+ "network": {
884
+ "const": "private",
885
+ "type": "string"
886
+ }
887
+ }
888
+ },
889
+ "plane": {
890
+ "additionalProperties": false,
891
+ "type": "object",
892
+ "required": [
893
+ "requiresRunCeiling",
894
+ "requiresExpirationLabel",
895
+ "maxRunSeconds",
896
+ "allowExternalIp",
897
+ "machinePrefixes",
898
+ "accelerators",
899
+ "maxGpuInstances",
900
+ "maxTotalVcpus",
901
+ "maxParallelism",
902
+ "network"
903
+ ],
904
+ "properties": {
905
+ "requiresRunCeiling": {
906
+ "type": "boolean"
907
+ },
908
+ "requiresExpirationLabel": {
909
+ "type": "boolean"
910
+ },
911
+ "maxRunSeconds": {
912
+ "minimum": 1,
913
+ "type": "integer"
914
+ },
915
+ "allowExternalIp": {
916
+ "const": false,
917
+ "type": "boolean"
918
+ },
919
+ "machinePrefixes": {
920
+ "minItems": 1,
921
+ "uniqueItems": true,
922
+ "type": "array",
923
+ "items": {
924
+ "minLength": 1,
925
+ "type": "string"
926
+ }
927
+ },
928
+ "accelerators": {
929
+ "uniqueItems": true,
930
+ "type": "array",
931
+ "items": {
932
+ "minLength": 1,
933
+ "type": "string"
934
+ }
935
+ },
936
+ "maxGpuInstances": {
937
+ "minimum": 0,
938
+ "type": "integer"
939
+ },
940
+ "maxTotalVcpus": {
941
+ "minimum": 1,
942
+ "type": "integer"
943
+ },
944
+ "maxParallelism": {
945
+ "minimum": 1,
946
+ "type": "integer"
947
+ },
948
+ "network": {
949
+ "const": "private",
950
+ "type": "string"
951
+ }
952
+ }
953
+ }
954
+ }
955
+ }
956
+ }
957
+ }
958
+ }
959
+ }
960
+ }
961
+ },
962
+ "canonicalPayload": {
963
+ "minLength": 1,
964
+ "type": "string"
965
+ },
966
+ "payloadSha256": {
967
+ "pattern": "^[0-9a-f]{64}$",
968
+ "type": "string"
969
+ },
970
+ "canonicalSignatureInput": {
971
+ "minLength": 1,
972
+ "type": "string"
973
+ },
974
+ "signature": {
975
+ "additionalProperties": false,
976
+ "type": "object",
977
+ "required": ["algorithm", "keyClass", "publicKeyHex", "signatureHex"],
978
+ "properties": {
979
+ "algorithm": {
980
+ "const": "Ed25519",
981
+ "type": "string"
982
+ },
983
+ "keyClass": {
984
+ "anyOf": [
985
+ {
986
+ "const": "synthetic-test-only",
987
+ "type": "string"
988
+ },
989
+ {
990
+ "const": "human-authority",
991
+ "type": "string"
992
+ },
993
+ {
994
+ "const": "release-automation",
995
+ "type": "string"
996
+ }
997
+ ]
998
+ },
999
+ "publicKeyHex": {
1000
+ "pattern": "^[0-9a-f]{64}$",
1001
+ "type": "string"
1002
+ },
1003
+ "signatureHex": {
1004
+ "pattern": "^[0-9a-f]{128}$",
1005
+ "type": "string"
1006
+ }
1007
+ }
1008
+ }
1009
+ }
1010
+ }
1011
+ }
1012
+ }