@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,7 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-comparison/v3.7.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-comparison/v3.8.0",
4
4
  "type": "object",
5
+ "$comment": "Examples, in order: 1) a temporal comparison of two runs of the same scan, showing one fixed, one regressed and one new requirement. Produced by `hdf diff` over hdf-diff/test/fixtures/scan-before.json and scan-after.json with whole requirements dropped from the inputs, so `summary` is computed by the engine and matches the diffs it reports. The engine also writes a `baseline` key on each diff that this definition does not declare; it is omitted here, so regenerating this example needs that key stripped until the schema and the engine agree.",
5
6
  "unevaluatedProperties": false,
6
7
  "required": [
7
8
  "formatVersion",
@@ -14,7 +15,7 @@
14
15
  "externalReferences": {
15
16
  "type": "array",
16
17
  "items": {
17
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
18
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
18
19
  },
19
20
  "description": "Optional references to external artifacts relevant to this comparison (CTI/STIX, advisories, or any URI-addressable artifact). Inert context; see External_Reference."
20
21
  },
@@ -24,7 +25,7 @@
24
25
  "description": "Schema version for this comparison format."
25
26
  },
26
27
  "comparisonMode": {
27
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Comparison_Mode",
28
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Comparison_Mode",
28
29
  "description": "The mode of comparison being performed."
29
30
  },
30
31
  "timestamp": {
@@ -33,50 +34,50 @@
33
34
  "description": "When this comparison was performed."
34
35
  },
35
36
  "generator": {
36
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Generator",
37
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
37
38
  "description": "Information about the tool that generated this comparison."
38
39
  },
39
40
  "sources": {
40
41
  "type": "array",
41
42
  "minItems": 2,
42
43
  "items": {
43
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Source"
44
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Source"
44
45
  },
45
46
  "description": "The source documents being compared. At least two sources are required."
46
47
  },
47
48
  "matching": {
48
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Matching_Config",
49
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Matching_Config",
49
50
  "description": "Configuration for how requirements were matched across sources."
50
51
  },
51
52
  "summary": {
52
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Comparison_Summary",
53
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Comparison_Summary",
53
54
  "description": "Summary statistics for the overall comparison."
54
55
  },
55
56
  "baselineDiffs": {
56
57
  "type": "array",
57
58
  "items": {
58
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Baseline_Diff"
59
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Baseline_Diff"
59
60
  },
60
61
  "description": "Comparison of baselines between sources."
61
62
  },
62
63
  "requirementDiffs": {
63
64
  "type": "array",
64
65
  "items": {
65
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Requirement_Diff"
66
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Requirement_Diff"
66
67
  },
67
68
  "description": "Detailed comparison of individual requirements between sources."
68
69
  },
69
70
  "componentDiffs": {
70
71
  "type": "array",
71
72
  "items": {
72
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Component_Diff"
73
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Component_Diff"
73
74
  },
74
75
  "description": "Comparison of components between two system documents. Used in systemDrift mode. A component's BOM changes surface as a field change on its boms[] here."
75
76
  },
76
77
  "packageDiffs": {
77
78
  "type": "array",
78
79
  "items": {
79
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Package_Diff"
80
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Package_Diff"
80
81
  },
81
82
  "description": "RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a component's BOM changes as a field change on its boms[] (see componentDiffs), and standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This field is retained for a future normalized package-level diff; consumers must not expect it from today's systemDrift output."
82
83
  },
@@ -88,40 +89,270 @@
88
89
  "drift": {
89
90
  "type": "array",
90
91
  "items": {
91
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Requirement_Diff"
92
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Requirement_Diff"
92
93
  },
93
94
  "description": "External/metadata changes separate from status changes (Terraform pattern)."
94
95
  },
95
96
  "annotations": {
96
97
  "type": "object",
97
98
  "additionalProperties": {
98
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0#/$defs/Annotation"
99
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Annotation"
99
100
  },
100
101
  "description": "Map of annotation IDs to annotation objects, providing context or action items for requirement diffs."
101
102
  },
102
103
  "integrity": {
103
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
104
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
104
105
  "description": "Cryptographic integrity information for verifying this comparison document."
105
106
  },
106
107
  "extensions": {
107
- "type": "object",
108
- "additionalProperties": true,
109
- "description": "Reserved for tool-specific data not defined in the HDF standard."
108
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
109
+ "description": "Producer data outside the HDF model, and the pre-converted source artifact(s) this comparison was derived from."
110
110
  }
111
111
  },
