@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,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.7.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.8.0",
4
4
  "title": "HDF System",
5
5
  "description": "Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP system-characteristics and FedRAMP system inventory.",
6
6
  "type": "object",
@@ -13,7 +13,7 @@
13
13
  "externalReferences": {
14
14
  "type": "array",
15
15
  "items": {
16
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
16
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
17
17
  },
18
18
  "description": "Optional references to external artifacts describing this system's threat environment or context (CTI/STIX, BOMs, advisories, or any URI-addressable artifact). Inert context; see External_Reference."
19
19
  },
@@ -23,7 +23,7 @@
23
23
  "description": "Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of file location. Optional in casual use, expected in production documents."
24
24
  },
25
25
  "owner": {
26
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
26
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
27
27
  "description": "Team or individual responsible for this system's authorization and compliance. Maps to OSCAL responsible-party with role 'system-owner'."
28
28
  },
29
29
  "name": {
@@ -44,7 +44,7 @@
44
44
  "description": "Description of the system's purpose and mission."
45
45
  },
46
46
  "authorizationStatus": {
47
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Authorization_Status",
47
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Authorization_Status",
48
48
  "description": "Current Authorization to Operate (ATO) status."
49
49
  },
50
50
  "authorizationDate": {
@@ -53,7 +53,7 @@
53
53
  "description": "Date the current authorization status was granted. ISO 8601 format."
54
54
  },
55
55
  "categorizationLevel": {
56
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Categorization_Level",
56
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Categorization_Level",
57
57
  "description": "FIPS 199 security categorization (impact level)."
58
58
  },
59
59
  "boundaryDescription": {
@@ -64,28 +64,28 @@
64
64
  "type": "array",
65
65
  "minItems": 1,
66
66
  "items": {
67
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0#/$defs/Component"
67
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
68
68
  },
69
69
  "description": "System components within the authorization boundary. Uses the full polymorphic Component type with stable identity (componentId), external references, and generalized BOM attachment (boms[])."
70
70
  },
71
71
  "controlDesignations": {
72
72
  "type": "array",
73
73
  "items": {
74
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Control_Designation"
74
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Control_Designation"
75
75
  },
76
76
  "description": "Declares which controls are common, hybrid, or system-specific, and which component provides them. Maps to NIST SP 800-53 control designations and OSCAL leveraged-authorizations."
77
77
  },
78
78
  "dataFlows": {
79
79
  "type": "array",
80
80
  "items": {
81
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.7.0#/$defs/Data_Flow"
81
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.8.0#/$defs/Data_Flow"
82
82
  },
83
83
  "description": "Inter-component data flows describing how components communicate. Supports local, cross-system, and external flows. Replaces the interconnections[] field."
84
84
  },
85
85
  "boms": {
86
86
  "type": "array",
87
87
  "items": {
88
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0#/$defs/Bom"
88
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
89
89
  },
90
90
  "description": "System-scoped Bills of Materials whose subject is the authorization boundary rather than a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM). Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See primitives/bom.schema.json."
91
91
  },
@@ -97,7 +97,7 @@
97
97
  "description": "Optional key-value labels for grouping and querying systems."
98
98
  },
99
99
  "integrity": {
100
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
100
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
101
101
  "description": "Cryptographic integrity information for verifying this system document has not been tampered with."
102
102
  },
103
103
  "version": {
@@ -105,8 +105,12 @@
105
105
  "description": "Version of this system document."
106
106
  },
107
107
  "generator": {
108
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Generator",
108
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
109
109
  "description": "Information about the tool that generated this system document."
110
+ },
111
+ "extensions": {
112
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
113
+ "description": "Producer data outside the HDF model, and the pre-converted source artifact(s) this system document was converted from."
110
114
  }
111
115
  },
112
116
  "examples": [
@@ -158,16 +162,16 @@
158
162
  }
159
163
  ],
