@mitre/hdf-schema 3.3.2 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.3.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.4.0",
4
4
  "title": "HDF System",
5
5
  "description": "Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP system-characteristics and FedRAMP system inventory.",
6
6
  "type": "object",
@@ -16,7 +16,7 @@
16
16
  "description": "Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of file location. Optional in casual use, expected in production documents."
17
17
  },
18
18
  "owner": {
19
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Identity",
19
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
20
20
  "description": "Team or individual responsible for this system's authorization and compliance. Maps to OSCAL responsible-party with role 'system-owner'."
21
21
  },
22
22
  "name": {
@@ -37,7 +37,7 @@
37
37
  "description": "Description of the system's purpose and mission."
38
38
  },
39
39
  "authorizationStatus": {
40
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.3.0#/$defs/Authorization_Status",
40
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0#/$defs/Authorization_Status",
41
41
  "description": "Current Authorization to Operate (ATO) status."
42
42
  },
43
43
  "authorizationDate": {
@@ -46,7 +46,7 @@
46
46
  "description": "Date the current authorization status was granted. ISO 8601 format."
47
47
  },
48
48
  "categorizationLevel": {
49
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.3.0#/$defs/Categorization_Level",
49
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0#/$defs/Categorization_Level",
50
50
  "description": "FIPS 199 security categorization (impact level)."
51
51
  },
52
52
  "boundaryDescription": {
@@ -57,24 +57,31 @@
57
57
  "type": "array",
58
58
  "minItems": 1,
59
59
  "items": {
60
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.3.0#/$defs/Component"
60
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.4.0#/$defs/Component"
61
61
  },
62
- "description": "System components within the authorization boundary. Uses the full polymorphic Component type with stable identity (componentId), external references, and SBOM support."
62
+ "description": "System components within the authorization boundary. Uses the full polymorphic Component type with stable identity (componentId), external references, and generalized BOM attachment (boms[])."
63
63
  },
64
64
  "controlDesignations": {
65
65
  "type": "array",
66
66
  "items": {
67
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.3.0#/$defs/Control_Designation"
67
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0#/$defs/Control_Designation"
68
68
  },
69
69
  "description": "Declares which controls are common, hybrid, or system-specific, and which component provides them. Maps to NIST SP 800-53 control designations and OSCAL leveraged-authorizations."
70
70
  },
71
71
  "dataFlows": {
72
72
  "type": "array",
73
73
  "items": {
74
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.3.0#/$defs/Data_Flow"
74
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.4.0#/$defs/Data_Flow"
75
75
  },
76
76
  "description": "Inter-component data flows describing how components communicate. Supports local, cross-system, and external flows. Replaces the interconnections[] field."
77
77
  },
78
+ "boms": {
79
+ "type": "array",
80
+ "items": {
81
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.4.0#/$defs/Bom"
82
+ },
83
+ "description": "System-scoped Bills of Materials whose subject is the authorization boundary rather than a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM). Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See primitives/bom.schema.json."
84
+ },
78
85
  "labels": {
79
86
  "type": "object",
80
87
  "additionalProperties": {
@@ -83,7 +90,7 @@
83
90
  "description": "Optional key-value labels for grouping and querying systems."
84
91
  },
85
92
  "integrity": {
86
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.3.0#/$defs/Integrity",
93
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Integrity",
87
94
  "description": "Cryptographic integrity information for verifying this system document has not been tampered with."
88
95
  },
89
96
  "version": {
@@ -91,7 +98,7 @@
91
98
  "description": "Version of this system document."
92
99
  },
93
100
  "generator": {
94
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.3.0#/$defs/Generator",
101
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Generator",
95
102
  "description": "Information about the tool that generated this system document."
96
103
  }
97
104
  },
@@ -114,8 +121,13 @@
114
121
  "RHEL9-STIG",
115
122
  "DISA-Container-STIG"
116
123
  ],
117
- "sbomRef": "https://artifacts.agency.gov/sbom/webtier-2026-03.cdx.json",
118
- "sbomFormat": "cyclonedx"
124
+ "boms": [
125
+ {
126
+ "bomType": "sbom",
127
+ "format": "cyclonedx",
128
+ "ref": "https://artifacts.agency.gov/sbom/webtier-2026-03.cdx.json"
129
+ }
130
+ ]
119
131
  },
120
132
  {
121
133
  "name": "DatabaseTier",
@@ -139,9 +151,9 @@
139
151
  }
140
152
  ],
141
153
  "$defs": {
142
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0": {
154
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0": {
143
155
  "$schema": "https://json-schema.org/draft/2020-12/schema",
144
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0",
156
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0",
145
157
  "title": "HDF Common Primitives",
146
158
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
147
159
  "$defs": {
@@ -150,9 +162,10 @@
150
162
  "enum": [
151
163
  "sha256",
152
164
  "sha384",
153
- "sha512"
165
+ "sha512",
166
+ "blake3"
154
167
  ],
155
- "description": "Supported cryptographic hash algorithms for checksums and integrity verification.",
168
+ "description": "Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers container-image and other artifact digests that use it.",
156
169
  "title": "Hash Algorithm"
157
170
  },
158
171
  "Requirement_Group": {
@@ -413,10 +426,11 @@
413
426
  "email",
414
427
  "username",
415
428
  "system",
429
+ "agent",
416
430
  "simple",
417
431
  "other"
418
432
  ],
419
- "description": "The type of identifier. Use 'email' for email addresses, 'username' for user accounts, 'system' for automated systems, 'simple' for basic string identifiers without additional classification, or 'other' for custom identity systems."
433
+ "description": "The type of identifier. Use 'email' for email addresses, 'username' for user accounts, 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent' for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF, 'simple' for basic string identifiers without additional classification, or 'other' for custom identity systems."
420
434
  },
421
435
  "description": {
422
436
  "type": "string",
@@ -437,6 +451,11 @@
437
451
  "type": "system",
438
452
  "identifier": "automated-scanner-01",
439
453
  "description": "Nightly compliance scan pipeline"
454
+ },
455
+ {
456
+ "type": "agent",
457
+ "identifier": "cve-enrichment-bot/v0.4.2",
458
+ "description": "OpenAI GPT-4 via internal CVE-enrichment tool; proposes environmental CVSS for human review"
440
459
  }
441
460
  ],
442
461
  "description": "Represents an identity that performed an action, such as capturing evidence or applying an override.",
@@ -924,7 +943,7 @@
924
943
  },
