core-runtime-engine 11.5.1__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.
Files changed (96) hide show
  1. core_runtime/__init__.py +10 -0
  2. core_runtime/__version__.py +17 -0
  3. core_runtime/cli/__init__.py +7 -0
  4. core_runtime/cli/__main__.py +22 -0
  5. core_runtime/cli/bump_version.py +176 -0
  6. core_runtime/cli/contract_preflight.py +69 -0
  7. core_runtime/cli/create_domain.py +66 -0
  8. core_runtime/cli/doctor.py +44 -0
  9. core_runtime/cli/inventory.py +85 -0
  10. core_runtime/cli/lint.py +8 -0
  11. core_runtime/cli/main.py +579 -0
  12. core_runtime/cli/release_check.py +65 -0
  13. core_runtime/cli/repair_artifact_paths.py +48 -0
  14. core_runtime/cli/sync_template.py +67 -0
  15. core_runtime/cli/validate.py +73 -0
  16. core_runtime/core/__init__.py +34 -0
  17. core_runtime/core/audit_event.py +760 -0
  18. core_runtime/core/audit_trail_index.py +100 -0
  19. core_runtime/core/canonicalization.py +55 -0
  20. core_runtime/core/contract_evaluator.py +945 -0
  21. core_runtime/core/contract_executability.py +307 -0
  22. core_runtime/core/contract_loader.py +57 -0
  23. core_runtime/core/contract_probes.py +630 -0
  24. core_runtime/core/contract_program.py +131 -0
  25. core_runtime/core/contract_program_registry.py +104 -0
  26. core_runtime/core/contract_program_v2.py +126 -0
  27. core_runtime/core/dsk_v3.py +142 -0
  28. core_runtime/core/explainability.py +2115 -0
  29. core_runtime/core/numeric_normalization.py +120 -0
  30. core_runtime/core/rule_anchor.py +1388 -0
  31. core_runtime/core/schema_fingerprint.py +69 -0
  32. core_runtime/core/sensor_evidence.py +548 -0
  33. core_runtime/data/contracts/CoreAnchor.sol +109 -0
  34. core_runtime/data/contracts/CoreRuleAnchor.abi.json +111 -0
  35. core_runtime/data/contracts/CoreRuleAnchor.bin +1 -0
  36. core_runtime/data/contracts/CoreRuleAnchor.build.json +20 -0
  37. core_runtime/data/contracts/CoreRuleAnchor.runtime.bin +1 -0
  38. core_runtime/data/contracts/CoreRuleAnchor.sol +74 -0
  39. core_runtime/data/package_data_manifest.v1.json +173 -0
  40. core_runtime/data/schemas/core/causal_trace.v1.json +141 -0
  41. core_runtime/data/schemas/core/context_gate.v1.json +38 -0
  42. core_runtime/data/schemas/core/context_threshold.v1.json +46 -0
  43. core_runtime/data/schemas/core/contract_program.v1.json +186 -0
  44. core_runtime/data/schemas/core/contract_program.v2.json +187 -0
  45. core_runtime/data/schemas/core/control_decision.v1.json +114 -0
  46. core_runtime/data/schemas/core/dsk.v3.json +105 -0
  47. core_runtime/data/schemas/core/effect_result.v1.json +39 -0
  48. core_runtime/data/schemas/core/entropy_signal.v1.json +108 -0
  49. core_runtime/data/schemas/core/execution_receipt.v1.json +93 -0
  50. core_runtime/data/schemas/core/frozen_release_manifest.v1.json +87 -0
  51. core_runtime/data/schemas/core/frozen_release_manifest.v2.json +72 -0
  52. core_runtime/data/schemas/core/frozen_release_manifest.v3.json +38 -0
  53. core_runtime/data/schemas/core/frozen_release_manifest.v4.json +72 -0
  54. core_runtime/data/schemas/core/frozen_release_manifest.v5.json +38 -0
  55. core_runtime/data/schemas/core/frozen_release_manifest.v6.json +116 -0
  56. core_runtime/data/schemas/core/frozen_release_manifest.v7.json +37 -0
  57. core_runtime/data/schemas/core/frozen_release_manifest.v8.json +114 -0
  58. core_runtime/data/schemas/core/frozen_rule_set.v1.json +282 -0
  59. core_runtime/data/schemas/core/memory_artifact.v1.json +120 -0
  60. core_runtime/data/schemas/core/memory_generation_result.v1.json +37 -0
  61. core_runtime/data/schemas/core/operational_learning_event.v1.json +63 -0
  62. core_runtime/data/schemas/core/pattern_candidate.v1.json +114 -0
  63. core_runtime/data/schemas/core/physical_safety_assurance_case.v1.json +676 -0
  64. core_runtime/data/schemas/core/policy_lifecycle.v1.json +99 -0
  65. core_runtime/data/schemas/core/retention_manifest.v1.json +53 -0
  66. core_runtime/data/schemas/core/reversibility_policy.v1.json +107 -0
  67. core_runtime/data/schemas/core/rule_anchor_batch.v1.json +93 -0
  68. core_runtime/data/schemas/core/rule_anchor_chain_evidence.v1.json +56 -0
  69. core_runtime/data/schemas/core/rule_approval.v1.json +49 -0
  70. core_runtime/data/schemas/core/rule_approval_request.v1.json +42 -0
  71. core_runtime/data/schemas/core/state_transition.v1.json +115 -0
  72. core_runtime/data/schemas/core/task_closeout.v1.json +47 -0
  73. core_runtime/data/schemas/core/template_promotion_candidate.v1.json +83 -0
  74. core_runtime/data/schemas/core/unsigned_rule_anchor_deployment.v1.json +106 -0
  75. core_runtime/data/schemas/core/unsigned_rule_anchor_transaction.v1.json +116 -0
  76. core_runtime/tooling/__init__.py +48 -0
  77. core_runtime/tooling/bump_version.py +900 -0
  78. core_runtime/tooling/contract_preflight.py +293 -0
  79. core_runtime/tooling/create_domain.py +254 -0
  80. core_runtime/tooling/diagnostics.py +129 -0
  81. core_runtime/tooling/doctor.py +482 -0
  82. core_runtime/tooling/file_inventory.py +182 -0
  83. core_runtime/tooling/json_checks.py +100 -0
  84. core_runtime/tooling/release_check.py +1017 -0
  85. core_runtime/tooling/repair_artifact_paths.py +458 -0
  86. core_runtime/tooling/report_writer.py +176 -0
  87. core_runtime/tooling/repository_inventory.py +399 -0
  88. core_runtime/tooling/safety_checks.py +172 -0
  89. core_runtime/tooling/sync_template.py +303 -0
  90. core_runtime/tooling/validation.py +507 -0
  91. core_runtime/tooling/version_inventory.py +256 -0
  92. core_runtime_engine-11.5.1.dist-info/METADATA +35 -0
  93. core_runtime_engine-11.5.1.dist-info/RECORD +96 -0
  94. core_runtime_engine-11.5.1.dist-info/WHEEL +5 -0
  95. core_runtime_engine-11.5.1.dist-info/entry_points.txt +2 -0
  96. core_runtime_engine-11.5.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,676 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://core.antillanca.dev/schemas/core/physical_safety_assurance_case.v1.json",