160
164
  "$defs": {
161
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0": {
165
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
162
166
  "$schema": "https://json-schema.org/draft/2020-12/schema",
163
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0",
167
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
164
168
  "title": "HDF Common Primitives",
165
169
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
166
170
  "$defs": {
167
171
  "External_Reference": {
168
172
  "type": "object",
169
173
  "title": "External Reference",
170
- "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.",
174
+ "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.",
171
175
  "required": [
172
176
  "sourceName"
173
177
  ],
@@ -186,6 +190,42 @@
186
190
  "required": [
187
191
  "description"
188
192
  ]
193
+ },
194
+ {
195
+ "required": [
196
+ "content"
197
+ ]
198
+ },
199
+ {
200
+ "required": [
201
+ "document"
202
+ ]
203
+ }
204
+ ],
205
+ "allOf": [
206
+ {
207
+ "if": {
208
+ "required": [
209
+ "content"
210
+ ]
211
+ },
212
+ "then": {
213
+ "required": [
214
+ "encoding"
215
+ ]
216
+ }
217
+ },
218
+ {
219
+ "if": {
220
+ "required": [
221
+ "encoding"
222
+ ]
223
+ },
224
+ "then": {
225
+ "required": [
226
+ "content"
227
+ ]
228
+ }
189
229
  }
190
230
  ],
191
231
  "properties": {
@@ -201,7 +241,7 @@
201
241
  "href": {
202
242
  "type": "string",
203
243
  "format": "uri-reference",
204
- "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`."
244
+ "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."
205
245
  },
206
246
  "description": {
207
247
  "type": "string",
@@ -213,11 +253,11 @@
213
253
  },
214
254
  "mediaType": {
215
255
  "type": "string",
216
- "description": "IANA media type of the referenced artifact when retrievable (RFC 6838), e.g., 'application/json'. Meaningful only with `href`."
256
+ "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`."
217
257
  },
218
258
  "checksum": {
219
259
  "$ref": "#/$defs/Checksum",
220
- "description": "Integrity hash of the referenced artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Meaningful only with a retrievable `href`."
260
+ "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."
221
261
  },
222
262
  "addedBy": {
223
263
  "$ref": "#/$defs/Identity",
@@ -236,11 +276,24 @@
236
276
  "document": {
237
277
  "type": "object",
238
278
  "additionalProperties": true,
239
- "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)."
279
+ "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)."
280
+ },
281
+ "content": {
282
+ "type": "string",
283
+ "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."
284
+ },
285
+ "encoding": {
286
+ "type": "string",
287
+ "title": "External Reference Encoding",
288
+ "enum": [
289
+ "utf-8",
290
+ "base64"
291
+ ],
292
+ "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."
240
293
  }
241
294
  },
242
295
  "unevaluatedProperties": false,
243
- "$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.",
296
+ "$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.",
244
297
  "examples": [
245
298
  {
246
299
  "sourceName": "cve",
@@ -286,6 +339,28 @@
286
339
  }
287
340
  ]
288
341
  }
342
+ },
343
+ {
344
+ "sourceName": "openscap",
345
+ "rel": "raw-source",
346
+ "mediaType": "application/xml",
347
+ "encoding": "utf-8",
348
+ "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>",
349
+ "checksum": {
350
+ "algorithm": "sha256",
351
+ "value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
352
+ }
353
+ },
354
+ {
355
+ "sourceName": "fortify",
356
+ "rel": "raw-source",
357
+ "mediaType": "application/zip",
358
+ "encoding": "base64",
359
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
360
+ "checksum": {
361
+ "algorithm": "sha256",
362
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
363
+ }
289
364
  }
290
365
  ]
291
366
  },
@@ -297,7 +372,7 @@
297
372
  "sha512",
298
373
  "blake3"
299
374
  ],
300
- "description": "Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers container-image and other artifact digests that use it.",
375
+ "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.",
301
376
  "title": "Hash Algorithm"
302
377
  },
303
378
  "Requirement_Group": {
@@ -455,7 +530,33 @@
455
530
  }
456
531
  ],
457
532
  "description": "A reference to an external document.",
