@mitre/hdf-schema 3.6.0-rc.4 → 3.6.0

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-results/v3.5.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.6.0",
4
4
  "type": "object",
5
5
  "unevaluatedProperties": false,
6
6
  "required": [
@@ -10,7 +10,7 @@
10
10
  "externalReferences": {
11
11
  "type": "array",
12
12
  "items": {
13
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
13
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
14
14
  },
15
15
  "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."
16
16
  },
@@ -27,7 +27,7 @@
27
27
  "components": {
28
28
  "type": "array",
29
29
  "items": {
30
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.5.0#/$defs/Component"
30
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.6.0#/$defs/Component"
31
31
  },
32
32
  "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."
33
33
  },
@@ -39,27 +39,38 @@
39
39
  "description": "Information on the baselines that were evaluated, including findings."
40
40
  },
41
41
  "statistics": {
42
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.5.0#/$defs/Statistics",
42
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.6.0#/$defs/Statistics",
43
43
  "description": "Statistics for the assessment run, including duration and result counts."
44
44
  },
45
45
  "generator": {
46
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Generator",
46
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Generator",
47
47
  "description": "Information about the tool that generated this file."
48
48
  },
49
49
  "tool": {
50
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Tool",
50
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Tool",
51
51
  "description": "The security tool that produced the assessment data in this file."
52
52
  },
53
53
  "integrity": {
54
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Integrity",
54
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Integrity",
55
55
  "description": "Cryptographic integrity information for verifying this file."
56
56
  },
57
+ "preAmendmentChecksum": {
58
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
59
+ "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.",
60
+ "$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.",
61
+ "examples": [
62
+ {
63
+ "algorithm": "sha256",
64
+ "value": "9599ce7889e99b70ef5d0f3efa4215e35059c10a7e89b9314cbf4ded8fdbad38"
65
+ }
66
+ ]
67
+ },
57
68
  "runner": {
58
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.5.0#/$defs/Runner",
69
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.6.0#/$defs/Runner",
59
70
  "description": "Information about the test execution environment where the security tool was run. Distinct from targets (what is being tested)."
60
71
  },
61
72
  "remediation": {
62
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Remediation",
73
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Remediation",
63
74
  "description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for fixing failing requirements found in this assessment."
64
75
  },
65
76
  "systemRef": {
@@ -73,7 +84,7 @@
73
84
  "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."
74
85
  },
75
86
  "derivation": {
76
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.5.0#/$defs/Derivation",
87
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.6.0#/$defs/Derivation",
77
88
  "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."
78
89
  },
79
90
  "extensions": {
@@ -171,14 +182,14 @@
171
182
  ],
172
183
  "allOf": [
173
184
  {
174
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Baseline_Metadata"
185
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Baseline_Metadata"
175
186
  }
176
187
  ],
177
188
  "properties": {
178
189
  "depends": {
179
190
  "type": "array",
180
191
  "items": {
181
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Dependency"
192
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Dependency"
182
193
  },
183
194
  "description": "The set of dependencies this baseline depends on."
184
195
  },
@@ -191,15 +202,15 @@
191
202
  "description": "The description - should be more detailed than the summary."
192
203
  },
193
204
  "integrity": {
194
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Integrity",
205
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Integrity",
195
206
  "description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
196
207
  },
197
208
  "originalChecksum": {
198
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
209
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
199
210
  "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."
200
211
  },
201
212
  "resultsChecksum": {
202
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
213
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
203
214
  "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."
204
215
  },
205
216
  "statusMessage": {
@@ -217,14 +228,14 @@
217
228
  "groups": {
218
229
  "type": "array",
219
230
  "items": {
220
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Requirement_Group"
231
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Requirement_Group"
221
232
  },
222
233
  "description": "A set of descriptions for the requirement groups."
223
234
  },
224
235
  "inputs": {
225
236
  "type": "array",
226
237
  "items": {
227
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0#/$defs/Input"
238
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.6.0#/$defs/Input"
228
239
  },
229
240
  "description": "Typed inputs used to parameterize this baseline at execution time. See the Input primitive for the full schema."
230
241
  },
@@ -249,7 +260,7 @@
249
260
  ],
250
261
  "allOf": [
251
262
  {
252
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Requirement_Core"
263
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Requirement_Core"
253
264
  }
254
265
  ],
