reqthread 0.2.0__py3-none-any.whl

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,1149 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:evidence-bundle:schema:bundle:0.2.0",
4
+ "title": "Evidence bundle",
5
+ "description": "One baseline's traceability graph, verification records and artifact manifest. Fields express ownership and measurement; links express traceability. Referential integrity and standard-data conformance are checked by the validator, not by this schema.",
6
+ "type": "object",
7
+ "required": [
8
+ "bundle_format",
9
+ "generator",
10
+ "created_at",
11
+ "project",
12
+ "baseline",
13
+ "entities",
14
+ "links",
15
+ "artifacts"
16
+ ],
17
+ "additionalProperties": false,
18
+ "properties": {
19
+ "bundle_format": {
20
+ "type": "string",
21
+ "pattern": "^0\\.[0-9]+\\.[0-9]+$",
22
+ "description": "Semver. Readers accept any minor of major 0."
23
+ },
24
+ "generator": {
25
+ "type": "object",
26
+ "required": [
27
+ "name",
28
+ "version"
29
+ ],
30
+ "properties": {
31
+ "name": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ },
35
+ "version": {
36
+ "type": "string",
37
+ "minLength": 1
38
+ }
39
+ },
40
+ "additionalProperties": false
41
+ },
42
+ "created_at": {
43
+ "type": "string",
44
+ "format": "date-time"
45
+ },
46
+ "project": {
47
+ "type": "object",
48
+ "required": [
49
+ "id",
50
+ "name",
51
+ "integrity_claim",
52
+ "standard"
53
+ ],
54
+ "properties": {
55
+ "id": {
56
+ "type": "string",
57
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
58
+ },
59
+ "name": {
60
+ "type": "string",
61
+ "minLength": 1
62
+ },
63
+ "integrity_claim": {
64
+ "type": "string",
65
+ "description": "Integrity level id from the loaded standard data, e.g. SIL3."
66
+ },
67
+ "standard": {
68
+ "type": "object",
69
+ "required": [
70
+ "id",
71
+ "edition",
72
+ "data_hash"
73
+ ],
74
+ "properties": {
75
+ "id": {
76
+ "type": "string"
77
+ },
78
+ "edition": {
79
+ "type": "string"
80
+ },
81
+ "data_hash": {
82
+ "$ref": "#/$defs/hash"
83
+ }
84
+ },
85
+ "additionalProperties": false
86
+ }
87
+ },
88
+ "additionalProperties": false
89
+ },
90
+ "baseline": {
91
+ "type": "object",
92
+ "required": [
93
+ "id",
94
+ "commit",
95
+ "previous_bundle_hash"
96
+ ],
97
+ "properties": {
98
+ "id": {
99
+ "type": "string",
100
+ "minLength": 1
101
+ },
102
+ "commit": {
103
+ "$ref": "#/$defs/commit"
104
+ },
105
+ "tag": {
106
+ "type": "string"
107
+ },
108
+ "previous_bundle_hash": {
109
+ "description": "Canonical hash of the previous baseline's bundle; null for the first baseline. Chains baselines into a tamper-evident history.",
110
+ "oneOf": [
111
+ {
112
+ "$ref": "#/$defs/hash"
113
+ },
114
+ {
115
+ "type": "null"
116
+ }
117
+ ]
118
+ }
119
+ },
120
+ "additionalProperties": false
121
+ },
122
+ "entities": {
123
+ "type": "array",
124
+ "items": {
125
+ "$ref": "#/$defs/entity"
126
+ }
127
+ },
128
+ "links": {
129
+ "type": "array",
130
+ "items": {
131
+ "$ref": "#/$defs/link"
132
+ }
133
+ },
134
+ "artifacts": {
135
+ "type": "array",
136
+ "items": {
137
+ "$ref": "#/$defs/artifact"
138
+ }
139
+ }
140
+ },
141
+ "$defs": {
142
+ "hash": {
143
+ "type": "string",
144
+ "pattern": "^sha256:[0-9a-f]{64}$"
145
+ },
146
+ "commit": {
147
+ "type": "string",
148
+ "pattern": "^[0-9a-f]{40}$"
149
+ },
150
+ "key": {
151
+ "type": "string",
152
+ "pattern": "^[A-Z][A-Z0-9]*-[A-Z0-9][A-Z0-9._-]*$"
153
+ },
154
+ "ref": {
155
+ "type": "string",
156
+ "pattern": "^[a-z]+:\\S+$"
157
+ },
158
+ "date_time": {
159
+ "type": "string",
160
+ "format": "date-time"
161
+ },
162
+ "source": {
163
+ "type": "object",
164
+ "required": [
165
+ "path"
166
+ ],
167
+ "properties": {
168
+ "path": {
169
+ "type": "string",
170
+ "minLength": 1
171
+ },
172
+ "line": {
173
+ "type": "integer",
174
+ "minimum": 1
175
+ },
176
+ "commit": {
177
+ "$ref": "#/$defs/commit"
178
+ }
179
+ },
180
+ "additionalProperties": false
181
+ },
182
+ "metric": {
183
+ "type": "object",
184
+ "required": [
185
+ "covered",
186
+ "total"
187
+ ],
188
+ "properties": {
189
+ "covered": {
190
+ "type": "integer",
191
+ "minimum": 0
192
+ },
193
+ "total": {
194
+ "type": "integer",
195
+ "minimum": 0
196
+ }
197
+ },
198
+ "additionalProperties": false
199
+ },
200
+ "artifact_paths": {
201
+ "type": "array",
202
+ "items": {
203
+ "type": "string"
204
+ },
205
+ "uniqueItems": true
206
+ },
207
+ "entity_base": {
208
+ "type": "object",
209
+ "required": [
210
+ "id",
211
+ "kind"
212
+ ],
213
+ "properties": {
214
+ "id": {
215
+ "$ref": "#/$defs/ref"
216
+ },
217
+ "kind": {
218
+ "type": "string"
219
+ },
220
+ "source": {
221
+ "$ref": "#/$defs/source"
222
+ },
223
+ "extra": {
224
+ "type": "object",
225
+ "description": "Generator- or customer-specific attributes. Never read by gate rules."
226
+ }
227
+ }
228
+ },
229
+ "entity": {
230
+ "oneOf": [
231
+ {
232
+ "$ref": "#/$defs/requirement"
233
+ },
234
+ {
235
+ "$ref": "#/$defs/architecture_element"
236
+ },
237
+ {
238
+ "$ref": "#/$defs/design_element"
239
+ },
240
+ {
241
+ "$ref": "#/$defs/code_unit"
242
+ },
243
+ {
244
+ "$ref": "#/$defs/test_case"
245
+ },
246
+ {
247
+ "$ref": "#/$defs/environment"
248
+ },
249
+ {
250
+ "$ref": "#/$defs/test_result"
251
+ },
252
+ {
253
+ "$ref": "#/$defs/coverage_record"
254
+ },
255
+ {
256
+ "$ref": "#/$defs/finding"
257
+ },
258
+ {
259
+ "$ref": "#/$defs/deviation"
260
+ },
261
+ {
262
+ "$ref": "#/$defs/review"
263
+ },
264
+ {
265
+ "$ref": "#/$defs/tool"
266
+ },
267
+ {
268
+ "$ref": "#/$defs/preexisting_element"
269
+ },
270
+ {
271
+ "$ref": "#/$defs/technique_status"
272
+ },
273
+ {
274
+ "$ref": "#/$defs/change"
275
+ },
276
+ {
277
+ "$ref": "#/$defs/person"
278
+ },
279
+ {
280
+ "$ref": "#/$defs/hazard"
281
+ },
282
+ {
283
+ "$ref": "#/$defs/cause"
284
+ }
285
+ ]
286
+ },
287
+ "requirement": {
288
+ "$ref": "#/$defs/entity_base",
289
+ "required": [
290
+ "key",
291
+ "level",
292
+ "type",
293
+ "title",
294
+ "text",
295
+ "status"
296
+ ],
297
+ "properties": {
298
+ "id": {
299
+ "pattern": "^req:"
300
+ },
301
+ "kind": {
302
+ "const": "requirement"
303
+ },
304
+ "key": {
305
+ "$ref": "#/$defs/key"
306
+ },
307
+ "level": {
308
+ "enum": [
309
+ "system",
310
+ "software",
311
+ "derived"
312
+ ]
313
+ },
314
+ "type": {
315
+ "enum": [
316
+ "functional",
317
+ "integrity"
318
+ ]
319
+ },
320
+ "integrity_level": {
321
+ "type": [
322
+ "string",
323
+ "null"
324
+ ]
325
+ },
326
+ "title": {
327
+ "type": "string",
328
+ "minLength": 1
329
+ },
330
+ "text": {
331
+ "type": "string",
332
+ "minLength": 1
333
+ },
334
+ "rationale": {
335
+ "type": "string"
336
+ },
337
+ "verification": {
338
+ "type": "array",
339
+ "items": {
340
+ "enum": [
341
+ "test",
342
+ "analysis",
343
+ "review",
344
+ "inspection",
345
+ "demonstration"
346
+ ]
347
+ },
348
+ "uniqueItems": true
349
+ },
350
+ "test_levels": {
351
+ "type": "array",
352
+ "items": {
353
+ "type": "string"
354
+ },
355
+ "uniqueItems": true
356
+ },
357
+ "status": {
358
+ "enum": [
359
+ "draft",
360
+ "approved",
361
+ "retired"
362
+ ]
363
+ }
364
+ },
365
+ "unevaluatedProperties": false
366
+ },
367
+ "architecture_element": {
368
+ "$ref": "#/$defs/entity_base",
369
+ "required": [
370
+ "key",
371
+ "title",
372
+ "safety_related"
373
+ ],
374
+ "properties": {
375
+ "id": {
376
+ "pattern": "^arch:"
377
+ },
378
+ "kind": {
379
+ "const": "architecture_element"
380
+ },
381
+ "key": {
382
+ "$ref": "#/$defs/key"
383
+ },
384
+ "title": {
385
+ "type": "string",
386
+ "minLength": 1
387
+ },
388
+ "safety_related": {
389
+ "type": "boolean"
390
+ },
391
+ "integrity_level": {
392
+ "type": [
393
+ "string",
394
+ "null"
395
+ ]
396
+ },
397
+ "description": {
398
+ "type": "string"
399
+ }
400
+ },
401
+ "unevaluatedProperties": false
402
+ },
403
+ "design_element": {
404
+ "$ref": "#/$defs/entity_base",
405
+ "required": [
406
+ "key",
407
+ "title"
408
+ ],
409
+ "properties": {
410
+ "id": {
411
+ "pattern": "^design:"
412
+ },
413
+ "kind": {
414
+ "const": "design_element"
415
+ },
416
+ "key": {
417
+ "$ref": "#/$defs/key"
418
+ },
419
+ "title": {
420
+ "type": "string",
421
+ "minLength": 1
422
+ },
423
+ "description": {
424
+ "type": "string"
425
+ }
426
+ },
427
+ "unevaluatedProperties": false
428
+ },
429
+ "code_unit": {
430
+ "$ref": "#/$defs/entity_base",
431
+ "required": [
432
+ "path",
433
+ "symbol",
434
+ "language",
435
+ "infrastructure"
436
+ ],
437
+ "properties": {
438
+ "id": {
439
+ "pattern": "^code:"
440
+ },
441
+ "kind": {
442
+ "const": "code_unit"
443
+ },
444
+ "path": {
445
+ "type": "string",
446
+ "minLength": 1
447
+ },
448
+ "symbol": {
449
+ "type": [
450
+ "string",
451
+ "null"
452
+ ],
453
+ "description": "Function or class; null means the whole file."
454
+ },
455
+ "language": {
456
+ "enum": [
457
+ "c",
458
+ "cpp",
459
+ "python",
460
+ "rust",
461
+ "asm",
462
+ "other"
463
+ ]
464
+ },
465
+ "infrastructure": {
466
+ "description": "Non-null marks code deliberately not traced to a requirement, with the reason. Null means it must trace.",
467
+ "oneOf": [
468
+ {
469
+ "type": "null"
470
+ },
471
+ {
472
+ "type": "object",
473
+ "required": [
474
+ "reason"
475
+ ],
476
+ "properties": {
477
+ "reason": {
478
+ "type": "string",
479
+ "minLength": 1
480
+ }
481
+ },
482
+ "additionalProperties": false
483
+ }
484
+ ]
485
+ }
486
+ },
487
+ "unevaluatedProperties": false
488
+ },
489
+ "test_case": {
490
+ "$ref": "#/$defs/entity_base",
491
+ "required": [
492
+ "name",
493
+ "level"
494
+ ],
495
+ "properties": {
496
+ "id": {
497
+ "pattern": "^test:"
498
+ },
499
+ "kind": {
500
+ "const": "test_case"
501
+ },
502
+ "name": {
503
+ "type": "string",
504
+ "minLength": 1,
505
+ "description": "Stable identifier, e.g. path::function."
506
+ },
507
+ "level": {
508
+ "type": "string",
509
+ "description": "Test level id from the loaded standard data."
510
+ }
511
+ },
512
+ "unevaluatedProperties": false
513
+ },
514
+ "environment": {
515
+ "$ref": "#/$defs/entity_base",
516
+ "required": [
517
+ "name",
518
+ "env_type"
519
+ ],
520
+ "properties": {
521
+ "id": {
522
+ "pattern": "^env:"
523
+ },
524
+ "kind": {
525
+ "const": "environment"
526
+ },
527
+ "name": {
528
+ "type": "string",
529
+ "minLength": 1
530
+ },
531
+ "env_type": {
532
+ "enum": [
533
+ "host",
534
+ "simulator",
535
+ "target"
536
+ ]
537
+ },
538
+ "board": {
539
+ "type": "string"
540
+ },
541
+ "description": {
542
+ "type": "string"
543
+ }
544
+ },
545
+ "unevaluatedProperties": false
546
+ },
547
+ "test_result": {
548
+ "$ref": "#/$defs/entity_base",
549
+ "required": [
550
+ "test",
551
+ "environment",
552
+ "outcome",
553
+ "run_at"
554
+ ],
555
+ "properties": {
556
+ "id": {
557
+ "pattern": "^result:"
558
+ },
559
+ "kind": {
560
+ "const": "test_result"
561
+ },
562
+ "test": {
563
+ "type": "string",
564
+ "pattern": "^test:"
565
+ },
566
+ "environment": {
567
+ "type": "string",
568
+ "pattern": "^env:"
569
+ },
570
+ "outcome": {
571
+ "enum": [
572
+ "pass",
573
+ "fail",
574
+ "error",
575
+ "skip"
576
+ ]
577
+ },
578
+ "run_at": {
579
+ "$ref": "#/$defs/date_time"
580
+ },
581
+ "ci_job": {
582
+ "type": "string"
583
+ }
584
+ },
585
+ "unevaluatedProperties": false
586
+ },
587
+ "coverage_record": {
588
+ "$ref": "#/$defs/entity_base",
589
+ "required": [
590
+ "code_unit",
591
+ "environment",
592
+ "test_level",
593
+ "metrics"
594
+ ],
595
+ "properties": {
596
+ "id": {
597
+ "pattern": "^cov:"
598
+ },
599
+ "kind": {
600
+ "const": "coverage_record"
601
+ },
602
+ "code_unit": {
603
+ "type": "string",
604
+ "pattern": "^code:"
605
+ },
606
+ "environment": {
607
+ "type": "string",
608
+ "pattern": "^env:"
609
+ },
610
+ "test_level": {
611
+ "type": "string"
612
+ },
613
+ "metrics": {
614
+ "type": "object",
615
+ "minProperties": 1,
616
+ "properties": {
617
+ "entry": {
618
+ "$ref": "#/$defs/metric"
619
+ },
620
+ "statement": {
621
+ "$ref": "#/$defs/metric"
622
+ },
623
+ "branch": {
624
+ "$ref": "#/$defs/metric"
625
+ },
626
+ "mcdc": {
627
+ "$ref": "#/$defs/metric"
628
+ }
629
+ },
630
+ "additionalProperties": false
631
+ }
632
+ },
633
+ "unevaluatedProperties": false
634
+ },
635
+ "finding": {
636
+ "$ref": "#/$defs/entity_base",
637
+ "required": [
638
+ "tool",
639
+ "rule_id",
640
+ "location",
641
+ "severity",
642
+ "state"
643
+ ],
644
+ "properties": {
645
+ "id": {
646
+ "pattern": "^finding:"
647
+ },
648
+ "kind": {
649
+ "const": "finding"
650
+ },
651
+ "tool": {
652
+ "type": "string",
653
+ "pattern": "^tool:"
654
+ },
655
+ "rule_id": {
656
+ "type": "string",
657
+ "minLength": 1
658
+ },
659
+ "message": {
660
+ "type": "string"
661
+ },
662
+ "location": {
663
+ "$ref": "#/$defs/source"
664
+ },
665
+ "severity": {
666
+ "enum": [
667
+ "error",
668
+ "warning",
669
+ "note",
670
+ "none"
671
+ ],
672
+ "description": "SARIF result level."
673
+ },
674
+ "state": {
675
+ "enum": [
676
+ "open",
677
+ "fixed",
678
+ "deviated"
679
+ ]
680
+ },
681
+ "fingerprint": {
682
+ "type": "string"
683
+ }
684
+ },
685
+ "unevaluatedProperties": false
686
+ },
687
+ "deviation": {
688
+ "$ref": "#/$defs/entity_base",
689
+ "required": [
690
+ "key",
691
+ "justification",
692
+ "approved_by",
693
+ "approved_at",
694
+ "expires_at"
695
+ ],
696
+ "properties": {
697
+ "id": {
698
+ "pattern": "^dev:"
699
+ },
700
+ "kind": {
701
+ "const": "deviation"
702
+ },
703
+ "key": {
704
+ "$ref": "#/$defs/key"
705
+ },
706
+ "justification": {
707
+ "type": "string",
708
+ "minLength": 1
709
+ },
710
+ "scope": {
711
+ "type": "string"
712
+ },
713
+ "approved_by": {
714
+ "type": "string",
715
+ "pattern": "^person:"
716
+ },
717
+ "approved_at": {
718
+ "$ref": "#/$defs/date_time"
719
+ },
720
+ "expires_at": {
721
+ "type": [
722
+ "string",
723
+ "null"
724
+ ],
725
+ "format": "date",
726
+ "description": "Null means no expiry; gate rules may forbid that."
727
+ }
728
+ },
729
+ "unevaluatedProperties": false
730
+ },
731
+ "review": {
732
+ "$ref": "#/$defs/entity_base",
733
+ "required": [
734
+ "author",
735
+ "approvers",
736
+ "outcome",
737
+ "at",
738
+ "system"
739
+ ],
740
+ "properties": {
741
+ "id": {
742
+ "pattern": "^review:"
743
+ },
744
+ "kind": {
745
+ "const": "review"
746
+ },
747
+ "author": {
748
+ "type": "string",
749
+ "pattern": "^person:"
750
+ },
751
+ "approvers": {
752
+ "type": "array",
753
+ "items": {
754
+ "type": "string",
755
+ "pattern": "^person:"
756
+ },
757
+ "uniqueItems": true
758
+ },
759
+ "outcome": {
760
+ "enum": [
761
+ "approved",
762
+ "changes_requested",
763
+ "rejected"
764
+ ]
765
+ },
766
+ "at": {
767
+ "$ref": "#/$defs/date_time"
768
+ },
769
+ "system": {
770
+ "enum": [
771
+ "gitlab",
772
+ "github",
773
+ "gerrit",
774
+ "manual"
775
+ ]
776
+ },
777
+ "external_ref": {
778
+ "type": "string",
779
+ "description": "e.g. GitLab MR !12"
780
+ },
781
+ "section": {
782
+ "type": "string",
783
+ "description": "Package section id from the standard data."
784
+ }
785
+ },
786
+ "unevaluatedProperties": false
787
+ },
788
+ "tool": {
789
+ "$ref": "#/$defs/entity_base",
790
+ "required": [
791
+ "name",
792
+ "version",
793
+ "class"
794
+ ],
795
+ "properties": {
796
+ "id": {
797
+ "pattern": "^tool:"
798
+ },
799
+ "kind": {
800
+ "const": "tool"
801
+ },
802
+ "name": {
803
+ "type": "string",
804
+ "minLength": 1
805
+ },
806
+ "version": {
807
+ "type": "string",
808
+ "minLength": 1
809
+ },
810
+ "class": {
811
+ "type": [
812
+ "string",
813
+ "null"
814
+ ],
815
+ "description": "Tool class id from the standard data; null means not yet classified."
816
+ },
817
+ "evidence": {
818
+ "$ref": "#/$defs/artifact_paths"
819
+ }
820
+ },
821
+ "unevaluatedProperties": false
822
+ },
823
+ "preexisting_element": {
824
+ "$ref": "#/$defs/entity_base",
825
+ "required": [
826
+ "name",
827
+ "version",
828
+ "route"
829
+ ],
830
+ "properties": {
831
+ "id": {
832
+ "pattern": "^pre:"
833
+ },
834
+ "kind": {
835
+ "const": "preexisting_element"
836
+ },
837
+ "name": {
838
+ "type": "string",
839
+ "minLength": 1
840
+ },
841
+ "version": {
842
+ "type": "string",
843
+ "minLength": 1
844
+ },
845
+ "origin": {
846
+ "type": "string"
847
+ },
848
+ "route": {
849
+ "type": [
850
+ "string",
851
+ "null"
852
+ ],
853
+ "description": "Compliance route id from the standard data; null means not yet routed."
854
+ },
855
+ "justification": {
856
+ "$ref": "#/$defs/artifact_paths"
857
+ }
858
+ },
859
+ "unevaluatedProperties": false
860
+ },
861
+ "technique_status": {
862
+ "$ref": "#/$defs/entity_base",
863
+ "required": [
864
+ "technique",
865
+ "status"
866
+ ],
867
+ "properties": {
868
+ "id": {
869
+ "pattern": "^tech:"
870
+ },
871
+ "kind": {
872
+ "const": "technique_status"
873
+ },
874
+ "technique": {
875
+ "type": "string",
876
+ "description": "Technique id from the standard data."
877
+ },
878
+ "status": {
879
+ "enum": [
880
+ "applied",
881
+ "not_applied",
882
+ "not_applicable"
883
+ ]
884
+ },
885
+ "evidence": {
886
+ "$ref": "#/$defs/artifact_paths"
887
+ },
888
+ "justification": {
889
+ "type": "string"
890
+ }
891
+ },
892
+ "unevaluatedProperties": false
893
+ },
894
+ "change": {
895
+ "$ref": "#/$defs/entity_base",
896
+ "required": [
897
+ "title",
898
+ "author",
899
+ "merged_at"
900
+ ],
901
+ "properties": {
902
+ "id": {
903
+ "pattern": "^change:"
904
+ },
905
+ "kind": {
906
+ "const": "change"
907
+ },
908
+ "title": {
909
+ "type": "string",
910
+ "minLength": 1
911
+ },
912
+ "author": {
913
+ "type": "string",
914
+ "pattern": "^person:"
915
+ },
916
+ "merged_at": {
917
+ "$ref": "#/$defs/date_time"
918
+ },
919
+ "external_ref": {
920
+ "type": "string"
921
+ },
922
+ "impact_judgment": {
923
+ "type": [
924
+ "string",
925
+ "null"
926
+ ],
927
+ "description": "Human assessment of why the re-verified set is sufficient."
928
+ }
929
+ },
930
+ "unevaluatedProperties": false
931
+ },
932
+ "person": {
933
+ "$ref": "#/$defs/entity_base",
934
+ "required": [
935
+ "name",
936
+ "roles"
937
+ ],
938
+ "properties": {
939
+ "id": {
940
+ "pattern": "^person:"
941
+ },
942
+ "kind": {
943
+ "const": "person"
944
+ },
945
+ "name": {
946
+ "type": "string",
947
+ "minLength": 1
948
+ },
949
+ "roles": {
950
+ "type": "array",
951
+ "items": {
952
+ "type": "string"
953
+ },
954
+ "uniqueItems": true
955
+ },
956
+ "competence_record": {
957
+ "type": [
958
+ "string",
959
+ "null"
960
+ ],
961
+ "description": "Artifact path."
962
+ }
963
+ },
964
+ "unevaluatedProperties": false
965
+ },
966
+ "link": {
967
+ "type": "object",
968
+ "required": [
969
+ "type",
970
+ "from",
971
+ "to"
972
+ ],
973
+ "properties": {
974
+ "type": {
975
+ "enum": [
976
+ "derives_from",
977
+ "allocated_to",
978
+ "satisfies",
979
+ "implements",
980
+ "verifies",
981
+ "covers",
982
+ "justifies",
983
+ "reviews",
984
+ "affects",
985
+ "supersedes",
986
+ "mitigates",
987
+ "leads_to",
988
+ "located_in"
989
+ ]
990
+ },
991
+ "from": {
992
+ "$ref": "#/$defs/ref"
993
+ },
994
+ "to": {
995
+ "$ref": "#/$defs/ref"
996
+ },
997
+ "declared_at": {
998
+ "$ref": "#/$defs/source"
999
+ }
1000
+ },
1001
+ "additionalProperties": false
1002
+ },
1003
+ "artifact": {
1004
+ "type": "object",
1005
+ "required": [
1006
+ "path",
1007
+ "hash",
1008
+ "media_type",
1009
+ "section"
1010
+ ],
1011
+ "properties": {
1012
+ "path": {
1013
+ "type": "string",
1014
+ "minLength": 1
1015
+ },
1016
+ "hash": {
1017
+ "$ref": "#/$defs/hash"
1018
+ },
1019
+ "media_type": {
1020
+ "type": "string"
1021
+ },
1022
+ "section": {
1023
+ "type": "string",
1024
+ "description": "Package section id from the standard data."
1025
+ },
1026
+ "description": {
1027
+ "type": "string"
1028
+ },
1029
+ "produced_by": {
1030
+ "type": "string"
1031
+ }
1032
+ },
1033
+ "additionalProperties": false
1034
+ },
1035
+ "hazard": {
1036
+ "$ref": "#/$defs/entity_base",
1037
+ "required": [
1038
+ "key",
1039
+ "title",
1040
+ "text",
1041
+ "status"
1042
+ ],
1043
+ "properties": {
1044
+ "id": {
1045
+ "pattern": "^haz:"
1046
+ },
1047
+ "kind": {
1048
+ "const": "hazard"
1049
+ },
1050
+ "key": {
1051
+ "$ref": "#/$defs/key"
1052
+ },
1053
+ "title": {
1054
+ "type": "string",
1055
+ "minLength": 1
1056
+ },
1057
+ "text": {
1058
+ "type": "string",
1059
+ "minLength": 1
1060
+ },
1061
+ "severity": {
1062
+ "type": [
1063
+ "string",
1064
+ "null"
1065
+ ]
1066
+ },
1067
+ "status": {
1068
+ "enum": [
1069
+ "draft",
1070
+ "approved",
1071
+ "retired"
1072
+ ]
1073
+ }
1074
+ },
1075
+ "unevaluatedProperties": false
1076
+ },
1077
+ "cause": {
1078
+ "$ref": "#/$defs/entity_base",
1079
+ "required": [
1080
+ "key",
1081
+ "title",
1082
+ "cause_type",
1083
+ "accepted",
1084
+ "status"
1085
+ ],
1086
+ "properties": {
1087
+ "id": {
1088
+ "pattern": "^cause:"
1089
+ },
1090
+ "kind": {
1091
+ "const": "cause"
1092
+ },
1093
+ "key": {
1094
+ "$ref": "#/$defs/key"
1095
+ },
1096
+ "title": {
1097
+ "type": "string",
1098
+ "minLength": 1
1099
+ },
1100
+ "text": {
1101
+ "type": "string"
1102
+ },
1103
+ "cause_type": {
1104
+ "enum": [
1105
+ "uca",
1106
+ "failure_mode"
1107
+ ]
1108
+ },
1109
+ "accepted": {
1110
+ "oneOf": [
1111
+ {
1112
+ "type": "null"
1113
+ },
1114
+ {
1115
+ "type": "object",
1116
+ "required": [
1117
+ "justification",
1118
+ "approved_by",
1119
+ "approved_at"
1120
+ ],
1121
+ "properties": {
1122
+ "justification": {
1123
+ "type": "string",
1124
+ "minLength": 1
1125
+ },
1126
+ "approved_by": {
1127
+ "type": "string",
1128
+ "pattern": "^person:"
1129
+ },
1130
+ "approved_at": {
1131
+ "$ref": "#/$defs/date_time"
1132
+ }
1133
+ },
1134
+ "additionalProperties": false
1135
+ }
1136
+ ]
1137
+ },
1138
+ "status": {
1139
+ "enum": [
1140
+ "draft",
1141
+ "approved",
1142
+ "retired"
1143
+ ]
1144
+ }
1145
+ },
1146
+ "unevaluatedProperties": false
1147
+ }
1148
+ }
1149
+ }