458
- "title": "Reference"
533
+ "title": "Reference",
534
+ "unevaluatedProperties": false,
535
+ "$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.",
536
+ "examples": [
537
+ {
538
+ "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
539
+ },
540
+ {
541
+ "ref": "NIST SP 800-53 Rev 5, AC-6"
542
+ },
543
+ {
544
+ "ref": "CIS Benchmark for RHEL 9, 1.1.1",
545
+ "url": "https://www.cisecurity.org/benchmark/red_hat_linux"
546
+ },
547
+ {
548
+ "ref": [
549
+ {
550
+ "identifier": "2921",
551
+ "publisher": "DISA",
552
+ "type": "DPMS Target"
553
+ }
554
+ ]
555
+ },
556
+ {
557
+ "uri": "https://attack.mitre.org/techniques/T1059/"
558
+ }
559
+ ]
459
560
  },
460
561
  "Source_Location": {
461
562
  "type": "object",
@@ -1269,9 +1370,9 @@
1269
1370
  }
1270
1371
  }
1271
1372
  },
1272
- "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0": {
1373
+ "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0": {
1273
1374
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1274
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0",
1375
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0",
1275
1376
  "title": "HDF System Primitives",
1276
1377
  "description": "Types for describing system architecture, authorization boundaries, and components.",
1277
1378
  "$defs": {
@@ -1322,7 +1423,7 @@
1322
1423
  "description": "Rationale for why this override is needed."
1323
1424
  },
1324
1425
  "approvedBy": {
1325
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
1426
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
1326
1427
  "description": "Identity of the person or system that approved this override."
1327
1428
  }
1328
1429
  },
@@ -1404,9 +1505,9 @@
1404
1505
  }
1405
1506
  }
1406
1507
  },
1407
- "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0": {
1508
+ "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0": {
1408
1509
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1409
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0",
1510
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0",
1410
1511
  "title": "HDF Component Primitives",
1411
1512
  "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).",
1412
1513
  "$defs": {
@@ -1452,7 +1553,7 @@
1452
1553
  "description": "Description of this component's role or purpose."
1453
1554
  },
1454
1555
  "owner": {
1455
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
1556
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
1456
1557
  "description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
1457
1558
  },
1458
1559
  "externalIds": {
@@ -1472,14 +1573,14 @@
1472
1573
  "boms": {
1473
1574
  "type": "array",
1474
1575
  "items": {
1475
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0#/$defs/Bom"
1576
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
1476
1577
  },
1477
1578
  "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."
1478
1579
  },
1479
1580
  "integrity": {
1480
1581
  "type": "array",
1481
1582
  "items": {
1482
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
1583
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
1483
1584
  },
1484
1585
  "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."
1485
1586
  },
@@ -1493,12 +1594,12 @@
1493
1594
  "inputOverrides": {
1494
1595
  "type": "array",
1495
1596
  "items": {
1496
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Input_Override"
1597
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Input_Override"
1497
1598
  },
1498
1599
  "description": "System-specific overrides for baseline input values."
1499
1600
  },
1500
1601
  "targetSelector": {
1501
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Target_Selector",
1602
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Target_Selector",
1502
1603
  "description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
1503
1604
  }
1504
1605
  },
@@ -1781,7 +1882,7 @@
1781
1882
  "const": "cloudAccount"
1782
1883
  },
1783
1884
  "provider": {
1784
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
1885
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
1785
1886
  "description": "Cloud provider."
1786
1887
  },
1787
1888
  "accountId": {
@@ -1820,7 +1921,7 @@
1820
1921
  "const": "cloudResource"
1821
1922
  },
1822
1923
  "provider": {
1823
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
1924
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
1824
1925
  "description": "Cloud provider."
1825
1926
  },
1826
1927
  "resourceType": {
@@ -2119,9 +2220,9 @@
2119
2220
  }
2120
2221
  }
2121
2222
  },