255
266
  "properties": {
@@ -257,7 +268,7 @@
257
268
  "type": "array",
258
269
  "minItems": 1,
259
270
  "items": {
260
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Requirement_Description"
271
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Requirement_Description"
261
272
  },
262
273
  "contains": {
263
274
  "type": "object",
@@ -273,37 +284,37 @@
273
284
  "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'."
274
285
  },
275
286
  "severity": {
276
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Severity",
287
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Severity",
277
288
  "description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
278
289
  },
279
290
  "sourceLocation": {
280
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Source_Location",
291
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Source_Location",
281
292
  "description": "The explicit location of the requirement within the source code."
282
293
  },
283
294
  "results": {
284
295
  "type": "array",
285
296
  "minItems": 1,
286
297
  "items": {
287
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Requirement_Result"
298
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Requirement_Result"
288
299
  },
289
300
  "description": "The set of all tests within the requirement and their results."
290
301
  },
291
302
  "statusOverrides": {
292
303
  "type": "array",
293
304
  "items": {
294
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Status_Override"
305
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Status_Override"
295
306
  },
296
307
  "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). Most recent override should be first in array. Preserves full audit trail."
297
308
  },
298
309
  "poams": {
299
310
  "type": "array",
300
311
  "items": {
301
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/POAM"
312
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/POAM"
302
313
  },
303
314
  "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."
304
315
  },
305
316
  "effectiveStatus": {
306
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
317
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
307
318
  "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."
308
319
  },
309
320
  "effectiveImpact": {
@@ -313,33 +324,33 @@
313
324
  "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."
314
325
  },
315
326
  "disposition": {
316
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
327
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Override_Type",
317
328
  "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."
318
329
  },
319
330
  "effectiveChecksum": {
320
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
331
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
321
332
  "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)."
322
333
  },
323
334
  "evidence": {
324
335
  "type": "array",
325
336
  "items": {
326
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
337
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
327
338
  },
328
339
  "description": "Supporting evidence for this requirement's findings, such as screenshots, code samples, or log excerpts."
329
340
  },
330
341
  "cvss": {
331
342
  "type": "array",
332
343
  "items": {
333
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss"
344
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss"
334
345
  },
335
346
  "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."
336
347
  },
337
348
  "epss": {
338
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.5.0#/$defs/Epss",
349
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.6.0#/$defs/Epss",
339
350
  "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."
340
351
  },
341
352
  "kev": {
342
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.5.0#/$defs/Kev",
353
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.6.0#/$defs/Kev",
343
354
  "description": "CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and dueDate carry the federal patching deadline."
344
355
  },
345
356
  "cwe": {
@@ -353,14 +364,14 @@
353
364
  "affectedPackages": {
354
365
  "type": "array",
355
366
  "items": {
356
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
367
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0#/$defs/Affected_Package"
357
368
  },
358
369
  "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)."
359
370
  }
360
371
  },
372
+ "$comment": "Examples, in order: 1) Passing requirement — no overrides, no disposition; 2) Waiver — AO accepted risk, status overridden to passed; 3) False positive (compliance scan) — STIG check was wrong, requirement actually passes; 4) False positive (CVE scan) — vulnerability does not apply to this build; 5) Risk adjustment — impact lowered, pass/fail unchanged; 6) Operational requirement — cannot remediate, remains open risk; 7) POAM — remediation tracked, status unchanged.",
361
373
  "examples": [
362
374
  {
363
- "$comment": "Passing requirement — no overrides, no disposition",
364
375
  "id": "SV-230222",
365
376
  "title": "RHEL 9 must use SSH protocol version 2",
366
377
  "impact": 0.7,
@@ -385,7 +396,6 @@
385
396
  "effectiveStatus": "passed"
386
397
  },
387
398
  {
388
- "$comment": "Waiver — AO accepted risk, status overridden to passed",
389
399
  "id": "SV-230300",
390
400
  "title": "RHEL 9 must enforce password complexity",
391
401
  "impact": 0.5,
@@ -429,7 +439,6 @@
429
439
  }
430
440
  },
431
441
  {
432
- "$comment": "False positive (compliance scan) — STIG check was wrong, requirement actually passes",
433
442
  "id": "SV-230410",
434
443
  "title": "RHEL 9 must have sshd PermitRootLogin disabled",
435
444
  "impact": 0.7,
@@ -469,7 +478,6 @@
469
478
  "disposition": "falsePositive"
470
479
  },
471
480
  {
472
- "$comment": "False positive (CVE scan) — vulnerability does not apply to this build",
473
481
  "id": "CVE-2026-12345",
474
482
  "title": "libxml2 buffer overflow in xmlParseEntityDecl",
475
483
  "impact": 0.9,
@@ -509,7 +517,6 @@
509
517
  "disposition": "falsePositive"
510
518
  },
511
519
  {
512
- "$comment": "Risk adjustment — impact lowered, pass/fail unchanged",
513
520
  "id": "CVE-2026-67890",
514
521
  "title": "OpenSSL timing side-channel in RSA decryption",
515
522
  "impact": 0.7,
@@ -552,7 +559,6 @@
552
559
  "disposition": "riskAdjustment"
553
560
  },
554
561
  {
555
- "$comment": "Operational requirement — cannot remediate, remains open risk",
556
562
  "id": "SV-230500",
557
563
  "title": "RHEL 9 must disable USB mass storage",
558
564
  "impact": 0.5,
@@ -592,7 +598,6 @@
592
598
  "disposition": "operationalRequirement"
593
599
  },
594
600
  {
595
- "$comment": "POAM — remediation tracked, status unchanged",
596
601
  "id": "SV-230350",
597
602
  "title": "RHEL 9 must be patched within 30 days of release",
598
603
  "impact": 0.7,
@@ -646,9 +651,9 @@
646
651
  "description": "A requirement that has been evaluated, including any findings.",
647
652
  "title": "Evaluated Requirement"
648
653
  },
649
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0": {
654
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0": {
650
655
  "$schema": "https://json-schema.org/draft/2020-12/schema",
651
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0",
656
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0",
652
657
  "title": "HDF Common Primitives",
653
658
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
654
659
  "$defs": {
@@ -728,22 +733,20 @@
728
733
  }
729
734
  },
730
735
  "unevaluatedProperties": false,
736
+ "$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.",
731
737
  "examples": [
732
738
  {
733
- "$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
734
739
  "sourceName": "cve",
735
740
  "externalId": "CVE-2021-44228",
736
741
  "rel": "definition"
737
742
  },
738
743
  {
739
- "$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
740
744
  "sourceName": "mitre-att&ck",
741
745
  "externalId": "T1059",
742
746
  "href": "https://attack.mitre.org/techniques/T1059/",
743
747
  "rel": "canonical"
744
748
  },
745
749
  {
746
- "$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
747
750
  "sourceName": "stix",
748
751
  "href": "https://cti.example.org/bundles/log4shell.json",
749
752
  "rel": "investigate",
@@ -759,7 +762,6 @@
759
762
  "addedAt": "2026-07-26T00:00:00Z"
760
763
  },
761
764
  {
762
- "$comment": "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.",
763
765
  "sourceName": "stix",
764
766
  "externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
765
767
  "href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
@@ -1578,9 +1580,9 @@
1578
1580
  "description": "Whether the requirement is mandatory within its baseline.\n\nDistinct from severity (risk weight) and status (lifecycle state).\n\nMaps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop, FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).\n\nOptional: when omitted, consumers should treat the requirement as 'required' by convention."
1579
1581
  }
1580
1582
  },