112
+ "examples": [
113
+ {
114
+ "formatVersion": "1.0.0",
115
+ "comparisonMode": "temporal",
116
+ "sources": [
117
+ {
118
+ "role": "old",
119
+ "label": "trim-before.json"
120
+ },
121
+ {
122
+ "role": "new",
123
+ "label": "trim-after.json"
124
+ }
125
+ ],
126
+ "summary": {
127
+ "fixed": 1,
128
+ "regressed": 1,
129
+ "new": 1,
130
+ "absent": 0,
131
+ "unchanged": 0,
132
+ "updated": 0,
133
+ "total": 3,
134
+ "matchedCount": 2,
135
+ "unmatchedOldCount": 0,
136
+ "unmatchedNewCount": 1
137
+ },
138
+ "requirementDiffs": [
139
+ {
140
+ "id": "SV-001",
141
+ "state": "fixed",
142
+ "changeReasons": [
143
+ "resultChanged"
144
+ ],
145
+ "before": {
146
+ "descriptions": [
147
+ {
148
+ "data": "The system must disable root SSH login",
149
+ "label": "default"
150
+ }
151
+ ],
152
+ "id": "SV-001",
153
+ "impact": 0.7,
154
+ "results": [
155
+ {
156
+ "codeDesc": "SSH config PermitRootLogin should eq 'no'",
157
+ "message": "expected 'yes' to eq 'no'",
158
+ "runTime": 0.1,
159
+ "startTime": "2024-01-01T00:00:00Z",
160
+ "status": "failed"
161
+ }
162
+ ],
163
+ "sourceLocation": {
164
+ "line": 1,
165
+ "ref": "controls/stig.rb"
166
+ },
167
+ "tags": {
168
+ "cci": [
169
+ "CCI-000366"
170
+ ],
171
+ "nist": [
172
+ "AC-6"
173
+ ],
174
+ "severity": "high"
175
+ },
176
+ "title": "Ensure SSH root login is disabled"
177
+ },
178
+ "after": {
179
+ "descriptions": [
180
+ {
181
+ "data": "The system must disable root SSH login",
182
+ "label": "default"
183
+ }
184
+ ],
185
+ "id": "SV-001",
186
+ "impact": 0.7,
187
+ "results": [
188
+ {
189
+ "codeDesc": "SSH config PermitRootLogin should eq 'no'",
190
+ "runTime": 0.1,
191
+ "startTime": "2024-02-01T00:00:00Z",
192
+ "status": "passed"
193
+ }
194
+ ],
195
+ "sourceLocation": {
196
+ "line": 1,
197
+ "ref": "controls/stig.rb"
198
+ },
199
+ "tags": {
200
+ "cci": [
201
+ "CCI-000366"
202
+ ],
203
+ "nist": [
204
+ "AC-6"
205
+ ],
206
+ "severity": "high"
207
+ },
208
+ "title": "Ensure SSH root login is disabled"
209
+ },
210
+ "fieldChanges": [],
211
+ "oldEffectiveStatus": "failed",
212
+ "newEffectiveStatus": "passed",
213
+ "title": "Ensure SSH root login is disabled"
214
+ },
215
+ {
216
+ "id": "SV-003",
217
+ "state": "regressed",
218
+ "changeReasons": [
219
+ "resultChanged"
220
+ ],
221
+ "before": {
222
+ "descriptions": [
223
+ {
224
+ "data": "The audit subsystem must be active",
225
+ "label": "default"
226
+ }
227
+ ],
228
+ "id": "SV-003",
229
+ "impact": 0.7,
230
+ "results": [
231
+ {
232
+ "codeDesc": "auditd service should be enabled",
233
+ "runTime": 0.08,
234
+ "startTime": "2024-01-01T00:00:02Z",
235
+ "status": "passed"
236
+ }
237
+ ],
238
+ "sourceLocation": {
239
+ "line": 40,
240
+ "ref": "controls/stig.rb"
241
+ },
242
+ "tags": {
243
+ "cci": [
244
+ "CCI-000130"
245
+ ],
246
+ "nist": [
247
+ "AU-3"
248
+ ],
249
+ "severity": "high"
250
+ },
251
+ "title": "Ensure audit logging is enabled"
252
+ },
253
+ "after": {
254
+ "descriptions": [
255
+ {
256
+ "data": "The audit subsystem must be active",
257
+ "label": "default"
258
+ }
259
+ ],
260
+ "id": "SV-003",
261
+ "impact": 0.7,
262
+ "results": [
263
+ {
264
+ "codeDesc": "auditd service should be enabled",
265
+ "message": "expected service to be enabled, got disabled",
266
+ "runTime": 0.07,
267
+ "startTime": "2024-02-01T00:00:02Z",
268
+ "status": "failed"
269
+ }
270
+ ],
271
+ "sourceLocation": {
272
+ "line": 40,
273
+ "ref": "controls/stig.rb"
274
+ },
275
+ "tags": {
276
+ "cci": [
277
+ "CCI-000130"
278
+ ],
279
+ "nist": [
280
+ "AU-3"
281
+ ],
282
+ "severity": "high"
283
+ },
284
+ "title": "Ensure audit logging is enabled"
285
+ },
286
+ "fieldChanges": [],
287
+ "oldEffectiveStatus": "passed",
288
+ "newEffectiveStatus": "failed",
289
+ "title": "Ensure audit logging is enabled"
290
+ },
291
+ {
292
+ "id": "SV-006",
293
+ "state": "new",
294
+ "changeReasons": [],
295
+ "before": null,
296
+ "after": {
297
+ "descriptions": [
298
+ {
299
+ "data": "SELinux must be in enforcing mode",
300
+ "label": "default"
301
+ }
302
+ ],
303
+ "id": "SV-006",
304
+ "impact": 0.7,
305
+ "results": [
306
+ {
307
+ "codeDesc": "getenforce should return Enforcing",
308
+ "runTime": 0.01,
309
+ "startTime": "2024-02-01T00:00:05Z",
310
+ "status": "passed"
311
+ }
312
+ ],
313
+ "sourceLocation": {
314
+ "line": 100,
315
+ "ref": "controls/stig.rb"
316
+ },
317
+ "tags": {
318
+ "cci": [
319
+ "CCI-002165"
320
+ ],
321
+ "nist": [
322
+ "AC-3 (4)"
323
+ ],
324
+ "severity": "high"
325
+ },
326
+ "title": "Ensure SELinux is enforcing"
327
+ },
328
+ "fieldChanges": [],
329
+ "newEffectiveStatus": "passed",
330
+ "title": "Ensure SELinux is enforcing"
331
+ }
332
+ ],
333
+ "baselineDiffs": [
334
+ {
335
+ "name": "rhel9-stig-baseline",
336
+ "oldVersion": "1.0.0",
337
+ "newVersion": "1.1.0",
338
+ "state": "updated"
339
+ }
340
+ ]
341
+ }
342
+ ],
112
343
  "description": "Structured comparison between two or more HDF security assessment documents. Supports temporal, baseline, fleet, and multi-source comparison modes.",
113
344
  "title": "HDF Comparison",