2122
- "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0": {
2223
+ "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0": {
2123
2224
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2124
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0",
2225
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0",
2125
2226
  "title": "HDF BOM Primitives",
2126
2227
  "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.",
2127
2228
  "$defs": {
@@ -2177,7 +2278,7 @@
2177
2278
  "hashes": {
2178
2279
  "type": "array",
2179
2280
  "items": {
2180
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
2281
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
2181
2282
  },
2182
2283
  "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."
2183
2284
  },
@@ -2589,9 +2690,9 @@
2589
2690
  }
2590
2691
  }
2591
2692
  },
2592
- "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.7.0": {
2693
+ "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.8.0": {
2593
2694
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2594
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.7.0",
2695
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.8.0",
2595
2696
  "title": "HDF Data Flow Primitives",
2596
2697
  "description": "Types for describing data flows between components within a system and across system boundaries. Data flows model network connections, API calls, database queries, and other inter-component communication.",
2597
2698
  "$defs": {
@@ -2748,12 +2849,183 @@
2748
2849
  }
2749
2850
  }
2750
2851
  },
2751
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0": {
2852
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
2752
2853
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2753
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0",
2854
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
2754
2855
  "title": "HDF Extension Primitives",
2755
- "description": "Extension types for waivers, attestations, generators, and integrity.",
2856
+ "description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
2756
2857
  "$defs": {
2858
+ "Raw_Source_Artifact": {
2859
+ "allOf": [
2860
+ {
2861
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
2862
+ },
2863
+ {
2864
+ "not": {
2865
+ "required": [
2866
+ "document"
2867
+ ]
2868
+ }
2869
+ },
2870
+ {
2871
+ "if": {
2872
+ "required": [
2873
+ "content"
2874
+ ]
2875
+ },
2876
+ "then": {
2877
+ "required": [
2878
+ "encoding",
2879
+ "mediaType"
2880
+ ]
2881
+ }
2882
+ }
2883
+ ],
2884
+ "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`.",
2885
+ "$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.",
2886
+ "examples": [
2887
+ {
2888
+ "sourceName": "grype",
2889
+ "rel": "raw-source",
2890
+ "mediaType": "application/json",
2891
+ "encoding": "utf-8",
2892
+ "content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
2893
+ "checksum": {
2894
+ "algorithm": "sha256",
2895
+ "value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
2896
+ }
2897
+ },
2898
+ {
2899
+ "sourceName": "openscap",
2900
+ "rel": "raw-source",
2901
+ "mediaType": "application/xml",
2902
+ "encoding": "utf-8",
2903
+ "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>",
2904
+ "checksum": {
2905
+ "algorithm": "sha256",
2906
+ "value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
2907
+ }
2908
+ },
2909
+ {
2910
+ "sourceName": "prisma",
2911
+ "rel": "raw-source",
2912
+ "mediaType": "text/csv",
2913
+ "encoding": "utf-8",
2914
+ "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",
2915
+ "checksum": {
2916
+ "algorithm": "sha256",
2917
+ "value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
2918
+ }
2919
+ },
2920
+ {
2921
+ "sourceName": "fortify",
2922
+ "rel": "raw-source",
2923
+ "mediaType": "application/zip",
2924
+ "encoding": "base64",
2925
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
2926
+ "checksum": {
2927
+ "algorithm": "sha256",
2928
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
2929
+ }
2930
+ },
2931
+ {
2932
+ "sourceName": "nessus",
2933
+ "rel": "raw-source",
2934
+ "href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
2935
+ "mediaType": "application/xml",
2936
+ "checksum": {
2937
+ "algorithm": "sha256",
2938
+ "value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
2939
+ }
2940
+ }
2941
+ ]
2942
+ },
2943
+ "Extensions": {
2944
+ "type": "object",
2945
+ "additionalProperties": false,
2946
+ "properties": {
2947
+ "passthrough": {
2948
+ "type": "object",
2949
+ "additionalProperties": true,
2950
+ "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.",
2951
+ "examples": [
2952
+ {
2953
+ "auxiliary_data": [
2954
+ {
2955
+ "name": "Scoutsuite",
2956
+ "data": {
2957
+ "last_run": {
2958
+ "ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
2959
+ }
2960
+ }
2961
+ }
2962
+ ]
2963
+ },
2964
+ {
2965
+ "audit": {
2966
+ "runId": "r-123"
2967
+ }
2968
+ }
2969
+ ],
2970
+ "$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."
2971
+ },
2972
+ "rawSourceArtifacts": {
2973
+ "type": "array",
2974
+ "items": {
2975
+ "$ref": "#/$defs/Raw_Source_Artifact"
2976
+ },
2977
+ "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."
2978
+ }
2979
+ },
2980
+ "title": "Extensions",
2981
+ "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.",
2982
+ "$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.",
2983
+ "examples": [
2984
+ {
2985
+ "passthrough": {
2986
+ "auxiliary_data": [
2987
+ {
2988
+ "name": "Grype",
2989
+ "data": {
2990
+ "descriptor": {
2991
+ "name": "grype",
2992
+ "version": "0.74.0"
2993
+ }
2994
+ }
2995
+ }
2996
+ ]
2997
+ },
2998
+ "rawSourceArtifacts": [
2999
+ {
3000
+ "sourceName": "grype",
3001
+ "rel": "raw-source",
3002
+ "mediaType": "application/json",
3003
+ "encoding": "utf-8",
3004
+ "content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
3005
+ "checksum": {
3006
+ "algorithm": "sha256",
3007
+ "value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
3008
+ }
3009
+ }
3010
+ ]
3011
+ },
3012
+ {
3013
+ "rawSourceArtifacts": [
3014
+ {
3015
+ "sourceName": "fortify",
3016
+ "rel": "raw-source",
3017
+ "mediaType": "application/zip",
3018
+ "encoding": "base64",
3019
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
3020
+ "checksum": {
3021
+ "algorithm": "sha256",
3022
+ "value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
3023
+ }
3024
+ }
3025
+ ]
3026
+ }
3027
+ ]
3028
+ },
2757
3029
  "Status_Override": {
2758
3030
  "type": "object",
2759
3031
  "unevaluatedProperties": false,
@@ -2780,20 +3052,20 @@
2780
3052
  "externalReferences": {
2781
3053
  "type": "array",
2782
3054
  "items": {
2783
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
3055
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
2784
3056
  },
2785
3057
  "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."
2786
3058
  },
2787
3059
  "type": {
2788
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Override_Type",
3060
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
2789
3061
  "description": "The type of override applied to this requirement."
2790
3062
  },
2791
3063
  "status": {
2792
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
3064
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
2793
3065
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
2794
3066
  },
2795
3067
  "impact": {
2796
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Impact_Override",
3068
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
2797
3069
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
2798
3070
  },
2799
3071
  "reason": {
@@ -2801,7 +3073,7 @@
2801
3073
  "description": "Explanation for why this override was applied."
2802
3074
  },
2803
3075
  "appliedBy": {
2804
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
3076
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
2805
3077
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
2806
3078
  },
2807
3079
  "appliedAt": {
@@ -2815,27 +3087,27 @@
2815
3087
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
2816
3088
  },
2817
3089
  "signature": {
2818
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
3090
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
2819
3091
  "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."
2820
3092
  },
2821
3093
  "evidence": {
2822
3094
  "type": "array",
2823
3095
  "items": {
2824
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
3096
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
2825
3097
  },
2826
3098
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
2827
3099
  },
2828
3100
  "previousChecksum": {
2829
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
3101
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
2830
3102
  "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."
2831
3103
  },
2832
3104
  "cvss": {
2833
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
3105
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
2834
3106
  "$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.",
2835
3107
  "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."
2836
3108
  },
2837
3109
  "justification": {
2838
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Justification",
3110
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
2839
3111
  "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."
2840
3112
  }
2841
3113
  },
@@ -2971,7 +3243,7 @@
2971
3243
  "description": "Detailed explanation of the plan, including what actions will be taken."
2972
3244
  },
