@mitre/hdf-schema 3.7.2 → 3.8.0-next.42532249979.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.
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
4
4
  "title": "HDF Requirement Change Event",
5
5
  "description": "A single continuous-monitoring wire event: one requirement's effective posture changed on one system component.\n\nThe streaming increment of a systemDrift hdf-comparison — events fold into comparisons and reassemble into hdf-results, they never mutate documents in place.\n\nOne event per wire document (NDJSON-friendly).\n\nThe envelope (identity, ordering, hash chain) is the shared Change_Event_Envelope primitive; the payload carries the producer-computable change state, a thin before projection, and the full after requirement (the evidence a responder opens the event for).\n\nDesign: ADR-0005.",
6
6
  "type": "object",
7
7
  "unevaluatedProperties": false,
8
8
  "allOf": [
9
9
  {
10
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0#/$defs/Change_Event_Envelope"
10
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Change_Event_Envelope"
11
11
  },
12
12
  {
13
13
  "if": {
@@ -30,7 +30,7 @@
30
30
  "else": {
31
31
  "properties": {
32
32
  "after": {
33
- "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0#/$defs/Evaluated_Requirement"
33
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
34
34
  }
35
35
  }
36
36
  }
@@ -56,7 +56,7 @@
56
56
  "else": {
57
57
  "properties": {
58
58
  "before": {
59
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0#/$defs/Effective_Projection"
59
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Effective_Projection"
60
60
  }
61
61
  }
62
62
  }
@@ -74,20 +74,20 @@
74
74
  "description": "Canonical requirement identifier — the same identity as Requirement_Diff.id and the requirement's id in hdf-results. Together with the envelope's (systemRef, componentId) this forms the durable entity key. A requirement renumbering is emitted as absent + new under the two keys, never an in-place key change; batch comparison reconciles renames via its oldId/newId matching."
75
75
  },
76
76
  "state": {
77
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0#/$defs/Event_Requirement_State",
77
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Event_Requirement_State",
78
78
  "description": "The producer-computable subset of Requirement_State: new | absent | updated | fixed | regressed. fixed and regressed carry the direction SARIF's baselineState lacks; project down to SARIF's closed 4 values for external interop."
79
79
  },
80
80
  "changeReasons": {
81
81
  "type": "array",
82
82
  "items": {
83
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0#/$defs/Event_Change_Reason"
83
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Event_Change_Reason"
84
84
  },
85
85
  "description": "Why the state changed. An overrideExpired flip is a different triage than resultChanged: the control did not get worse, a waiver lapsed."
86
86
  },
87
87
  "before": {
88
88
  "oneOf": [
89
89
  {
90
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0#/$defs/Effective_Projection"
90
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Effective_Projection"
91
91
  },
92
92
  {
93
93
  "type": "null"
@@ -98,7 +98,7 @@
98
98
  "after": {
99
99
  "oneOf": [
100
100
  {
101
- "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0#/$defs/Evaluated_Requirement"
101
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
102
102
  },
103
103
  {
104
104
  "type": "null"
@@ -116,7 +116,7 @@
116
116
  "systemRef": "apptier.hdf-system.json",
117
117
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
118
118
  "timestamp": "2026-07-22T14:03:11Z",
119
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
119
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
120
120
  "priorChecksum": {
121
121
  "algorithm": "sha256",
122
122
  "value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
@@ -166,7 +166,7 @@
166
166
  "systemRef": "apptier.hdf-system.json",
167
167
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
168
168
  "timestamp": "2026-07-21T00:00:05Z",
169
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
169
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
170
170
  "priorChecksum": {
171
171
  "algorithm": "sha256",
172
172
  "value": "d11c074ab9131807816013a71d986f1ceb2e5871a8a01dee4043391b7a6bf37b"
@@ -230,7 +230,7 @@
230
230
  "systemRef": "apptier.hdf-system.json",
231
231
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
232
232
  "timestamp": "2026-07-22T14:03:12Z",
233
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
233
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
234
234
  "priorChecksum": null,
235
235
  "requirementId": "RHEL-09-671010",
236
236
  "state": "new",
@@ -271,7 +271,7 @@
271
271
  "systemRef": "apptier.hdf-system.json",
272
272
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
273
273
  "timestamp": "2026-07-23T08:00:00Z",
274
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
274
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
275
275
  "priorChecksum": {
276
276
  "algorithm": "sha256",
277
277
  "value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
@@ -291,7 +291,7 @@
291
291
  "systemRef": "apptier.hdf-system.json",
292
292
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
293
293
  "timestamp": "2026-07-24T10:15:00Z",
294
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
294
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
295
295
  "priorChecksum": {
296
296
  "algorithm": "sha256",
297
297
  "value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
@@ -354,9 +354,9 @@
354
354
  }
355
355
  ],
356
356
  "$defs": {
357
- "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0": {
357
+ "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0": {
358
358
  "$schema": "https://json-schema.org/draft/2020-12/schema",
359
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0",
359
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0",
360
360
  "title": "HDF Change Event Primitives",
361
361
  "description": "Shared building blocks for HDF change-event wire documents. The envelope is entity-agnostic: hdf-requirement-change-event composes it today, and any future sibling event type (e.g. component change events — hdf-comparison already models componentDiffs alongside requirementDiffs) reuses it verbatim.",
362
362
  "$defs": {
@@ -410,7 +410,7 @@
410
410
  "priorChecksum": {
411
411
  "oneOf": [
412
412
  {
413
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
413
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
414
414
  },
415
415
  {
416
416
  "type": "null"
@@ -428,7 +428,7 @@
428
428
  "systemRef": "apptier.hdf-system.json",
429
429
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
430
430
  "timestamp": "2026-07-22T14:03:11Z",
431
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
431
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
432
432
  "priorChecksum": {
433
433
  "algorithm": "sha256",
434
434
  "value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
@@ -482,7 +482,7 @@
482
482
  ],
483
483
  "properties": {
484
484
  "effectiveStatus": {
485
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
485
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
486
486
  "description": "The resolved effective compliance status at this point in the chain."
487
487
  },
488
488
  "effectiveImpact": {
@@ -531,7 +531,7 @@
531
531
  "description": "URI to the seed snapshot document (relative path or absolute URL)."
532
532
  },
533
533
  "checksum": {
534
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
534
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
535
535
  "description": "Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by content, not just location."
536
536
  }
537
537
  },
@@ -580,16 +580,16 @@
580
580
  }
581
581
  }
582
582
  },
583
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0": {
583
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
584
584
  "$schema": "https://json-schema.org/draft/2020-12/schema",
585
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0",
585
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
586
586
  "title": "HDF Common Primitives",
587
587
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
588
588
  "$defs": {
589
589
  "External_Reference": {
590
590
  "type": "object",
591
591
  "title": "External Reference",
592
- "description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property.\n\nPurpose-agnostic: cite a CVE, an ATT&CK technique, a STIX bundle/object, a BOM, a runbook, or any vendor artifact — including kinds with no dedicated HDF reference category.\n\n`sourceName` names the system; `externalId` cites by id within that system; `href` locates it. `sourceName` + `externalId` is equivalently a URN (`urn:<sourceName>:<externalId>`, RFC 8141), so the by-identity and by-location forms stay interconvertible.\n\nA reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
592
+ "description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property.\n\nPurpose-agnostic: cite a CVE, an ATT&CK technique, a STIX bundle/object, a BOM, a runbook, or any vendor artifact — including kinds with no dedicated HDF reference category.\n\n`sourceName` names the system; `externalId` cites by id within that system; `href` locates it. `sourceName` + `externalId` is equivalently a URN (`urn:<sourceName>:<externalId>`, RFC 8141), so the by-identity and by-location forms stay interconvertible.\n\nAn entry may also carry the artifact itself rather than point at it: `document` for a JSON object, `content` + `encoding` for anything else. Embedding satisfies the at-least-one rule on its own, so an artifact with no meaningful public location needs no synthetic `href`.\n\nA reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
593
593
  "required": [
594
594
  "sourceName"
595
595
  ],
@@ -608,6 +608,42 @@
608
608
  "required": [
609
609
  "description"
610
610
  ]
611
+ },
612
+ {
613
+ "required": [
614
+ "content"
615
+ ]
616
+ },
617
+ {
618
+ "required": [
619
+ "document"
620
+ ]
621
+ }
622
+ ],
623
+ "allOf": [
624
+ {
625
+ "if": {
626
+ "required": [
627
+ "content"
628
+ ]
629
+ },
630
+ "then": {
631
+ "required": [
632
+ "encoding"
633
+ ]
634
+ }
635
+ },
636
+ {
637
+ "if": {
638
+ "required": [
639
+ "encoding"
640
+ ]
641
+ },
642
+ "then": {
643
+ "required": [
644
+ "content"
645
+ ]
646
+ }
611
647
  }
612
648
  ],
613
649
  "properties": {
@@ -623,7 +659,7 @@
623
659
  "href": {
624
660
  "type": "string",
625
661
  "format": "uri-reference",
626
- "description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs. `checksum`/`mediaType` apply only to a retrievable `href`."
662
+ "description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs. Set it only when the location is meaningful to a reader — never a producer's local filesystem path."
627
663
  },
628
664
  "description": {
629
665
  "type": "string",
@@ -635,11 +671,11 @@
635
671
  },
636
672
  "mediaType": {
637
673
  "type": "string",
638
- "description": "IANA media type of the referenced artifact when retrievable (RFC 6838), e.g., 'application/json'. Meaningful only with `href`."
674
+ "description": "IANA media type of the artifact (RFC 6838), e.g., 'application/json', 'application/xml', 'text/csv'. Applies both to an artifact retrievable at `href` and to one embedded here in `content` or `document`."
639
675
  },
640
676
  "checksum": {
641
677
  "$ref": "#/$defs/Checksum",
642
- "description": "Integrity hash of the referenced artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Meaningful only with a retrievable `href`."
678
+ "description": "Integrity hash of the artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Applies both to an artifact retrievable at `href` and to one embedded here in `content` or `document` — beside embedded bytes it is what makes the copy verifiable rather than merely present."
643
679
  },
644
680
  "addedBy": {
645
681
  "$ref": "#/$defs/Identity",
@@ -658,11 +694,24 @@
658
694
  "document": {
659
695
  "type": "object",
660
696
  "additionalProperties": true,
661
- "description": "Optional lossless embedded copy of the referenced artifact — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim.\n\nComposes with `href`/`externalId` (which point at the artifact) and `checksum` (which ties the copy to the source): a single entry can both point and embed.\n\nHDF stays payload-agnostic — the content is carried untouched, never normalized into HDF fields — so this does not duplicate the source ontology (e.g. STIX rides here unchanged)."
697
+ "description": "Optional lossless embedded copy of the referenced artifact as a JSON object — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim.\n\nJSON objects only. An artifact that is not a JSON object (XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not text at all) embeds through `content` + `encoding` instead.\n\nComposes with `href`/`externalId` (which point at the artifact) and `checksum` (which ties the copy to the source): a single entry can both point and embed.\n\nHDF stays payload-agnostic — the content is carried untouched, never normalized into HDF fields — so this does not duplicate the source ontology (e.g. STIX rides here unchanged)."
698
+ },
699
+ "content": {
700
+ "type": "string",
701
+ "description": "Optional lossless embedded copy of the artifact's bytes as a string, for artifacts `document` cannot hold: XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not valid UTF-8 text at all.\n\n`encoding` states how to read it back and is required alongside it. Set `mediaType` so a consumer knows what the bytes are, and `checksum` so the copy can be verified against the source.\n\nCarried verbatim — never reformatted, re-indented, or re-serialized."
702
+ },
703
+ "encoding": {
704
+ "type": "string",
705
+ "title": "External Reference Encoding",
706
+ "enum": [
707
+ "utf-8",
708
+ "base64"
709
+ ],
710
+ "description": "How to read `content` back into the artifact's bytes. 'utf-8' for text (XML, CSV, NDJSON, plain text, JavaScript-wrapped JSON); 'base64' for anything that is not valid UTF-8 text.\n\nRequired whenever `content` is present, and meaningless without it — an embedded copy whose encoding a consumer has to guess is not lossless."
662
711
  }
663
712
  },
664
713
  "unevaluatedProperties": false,
665
- "$comment": "Examples, in order: 1) By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228; 2) By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL; 3) By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution; 4) Enrichment envelope: a STIX threat-intel object embedded losslessly in `document` and classified via `kind`, cited by id and pointed at by href — the pointer and the embedded copy compose. The payload rides verbatim; HDF does not normalize STIX fields.",
714
+ "$comment": "Examples, in order: 1) By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228; 2) By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL; 3) By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution; 4) Enrichment envelope: a STIX threat-intel object embedded losslessly in `document` and classified via `kind`, cited by id and pointed at by href — the pointer and the embedded copy compose. The payload rides verbatim; HDF does not normalize STIX fields; 5) Embed-only, text: an XCCDF results file carried in `content` as utf-8 with its media type and checksum, and no `href` at all — the artifact was read from a local file whose path means nothing to a reader; 6) Embed-only, non-text: a Fortify FPR (a zip) carried in `content` as base64, the case `document` and utf-8 both fail.",
666
715
  "examples": [
667
716
  {
668
717
  "sourceName": "cve",
@@ -708,6 +757,28 @@
708
757
  }
709
758
  ]
710
759
  }
760
+ },
761
+ {
762
+ "sourceName": "openscap",
763
+ "rel": "raw-source",
764
+ "mediaType": "application/xml",
765
+ "encoding": "utf-8",
766
+ "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Benchmark xmlns=\"http://checklists.nist.gov/xccdf/1.2\" id=\"xccdf_org.ssgproject.content_benchmark_RHEL-9\">\n <TestResult id=\"xccdf_org.open-scap_testresult_default-profile\" start-time=\"2026-09-27T12:00:00+00:00\" end-time=\"2026-09-27T12:04:11+00:00\">\n <rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n </rule-result>\n </TestResult>\n</Benchmark>",
767
+ "checksum": {
768
+ "algorithm": "sha256",
769
+ "value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
770
+ }
771
+ },
772
+ {
773
+ "sourceName": "fortify",
774
+ "rel": "raw-source",
775
+ "mediaType": "application/zip",
776
+ "encoding": "base64",
777
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
778
+ "checksum": {
779
+ "algorithm": "sha256",
780
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
781
+ }
711
782
  }
712
783
  ]
713
784
  },
@@ -719,7 +790,7 @@
719
790
  "sha512",
720
791
  "blake3"
721
792
  ],
722
- "description": "Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers container-image and other artifact digests that use it.",
793
+ "description": "Cryptographic hash algorithms a checksum or integrity record may name. blake3 covers container-image and other artifact digests that use it. HDF tooling verifies every algorithm in this enum, so any of them may be recorded where the checksum needs to be verifiable.",
723
794
  "title": "Hash Algorithm"
724
795
  },
725
796
  "Requirement_Group": {
@@ -877,7 +948,33 @@
877
948
  }
878
949
  ],
879
950
  "description": "A reference to an external document.",
880
- "title": "Reference"
951
+ "title": "Reference",
952
+ "unevaluatedProperties": false,
953
+ "$comment": "Examples, in order: 1) By-locator: a plain URL, the commonest form by far in practice; 2) By-name: a human-meaningful citation with no locator, as InSpec's `ref 'title'` emits; 3) Both together, since this is an anyOf rather than a oneOf; 4) The ref-as-array form, whose items are deliberately open so a source format's own reference record can be carried verbatim — XCCDF's DPMS target identifiers reach HDF this way; 5) uri, accepted as a synonym of url for documents that spell it that way. The object itself is CLOSED: a member none of the three branches declares is rejected. The openness that matters here is one level down, on the items of the ref array, and it is declared there explicitly. This primitive predates External_Reference, which is the STIX-aligned type a new converter should reach for; refs survives because it is InSpec-inherited and HDF consumes InSpec output.",
954
+ "examples": [
955
+ {
956
+ "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
957
+ },
958
+ {
959
+ "ref": "NIST SP 800-53 Rev 5, AC-6"
960
+ },
961
+ {
962
+ "ref": "CIS Benchmark for RHEL 9, 1.1.1",
963
+ "url": "https://www.cisecurity.org/benchmark/red_hat_linux"
964
+ },
965
+ {
966
+ "ref": [
967
+ {
968
+ "identifier": "2921",
969
+ "publisher": "DISA",
970
+ "type": "DPMS Target"
971
+ }
972
+ ]
973
+ },
974
+ {
975
+ "uri": "https://attack.mitre.org/techniques/T1059/"
976
+ }
977
+ ]
881
978
  },
882
979
  "Source_Location": {
883
980
  "type": "object",
@@ -1691,9 +1788,9 @@
1691
1788
  }
1692
1789
  }
1693
1790
  },
1694
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0": {
1791
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
1695
1792
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1696
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0",
1793
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
1697
1794
  "title": "HDF Result Primitives",
1698
1795
  "description": "Types for representing assessment results and statuses.",
1699
1796
  "$defs": {
@@ -1758,6 +1855,10 @@
1758
1855
  "type": "string"
1759
1856
  },
1760
1857
  "description": "The stacktrace/backtrace of the exception if one occurred."
1858
+ },
1859
+ "rawSourceRecord": {
1860
+ "$ref": "#/$defs/Raw_Source_Record",
1861
+ "description": "The source tool's own record for this result, carrying every field the record had. Complete, not necessarily byte-exact: see Raw_Source_Record.content for the producer and consumer obligations, and extensions.rawSourceArtifacts[] when byte-exact carriage is required."
1761
1862
  }
1762
1863
  },
1763
1864
  "examples": [
@@ -1788,6 +1889,64 @@
1788
1889
  "description": "A test within a requirement and its results and findings such as how long it took to run.",
1789
1890
  "title": "Requirement Result"
1790
1891
  },
1892
+ "Raw_Source_Record": {
1893
+ "type": "object",
1894
+ "additionalProperties": false,
1895
+ "required": [
1896
+ "content",
1897
+ "encoding",
1898
+ "mediaType"
1899
+ ],
1900
+ "properties": {
1901
+ "content": {
1902
+ "type": "string",
1903
+ "description": "The source tool's own record for this result, carrying every field the record had.\n\nCOMPLETE, NOT NECESSARILY BYTE-EXACT. A producer SHOULD write the record's bytes unchanged where it can. A producer that cannot — notably one implemented in two languages whose JSON serializers disagree on key order, HTML escaping and number rendering, and which therefore MUST canonicalize to stay byte-identical with its twin — MAY write a canonically serialized form instead. Such a form preserves every field and value but not the original key order, insignificant whitespace, or duplicate keys. A consumer MUST therefore compare records by parsing them, not by comparing bytes, and MUST NOT checksum this field and expect the result to match a checksum of the input.\n\nFor carriage that IS byte-exact, use `extensions.rawSourceArtifacts[]`, which forbids a parsed `document` precisely so the bytes and their checksum survive; `pointer` ties this record to its position within that artifact."
1904
+ },
1905
+ "encoding": {
1906
+ "type": "string",
1907
+ "enum": [
1908
+ "utf-8",
1909
+ "base64"
1910
+ ],
1911
+ "description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
1912
+ },
1913
+ "mediaType": {
1914
+ "type": "string",
1915
+ "description": "The record's IANA media type — the type of this record, which for a fragment of a larger artifact may be narrower than the artifact's own. Example: 'application/json' for one match object out of a JSON report."
1916
+ },
1917
+ "pointer": {
1918
+ "type": "string",
1919
+ "description": "Where this record sits inside the artifact it came from, as a JSON Pointer (RFC 6901) for JSON sources or an XPath for XML ones. Example: '/matches/3'.\n\nOptional, and the link that makes carriage verifiable rather than merely present: with it a consumer can confirm the record really is the subtree of `extensions.rawSourceArtifacts[]` it claims to be. Omit it when the source's shape gives a record no addressable location."
1920
+ }
1921
+ },
1922
+ "description": "The source tool's own record for this result — the one entry in the converter's input that produced it, complete though not necessarily byte-for-byte (see `content`).\n\nSCOPED TO THE RESULT DELIBERATELY. For a vulnerability scanner the native record is one (vulnerability, package) pair, which is exactly one result: a CVE reported against two packages yields two entries whose records differ only in the package they matched. Held on the requirement instead, those two records would collide, and merging entries that share an id would have to discard one — so the result is not merely an available home but the correct one.\n\nDistinct from `extensions.rawSourceArtifacts[]`, which carries whole input artifacts: this carries the one record inside one of them, and `pointer` ties the two together. A consumer that wants the whole input reads the artifact; one that wants provenance for a single finding reads this.\n\nDistinct from `code`, which means the code that ran to evaluate the requirement — an InSpec control's source, or a check reference. A serialized finding is not code, and putting one there overloaded a field whose meaning came from InSpec.\n\nCLOSED, and deliberately not a passthrough bag: three required members and an optional pointer are the whole of it. Producer data that HDF does not model belongs in `extensions.passthrough`, which is document-scoped and permissive by design; this field is neither.\n\nClosed with `additionalProperties` rather than the house `unevaluatedProperties` because this definition composes nothing, and the shipped Go validator is a draft-07 engine that does not implement `unevaluatedProperties` — a closure only one of the two validators enforces is not a closure.",
1923
+ "$comment": "Examples, in order: 1) one grype match — the shape that moves out of `code` — located in the carried artifact by pointer; 2) an XCCDF rule-result, where the record is XML although the document embedding it is JSON, so mediaType is per record and not per document; 3) a record whose bytes are not text, carried as base64; 4) the minimum: a record whose source shape gives it no addressable location, so pointer is omitted.",
1924
+ "examples": [
1925
+ {
1926
+ "content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
1927
+ "encoding": "utf-8",
1928
+ "mediaType": "application/json",
1929
+ "pointer": "/matches/3"
1930
+ },
1931
+ {
1932
+ "content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
1933
+ "encoding": "utf-8",
1934
+ "mediaType": "application/xml",
1935
+ "pointer": "/Benchmark/TestResult/rule-result[4]"
1936
+ },
1937
+ {
1938
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
1939
+ "encoding": "base64",
1940
+ "mediaType": "application/octet-stream"
1941
+ },
1942
+ {
1943
+ "content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
1944
+ "encoding": "utf-8",
1945
+ "mediaType": "text/csv"
1946
+ }
1947
+ ],
1948
+ "title": "Raw Source Record"
1949
+ },
1791
1950
  "Requirement_Description": {
1792
1951
  "type": "object",
1793
1952
  "unevaluatedProperties": false,
@@ -1824,9 +1983,9 @@
1824
1983
  }
1825
1984
  }
1826
1985
  },
1827
- "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0": {
1986
+ "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0": {
1828
1987
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1829
- "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0",
1988
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0",
1830
1989
  "type": "object",
1831
1990
  "unevaluatedProperties": false,
1832
1991
  "required": [
@@ -1836,7 +1995,7 @@
1836
1995
  "externalReferences": {
1837
1996
  "type": "array",
1838
1997
  "items": {
1839
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
1998
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
1840
1999
  },
1841
2000
  "description": "Optional references to external artifacts (CTI/STIX, BOMs, advisories, runbooks, or any URI-addressable artifact) relevant to this assessment as a whole. Inert context; see External_Reference."
1842
2001
  },
@@ -1853,7 +2012,7 @@
1853
2012
  "components": {
1854
2013
  "type": "array",
1855
2014
  "items": {
1856
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0#/$defs/Component"
2015
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
1857
2016
  },
1858
2017
  "description": "The components that were assessed. Each component describes a system element (host, container, cloud resource, application, etc.) with optional identity, SBOM, and external references."
1859
2018
  },
@@ -1865,23 +2024,23 @@
1865
2024
  "description": "Information on the baselines that were evaluated, including findings."
1866
2025
  },
1867
2026
  "statistics": {
1868
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.7.0#/$defs/Statistics",
2027
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0#/$defs/Statistics",
1869
2028
  "description": "Statistics for the assessment run, including duration and result counts."
1870
2029
  },
1871
2030
  "generator": {
1872
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Generator",
2031
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
1873
2032
  "description": "Information about the tool that generated this file."
1874
2033
  },
1875
2034
  "tool": {
1876
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Tool",
2035
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Tool",
1877
2036
  "description": "The security tool that produced the assessment data in this file."
1878
2037
  },
1879
2038
  "integrity": {
1880
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
2039
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
1881
2040
  "description": "Cryptographic integrity information for verifying this file."
1882
2041
  },
1883
2042
  "preAmendmentChecksum": {
1884
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
2043
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
1885
2044
  "description": "Hash of this results document as it stood immediately before the most recent amendment application. Written by `hdf amend apply` when it applies at least one override; an apply that matches nothing leaves the document untouched. The hash covers the results file's RAW BYTES as read, not a canonical form, so reproducing it requires the byte-identical original — reformatting or re-serializing the source changes the value. Only the most recent pre-application state is recorded: applying amendments to an already-amended document REPLACES this value, so it is a single link back one step, not a growing chain. Distinct from the `previousChecksum` inside an override, which chains amendments to each other and is computed over a canonical JSON form.",
1886
2045
  "$comment": "Example 1: the real SHA-256 of hdf-converters/converters/nessus-to-hdf/fixtures/expected/sample.nessus.hdf.json, reproducible with `shasum -a 256` on that file — chosen over a synthetic digest so a reader can verify the hash basis is the raw file bytes.",
1887
2046
  "examples": [
@@ -1892,11 +2051,11 @@
1892
2051
  ]
1893
2052
  },
1894
2053
  "runner": {
1895
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.7.0#/$defs/Runner",
2054
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0#/$defs/Runner",
1896
2055
  "description": "Information about the test execution environment where the security tool was run. Distinct from targets (what is being tested)."
1897
2056
  },
1898
2057
  "remediation": {
1899
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Remediation",
2058
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Remediation",
1900
2059
  "description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for fixing failing requirements found in this assessment."
1901
2060
  },
1902
2061
  "systemRef": {
@@ -1910,13 +2069,12 @@
1910
2069
  "description": "Reference to an hdf-plan document describing the assessment plan that produced these results. May be a relative path, absolute URI, or fragment identifier."
1911
2070
  },
1912
2071
  "derivation": {
1913
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0#/$defs/Derivation",
2072
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Derivation",
1914
2073
  "description": "Present ONLY on reconciled result sets: lineage recording the seed snapshot and event watermark this document was reassembled from (ADR-0005). Documents produced directly by a scan omit this field. When present, generator names the reconciling tool."
1915
2074
  },
1916
2075
  "extensions": {
1917
- "type": "object",
1918
- "additionalProperties": true,
1919
- "description": "Reserved for tool-specific data not defined in the HDF standard. Use this to preserve original tool output, auxiliary data, or custom metadata."
2076
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
2077
+ "description": "Producer data outside the HDF model, and the pre-converted source artifact(s) these results were converted from."
1920
2078
  }
1921
2079
  },
1922
2080
  "examples": [
@@ -2008,14 +2166,14 @@
2008
2166
  ],
2009
2167
  "allOf": [
2010
2168
  {
2011
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Baseline_Metadata"
2169
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Baseline_Metadata"
2012
2170
  }
2013
2171
  ],
2014
2172
  "properties": {
2015
2173
  "depends": {
2016
2174
  "type": "array",
2017
2175
  "items": {
2018
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Dependency"
2176
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Dependency"
2019
2177
  },
2020
2178
  "description": "The set of dependencies this baseline depends on."
2021
2179
  },
@@ -2028,15 +2186,15 @@
2028
2186
  "description": "The description - should be more detailed than the summary."
2029
2187
  },
2030
2188
  "integrity": {
2031
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
2189
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
2032
2190
  "description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
2033
2191
  },
2034
2192
  "originalChecksum": {
2035
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
2193
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
2036
2194
  "description": "SHA-256 checksum of the original baseline definition file (before execution). This is an immutable reference to the baseline as defined, used to detect tampering with baseline requirements or metadata."
2037
2195
  },
2038
2196
  "resultsChecksum": {
2039
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
2197
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
2040
2198
  "description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results. Compare with currentChecksum to verify amendment integrity."
2041
2199
  },
2042
2200
  "statusMessage": {
@@ -2054,21 +2212,20 @@
2054
2212
  "groups": {
2055
2213
  "type": "array",
2056
2214
  "items": {
2057
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Requirement_Group"
2215
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Group"
2058
2216
  },
2059
2217
  "description": "A set of descriptions for the requirement groups."
2060
2218
  },
2061
2219
  "inputs": {
2062
2220
  "type": "array",
2063
2221
  "items": {
2064
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.7.0#/$defs/Input"
2222
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0#/$defs/Input"
2065
2223
  },
2066
2224
  "description": "Typed inputs used to parameterize this baseline at execution time. See the Input primitive for the full schema."
2067
2225
  },
2068
2226
  "extensions": {
2069
- "type": "object",
2070
- "additionalProperties": true,
2071
- "description": "Reserved for tool-specific baseline metadata not defined in the HDF standard."
2227
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
2228
+ "description": "Producer data outside the HDF model that belongs to this baseline rather than to the document, and the pre-converted source artifact(s) this baseline was built from."
2072
2229
  }
2073
2230
  },
2074
2231
  "description": "Information on a baseline that was evaluated, including any findings.",
@@ -2086,7 +2243,7 @@
2086
2243
  ],
2087
2244
  "allOf": [
2088
2245
  {
2089
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Requirement_Core"
2246
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Core"
2090
2247
  }
2091
2248
  ],
2092
2249
  "properties": {
@@ -2094,7 +2251,7 @@
2094
2251
  "type": "array",
2095
2252
  "minItems": 1,
2096
2253
  "items": {
2097
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Requirement_Description"
2254
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Description"
2098
2255
  },
2099
2256
  "contains": {
2100
2257
  "type": "object",
@@ -2110,37 +2267,37 @@
2110
2267
  "description": "Array of labeled descriptions. At least one description with label 'default' must be present. Convention: place default description first. Common labels: 'default', 'check', 'fix', 'rationale'."
2111
2268
  },
2112
2269
  "severity": {
2113
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Severity",
2270
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Severity",
2114
2271
  "description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
2115
2272
  },
2116
2273
  "sourceLocation": {
2117
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Source_Location",
2274
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Source_Location",
2118
2275
  "description": "The explicit location of the requirement within the source code."
2119
2276
  },
2120
2277
  "results": {
2121
2278
  "type": "array",
2122
2279
  "minItems": 1,
2123
2280
  "items": {
2124
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Requirement_Result"
2281
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Result"
2125
2282
  },
2126
2283
  "description": "The set of all tests within the requirement and their results."
2127
2284
  },
2128
2285
  "statusOverrides": {
2129
2286
  "type": "array",
2130
2287
  "items": {
2131
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Status_Override"
2288
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Status_Override"
2132
2289
  },
2133
2290
  "description": "Chronological history of all overrides applied to this requirement. Overrides are intentional changes to the compliance status and/or impact score (waivers, attestations, false positives, risk adjustments). Array order is NOT significant: consumers resolve the governing override by appliedAt (the most recently applied non-expired one), never by position. Earlier revisions of this description asked for most-recent-first, but nothing enforces it and producers commonly append, so position is frequently the opposite of recency. Preserves full audit trail."
2134
2291
  },
2135
2292
  "poams": {
2136
2293
  "type": "array",
2137
2294
  "items": {
2138
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/POAM"
2295
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/POAM"
2139
2296
  },
2140
2297
  "description": "Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance. POAMs do NOT change effectiveStatus - they track the work being done to address a failure. Separate from statusOverrides which DO change status."
2141
2298
  },
2142
2299
  "effectiveStatus": {
2143
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
2300
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
2144
2301
  "description": "The current effective compliance status of this requirement after applying the most recent non-expired override with a status field, or computed from results (worst-wins) if no status-bearing overrides exist."
2145
2302
  },
2146
2303
  "effectiveImpact": {
@@ -2150,33 +2307,33 @@
2150
2307
  "description": "The current effective impact score (0.0–1.0) after applying the most recent non-expired override with an impact field. Absent when no impact overrides apply; consumers should use the requirement's impact field in that case."
2151
2308
  },
2152
2309
  "disposition": {
2153
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Override_Type",
2310
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
2154
2311
  "description": "The type of the most recent non-expired override or POAM governing this requirement. Indicates why the requirement is in its current state (e.g., waiver, falsePositive, riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or POAMs apply."
2155
2312
  },
2156
2313
  "effectiveChecksum": {
2157
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
2314
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
2158
2315
  "description": "Checksum of this requirement's resolved effective posture, for per-control change detection in continuous monitoring.\n\nsha256 over the canonical JSON object with keys status, impact, disposition (in that order), holding the resolved effective status, resolved effective impact, and governing override type (null when nothing governs), with override expiry anchored to the document timestamp.\n\nFlips exactly when the operative status, impact, or disposition changes; stable under all other churn (result details, timestamps, tags).\n\nOptional; stamped by tooling (hdf convert, hdf amend apply)."
2159
2316
  },
2160
2317
  "evidence": {
2161
2318
  "type": "array",
2162
2319
  "items": {
2163
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
2320
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
2164
2321
  },
2165
2322
  "description": "Supporting evidence for this requirement's findings, such as screenshots, code samples, or log excerpts."
2166
2323
  },
2167
2324
  "cvss": {
2168
2325
  "type": "array",
2169
2326
  "items": {
2170
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss"
2327
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss"
2171
2328
  },
2172
2329
  "description": "Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for risk adjustment. See cvss.schema.json."
2173
2330
  },
2174
2331
  "epss": {
2175
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.7.0#/$defs/Epss",
2332
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0#/$defs/Epss",
2176
2333
  "description": "FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used alongside CVSS for prioritization — captures the probability the vulnerability will be exploited."
2177
2334
  },
2178
2335
  "kev": {
2179
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.7.0#/$defs/Kev",
2336
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0#/$defs/Kev",
2180
2337
  "description": "CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and dueDate carry the federal patching deadline."
2181
2338
  },
2182
2339
  "cwe": {
@@ -2190,7 +2347,7 @@
2190
2347
  "affectedPackages": {
2191
2348
  "type": "array",
2192
2349
  "items": {
2193
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0#/$defs/Affected_Package"
2350
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
2194
2351
  },
2195
2352
  "description": "Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see components[] on hdf-system for component-level package inventories. One entry per matched package signature (scanners often report multiple CPE variations per CVE)."
2196
2353
  }
@@ -2479,9 +2636,9 @@
2479
2636
  }
2480
2637
  }
2481
2638
  },