114
345
  "$defs": {
115
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0": {
346
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
116
347
  "$schema": "https://json-schema.org/draft/2020-12/schema",
117
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0",
348
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
118
349
  "title": "HDF Common Primitives",
119
350
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
120
351
  "$defs": {
121
352
  "External_Reference": {
122
353
  "type": "object",
123
354
  "title": "External Reference",
124
- "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.",
355
+ "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.",
125
356
  "required": [
126
357
  "sourceName"
127
358
  ],
@@ -140,6 +371,42 @@
140
371
  "required": [
141
372
  "description"
142
373
  ]
374
+ },
375
+ {
376
+ "required": [
377
+ "content"
378
+ ]
379
+ },
380
+ {
381
+ "required": [
382
+ "document"
383
+ ]
384
+ }
385
+ ],
386
+ "allOf": [
387
+ {
388
+ "if": {
389
+ "required": [
390
+ "content"
391
+ ]
392
+ },
393
+ "then": {
394
+ "required": [
395
+ "encoding"
396
+ ]
397
+ }
398
+ },
399
+ {
400
+ "if": {
401
+ "required": [
402
+ "encoding"
403
+ ]
404
+ },
405
+ "then": {
406
+ "required": [
407
+ "content"
408
+ ]
409
+ }
143
410
  }
144
411
  ],
145
412
  "properties": {
@@ -155,7 +422,7 @@
155
422
  "href": {
156
423
  "type": "string",
157
424
  "format": "uri-reference",
158
- "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`."
425
+ "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."
159
426
  },
160
427
  "description": {
161
428
  "type": "string",
@@ -167,11 +434,11 @@
167
434
  },
168
435
  "mediaType": {
169
436
  "type": "string",
170
- "description": "IANA media type of the referenced artifact when retrievable (RFC 6838), e.g., 'application/json'. Meaningful only with `href`."
437
+ "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`."
171
438
  },
172
439
  "checksum": {
173
440
  "$ref": "#/$defs/Checksum",
174
- "description": "Integrity hash of the referenced artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Meaningful only with a retrievable `href`."
441
+ "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."
175
442
  },
176
443
  "addedBy": {
177
444
  "$ref": "#/$defs/Identity",
@@ -190,11 +457,24 @@
190
457
  "document": {
191
458
  "type": "object",
192
459
  "additionalProperties": true,
193
- "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)."
460
+ "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)."
461
+ },
462
+ "content": {
463
+ "type": "string",
464
+ "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."
465
+ },
466
+ "encoding": {
467
+ "type": "string",
468
+ "title": "External Reference Encoding",
469
+ "enum": [
470
+ "utf-8",
471
+ "base64"
472
+ ],
473
+ "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."
194
474
  }
195
475
  },
196
476
  "unevaluatedProperties": false,
197
- "$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.",
477
+ "$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.",
198
478
  "examples": [
199
479
  {
200
480
  "sourceName": "cve",
@@ -240,6 +520,28 @@
240
520
  }
241
521
  ]
242
522
  }
523
+ },
524
+ {
525
+ "sourceName": "openscap",
526
+ "rel": "raw-source",
527
+ "mediaType": "application/xml",
528
+ "encoding": "utf-8",
529
+ "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>",
530
+ "checksum": {
531
+ "algorithm": "sha256",
532
+ "value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
533
+ }
534
+ },
535
+ {
536
+ "sourceName": "fortify",
537
+ "rel": "raw-source",
538
+ "mediaType": "application/zip",
539
+ "encoding": "base64",
540
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
541
+ "checksum": {
542
+ "algorithm": "sha256",
543
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
544
+ }
243
545
  }
244
546
  ]
245
547
  },
@@ -251,7 +553,7 @@
251
553
  "sha512",
252
554
  "blake3"
253
555
  ],
254
- "description": "Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers container-image and other artifact digests that use it.",
556
+ "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.",
255
557
  "title": "Hash Algorithm"
256
558
  },
257
559
  "Requirement_Group": {
@@ -409,7 +711,33 @@
409
711
  }
410
712
  ],
411
713
  "description": "A reference to an external document.",
412
- "title": "Reference"
714
+ "title": "Reference",
715
+ "unevaluatedProperties": false,
716
+ "$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.",
717
+ "examples": [
718
+ {
719
+ "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
720
+ },
721
+ {
722
+ "ref": "NIST SP 800-53 Rev 5, AC-6"
723
+ },
724
+ {
725
+ "ref": "CIS Benchmark for RHEL 9, 1.1.1",
726
+ "url": "https://www.cisecurity.org/benchmark/red_hat_linux"
727
+ },
728
+ {
729
+ "ref": [
730
+ {
731
+ "identifier": "2921",
732
+ "publisher": "DISA",
733
+ "type": "DPMS Target"
734
+ }
735
+ ]
736
+ },
737
+ {
738
+ "uri": "https://attack.mitre.org/techniques/T1059/"
739
+ }
740
+ ]
413
741
  },
414
742
  "Source_Location": {
415
743
  "type": "object",
@@ -1223,9 +1551,9 @@
1223
1551
  }
1224
1552
  }
1225
1553
  },