925
944
  "examples": [
926
945
  {
927
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.3.0 (backward compatibility).",
946
+ "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.4.0 (backward compatibility).",
928
947
  "id": "SV-238196",
929
948
  "title": "The Ubuntu operating system must enforce password complexity",
930
949
  "impact": 0.5,
@@ -1061,9 +1080,9 @@
1061
1080
  }
1062
1081
  }
1063
1082
  },
1064
- "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.3.0": {
1083
+ "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0": {
1065
1084
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1066
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.3.0",
1085
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0",
1067
1086
  "title": "HDF System Primitives",
1068
1087
  "description": "Types for describing system architecture, authorization boundaries, and components.",
1069
1088
  "$defs": {
@@ -1114,7 +1133,7 @@
1114
1133
  "description": "Rationale for why this override is needed."
1115
1134
  },
1116
1135
  "approvedBy": {
1117
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Identity",
1136
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
1118
1137
  "description": "Identity of the person or system that approved this override."
1119
1138
  }
1120
1139
  },
@@ -1196,11 +1215,11 @@
1196
1215
  }
1197
1216
  }
1198
1217
  },
1199
- "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.3.0": {
1218
+ "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.4.0": {
1200
1219
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1201
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.3.0",
1220
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.4.0",
1202
1221
  "title": "HDF Component Primitives",
1203
- "description": "First-class system component with identity, polymorphic type, SBOM embedding, and system-binding properties. Components are the successor to Targets, adding stable identity (componentId), external system cross-references, and software inventory.",
1222
+ "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).",
1204
1223
  "$defs": {
1205
1224
  "Base_Component": {
1206
1225
  "type": "object",
@@ -1224,9 +1243,11 @@
1224
1243
  "application",
1225
1244
  "artifact",
1226
1245
  "network",
1227
- "database"
1246
+ "database",
1247
+ "aiModel",
1248
+ "dataset"
1228
1249
  ],
1229
- "description": "Component type discriminator. Same values as Target types."
1250
+ "description": "Component type discriminator. Same values as Target types, plus aiModel and dataset (thin AI subject components whose detail lives in an attached ai-model / dataset BOM)."
1230
1251
  },
1231
1252
  "name": {
1232
1253
  "type": "string",
@@ -1242,7 +1263,7 @@
1242
1263
  "description": "Description of this component's role or purpose."
1243
1264
  },
1244
1265
  "owner": {
1245
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Identity",
1266
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
1246
1267
  "description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
1247
1268
  },
1248
1269
  "externalIds": {
@@ -1259,23 +1280,19 @@
1259
1280
  },
1260
1281
  "description": "Optional key-value labels for flexible grouping. Well-known keys: system, component, environment, region, team. Values must be strings."
1261
1282
  },
1262
- "sbom": {
1263
- "description": "Embedded CycloneDX or SPDX SBOM document representing this component's software inventory. The sbomFormat field determines which format constraints apply.",
1264
- "$comment": "Validated conditionally: CycloneDX requires bomFormat='CycloneDX' + specVersion; SPDX requires spdxVersion + SPDXID. Full SBOM schema validation is a tool-level concern."
1265
- },
1266
- "sbomRef": {
1267
- "type": "string",
1268
- "format": "uri-reference",
1269
- "description": "URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a relative path, absolute URI, or fragment identifier."
1283
+ "boms": {
1284
+ "type": "array",
1285
+ "items": {
1286
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.4.0#/$defs/Bom"
1287
+ },
1288
+ "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."
1270
1289
  },
1271
- "sbomFormat": {
1272
- "type": "string",
1273
- "title": "SBOM Format",
1274
- "enum": [
1275
- "cyclonedx",
1276
- "spdx"
1277
- ],
1278
- "description": "Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present."
1290
+ "integrity": {
1291
+ "type": "array",
1292
+ "items": {
1293
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum"
1294
+ },
1295
+ "description": "Cryptographic integrity of this component's underlying artifact — model weights or shards, dataset archive, container image, or package bytes. An array supports multi-file/sharded artifacts. This 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). Distinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence Integrity type."
1279
1296
  },
1280
1297
  "baselineRefs": {
1281
1298
  "type": "array",
@@ -1287,115 +1304,42 @@
1287
1304
  "inputOverrides": {
1288
1305
  "type": "array",
1289
1306
  "items": {
1290
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.3.0#/$defs/Input_Override"
1307
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0#/$defs/Input_Override"
1291
1308
  },
1292
1309
  "description": "System-specific overrides for baseline input values."
1293
1310
  },
1294
1311
  "targetSelector": {
1295
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.3.0#/$defs/Target_Selector",
1312
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0#/$defs/Target_Selector",
1296
1313
  "description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
1297
1314
  }
1298
1315
  },
1299
- "allOf": [
1316
+ "examples": [
1300
1317
  {
1301
- "if": {
1302
- "allOf": [
1303
- {
1304
- "properties": {
1305
- "sbomFormat": {
1306
- "const": "cyclonedx"
1307
- }
1308
- },
1309
- "required": [
1310
- "sbomFormat"
1311
- ]
1312
- },
1313
- {
1314
- "properties": {
1315
- "sbom": {
1316
- "type": "object"
1317
- }
1318
- },
1319
- "required": [
1320
- "sbom"
1321
- ]
1322
- }
1323
- ]
1318
+ "type": "aiModel",
1319
+ "name": "Llama-2-7b-chat (finetuned)",
1320
+ "componentId": "b7c8d9e0-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
1321
+ "owner": {
1322
+ "type": "email",
1323
+ "identifier": "ml-platform@agency.gov"
1324
1324
  },
1325
- "then": {
1326
- "properties": {
1327
- "sbom": {
1328
- "type": "object",
1329
- "required": [
1330
- "bomFormat",
1331
- "specVersion"
1332
- ],
1333
- "properties": {
1334
- "bomFormat": {
1335
- "type": "string",
1336
- "const": "CycloneDX",
1337
- "description": "Must be 'CycloneDX' for CycloneDX SBOM documents."
1338
- },
1339
- "specVersion": {
1340
- "type": "string",
1341
- "description": "CycloneDX specification version (e.g., '1.4', '1.5', '1.6')."
1342
- }
1343
- },
1344
- "additionalProperties": true
1345
- }
1325
+ "integrity": [
1326
+ {
1327
+ "algorithm": "sha256",
1328
+ "value": "d1f2e3a4b5c6978869504132a1b2c3d4e5f6071829304152637485960a1b2c3d"
1346
1329
  }
1347
- }
1348
- },
1349
- {
1350
- "if": {
1351
- "allOf": [
1352
- {
1353
- "properties": {
1354
- "sbomFormat": {
1355
- "const": "spdx"
1356
- }
1357
- },
1358
- "required": [
1359
- "sbomFormat"
1360
- ]
1361
- },
1362
- {
1363
- "properties": {
1364
- "sbom": {
1365
- "type": "object"
1366
- }
1367
- },
1368
- "required": [
1369
- "sbom"
1370
- ]
1371
- }
1372
- ]
1373
- },
1374
- "then": {
1375
- "properties": {
1376
- "sbom": {
1377
- "type": "object",
1378
- "required": [
1379
- "spdxVersion",
1380
- "SPDXID"
1381
- ],
1382
- "properties": {
1383
- "spdxVersion": {
1384
- "type": "string",
1385
- "description": "SPDX specification version (e.g., 'SPDX-2.3')."
1386
- },
1387
- "SPDXID": {
1388
- "type": "string",
1389
- "description": "SPDX document identifier (e.g., 'SPDXRef-DOCUMENT')."
1390
- }
1391
- },
1392
- "additionalProperties": true
1330
+ ],
1331
+ "boms": [
1332
+ {
1333
+ "bomType": "ai-model",
1334
+ "format": "cyclonedx-ml",
1335
+ "model": {
1336
+ "adaptationType": "finetune"
1393
1337
  }
1394
1338
  }
1395
- }
1339
+ ]
1396
1340
  }
1397
1341
  ],
1398
- "description": "Base properties shared by all component types. Extends the Target concept with stable identity, external references, and SBOM embedding.",
1342
+ "description": "Base properties shared by all component types. Extends the Target concept with stable identity, external references, generalized BOM attachment (boms[]), and unified artifact integrity (integrity[]).",
1399
1343
  "title": "Base Component"
1400
1344
  },
1401
1345
  "Component": {
@@ -1434,6 +1378,12 @@
1434
1378
  },
1435
1379
  {
1436
1380
  "$ref": "#/$defs/Database_Component"
1381
+ },
1382
+ {
1383
+ "$ref": "#/$defs/AI_Model_Component"
1384
+ },
1385
+ {
1386
+ "$ref": "#/$defs/Dataset_Component"
1437
1387
  }
1438
1388
  ]
1439
1389
  },
@@ -1448,10 +1398,18 @@
1448
1398
  "type": {
1449
1399
  "const": "host"
1450
1400
  },
1401
+ "hostname": {
1402
+ "type": "string",
1403
+ "description": "Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name the source reports; do not derive it from the FQDN."
1404
+ },
1451
1405
  "fqdn": {
1452
1406
  "type": "string",
1453
1407
  "format": "hostname",
1454
- "description": "Fully qualified domain name."
1408
+ "description": "Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname' (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the schema does not enforce case so source fidelity is preserved on round-trip."
1409
+ },
1410
+ "domain": {
1411
+ "type": "string",
1412
+ "description": "Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only from a source that carries directory membership."
1455
1413
  },
1456
1414
  "ipAddress": {
1457
1415
  "anyOf": [
@@ -1484,10 +1442,13 @@
1484
1442
  ],
1485
1443
  "examples": [
1486
1444
  {
1445
+ "$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.",
1487
1446
  "type": "host",
1488
1447
  "name": "web-server-prod-01",
1489
1448
  "componentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
1449
+ "hostname": "web01",
1490
1450
  "fqdn": "web01.prod.example.com",
1451
+ "domain": "CORP",
1491
1452
  "ipAddress": "10.0.1.50",
1492
1453
  "osName": "Ubuntu",
1493
1454
  "osVersion": "22.04 LTS",
@@ -1495,6 +1456,16 @@
1495
1456
  "cmdb": "ASSET-12345",
1496
1457
  "aws": "i-0abc123def456789"
1497
1458
  }
1459
+ },
1460
+ {
1461
+ "$comment": "Standalone/workgroup host: has a short hostname but no directory domain — 'domain' is omitted rather than fabricated from the FQDN suffix.",
1462
+ "type": "host",
1463
+ "name": "kiosk-lab-07",
1464
+ "hostname": "kiosk-lab-07",
1465
+ "fqdn": "kiosk-lab-07.lab.example.com",
1466
+ "ipAddress": "192.168.4.7",
1467
+ "osName": "Windows",
1468
+ "osVersion": "11 23H2"
1498
1469
  }
1499
1470
  ],
1500
1471
  "description": "A physical or virtual server, workstation, or network device.",
@@ -1526,16 +1497,26 @@
1526
1497
  "tag": {
1527
1498
  "type": "string",
1528
1499
  "description": "Image tag. Example: '1.25'."
1529
- },
1530
- "digest": {
1531
- "type": "string",
1532
- "pattern": "^(sha256:[a-f0-9]{64}|sha512:[a-f0-9]{128}|blake3:[a-f0-9]{64})$",
1533
- "description": "Image digest for immutable reference."
1534
1500
  }
1535
1501
  }
1536
1502
  }
1537
1503
  ],
1538
- "description": "A static container image (not running).",
1504
+ "examples": [
1505
+ {
1506
+ "type": "containerImage",
1507
+ "name": "nginx",
1508
+ "registry": "docker.io",
1509
+ "repository": "library/nginx",
1510
+ "tag": "1.25-alpine",
1511
+ "integrity": [
1512
+ {
1513
+ "algorithm": "sha256",
1514
+ "value": "a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d"
1515
+ }
1516
+ ]
1517
+ }
1518
+ ],
1519
+ "description": "A static container image (not running). Image integrity — formerly the 'digest' field — is expressed via the shared Base_Component.integrity array.",
1539
1520
  "title": "Container Image Component"
1540
1521
  },
1541
1522
  "Container_Instance_Component": {
@@ -1612,7 +1593,7 @@
1612
1593
  "const": "cloudAccount"
1613
1594
  },
1614
1595
  "provider": {
1615
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Cloud_Provider",
1596
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Cloud_Provider",
1616
1597
  "description": "Cloud provider."
1617
1598
  },
1618
1599
  "accountId": {
@@ -1651,7 +1632,7 @@
1651
1632
  "const": "cloudResource"
1652
1633
  },
1653
1634
  "provider": {
1654
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Cloud_Provider",
1635
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Cloud_Provider",
1655
1636
  "description": "Cloud provider."
1656
1637
  },
1657
1638
  "resourceType": {
@@ -1758,15 +1739,26 @@
1758
1739
  "version": {
1759
1740
  "type": "string",
1760
1741
  "description": "Package version."
1761
- },
1762
- "checksum": {
1763
- "type": "string",
1764
- "description": "Package checksum for verification."
1765
1742
  }
1766
1743
  }
1767
1744
  }