2482
- "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0": {
2639
+ "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0": {
2483
2640
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2484
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0",
2641
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0",
2485
2642
  "title": "HDF Component Primitives",
2486
2643
  "description": "First-class system component with identity, polymorphic type, generalized BOM attachment (boms[]), and system-binding properties. Components are the successor to Targets, adding stable identity (componentId), external system cross-references, and manifest inventory (SBOM, AI model/dataset, and reserved future BOM kinds).",
2487
2644
  "$defs": {
@@ -2527,7 +2684,7 @@
2527
2684
  "description": "Description of this component's role or purpose."
2528
2685
  },
2529
2686
  "owner": {
2530
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
2687
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
2531
2688
  "description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
2532
2689
  },
2533
2690
  "externalIds": {
@@ -2547,14 +2704,14 @@
2547
2704
  "boms": {
2548
2705
  "type": "array",
2549
2706
  "items": {
2550
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0#/$defs/Bom"
2707
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
2551
2708
  },
2552
2709
  "description": "Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType), each carried by passthrough (ref/document) or normalized. Replaces the former sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an ai-model BOM). See primitives/bom.schema.json."
2553
2710
  },
2554
2711
  "integrity": {
2555
2712
  "type": "array",
2556
2713
  "items": {
2557
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
2714
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
2558
2715
  },
2559
2716
  "description": "Cryptographic integrity of this component's underlying artifact — model weights or shards, dataset archive, container image, or package bytes.\n\nAn array supports multi-file/sharded artifacts.\n\nThis is the single, generic home for artifact/subject integrity across all component types (it replaced the former per-type Container_Image digest and Artifact checksum fields).\n\nDistinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence Integrity type."
2560
2717
  },
@@ -2568,12 +2725,12 @@
2568
2725
  "inputOverrides": {
2569
2726
  "type": "array",
2570
2727
  "items": {
2571
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Input_Override"
2728
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Input_Override"
2572
2729
  },
2573
2730
  "description": "System-specific overrides for baseline input values."
2574
2731
  },
2575
2732
  "targetSelector": {
2576
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Target_Selector",
2733
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Target_Selector",
2577
2734
  "description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
2578
2735
  }
2579
2736
  },
@@ -2856,7 +3013,7 @@
2856
3013
  "const": "cloudAccount"
2857
3014
  },
2858
3015
  "provider": {
2859
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
3016
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
2860
3017
  "description": "Cloud provider."
2861
3018
  },
2862
3019
  "accountId": {
@@ -2895,7 +3052,7 @@
2895
3052
  "const": "cloudResource"
2896
3053
  },
2897
3054
  "provider": {
2898
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
3055
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
2899
3056
  "description": "Cloud provider."
2900
3057
  },
2901
3058
  "resourceType": {
@@ -3194,9 +3351,9 @@
3194
3351
  }
3195
3352
  }