1226
- "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0": {
1554
+ "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0": {
1227
1555
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1228
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.7.0",
1556
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0",
1229
1557
  "title": "HDF Comparison Primitives",
1230
1558
  "description": "Types for representing structured comparisons between HDF security assessment documents.",
1231
1559
  "$defs": {
@@ -1397,7 +1725,7 @@
1397
1725
  "description": "The original format of the source document before conversion to HDF."
1398
1726
  },
1399
1727
  "checksum": {
1400
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
1728
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
1401
1729
  "description": "Cryptographic checksum of the source document for integrity verification."
1402
1730
  },
1403
1731
  "assessmentTimestamp": {
@@ -1406,13 +1734,13 @@
1406
1734
  "description": "When the source assessment was performed. ISO 8601 format."
1407
1735
  },
1408
1736
  "tool": {
1409
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Tool",
1737
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Tool",
1410
1738
  "description": "The security tool that produced the assessment data in this source."
1411
1739
  },
1412
1740
  "components": {
1413
1741
  "type": "array",
1414
1742
  "items": {
1415
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0#/$defs/Component"
1743
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
1416
1744
  },
1417
1745
  "description": "The components assessed in this source."
1418
1746
  },
@@ -1764,7 +2092,7 @@
1764
2092
  "before": {
1765
2093
  "oneOf": [
1766
2094
  {
1767
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0#/$defs/Component"
2095
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
1768
2096
  },
1769
2097
  {
1770
2098
  "type": "null"
@@ -1775,7 +2103,7 @@
1775
2103
  "after": {
1776
2104
  "oneOf": [
1777
2105
  {
1778
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0#/$defs/Component"
2106
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
1779
2107
  },
1780
2108
  {
1781
2109
  "type": "null"
@@ -1980,7 +2308,7 @@
1980
2308
  "before": {
1981
2309
  "oneOf": [
1982
2310
  {
1983
- "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0#/$defs/Evaluated_Requirement"
2311
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
1984
2312
  },
1985
2313
  {
1986
2314
  "type": "null"
@@ -1991,7 +2319,7 @@
1991
2319
  "after": {
1992
2320
  "oneOf": [
1993
2321
  {
1994
- "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0#/$defs/Evaluated_Requirement"
2322
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
1995
2323
  },
1996
2324
  {
1997
2325
  "type": "null"
@@ -2087,12 +2415,183 @@
2087
2415
  }
2088
2416
  }
2089
2417
  },
2090
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0": {
2418
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
2091
2419
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2092
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0",
2420
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
2093
2421
  "title": "HDF Extension Primitives",
2094
- "description": "Extension types for waivers, attestations, generators, and integrity.",
2422
+ "description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
2095
2423
  "$defs": {
2424
+ "Raw_Source_Artifact": {
2425
+ "allOf": [
2426
+ {
2427
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
2428
+ },
2429
+ {
2430
+ "not": {
2431
+ "required": [
2432
+ "document"
2433
+ ]
2434
+ }
2435
+ },
2436
+ {
2437
+ "if": {
2438
+ "required": [
2439
+ "content"
2440
+ ]
2441
+ },
2442
+ "then": {
2443
+ "required": [
2444
+ "encoding",
2445
+ "mediaType"
2446
+ ]
2447
+ }
2448
+ }
2449
+ ],
2450
+ "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`.",
2451
+ "$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.",
2452
+ "examples": [
2453
+ {
2454
+ "sourceName": "grype",
2455
+ "rel": "raw-source",
2456
+ "mediaType": "application/json",
2457
+ "encoding": "utf-8",
2458
+ "content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
2459
+ "checksum": {
2460
+ "algorithm": "sha256",
2461
+ "value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
2462
+ }
2463
+ },
2464
+ {
2465
+ "sourceName": "openscap",
2466
+ "rel": "raw-source",
2467
+ "mediaType": "application/xml",
2468
+ "encoding": "utf-8",
2469
+ "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>",
2470
+ "checksum": {
2471
+ "algorithm": "sha256",
2472
+ "value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
2473
+ }
2474
+ },
2475
+ {
2476
+ "sourceName": "prisma",
2477
+ "rel": "raw-source",
2478
+ "mediaType": "text/csv",
2479
+ "encoding": "utf-8",
2480
+ "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",
2481
+ "checksum": {
2482
+ "algorithm": "sha256",
2483
+ "value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
2484
+ }
2485
+ },
2486
+ {
2487
+ "sourceName": "fortify",
2488
+ "rel": "raw-source",
2489
+ "mediaType": "application/zip",
2490
+ "encoding": "base64",
2491
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
2492
+ "checksum": {
2493
+ "algorithm": "sha256",
2494
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
2495
+ }
2496
+ },
2497
+ {
2498
+ "sourceName": "nessus",
2499
+ "rel": "raw-source",
2500
+ "href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
2501
+ "mediaType": "application/xml",
2502
+ "checksum": {
2503
+ "algorithm": "sha256",
2504
+ "value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
2505
+ }
2506
+ }
2507
+ ]
2508
+ },
2509
+ "Extensions": {
2510
+ "type": "object",
2511
+ "additionalProperties": false,
2512
+ "properties": {
2513
+ "passthrough": {
2514
+ "type": "object",
2515
+ "additionalProperties": true,
2516
+ "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.",
2517
+ "examples": [
2518
+ {
2519
+ "auxiliary_data": [
2520
+ {
2521
+ "name": "Scoutsuite",
2522
+ "data": {
2523
+ "last_run": {
2524
+ "ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
2525
+ }
2526
+ }
2527
+ }
2528
+ ]
2529
+ },
2530
+ {
2531
+ "audit": {
2532
+ "runId": "r-123"
2533
+ }
2534
+ }
2535
+ ],
2536
+ "$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."
2537
+ },
2538
+ "rawSourceArtifacts": {
2539
+ "type": "array",
2540
+ "items": {
2541
+ "$ref": "#/$defs/Raw_Source_Artifact"
2542
+ },
2543
+ "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."
2544
+ }
2545
+ },
2546
+ "title": "Extensions",
2547
+ "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.",
2548
+ "$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.",
2549
+ "examples": [
2550
+ {
2551
+ "passthrough": {
2552
+ "auxiliary_data": [
2553
+ {
2554
+ "name": "Grype",
2555
+ "data": {
2556
+ "descriptor": {
2557
+ "name": "grype",
2558
+ "version": "0.74.0"
2559
+ }
2560
+ }
2561
+ }
2562
+ ]
2563
+ },
2564
+ "rawSourceArtifacts": [
2565
+ {
2566
+ "sourceName": "grype",
2567
+ "rel": "raw-source",
2568
+ "mediaType": "application/json",
2569
+ "encoding": "utf-8",
2570
+ "content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
2571
+ "checksum": {
2572
+ "algorithm": "sha256",
2573
+ "value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
2574
+ }
2575
+ }
2576
+ ]
2577
+ },
2578
+ {
2579
+ "rawSourceArtifacts": [
2580
+ {
2581
+ "sourceName": "fortify",
2582
+ "rel": "raw-source",
2583
+ "mediaType": "application/zip",
2584
+ "encoding": "base64",
2585
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
2586
+ "checksum": {
2587
+ "algorithm": "sha256",
2588
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
2589
+ }
2590
+ }
2591
+ ]
2592
+ }
2593
+ ]
2594
+ },
2096
2595
  "Status_Override": {
2097
2596
  "type": "object",
2098
2597
  "unevaluatedProperties": false,
@@ -2119,20 +2618,20 @@
2119
2618
  "externalReferences": {
2120
2619
  "type": "array",
2121
2620
  "items": {
2122
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
2621
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
2123
2622
  },
2124
2623
  "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."
2125
2624
  },
2126
2625
  "type": {
2127
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Override_Type",
2626
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
2128
2627
  "description": "The type of override applied to this requirement."
2129
2628
  },
2130
2629
  "status": {
2131
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
2630
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
2132
2631
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
2133
2632
  },
2134
2633
  "impact": {
2135
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Impact_Override",
2634
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
2136
2635
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
2137
2636
  },
2138
2637
  "reason": {
@@ -2140,7 +2639,7 @@
2140
2639
  "description": "Explanation for why this override was applied."
2141
2640
  },
2142
2641
  "appliedBy": {
2143
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
2642
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
2144
2643
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
2145
2644
  },
2146
2645
  "appliedAt": {
@@ -2154,27 +2653,27 @@
2154
2653
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
2155
2654
  },
2156
2655
  "signature": {
2157
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
2656
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
2158
2657
  "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."
2159
2658
  },
2160
2659
  "evidence": {
2161
2660
  "type": "array",
2162
2661
  "items": {
2163
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
2662
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
2164
2663
  },
2165
2664
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
2166
2665
  },
2167
2666
  "previousChecksum": {
2168
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
2667
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
2169
2668
  "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."
2170
2669
  },
2171
2670
  "cvss": {
2172
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
2671
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
2173
2672
  "$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.",
2174
2673
  "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."
2175
2674
  },
2176
2675
  "justification": {
2177
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Justification",
2676
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
2178
2677
  "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."
2179
2678
  }
2180
2679
  },
@@ -2310,7 +2809,7 @@
2310
2809
  "description": "Detailed explanation of the plan, including what actions will be taken."
2311
2810
  },
2312
2811
  "appliedBy": {
2313
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
2812
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
2314
2813
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
2315
2814
  },
2316
2815
  "appliedAt": {
@@ -2326,23 +2825,23 @@
2326
2825
  "milestones": {
2327
2826
  "type": "array",
2328
2827
  "items": {
2329
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
2828
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
2330
2829
  },
2331
2830
  "description": "Optional array of milestones tracking progress toward completion."
2332
2831
  },
2333
2832
  "signature": {
2334
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
2833
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
2335
2834
  "description": "Optional digital signature for enhanced trust and non-repudiation."
2336
2835
  },
2337
2836
  "evidence": {
2338
2837
  "type": "array",
2339
2838
  "items": {
2340
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
2839
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
2341
2840
  },
2342
2841
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
2343
2842
  },
2344
2843
  "previousChecksum": {
2345
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
2844
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
2346
2845
  "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."
2347
2846
  }
2348
2847
  },
@@ -2485,17 +2984,9 @@
2485
2984
  "Integrity": {
2486
2985
  "type": "object",
2487
2986
  "unevaluatedProperties": false,
2488
- "dependentRequired": {
2489
- "algorithm": [
2490
- "checksum"
2491
- ],
2492
- "checksum": [
2493
- "algorithm"
2494
- ]
2495
- },
2496
2987
  "properties": {
2497
2988
  "algorithm": {
2498
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Hash_Algorithm",
2989
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
2499
2990
  "description": "The hash algorithm used for the checksum."
2500
2991
  },
2501
2992
  "checksum": {
@@ -2524,13 +3015,39 @@
2524
3015
  }
2525
3016
  ],
2526
3017
  "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.",
2527
- "title": "Integrity"
3018
+ "title": "Integrity",
3019
+ "allOf": [
3020
+ {
3021
+ "if": {
3022
+ "required": [
3023
+ "algorithm"
3024
+ ]
3025
+ },
3026
+ "then": {
3027
+ "required": [
3028
+ "checksum"
3029
+ ]
3030
+ }
3031
+ },
3032
+ {
3033
+ "if": {
3034
+ "required": [
3035
+ "checksum"
3036
+ ]
3037
+ },
3038
+ "then": {
3039
+ "required": [
3040
+ "algorithm"
3041
+ ]
3042
+ }
3043
+ }
3044
+ ]
2528
3045
  }
2529
3046
  }
2530
3047
  },
2531
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0": {
3048
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
2532
3049
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2533
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0",
3050
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
2534
3051
  "title": "HDF Amendment Primitives",
2535
3052
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
2536
3053
  "$defs": {
@@ -2641,7 +3158,7 @@
2641
3158
  "externalReferences": {
2642
3159
  "type": "array",
2643
3160
  "items": {
2644
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
3161
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
2645
3162
  },
2646
3163
  "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."
2647
3164
  },
@@ -2659,7 +3176,7 @@
2659
3176
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
2660
3177
  },
2661
3178
  "status": {
2662
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
3179
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
2663
3180
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
2664
3181
  },
2665
3182
  "impact": {
@@ -2671,7 +3188,7 @@
2671
3188
  "description": "Justification for this amendment."
2672
3189
  },
2673
3190
  "appliedBy": {
2674
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
3191
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
2675
3192
  "description": "Identity of who applied this amendment."
2676
3193
  },
2677
3194
  "appliedAt": {
@@ -2687,20 +3204,20 @@
2687
3204
  "evidence": {
2688
3205
  "type": "array",
2689
3206
  "items": {
2690
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
3207
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
2691
3208
  },
2692
3209
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
2693
3210
  },
2694
3211
  "signature": {
2695
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
3212
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
2696
3213
  "description": "Digital signature for non-repudiation."
2697
3214
  },
2698
3215
  "previousChecksum": {
2699
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
3216
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
2700
3217
  "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."
2701
3218
  },
2702
3219
  "cvss": {
2703
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
3220
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
2704
3221
  "$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.",
2705
3222
  "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."
2706
3223
  },
@@ -2711,7 +3228,7 @@
2711
3228
  "milestones": {
2712
3229
  "type": "array",
2713
3230
  "items": {
2714
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
3231
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
2715
3232
  },
2716
3233
  "description": "Remediation milestones (primarily for POA&M type amendments)."
2717
3234
  },
@@ -2728,7 +3245,7 @@
2728
3245
  "affectedPackages": {
2729
3246
  "type": "array",
2730
3247
  "items": {
2731
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0#/$defs/Affected_Package"
3248
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
2732
3249
  },
2733
3250
  "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)."
2734
3251
  }
@@ -2861,9 +3378,9 @@
2861
3378
  }
2862
3379
  }
2863
3380
  },
2864
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0": {
3381
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
2865
3382
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2866
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0",
3383
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
2867
3384
  "title": "HDF Result Primitives",
2868
3385
  "description": "Types for representing assessment results and statuses.",
2869
3386
  "$defs": {
@@ -2928,6 +3445,10 @@
2928
3445
  "type": "string"
2929
3446
  },
2930
3447
  "description": "The stacktrace/backtrace of the exception if one occurred."
3448
+ },
3449
+ "rawSourceRecord": {
3450
+ "$ref": "#/$defs/Raw_Source_Record",
3451
+ "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."
2931
3452
  }
2932
3453
  },
2933
3454
  "examples": [
@@ -2958,6 +3479,64 @@
2958
3479
  "description": "A test within a requirement and its results and findings such as how long it took to run.",
2959
3480
  "title": "Requirement Result"
2960
3481
  },
3482
+ "Raw_Source_Record": {
3483
+ "type": "object",
3484
+ "additionalProperties": false,
3485
+ "required": [
3486
+ "content",
3487
+ "encoding",
3488
+ "mediaType"
3489
+ ],
3490
+ "properties": {
3491
+ "content": {
3492
+ "type": "string",
3493
+ "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."
3494
+ },
3495
+ "encoding": {
3496
+ "type": "string",
3497
+ "enum": [
3498
+ "utf-8",
3499
+ "base64"
3500
+ ],
3501
+ "description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
3502
+ },
3503
+ "mediaType": {
3504
+ "type": "string",
3505
+ "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."
3506
+ },
3507
+ "pointer": {
3508
+ "type": "string",
3509
+ "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."
3510
+ }
3511
+ },
3512
+ "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.",
3513
+ "$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.",
3514
+ "examples": [
3515
+ {
3516
+ "content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
3517
+ "encoding": "utf-8",
3518
+ "mediaType": "application/json",
3519
+ "pointer": "/matches/3"
3520
+ },
3521
+ {
3522
+ "content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
3523
+ "encoding": "utf-8",
3524
+ "mediaType": "application/xml",
3525
+ "pointer": "/Benchmark/TestResult/rule-result[4]"
3526
+ },
3527
+ {
3528
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
3529
+ "encoding": "base64",
3530
+ "mediaType": "application/octet-stream"
3531
+ },
3532
+ {
3533
+ "content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
3534
+ "encoding": "utf-8",
3535
+ "mediaType": "text/csv"
3536
+ }
3537
+ ],
3538
+ "title": "Raw Source Record"
3539
+ },
2961
3540
  "Requirement_Description": {
2962
3541
  "type": "object",
2963
3542
  "unevaluatedProperties": false,
@@ -2994,9 +3573,9 @@
2994
3573
  }
2995
3574
  }
2996
3575
  },
2997
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0": {
3576
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
2998
3577
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2999
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0",
3578
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
3000
3579
  "title": "HDF CVSS Primitives",
3001
3580
  "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).",
3002
3581
  "$defs": {
@@ -3193,9 +3772,9 @@
3193
3772
  }
3194
3773
  }
3195
3774
  },
3196
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0": {
3775
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
3197
3776
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3198
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0",
3777
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
3199
3778
  "title": "HDF Affected Package Primitives",
3200
3779
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
3201
3780
  "$defs": {
@@ -3303,9 +3882,9 @@
3303
3882
  }
3304
3883
  }