2973
3245
  "appliedBy": {
2974
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
3246
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
2975
3247
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
2976
3248
  },
2977
3249
  "appliedAt": {
@@ -2987,23 +3259,23 @@
2987
3259
  "milestones": {
2988
3260
  "type": "array",
2989
3261
  "items": {
2990
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
3262
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
2991
3263
  },
2992
3264
  "description": "Optional array of milestones tracking progress toward completion."
2993
3265
  },
2994
3266
  "signature": {
2995
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
3267
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
2996
3268
  "description": "Optional digital signature for enhanced trust and non-repudiation."
2997
3269
  },
2998
3270
  "evidence": {
2999
3271
  "type": "array",
3000
3272
  "items": {
3001
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
3273
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
3002
3274
  },
3003
3275
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
3004
3276
  },
3005
3277
  "previousChecksum": {
3006
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
3278
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
3007
3279
  "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."
3008
3280
  }
3009
3281
  },
@@ -3146,17 +3418,9 @@
3146
3418
  "Integrity": {
3147
3419
  "type": "object",
3148
3420
  "unevaluatedProperties": false,
3149
- "dependentRequired": {
3150
- "algorithm": [
3151
- "checksum"
3152
- ],
3153
- "checksum": [
3154
- "algorithm"
3155
- ]
3156
- },
3157
3421
  "properties": {
3158
3422
  "algorithm": {
3159
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Hash_Algorithm",
3423
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
3160
3424
  "description": "The hash algorithm used for the checksum."
3161
3425
  },
3162
3426
  "checksum": {
@@ -3185,13 +3449,39 @@
3185
3449
  }
3186
3450
  ],
3187
3451
  "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.",
3188
- "title": "Integrity"
3452
+ "title": "Integrity",
3453
+ "allOf": [
3454
+ {
3455
+ "if": {
3456
+ "required": [
3457
+ "algorithm"
3458
+ ]
3459
+ },
3460
+ "then": {
3461
+ "required": [
3462
+ "checksum"
3463
+ ]
3464
+ }
3465
+ },
3466
+ {
3467
+ "if": {
3468
+ "required": [
3469
+ "checksum"
3470
+ ]
3471
+ },
3472
+ "then": {
3473
+ "required": [
3474
+ "algorithm"
3475
+ ]
3476
+ }
3477
+ }
3478
+ ]
3189
3479
  }