3196
3353
  },
3197
- "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0": {
3354
+ "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0": {
3198
3355
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3199
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0",
3356
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0",
3200
3357
  "title": "HDF BOM Primitives",
3201
3358
  "description": "Generalized Bill-of-Materials / manifest representation.\n\nOne extensible Bom shape, discriminated by bomType, carries any manifest kind (SBOM, AI model/dataset, and reserved future kinds) either by passthrough (opaque ref/embed of the native document) or normalized (converted into HDF's queryable shape).\n\nSubject identity (name, version, componentId) is inherited from the host component or system — the BOM never re-owns it.\n\nSee ADR-0001.",
3202
3359
  "$defs": {
@@ -3252,7 +3409,7 @@
3252
3409
  "hashes": {
3253
3410
  "type": "array",
3254
3411
  "items": {
3255
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
3412
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
3256
3413
  },
3257
3414
  "description": "Integrity of the carried BOM *document* itself (the referenced/embedded manifest file), NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model weights, dataset archive) is a component-level concern, not carried here. Subject identity is inherited from the host component/system; per-node identity lives in the type-extension."
3258
3415
  },
@@ -3664,9 +3821,9 @@
3664
3821
  }
3665
3822
  }
3666
3823
  },
3667
- "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0": {
3824
+ "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0": {
3668
3825
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3669
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0",
3826
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0",
3670
3827
  "title": "HDF System Primitives",
3671
3828
  "description": "Types for describing system architecture, authorization boundaries, and components.",
3672
3829
  "$defs": {
@@ -3717,7 +3874,7 @@
3717
3874
  "description": "Rationale for why this override is needed."
3718
3875
  },
3719
3876
  "approvedBy": {
3720
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
3877
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
3721
3878
  "description": "Identity of the person or system that approved this override."
3722
3879
  }
3723
3880
  },
@@ -3799,9 +3956,9 @@
3799
3956
  }