1583
+ "$comment": "Examples, in order: 1) v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.6.0 (backward compatibility); 2) v3.2 example populating all three classification fields. controlType=technical because AC-3 is enforced via configuration, not policy text. verificationMethod=automated because a check exists. applicability=required because this is a CORE control in the source baseline; 3) v3.2 example for a manual-by-design requirement. FedRAMP 20x KSIs are statement-form: code is omitted (not null) and verificationMethod=manual-by-design distinguishes this from 'automation could exist but doesn't yet'. controlType=policy because this is an authored governance statement; 4) v3.2 example for a STIG rule lacking a <fix>. Differs from manual-by-design: automation should exist, just not yet. applicability=advisory used here because the source format flagged it as recommended-but-not-mandatory; CIS-style IG memberships and FedRAMP 'Optional:' markers map onto applicability=optional or advisory similarly.",
1581
1584
  "examples": [
1582
1585
  {
1583
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
1584
1586
  "id": "SV-238196",
1585
1587
  "title": "The Ubuntu operating system must enforce password complexity",
1586
1588
  "impact": 0.5,
@@ -1610,7 +1612,6 @@
1610
1612
  ]
1611
1613
  },
1612
1614
  {
1613
- "$comment": "v3.2 example populating all three classification fields. controlType=technical because AC-3 is enforced via configuration, not policy text. verificationMethod=automated because a check exists. applicability=required because this is a CORE control in the source baseline.",
1614
1615
  "id": "AC-3",
1615
1616
  "title": "Access Enforcement",
1616
1617
  "impact": 0.7,
@@ -1632,7 +1633,6 @@
1632
1633
  "applicability": "required"
1633
1634
  },
1634
1635
  {
1635
- "$comment": "v3.2 example for a manual-by-design requirement. FedRAMP 20x KSIs are statement-form: code is omitted (not null) and verificationMethod=manual-by-design distinguishes this from 'automation could exist but doesn't yet'. controlType=policy because this is an authored governance statement.",
1636
1636
  "id": "KSI-CNA-01",
1637
1637
  "title": "Cyber Security Plan documents the system",
1638
1638
  "impact": 0.5,
@@ -1652,7 +1652,6 @@
1652
1652
  "applicability": "required"
1653
1653
  },
1654
1654
  {
1655
- "$comment": "v3.2 example for a STIG rule lacking a <fix>. Differs from manual-by-design: automation should exist, just not yet. applicability=advisory used here because the source format flagged it as recommended-but-not-mandatory; CIS-style IG memberships and FedRAMP 'Optional:' markers map onto applicability=optional or advisory similarly.",
1656
1655
  "id": "SV-999999",
1657
1656
  "title": "Example STIG rule pending automation",
1658
1657
  "impact": 0.3,
@@ -1717,9 +1716,9 @@
1717
1716
  }
1718
1717
  }
1719
1718
  },
1720
- "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.5.0": {
1719
+ "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.6.0": {
1721
1720
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1722
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.5.0",
1721
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.6.0",
1723
1722
  "title": "HDF Component Primitives",
1724
1723
  "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).",
1725
1724
  "$defs": {
@@ -1765,7 +1764,7 @@
1765
1764
  "description": "Description of this component's role or purpose."
1766
1765
  },
1767
1766
  "owner": {
1768
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1767
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
1769
1768
  "description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
1770
1769
  },
1771
1770
  "externalIds": {
@@ -1785,14 +1784,14 @@
1785
1784
  "boms": {
1786
1785
  "type": "array",
1787
1786
  "items": {
1788
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.5.0#/$defs/Bom"
1787
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.6.0#/$defs/Bom"
1789
1788
  },
1790
1789
  "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."
1791
1790
  },
1792
1791
  "integrity": {
1793
1792
  "type": "array",
1794
1793
  "items": {
1795
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum"
1794
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum"
1796
1795
  },
1797
1796
  "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."
1798
1797
  },
@@ -1806,12 +1805,12 @@
1806
1805
  "inputOverrides": {
1807
1806
  "type": "array",
1808
1807
  "items": {
1809
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0#/$defs/Input_Override"
1808
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.6.0#/$defs/Input_Override"
1810
1809
  },
1811
1810
  "description": "System-specific overrides for baseline input values."
1812
1811
  },
1813
1812
  "targetSelector": {
1814
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0#/$defs/Target_Selector",
1813
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.6.0#/$defs/Target_Selector",
1815
1814
  "description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
1816
1815
  }
1817
1816
  },
@@ -1942,9 +1941,9 @@
1942
1941
  }
1943
1942
  }
1944
1943
  ],
1944
+ "$comment": "Examples, in order: 1) Domain-joined host carrying all three identity fields separately: short hostname, FQDN, and the (distinct) directory domain. HOST_NAME and HOST_FQDN from a STIG checklist map here; note the AD domain differs from the FQDN's DNS suffix; 2) Standalone/workgroup host: has a short hostname but no directory domain — 'domain' is omitted rather than fabricated from the FQDN suffix.",
1945
1945
  "examples": [
1946
1946
  {
1947
- "$comment": "Domain-joined host carrying all three identity fields separately: short hostname, FQDN, and the (distinct) directory domain. HOST_NAME and HOST_FQDN from a STIG checklist map here; note the AD domain differs from the FQDN's DNS suffix.",
1948
1947
  "type": "host",
1949
1948
  "name": "web-server-prod-01",
1950
1949
  "componentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
@@ -1960,7 +1959,6 @@
1960
1959
  }
1961
1960
  },
1962
1961
  {
1963
- "$comment": "Standalone/workgroup host: has a short hostname but no directory domain — 'domain' is omitted rather than fabricated from the FQDN suffix.",
1964
1962
  "type": "host",
1965
1963
  "name": "kiosk-lab-07",
1966
1964
  "hostname": "kiosk-lab-07",
@@ -2095,7 +2093,7 @@
2095
2093
  "const": "cloudAccount"
2096
2094
  },
2097
2095
  "provider": {
2098
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Cloud_Provider",
2096
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Cloud_Provider",
2099
2097
  "description": "Cloud provider."
2100
2098
  },
2101
2099
  "accountId": {
@@ -2134,7 +2132,7 @@
2134
2132
  "const": "cloudResource"
2135
2133
  },
2136
2134
  "provider": {
2137
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Cloud_Provider",
2135
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Cloud_Provider",
2138
2136
  "description": "Cloud provider."
2139
2137
  },
2140
2138
  "resourceType": {
@@ -2433,9 +2431,9 @@
2433
2431
  }
2434
2432
  }
2435
2433
  },