3190
3480
  }
3191
3481
  },
3192
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0": {
3482
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
3193
3483
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3194
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0",
3484
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
3195
3485
  "title": "HDF Amendment Primitives",
3196
3486
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
3197
3487
  "$defs": {
@@ -3302,7 +3592,7 @@
3302
3592
  "externalReferences": {
3303
3593
  "type": "array",
3304
3594
  "items": {
3305
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
3595
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
3306
3596
  },
3307
3597
  "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."
3308
3598
  },
@@ -3320,7 +3610,7 @@
3320
3610
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
3321
3611
  },
3322
3612
  "status": {
3323
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
3613
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
3324
3614
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
3325
3615
  },
3326
3616
  "impact": {
@@ -3332,7 +3622,7 @@
3332
3622
  "description": "Justification for this amendment."
3333
3623
  },
3334
3624
  "appliedBy": {
3335
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
3625
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
3336
3626
  "description": "Identity of who applied this amendment."
3337
3627
  },
3338
3628
  "appliedAt": {
@@ -3348,20 +3638,20 @@
3348
3638
  "evidence": {
3349
3639
  "type": "array",
3350
3640
  "items": {
3351
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
3641
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
3352
3642
  },
3353
3643
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
3354
3644
  },
3355
3645
  "signature": {
3356
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
3646
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
3357
3647
  "description": "Digital signature for non-repudiation."
3358
3648
  },
3359
3649
  "previousChecksum": {
3360
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
3650
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
3361
3651
  "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."
3362
3652
  },
3363
3653
  "cvss": {
3364
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
3654
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
3365
3655
  "$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.",
3366
3656
  "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."
3367
3657
  },
@@ -3372,7 +3662,7 @@
3372
3662
  "milestones": {
3373
3663
  "type": "array",
3374
3664
  "items": {
3375
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
3665
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
3376
3666
  },
3377
3667
  "description": "Remediation milestones (primarily for POA&M type amendments)."
3378
3668
  },
@@ -3389,7 +3679,7 @@
3389
3679
  "affectedPackages": {
3390
3680
  "type": "array",
3391
3681
  "items": {
3392
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0#/$defs/Affected_Package"
3682
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
3393
3683
  },
3394
3684
  "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)."
3395
3685
  }
@@ -3522,9 +3812,9 @@
3522
3812
  }