3800
3957
  }
3801
3958
  },
3802
- "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.7.0": {
3959
+ "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0": {
3803
3960
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3804
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.7.0",
3961
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0",
3805
3962
  "title": "HDF Statistics Primitives",
3806
3963
  "description": "Statistics types for tracking assessment run metrics.",
3807
3964
  "$defs": {
@@ -3870,12 +4027,183 @@
3870
4027
  }
3871
4028
  }
3872
4029
  },
3873
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0": {
4030
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
3874
4031
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3875
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0",
4032
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
3876
4033
  "title": "HDF Extension Primitives",
3877
- "description": "Extension types for waivers, attestations, generators, and integrity.",
4034
+ "description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
3878
4035
  "$defs": {
4036
+ "Raw_Source_Artifact": {
4037
+ "allOf": [
4038
+ {
4039
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
4040
+ },
4041
+ {
4042
+ "not": {
4043
+ "required": [
4044
+ "document"
4045
+ ]
4046
+ }
4047
+ },
4048
+ {
4049
+ "if": {
4050
+ "required": [
4051
+ "content"
4052
+ ]
4053
+ },
4054
+ "then": {
4055
+ "required": [
4056
+ "encoding",
4057
+ "mediaType"
4058
+ ]
4059
+ }
4060
+ }
4061
+ ],
4062
+ "description": "One artifact exactly as a converter received it, before conversion.\n\nAn External_Reference used for a single purpose, so the same primitive both points and embeds: `sourceName` names the producing tool; `content` + `encoding` carry the bytes; `checksum` is of the exact bytes the converter read; `rel` is 'raw-source'; `href` appears only when the caller supplied a location that means something to a reader, never a producer's local filesystem path.\n\nBYTES, NOT A PARSED COPY. `document` is forbidden here, enforced by the schema rather than described: it holds a parsed JSON object, so embedding through it discards the original whitespace, key order, duplicate keys and trailing bytes — which makes the artifact unreconstructable and the checksum unverifiable against what is stored. A JSON input carries as a `content` string like every other input. This is deliberately stricter than HDF v2, whose `passthrough.raw` held a parsed structure in every converter but one, and which for XML inputs stored a reshaped object whose keys could collide.\n\n`mediaType` is REQUIRED on an entry that embeds — bytes whose type a consumer has to infer are not carriage. It is derived from the converter's declared input family (json → application/json, xml → application/xml, text → text/plain) and overridden by converters that know their bytes more precisely (CSV, NDJSON, JavaScript-wrapped JSON).\n\nAn entry that only points at a location may omit `mediaType`, `content` and `encoding`.",
4063
+ "$comment": "Examples, in order: 1) JSON input embedded as a utf-8 `content` string — the common case, and note it is NOT a parsed object; 2) XML input, which `document` never could have held; 3) CSV input, where `mediaType` overrides the 'text' input family's derived text/plain; 4) non-text input (a Fortify FPR zip) embedded as base64; 5) by-reference only: a scan retrievable at a meaningful URL, with no embedded copy and therefore no required mediaType, encoding or content.",
4064
+ "examples": [
4065
+ {
4066
+ "sourceName": "grype",
4067
+ "rel": "raw-source",
4068
+ "mediaType": "application/json",
4069
+ "encoding": "utf-8",
4070
+ "content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
4071
+ "checksum": {
4072
+ "algorithm": "sha256",
4073
+ "value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
4074
+ }
4075
+ },
4076
+ {
4077
+ "sourceName": "openscap",
4078
+ "rel": "raw-source",
4079
+ "mediaType": "application/xml",
4080
+ "encoding": "utf-8",
4081
+ "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Benchmark xmlns=\"http://checklists.nist.gov/xccdf/1.2\" id=\"xccdf_org.ssgproject.content_benchmark_RHEL-9\">\n <TestResult id=\"xccdf_org.open-scap_testresult_default-profile\" start-time=\"2026-09-27T12:00:00+00:00\" end-time=\"2026-09-27T12:04:11+00:00\">\n <rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n </rule-result>\n </TestResult>\n</Benchmark>",
4082
+ "checksum": {
4083
+ "algorithm": "sha256",
4084
+ "value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
4085
+ }
4086
+ },
4087
+ {
4088
+ "sourceName": "prisma",
4089
+ "rel": "raw-source",
4090
+ "mediaType": "text/csv",
4091
+ "encoding": "utf-8",
4092
+ "content": "Hostname,Distro,CVE ID,Compliance ID,Type,Severity,Packages,Source Package,Package Version\nhost-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1\n",
4093
+ "checksum": {
4094
+ "algorithm": "sha256",
4095
+ "value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
4096
+ }
4097
+ },
4098
+ {
4099
+ "sourceName": "fortify",
4100
+ "rel": "raw-source",
4101
+ "mediaType": "application/zip",
4102
+ "encoding": "base64",
4103
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
4104
+ "checksum": {
4105
+ "algorithm": "sha256",
4106
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
4107
+ }
4108
+ },
4109
+ {
4110
+ "sourceName": "nessus",
4111
+ "rel": "raw-source",
4112
+ "href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
4113
+ "mediaType": "application/xml",
4114
+ "checksum": {
4115
+ "algorithm": "sha256",
4116
+ "value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
4117
+ }
4118
+ }
4119
+ ]
4120
+ },
4121
+ "Extensions": {
4122
+ "type": "object",
4123
+ "additionalProperties": false,
4124
+ "properties": {
4125
+ "passthrough": {
4126
+ "type": "object",
4127
+ "additionalProperties": true,
4128
+ "description": "Catch-all for producer data that HDF does not model — the role heimdall2's `passthrough.auxiliary_data` played: fields a converter deliberately carried but had no home for.\n\nDeliberately permissive: unenumerated properties are accepted by design, with no shape imposed on them. HDF neither reads nor interprets what is here. It is the ONLY permissive surface in `extensions` — everything HDF does not define belongs here rather than beside it.\n\nThis is NOT where the pre-converted source artifact goes. v2 put it here only because nothing else had room; `rawSourceArtifacts` is its home now, and it gives the bytes a checksum, a media type and a reference contract that an untyped object cannot.\n\nFor data that belongs to one requirement rather than to the document, use that object's own fields — a document-level bag cannot say which requirement it describes.",
4129
+ "examples": [
4130
+ {
4131
+ "auxiliary_data": [
4132
+ {
4133
+ "name": "Scoutsuite",
4134
+ "data": {
4135
+ "last_run": {
4136
+ "ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
4137
+ }
4138
+ }
4139
+ }
4140
+ ]
4141
+ },
4142
+ {
4143
+ "audit": {
4144
+ "runId": "r-123"
4145
+ }
4146
+ }
4147
+ ],
4148
+ "$comment": "Examples, in order: 1) heimdall2's auxiliary_data shape, the data a v2 mapper carried with nowhere else to put it; 2) the legacy top-level `passthrough` an HDF document arrived with, relocated here verbatim by the SAF-supplement normalizer."
4149
+ },
4150
+ "rawSourceArtifacts": {
4151
+ "type": "array",
4152
+ "items": {
4153
+ "$ref": "#/$defs/Raw_Source_Artifact"
4154
+ },
4155
+ "description": "The input(s) this document was converted from, verbatim.\n\nAn array because a conversion can consume more than one artifact — the OSCAL profile path takes a profile and a catalog. Every other converter takes one input, and an array of one costs nothing.\n\nPopulating this is required of ingest converters by policy, enforced by the converter contract and test harness rather than by a schema `required`: a tool that emits HDF natively has no source artifact, and requiring the field would make valid native HDF invalid."
4156
+ }
4157
+ },
4158
+ "title": "Extensions",
4159
+ "description": "Carrier for data outside the HDF model: `passthrough` for producer data HDF does not model, `rawSourceArtifacts` for the pre-converted input(s).\n\nCLOSED: these two members are the whole of it. A key HDF does not define goes inside `passthrough` — that is what `passthrough` is for — so `extensions` never becomes a second, unnamed schema that consumers must reverse-engineer from the producers that happen to write it.\n\nClosed with `additionalProperties` rather than the house `unevaluatedProperties` because this definition composes nothing, and the shipped Go validator is a draft-07 engine that does not implement `unevaluatedProperties` — a closure only one of the two validators enforces is not a closure.\n\nDeclared on every HDF document type that carries a producer envelope (`generator` / `integrity`), and on `Evaluated_Baseline`, so one rule governs both sites.",
4160
+ "$comment": "Examples, in order: 1) the whole contract in one object — a converter's input embedded beside the producer data it could not map; 2) carriage alone, the shape a converter emits when it has nothing homeless to record.",
4161
+ "examples": [
4162
+ {
4163
+ "passthrough": {
4164
+ "auxiliary_data": [
4165
+ {
4166
+ "name": "Grype",
4167
+ "data": {
4168
+ "descriptor": {
4169
+ "name": "grype",
4170
+ "version": "0.74.0"
4171
+ }
4172
+ }
4173
+ }
4174
+ ]
4175
+ },
4176
+ "rawSourceArtifacts": [
4177
+ {
4178
+ "sourceName": "grype",
4179
+ "rel": "raw-source",
4180
+ "mediaType": "application/json",
4181
+ "encoding": "utf-8",
4182
+ "content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
4183
+ "checksum": {
4184
+ "algorithm": "sha256",
4185
+ "value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
4186
+ }
4187
+ }
4188
+ ]
4189
+ },
4190
+ {
4191
+ "rawSourceArtifacts": [
4192
+ {
4193
+ "sourceName": "fortify",
4194
+ "rel": "raw-source",
4195
+ "mediaType": "application/zip",
4196
+ "encoding": "base64",
4197
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
4198
+ "checksum": {
4199
+ "algorithm": "sha256",
4200
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
4201
+ }
4202
+ }
4203
+ ]
4204
+ }
4205
+ ]
4206
+ },
3879
4207
  "Status_Override": {
3880
4208
  "type": "object",
3881
4209
  "unevaluatedProperties": false,
@@ -3902,20 +4230,20 @@
3902
4230
  "externalReferences": {
3903
4231
  "type": "array",
3904
4232
  "items": {
3905
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
4233
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
3906
4234
  },
3907
4235
  "description": "Optional references to the external artifacts behind this override (e.g. the STIX bundle/object or CTI feed motivating an E:A riskAdjustment). Inert context distinct from `evidence`; see External_Reference. Symmetric with Standalone_Override.externalReferences for the inline (results-embedded) override carrier."
3908
4236
  },
3909
4237
  "type": {
3910
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Override_Type",
4238
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
3911
4239
  "description": "The type of override applied to this requirement."
3912
4240
  },
3913
4241
  "status": {
3914
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
4242
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
3915
4243
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
3916
4244
  },
3917
4245
  "impact": {
3918
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Impact_Override",
4246
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
3919
4247
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
3920
4248
  },
3921
4249
  "reason": {
@@ -3923,7 +4251,7 @@
3923
4251
  "description": "Explanation for why this override was applied."
3924
4252
  },
3925
4253
  "appliedBy": {
3926
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
4254
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
3927
4255
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
3928
4256
  },
3929
4257
  "appliedAt": {
@@ -3937,27 +4265,27 @@
3937
4265
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
3938
4266
  },
3939
4267
  "signature": {
3940
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
4268
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
3941
4269
  "description": "Optional digital signature for enhanced trust and non-repudiation. Supports hardware security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing methods."
3942
4270
  },
3943
4271
  "evidence": {
3944
4272
  "type": "array",
3945
4273
  "items": {
3946
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
4274
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
3947
4275
  },
3948
4276
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
3949
4277
  },
3950
4278
  "previousChecksum": {
3951
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
4279
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
3952
4280
  "description": "SHA-256 checksum of the previous amendment in chronological order. Each amendment's checksum is recorded by the NEXT one, so editing an amendment in place is detectable — provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment, the document envelope, deleted trailing amendments, and a chain that has been stripped or recomputed wholesale are all outside what it can detect. Use signature for non-repudiation. Omitted on the first amendment on a requirement."
3953
4281
  },
3954
4282
  "cvss": {
3955
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
4283
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
3956
4284
  "$comment": "When present alongside impact.value on a riskAdjustment override, impact.value should be approximately cvss.computedScore / 10.0. Soft consistency rule — validators may warn but should not error. The cvss block makes Environmental/Threat enrichment auditable.",
3957
4285
  "description": "Structured CVSS scoring data backing this override. Captures the rubric (which Environmental/Threat metrics the consumer modified, the recomputed score) used to justify a riskAdjustment. For other override types this is optional context."
3958
4286
  },
3959
4287
  "justification": {
3960
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Justification",
4288
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
3961
4289
  "description": "Structured controlled-vocabulary classification for why this override applies. Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive and attestation overrides where the structured category enables filtering and lossless round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the precedent vocabulary and rationale."
3962
4290
  }
3963
4291
  },
@@ -4093,7 +4421,7 @@
4093
4421
  "description": "Detailed explanation of the plan, including what actions will be taken."
4094
4422
  },