1768
1745
  ],
1769
- "description": "A software artifact or dependency (for SCA tools).",
1746
+ "examples": [
1747
+ {
1748
+ "type": "artifact",
1749
+ "name": "express",
1750
+ "packageManager": "npm",
1751
+ "packageName": "express",
1752
+ "version": "4.18.2",
1753
+ "integrity": [
1754
+ {
1755
+ "algorithm": "sha512",
1756
+ "value": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
1757
+ }
1758
+ ]
1759
+ }
1760
+ ],
1761
+ "description": "A software artifact or dependency (for SCA tools). Package integrity — formerly the 'checksum' field — is expressed via the shared Base_Component.integrity array.",
1770
1762
  "title": "Artifact Component"
1771
1763
  },
1772
1764
  "Network_Component": {
@@ -1828,12 +1820,593 @@
1828
1820
  ],
1829
1821
  "description": "A database instance.",
1830
1822
  "title": "Database Component"
1823
+ },
1824
+ "AI_Model_Component": {
1825
+ "allOf": [
1826
+ {
1827
+ "$ref": "#/$defs/Base_Component"
1828
+ },
1829
+ {
1830
+ "type": "object",
1831
+ "properties": {
1832
+ "type": {
1833
+ "const": "aiModel"
1834
+ },
1835
+ "modelId": {
1836
+ "type": "string",
1837
+ "description": "Provider/registry identifier for the model. Examples: a Hugging Face repo id ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model BOM(s) and to lineage references from other models."
1838
+ },
1839
+ "version": {
1840
+ "type": "string",
1841
+ "description": "Model version, revision, or checkpoint tag."
1842
+ }
1843
+ }
1844
+ }
1845
+ ],
1846
+ "examples": [
1847
+ {
1848
+ "type": "aiModel",
1849
+ "name": "Llama-2-7b-chat (finetuned)",
1850
+ "componentId": "b7c8d9e0-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
1851
+ "modelId": "acme/llama-2-7b-chat-support",
1852
+ "version": "1.2.0",
1853
+ "integrity": [
1854
+ {
1855
+ "algorithm": "sha256",
1856
+ "value": "d1f2e3a4b5c6978869504132a1b2c3d4e5f6071829304152637485960a1b2c3d"
1857
+ }
1858
+ ],
1859
+ "boms": [
1860
+ {
1861
+ "bomType": "ai-model",
1862
+ "format": "cyclonedx-ml",
1863
+ "model": {
1864
+ "modelArchitecture": "transformer",
1865
+ "parameterCount": 6738415616,
1866
+ "serializationFormat": "safetensors",
1867
+ "adaptationType": "finetune",
1868
+ "baseModelRef": "meta-llama/Llama-2-7b-hf"
1869
+ }
1870
+ }
1871
+ ]
1872
+ }
1873
+ ],
1874
+ "description": "A thin AI-model component: identity and correlation only (parallel to Host_Component's fqdn/ip). All model detail — architecture, parameter count, serialization format, lineage — lives in an attached ai-model BOM (boms[]), never on the component itself.",
1875
+ "title": "AI Model Component"
1876
+ },
1877
+ "Dataset_Component": {
1878
+ "allOf": [
1879
+ {
1880
+ "$ref": "#/$defs/Base_Component"
1881
+ },
1882
+ {
1883
+ "type": "object",
1884
+ "properties": {
1885
+ "type": {
1886
+ "const": "dataset"
1887
+ },
1888
+ "datasetId": {
1889
+ "type": "string",
1890
+ "description": "Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to its dataset BOM(s) and to datasetRefs from ai-model components."
1891
+ },
1892
+ "version": {
1893
+ "type": "string",
1894
+ "description": "Dataset version, release identifier, or — for highly dynamic datasets — a timestamped release marker."
1895
+ }
1896
+ }
1897
+ }
1898
+ ],
1899
+ "examples": [
1900
+ {
1901
+ "type": "dataset",
1902
+ "name": "UltraChat-200k (filtered)",
1903
+ "componentId": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
1904
+ "datasetId": "acme/ultrachat-200k-filtered",
1905
+ "version": "2026-06-01",
1906
+ "integrity": [
1907
+ {
1908
+ "algorithm": "sha256",
1909
+ "value": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
1910
+ }
1911
+ ],
1912
+ "boms": [
1913
+ {
1914
+ "bomType": "dataset",
1915
+ "format": "croissant",
1916
+ "dataset": {
1917
+ "recordCount": 180000,
1918
+ "datasetFormat": "parquet",
1919
+ "dataClassification": "public",
1920
+ "baseDatasetRefs": [
1921
+ "HuggingFaceH4/ultrachat_200k"
1922
+ ],
1923
+ "derivation": "filtered"
1924
+ }
1925
+ }
1926
+ ]
1927
+ }
1928
+ ],
1929
+ "description": "A thin dataset component: identity and correlation only, symmetric with AI_Model_Component. All dataset detail — record count, format, classification, lineage — lives in an attached dataset BOM (boms[]), never on the component itself.",
1930
+ "title": "Dataset Component"
1931
+ }
1932
+ }
1933
+ },
1934
+ "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.4.0": {
1935
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1936
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.4.0",
1937
+ "title": "HDF BOM Primitives",
1938
+ "description": "Generalized Bill-of-Materials / manifest representation. One 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). Subject identity (name, version, componentId) is inherited from the host component or system — the BOM never re-owns it. See ADR-0001.",
1939
+ "$defs": {
1940
+ "Bom_Type": {
1941
+ "type": "string",
1942
+ "title": "BOM Type",
1943
+ "anyOf": [
1944
+ {
1945
+ "enum": [
1946
+ "sbom",
1947
+ "ai-model",
1948
+ "dataset",
1949
+ "hbom",
1950
+ "cbom",
1951
+ "saasbom",
1952
+ "obom",
1953
+ "mbom",
1954
+ "kbom"
1955
+ ]
1956
+ },
1957
+ {
1958
+ "pattern": "^x-[a-z0-9]+(-[a-z0-9]+)*$"
1959
+ }
1960
+ ],
1961
+ "description": "Discriminator for the manifest kind. Reserved, CycloneDX-aligned set: sbom (software), ai-model, dataset, hbom (hardware), cbom (cryptography), saasbom (services), obom (operations), mbom (manufacturing), kbom (Kubernetes). Normalized now: sbom, ai-model, dataset; reserved + passthrough-capable now, normalized in later releases: the rest. Custom or experimental kinds MUST use an 'x-' prefix (e.g. 'x-threat-model') so they cannot collide with a value later promoted into the reserved set; a non-'x-' value outside the reserved set is invalid. Adding a reserved value is a schema version bump. VEX/VDR/SecurityProfile are vulnerability assertions, not BOMs, and are intentionally excluded."
1962
+ },
1963
+ "Bom": {
1964
+ "type": "object",
1965
+ "title": "Bill of Materials",
1966
+ "additionalProperties": false,
1967
+ "required": [
1968
+ "bomType",
1969
+ "format"
1970
+ ],
1971
+ "properties": {
1972
+ "bomType": {
1973
+ "$ref": "#/$defs/Bom_Type",
1974
+ "description": "The manifest kind. Determines which normalized type-extension (model/dataset/packages) may appear."
1975
+ },
1976
+ "format": {
1977
+ "type": "string",
1978
+ "description": "Source manifest format the BOM was produced from or references. Examples: cyclonedx, cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no schema change; the converter that emits the BOM owns the value."
1979
+ },
1980
+ "ref": {
1981
+ "type": "string",
1982
+ "format": "uri-reference",
1983
+ "description": "Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native manifest document. Present for externally-hosted BOMs."
1984
+ },
1985
+ "document": {
1986
+ "type": "object",
1987
+ "description": "Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or SPDX object). HDF does not constrain its internal shape — full manifest validation is a tool-level concern."
1988
+ },
1989
+ "hashes": {
1990
+ "type": "array",
1991
+ "items": {
1992
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum"
1993
+ },
1994
+ "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."
1995
+ },
1996
+ "uniqueId": {
1997
+ "type": "string",
1998
+ "description": "Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX documentNamespace). Correlates the same BOM across evidence packages."
1999
+ },
2000
+ "license": {
2001
+ "type": [
2002
+ "string",
2003
+ "null"
2004
+ ],
2005
+ "description": "Optional license of the BOM document as a whole (SPDX license expression). Nullable and often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses live in the type-extension, not here."
2006
+ },
2007
+ "model": {
2008
+ "$ref": "#/$defs/AI_Model_Extension",
2009
+ "description": "Normalized ai-model extension. Permitted only when bomType is ai-model."
2010
+ },
2011
+ "dataset": {
2012
+ "$ref": "#/$defs/Dataset_Extension",
2013
+ "description": "Normalized dataset extension. Permitted only when bomType is dataset."
2014
+ },
2015
+ "packages": {
2016
+ "type": "array",
2017
+ "items": {
2018
+ "$ref": "#/$defs/SBOM_Package"
2019
+ },
2020
+ "description": "Normalized sbom extension: the flattened software package inventory. Permitted only when bomType is sbom."
2021
+ }
2022
+ },
2023
+ "allOf": [
2024
+ {
2025
+ "$comment": "Three-tier discipline: the ai-model extension may appear only on an ai-model BOM.",
2026
+ "if": {
2027
+ "properties": {
2028
+ "bomType": {
2029
+ "const": "ai-model"
2030
+ }
2031
+ },
2032
+ "required": [
2033
+ "bomType"
2034
+ ]
2035
+ },
2036
+ "else": {
2037
+ "properties": {
2038
+ "model": false
2039
+ }
2040
+ }
2041
+ },
2042
+ {
2043
+ "$comment": "The dataset extension may appear only on a dataset BOM.",
2044
+ "if": {
2045
+ "properties": {
2046
+ "bomType": {
2047
+ "const": "dataset"
2048
+ }
2049
+ },
2050
+ "required": [
2051
+ "bomType"
2052
+ ]
2053
+ },
2054
+ "else": {
2055
+ "properties": {
2056
+ "dataset": false
2057
+ }
2058
+ }
2059
+ },
2060
+ {
2061
+ "$comment": "The normalized packages extension may appear only on an sbom BOM.",
2062
+ "if": {
2063
+ "properties": {
2064
+ "bomType": {
2065
+ "const": "sbom"
2066
+ }
2067
+ },
2068
+ "required": [
2069
+ "bomType"
2070
+ ]
2071
+ },
2072
+ "else": {
2073
+ "properties": {
2074
+ "packages": false
2075
+ }
2076
+ }
2077
+ },
2078
+ {
2079
+ "$comment": "A BOM must carry at least one of ref/document/packages/model/dataset. This intentionally checks PRESENCE, not non-emptiness: under the partial-fidelity design a converter MAY emit an empty normalized extension (e.g. model:{}) alongside a raw `document` passthrough when a source has no cleanly-mappable fields, so this constraint deliberately does not require minProperties/minItems on the extension. A bare {bomType, format} carrying none of these keys is unusable and invalid.",
2080
+ "anyOf": [
2081
+ {
2082
+ "required": [
2083
+ "ref"
2084
+ ]
2085
+ },
2086
+ {
2087
+ "required": [
2088
+ "document"
2089
+ ]
2090
+ },
2091
+ {
2092
+ "required": [
2093
+ "packages"
2094
+ ]
2095
+ },
2096
+ {
2097
+ "required": [
2098
+ "model"
2099
+ ]
2100
+ },
2101
+ {
2102
+ "required": [
2103
+ "dataset"
2104
+ ]
2105
+ }
2106
+ ]
2107
+ }
2108
+ ],
2109
+ "examples": [
2110
+ {
2111
+ "$comment": "Passthrough SBOM by external reference — the universal escape hatch, available to every bomType.",
2112
+ "bomType": "sbom",
2113
+ "format": "cyclonedx",
2114
+ "ref": "https://artifacts.agency.gov/sbom/webtier.cdx.json",
2115
+ "hashes": [
2116
+ {
2117
+ "algorithm": "sha256",
2118
+ "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
2119
+ }
2120
+ ]
2121
+ },
2122
+ {
2123
+ "$comment": "Passthrough for a reserved-but-not-yet-normalized type (cbom) — carried opaquely until a normalized extension ships.",
2124
+ "bomType": "cbom",
2125
+ "format": "cyclonedx",
2126
+ "document": {
2127
+ "bomFormat": "CycloneDX",
2128
+ "specVersion": "1.6"
2129
+ }
2130
+ },
2131
+ {
2132
+ "$comment": "Normalized ai-model BOM: CISA/G7-aligned fields live in the model extension, never at the component root or shared base.",
2133
+ "bomType": "ai-model",
2134
+ "format": "cyclonedx-ml",
2135
+ "model": {
2136
+ "modelArchitecture": "transformer",
2137
+ "parameterCount": 6738415616,
2138
+ "serializationFormat": "safetensors",
2139
+ "adaptationType": "finetune",
2140
+ "baseModelRef": "meta-llama/Llama-2-7b-hf",
2141
+ "learningApproach": "supervised",
2142
+ "task": "text-generation",
2143
+ "performanceMetrics": [
2144
+ {
2145
+ "name": "MMLU",
2146
+ "value": "0.457"
2147
+ }
2148
+ ],
2149
+ "hyperparameters": [
2150
+ {
2151
+ "name": "epochs",
2152
+ "value": "3"
2153
+ },
2154
+ {
2155
+ "name": "learning-rate",
2156
+ "value": "2e-5"
2157
+ }
2158
+ ],
2159
+ "inputOutput": {
2160
+ "dataTypes": [
2161
+ "string"
2162
+ ],
2163
+ "modality": [
2164
+ "text"
2165
+ ],
2166
+ "contextLength": 4096,
2167
+ "tokenizer": "llama-bpe"
2168
+ }
2169
+ }
2170
+ },
2171
+ {
2172
+ "$comment": "Normalized dataset BOM with lineage — a filtered derivative of a base dataset, referenced by an ai-model via datasetRefs.",
2173
+ "bomType": "dataset",
2174
+ "format": "croissant",
2175
+ "dataset": {
2176
+ "recordCount": 2500000,
2177
+ "datasetFormat": "parquet",
2178
+ "dataClassification": "public",
2179
+ "intendedUse": "instruction fine-tuning",
2180
+ "modality": "text",
2181
+ "provenance": "Filtered from the public UltraChat corpus; low-quality and duplicate turns removed.",
2182
+ "statisticalProperties": "Mean 512 tokens/record; 61% single-turn, 39% multi-turn; English-dominant (~92%).",
2183
+ "baseDatasetRefs": [
2184
+ "HuggingFaceH4/ultrachat_200k"
2185
+ ],
2186
+ "derivation": "filtered"
2187
+ }
2188
+ }
2189
+ ]
2190
+ },
2191
+ "AI_Model_Extension": {
2192
+ "type": "object",
2193
+ "additionalProperties": true,
2194
+ "description": "Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All fields optional (standards-correct; only the EU AI Act makes a subset binding for high-risk/GPAI). Left open (additionalProperties: true) so a converter can carry unmapped native fields opaquely (partial-fidelity pattern). Subject name/version are inherited from the host aiModel component, not repeated here.",
2195
+ "title": "AI Model BOM Extension",
2196
+ "properties": {
2197
+ "modelArchitecture": {
2198
+ "type": "string",
2199
+ "description": "Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts."
2200
+ },
2201
+ "parameterCount": {
2202
+ "type": "integer",
2203
+ "minimum": 0,
2204
+ "description": "Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here because the EU AI Act keys GPAI obligations off model scale."
2205
+ },
2206
+ "serializationFormat": {
2207
+ "type": "string",
2208
+ "description": "On-disk weight serialization format. Security-critical yet under-modeled by BOM specs: pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples: safetensors, pytorch, gguf, onnx, tensorflow."
2209
+ },
2210
+ "adaptationType": {
2211
+ "type": "string",
2212
+ "title": "Model Adaptation Type",
2213
+ "enum": [
2214
+ "finetune",
2215
+ "adapter",
2216
+ "quantized",
2217
+ "merge"
2218
+ ],
2219
+ "description": "Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation vocabulary (the only typed lineage enum in the ecosystem)."
2220
+ },
2221
+ "baseModelRef": {
2222
+ "type": "string",
2223
+ "description": "Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM."
2224
+ },
2225
+ "datasetRefs": {
2226
+ "type": "array",
2227
+ "items": {
2228
+ "type": "string"
2229
+ },
2230
+ "description": "References to the training/evaluation datasets this model was produced from — preferably a dataset component's componentId (correlating to a first-class dataset subject rather than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no component exists."
2231
+ },
2232
+ "intendedUse": {
2233
+ "type": "string",
2234
+ "description": "Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element)."
2235
+ },
2236
+ "learningApproach": {
2237
+ "type": "string",
2238
+ "description": "Model's learning/training paradigm. Free-text because the value set varies across standards. Examples: supervised, self-supervised, semi-supervised, reinforcement. Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX modelParameters.approach.type ∩ CISA/G7 learning type."
2239
+ },
2240
+ "task": {
2241
+ "type": "string",
2242
+ "description": "The ML task the model performs. Free-text. Examples: text-classification, sentiment-analysis, object-detection, translation. Sourced from CycloneDX modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7 intended-application."
2243
+ },
2244
+ "performanceMetrics": {
2245
+ "type": "array",
2246
+ "items": {
2247
+ "type": "object",
2248
+ "additionalProperties": true,
2249
+ "properties": {
2250
+ "name": {
2251
+ "type": "string",
2252
+ "description": "Metric name. Examples: accuracy, f1, BLEU, latency."
2253
+ },
2254
+ "value": {
2255
+ "type": "string",
2256
+ "description": "Reported metric value, free-text because metrics are heterogeneous (percentages, scores, milliseconds)."
2257
+ }
2258
+ }
2259
+ },
2260
+ "description": "Reported evaluation metrics as name/value pairs. Values are free-text because metrics are heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties: true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩ CISA/G7 KPI cluster."
2261
+ },
2262
+ "hyperparameters": {
2263
+ "type": "array",
2264
+ "items": {
2265
+ "type": "object",
2266
+ "properties": {
2267
+ "name": {
2268
+ "type": "string",
2269
+ "description": "Hyper-parameter name. Examples: epochs, learning-rate, batch-size."
2270
+ },
2271
+ "value": {
2272
+ "type": "string",
2273
+ "description": "Hyper-parameter value (free-text)."
2274
+ }
2275
+ }
2276
+ },
2277
+ "description": "Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This is the set of training knobs, NOT the model's trainable parameterCount — the two are routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0 ai_hyperparameter."
2278
+ },
2279
+ "inputOutput": {
2280
+ "type": "object",
2281
+ "additionalProperties": true,
2282
+ "description": "Model input/output properties (CISA/G7 minimum element): I/O data types, modality, context/sequence length, and tokenizer. Sourced from CycloneDX modelParameters.inputs[].format / outputs[].format. All sub-fields optional.",
2283
+ "properties": {
2284
+ "dataTypes": {
2285
+ "type": "array",
2286
+ "items": {
2287
+ "type": "string"
2288
+ },
2289
+ "description": "Input/output data types. Examples: string, byte[], float32, image."
2290
+ },
2291
+ "modality": {
2292
+ "type": [
2293
+ "string",
2294
+ "array"
2295
+ ],
2296
+ "items": {
2297
+ "type": "string"
2298
+ },
2299
+ "description": "Input/output modalities. String or array of strings. Examples: text, image, audio. Symmetric with Dataset_Extension.modality."
2300
+ },
2301
+ "contextLength": {
2302
+ "type": "integer",
2303
+ "minimum": 0,
2304
+ "description": "Maximum context/sequence length the model accepts, in tokens."
2305
+ },
2306
+ "tokenizer": {
2307
+ "type": "string",
2308
+ "description": "Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken."
2309
+ }
2310
+ }
2311
+ }
2312
+ }
2313
+ },
2314
+ "Dataset_Extension": {
2315
+ "type": "object",
2316
+ "additionalProperties": true,
2317
+ "description": "Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All optional; open for partial-fidelity passthrough of unmapped native fields. Symmetric with AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just as the model extension carries baseModelRef/adaptationType.",
2318
+ "title": "Dataset BOM Extension",
2319
+ "properties": {
2320
+ "recordCount": {
2321
+ "type": "integer",
2322
+ "minimum": 0,
2323
+ "description": "Number of records/examples in the dataset."
2324
+ },
2325
+ "datasetFormat": {
2326
+ "type": "string",
2327
+ "description": "Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset."
2328
+ },
2329
+ "dataClassification": {
2330
+ "type": "string",
2331
+ "description": "Sensitivity/classification of the data. Examples: public, internal, confidential, pii, phi."
2332
+ },
2333
+ "intendedUse": {
2334
+ "type": "string",
2335
+ "description": "Free-text statement of the dataset's intended use (CISA/G7 minimum element)."
2336
+ },
2337
+ "modality": {
2338
+ "type": [
2339
+ "string",
2340
+ "array"
2341
+ ],
2342
+ "items": {
2343
+ "type": "string"
2344
+ },
2345
+ "description": "Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text, image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not physical format. String or array of strings."
2346
+ },
2347
+ "provenance": {
2348
+ "type": "string",
2349
+ "description": "Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset provenance'; SPDX 3.0 dataset_dataCollectionProcess)."
2350
+ },
2351
+ "statisticalProperties": {
2352
+ "type": "string",
2353
+ "description": "Free-text summary of the dataset's statistical properties (CISA/G7 minimum element; open-ended by design). Intentionally free-text and will remain so permanently: recordCount is the one structured statistic, and restructuring this into an object later would break existing consumers, so it stays a string (additive-only)."
2354
+ },
2355
+ "baseDatasetRefs": {
2356
+ "type": "array",
2357
+ "items": {
2358
+ "type": "string"
2359
+ },
2360
+ "description": "References to the source dataset(s) this one was derived from — a dataset componentId, or a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to ai-model's baseModelRef; the base dataset may carry its own dataset BOM."
2361
+ },
2362
+ "derivation": {
2363
+ "type": "string",
2364
+ "title": "Dataset Derivation Type",
2365
+ "enum": [
2366
+ "filtered",
2367
+ "augmented",
2368
+ "merged",
2369
+ "sampled"
2370
+ ],
2371
+ "description": "Relationship of this dataset to baseDatasetRefs, parallel to the model extension's adaptationType. Minimal + extensible: filtered (subset by rule), augmented (added/synthesized records), merged (union of sources), sampled (statistical draw)."
2372
+ }
2373
+ }
2374
+ },
2375
+ "SBOM_Package": {
2376
+ "type": "object",
2377
+ "additionalProperties": true,
2378
+ "description": "A single normalized software package entry within an sbom BOM. Minimal identity + version for querying/diffing; the full native record remains available via passthrough (document/ref).",
2379
+ "title": "SBOM Package",
2380
+ "required": [
2381
+ "name"
2382
+ ],
2383
+ "properties": {
2384
+ "name": {
2385
+ "type": "string",
2386
+ "description": "Package name."
2387
+ },
2388
+ "version": {
2389
+ "type": "string",
2390
+ "description": "Package version."
2391
+ },
2392
+ "purl": {
2393
+ "type": "string",
2394
+ "description": "Package URL (purl) — the preferred cross-BOM identity key when present."
2395
+ },
2396
+ "licenses": {
2397
+ "type": "array",
2398
+ "items": {
2399
+ "type": "string"
2400
+ },
2401
+ "description": "SPDX license identifiers/expressions for this package."
2402
+ }
2403
+ }
1831
2404
  }
1832
2405
  }
1833
2406
  },