3305
3884
  },
3306
- "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0": {
3885
+ "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0": {
3307
3886
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3308
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0",
3887
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0",
3309
3888
  "title": "HDF Component Primitives",
3310
3889
  "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).",
3311
3890
  "$defs": {
@@ -3351,7 +3930,7 @@
3351
3930
  "description": "Description of this component's role or purpose."
3352
3931
  },
3353
3932
  "owner": {
3354
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
3933
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
3355
3934
  "description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
3356
3935
  },
3357
3936
  "externalIds": {
@@ -3371,14 +3950,14 @@
3371
3950
  "boms": {
3372
3951
  "type": "array",
3373
3952
  "items": {
3374
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0#/$defs/Bom"
3953
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
3375
3954
  },
3376
3955
  "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."
3377
3956
  },
3378
3957
  "integrity": {
3379
3958
  "type": "array",
3380
3959
  "items": {
3381
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
3960
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
3382
3961
  },
3383
3962
  "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."
3384
3963
  },
@@ -3392,12 +3971,12 @@
3392
3971
  "inputOverrides": {
3393
3972
  "type": "array",
3394
3973
  "items": {
3395
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Input_Override"
3974
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Input_Override"
3396
3975
  },
3397
3976
  "description": "System-specific overrides for baseline input values."
3398
3977
  },
3399
3978
  "targetSelector": {
3400
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Target_Selector",
3979
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Target_Selector",
3401
3980
  "description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
3402
3981
  }
3403
3982
  },
@@ -3680,7 +4259,7 @@
3680
4259
  "const": "cloudAccount"
3681
4260
  },
3682
4261
  "provider": {
3683
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
4262
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
3684
4263
  "description": "Cloud provider."
3685
4264
  },
3686
4265
  "accountId": {
@@ -3719,7 +4298,7 @@
3719
4298
  "const": "cloudResource"
3720
4299
  },
3721
4300
  "provider": {
3722
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
4301
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
3723
4302
  "description": "Cloud provider."
3724
4303
  },
3725
4304
  "resourceType": {
@@ -4018,9 +4597,9 @@
4018
4597
  }
4019
4598
  }