4095
4423
  "appliedBy": {
4096
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
4424
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
4097
4425
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
4098
4426
  },
4099
4427
  "appliedAt": {
@@ -4109,23 +4437,23 @@
4109
4437
  "milestones": {
4110
4438
  "type": "array",
4111
4439
  "items": {
4112
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
4440
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
4113
4441
  },
4114
4442
  "description": "Optional array of milestones tracking progress toward completion."
4115
4443
  },
4116
4444
  "signature": {
4117
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
4445
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
4118
4446
  "description": "Optional digital signature for enhanced trust and non-repudiation."
4119
4447
  },
4120
4448
  "evidence": {
4121
4449
  "type": "array",
4122
4450
  "items": {
4123
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
4451
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
4124
4452
  },
4125
4453
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
4126
4454
  },
4127
4455
  "previousChecksum": {
4128
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
4456
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
4129
4457
  "description": "SHA-256 checksum of the previous amendment in chronological order. Each amendment's checksum is recorded by the NEXT one, so editing an amendment in place is detectable — provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment, the document envelope, deleted trailing amendments, and a chain that has been stripped or recomputed wholesale are all outside what it can detect. Use signature for non-repudiation. Omitted on the first amendment on a requirement."
4130
4458
  }
4131
4459
  },
@@ -4268,17 +4596,9 @@
4268
4596
  "Integrity": {
4269
4597
  "type": "object",
4270
4598
  "unevaluatedProperties": false,
4271
- "dependentRequired": {
4272
- "algorithm": [
4273
- "checksum"
4274
- ],
4275
- "checksum": [
4276
- "algorithm"
4277
- ]
4278
- },
4279
4599
  "properties": {
4280
4600
  "algorithm": {
4281
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Hash_Algorithm",
4601
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
4282
4602
  "description": "The hash algorithm used for the checksum."
4283
4603
  },
4284
4604
  "checksum": {
@@ -4307,13 +4627,39 @@
4307
4627
  }
4308
4628
  ],
4309
4629
  "description": "Cryptographic integrity information for verifying the HDF file has not been tampered with. If algorithm is provided, checksum must also be provided, and vice versa.",
4310
- "title": "Integrity"
4630
+ "title": "Integrity",
4631
+ "allOf": [
4632
+ {
4633
+ "if": {
4634
+ "required": [
4635
+ "algorithm"
4636
+ ]
4637
+ },
4638
+ "then": {
4639
+ "required": [
4640
+ "checksum"
4641
+ ]
4642
+ }
4643
+ },
4644
+ {
4645
+ "if": {
4646
+ "required": [
4647
+ "checksum"
4648
+ ]
4649
+ },
4650
+ "then": {
4651
+ "required": [
4652
+ "algorithm"
4653
+ ]
4654
+ }
4655
+ }
4656
+ ]
4311
4657
  }