4
+ "title": "PhysicalSafetyAssuranceCase.v1",
5
+ "description": "A bounded, evidence-linked safety case for systems with physical actuation. It cannot claim universal truth, zero risk, or deployment authority.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "type",
11
+ "case_id",
12
+ "system",
13
+ "claim",
14
+ "observed_envelope",
15
+ "authority_boundary",
16
+ "hazards",
17
+ "barriers",
18
+ "verification_tests",
19
+ "epistemic_dignity",
20
+ "lifecycle",
21
+ "evidence",
22
+ "traceability",
23
+ "requested_assurance_level",
24
+ "evaluated_at",
25
+ "fingerprint"
26
+ ],
27
+ "properties": {
28
+ "schema_version": {
29
+ "const": "core.physical_safety_assurance_case.v1"
30
+ },
31
+ "type": {
32
+ "const": "physical_safety_assurance_case"
33
+ },
34
+ "case_id": {
35
+ "type": "string",
36
+ "pattern": "^safety-case:[a-z0-9][a-z0-9._-]{2,127}$"
37
+ },
38
+ "system": {
39
+ "$ref": "#/definitions/system"
40
+ },
41
+ "claim": {
42
+ "$ref": "#/definitions/claim"
43
+ },
44
+ "observed_envelope": {
45
+ "$ref": "#/definitions/observed_envelope"
46
+ },
47
+ "authority_boundary": {
48
+ "$ref": "#/definitions/authority_boundary"
49
+ },
50
+ "hazards": {
51
+ "type": "array",
52
+ "minItems": 1,
53
+ "items": {
54
+ "$ref": "#/definitions/hazard"
55
+ }
56
+ },
57
+ "barriers": {
58
+ "type": "array",
59
+ "minItems": 2,
60
+ "items": {
61
+ "$ref": "#/definitions/barrier"
62
+ }
63
+ },
64
+ "verification_tests": {
65
+ "type": "array",
66
+ "minItems": 1,
67
+ "items": {
68
+ "$ref": "#/definitions/verification_test"
69
+ }
70
+ },
71
+ "epistemic_dignity": {
72
+ "$ref": "#/definitions/epistemic_dignity"
73
+ },
74
+ "lifecycle": {
75
+ "$ref": "#/definitions/lifecycle"
76
+ },
77
+ "evidence": {
78
+ "type": "array",
79
+ "minItems": 1,
80
+ "items": {
81
+ "$ref": "#/definitions/evidence"
82
+ }
83
+ },
84
+ "traceability": {
85
+ "$ref": "#/definitions/traceability"
86
+ },
87
+ "requested_assurance_level": {
88
+ "enum": [
89
+ "simulation_only",
90
+ "evidence_ready",
91
+ "independent_evidence_ready"
92
+ ]
93
+ },
94
+ "evaluated_at": {
95
+ "type": "string",
96
+ "format": "date-time"
97
+ },
98
+ "fingerprint": {
99
+ "$ref": "#/definitions/fingerprint"
100
+ }
101
+ },
102
+ "definitions": {
103
+ "fingerprint": {
104
+ "type": "string",
105
+ "pattern": "^sha256:[a-f0-9]{64}$"
106
+ },
107
+ "ref": {
108
+ "type": "string",
109
+ "minLength": 1,
110
+ "maxLength": 512,
111
+ "pattern": "^(?!/)(?![A-Za-z]:\\\\).+"
112
+ },
113
+ "nonempty_text": {
114
+ "type": "string",
115
+ "minLength": 1,
116
+ "maxLength": 4096
117
+ },
118
+ "system": {
119
+ "type": "object",
120
+ "additionalProperties": false,
121
+ "required": [
122
+ "system_id",
123
+ "system_version",
124
+ "release_fingerprint",
125
+ "deployment_fingerprint",
126
+ "physical_actuation"
127
+ ],
128
+ "properties": {
129
+ "system_id": {
130
+ "type": "string",
131
+ "pattern": "^system:[a-z0-9][a-z0-9._-]{2,127}$"
132
+ },
133
+ "system_version": {
134
+ "type": "string",
135
+ "minLength": 1,
136
+ "maxLength": 128
137
+ },
138
+ "release_fingerprint": {
139
+ "$ref": "#/definitions/fingerprint"
140
+ },
141
+ "deployment_fingerprint": {
142
+ "$ref": "#/definitions/fingerprint"
143
+ },
144
+ "physical_actuation": {
145
+ "const": true
146
+ }
147
+ }
148
+ },
149
+ "claim": {
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "required": [
153
+ "claim_status",
154
+ "truth_claim",
155
+ "zero_risk_claim",
156
+ "scope",
157
+ "assumptions",
158
+ "limitations",
159
+ "reference_classes"
160
+ ],
161
+ "properties": {
162
+ "claim_status": {
163
+ "enum": [
164
+ "observed",
165
+ "inferred",
166
+ "demonstrated_within_model"
167
+ ]
168
+ },
169
+ "truth_claim": {
170
+ "const": false
171
+ },
172
+ "zero_risk_claim": {
173
+ "const": false
174
+ },
175
+ "scope": {
176
+ "$ref": "#/definitions/nonempty_text"
177
+ },
178
+ "assumptions": {
179
+ "type": "array",
180
+ "minItems": 1,
181
+ "uniqueItems": true,
182
+ "items": {
183
+ "$ref": "#/definitions/nonempty_text"
184
+ }
185
+ },
186
+ "limitations": {
187
+ "type": "array",
188
+ "minItems": 1,
189
+ "uniqueItems": true,
190
+ "items": {
191
+ "$ref": "#/definitions/nonempty_text"
192
+ }
193
+ },
194
+ "reference_classes": {
195
+ "type": "array",
196
+ "minItems": 1,
197
+ "uniqueItems": true,
198
+ "items": {
199
+ "enum": [
200
+ "simulation",
201
+ "laboratory",
202
+ "hardware_in_loop",
203
+ "field_observation",
204
+ "independent_assessment",
205
+ "formal_model"
206
+ ]
207
+ }
208
+ },
209
+ "proof_refs": {
210
+ "type": "array",
211
+ "minItems": 1,
212
+ "uniqueItems": true,
213
+ "items": {
214
+ "$ref": "#/definitions/ref"
215
+ }
216
+ }
217
+ }
218
+ },
219
+ "extreme_observation": {
220
+ "type": "object",
221
+ "additionalProperties": false,
222
+ "required": [
223
+ "extreme_id",
224
+ "direction",
225
+ "value",
226
+ "unit",
227
+ "source_ref",
228
+ "evidence_ref",
229
+ "observed_at"
230
+ ],
231
+ "properties": {
232
+ "extreme_id": {
233
+ "type": "string",
234
+ "pattern": "^extreme:[a-z0-9][a-z0-9._-]{2,127}$"
235
+ },
236
+ "direction": {
237
+ "enum": ["lower", "upper", "adversarial"]
238
+ },
239
+ "value": {
240
+ "oneOf": [
241
+ {"type": "number"},
242
+ {"type": "string", "minLength": 1, "maxLength": 256}
243
+ ]
244
+ },
245
+ "unit": {
246
+ "type": "string",
247
+ "minLength": 1,
248
+ "maxLength": 64
249
+ },
250
+ "source_ref": {
251
+ "$ref": "#/definitions/ref"
252
+ },
253
+ "evidence_ref": {
254
+ "$ref": "#/definitions/ref"
255
+ },
256
+ "observed_at": {
257
+ "type": "string",
258
+ "format": "date-time"
259
+ }
260
+ }
261
+ },
262
+ "observed_envelope": {
263
+ "type": "object",
264
+ "additionalProperties": false,
265
+ "required": [
266
+ "aggregation",
267
+ "sample_count",
268
+ "average_only",
269
+ "known_extremes",
270
+ "out_of_distribution_policy",
271
+ "unknown_extremes_acknowledged",
272
+ "records_are_observed_bounds_only"
273
+ ],
274
+ "properties": {
275
+ "aggregation": {
276
+ "enum": ["raw_distribution", "bounded_statistics", "mixed"]
277
+ },
278
+ "sample_count": {
279
+ "type": "integer",
280
+ "minimum": 1
281
+ },
282
+ "average_only": {
283
+ "const": false
284
+ },
285
+ "known_extremes": {
286
+ "type": "array",
287
+ "minItems": 2,
288
+ "items": {
289
+ "$ref": "#/definitions/extreme_observation"
290
+ }
291
+ },
292
+ "out_of_distribution_policy": {
293
+ "const": "fail_closed"
294
+ },
295
+ "unknown_extremes_acknowledged": {
296
+ "const": true
297
+ },
298
+ "records_are_observed_bounds_only": {
299
+ "const": true
300
+ }
301
+ }
302
+ },
303
+ "authority_boundary": {
304
+ "type": "object",
305
+ "additionalProperties": false,
306
+ "required": [
307
+ "llm_role",
308
+ "direct_llm_actuation",
309
+ "general_compute_direct_actuation",
310
+ "core_role",
311
+ "core_authorizes_deployment",
312
+ "responsible_party_ref"
313
+ ],
314
+ "properties": {
315
+ "llm_role": {
316
+ "const": "advisory_only"
317
+ },
318
+ "direct_llm_actuation": {
319
+ "const": false
320
+ },
321
+ "general_compute_direct_actuation": {
322
+ "const": false
323
+ },
324
+ "core_role": {
325
+ "const": "deterministic_validation_only"
326
+ },
327
+ "core_authorizes_deployment": {
328
+ "const": false
329
+ },
330
+ "responsible_party_ref": {
331
+ "$ref": "#/definitions/ref"
332
+ }
333
+ }
334
+ },
335
+ "hazard": {
336
+ "type": "object",
337
+ "additionalProperties": false,
338
+ "required": [
339
+ "hazard_id",
340
+ "severity",
341
+ "hazardous_action",
342
+ "safe_state",
343
+ "barrier_refs",
344
+ "test_refs"
345
+ ],
346
+ "properties": {
347
+ "hazard_id": {
348
+ "type": "string",
349
+ "pattern": "^hazard:[a-z0-9][a-z0-9._-]{2,127}$"
350
+ },
351
+ "severity": {
352
+ "enum": ["minor", "moderate", "major", "catastrophic"]
353
+ },
354
+ "hazardous_action": {
355
+ "$ref": "#/definitions/nonempty_text"
356
+ },
357
+ "safe_state": {
358
+ "$ref": "#/definitions/nonempty_text"
359
+ },
360
+ "barrier_refs": {
361
+ "type": "array",
362
+ "minItems": 1,
363
+ "uniqueItems": true,
364
+ "items": {
365
+ "$ref": "#/definitions/ref"
366
+ }
367
+ },
368
+ "test_refs": {
369
+ "type": "array",
370
+ "minItems": 1,
371
+ "uniqueItems": true,
372
+ "items": {
373
+ "$ref": "#/definitions/ref"
374
+ }
375
+ }
376
+ }
377
+ },
378
+ "barrier": {
379
+ "type": "object",
380
+ "additionalProperties": false,
381
+ "required": [
382
+ "barrier_id",
383
+ "kind",
384
+ "enforcement_domain",
385
+ "independent_from",
386
+ "fail_closed",
387
+ "llm_controlled",
388
+ "bypassable_by_general_compute",
389
+ "evidence_refs"
390
+ ],
391
+ "properties": {
392
+ "barrier_id": {
393
+ "type": "string",
394
+ "pattern": "^barrier:[a-z0-9][a-z0-9._-]{2,127}$"
395
+ },
396
+ "kind": {
397
+ "enum": [
398
+ "deterministic_policy",
399
+ "isolated_safety_controller",
400
+ "physical_energy_isolation",
401
+ "mechanical_limit",
402
+ "authenticated_boundary",
403
+ "responsible_human_stop"
404
+ ]
405
+ },
406
+ "enforcement_domain": {
407
+ "enum": [
408
+ "general_compute",
409
+ "isolated_controller",
410
+ "electrical_hardware",
411
+ "mechanical"
412
+ ]
413
+ },
414
+ "independent_from": {
415
+ "type": "array",
416
+ "uniqueItems": true,
417
+ "items": {
418
+ "$ref": "#/definitions/ref"
419
+ }
420
+ },
421
+ "fail_closed": {
422
+ "const": true
423
+ },
424
+ "llm_controlled": {
425
+ "const": false
426
+ },
427
+ "bypassable_by_general_compute": {
428
+ "type": "boolean"
429
+ },
430
+ "evidence_refs": {
431
+ "type": "array",
432
+ "minItems": 1,
433
+ "uniqueItems": true,
434
+ "items": {
435
+ "$ref": "#/definitions/ref"
436
+ }
437
+ }
438
+ }
439
+ },
440
+ "verification_test": {
441
+ "type": "object",
442
+ "additionalProperties": false,
443
+ "required": [
444
+ "test_id",
445
+ "hazard_refs",
446
+ "scenario",
447
+ "method",
448
+ "result",
449
+ "expected_safe_state",
450
+ "observed_safe_state",
451
+ "hazardous_actuation_observed",
452
+ "evidence_refs"
453
+ ],
454
+ "properties": {
455
+ "test_id": {
456
+ "type": "string",
457
+ "pattern": "^test:[a-z0-9][a-z0-9._-]{2,127}$"
458
+ },
459
+ "hazard_refs": {
460
+ "type": "array",
461
+ "minItems": 1,
462
+ "uniqueItems": true,
463
+ "items": {
464
+ "$ref": "#/definitions/ref"
465
+ }
466
+ },
467
+ "scenario": {
468
+ "enum": [
469
+ "llm_prompt_injection",
470
+ "network_compromise",
471
+ "general_compute_compromise",
472
+ "sensor_fault",
473
+ "communication_loss",
474
+ "power_loss",
475
+ "update_tamper",
476
+ "replay_attack",
477
+ "emergency_stop",
478
+ "out_of_distribution_input"
479
+ ]
480
+ },
481
+ "method": {
482
+ "enum": [
483
+ "simulation",
484
+ "bench",
485
+ "hardware_in_loop",
486
+ "field_observation",
487
+ "independent_assessment"
488
+ ]
489
+ },
490
+ "result": {
491
+ "enum": ["passed", "failed", "inconclusive"]
492
+ },
493
+ "expected_safe_state": {
494
+ "$ref": "#/definitions/nonempty_text"
495
+ },
496
+ "observed_safe_state": {
497
+ "$ref": "#/definitions/nonempty_text"
498
+ },
499
+ "hazardous_actuation_observed": {
500
+ "type": "boolean"
501
+ },
502
+ "evidence_refs": {
503
+ "type": "array",
504
+ "minItems": 1,
505
+ "uniqueItems": true,
506
+ "items": {
507
+ "$ref": "#/definitions/ref"
508
+ }
509
+ }
510
+ }
511
+ },
512
+ "epistemic_dignity": {
513
+ "type": "object",
514
+ "additionalProperties": false,
515
+ "required": [
516
+ "plain_language_disclosure_ref",
517
+ "evidence_limitations_ref",
518
+ "contestability_ref",
519
+ "local_stop_ref",
520
+ "technical_expertise_required_to_stop",
521
+ "uncertainty_disclosed",
522
+ "challenge_response_policy",
523
+ "automated_moral_authority"
524
+ ],
525
+ "properties": {
526
+ "plain_language_disclosure_ref": {
527
+ "$ref": "#/definitions/ref"
528
+ },
529
+ "evidence_limitations_ref": {
530
+ "$ref": "#/definitions/ref"
531
+ },
532
+ "contestability_ref": {
533
+ "$ref": "#/definitions/ref"
534
+ },
535
+ "local_stop_ref": {
536
+ "$ref": "#/definitions/ref"
537
+ },
538
+ "technical_expertise_required_to_stop": {
539
+ "const": false
540
+ },
541
+ "uncertainty_disclosed": {
542
+ "const": true
543
+ },
544
+ "challenge_response_policy": {
545
+ "const": "answer_with_evidence_or_explicit_unknown"
546
+ },
547
+ "automated_moral_authority": {
548
+ "const": false
549
+ }
550
+ }
551
+ },
552
+ "lifecycle": {
553
+ "type": "object",
554
+ "additionalProperties": false,
555
+ "required": [
556
+ "secure_boot_evidence_ref",
557
+ "signed_update_evidence_ref",
558
+ "unique_credentials_evidence_ref",
559
+ "sbom_evidence_ref",
560
+ "vulnerability_process_evidence_ref",
561
+ "safety_policy_fingerprint",
562
+ "change_invalidates_assurance"
563
+ ],
564
+ "properties": {
565
+ "secure_boot_evidence_ref": {
566
+ "$ref": "#/definitions/ref"
567
+ },
568
+ "signed_update_evidence_ref": {
569
+ "$ref": "#/definitions/ref"
570
+ },
571
+ "unique_credentials_evidence_ref": {
572
+ "$ref": "#/definitions/ref"
573
+ },
574
+ "sbom_evidence_ref": {
575
+ "$ref": "#/definitions/ref"
576
+ },
577
+ "vulnerability_process_evidence_ref": {
578
+ "$ref": "#/definitions/ref"
579
+ },
580
+ "safety_policy_fingerprint": {
581
+ "$ref": "#/definitions/fingerprint"
582
+ },
583
+ "change_invalidates_assurance": {
584
+ "const": true
585
+ }
586
+ }
587
+ },
588
+ "evidence": {
589
+ "type": "object",
590
+ "additionalProperties": false,
591
+ "required": [
592
+ "evidence_id",
593
+ "kind",
594
+ "fingerprint",
595
+ "source_kind",
596
+ "source_ref",
597
+ "reference_class",
598
+ "captured_at"
599
+ ],
600
+ "properties": {
601
+ "evidence_id": {
602
+ "type": "string",
603
+ "pattern": "^evidence:[a-z0-9][a-z0-9._-]{2,127}$"
604
+ },
605
+ "kind": {
606
+ "type": "string",
607
+ "minLength": 1,
608
+ "maxLength": 128
609
+ },
610
+ "fingerprint": {
611
+ "$ref": "#/definitions/fingerprint"
612
+ },
613
+ "source_kind": {
614
+ "enum": [
615
+ "human",
616
+ "nonhuman_biological",
617
+ "software",
618
+ "human_directed_software",
619
+ "mixed_ensemble",
620
+ "independent_assessor"
621
+ ]
622
+ },
623
+ "source_ref": {
624
+ "$ref": "#/definitions/ref"
625
+ },
626
+ "reference_class": {
627
+ "enum": [
628
+ "simulation",
629
+ "laboratory",
630
+ "hardware_in_loop",
631
+ "field_observation",
632
+ "independent_assessment",
633
+ "formal_model"
634
+ ]
635
+ },
636
+ "captured_at": {
637
+ "type": "string",
638
+ "format": "date-time"
639
+ }
640
+ }
641
+ },
642
+ "traceability": {
643
+ "type": "object",
644
+ "additionalProperties": false,
645
+ "required": [
646
+ "immutable_event_ledger_ref",
647
+ "recorded_event_types",
648
+ "ordinary_telemetry_excluded"
649
+ ],
650
+ "properties": {
651
+ "immutable_event_ledger_ref": {
652
+ "$ref": "#/definitions/ref"
653
+ },
654
+ "recorded_event_types": {
655
+ "type": "array",
656
+ "minItems": 1,
657
+ "uniqueItems": true,
658
+ "items": {
659
+ "enum": [
660
+ "safety_policy_changed",
661
+ "hazardous_command_rejected",
662
+ "safety_interlock_activated",
663
+ "unexpected_physical_outcome",
664
+ "assurance_invalidated",
665
+ "emergency_stop_activated",
666
+ "security_boundary_breached"
667
+ ]
668
+ }
669
+ },
670
+ "ordinary_telemetry_excluded": {
671
+ "const": true
672
+ }
673
+ }
674
+ }
675
+ }
676
+ }