2436
- "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.5.0": {
2434
+ "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.6.0": {
2437
2435
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2438
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.5.0",
2436
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.6.0",
2439
2437
  "title": "HDF BOM Primitives",
2440
2438
  "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.",
2441
2439
  "$defs": {
@@ -2491,7 +2489,7 @@
2491
2489
  "hashes": {
2492
2490
  "type": "array",
2493
2491
  "items": {
2494
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum"
2492
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum"
2495
2493
  },
2496
2494
  "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."
2497
2495
  },
@@ -2608,9 +2606,9 @@
2608
2606
  ]
2609
2607
  }
2610
2608
  ],
2609
+ "$comment": "Examples, in order: 1) Passthrough SBOM by external reference — the universal escape hatch, available to every bomType; 2) Passthrough for a reserved-but-not-yet-normalized type (cbom) — carried opaquely until a normalized extension ships; 3) Normalized ai-model BOM: CISA/G7-aligned fields live in the model extension, never at the component root or shared base; 4) Normalized dataset BOM with lineage — a filtered derivative of a base dataset, referenced by an ai-model via datasetRefs.",
2611
2610
  "examples": [
2612
2611
  {
2613
- "$comment": "Passthrough SBOM by external reference — the universal escape hatch, available to every bomType.",
2614
2612
  "bomType": "sbom",
2615
2613
  "format": "cyclonedx",
2616
2614
  "ref": "https://artifacts.agency.gov/sbom/webtier.cdx.json",
@@ -2622,7 +2620,6 @@
2622
2620
  ]
2623
2621
  },
2624
2622
  {
2625
- "$comment": "Passthrough for a reserved-but-not-yet-normalized type (cbom) — carried opaquely until a normalized extension ships.",
2626
2623
  "bomType": "cbom",
2627
2624
  "format": "cyclonedx",
2628
2625
  "document": {
@@ -2631,7 +2628,6 @@
2631
2628
  }
2632
2629
  },
2633
2630
  {
2634
- "$comment": "Normalized ai-model BOM: CISA/G7-aligned fields live in the model extension, never at the component root or shared base.",
2635
2631
  "bomType": "ai-model",
2636
2632
  "format": "cyclonedx-ml",
2637
2633
  "model": {
@@ -2671,7 +2667,6 @@
2671
2667
  }
2672
2668
  },
2673
2669
  {
2674
- "$comment": "Normalized dataset BOM with lineage — a filtered derivative of a base dataset, referenced by an ai-model via datasetRefs.",
2675
2670
  "bomType": "dataset",
2676
2671
  "format": "croissant",
2677
2672
  "dataset": {
@@ -2906,9 +2901,9 @@
2906
2901
  }
2907
2902
  }
2908
2903
  },
2909
- "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0": {
2904
+ "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.6.0": {
2910
2905
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2911
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0",
2906
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.6.0",
2912
2907
  "title": "HDF System Primitives",
2913
2908
  "description": "Types for describing system architecture, authorization boundaries, and components.",
2914
2909
  "$defs": {
@@ -2959,7 +2954,7 @@
2959
2954
  "description": "Rationale for why this override is needed."
2960
2955
  },
2961
2956
  "approvedBy": {
2962
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
2957
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
2963
2958
  "description": "Identity of the person or system that approved this override."
2964
2959
  }
2965
2960
  },
@@ -3041,9 +3036,9 @@
3041
3036
  }
3042
3037
  }
3043
3038
  },
3044
- "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.5.0": {
3039
+ "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.6.0": {
3045
3040
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3046
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.5.0",
3041
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.6.0",
3047
3042
  "title": "HDF Statistics Primitives",
3048
3043
  "description": "Statistics types for tracking assessment run metrics.",
3049
3044
  "$defs": {
@@ -3112,9 +3107,9 @@
3112
3107
  }
3113
3108
  }
3114
3109
  },
3115
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0": {
3110
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0": {
3116
3111
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3117
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0",
3112
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0",
3118
3113
  "title": "HDF Extension Primitives",
3119
3114
  "description": "Extension types for waivers, attestations, generators, and integrity.",
3120
3115
  "$defs": {
@@ -3144,20 +3139,20 @@
3144
3139
  "externalReferences": {
3145
3140
  "type": "array",
3146
3141
  "items": {
3147
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
3142
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
3148
3143
  },
3149
3144
  "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."
3150
3145
  },
3151
3146
  "type": {
3152
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
3147
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Override_Type",
3153
3148
  "description": "The type of override applied to this requirement."
3154
3149
  },
3155
3150
  "status": {
3156
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
3151
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
3157
3152
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
3158
3153
  },
3159
3154
  "impact": {
3160
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Impact_Override",
3155
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Impact_Override",
3161
3156
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
3162
3157
  },
3163
3158
  "reason": {
@@ -3165,7 +3160,7 @@
3165
3160
  "description": "Explanation for why this override was applied."
3166
3161
  },
3167
3162
  "appliedBy": {
3168
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
3163
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
3169
3164
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
3170
3165
  },
3171
3166
  "appliedAt": {
@@ -3179,30 +3174,31 @@
3179
3174
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
3180
3175
  },
3181
3176
  "signature": {
3182
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
3177
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
3183
3178
  "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."
3184
3179
  },
3185
3180
  "evidence": {
3186
3181
  "type": "array",
3187
3182
  "items": {
3188
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
3183
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
3189
3184
  },
3190
3185
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
3191
3186
  },
3192
3187
  "previousChecksum": {
3193
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
3188
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
3194
3189
  "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."
3195
3190
  },
3196
3191
  "cvss": {
3197
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
3192
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
3198
3193
  "$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.",
3199
3194
  "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."
3200
3195
  },
3201
3196
  "justification": {
3202
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Justification",
3197
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Justification",
3203
3198
  "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."
3204
3199
  }
3205
3200
  },