4312
4658
  }
4313
4659
  },
4314
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0": {
4660
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
4315
4661
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4316
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0",
4662
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
4317
4663
  "title": "HDF Amendment Primitives",
4318
4664
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
4319
4665
  "$defs": {
@@ -4424,7 +4770,7 @@
4424
4770
  "externalReferences": {
4425
4771
  "type": "array",
4426
4772
  "items": {
4427
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
4773
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
4428
4774
  },
4429
4775
  "description": "Optional references to the external artifacts behind this override (e.g. the STIX bundle/object, advisory, or CTI feed that motivated it). Inert context distinct from `evidence`; see External_Reference."
4430
4776
  },
@@ -4442,7 +4788,7 @@
4442
4788
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
4443
4789
  },
4444
4790
  "status": {
4445
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
4791
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
4446
4792
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
4447
4793
  },
4448
4794
  "impact": {
@@ -4454,7 +4800,7 @@
4454
4800
  "description": "Justification for this amendment."
4455
4801
  },
4456
4802
  "appliedBy": {
4457
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
4803
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
4458
4804
  "description": "Identity of who applied this amendment."
4459
4805
  },
4460
4806
  "appliedAt": {
@@ -4470,20 +4816,20 @@
4470
4816
  "evidence": {
4471
4817
  "type": "array",
4472
4818
  "items": {
4473
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
4819
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
4474
4820
  },
4475
4821
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
4476
4822
  },
4477
4823
  "signature": {
4478
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
4824
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
4479
4825
  "description": "Digital signature for non-repudiation."
4480
4826
  },
4481
4827
  "previousChecksum": {
4482
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
4828
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
4483
4829
  "description": "SHA-256 checksum of the prior amendment in chronological order. Each amendment's checksum is recorded by the NEXT one, so editing an amendment in place is detectable — provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment, the document envelope, deleted trailing amendments, and a chain that has been stripped or recomputed wholesale are all outside what it can detect. Use signature for non-repudiation. Omitted on the first amendment."
4484
4830
  },
4485
4831
  "cvss": {
4486
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
4832
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
4487
4833
  "$comment": "When present alongside impact.value on a riskAdjustment override, impact.value should be approximately cvss.computedScore / 10.0. Soft consistency rule — validators may warn but should not error. The cvss block makes Environmental/Threat enrichment auditable.",
4488
4834
  "description": "Structured CVSS scoring data backing this override. Captures the rubric (which Environmental/Threat metrics the consumer modified, the recomputed score) used to justify a riskAdjustment. For other override types this is optional context."
4489
4835
  },
@@ -4494,7 +4840,7 @@
4494
4840
  "milestones": {
4495
4841
  "type": "array",
4496
4842
  "items": {
4497
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
4843
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
4498
4844
  },
4499
4845
  "description": "Remediation milestones (primarily for POA&M type amendments)."
4500
4846
  },
@@ -4511,7 +4857,7 @@
4511
4857
  "affectedPackages": {
4512
4858
  "type": "array",
4513
4859
  "items": {
4514
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0#/$defs/Affected_Package"
4860
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
4515
4861
  },
4516
4862
  "description": "Software packages this amendment is scoped to, distinct from componentRef (which scopes to an HDF-internal Component by UUID).\n\nUse when the source amendment format references packages by purl/cpe/name+version — e.g., VEX `affects[]` / `products[]`, OSCAL POA&M `subjects[]`, FedRAMP component-aware amendments.\n\nSymmetric with Evaluated_Requirement.affectedPackages, which scopes findings to the same package vocabulary.\n\nWhen omitted, the amendment applies system-wide (or only to componentRef when that is set)."
4517
4863
  }
@@ -4644,9 +4990,9 @@
4644
4990
  }
