@mitre/hdf-schema 3.4.4 → 3.5.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-evidence-package/v3.4.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-evidence-package/v3.5.0",
4
4
  "title": "HDF Evidence Package",
5
5
  "description": "Bundles references to all HDF documents for audit, authorization, and compliance review. Each content entry references a document by type, URI, and checksum for integrity verification.",
6
6
  "type": "object",
@@ -10,6 +10,13 @@
10
10
  "contents"
11
11
  ],
12
12
  "properties": {
13
+ "externalReferences": {
14
+ "type": "array",
15
+ "items": {
16
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
17
+ },
18
+ "description": "Optional references to external artifacts relevant to this evidence package (CTI/STIX, BOMs, advisories, or any URI-addressable artifact) beyond the document references it already carries. Inert context; see External_Reference."
19
+ },
13
20
  "packageId": {
14
21
  "type": "string",
15
22
  "format": "uuid",
@@ -34,7 +41,7 @@
34
41
  "description": "URI to the hdf-plan document that drove this assessment. Used for completeness verification — every baseline in the plan should have a corresponding results document in this package."
35
42
  },
36
43
  "preparedBy": {
37
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
44
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
38
45
  "description": "Identity of who prepared this evidence package."
39
46
  },
40
47
  "preparedAt": {
@@ -62,7 +69,7 @@
62
69
  "description": "Summary of assessment completeness and compliance status."
63
70
  },
64
71
  "signature": {
65
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
72
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
66
73
  "description": "Digital signature covering the entire evidence package."
67
74
  },
68
75
  "labels": {
@@ -73,7 +80,7 @@
73
80
  "description": "Optional key-value labels for grouping and querying evidence packages."
74
81
  },
75
82
  "integrity": {
76
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Integrity",
83
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Integrity",
77
84
  "description": "Cryptographic integrity information for verifying this evidence package has not been tampered with."
78
85
  },
79
86
  "version": {
@@ -81,7 +88,7 @@
81
88
  "description": "Version of this evidence package."
82
89
  },
83
90
  "generator": {
84
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Generator",
91
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Generator",
85
92
  "description": "Information about the tool that generated this document."
86
93
  }
87
94
  },
@@ -118,7 +125,7 @@
118
125
  "description": "URI to the document. Can be a relative path or absolute URL."
119
126
  },
120
127
  "checksum": {
121
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
128
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
122
129
  "description": "Cryptographic checksum for verifying the referenced document's integrity."
123
130
  },
124
131
  "description": {
@@ -235,7 +242,7 @@
235
242
  "description": "The native format discriminator of the referenced artifact."
236
243
  },
237
244
  "checksum": {
238
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
245
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
239
246
  "description": "Cryptographic checksum of the referenced artifact for integrity verification.",
240
247
  "$comment": "Strongly recommended for external evidence — a point-in-time reference without an integrity hash is weakly auditable. Kept out of `description` so this usage-specific note does not aggregate into the shared Checksum type's generated Go doc comment (quicktype concatenates $ref-sibling descriptions onto the referenced type)."
241
248
  },
@@ -351,12 +358,140 @@
351
358
  "description": "Informational summary of assessment completeness. Not authoritative — tools should compute these from the referenced documents.",
352
359
  "title": "Completeness Check"
353
360
  },
354
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0": {
361
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0": {
355
362
  "$schema": "https://json-schema.org/draft/2020-12/schema",
356
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0",
363
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0",
357
364
  "title": "HDF Common Primitives",