3201
+ "$comment": "Example 3: Inline riskAdjustment carrying the STIX source that motivated it via externalReferences (the enrichment envelope, with the raw sighting embedded losslessly in document). This is the shape the enrich pass writes onto Evaluated_Requirement.overrides[] for the E:A recompute.",
3206
3202
  "examples": [
3207
3203
  {
3208
3204
  "type": "waiver",
@@ -3229,7 +3225,6 @@
3229
3225
  "expiresAt": "2026-10-14T00:00:00Z"
3230
3226
  },
3231
3227
  {
3232
- "$comment": "Inline riskAdjustment carrying the STIX source that motivated it via externalReferences (the enrichment envelope, with the raw sighting embedded losslessly in document). This is the shape the enrich pass writes onto Evaluated_Requirement.overrides[] for the E:A recompute.",
3233
3228
  "type": "riskAdjustment",
3234
3229
  "impact": {
3235
3230
  "value": 0.9
@@ -3335,7 +3330,7 @@
3335
3330
  "description": "Detailed explanation of the plan, including what actions will be taken."
3336
3331
  },
3337
3332
  "appliedBy": {
3338
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
3333
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
3339
3334
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
3340
3335
  },
3341
3336
  "appliedAt": {
@@ -3351,23 +3346,23 @@
3351
3346
  "milestones": {
3352
3347
  "type": "array",
3353
3348
  "items": {
3354
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
3349
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
3355
3350
  },
3356
3351
  "description": "Optional array of milestones tracking progress toward completion."
3357
3352
  },
3358
3353
  "signature": {
3359
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
3354
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
3360
3355
  "description": "Optional digital signature for enhanced trust and non-repudiation."
3361
3356
  },
3362
3357
  "evidence": {
3363
3358
  "type": "array",
3364
3359
  "items": {
3365
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
3360
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
3366
3361
  },
3367
3362
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
3368
3363
  },
3369
3364
  "previousChecksum": {
3370
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
3365
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
3371
3366
  "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."
3372
3367
  }
3373
3368
  },
@@ -3520,7 +3515,7 @@
3520
3515
  },
3521
3516
  "properties": {
3522
3517
  "algorithm": {
3523
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Hash_Algorithm",
3518
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Hash_Algorithm",
3524
3519
  "description": "The hash algorithm used for the checksum."
3525
3520
  },
3526
3521
  "checksum": {
@@ -3553,9 +3548,9 @@
3553
3548
  }
3554
3549
  }
3555
3550
  },
3556
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0": {
3551
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0": {
3557
3552
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3558
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0",
3553
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0",
3559
3554
  "title": "HDF Amendment Primitives",
3560
3555
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
3561
3556
  "$defs": {
@@ -3666,7 +3661,7 @@
3666
3661
  "externalReferences": {
3667
3662
  "type": "array",
3668
3663
  "items": {
3669
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
3664
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
3670
3665
  },
3671
3666
  "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."
3672
3667
  },
@@ -3683,7 +3678,7 @@
3683
3678
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
3684
3679
  },
3685
3680
  "status": {
3686
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
3681
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
3687
3682
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
3688
3683
  },
3689
3684
  "impact": {
@@ -3695,7 +3690,7 @@
3695
3690
  "description": "Justification for this amendment."
3696
3691
  },
3697
3692
  "appliedBy": {
3698
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
3693
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
3699
3694
  "description": "Identity of who applied this amendment."
3700
3695
  },
3701
3696
  "appliedAt": {
@@ -3711,20 +3706,20 @@
3711
3706
  "evidence": {
3712
3707
  "type": "array",
3713
3708
  "items": {
3714
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
3709
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
3715
3710
  },
3716
3711
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
3717
3712
  },
3718
3713
  "signature": {
3719
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
3714
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
3720
3715
  "description": "Digital signature for non-repudiation."
3721
3716
  },
3722
3717
  "previousChecksum": {
3723
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
3718
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
3724
3719
  "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."
3725
3720
  },
3726
3721
  "cvss": {
3727
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
3722
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
3728
3723
  "$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.",
3729
3724
  "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."
3730
3725
  },
@@ -3735,7 +3730,7 @@
3735
3730
  "milestones": {
3736
3731
  "type": "array",
3737
3732
  "items": {
3738
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
3733
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
3739
3734
  },
3740
3735
  "description": "Remediation milestones (primarily for POA&M type amendments)."
3741
3736
  },
@@ -3752,11 +3747,12 @@
3752
3747
  "affectedPackages": {
3753
3748
  "type": "array",
3754
3749
  "items": {
3755
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
3750
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0#/$defs/Affected_Package"
3756
3751
  },
3757
3752
  "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)."
3758
3753
  }
3759
3754
  },
3755
+ "$comment": "Example 7: VEX-style import — falsePositive scoped to specific packages by purl. The affectedPackages array carries structured product identity instead of squeezing 'Products: …' into the reason free-text field.",
3760
3756
  "examples": [
3761
3757
  {
3762
3758
  "type": "waiver",
@@ -3858,7 +3854,6 @@
3858
3854
  "expiresAt": "2026-09-26T00:00:00Z"
3859
3855
  },
3860
3856
  {
3861
- "$comment": "VEX-style import — falsePositive scoped to specific packages by purl. The affectedPackages array carries structured product identity instead of squeezing 'Products: …' into the reason free-text field.",
3862
3857
  "type": "falsePositive",
3863
3858
  "requirementId": "CVE-2026-12345",
3864
3859
  "status": "notApplicable",
@@ -3885,9 +3880,9 @@
3885
3880
  }
3886
3881
  }
3887
3882
  },
3888
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0": {
3883
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0": {
3889
3884
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3890
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0",
3885
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0",
3891
3886
  "title": "HDF Result Primitives",
3892
3887
  "description": "Types for representing assessment results and statuses.",
3893
3888
  "$defs": {
@@ -4018,9 +4013,9 @@
4018
4013
  }
4019
4014
  }
4020
4015
  },
4021
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0": {
4016
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0": {
4022
4017
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4023
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0",
4018
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0",
4024
4019
  "title": "HDF CVSS Primitives",
4025
4020
  "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).",
4026
4021
  "$defs": {
@@ -4084,7 +4079,7 @@
4084
4079
  ]
4085
4080
  }
4086
4081
  ],