1834
- "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.3.0": {
2407
+ "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.4.0": {
1835
2408
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1836
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.3.0",
2409
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.4.0",
1837
2410
  "title": "HDF Data Flow Primitives",
1838
2411
  "description": "Types for describing data flows between components within a system and across system boundaries. Data flows model network connections, API calls, database queries, and other inter-component communication.",
1839
2412
  "$defs": {
@@ -1990,9 +2563,9 @@
1990
2563
  }
1991
2564
  }
1992
2565
  },
1993
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.3.0": {
2566
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0": {
1994
2567
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1995
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.3.0",
2568
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0",
1996
2569
  "title": "HDF Extension Primitives",
1997
2570
  "description": "Extension types for waivers, attestations, generators, and integrity.",
1998
2571
  "$defs": {
@@ -2020,15 +2593,15 @@
2020
2593
  ],
2021
2594
  "properties": {
2022
2595
  "type": {
2023
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.3.0#/$defs/Override_Type",
2596
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Override_Type",
2024
2597
  "description": "The type of override applied to this requirement."
2025
2598
  },
2026
2599
  "status": {
2027
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.3.0#/$defs/Result_Status",
2600
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
2028
2601
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
2029
2602
  },
2030
2603
  "impact": {
2031
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.3.0#/$defs/Impact_Override",
2604
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Impact_Override",
2032
2605
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
2033
2606
  },
2034
2607
  "reason": {
@@ -2036,7 +2609,7 @@
2036
2609
  "description": "Explanation for why this override was applied."
2037
2610
  },
2038
2611
  "appliedBy": {
2039
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Identity",
2612
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
2040
2613
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
2041
2614
  },
2042
2615
  "appliedAt": {
@@ -2050,27 +2623,27 @@
2050
2623
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
2051
2624
  },
2052
2625
  "signature": {
2053
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Signature",
2626
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
2054
2627
  "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."
2055
2628
  },
2056
2629
  "evidence": {
2057
2630
  "type": "array",
2058
2631
  "items": {
2059
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Evidence"
2632
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
2060
2633
  },
2061
2634
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
2062
2635
  },
2063
2636
  "previousChecksum": {
2064
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Checksum",
2637
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
2065
2638
  "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."
2066
2639
  },
2067
2640
  "cvss": {
2068
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.3.0#/$defs/Cvss",
2641
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
2069
2642
  "$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.",
2070
2643
  "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."
2071
2644
  },
2072
2645
  "justification": {
2073
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.3.0#/$defs/Justification",
2646
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Justification",
2074
2647
  "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."
2075
2648
  }
2076
2649
  },