4645
4991
  }
4646
4992
  },
4647
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0": {
4993
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
4648
4994
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4649
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0",
4995
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
4650
4996
  "title": "HDF CVSS Primitives",
4651
4997
  "description": "Types for representing CVSS (Common Vulnerability Scoring System) data attached to assessment findings. Supports CVSS v2.0, v3.0, v3.1, and v4.0 metric groups (Base, Threat, Environmental, Supplemental).",
4652
4998
  "$defs": {
@@ -4843,9 +5189,9 @@
4843
5189
  }
4844
5190
  }
4845
5191
  },
4846
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0": {
5192
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
4847
5193
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4848
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0",
5194
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
4849
5195
  "title": "HDF Affected Package Primitives",
4850
5196
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
4851
5197
  "$defs": {
@@ -4953,9 +5299,9 @@
4953
5299
  }
4954
5300
  }
4955
5301
  },
4956
- "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.7.0": {
5302
+ "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0": {
4957
5303
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4958
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.7.0",
5304
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0",
4959
5305
  "title": "HDF Runner Primitive",
4960
5306
  "description": "Information about the test execution environment where the security tool/scanner was executed.",
4961
5307
  "$defs": {
@@ -4999,7 +5345,7 @@
4999
5345
  "description": "The container instance identifier. Example: 'a1b2c3d4e5f6', 'security-scan-job-xyz123'. Can be a Docker container ID, Kubernetes pod name, or other container runtime identifier."
5000
5346
  },
5001
5347
  "operator": {
5002
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
5348
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
5003
5349
  "description": "The identity of the person or system responsible for executing the test. This could be a human auditor manually completing a checklist, an automated CI/CD system, or a security tool. Optional field to support both automated and manual HDF generation."
5004
5350
  }
5005
5351
  },
@@ -5048,9 +5394,9 @@
5048
5394
  }