4087
- "$comment": "Only `version` is required; every metric/score field is optional because a single Cvss instance may represent vendor-supplied Base data (on a finding's cvss[]), consumer-supplied enrichment (on a riskAdjustment override — Environmental/Threat/Supplemental deltas with NO base, since base is the finding's scan-specific vendor data), or a fully-resolved effectiveCvss. The Base/Threat/Environmental/Supplemental groups do not partition cleanly into vendor-vs-consumer (Threat straddles: vendor temporal data and consumer exploit-maturity both live here), so a single permissive type is more honest than separate vendor/consumer types. The anyOf guardrail rejects a content-free object (e.g. {version} alone) by requiring at least one substantive metric or score. baseVector remains optional even when baseScore is present: some vendor tools (Twistlock/Prisma Cloud) emit a final score without the vector that derived it — that score is captured structurally rather than lost.",
4082
+ "$comment": "Only `version` is required; every metric/score field is optional because a single Cvss instance may represent vendor-supplied Base data (on a finding's cvss[]), consumer-supplied enrichment (on a riskAdjustment override — Environmental/Threat/Supplemental deltas with NO base, since base is the finding's scan-specific vendor data), or a fully-resolved effectiveCvss. The Base/Threat/Environmental/Supplemental groups do not partition cleanly into vendor-vs-consumer (Threat straddles: vendor temporal data and consumer exploit-maturity both live here), so a single permissive type is more honest than separate vendor/consumer types. The anyOf guardrail rejects a content-free object (e.g. {version} alone) by requiring at least one substantive metric or score. baseVector remains optional even when baseScore is present: some vendor tools (Twistlock/Prisma Cloud) emit a final score without the vector that derived it — that score is captured structurally rather than lost. Examples, in order: 1) Base-only: vendor-supplied CVSS 3.1 data exactly as a scanner (e.g., Nessus, Grype) would emit it. No consumer enrichment yet; 2) Base + Threat: consumer added Exploit Maturity ('E:U' = Unproven) and Remediation Level ('RL:O' = Official Fix) to a HTTP/2 'Rapid Reset' DoS finding. Threat score drops from base 7.5 to 5.5; 3) Base + Environmental: consumer asserts the affected system is high-criticality (CR:H, IR:H, AR:H) AND network-reachable in their environment (MAV:N). Environmental score reflects deployment risk for the xz-utils backdoor; 4) Full CVSS 4.0: vendor base + consumer threat (E:A = Attacked, exploits seen in the wild) + environmental (high CIA requirements) + supplemental context (S:P = present safety impact, AU:N = no autonomous spread, RE:M = moderate response effort) for the Fortinet FortiOS pre-auth RCE. computedScore reflects post-mitigation final risk; 5) CVSS 2.0 legacy: Heartbleed (CVE-2014-0160) as still reported by older scanner output and legacy NVD data. CVSS 2.0 vectors have no 'CVSS:2.0/' prefix.",
4088
4083
  "properties": {
4089
4084
  "version": {
4090
4085
  "type": "string",
@@ -4164,7 +4159,6 @@
4164
4159
  },
4165
4160
  "examples": [
4166
4161
  {
4167
- "$comment": "Base-only: vendor-supplied CVSS 3.1 data exactly as a scanner (e.g., Nessus, Grype) would emit it. No consumer enrichment yet.",
4168
4162
  "version": "3.1",
4169
4163
  "source": "CVE-2024-12345",
4170
4164
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
@@ -4172,7 +4166,6 @@
4172
4166
  "baseSeverity": "critical"
4173
4167
  },
4174
4168
  {
4175
- "$comment": "Base + Threat: consumer added Exploit Maturity ('E:U' = Unproven) and Remediation Level ('RL:O' = Official Fix) to a HTTP/2 'Rapid Reset' DoS finding. Threat score drops from base 7.5 to 5.5.",
4176
4169
  "version": "3.1",
4177
4170
  "source": "CVE-2023-44487",
4178
4171
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
@@ -4182,7 +4175,6 @@
4182
4175
  "threatScore": 5.5
4183
4176
  },
4184
4177
  {
4185
- "$comment": "Base + Environmental: consumer asserts the affected system is high-criticality (CR:H, IR:H, AR:H) AND network-reachable in their environment (MAV:N). Environmental score reflects deployment risk for the xz-utils backdoor.",
4186
4178
  "version": "3.1",
4187
4179
  "source": "CVE-2024-3094",
4188
4180
  "baseVector": "CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H",
@@ -4194,7 +4186,6 @@
4194
4186
  "computedSeverity": "critical"
4195
4187
  },
4196
4188
  {
4197
- "$comment": "Full CVSS 4.0: vendor base + consumer threat (E:A = Attacked, exploits seen in the wild) + environmental (high CIA requirements) + supplemental context (S:P = present safety impact, AU:N = no autonomous spread, RE:M = moderate response effort) for the Fortinet FortiOS pre-auth RCE. computedScore reflects post-mitigation final risk.",
4198
4189
  "version": "4.0",
4199
4190
  "source": "CVE-2024-21762",
4200
4191
  "baseVector": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
@@ -4209,7 +4200,6 @@
4209
4200
  "computedSeverity": "medium"
4210
4201
  },
4211
4202
  {
4212
- "$comment": "CVSS 2.0 legacy: Heartbleed (CVE-2014-0160) as still reported by older scanner output and legacy NVD data. CVSS 2.0 vectors have no 'CVSS:2.0/' prefix.",
4213
4203
  "version": "2.0",
4214
4204
  "source": "CVE-2014-0160",
4215
4205
  "baseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
@@ -4222,9 +4212,9 @@
4222
4212
  }
4223
4213
  }
4224
4214
  },
4225
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0": {
4215
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0": {
4226
4216
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4227
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0",
4217
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0",
4228
4218
  "title": "HDF Affected Package Primitives",
4229
4219
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
4230
4220
  "$defs": {
@@ -4290,9 +4280,9 @@
4290
4280
  "description": "Optional version string identifying the first release that contains the fix for the vulnerability. Use the same version syntax as `version`. Example: '1.1.1l' fixes 'openssl@1.1.1k'."
4291
4281
  }
4292
4282
  },