4020
4599
  },
4021
- "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0": {
4600
+ "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0": {
4022
4601
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4023
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0",
4602
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0",
4024
4603
  "title": "HDF BOM Primitives",
4025
4604
  "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.",
4026
4605
  "$defs": {
@@ -4076,7 +4655,7 @@
4076
4655
  "hashes": {
4077
4656
  "type": "array",
4078
4657
  "items": {
4079
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
4658
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
4080
4659
  },
4081
4660
  "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."
4082
4661
  },
@@ -4488,9 +5067,9 @@
4488
5067
  }
4489
5068
  }
4490
5069
  },
4491
- "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0": {
5070
+ "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0": {
4492
5071
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4493
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0",
5072
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0",
4494
5073
  "title": "HDF System Primitives",
4495
5074
  "description": "Types for describing system architecture, authorization boundaries, and components.",
4496
5075
  "$defs": {
@@ -4541,7 +5120,7 @@
4541
5120
  "description": "Rationale for why this override is needed."
4542
5121
  },
4543
5122
  "approvedBy": {
4544
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
5123
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
4545
5124
  "description": "Identity of the person or system that approved this override."
4546
5125
  }
4547
5126
  },
@@ -4623,9 +5202,9 @@
4623
5202
  }
4624
5203
  }
4625
5204
  },