3523
3813
  }
3524
3814
  },
3525
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0": {
3815
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
3526
3816
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3527
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0",
3817
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
3528
3818
  "title": "HDF Result Primitives",
3529
3819
  "description": "Types for representing assessment results and statuses.",
3530
3820
  "$defs": {
@@ -3589,6 +3879,10 @@
3589
3879
  "type": "string"
3590
3880
  },
3591
3881
  "description": "The stacktrace/backtrace of the exception if one occurred."
3882
+ },
3883
+ "rawSourceRecord": {
3884
+ "$ref": "#/$defs/Raw_Source_Record",
3885
+ "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."
3592
3886
  }
3593
3887
  },
3594
3888
  "examples": [
@@ -3619,6 +3913,64 @@
3619
3913
  "description": "A test within a requirement and its results and findings such as how long it took to run.",
3620
3914
  "title": "Requirement Result"
3621
3915
  },
3916
+ "Raw_Source_Record": {
3917
+ "type": "object",
3918
+ "additionalProperties": false,
3919
+ "required": [
3920
+ "content",
3921
+ "encoding",
3922
+ "mediaType"
3923
+ ],
3924
+ "properties": {
3925
+ "content": {
3926
+ "type": "string",
3927
+ "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."
3928
+ },
3929
+ "encoding": {
3930
+ "type": "string",
3931
+ "enum": [
3932
+ "utf-8",
3933
+ "base64"
3934
+ ],
3935
+ "description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
3936
+ },
3937
+ "mediaType": {
3938
+ "type": "string",
3939
+ "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."
3940
+ },
3941
+ "pointer": {
3942
+ "type": "string",
3943
+ "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."
3944
+ }
3945
+ },
3946
+ "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.",
3947
+ "$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.",
3948
+ "examples": [
3949
+ {
3950
+ "content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
3951
+ "encoding": "utf-8",
3952
+ "mediaType": "application/json",
3953
+ "pointer": "/matches/3"
3954
+ },
3955
+ {
3956
+ "content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
3957
+ "encoding": "utf-8",
3958
+ "mediaType": "application/xml",
3959
+ "pointer": "/Benchmark/TestResult/rule-result[4]"
3960
+ },
3961
+ {
3962
+ "content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
3963
+ "encoding": "base64",
3964
+ "mediaType": "application/octet-stream"
3965
+ },
3966
+ {
3967
+ "content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
3968
+ "encoding": "utf-8",
3969
+ "mediaType": "text/csv"
3970
+ }
3971
+ ],
3972
+ "title": "Raw Source Record"
3973
+ },
3622
3974
  "Requirement_Description": {
3623
3975
  "type": "object",
3624
3976
  "unevaluatedProperties": false,
@@ -3655,9 +4007,9 @@
3655
4007
  }
3656
4008
  }
3657
4009
  },
3658
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0": {
4010
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
3659
4011
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3660
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0",
4012
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
3661
4013
  "title": "HDF CVSS Primitives",
3662
4014
  "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).",
3663
4015
  "$defs": {
@@ -3854,9 +4206,9 @@
3854
4206
  }
3855
4207
  }
3856
4208
  },
3857
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0": {
4209
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
3858
4210
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3859
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0",
4211
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
3860
4212
  "title": "HDF Affected Package Primitives",
3861
4213
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
3862
4214
  "$defs": {