4283
+ "$comment": "Examples, in order: 1) RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan; 2) NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier; 3) Minimal valid AffectedPackage — only the three required fields. Use when the scanner reports a package by name+version without emitting CPE or PURL strings; 4) Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed; 5) purl-only — VEX import path where the source format gives a purl and we choose not to decompose it. Valid because purl encodes name/version/ecosystem implicitly; 6) cpe-only — NIST-flavored scopes where the consumer carries a CPE 2.3 string and no purl. Valid because cpe encodes vendor/product/version.",
4293
4284
  "examples": [
4294
4285
  {
4295
- "$comment": "RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan.",
4296
4286
  "name": "openssl",
4297
4287
  "version": "1.1.1k-7.el8_4",
4298
4288
  "ecosystem": "rpm",
@@ -4301,7 +4291,6 @@
4301
4291
  "fixedInVersion": "1.1.1l"
4302
4292
  },
4303
4293
  {
4304
- "$comment": "NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier.",
4305
4294
  "name": "lodash",
4306
4295
  "version": "4.17.20",
4307
4296
  "ecosystem": "npm",
@@ -4309,13 +4298,11 @@
4309
4298
  "fixedInVersion": "4.17.21"
4310
4299
  },
4311
4300
  {
4312
- "$comment": "Minimal valid AffectedPackage — only the three required fields. Use when the scanner reports a package by name+version without emitting CPE or PURL strings.",
4313
4301
  "name": "requests",
4314
4302
  "version": "2.28.1",
4315
4303
  "ecosystem": "pypi"
4316
4304
  },
4317
4305
  {
4318
- "$comment": "Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed.",
4319
4306
  "name": "org.apache.logging.log4j:log4j-core",
4320
4307
  "version": "2.14.1",
4321
4308
  "ecosystem": "maven",
@@ -4324,11 +4311,9 @@
4324
4311
  "fixedInVersion": "2.17.1"
4325
4312
  },
4326
4313
  {
4327
- "$comment": "purl-only — VEX import path where the source format gives a purl and we choose not to decompose it. Valid because purl encodes name/version/ecosystem implicitly.",
4328
4314
  "purl": "pkg:npm/lodash@4.17.20"
4329
4315
  },
4330
4316
  {
4331
- "$comment": "cpe-only — NIST-flavored scopes where the consumer carries a CPE 2.3 string and no purl. Valid because cpe encodes vendor/product/version.",
4332
4317
  "cpe": "cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*"
4333
4318
  }
4334
4319
  ],
@@ -4337,9 +4322,9 @@
4337
4322
  }
4338
4323
  }
4339
4324
  },
4340
- "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.5.0": {
4325
+ "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.6.0": {
4341
4326
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4342
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.5.0",
4327
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.6.0",
4343
4328
  "title": "HDF Runner Primitive",
4344
4329
  "description": "Information about the test execution environment where the security tool/scanner was executed.",
4345
4330
  "$defs": {
@@ -4383,7 +4368,7 @@
4383
4368
  "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."
4384
4369
  },
4385
4370
  "operator": {
4386
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
4371
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
4387
4372
  "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."
4388
4373
  }
4389
4374
  },
@@ -4432,9 +4417,9 @@
4432
4417
  }
4433
4418
  }
4434
4419
  },