358
365
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
359
366
  "$defs": {
367
+ "External_Reference": {
368
+ "type": "object",
369
+ "title": "External Reference",
370
+ "description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property. Purpose-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. `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. A reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
371
+ "required": [
372
+ "sourceName"
373
+ ],
374
+ "anyOf": [
375
+ {
376
+ "required": [
377
+ "externalId"
378
+ ]
379
+ },
380
+ {
381
+ "required": [
382
+ "href"
383
+ ]
384
+ },
385
+ {
386
+ "required": [
387
+ "description"
388
+ ]
389
+ }
390
+ ],
391
+ "properties": {
392
+ "sourceName": {
393
+ "type": "string",
394
+ "minLength": 1,
395
+ "description": "Name of the external system/source being referenced (e.g., 'cve', 'mitre-att&ck', 'stix', 'taxii', or any vendor label). Open string — not a closed enum. Use the `x-` prefix convention for custom/experimental sources, mirroring `bomType`."
396
+ },
397
+ "externalId": {
398
+ "type": "string",
399
+ "description": "Identifier of the artifact within `sourceName` (e.g., 'CVE-2021-44228' for source 'cve', 'T1059' for 'mitre-att&ck'). Cite by id without needing a URL. Together with `sourceName` this is a URN."
400
+ },
401
+ "href": {
402
+ "type": "string",
403
+ "format": "uri-reference",
404
+ "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`."
405
+ },
406
+ "description": {
407
+ "type": "string",
408
+ "description": "Human-readable description of what is referenced. Satisfies the at-least-one rule on its own when neither id nor href is available."
409
+ },
410
+ "rel": {
411
+ "type": "string",
412
+ "description": "Open relationship token describing how this reference relates to the referencing object. Deliberately open (cf. OSCAL `rel` allow-other, RFC 8288 extension relations). Documented starter vocabulary: 'reference' (generic), 'definition' (defines the concept), 'evidence' (supporting evidence), 'investigate' (a live pivot to investigate), 'canonical' (the authoritative source)."
413
+ },
414
+ "mediaType": {
415
+ "type": "string",
416
+ "description": "IANA media type of the referenced artifact when retrievable (RFC 6838), e.g., 'application/json'. Meaningful only with `href`."
417
+ },
418
+ "checksum": {
419
+ "$ref": "#/$defs/Checksum",
420
+ "description": "Integrity hash of the referenced artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Meaningful only with a retrievable `href`."
421
+ },
422
+ "addedBy": {
423
+ "$ref": "#/$defs/Identity",
424
+ "description": "Who attached this reference. Lightweight, flat attribution — a reference overrides nothing, so it has no chaining/superseding/disposition."
425
+ },
426
+ "addedAt": {
427
+ "type": "string",
428
+ "format": "date-time",
429
+ "description": "When this reference was attached (RFC 3339 / trimmed-UTC per HDF timestamp convention)."
430
+ },
431
+ "kind": {
432
+ "type": "string",
433
+ "minLength": 1,
434
+ "description": "Open token classifying the referenced/embedded payload, turning a bare reference into an enrichment envelope. Deliberately open (like `sourceName`/`rel`), not a closed enum. Documented starter vocabulary: 'threat-intel' (STIX/CTI object), 'annotation' (human triage note), 'exploitation' (EPSS/KEV signal carried as context), 'advisory' (vendor/security advisory). Use the `x-` prefix for custom kinds."
435
+ },
436
+ "document": {
437
+ "type": "object",
438
+ "additionalProperties": true,
439
+ "description": "Optional lossless embedded copy of the referenced artifact — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim. Composes 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. HDF 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)."
440
+ }
441
+ },
442
+ "unevaluatedProperties": false,
443
+ "examples": [
444
+ {
445
+ "$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
446
+ "sourceName": "cve",
447
+ "externalId": "CVE-2021-44228",
448
+ "rel": "definition"
449
+ },
450
+ {
451
+ "$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
452
+ "sourceName": "mitre-att&ck",
453
+ "externalId": "T1059",
454
+ "href": "https://attack.mitre.org/techniques/T1059/",
455
+ "rel": "canonical"
456
+ },
457
+ {
458
+ "$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
459
+ "sourceName": "stix",
460
+ "href": "https://cti.example.org/bundles/log4shell.json",
461
+ "rel": "investigate",
462
+ "mediaType": "application/json",
463
+ "checksum": {
464
+ "algorithm": "sha256",
465
+ "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
466
+ },
467
+ "addedBy": {
468
+ "type": "email",
469
+ "identifier": "analyst@agency.gov"
470
+ },
471
+ "addedAt": "2026-07-26T00:00:00Z"
472
+ },
473
+ {
474
+ "$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.",
475
+ "sourceName": "stix",
476
+ "externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
477
+ "href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
478
+ "rel": "investigate",
479
+ "kind": "threat-intel",
480
+ "document": {
481
+ "type": "vulnerability",
482
+ "spec_version": "2.1",
483
+ "id": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
484
+ "name": "CVE-2021-44228",
485
+ "external_references": [
486
+ {
487
+ "source_name": "cve",
488
+ "external_id": "CVE-2021-44228"
489
+ }
490
+ ]
491
+ }
492
+ }
493
+ ]
494
+ },
360
495
  "Hash_Algorithm": {
361
496
  "type": "string",
362
497
  "enum": [
@@ -980,6 +1115,13 @@
980
1115
  "Baseline_Metadata": {
981
1116
  "type": "object",
982
1117
  "properties": {
1118
+ "externalReferences": {
1119
+ "type": "array",
1120
+ "items": {
1121
+ "$ref": "#/$defs/External_Reference"
1122
+ },
1123
+ "description": "Optional references to external artifacts relevant to this baseline (CTI/STIX, advisories, source catalogs, or any URI-addressable artifact). Travels with the baseline definition. Inert context; see External_Reference."
1124
+ },
983
1125
  "name": {
984
1126
  "type": "string",
985
1127
  "description": "The name - must be unique."
@@ -1057,6 +1199,13 @@
1057
1199
  "Requirement_Core": {
1058
1200
  "type": "object",
1059
1201
  "properties": {
1202
+ "externalReferences": {
1203
+ "type": "array",
1204
+ "items": {
1205
+ "$ref": "#/$defs/External_Reference"
1206
+ },
1207
+ "description": "Optional references to external artifacts relevant to this requirement (CTI/STIX correlation, advisories, control/definition sources, or any URI-addressable artifact). Applies to both baseline requirement definitions and evaluated requirements. Inert context; see External_Reference."
1208
+ },
1060
1209
  "id": {
1061
1210
  "type": "string",
1062
1211
  "description": "The requirement identifier. Example: 'SV-238196'."
@@ -1143,7 +1292,7 @@
1143
1292
  },
1144
1293
  "examples": [
1145
1294
  {
1146
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.4.0 (backward compatibility).",
1295
+ "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
1147
1296
  "id": "SV-238196",
1148
1297
  "title": "The Ubuntu operating system must enforce password complexity",
1149
1298
  "impact": 0.5,
@@ -1280,9 +1429,9 @@
1280
1429
  }
1281
1430
  }
1282
1431
  },
1283
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0": {
1432
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0": {
1284
1433
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1285
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0",
1434
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0",
1286
1435
  "title": "HDF Extension Primitives",
1287
1436
  "description": "Extension types for waivers, attestations, generators, and integrity.",
1288
1437
  "$defs": {
@@ -1309,16 +1458,23 @@
1309
1458
  }
1310
1459
  ],
1311
1460
  "properties": {
1461
+ "externalReferences": {
1462
+ "type": "array",
1463
+ "items": {
1464
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1465
+ },
1466
+ "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."
1467
+ },
1312
1468
  "type": {
1313
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Override_Type",
1469
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
1314
1470
  "description": "The type of override applied to this requirement."
1315
1471
  },
1316
1472
  "status": {
1317
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
1473
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1318
1474
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
1319
1475
  },
1320
1476
  "impact": {
1321
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Impact_Override",
1477
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Impact_Override",
1322
1478
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
1323
1479
  },
1324
1480
  "reason": {
@@ -1326,7 +1482,7 @@
1326
1482
  "description": "Explanation for why this override was applied."
1327
1483
  },
1328
1484
  "appliedBy": {
1329
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
1485
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1330
1486
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
1331
1487
  },
1332
1488
  "appliedAt": {
@@ -1340,27 +1496,27 @@
1340
1496
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
1341
1497
  },
1342
1498
  "signature": {
1343
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
1499
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1344
1500
  "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."
1345
1501
  },
1346
1502
  "evidence": {
1347
1503
  "type": "array",
1348
1504
  "items": {
1349
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
1505
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1350
1506
  },
1351
1507
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
1352
1508
  },
1353
1509
  "previousChecksum": {
1354
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
1510
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1355
1511
  "description": "SHA-256 checksum of the previous amendment in chronological order. Creates a tamper-evident chain of amendments (similar to blockchain). Null for the first amendment on a requirement."
1356
1512
  },
1357
1513
  "cvss": {
1358
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
1514
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
1359
1515
  "$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.",
1360
1516
  "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."
1361
1517
  },
1362
1518
  "justification": {
1363
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Justification",
1519
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Justification",
1364
1520
  "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."
1365
1521
  }
1366
1522
  },
@@ -1389,6 +1545,34 @@
1389
1545
  "appliedAt": "2026-04-14T10:00:00Z",
1390
1546
  "expiresAt": "2026-10-14T00:00:00Z"
1391
1547
  },
1548
+ {
1549
+ "$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.",
1550
+ "type": "riskAdjustment",
1551
+ "impact": {
1552
+ "value": 0.9
1553
+ },
1554
+ "reason": "CVE-2021-44228 actively exploited in the wild per STIX threat intelligence",
1555
+ "appliedBy": {
1556
+ "identifier": "secops@agency.gov",
1557
+ "type": "email"
1558
+ },
1559
+ "appliedAt": "2026-07-27T00:00:00Z",
1560
+ "expiresAt": "2026-10-25T00:00:00Z",
1561
+ "externalReferences": [
1562
+ {
1563
+ "sourceName": "stix",
1564
+ "externalId": "sighting--a1b2c3d4-0000-4a2b-9c3d-000000000002",
1565
+ "kind": "threat-intel",
1566
+ "rel": "evidence",
1567
+ "document": {
1568
+ "type": "sighting",
1569
+ "spec_version": "2.1",
1570
+ "id": "sighting--a1b2c3d4-0000-4a2b-9c3d-000000000002",
1571
+ "sighting_of_ref": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001"
1572
+ }
1573
+ }
1574
+ ]
1575
+ },
1392
1576
  {
1393
1577
  "type": "falsePositive",
1394
1578
  "status": "passed",
@@ -1448,7 +1632,8 @@
1448
1632
  "type",
1449
1633
  "explanation",
1450
1634
  "appliedBy",
1451
- "appliedAt"
1635
+ "appliedAt",
1636
+ "expiresAt"
1452
1637
  ],
1453
1638
  "properties": {
1454
1639
  "type": {
@@ -1467,7 +1652,7 @@
1467
1652
  "description": "Detailed explanation of the plan, including what actions will be taken."
1468
1653
  },
1469
1654
  "appliedBy": {
1470
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
1655
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1471
1656
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
1472
1657
  },
1473
1658
  "appliedAt": {
@@ -1478,28 +1663,28 @@
1478
1663
  "expiresAt": {
1479
1664
  "type": "string",
1480
1665
  "format": "date-time",
1481
- "description": "Optional expiration date for this POA&M requiring review/renewal. ISO 8601 format."
1666
+ "description": "Required deadline for this POA&M. A POA&M is a time-boxed acceptance of an open finding; without a deadline it lets a failing requirement duck remediation indefinitely. Source a real date (e.g. a remediation target or vendor-fix date) — never a wall-clock default. ISO 8601 format."
1482
1667
  },
1483
1668
  "milestones": {
1484
1669
  "type": "array",
1485
1670
  "items": {
1486
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
1671
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
1487
1672
  },
1488
1673
  "description": "Optional array of milestones tracking progress toward completion."
1489
1674
  },
1490
1675
  "signature": {
1491
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
1676
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1492
1677
  "description": "Optional digital signature for enhanced trust and non-repudiation."
1493
1678
  },
1494
1679
  "evidence": {
1495
1680
  "type": "array",
1496
1681
  "items": {
1497
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
1682
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1498
1683
  },
1499
1684
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
1500
1685
  },
1501
1686
  "previousChecksum": {
1502
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
1687
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1503
1688
  "description": "SHA-256 checksum of the previous amendment in chronological order. Creates a tamper-evident chain of amendments (similar to blockchain). Null for the first amendment on a requirement."
1504
1689
  }
1505
1690
  },
@@ -1512,6 +1697,7 @@
1512
1697
  "type": "email"
1513
1698
  },
1514
1699
  "appliedAt": "2025-12-01T09:00:00Z",
1700
+ "expiresAt": "2099-12-31T00:00:00Z",
1515
1701
  "milestones": [
1516
1702
  {
1517
1703
  "description": "Update base Docker image to use OpenSSL 3.0.x",
@@ -1544,7 +1730,7 @@
1544
1730
  "description": "Automated POA&M creation from vulnerability scan"
1545
1731
  },
1546
1732
  "appliedAt": "2025-11-28T14:00:00Z",
1547
- "expiresAt": "2026-02-28T00:00:00Z",
1733
+ "expiresAt": "2099-12-31T00:00:00Z",
1548
1734
  "milestones": [
1549
1735
  {
1550
1736
  "description": "Configure firewall rules to restrict database access to management VLAN",
@@ -1579,7 +1765,7 @@
1579
1765
  "type": "email"
1580
1766
  },
1581
1767
  "appliedAt": "2025-12-05T10:00:00Z",
1582
- "expiresAt": "2026-04-01T00:00:00Z",
1768
+ "expiresAt": "2099-12-31T00:00:00Z",
1583
1769
  "milestones": [
1584
1770
  {
1585
1771
  "description": "Complete migration to replacement system",
@@ -1631,7 +1817,8 @@
1631
1817
  },
1632
1818
  "format": {
1633
1819
  "type": "string",
1634
- "description": "The file format, if it is a recognized named format shared by multiple tools. Examples: 'SARIF', 'XCCDF'. Omit for tool-specific formats where the tool name already implies the format (Nessus XML, gosec JSON)."
1820
+ "description": "The named format of the source data, when it follows a recognized format specification with its own identity: an interchange format emitted by many tools ('SARIF', 'XCCDF', 'OSCAL') or one of several named output formats a single tool produces ('FVDL', 'exec-json', 'FPF'). Never a serialization structure — 'JSON', 'XML', and 'CSV' are encodings, not formats. Omit for a tool's native output: an absent format means the tool's own shape, and data arriving as a named format is converted by that format's converter, which sets this field alongside the producing tool's name.",
1821
+ "$comment": "Format-not-serialization rule decided 2026-08-01; bare JSON/XML/CSV labels were swept from the converters at the same time."
1635
1822
  }
1636
1823
  },
1637
1824
  "description": "The security tool that produced the assessment data represented in this HDF file. Aligns with SARIF, OSCAL, and CycloneDX terminology.",
@@ -1650,7 +1837,7 @@
1650
1837
  },
1651
1838
  "properties": {
1652
1839
  "algorithm": {
1653
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Hash_Algorithm",
1840
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Hash_Algorithm",
1654
1841
  "description": "The hash algorithm used for the checksum."
1655
1842
  },
1656
1843
  "checksum": {
@@ -1683,9 +1870,9 @@
1683
1870
  }
1684
1871
  }
1685
1872
  },
1686
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0": {
1873
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0": {
1687
1874
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1688
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0",
1875
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0",
1689
1876
  "title": "HDF Amendment Primitives",
1690
1877
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
1691
1878
  "$defs": {
@@ -1793,6 +1980,13 @@
1793
1980
  ]
1794
1981
  },
1795
1982
  "properties": {
1983
+ "externalReferences": {
1984
+ "type": "array",
1985
+ "items": {
1986
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1987
+ },
1988
+ "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."
1989
+ },
1796
1990
  "type": {
1797
1991
  "$ref": "#/$defs/Override_Type",
1798
1992
  "description": "The type of amendment."
@@ -1806,7 +2000,7 @@
1806
2000
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
1807
2001
  },
1808
2002
  "status": {
1809
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
2003
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1810
2004
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
1811
2005
  },
1812
2006
  "impact": {
@@ -1818,7 +2012,7 @@
1818
2012
  "description": "Justification for this amendment."
1819
2013
  },
1820
2014
  "appliedBy": {
1821
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
2015
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1822
2016
  "description": "Identity of who applied this amendment."
1823
2017
  },
1824
2018
  "appliedAt": {
@@ -1834,20 +2028,20 @@
1834
2028
  "evidence": {
1835
2029
  "type": "array",
1836
2030
  "items": {
1837
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
2031
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1838
2032
  },
1839
2033
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
1840
2034
  },
1841
2035
  "signature": {
1842
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
2036
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1843
2037
  "description": "Digital signature for non-repudiation."
1844
2038
  },
1845
2039
  "previousChecksum": {
1846
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
2040
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1847
2041
  "description": "Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null for the first amendment."
1848
2042
  },
1849
2043
  "cvss": {
1850
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
2044
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
1851
2045
  "$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.",
1852
2046
  "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."
1853
2047
  },
@@ -1858,7 +2052,7 @@
1858
2052
  "milestones": {
1859
2053
  "type": "array",
1860
2054
  "items": {
1861
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
2055
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
1862
2056
  },
1863
2057
  "description": "Remediation milestones (primarily for POA&M type amendments)."
1864
2058
  },
@@ -1875,7 +2069,7 @@
1875
2069
  "affectedPackages": {
1876
2070
  "type": "array",
1877
2071
  "items": {
1878
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0#/$defs/Affected_Package"
2072
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
1879
2073
  },
1880
2074
  "description": "Software packages this amendment is scoped to, distinct from componentRef (which scopes to an HDF-internal Component by UUID). Use 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. Symmetric with Evaluated_Requirement.affectedPackages, which scopes findings to the same package vocabulary. When omitted, the amendment applies system-wide (or only to componentRef when that is set)."
1881
2075
  }
@@ -2008,9 +2202,9 @@
2008
2202
  }
2009
2203
  }
2010
2204
  },
2011
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0": {
2205
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0": {
2012
2206
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2013
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0",
2207
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0",
2014
2208
  "title": "HDF Result Primitives",
2015
2209
  "description": "Types for representing assessment results and statuses.",
2016
2210
  "$defs": {
@@ -2141,9 +2335,9 @@
2141
2335
  }
2142
2336
  }
2143
2337
  },
2144
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0": {
2338
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0": {
2145
2339
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2146
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0",
2340
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0",
2147
2341
  "title": "HDF CVSS Primitives",
2148
2342
  "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).",
2149
2343
  "$defs": {
@@ -2345,9 +2539,9 @@
2345
2539
  }
2346
2540
  }
2347
2541
  },
2348
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0": {
2542
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0": {
2349
2543
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2350
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0",
2544
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0",
2351
2545
  "title": "HDF Affected Package Primitives",
2352
2546
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
2353
2547
  "$defs": {