@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.
package/dist/ts/hdf.ts CHANGED
@@ -66,9 +66,6 @@ export interface HDFResults {
66
66
 
67
67
  /**
68
68
  * Information on a baseline that was evaluated, including any findings.
69
- *
70
- * Shared metadata fields for baselines. Used in both standalone baseline documents and
71
- * evaluated baseline results.
72
69
  */
73
70
  export interface EvaluatedBaseline {
74
71
  /**
@@ -172,8 +169,7 @@ export interface EvaluatedBaseline {
172
169
  }
173
170
 
174
171
  /**
175
- * A dependency for a baseline. Can include relative paths or URLs for where to find the
176
- * dependency.
172
+ * A dependency for a baseline. Can include relative paths or URLs for where to find the dependency.
177
173
  */
178
174
  export interface Dependency {
179
175
  /**
@@ -237,9 +233,9 @@ export interface RequirementGroup {
237
233
  }
238
234
 
239
235
  /**
240
- * A typed input parameter that bridges governance requirements and scanner automation.
241
- * Inputs carry expected configuration values with type information, comparison operators,
242
- * and validation constraints, enabling traceability from policy through to scan results.
236
+ * A typed input parameter that bridges governance requirements and scanner automation. Inputs carry
237
+ * expected configuration values with type information, comparison operators, and validation
238
+ * constraints, enabling traceability from policy through to scan results.
243
239
  */
244
240
  export interface Input {
245
241
  /**
@@ -280,8 +276,6 @@ export interface Input {
280
276
  }
281
277
 
282
278
  /**
283
- * Validation constraints for the input value.
284
- *
285
279
  * Validation constraints for an input value.
286
280
  */
287
281
  export interface InputConstraints {
@@ -305,8 +299,6 @@ export interface InputConstraints {
305
299
  }
306
300
 
307
301
  /**
308
- * The comparison operator used when evaluating this input against observed values.
309
- *
310
302
  * Comparison operator for evaluating the input value against observed values. Numeric:
311
303
  * eq/ne/lt/le/gt/ge. String: eq/ne/contains/matches. Collection: in/notIn.
312
304
  */
@@ -324,8 +316,6 @@ export enum ComparisonOperator {
324
316
  }
325
317
 
326
318
  /**
327
- * The data type of this input.
328
- *
329
319
  * The data type of the input value. Aligns with InSpec input types.
330
320
  */
331
321
  export enum InputType {
@@ -338,27 +328,8 @@ export enum InputType {
338
328
  }
339
329
 
340
330
  /**
341
- * Cryptographic integrity information for verifying this baseline has not been tampered
342
- * with.
343
- *
344
- * Cryptographic integrity information for verifying the HDF file has not been tampered
345
- * with. If algorithm is provided, checksum must also be provided, and vice versa.
346
- *
347
- * Cryptographic integrity information for verifying this file.
348
- *
349
- * Cryptographic integrity information for verifying this comparison document.
350
- *
351
- * Cryptographic integrity information for verifying this system document has not been
352
- * tampered with.
353
- *
354
- * Cryptographic integrity information for verifying this plan document has not been
355
- * tampered with.
356
- *
357
- * Cryptographic integrity information for verifying this amendments document has not been
358
- * tampered with.
359
- *
360
- * Cryptographic integrity information for verifying this evidence package has not been
361
- * tampered with.
331
+ * Cryptographic integrity information for verifying the HDF file has not been tampered with. If
332
+ * algorithm is provided, checksum must also be provided, and vice versa.
362
333
  */
363
334
  export interface Integrity {
364
335
  /**
@@ -381,41 +352,18 @@ export interface Integrity {
381
352
  }
382
353
 
383
354
  /**
384
- * The hash algorithm used for the checksum.
385
- *
386
- * Supported cryptographic hash algorithms for checksums and integrity verification.
355
+ * Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers
356
+ * container-image and other artifact digests that use it.
387
357
  */
388
358
  export enum HashAlgorithm {
359
+ Blake3 = "blake3",
389
360
  Sha256 = "sha256",
390
361
  Sha384 = "sha384",
391
362
  Sha512 = "sha512",
392
363
  }
393
364
 
394
365
  /**
395
- * SHA-256 checksum of the original baseline definition file (before execution). This is an
396
- * immutable reference to the baseline as defined, used to detect tampering with baseline
397
- * requirements or metadata.
398
- *
399
366
  * Cryptographic checksum for baseline integrity verification.
400
- *
401
- * SHA-256 checksum of the previous amendment in chronological order. Creates a
402
- * tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
403
- * on a requirement.
404
- *
405
- * SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
406
- * Used to detect tampering with test results. Compare with currentChecksum to verify
407
- * amendment integrity.
408
- *
409
- * Optional cryptographic checksum for verifying the integrity of remediation resources
410
- * fetched from the URI. Recommended for security when referencing external automation
411
- * scripts.
412
- *
413
- * Cryptographic checksum of the source document for integrity verification.
414
- *
415
- * Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
416
- * for the first amendment.
417
- *
418
- * Cryptographic checksum for verifying the referenced document's integrity.
419
367
  */
420
368
  export interface Checksum {
421
369
  /**
@@ -431,9 +379,6 @@ export interface Checksum {
431
379
 
432
380
  /**
433
381
  * A requirement that has been evaluated, including any findings.
434
- *
435
- * Core requirement fields shared between baseline requirements and evaluated requirements.
436
- * Contains the fundamental requirement definition without assessment results.
437
382
  */
438
383
  export interface EvaluatedRequirement {
439
384
  /**
@@ -581,14 +526,13 @@ export interface EvaluatedRequirement {
581
526
 
582
527
  /**
583
528
  * Represents a package referenced by a vulnerability finding or by an amendment's scope. On
584
- * Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'.
585
- * On Standalone_Override.affectedPackages it says 'this amendment is scoped to these
586
- * packages' (used by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a
587
- * system-level component identifier — see `components[]` on hdf-system for those. Validity
588
- * requires at least one of: (name + version + ecosystem), purl alone, or cpe alone. purl
589
- * and cpe are self-describing identifiers that encode name/version implicitly, so either
590
- * may stand on its own; the name+version+ecosystem combination is the explicit form for
591
- * sources without formal identifiers.
529
+ * Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'. On
530
+ * Standalone_Override.affectedPackages it says 'this amendment is scoped to these packages' (used
531
+ * by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a system-level component identifier
532
+ * — see `components[]` on hdf-system for those. Validity requires at least one of: (name + version
533
+ * + ecosystem), purl alone, or cpe alone. purl and cpe are self-describing identifiers that encode
534
+ * name/version implicitly, so either may stand on its own; the name+version+ecosystem combination
535
+ * is the explicit form for sources without formal identifiers.
592
536
  */
593
537
  export interface AffectedPackage {
594
538
  /**
@@ -679,16 +623,12 @@ export enum ControlType {
679
623
  }
680
624
 
681
625
  /**
682
- * Structured CVSS scoring data backing this override. Captures the rubric (which
683
- * Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
684
- * a riskAdjustment. For other override types this is optional context.
685
- *
686
- * A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding.
687
- * Captures the vendor-supplied Base metric group and optional consumer-supplied Threat,
688
- * Environmental, and Supplemental metric groups. Supports all four CVSS major versions
689
- * (2.0, 3.0, 3.1, 4.0). Vector strings are validated against a permissive umbrella grammar;
690
- * semantic validation (correct metrics per version, correct values per metric) is performed
691
- * by the hdf-utilities `validateCvssVector` helper rather than at the schema layer.
626
+ * A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding. Captures
627
+ * the vendor-supplied Base metric group and optional consumer-supplied Threat, Environmental, and
628
+ * Supplemental metric groups. Supports all four CVSS major versions (2.0, 3.0, 3.1, 4.0). Vector
629
+ * strings are validated against a permissive umbrella grammar; semantic validation (correct metrics
630
+ * per version, correct values per metric) is performed by the hdf-utilities `validateCvssVector`
631
+ * helper rather than at the schema layer.
692
632
  */
693
633
  export interface Cvss {
694
634
  /**
@@ -761,15 +701,9 @@ export interface Cvss {
761
701
  }
762
702
 
763
703
  /**
764
- * Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
765
- * 'none' or 'critical' bands; map accordingly when populating.
766
- *
767
704
  * Qualitative CVSS severity band. Aligns with FIRST/NVD bands: none=0.0, low=0.1-3.9,
768
- * medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum
769
- * used on Requirement_Core (which includes 'informational').
770
- *
771
- * Qualitative severity band corresponding to computedScore. Same band convention as
772
- * baseSeverity.
705
+ * medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum used on
706
+ * Requirement_Core (which includes 'informational').
773
707
  */
774
708
  export enum CVSSSeverity {
775
709
  Critical = "critical",
@@ -804,29 +738,19 @@ export interface Description {
804
738
  }
805
739
 
806
740
  /**
807
- * The type of the most recent non-expired override or POAM governing this requirement.
808
- * Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
809
- * riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
810
- * POAMs apply.
811
- *
812
- * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
813
- * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
814
- * remediation tracked (no status change). 'inherited': control provided by another
815
- * component or system. 'falsePositive': scanner incorrectly identified a finding — for
816
- * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
817
- * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
818
- * this system, so status is typically set to 'notApplicable'. The disposition field on the
819
- * requirement distinguishes false positives from genuinely not-applicable findings.
820
- * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
821
- * Adjustment); does not change pass/fail status, only impact via the impact field.
822
- * 'operationalRequirement': deviation required by operational constraints (FedRAMP
823
- * Operational Requirement); the finding cannot be remediated because the system requires
824
- * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
825
- * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
826
- *
827
- * The type of override applied to this requirement.
828
- *
829
- * The type of amendment.
741
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk accepted
742
+ * by Authorizing Official. 'attestation': manually verified by assessor. 'poam': remediation
743
+ * tracked (no status change). 'inherited': control provided by another component or system.
744
+ * 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the
745
+ * check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE,
746
+ * SCA), the flagged vulnerability does not apply to this system, so status is typically set to
747
+ * 'notApplicable'. The disposition field on the requirement distinguishes false positives from
748
+ * genuinely not-applicable findings. 'riskAdjustment': impact score adjusted based on environmental
749
+ * context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact
750
+ * field. 'operationalRequirement': deviation required by operational constraints (FedRAMP
751
+ * Operational Requirement); the finding cannot be remediated because the system requires the
752
+ * affected functionality. Remains an open risk. Migration note: 'exception' was removed in v3.1.0 —
753
+ * use 'waiver' with status 'notApplicable' instead.
830
754
  */
831
755
  export enum OverrideType {
832
756
  Attestation = "attestation",
@@ -839,20 +763,9 @@ export enum OverrideType {
839
763
  }
840
764
 
841
765
  /**
842
- * The current effective compliance status of this requirement after applying the most
843
- * recent non-expired override with a status field, or computed from results (worst-wins) if
844
- * no status-bearing overrides exist.
845
- *
846
- * The status of an individual test result. 'notApplicable' indicates the requirement does
847
- * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
848
- * requires manual verification).
849
- *
850
- * The status of this test within the requirement. Example: 'failed'.
851
- *
852
- * The new status this override sets for the requirement. Optional when only impact is being
853
- * overridden.
854
- *
855
- * The new status this amendment sets. Optional when only impact is being overridden.
766
+ * The status of an individual test result. 'notApplicable' indicates the requirement does not apply
767
+ * to the target. 'notReviewed' indicates the requirement was not assessed (e.g., requires manual
768
+ * verification).
856
769
  */
857
770
  export enum ResultStatus {
858
771
  Error = "error",
@@ -863,13 +776,9 @@ export enum ResultStatus {
863
776
  }
864
777
 
865
778
  /**
866
- * FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
867
- * alongside CVSS for prioritization — captures the probability the vulnerability will be
868
- * exploited.
869
- *
870
- * FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All
871
- * three fields are required when an Epss object is present; the date disambiguates which
872
- * day's score this is, since EPSS recomputes daily.
779
+ * FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All three
780
+ * fields are required when an Epss object is present; the date disambiguates which day's score this
781
+ * is, since EPSS recomputes daily.
873
782
  */
874
783
  export interface Epss {
875
784
  /**
@@ -892,8 +801,8 @@ export interface Epss {
892
801
  }
893
802
 
894
803
  /**
895
- * Supporting evidence for a finding or override, such as screenshots, code samples, log
896
- * excerpts, or URLs.
804
+ * Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts,
805
+ * or URLs.
897
806
  */
898
807
  export interface Evidence {
899
808
  /**
@@ -933,41 +842,8 @@ export interface Evidence {
933
842
  }
934
843
 
935
844
  /**
936
- * Identity of who or what captured this evidence.
937
- *
938
- * Represents an identity that performed an action, such as capturing evidence or applying
939
- * an override.
940
- *
941
- * Identity of who created this POA&M. For simple cases, use type 'simple' with just an
942
- * identifier.
943
- *
944
- * Identity of who completed this milestone.
945
- *
946
- * The identity that created this signature.
947
- *
948
- * Identity of who applied this override. For simple cases, use type 'simple' with just an
949
- * identifier.
950
- *
951
- * Identity of the person or system that approved this override.
952
- *
953
- * Team or individual responsible for this component. Enables per-component ownership when
954
- * different teams manage different parts of a system.
955
- *
956
- * The identity of the person or system responsible for executing the test. This could be a
957
- * human auditor manually completing a checklist, an automated CI/CD system, or a security
958
- * tool. Optional field to support both automated and manual HDF generation.
959
- *
960
- * Team or individual responsible for this system's authorization and compliance. Maps to
961
- * OSCAL responsible-party with role 'system-owner'.
962
- *
963
- * Default identity of who created this amendments document. Individual overrides may
964
- * specify their own appliedBy.
965
- *
966
- * Identity of the authorizing official who approved these amendments.
967
- *
968
- * Identity of who applied this amendment.
969
- *
970
- * Identity of who prepared this evidence package.
845
+ * Represents an identity that performed an action, such as capturing evidence or applying an
846
+ * override.
971
847
  */
972
848
  export interface Identity {
973
849
  /**
@@ -981,8 +857,12 @@ export interface Identity {
981
857
  identifier: string;
982
858
  /**
983
859
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
984
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
985
- * classification, or 'other' for custom identity systems.
860
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
861
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
862
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
863
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
864
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
865
+ * custom identity systems.
986
866
  */
987
867
  type: IdentityType;
988
868
  [property: string]: any;
@@ -990,10 +870,15 @@ export interface Identity {
990
870
 
991
871
  /**
992
872
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
993
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
994
- * classification, or 'other' for custom identity systems.
873
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
874
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
875
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
876
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
877
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
878
+ * custom identity systems.
995
879
  */
996
880
  export enum IdentityType {
881
+ Agent = "agent",
997
882
  Email = "email",
998
883
  Other = "other",
999
884
  Simple = "simple",
@@ -1042,9 +927,9 @@ export interface Kev {
1042
927
  }
1043
928
 
1044
929
  /**
1045
- * Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
1046
- * POAMs do NOT change the effectiveStatus - the requirement remains in its current state
1047
- * while the POA&M tracks remediation efforts.
930
+ * Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance. POAMs do
931
+ * NOT change the effectiveStatus - the requirement remains in its current state while the POA&M
932
+ * tracks remediation efforts.
1048
933
  */
1049
934
  export interface Poam {
1050
935
  /**
@@ -1129,21 +1014,9 @@ export enum MilestoneStatus {
1129
1014
  }
1130
1015
 
1131
1016
  /**
1132
- * Optional digital signature for enhanced trust and non-repudiation.
1133
- *
1134
- * A digital signature following W3C Data Integrity Proofs pattern. Supports hardware
1135
- * security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic
1136
- * signing methods via JWK, PEM, or Base58 key formats.
1137
- *
1138
- * Optional digital signature for enhanced trust and non-repudiation. Supports hardware
1139
- * security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
1140
- * methods.
1141
- *
1142
- * Digital signature for non-repudiation.
1143
- *
1144
- * Document-level digital signature covering all amendments.
1145
- *
1146
- * Digital signature covering the entire evidence package.
1017
+ * A digital signature following W3C Data Integrity Proofs pattern. Supports hardware security
1018
+ * tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic signing methods
1019
+ * via JWK, PEM, or Base58 key formats.
1147
1020
  */
1148
1021
  export interface Signature {
1149
1022
  /**
@@ -1188,10 +1061,8 @@ export interface Signature {
1188
1061
  }
1189
1062
 
1190
1063
  /**
1191
- * The verification method containing the public key for signature verification.
1192
- *
1193
- * Verification method containing the public key needed to verify a digital signature.
1194
- * Supports multiple key formats including JWK (for RSA, EC), PEM, and Base58.
1064
+ * Verification method containing the public key needed to verify a digital signature. Supports
1065
+ * multiple key formats including JWK (for RSA, EC), PEM, and Base58.
1195
1066
  */
1196
1067
  export interface VerificationMethod {
1197
1068
  /**
@@ -1233,12 +1104,6 @@ export enum POAMType {
1233
1104
 
1234
1105
  /**
1235
1106
  * A reference to an external document.
1236
- *
1237
- * A reference using the 'ref' field.
1238
- *
1239
- * A URL pointing at the reference.
1240
- *
1241
- * A URI pointing at the reference.
1242
1107
  */
1243
1108
  export interface Reference {
1244
1109
  ref?: { [key: string]: any }[] | string;
@@ -1293,9 +1158,6 @@ export interface RequirementResult {
1293
1158
  }
1294
1159
 
1295
1160
  /**
1296
- * Explicit severity rating. Typically derived from impact score but provided explicitly for
1297
- * clarity.
1298
- *
1299
1161
  * Severity rating for a requirement. Typically derived from the numeric impact score.
1300
1162
  */
1301
1163
  export enum Severity {
@@ -1307,8 +1169,6 @@ export enum Severity {
1307
1169
  }
1308
1170
 
1309
1171
  /**
1310
- * The explicit location of the requirement within the source code.
1311
- *
1312
1172
  * The explicit location of a requirement within source code.
1313
1173
  */
1314
1174
  export interface SourceLocation {
@@ -1324,9 +1184,9 @@ export interface SourceLocation {
1324
1184
  }
1325
1185
 
1326
1186
  /**
1327
- * An intentional change to a requirement's compliance status and/or impact score. At least
1328
- * one of status or impact must be set. Overrides change the effectiveStatus or impact of
1329
- * the requirement. All overrides must have an expiration date to enforce periodic review.
1187
+ * An intentional change to a requirement's compliance status and/or impact score. At least one of
1188
+ * status or impact must be set. Overrides change the effectiveStatus or impact of the requirement.
1189
+ * All overrides must have an expiration date to enforce periodic review.
1330
1190
  */
1331
1191
  export interface StatusOverride {
1332
1192
  /**
@@ -1395,11 +1255,8 @@ export interface StatusOverride {
1395
1255
  }
1396
1256
 
1397
1257
  /**
1398
- * Override to the requirement's impact score. At least one of status or impact must be
1399
- * set.
1400
- *
1401
- * An override to the requirement's impact score. The prior impact is the original result
1402
- * value or the preceding override in the chain.
1258
+ * An override to the requirement's impact score. The prior impact is the original result value or
1259
+ * the preceding override in the chain.
1403
1260
  */
1404
1261
  export interface ImpactOverride {
1405
1262
  /**
@@ -1410,28 +1267,21 @@ export interface ImpactOverride {
1410
1267
  }
1411
1268
 
1412
1269
  /**
1413
- * Structured controlled-vocabulary classification for why this override applies.
1414
- * Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
1415
- * and attestation overrides where the structured category enables filtering and lossless
1416
- * round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
1417
- * precedent vocabulary and rationale.
1418
- *
1419
- * Structured controlled-vocabulary reason for an override, complementing the free-text
1420
- * 'reason' field. 'reason' carries the human-readable rationale an auditor reads;
1421
- * 'justification' carries the machine-readable category enabling filtering, aggregation,
1422
- * and lossless round-trip with structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields
1423
- * may be present simultaneously and are NOT redundant: 'reason' explains the specific
1424
- * circumstance; 'justification' classifies it. Authors SHOULD populate both when a
1425
- * controlled-vocabulary value applies — the enum value alone is not self-explanatory to an
1426
- * auditor. The vocabulary is drawn from the VEX ecosystem: the first five values are common
1427
- * across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six (requires_configuration /
1428
- * requires_dependency / requires_environment / protected_by_compiler / protected_at_runtime
1429
- * / protected_at_perimeter) are CycloneDX-specific and describe why the vulnerable code
1430
- * path is unreachable in the deployed configuration. The enum is extended additively across
1431
- * schema versions as other ecosystems' controlled vocabularies are integrated; documents
1432
- * using values added in a newer schema version will fail validation against an older
1433
- * schema. Consumers SHOULD validate against the schema version declared by the document
1434
- * ($schema) rather than assume a fixed vocabulary.
1270
+ * Structured controlled-vocabulary reason for an override, complementing the free-text 'reason'
1271
+ * field. 'reason' carries the human-readable rationale an auditor reads; 'justification' carries
1272
+ * the machine-readable category enabling filtering, aggregation, and lossless round-trip with
1273
+ * structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields may be present simultaneously and are
1274
+ * NOT redundant: 'reason' explains the specific circumstance; 'justification' classifies it.
1275
+ * Authors SHOULD populate both when a controlled-vocabulary value applies — the enum value alone is
1276
+ * not self-explanatory to an auditor. The vocabulary is drawn from the VEX ecosystem: the first
1277
+ * five values are common across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six
1278
+ * (requires_configuration / requires_dependency / requires_environment / protected_by_compiler /
1279
+ * protected_at_runtime / protected_at_perimeter) are CycloneDX-specific and describe why the
1280
+ * vulnerable code path is unreachable in the deployed configuration. The enum is extended
1281
+ * additively across schema versions as other ecosystems' controlled vocabularies are integrated;
1282
+ * documents using values added in a newer schema version will fail validation against an older
1283
+ * schema. Consumers SHOULD validate against the schema version declared by the document ($schema)
1284
+ * rather than assume a fixed vocabulary.
1435
1285
  */
1436
1286
  export enum Justification {
1437
1287
  ComponentNotPresent = "component_not_present",
@@ -1448,19 +1298,12 @@ export enum Justification {
1448
1298
  }
1449
1299
 
1450
1300
  /**
1451
- * How this requirement is intended to be verified. Disambiguates the two cases that null
1452
- * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
1453
- * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
1454
- * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
1455
- * runs without operator action; 'hybrid' = part automated, part manual. Optional: when
1456
- * omitted, consumers should not infer a default.
1457
- *
1458
- * How a requirement is intended to be verified. Disambiguates the two cases that null
1459
- * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
1460
- * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
1461
- * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
1462
- * runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to
1463
- * disambiguate from the unrelated Verification_Method DID-context struct.
1301
+ * How a requirement is intended to be verified. Disambiguates the two cases that null 'code'
1302
+ * overloads: 'manual-by-design' (the requirement is statement-form and not amenable to automation,
1303
+ * e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could exist but does not yet,
1304
+ * e.g. a STIG rule lacking a fix). 'automated' = a check exists and runs without operator action;
1305
+ * 'hybrid' = part automated, part manual. Named '_Enum' to disambiguate from the unrelated
1306
+ * Verification_Method DID-context struct.
1464
1307
  */
1465
1308
  export enum VerificationMethodEnum {
1466
1309
  Automated = "automated",
@@ -1493,39 +1336,21 @@ export interface SupportedPlatform {
1493
1336
  }
1494
1337
 
1495
1338
  /**
1496
- * A system component. Uses discriminated union pattern with 'type' field as discriminator.
1497
- * Superset of Target with identity, external IDs, and SBOM support.
1498
- *
1499
- * A physical or virtual server, workstation, or network device.
1500
- *
1501
- * Base properties shared by all component types. Extends the Target concept with stable
1502
- * identity, external references, and SBOM embedding.
1503
- *
1504
- * A static container image (not running).
1505
- *
1506
- * A running container instance.
1507
- *
1508
- * A container orchestration platform (Kubernetes, OpenShift, ECS, etc.).
1509
- *
1510
- * A cloud provider account (AWS account, Azure subscription, GCP project).
1511
- *
1512
- * A specific cloud resource (EC2 instance, S3 bucket, Azure VM, etc.).
1513
- *
1514
- * A code repository (for SAST tools).
1515
- *
1516
- * A running application or API (for DAST tools).
1517
- *
1518
- * A software artifact or dependency (for SCA tools).
1519
- *
1520
- * A network segment or network device.
1521
- *
1522
- * A database instance.
1339
+ * A system component. Uses discriminated union pattern with 'type' field as discriminator. Superset
1340
+ * of Target with identity, external IDs, and SBOM support.
1523
1341
  */
1524
1342
  export interface Component {
1525
1343
  /**
1526
1344
  * Names of baselines that apply to this component.
1527
1345
  */
1528
1346
  baselineRefs?: string[];
1347
+ /**
1348
+ * Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
1349
+ * each carried by passthrough (ref/document) or normalized. Replaces the former
1350
+ * sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
1351
+ * ai-model BOM). See primitives/bom.schema.json.
1352
+ */
1353
+ boms?: BillOfMaterials[];
1529
1354
  /**
1530
1355
  * Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
1531
1356
  * hdf-results. Enables cross-document correlation, diffing, and data flow references.
@@ -1545,6 +1370,15 @@ export interface Component {
1545
1370
  * System-specific overrides for baseline input values.
1546
1371
  */
1547
1372
  inputOverrides?: InputOverride[];
1373
+ /**
1374
+ * Cryptographic integrity of this component's underlying artifact — model weights or
1375
+ * shards, dataset archive, container image, or package bytes. An array supports
1376
+ * multi-file/sharded artifacts. This is the single, generic home for artifact/subject
1377
+ * integrity across all component types (it replaced the former per-type Container_Image
1378
+ * digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[])
1379
+ * and from the document tamper-evidence Integrity type.
1380
+ */
1381
+ integrity?: Checksum[];
1548
1382
  /**
1549
1383
  * Optional key-value labels for flexible grouping. Well-known keys: system, component,
1550
1384
  * environment, region, team. Values must be strings.
@@ -1559,33 +1393,37 @@ export interface Component {
1559
1393
  * different teams manage different parts of a system.
1560
1394
  */
1561
1395
  owner?: Identity;
1562
- /**
1563
- * Embedded CycloneDX or SPDX SBOM document representing this component's software
1564
- * inventory. The sbomFormat field determines which format constraints apply.
1565
- */
1566
- sbom?: any;
1567
- /**
1568
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1569
- */
1570
- sbomFormat?: SBOMFormat;
1571
- /**
1572
- * URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
1573
- * relative path, absolute URI, or fragment identifier.
1574
- */
1575
- sbomRef?: string;
1576
1396
  /**
1577
1397
  * Label selector to match targets belonging to this component during migration. Targets
1578
1398
  * with matching labels are automatically included.
1579
1399
  */
1580
1400
  targetSelector?: { [key: string]: string };
1581
1401
  /**
1582
- * Component type discriminator. Same values as Target types.
1402
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
1403
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1583
1404
  */
1584
1405
  type: TargetType;
1585
1406
  /**
1586
- * Fully qualified domain name.
1407
+ * Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
1408
+ * host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
1409
+ * workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
1410
+ * from a source that carries directory membership.
1411
+ */
1412
+ domain?: string;
1413
+ /**
1414
+ * Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
1415
+ * (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
1416
+ * schema does not enforce case so source fidelity is preserved on round-trip.
1587
1417
  */
1588
1418
  fqdn?: string;
1419
+ /**
1420
+ * Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
1421
+ * from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
1422
+ * (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
1423
+ * suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
1424
+ * the source reports; do not derive it from the FQDN.
1425
+ */
1426
+ hostname?: string;
1589
1427
  /**
1590
1428
  * IP address of the host.
1591
1429
  */
@@ -1602,10 +1440,6 @@ export interface Component {
1602
1440
  * Operating system version.
1603
1441
  */
1604
1442
  osVersion?: string;
1605
- /**
1606
- * Image digest for immutable reference.
1607
- */
1608
- digest?: string;
1609
1443
  /**
1610
1444
  * Container image ID.
1611
1445
  */
@@ -1654,6 +1488,11 @@ export interface Component {
1654
1488
  * Package version.
1655
1489
  *
1656
1490
  * Database version.
1491
+ *
1492
+ * Model version, revision, or checkpoint tag.
1493
+ *
1494
+ * Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
1495
+ * release marker.
1657
1496
  */
1658
1497
  version?: string;
1659
1498
  /**
@@ -1700,10 +1539,6 @@ export interface Component {
1700
1539
  * Environment. Example: 'production', 'staging', 'development'.
1701
1540
  */
1702
1541
  environment?: string;
1703
- /**
1704
- * Package checksum for verification.
1705
- */
1706
- checksum?: string;
1707
1542
  /**
1708
1543
  * Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
1709
1544
  */
@@ -1732,12 +1567,319 @@ export interface Component {
1732
1567
  * Database port.
1733
1568
  */
1734
1569
  port?: number;
1570
+ /**
1571
+ * Provider/registry identifier for the model. Examples: a Hugging Face repo id
1572
+ * ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
1573
+ * BOM(s) and to lineage references from other models.
1574
+ */
1575
+ modelId?: string;
1576
+ /**
1577
+ * Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
1578
+ * ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
1579
+ * its dataset BOM(s) and to datasetRefs from ai-model components.
1580
+ */
1581
+ datasetId?: string;
1735
1582
  [property: string]: any;
1736
1583
  }
1737
1584
 
1585
+ export interface BillOfMaterials {
1586
+ /**
1587
+ * The manifest kind. Determines which normalized type-extension (model/dataset/packages)
1588
+ * may appear.
1589
+ */
1590
+ bomType: string;
1591
+ /**
1592
+ * Normalized dataset extension. Permitted only when bomType is dataset.
1593
+ */
1594
+ dataset?: DatasetBOMExtension;
1595
+ /**
1596
+ * Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
1597
+ * SPDX object). HDF does not constrain its internal shape — full manifest validation is a
1598
+ * tool-level concern.
1599
+ */
1600
+ document?: { [key: string]: any };
1601
+ /**
1602
+ * Source manifest format the BOM was produced from or references. Examples: cyclonedx,
1603
+ * cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
1604
+ * schema change; the converter that emits the BOM owns the value.
1605
+ */
1606
+ format: string;
1607
+ /**
1608
+ * Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
1609
+ * NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
1610
+ * weights, dataset archive) is a component-level concern, not carried here. Subject
1611
+ * identity is inherited from the host component/system; per-node identity lives in the
1612
+ * type-extension.
1613
+ */
1614
+ hashes?: Checksum[];
1615
+ /**
1616
+ * Optional license of the BOM document as a whole (SPDX license expression). Nullable and
1617
+ * often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
1618
+ * live in the type-extension, not here.
1619
+ */
1620
+ license?: null | string;
1621
+ /**
1622
+ * Normalized ai-model extension. Permitted only when bomType is ai-model.
1623
+ */
1624
+ model?: AIModelBOMExtension;
1625
+ /**
1626
+ * Normalized sbom extension: the flattened software package inventory. Permitted only when
1627
+ * bomType is sbom.
1628
+ */
1629
+ packages?: SBOMPackage[];
1630
+ /**
1631
+ * Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
1632
+ * manifest document. Present for externally-hosted BOMs.
1633
+ */
1634
+ ref?: string;
1635
+ /**
1636
+ * Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
1637
+ * documentNamespace). Correlates the same BOM across evidence packages.
1638
+ */
1639
+ uniqueId?: string;
1640
+ }
1641
+
1738
1642
  /**
1739
- * An override of a baseline input value for a specific component. Enables system-specific
1740
- * tailoring of baseline parameters.
1643
+ * Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All optional;
1644
+ * open for partial-fidelity passthrough of unmapped native fields. Symmetric with
1645
+ * AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just as the
1646
+ * model extension carries baseModelRef/adaptationType.
1647
+ */
1648
+ export interface DatasetBOMExtension {
1649
+ /**
1650
+ * References to the source dataset(s) this one was derived from — a dataset componentId, or
1651
+ * a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
1652
+ * ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
1653
+ */
1654
+ baseDatasetRefs?: string[];
1655
+ /**
1656
+ * Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
1657
+ * phi.
1658
+ */
1659
+ dataClassification?: string;
1660
+ /**
1661
+ * Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
1662
+ */
1663
+ datasetFormat?: string;
1664
+ /**
1665
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1666
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1667
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1668
+ */
1669
+ derivation?: DatasetDerivationType;
1670
+ /**
1671
+ * Free-text statement of the dataset's intended use (CISA/G7 minimum element).
1672
+ */
1673
+ intendedUse?: string;
1674
+ /**
1675
+ * Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
1676
+ * image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
1677
+ * encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
1678
+ * physical format. String or array of strings.
1679
+ */
1680
+ modality?: string[] | string;
1681
+ /**
1682
+ * Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
1683
+ * provenance'; SPDX 3.0 dataset_dataCollectionProcess).
1684
+ */
1685
+ provenance?: string;
1686
+ /**
1687
+ * Number of records/examples in the dataset.
1688
+ */
1689
+ recordCount?: number;
1690
+ /**
1691
+ * Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
1692
+ * open-ended by design). Intentionally free-text and will remain so permanently:
1693
+ * recordCount is the one structured statistic, and restructuring this into an object later
1694
+ * would break existing consumers, so it stays a string (additive-only).
1695
+ */
1696
+ statisticalProperties?: string;
1697
+ [property: string]: any;
1698
+ }
1699
+
1700
+ /**
1701
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1702
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1703
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1704
+ */
1705
+ export enum DatasetDerivationType {
1706
+ Augmented = "augmented",
1707
+ Filtered = "filtered",
1708
+ Merged = "merged",
1709
+ Sampled = "sampled",
1710
+ }
1711
+
1712
+ /**
1713
+ * Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All fields
1714
+ * optional (standards-correct; only the EU AI Act makes a subset binding for high-risk/GPAI). Left
1715
+ * open (additionalProperties: true) so a converter can carry unmapped native fields opaquely
1716
+ * (partial-fidelity pattern). Subject name/version are inherited from the host aiModel component,
1717
+ * not repeated here.
1718
+ */
1719
+ export interface AIModelBOMExtension {
1720
+ /**
1721
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
1722
+ * vocabulary (the only typed lineage enum in the ecosystem).
1723
+ */
1724
+ adaptationType?: ModelAdaptationType;
1725
+ /**
1726
+ * Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
1727
+ * purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
1728
+ */
1729
+ baseModelRef?: string;
1730
+ /**
1731
+ * References to the training/evaluation datasets this model was produced from — preferably
1732
+ * a dataset component's componentId (correlating to a first-class dataset subject rather
1733
+ * than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
1734
+ * component exists.
1735
+ */
1736
+ datasetRefs?: string[];
1737
+ /**
1738
+ * Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
1739
+ * is the set of training knobs, NOT the model's trainable parameterCount — the two are
1740
+ * routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
1741
+ * ai_hyperparameter.
1742
+ */
1743
+ hyperparameters?: Hyperparameter[];
1744
+ /**
1745
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
1746
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
1747
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
1748
+ */
1749
+ inputOutput?: InputOutput;
1750
+ /**
1751
+ * Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
1752
+ */
1753
+ intendedUse?: string;
1754
+ /**
1755
+ * Model's learning/training paradigm. Free-text because the value set varies across
1756
+ * standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
1757
+ * Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
1758
+ * modelParameters.approach.type ∩ CISA/G7 learning type.
1759
+ */
1760
+ learningApproach?: string;
1761
+ /**
1762
+ * Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
1763
+ */
1764
+ modelArchitecture?: string;
1765
+ /**
1766
+ * Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
1767
+ * because the EU AI Act keys GPAI obligations off model scale.
1768
+ */
1769
+ parameterCount?: number;
1770
+ /**
1771
+ * Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
1772
+ * heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
1773
+ * true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
1774
+ * intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
1775
+ * CISA/G7 KPI cluster.
1776
+ */
1777
+ performanceMetrics?: PerformanceMetric[];
1778
+ /**
1779
+ * On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
1780
+ * pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
1781
+ * safetensors, pytorch, gguf, onnx, tensorflow.
1782
+ */
1783
+ serializationFormat?: string;
1784
+ /**
1785
+ * The ML task the model performs. Free-text. Examples: text-classification,
1786
+ * sentiment-analysis, object-detection, translation. Sourced from CycloneDX
1787
+ * modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
1788
+ * intended-application.
1789
+ */
1790
+ task?: string;
1791
+ [property: string]: any;
1792
+ }
1793
+
1794
+ /**
1795
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
1796
+ * vocabulary (the only typed lineage enum in the ecosystem).
1797
+ */
1798
+ export enum ModelAdaptationType {
1799
+ Adapter = "adapter",
1800
+ Finetune = "finetune",
1801
+ Merge = "merge",
1802
+ Quantized = "quantized",
1803
+ }
1804
+
1805
+ export interface Hyperparameter {
1806
+ /**
1807
+ * Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
1808
+ */
1809
+ name?: string;
1810
+ /**
1811
+ * Hyper-parameter value (free-text).
1812
+ */
1813
+ value?: string;
1814
+ [property: string]: any;
1815
+ }
1816
+
1817
+ /**
1818
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
1819
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
1820
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
1821
+ */
1822
+ export interface InputOutput {
1823
+ /**
1824
+ * Maximum context/sequence length the model accepts, in tokens.
1825
+ */
1826
+ contextLength?: number;
1827
+ /**
1828
+ * Input/output data types. Examples: string, byte[], float32, image.
1829
+ */
1830
+ dataTypes?: string[];
1831
+ /**
1832
+ * Input/output modalities. String or array of strings. Examples: text, image, audio.
1833
+ * Symmetric with Dataset_Extension.modality.
1834
+ */
1835
+ modality?: string[] | string;
1836
+ /**
1837
+ * Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
1838
+ */
1839
+ tokenizer?: string;
1840
+ [property: string]: any;
1841
+ }
1842
+
1843
+ export interface PerformanceMetric {
1844
+ /**
1845
+ * Metric name. Examples: accuracy, f1, BLEU, latency.
1846
+ */
1847
+ name?: string;
1848
+ /**
1849
+ * Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
1850
+ * milliseconds).
1851
+ */
1852
+ value?: string;
1853
+ [property: string]: any;
1854
+ }
1855
+
1856
+ /**
1857
+ * A single normalized software package entry within an sbom BOM. Minimal identity + version for
1858
+ * querying/diffing; the full native record remains available via passthrough (document/ref).
1859
+ */
1860
+ export interface SBOMPackage {
1861
+ /**
1862
+ * SPDX license identifiers/expressions for this package.
1863
+ */
1864
+ licenses?: string[];
1865
+ /**
1866
+ * Package name.
1867
+ */
1868
+ name: string;
1869
+ /**
1870
+ * Package URL (purl) — the preferred cross-BOM identity key when present.
1871
+ */
1872
+ purl?: string;
1873
+ /**
1874
+ * Package version.
1875
+ */
1876
+ version?: string;
1877
+ [property: string]: any;
1878
+ }
1879
+
1880
+ /**
1881
+ * An override of a baseline input value for a specific component. Enables system-specific tailoring
1882
+ * of baseline parameters.
1741
1883
  */
1742
1884
  export interface InputOverride {
1743
1885
  /**
@@ -1773,17 +1915,11 @@ export enum CloudProvider {
1773
1915
  }
1774
1916
 
1775
1917
  /**
1776
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1777
- */
1778
- export enum SBOMFormat {
1779
- Cyclonedx = "cyclonedx",
1780
- Spdx = "spdx",
1781
- }
1782
-
1783
- /**
1784
- * Component type discriminator. Same values as Target types.
1918
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
1919
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1785
1920
  */
1786
1921
  export enum TargetType {
1922
+ AIModel = "aiModel",
1787
1923
  Application = "application",
1788
1924
  Artifact = "artifact",
1789
1925
  CloudAccount = "cloudAccount",
@@ -1792,25 +1928,14 @@ export enum TargetType {
1792
1928
  ContainerInstance = "containerInstance",
1793
1929
  ContainerPlatform = "containerPlatform",
1794
1930
  Database = "database",
1931
+ Dataset = "dataset",
1795
1932
  Host = "host",
1796
1933
  Network = "network",
1797
1934
  Repository = "repository",
1798
1935
  }
1799
1936
 
1800
1937
  /**
1801
- * Information about the tool that generated this file.
1802
- *
1803
1938
  * Information about the tool that generated this HDF file.
1804
- *
1805
- * The tool that generated this file.
1806
- *
1807
- * Information about the tool that generated this comparison.
1808
- *
1809
- * Information about the tool that generated this system document.
1810
- *
1811
- * Information about the tool that generated this plan.
1812
- *
1813
- * Information about the tool that generated this document.
1814
1939
  */
1815
1940
  export interface Generator {
1816
1941
  /**
@@ -1825,15 +1950,9 @@ export interface Generator {
1825
1950
  }
1826
1951
 
1827
1952
  /**
1828
- * Optional reference to automated remediation resources (Ansible playbooks, Terraform
1829
- * scripts, etc.) for fixing failing requirements found in this assessment.
1830
- *
1831
- * Reference to automated remediation resources for implementing security controls. Points
1832
- * to external automation content like Ansible playbooks, Terraform scripts, or
1833
- * vendor-provided remediation tools.
1834
- *
1835
- * Optional reference to automated remediation resources (Ansible playbooks, Terraform
1836
- * scripts, etc.) for implementing the security controls defined in this baseline.
1953
+ * Reference to automated remediation resources for implementing security controls. Points to
1954
+ * external automation content like Ansible playbooks, Terraform scripts, or vendor-provided
1955
+ * remediation tools.
1837
1956
  */
1838
1957
  export interface Remediation {
1839
1958
  /**
@@ -1852,12 +1971,8 @@ export interface Remediation {
1852
1971
  }
1853
1972
 
1854
1973
  /**
1855
- * Information about the test execution environment where the security tool was run.
1856
- * Distinct from targets (what is being tested).
1857
- *
1858
- * Information about the test execution environment. This is distinct from the target being
1859
- * scanned - the runner is where the security tool executes, while targets are what is being
1860
- * assessed.
1974
+ * Information about the test execution environment. This is distinct from the target being scanned
1975
+ * - the runner is where the security tool executes, while targets are what is being assessed.
1861
1976
  */
1862
1977
  export interface Runner {
1863
1978
  /**
@@ -1875,7 +1990,18 @@ export interface Runner {
1875
1990
  */
1876
1991
  containerImage?: string;
1877
1992
  /**
1878
- * The hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
1993
+ * The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
1994
+ * NOT the DNS suffix of the FQDN. Example: 'CORP'.
1995
+ */
1996
+ domain?: string;
1997
+ /**
1998
+ * The fully qualified domain name of the runner system, when known. Distinct from the short
1999
+ * 'hostname'; kept separate for the same reason as on host components (an FQDN is not
2000
+ * reliably decomposable). Example: 'ci-runner-01.build.example.com'.
2001
+ */
2002
+ fqdn?: string;
2003
+ /**
2004
+ * The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
1879
2005
  * 'k8s-node-worker-03'.
1880
2006
  */
1881
2007
  hostname?: string;
@@ -1898,8 +2024,6 @@ export interface Runner {
1898
2024
  }
1899
2025
 
1900
2026
  /**
1901
- * Statistics for the assessment run, including duration and result counts.
1902
- *
1903
2027
  * Statistics for the assessment run(s) such as duration and result counts.
1904
2028
  */
1905
2029
  export interface Statistics {
@@ -1915,8 +2039,6 @@ export interface Statistics {
1915
2039
  }
1916
2040
 
1917
2041
  /**
1918
- * Breakdowns of requirement statistics by result status.
1919
- *
1920
2042
  * Statistics for requirement results, grouped by status.
1921
2043
  */
1922
2044
  export interface StatisticHash {
@@ -1944,17 +2066,7 @@ export interface StatisticHash {
1944
2066
  }
1945
2067
 
1946
2068
  /**
1947
- * Statistics for requirements that encountered an error during assessment.
1948
- *
1949
2069
  * Statistics for a given item, such as the total count.
1950
- *
1951
- * Statistics for requirements that failed.
1952
- *
1953
- * Statistics for requirements that are not applicable to the target.
1954
- *
1955
- * Statistics for requirements that were not reviewed (manual check required).
1956
- *
1957
- * Statistics for requirements that passed.
1958
2070
  */
1959
2071
  export interface StatisticBlock {
1960
2072
  /**
@@ -1965,12 +2077,8 @@ export interface StatisticBlock {
1965
2077
  }
1966
2078
 
1967
2079
  /**
1968
- * The security tool that produced the assessment data in this file.
1969
- *
1970
- * The security tool that produced the assessment data represented in this HDF file. Aligns
1971
- * with SARIF, OSCAL, and CycloneDX terminology.
1972
- *
1973
- * The security tool that produced the assessment data in this source.
2080
+ * The security tool that produced the assessment data represented in this HDF file. Aligns with
2081
+ * SARIF, OSCAL, and CycloneDX terminology.
1974
2082
  */
1975
2083
  export interface Tool {
1976
2084
  /**
@@ -1992,11 +2100,8 @@ export interface Tool {
1992
2100
  }
1993
2101
 
1994
2102
  /**
1995
- * Information on the set of requirements that can be assessed, including baseline metadata
1996
- * and requirement definitions.
1997
- *
1998
- * Shared metadata fields for baselines. Used in both standalone baseline documents and
1999
- * evaluated baseline results.
2103
+ * Information on the set of requirements that can be assessed, including baseline metadata and
2104
+ * requirement definitions.
2000
2105
  */
2001
2106
  export interface HDFBaseline {
2002
2107
  /**
@@ -2079,9 +2184,6 @@ export interface HDFBaseline {
2079
2184
 
2080
2185
  /**
2081
2186
  * A requirement definition without assessment results.
2082
- *
2083
- * Core requirement fields shared between baseline requirements and evaluated requirements.
2084
- * Contains the fundamental requirement definition without assessment results.
2085
2187
  */
2086
2188
  export interface BaselineRequirement {
2087
2189
  /**
@@ -2157,8 +2259,8 @@ export interface BaselineRequirement {
2157
2259
  }
2158
2260
 
2159
2261
  /**
2160
- * Structured comparison between two or more HDF security assessment documents. Supports
2161
- * temporal, baseline, fleet, and multi-source comparison modes.
2262
+ * Structured comparison between two or more HDF security assessment documents. Supports temporal,
2263
+ * baseline, fleet, and multi-source comparison modes.
2162
2264
  */
2163
2265
  export interface HDFComparison {
2164
2266
  /**
@@ -2175,7 +2277,8 @@ export interface HDFComparison {
2175
2277
  */
2176
2278
  comparisonMode: ComparisonMode;
2177
2279
  /**
2178
- * Comparison of components between two system documents. Used in systemDrift mode.
2280
+ * Comparison of components between two system documents. Used in systemDrift mode. A
2281
+ * component's BOM changes surface as a field change on its boms[] here.
2179
2282
  */
2180
2283
  componentDiffs?: ComponentDiff[];
2181
2284
  /**
@@ -2203,7 +2306,11 @@ export interface HDFComparison {
2203
2306
  */
2204
2307
  matching?: MatchingConfig;
2205
2308
  /**
2206
- * Comparison of packages between two SBOMs. Used in systemDrift mode for SBOM comparison.
2309
+ * RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
2310
+ * component's BOM changes as a field change on its boms[] (see componentDiffs), and
2311
+ * standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
2312
+ * field is retained for a future normalized package-level diff; consumers must not expect
2313
+ * it from today's systemDrift output.
2207
2314
  */
2208
2315
  packageDiffs?: PackageDiff[];
2209
2316
  /**
@@ -2253,8 +2360,6 @@ export interface Annotation {
2253
2360
  }
2254
2361
 
2255
2362
  /**
2256
- * The category of this annotation.
2257
- *
2258
2363
  * The category of an annotation attached to a comparison.
2259
2364
  */
2260
2365
  export enum AnnotationCategory {
@@ -2305,13 +2410,11 @@ export enum BaselineDiffState {
2305
2410
  }
2306
2411
 
2307
2412
  /**
2308
- * The mode of comparison being performed.
2309
- *
2310
- * The mode of comparison. 'temporal' compares the same target over time. 'baseline'
2311
- * compares against a golden reference. 'fleet' compares across multiple systems.
2312
- * 'multiSource' compares outputs from different scanners. 'baselineEvolution' compares two
2313
- * baseline documents to detect requirement changes between versions. 'systemDrift' compares
2314
- * two system documents to detect component-level changes.
2413
+ * The mode of comparison. 'temporal' compares the same target over time. 'baseline' compares
2414
+ * against a golden reference. 'fleet' compares across multiple systems. 'multiSource' compares
2415
+ * outputs from different scanners. 'baselineEvolution' compares two baseline documents to detect
2416
+ * requirement changes between versions. 'systemDrift' compares two system documents to detect
2417
+ * component-level changes.
2315
2418
  */
2316
2419
  export enum ComparisonMode {
2317
2420
  Baseline = "baseline",
@@ -2516,8 +2619,6 @@ export interface ScannerConflict {
2516
2619
  }
2517
2620
 
2518
2621
  /**
2519
- * How the conflict was resolved.
2520
- *
2521
2622
  * How a conflict between multiple scanner results was resolved.
2522
2623
  */
2523
2624
  export enum ConflictResolution {
@@ -2544,13 +2645,9 @@ export interface Value {
2544
2645
  }
2545
2646
 
2546
2647
  /**
2547
- * The strategy that was used to match this requirement across sources.
2548
- *
2549
- * The strategy used to match requirements across sources. 'exactId' matches by identical
2550
- * IDs. 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework
2551
- * identifiers. 'fuzzyTitle'/'fuzzyContent' use text similarity.
2552
- *
2553
- * The primary strategy used to match requirements across sources.
2648
+ * The strategy used to match requirements across sources. 'exactId' matches by identical IDs.
2649
+ * 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework identifiers.
2650
+ * 'fuzzyTitle'/'fuzzyContent' use text similarity.
2554
2651
  */
2555
2652
  export enum MatchStrategy {
2556
2653
  CciMatch = "cciMatch",
@@ -2562,12 +2659,10 @@ export enum MatchStrategy {
2562
2659
  }
2563
2660
 
2564
2661
  /**
2565
- * The state of this requirement in the comparison.
2566
- *
2567
- * SARIF-compatible vocabulary extended for security. 'new' = present only in new source,
2568
- * 'absent' = present only in old, 'unchanged' = same effective status, 'updated' = status
2569
- * changed (generic), 'fixed' = was failing now passing, 'regressed' = was passing now
2570
- * failing, 'moved' = reorganized same content, 'split'/'merged' = reserved for v1.1.
2662
+ * SARIF-compatible vocabulary extended for security. 'new' = present only in new source, 'absent' =
2663
+ * present only in old, 'unchanged' = same effective status, 'updated' = status changed (generic),
2664
+ * 'fixed' = was failing now passing, 'regressed' = was passing now failing, 'moved' = reorganized
2665
+ * same content, 'split'/'merged' = reserved for v1.1.
2571
2666
  */
2572
2667
  export enum RequirementState {
2573
2668
  Absent = "absent",
@@ -2586,8 +2681,6 @@ export enum FormatVersion {
2586
2681
  }
2587
2682
 
2588
2683
  /**
2589
- * Configuration for how requirements were matched across sources.
2590
- *
2591
2684
  * Configuration for how requirements are matched across sources.
2592
2685
  */
2593
2686
  export interface MatchingConfig {
@@ -2615,15 +2708,22 @@ export interface MatchingConfig {
2615
2708
  }
2616
2709
 
2617
2710
  /**
2618
- * Comparison of a single package between two SBOM versions, matched by purl.
2711
+ * Comparison of a single BOM node between two BOM versions, matched by purl (software) or
2712
+ * identifier (models, datasets, hardware, crypto).
2619
2713
  */
2620
2714
  export interface PackageDiff {
2715
+ /**
2716
+ * Generic identity key for matching a BOM node across versions when no purl applies — e.g.
2717
+ * a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
2718
+ * number. At least one of purl or identifier is required.
2719
+ */
2720
+ identifier?: string;
2621
2721
  /**
2622
2722
  * License identifiers for this package.
2623
2723
  */
2624
2724
  licenses?: string[];
2625
2725
  /**
2626
- * Human-readable package name.
2726
+ * Human-readable node name.
2627
2727
  */
2628
2728
  name?: string;
2629
2729
  /**
@@ -2635,9 +2735,11 @@ export interface PackageDiff {
2635
2735
  */
2636
2736
  oldVersion?: string;
2637
2737
  /**
2638
- * Package URL (purl) used as the identity key for matching across SBOMs.
2738
+ * Package URL (purl) — the preferred identity key for matching software packages across
2739
+ * BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
2740
+ * algorithms) key on identifier instead.
2639
2741
  */
2640
- purl: string;
2742
+ purl?: string;
2641
2743
  /**
2642
2744
  * The state of this package: added (new in new SBOM), removed (absent from new SBOM),
2643
2745
  * updated (version changed), unchanged.
@@ -2727,8 +2829,6 @@ export enum OriginalFormat {
2727
2829
  }
2728
2830
 
2729
2831
  /**
2730
- * The role of this source in the comparison.
2731
- *
2732
2832
  * The role of a source document in the comparison.
2733
2833
  */
2734
2834
  export enum SourceRole {
@@ -2815,8 +2915,6 @@ export interface ComparisonSummary {
2815
2915
  }
2816
2916
 
2817
2917
  /**
2818
- * State counts broken down by severity level.
2819
- *
2820
2918
  * Breakdown of state counts by severity level.
2821
2919
  */
2822
2920
  export interface SeverityBreakdown {
@@ -2840,15 +2938,7 @@ export interface SeverityBreakdown {
2840
2938
  }
2841
2939
 
2842
2940
  /**
2843
- * State counts for critical severity requirements.
2844
- *
2845
2941
  * Counts of requirements in each state.
2846
- *
2847
- * State counts for high severity requirements.
2848
- *
2849
- * State counts for low severity requirements.
2850
- *
2851
- * State counts for medium severity requirements.
2852
2942
  */
2853
2943
  export interface StateCounts {
2854
2944
  /**
@@ -2926,8 +3016,8 @@ export interface PerSourceSummary {
2926
3016
  }
2927
3017
 
2928
3018
  /**
2929
- * Describes a system's authorization boundary, components, and interconnections. Maps to
2930
- * OSCAL SSP system-characteristics and FedRAMP system inventory.
3019
+ * Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP
3020
+ * system-characteristics and FedRAMP system inventory.
2931
3021
  */
2932
3022
  export interface HDFSystem {
2933
3023
  /**
@@ -2938,6 +3028,13 @@ export interface HDFSystem {
2938
3028
  * Current Authorization to Operate (ATO) status.
2939
3029
  */
2940
3030
  authorizationStatus?: AuthorizationStatus;
3031
+ /**
3032
+ * System-scoped Bills of Materials whose subject is the authorization boundary rather than
3033
+ * a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
3034
+ * Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
3035
+ * primitives/bom.schema.json.
3036
+ */
3037
+ boms?: BillOfMaterials[];
2941
3038
  /**
2942
3039
  * Description of the system's authorization boundary. Example: network CIDR blocks, cloud
2943
3040
  * VPC IDs, physical locations.
@@ -2949,7 +3046,8 @@ export interface HDFSystem {
2949
3046
  categorizationLevel?: CategorizationLevel;
2950
3047
  /**
2951
3048
  * System components within the authorization boundary. Uses the full polymorphic Component
2952
- * type with stable identity (componentId), external references, and SBOM support.
3049
+ * type with stable identity (componentId), external references, and generalized BOM
3050
+ * attachment (boms[]).
2953
3051
  */
2954
3052
  components: Component[];
2955
3053
  /**
@@ -3012,8 +3110,6 @@ export interface HDFSystem {
3012
3110
  }
3013
3111
 
3014
3112
  /**
3015
- * Current Authorization to Operate (ATO) status.
3016
- *
3017
3113
  * Authorization to Operate (ATO) status for the system.
3018
3114
  */
3019
3115
  export enum AuthorizationStatus {
@@ -3026,8 +3122,6 @@ export enum AuthorizationStatus {
3026
3122
  }
3027
3123
 
3028
3124
  /**
3029
- * FIPS 199 security categorization (impact level).
3030
- *
3031
3125
  * FIPS 199 security categorization level (impact level).
3032
3126
  */
3033
3127
  export enum CategorizationLevel {
@@ -3037,10 +3131,10 @@ export enum CategorizationLevel {
3037
3131
  }
3038
3132
 
3039
3133
  /**
3040
- * Declares a control's designation within a system — whether it is common (provided by
3041
- * another component or system), system-specific (implemented locally), or hybrid (shared
3042
- * responsibility). Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP
3043
- * by-component provided/inherited semantics.
3134
+ * Declares a control's designation within a system — whether it is common (provided by another
3135
+ * component or system), system-specific (implemented locally), or hybrid (shared responsibility).
3136
+ * Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP by-component
3137
+ * provided/inherited semantics.
3044
3138
  */
3045
3139
  export interface ControlDesignation {
3046
3140
  /**
@@ -3089,9 +3183,9 @@ export enum Designation {
3089
3183
  }
3090
3184
 
3091
3185
  /**
3092
- * A data flow between two endpoints. The 'from' endpoint is always a local component; the
3093
- * 'to' endpoint can be local, cross-system, or external. Use 'direction' to indicate
3094
- * whether data flows one-way or both ways.
3186
+ * A data flow between two endpoints. The 'from' endpoint is always a local component; the 'to'
3187
+ * endpoint can be local, cross-system, or external. Use 'direction' to indicate whether data flows
3188
+ * one-way or both ways.
3095
3189
  */
3096
3190
  export interface DataFlow {
3097
3191
  /**
@@ -3140,8 +3234,8 @@ export enum Direction {
3140
3234
  }
3141
3235
 
3142
3236
  /**
3143
- * Defines an assessment plan — what baselines to run against which targets, with resolved
3144
- * inputs and scheduling. Maps to OSCAL Assessment Plan.
3237
+ * Defines an assessment plan — what baselines to run against which targets, with resolved inputs
3238
+ * and scheduling. Maps to OSCAL Assessment Plan.
3145
3239
  */
3146
3240
  export interface HDFPlan {
3147
3241
  /**
@@ -3195,8 +3289,8 @@ export interface HDFPlan {
3195
3289
  }
3196
3290
 
3197
3291
  /**
3198
- * A single assessment within a plan — defines which baseline to run against which targets
3199
- * with what configuration.
3292
+ * A single assessment within a plan — defines which baseline to run against which targets with what
3293
+ * configuration.
3200
3294
  */
3201
3295
  export interface Assessment {
3202
3296
  /**
@@ -3232,8 +3326,6 @@ export interface Assessment {
3232
3326
  }
3233
3327
 
3234
3328
  /**
3235
- * Runner/scanner configuration for this assessment.
3236
- *
3237
3329
  * Configuration for the assessment runner/scanner.
3238
3330
  */
3239
3331
  export interface RunnerConfig {
@@ -3249,8 +3341,6 @@ export interface RunnerConfig {
3249
3341
  }
3250
3342
 
3251
3343
  /**
3252
- * Optional scheduling configuration for recurring assessments.
3253
- *
3254
3344
  * Scheduling configuration for recurring assessments.
3255
3345
  */
3256
3346
  export interface Schedule {
@@ -3279,10 +3369,8 @@ export interface Schedule {
3279
3369
  }
3280
3370
 
3281
3371
  /**
3282
- * The type of assessment plan.
3283
- *
3284
- * The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed,
3285
- * 'hybrid' for both.
3372
+ * The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed, 'hybrid'
3373
+ * for both.
3286
3374
  */
3287
3375
  export enum PlanType {
3288
3376
  Automated = "automated",
@@ -3291,8 +3379,8 @@ export enum PlanType {
3291
3379
  }
3292
3380
 
3293
3381
  /**
3294
- * Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
3295
- * Amendments are standalone documents that can be applied to results via merge operations.
3382
+ * Waivers, attestations, and POA&Ms that modify requirement compliance status or impact. Amendments
3383
+ * are standalone documents that can be applied to results via merge operations.
3296
3384
  */
3297
3385
  export interface HDFAmendments {
3298
3386
  /**
@@ -3350,18 +3438,18 @@ export interface HDFAmendments {
3350
3438
  }
3351
3439
 
3352
3440
  /**
3353
- * A standalone override to a requirement's compliance status or risk impact. Validation has
3354
- * two branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor
3355
- * 'impact' may be set — the override records accepted risk without changing the finding
3356
- * (documentation-only). For all other types, at least one of 'status' or 'impact' must be
3357
- * set. This rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
3441
+ * A standalone override to a requirement's compliance status or risk impact. Validation has two
3442
+ * branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor 'impact'
3443
+ * may be set — the override records accepted risk without changing the finding
3444
+ * (documentation-only). For all other types, at least one of 'status' or 'impact' must be set. This
3445
+ * rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
3358
3446
  * finding.associated-risk[].facet[] are separate axes
3359
- * (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2)
3360
- * FedRAMP deviation request types — Risk Adjustment changes impact only, Operational
3361
- * Requirement documents acceptance only, False Positive changes status
3362
- * (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3)
3363
- * NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from
3364
- * control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
3447
+ * (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2) FedRAMP
3448
+ * deviation request types — Risk Adjustment changes impact only, Operational Requirement documents
3449
+ * acceptance only, False Positive changes status
3450
+ * (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3) NIST SP
3451
+ * 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from control assessment
3452
+ * status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
3365
3453
  */
3366
3454
  export interface StandaloneOverride {
3367
3455
  /**
@@ -3459,9 +3547,8 @@ export interface StandaloneOverride {
3459
3547
  }
3460
3548
 
3461
3549
  /**
3462
- * Bundles references to all HDF documents for audit, authorization, and compliance review.
3463
- * Each content entry references a document by type, URI, and checksum for integrity
3464
- * verification.
3550
+ * Bundles references to all HDF documents for audit, authorization, and compliance review. Each
3551
+ * content entry references a document by type, URI, and checksum for integrity verification.
3465
3552
  */
3466
3553
  export interface HDFEvidencePackage {
3467
3554
  /**
@@ -3476,6 +3563,13 @@ export interface HDFEvidencePackage {
3476
3563
  * Description of the evidence package's purpose and scope.
3477
3564
  */
3478
3565
  description?: string;
3566
+ /**
3567
+ * References to external native-format evidence (log/telemetry corpora and other artifacts)
3568
+ * carried by URI + integrity hash + format discriminator, without recreating the data
3569
+ * inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
3570
+ * here rather than transcoding them.
3571
+ */
3572
+ externalEvidence?: ExternalEvidenceReference[];
3479
3573
  /**
3480
3574
  * Information about the tool that generated this document.
3481
3575
  */
@@ -3529,10 +3623,8 @@ export interface HDFEvidencePackage {
3529
3623
  }
3530
3624
 
3531
3625
  /**
3532
- * Summary of assessment completeness and compliance status.
3533
- *
3534
- * Informational summary of assessment completeness. Not authoritative — tools should
3535
- * compute these from the referenced documents.
3626
+ * Informational summary of assessment completeness. Not authoritative — tools should compute these
3627
+ * from the referenced documents.
3536
3628
  */
3537
3629
  export interface CompletenessCheck {
3538
3630
  /**
@@ -3563,8 +3655,6 @@ export interface CompletenessCheck {
3563
3655
  }
3564
3656
 
3565
3657
  /**
3566
- * SBOM coverage across system components.
3567
- *
3568
3658
  * SBOM coverage statistics for the system.
3569
3659
  */
3570
3660
  export interface SBOMCoverage {
@@ -3580,7 +3670,7 @@ export interface SBOMCoverage {
3580
3670
  }
3581
3671
 
3582
3672
  /**
3583
- * A reference to an HDF document or SBOM included in the evidence package.
3673
+ * A reference to an HDF document or BOM/manifest included in the evidence package.
3584
3674
  */
3585
3675
  export interface ContentReference {
3586
3676
  /**
@@ -3608,16 +3698,95 @@ export interface ContentReference {
3608
3698
  }
3609
3699
 
3610
3700
  /**
3611
- * The type of HDF document being referenced.
3612
- *
3613
- * The type of document referenced in the evidence package.
3701
+ * The type of document referenced in the evidence package. 'bom' covers any
3702
+ * Bill-of-Materials/manifest document (SBOM, AI model/dataset, and reserved future kinds) — its
3703
+ * specific kind is carried by the referenced document's bomType, not by a per-kind Content_Type
3704
+ * value.
3614
3705
  */
3615
3706
  export enum ContentType {
3707
+ BOM = "bom",
3616
3708
  HdfAmendments = "hdf-amendments",
3617
3709
  HdfBaseline = "hdf-baseline",
3618
3710
  HdfComparison = "hdf-comparison",
3619
3711
  HdfPlan = "hdf-plan",
3620
3712
  HdfResults = "hdf-results",
3621
3713
  HdfSystem = "hdf-system",
3622
- Sbom = "sbom",
3714
+ }
3715
+
3716
+ /**
3717
+ * A reference to external native-format evidence (log/telemetry corpus or other artifact) carried
3718
+ * by URI + integrity hash + format discriminator. Reference-only: the artifact is never embedded
3719
+ * (corpora can be huge) or transcoded (that would be lossy) — it stays canonical in its native
3720
+ * format and HDF acts as the structured index.
3721
+ */
3722
+ export interface ExternalEvidenceReference {
3723
+ /**
3724
+ * Cryptographic checksum of the referenced artifact for integrity verification.
3725
+ */
3726
+ checksum?: Checksum;
3727
+ /**
3728
+ * Optional human-readable description of this evidence entry.
3729
+ */
3730
+ description?: string;
3731
+ /**
3732
+ * The native format discriminator of the referenced artifact.
3733
+ */
3734
+ format: string;
3735
+ /**
3736
+ * Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
3737
+ * Free-text and untrusted — HDF does not validate it against a registry.
3738
+ */
3739
+ formatVersion?: string;
3740
+ /**
3741
+ * Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
3742
+ * (the semantic standard). Examples: application/x-ndjson, application/json,
3743
+ * application/vnd.apache.parquet, text/csv.
3744
+ */
3745
+ mediaType?: string;
3746
+ /**
3747
+ * Optional descriptive metadata about the referenced corpus. Does not affect integrity.
3748
+ */
3749
+ metadata?: ExternalEvidenceMetadata;
3750
+ /**
3751
+ * URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
3752
+ * a relative path or absolute URL. The data stays canonical in its native format — HDF
3753
+ * references it, never parses or transcodes it.
3754
+ */
3755
+ uri: string;
3756
+ [property: string]: any;
3757
+ }
3758
+
3759
+ /**
3760
+ * Descriptive metadata about a referenced external evidence corpus. Does not affect integrity.
3761
+ */
3762
+ export interface ExternalEvidenceMetadata {
3763
+ /**
3764
+ * The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
3765
+ * 'elastic-agent'.
3766
+ */
3767
+ collector?: string;
3768
+ /**
3769
+ * Approximate number of records/events in the referenced corpus.
3770
+ */
3771
+ recordCount?: number;
3772
+ /**
3773
+ * The time window the referenced evidence covers.
3774
+ */
3775
+ timeRange?: ExternalEvidenceTimeRange;
3776
+ [property: string]: any;
3777
+ }
3778
+
3779
+ /**
3780
+ * The time window a referenced external evidence corpus covers.
3781
+ */
3782
+ export interface ExternalEvidenceTimeRange {
3783
+ /**
3784
+ * End of the time window the corpus covers (ISO 8601).
3785
+ */
3786
+ end?: Date;
3787
+ /**
3788
+ * Start of the time window the corpus covers (ISO 8601).
3789
+ */
3790
+ start?: Date;
3791
+ [property: string]: any;
3623
3792
  }