@@ -2177,7 +2750,7 @@
2177
2750
  "description": "Detailed explanation of the plan, including what actions will be taken."
2178
2751
  },
2179
2752
  "appliedBy": {
2180
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Identity",
2753
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
2181
2754
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
2182
2755
  },
2183
2756
  "appliedAt": {
@@ -2193,23 +2766,23 @@
2193
2766
  "milestones": {
2194
2767
  "type": "array",
2195
2768
  "items": {
2196
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Milestone"
2769
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
2197
2770
  },
2198
2771
  "description": "Optional array of milestones tracking progress toward completion."
2199
2772
  },
2200
2773
  "signature": {
2201
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Signature",
2774
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
2202
2775
  "description": "Optional digital signature for enhanced trust and non-repudiation."
2203
2776
  },
2204
2777
  "evidence": {
2205
2778
  "type": "array",
2206
2779
  "items": {
2207
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Evidence"
2780
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
2208
2781
  },
2209
2782
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
2210
2783
  },
2211
2784
  "previousChecksum": {
2212
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Checksum",
2785
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
2213
2786
  "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."
2214
2787
  }
2215
2788
  },
@@ -2360,7 +2933,7 @@
2360
2933
  },
2361
2934
  "properties": {
2362
2935
  "algorithm": {
2363
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Hash_Algorithm",
2936
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Hash_Algorithm",
2364
2937
  "description": "The hash algorithm used for the checksum."
2365
2938
  },
2366
2939
  "checksum": {
@@ -2393,9 +2966,9 @@
2393
2966
  }
2394
2967
  }