4626
- "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0": {
5205
+ "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0": {
4627
5206
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4628
- "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.7.0",
5207
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0",
4629
5208
  "type": "object",
4630
5209
  "unevaluatedProperties": false,
4631
5210
  "required": [
@@ -4635,7 +5214,7 @@
4635
5214
  "externalReferences": {
4636
5215
  "type": "array",
4637
5216
  "items": {
4638
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
5217
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
4639
5218
  },
4640
5219
  "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."
4641
5220
  },
@@ -4652,7 +5231,7 @@
4652
5231
  "components": {
4653
5232
  "type": "array",
4654
5233
  "items": {
4655
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0#/$defs/Component"
5234
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
4656
5235
  },
4657
5236
  "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."
4658
5237
  },
@@ -4664,23 +5243,23 @@
4664
5243
  "description": "Information on the baselines that were evaluated, including findings."
4665
5244
  },
4666
5245
  "statistics": {
4667
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.7.0#/$defs/Statistics",
5246
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0#/$defs/Statistics",
4668
5247
  "description": "Statistics for the assessment run, including duration and result counts."
4669
5248
  },
4670
5249
  "generator": {
4671
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Generator",
5250
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
4672
5251
  "description": "Information about the tool that generated this file."
4673
5252
  },
4674
5253
  "tool": {
4675
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Tool",
5254
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Tool",
4676
5255
  "description": "The security tool that produced the assessment data in this file."
4677
5256
  },
4678
5257
  "integrity": {
4679
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
5258
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
4680
5259
  "description": "Cryptographic integrity information for verifying this file."
4681
5260
  },
4682
5261
  "preAmendmentChecksum": {
4683
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
5262
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
4684
5263
  "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.",
4685
5264
  "$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.",
4686
5265
  "examples": [
@@ -4691,11 +5270,11 @@
4691
5270
  ]
4692
5271
  },
4693
5272
  "runner": {
4694
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.7.0#/$defs/Runner",
5273
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0#/$defs/Runner",
4695
5274
  "description": "Information about the test execution environment where the security tool was run. Distinct from targets (what is being tested)."
4696
5275
  },
4697
5276
  "remediation": {
4698
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Remediation",
5277
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Remediation",
4699
5278
  "description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for fixing failing requirements found in this assessment."
4700
5279
  },
4701
5280
  "systemRef": {
@@ -4709,13 +5288,12 @@
4709
5288
  "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."
4710
5289
  },
4711
5290
  "derivation": {
4712
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0#/$defs/Derivation",
5291
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Derivation",
4713
5292
  "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."
4714
5293
  },
4715
5294
  "extensions": {
4716
- "type": "object",
4717
- "additionalProperties": true,
4718
- "description": "Reserved for tool-specific data not defined in the HDF standard. Use this to preserve original tool output, auxiliary data, or custom metadata."
5295
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
5296
+ "description": "Producer data outside the HDF model, and the pre-converted source artifact(s) these results were converted from."
4719
5297
  }
4720
5298
  },
4721
5299
  "examples": [
@@ -4807,14 +5385,14 @@
4807
5385
  ],
4808
5386
  "allOf": [
4809
5387
  {
4810
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Baseline_Metadata"
5388
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Baseline_Metadata"
4811
5389
  }
4812
5390
  ],
4813
5391
  "properties": {
4814
5392
  "depends": {
4815
5393
  "type": "array",
4816
5394
  "items": {
4817
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Dependency"
5395
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Dependency"
4818
5396
  },
4819
5397
  "description": "The set of dependencies this baseline depends on."
4820
5398
  },
@@ -4827,15 +5405,15 @@
4827
5405
  "description": "The description - should be more detailed than the summary."
4828
5406
  },
4829
5407
  "integrity": {
4830
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
5408
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
4831
5409
  "description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
4832
5410
  },
4833
5411
  "originalChecksum": {
4834
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
5412
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
4835
5413
  "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."
4836
5414
  },
4837
5415
  "resultsChecksum": {
4838
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
5416
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
4839
5417
  "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."
4840
5418
  },
4841
5419
  "statusMessage": {
@@ -4853,21 +5431,20 @@
4853
5431
  "groups": {
4854
5432
  "type": "array",
4855
5433
  "items": {
4856
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Requirement_Group"
5434
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Group"
4857
5435
  },
4858
5436
  "description": "A set of descriptions for the requirement groups."
4859
5437
  },
4860
5438
  "inputs": {
4861
5439
  "type": "array",
4862
5440
  "items": {
4863
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.7.0#/$defs/Input"
5441
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0#/$defs/Input"
4864
5442
  },
4865
5443
  "description": "Typed inputs used to parameterize this baseline at execution time. See the Input primitive for the full schema."
4866
5444
  },
4867
5445
  "extensions": {
4868
- "type": "object",
4869
- "additionalProperties": true,
4870
- "description": "Reserved for tool-specific baseline metadata not defined in the HDF standard."
5446
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
5447
+ "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."
4871
5448
  }
4872
5449
  },
4873
5450
  "description": "Information on a baseline that was evaluated, including any findings.",
@@ -4885,7 +5462,7 @@
4885
5462
  ],
4886
5463
  "allOf": [
4887
5464
  {
4888
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Requirement_Core"
5465
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Core"
4889
5466
  }
4890
5467
  ],