4435
- "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.5.0": {
4420
+ "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.6.0": {
4436
4421
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4437
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.5.0",
4422
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.6.0",
4438
4423
  "title": "HDF Change Event Primitives",
4439
4424
  "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.",
4440
4425
  "$defs": {
@@ -4488,7 +4473,7 @@
4488
4473
  "priorChecksum": {
4489
4474
  "oneOf": [
4490
4475
  {
4491
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum"
4476
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum"
4492
4477
  },
4493
4478
  {
4494
4479
  "type": "null"
@@ -4497,23 +4482,22 @@
4497
4482
  "description": "The effectiveChecksum of the entity state this event supersedes, forming a per-key hash chain: a mismatch or gap against stored state is detectable, letting a consumer mark the key unverified instead of serving stale posture.\n\nNull at chain start (no prior state, e.g. a new entity or the first event after a seed).\n\nThe chain provides tamper/gap evidence given a trusted head; completeness is anchored out-of-band by periodic re-centering rescans."
4498
4483
  }
4499
4484
  },
4485
+ "$comment": "Examples, in order: 1) Steady-state envelope: mid-chain event from an InSpec producer. priorChecksum links to the previous effectiveChecksum for this key; 2) Chain-start envelope: first event for a key after seeding — priorChecksum is null (the CloudTrail null-previous-digest convention), sequence starts low.",
4500
4486
  "examples": [
4501
4487
  {
4502
- "$comment": "Steady-state envelope: mid-chain event from an InSpec producer. priorChecksum links to the previous effectiveChecksum for this key.",
4503
4488
  "eventId": "0190f6f2-1c4e-7c3a-9f2a-3b1d5e7a9c01",
4504
4489
  "source": "inspec://web01/rhel9-stig",
4505
4490
  "sequence": 412,
4506
4491
  "systemRef": "apptier.hdf-system.json",
4507
4492
  "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
4508
4493
  "timestamp": "2026-07-22T14:03:11Z",
4509
- "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.5.0",
4494
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.6.0",
4510
4495
  "priorChecksum": {
4511
4496
  "algorithm": "sha256",
4512
4497
  "value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
4513
4498
  }
4514
4499
  },
4515
4500
  {
4516
- "$comment": "Chain-start envelope: first event for a key after seeding — priorChecksum is null (the CloudTrail null-previous-digest convention), sequence starts low.",
4517
4501
  "eventId": "0190f6f2-2a5b-7e4d-b1c8-4f2e6a8b0d12",
4518
4502
  "source": "inspec://web01/rhel9-stig",
4519
4503
  "sequence": 1,
@@ -4561,7 +4545,7 @@
4561
4545
  ],
4562
4546
  "properties": {
4563
4547
  "effectiveStatus": {
4564
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
4548
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
4565
4549
  "description": "The resolved effective compliance status at this point in the chain."
4566
4550
  },
4567
4551
  "effectiveImpact": {
@@ -4571,14 +4555,13 @@
4571
4555
  "description": "The resolved effective impact score (0.0–1.0) at this point in the chain."
4572
4556
  }
4573
4557
  },
4558
+ "$comment": "Examples, in order: 1) Prior posture of a failing SSH-cipher control before remediation; 2) Prior posture of a control passing under a waiver (the projection carries the resolved status; the governing override type travels in the requirement payload, not here).",
4574
4559
  "examples": [
4575
4560
  {
4576
- "$comment": "Prior posture of a failing SSH-cipher control before remediation.",
4577
4561
  "effectiveStatus": "failed",
4578
4562
  "effectiveImpact": 0.5
4579
4563
  },
4580
4564
  {
4581
- "$comment": "Prior posture of a control passing under a waiver (the projection carries the resolved status; the governing override type travels in the requirement payload, not here).",
4582
4565
  "effectiveStatus": "passed",
4583
4566
  "effectiveImpact": 0.5
4584
4567
  }
@@ -4611,7 +4594,7 @@
4611
4594
  "description": "URI to the seed snapshot document (relative path or absolute URL)."
4612
4595
  },
4613
4596
  "checksum": {
4614
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
4597
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
4615
4598
  "description": "Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by content, not just location."
4616
4599
  }
4617
4600
  },
@@ -4639,9 +4622,9 @@
4639
4622
  "description": "The posture-as-of time of this reconciled view (RFC 3339, trimmed UTC) — the analog of PROV's generatedAtTime."
4640
4623
  }
4641
4624
  },
4625
+ "$comment": "Examples, in order: 1) A reconciled result set: reassembled from the pinned seed scan plus 3 change events through watermark 414. The document's generator names the reconciler, never the scanner.",
4642
4626
  "examples": [
4643
4627
  {
4644
- "$comment": "A reconciled result set: reassembled from the pinned seed scan plus 3 change events through watermark 414. The document's generator names the reconciler, never the scanner.",
4645
4628
  "seed": {
4646
4629
  "uri": "apptier-seed-scan.hdf.json",
4647
4630
  "checksum": {
@@ -4660,9 +4643,9 @@
4660
4643
  }
4661
4644
  }
4662
4645
  },
4663
- "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0": {
4646
+ "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.6.0": {
4664
4647
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4665
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0",
4648
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.6.0",
4666
4649
  "title": "HDF Parameter Primitives",
4667
4650
  "description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
4668
4651
  "$defs": {
@@ -4793,9 +4776,9 @@
4793
4776
  }
4794
4777
  }
4795
4778
  },
4796
- "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.5.0": {
4779
+ "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.6.0": {
4797
4780
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4798
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.5.0",
4781
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.6.0",
4799
4782
  "title": "HDF EPSS Primitive",
4800
4783
  "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.",
4801
4784
  "$defs": {
@@ -4827,21 +4810,19 @@
4827
4810
  "description": "ISO 8601 date (YYYY-MM-DD) on which FIRST.org published this EPSS score."
4828
4811
  }
4829
4812
  },
4813
+ "$comment": "Examples, in order: 1) High exploit probability and high percentile, characteristic of a widely-exploited vulnerability like Log4Shell (CVE-2021-44228) shortly after disclosure; 2) Low score but moderate percentile, the common case for CVEs that have some observed exploitation evidence but are not under active mass exploitation; 3) Very low score, typical of a CVE with no known exploitation activity or proof-of-concept availability.",
4830
4814
  "examples": [
4831
4815
  {
4832
- "$comment": "High exploit probability and high percentile, characteristic of a widely-exploited vulnerability like Log4Shell (CVE-2021-44228) shortly after disclosure.",
4833
4816
  "score": 0.97532,
4834
4817
  "percentile": 0.99987,
4835
4818
  "date": "2026-05-26"
4836
4819
  },
4837
4820
  {
4838
- "$comment": "Low score but moderate percentile, the common case for CVEs that have some observed exploitation evidence but are not under active mass exploitation.",
4839
4821
  "score": 0.04521,
4840
4822
  "percentile": 0.78432,
4841
4823
  "date": "2026-05-26"
4842
4824
  },
4843
4825
  {
4844
- "$comment": "Very low score, typical of a CVE with no known exploitation activity or proof-of-concept availability.",
4845
4826
  "score": 0.00042,
4846
4827
  "percentile": 0.10215,
4847
4828
  "date": "2026-05-26"
@@ -4852,9 +4833,9 @@
4852
4833
  }
4853
4834
  }
4854
4835
  },
4855
- "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.5.0": {
4836
+ "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.6.0": {
4856
4837
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4857
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.5.0",
4838
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.6.0",
4858
4839
  "title": "HDF Kev Primitives",
4859
4840
  "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.",
4860
4841
  "$defs": {
@@ -4900,23 +4881,21 @@
4900
4881
  "description": "CISA's notes describing the vulnerability, observed exploitation, or remediation guidance."
4901
4882
  }
4902
4883
  },
4884
+ "$comment": "Examples, in order: 1) High-urgency case: recently added KEV entry with a short federal patching deadline; 2) Older KEV entry whose due date has already passed — useful for reporting overdue remediation; 3) Vulnerability evaluated against the KEV catalog and confirmed not present — dateAdded/dueDate are not required when inKev is false.",
4903
4885
  "examples": [
4904
4886
  {
4905
- "$comment": "High-urgency case: recently added KEV entry with a short federal patching deadline.",
4906
4887
  "inKev": true,
4907
4888
  "dateAdded": "2026-03-15",
4908
4889
  "dueDate": "2026-04-05",
4909
4890
  "notes": "Active ransomware exploitation observed; apply vendor patch immediately."
4910
4891
  },
4911
4892
  {
4912
- "$comment": "Older KEV entry whose due date has already passed — useful for reporting overdue remediation.",
4913
4893
  "inKev": true,
4914
4894
  "dateAdded": "2023-11-07",
4915
4895
  "dueDate": "2023-11-28",
4916
4896
  "notes": "Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable."
4917
4897
  },
4918
4898
  {
4919
- "$comment": "Vulnerability evaluated against the KEV catalog and confirmed not present — dateAdded/dueDate are not required when inKev is false.",
4920
4899
  "inKev": false
4921
4900
  }
4922
4901
  ],