2395
2968
  },
2396
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.3.0": {
2969
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0": {
2397
2970
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2398
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.3.0",
2971
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0",
2399
2972
  "title": "HDF Amendment Primitives",
2400
2973
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
2401
2974
  "$defs": {
@@ -2516,7 +3089,7 @@
2516
3089
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
2517
3090
  },
2518
3091
  "status": {
2519
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.3.0#/$defs/Result_Status",
3092
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
2520
3093
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
2521
3094
  },
2522
3095
  "impact": {
@@ -2528,7 +3101,7 @@
2528
3101
  "description": "Justification for this amendment."
2529
3102
  },
2530
3103
  "appliedBy": {
2531
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Identity",
3104
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
2532
3105
  "description": "Identity of who applied this amendment."
2533
3106
  },
2534
3107
  "appliedAt": {
@@ -2544,20 +3117,20 @@
2544
3117
  "evidence": {
2545
3118
  "type": "array",
2546
3119
  "items": {
2547
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Evidence"
3120
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
2548
3121
  },
2549
3122
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
2550
3123
  },
2551
3124
  "signature": {
2552
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Signature",
3125
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
2553
3126
  "description": "Digital signature for non-repudiation."
2554
3127
  },
2555
3128
  "previousChecksum": {
2556
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Checksum",
3129
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
2557
3130
  "description": "Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null for the first amendment."
2558
3131
  },
2559
3132
  "cvss": {
2560
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.3.0#/$defs/Cvss",
3133
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
2561
3134
  "$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.",
2562
3135
  "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."
2563
3136
  },
@@ -2568,7 +3141,7 @@
2568
3141
  "milestones": {
2569
3142
  "type": "array",
2570
3143
  "items": {
2571
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.3.0#/$defs/Milestone"
3144
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
2572
3145
  },
2573
3146
  "description": "Remediation milestones (primarily for POA&M type amendments)."
2574
3147
  },
@@ -2585,7 +3158,7 @@
2585
3158
  "affectedPackages": {
2586
3159
  "type": "array",
2587
3160
  "items": {
2588
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.3.0#/$defs/Affected_Package"
3161
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0#/$defs/Affected_Package"
2589
3162
  },
2590
3163
  "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)."
2591
3164
  }
@@ -2718,9 +3291,9 @@
2718
3291
  }
2719
3292
  }
2720
3293
  },
2721
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.3.0": {
3294
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0": {
2722
3295
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2723
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.3.0",
3296
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0",
2724
3297
  "title": "HDF Result Primitives",
2725
3298
  "description": "Types for representing assessment results and statuses.",
2726
3299
  "$defs": {
@@ -2851,9 +3424,9 @@
2851
3424
  }
2852
3425
  }
2853
3426
  },
2854
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.3.0": {
3427
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0": {
2855
3428
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2856
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.3.0",
3429
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0",
2857
3430
  "title": "HDF CVSS Primitives",
2858
3431
  "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).",
2859
3432
  "$defs": {
@@ -3055,9 +3628,9 @@
3055
3628
  }
3056
3629
  }
3057
3630
  },
3058
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.3.0": {
3631
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0": {
3059
3632
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3060
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.3.0",
3633
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0",
3061
3634
  "title": "HDF Affected Package Primitives",
3062
3635
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
3063
3636
  "$defs": {