4891
5468
  "properties": {
@@ -4893,7 +5470,7 @@
4893
5470
  "type": "array",
4894
5471
  "minItems": 1,
4895
5472
  "items": {
4896
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Requirement_Description"
5473
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Description"
4897
5474
  },
4898
5475
  "contains": {
4899
5476
  "type": "object",
@@ -4909,37 +5486,37 @@
4909
5486
  "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'."
4910
5487
  },
4911
5488
  "severity": {
4912
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Severity",
5489
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Severity",
4913
5490
  "description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
4914
5491
  },
4915
5492
  "sourceLocation": {
4916
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Source_Location",
5493
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Source_Location",
4917
5494
  "description": "The explicit location of the requirement within the source code."
4918
5495
  },
4919
5496
  "results": {
4920
5497
  "type": "array",
4921
5498
  "minItems": 1,
4922
5499
  "items": {
4923
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Requirement_Result"
5500
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Result"
4924
5501
  },
4925
5502
  "description": "The set of all tests within the requirement and their results."
4926
5503
  },
4927
5504
  "statusOverrides": {
4928
5505
  "type": "array",
4929
5506
  "items": {
4930
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Status_Override"
5507
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Status_Override"
4931
5508
  },
4932
5509
  "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."
4933
5510
  },
4934
5511
  "poams": {
4935
5512
  "type": "array",
4936
5513
  "items": {
4937
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/POAM"
5514
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/POAM"
4938
5515
  },
4939
5516
  "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."
4940
5517
  },
4941
5518
  "effectiveStatus": {
4942
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
5519
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
4943
5520
  "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."
4944
5521
  },
4945
5522
  "effectiveImpact": {
@@ -4949,33 +5526,33 @@
4949
5526
  "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."
4950
5527
  },
4951
5528
  "disposition": {
4952
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Override_Type",
5529
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
4953
5530
  "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."
4954
5531
  },
4955
5532
  "effectiveChecksum": {
4956
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
5533
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
4957
5534
  "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)."
4958
5535
  },
4959
5536
  "evidence": {
4960
5537
  "type": "array",
4961
5538
  "items": {
4962
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
5539
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
4963
5540
  },
4964
5541
  "description": "Supporting evidence for this requirement's findings, such as screenshots, code samples, or log excerpts."
4965
5542
  },
4966
5543
  "cvss": {
4967
5544
  "type": "array",
4968
5545
  "items": {
4969
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss"
5546
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss"
4970
5547
  },
4971
5548
  "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."
4972
5549
  },
4973
5550
  "epss": {
4974
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.7.0#/$defs/Epss",
5551
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0#/$defs/Epss",
4975
5552
  "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."
4976
5553
  },
4977
5554
  "kev": {
4978
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.7.0#/$defs/Kev",
5555
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0#/$defs/Kev",
4979
5556
  "description": "CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and dueDate carry the federal patching deadline."
4980
5557
  },
4981
5558
  "cwe": {
@@ -4989,7 +5566,7 @@
4989
5566
  "affectedPackages": {
4990
5567
  "type": "array",
4991
5568
  "items": {
4992
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0#/$defs/Affected_Package"
5569
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
4993
5570
  },
4994
5571
  "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)."
4995
5572
  }
@@ -5278,9 +5855,9 @@
5278
5855
  }
5279
5856
  }
5280
5857
  },
5281
- "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.7.0": {
5858
+ "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0": {
5282
5859
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5283
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.7.0",
5860
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0",
5284
5861
  "title": "HDF Statistics Primitives",
5285
5862
  "description": "Statistics types for tracking assessment run metrics.",
5286
5863
  "$defs": {
@@ -5349,9 +5926,9 @@
5349
5926
  }
5350
5927
  }
5351
5928
  },
5352
- "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.7.0": {
5929
+ "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0": {
5353
5930
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5354
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.7.0",
5931
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0",
5355
5932
  "title": "HDF Runner Primitive",
5356
5933
  "description": "Information about the test execution environment where the security tool/scanner was executed.",
5357
5934
  "$defs": {
@@ -5395,7 +5972,7 @@
5395
5972
  "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."
5396
5973
  },
5397
5974
  "operator": {
5398
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
5975
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
5399
5976
  "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."
5400
5977
  }
5401
5978
  },
@@ -5444,9 +6021,9 @@
5444
6021
  }
5445
6022
  }
5446
6023
  },
5447
- "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0": {
6024
+ "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0": {
5448
6025
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5449
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.7.0",
6026
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0",
5450
6027
  "title": "HDF Change Event Primitives",
5451
6028
  "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.",
5452
6029
  "$defs": {
@@ -5500,7 +6077,7 @@
5500
6077
  "priorChecksum": {
5501
6078
  "oneOf": [
5502
6079
  {
5503
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
6080
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
5504
6081
  },
5505
6082
  {
5506
6083
  "type": "null"
@@ -5518,7 +6095,7 @@
5518
6095
  "systemRef": "apptier.hdf-system.json",
5519
6096
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
5520
6097
  "timestamp": "2026-07-22T14:03:11Z",
5521
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.7.0",
6098
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
5522
6099
  "priorChecksum": {
5523
6100
  "algorithm": "sha256",
5524
6101
  "value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
@@ -5572,7 +6149,7 @@
5572
6149
  ],
5573
6150
  "properties": {
5574
6151
  "effectiveStatus": {
5575
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
6152
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
5576
6153
  "description": "The resolved effective compliance status at this point in the chain."
5577
6154
  },
5578
6155
  "effectiveImpact": {
@@ -5621,7 +6198,7 @@
5621
6198
  "description": "URI to the seed snapshot document (relative path or absolute URL)."
5622
6199
  },
5623
6200
  "checksum": {
5624
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
6201
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
5625
6202
  "description": "Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by content, not just location."
5626
6203
  }
5627
6204
  },
@@ -5670,9 +6247,9 @@
5670
6247
  }
5671
6248
  }
5672
6249
  },
5673
- "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.7.0": {
6250
+ "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0": {
5674
6251
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5675
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.7.0",
6252
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0",
5676
6253
  "title": "HDF Parameter Primitives",
5677
6254
  "description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
5678
6255
  "$defs": {
@@ -5803,9 +6380,9 @@
5803
6380
  }
5804
6381
  }
5805
6382
  },
5806
- "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.7.0": {
6383
+ "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0": {
5807
6384
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5808
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.7.0",
6385
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0",
5809
6386
  "title": "HDF EPSS Primitive",
5810
6387
  "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.",
5811
6388
  "$defs": {
@@ -5860,9 +6437,9 @@
5860
6437
  }
5861
6438
  }
5862
6439
  },
5863
- "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.7.0": {
6440
+ "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0": {
5864
6441
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5865
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.7.0",
6442
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0",
5866
6443
  "title": "HDF Kev Primitives",
5867
6444
  "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.",
5868
6445
  "$defs": {