5049
5395
  }
5050
5396
  },
5051
- "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.7.0": {
5397
+ "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0": {
5052
5398
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5053
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.7.0",
5399
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0",
5054
5400
  "title": "HDF Parameter Primitives",
5055
5401
  "description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
5056
5402
  "$defs": {
@@ -5181,9 +5527,9 @@
5181
5527
  }
5182
5528
  }
5183
5529
  },
5184
- "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.7.0": {
5530
+ "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0": {
5185
5531
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5186
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.7.0",
5532
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0",
5187
5533
  "title": "HDF EPSS Primitive",
5188
5534
  "description": "Type for representing FIRST.org's Exploit Prediction Scoring System (EPSS) data for a vulnerability. EPSS estimates the probability that a CVE will be exploited in the wild in the next 30 days. See https://www.first.org/epss/ for the underlying model and methodology.",
5189
5535
  "$defs": {
@@ -5238,9 +5584,9 @@
5238
5584
  }
5239
5585
  }
5240
5586
  },
5241
- "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.7.0": {
5587
+ "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0": {
5242
5588
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5243
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.7.0",
5589
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0",
5244
5590
  "title": "HDF Kev Primitives",
5245
5591
  "description": "Types for representing CISA Known Exploited Vulnerabilities (KEV) catalog membership. The KEV catalog (https://www.cisa.gov/known-exploited-vulnerabilities-catalog) flags CVEs that are confirmed actively exploited in the wild and drives federal patching urgency under CISA Binding Operational Directive 22-01.",
5246
5592
  "$defs": {