@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.d.ts CHANGED
@@ -67,9 +67,6 @@ export interface HDFResults {
67
67
  }
68
68
  /**
69
69
  * Information on a baseline that was evaluated, including any findings.
70
- *
71
- * Shared metadata fields for baselines. Used in both standalone baseline documents and
72
- * evaluated baseline results.
73
70
  */
74
71
  export interface EvaluatedBaseline {
75
72
  /**
@@ -176,8 +173,7 @@ export interface EvaluatedBaseline {
176
173
  [property: string]: any;
177
174
  }
178
175
  /**
179
- * A dependency for a baseline. Can include relative paths or URLs for where to find the
180
- * dependency.
176
+ * A dependency for a baseline. Can include relative paths or URLs for where to find the dependency.
181
177
  */
182
178
  export interface Dependency {
183
179
  /**
@@ -239,9 +235,9 @@ export interface RequirementGroup {
239
235
  [property: string]: any;
240
236
  }
241
237
  /**
242
- * A typed input parameter that bridges governance requirements and scanner automation.
243
- * Inputs carry expected configuration values with type information, comparison operators,
244
- * and validation constraints, enabling traceability from policy through to scan results.
238
+ * A typed input parameter that bridges governance requirements and scanner automation. Inputs carry
239
+ * expected configuration values with type information, comparison operators, and validation
240
+ * constraints, enabling traceability from policy through to scan results.
245
241
  */
246
242
  export interface Input {
247
243
  /**
@@ -281,8 +277,6 @@ export interface Input {
281
277
  [property: string]: any;
282
278
  }
283
279
  /**
284
- * Validation constraints for the input value.
285
- *
286
280
  * Validation constraints for an input value.
287
281
  */
288
282
  export interface InputConstraints {
@@ -305,8 +299,6 @@ export interface InputConstraints {
305
299
  [property: string]: any;
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
  */
@@ -323,8 +315,6 @@ export declare enum ComparisonOperator {
323
315
  NotIn = "notIn"
324
316
  }
325
317
  /**
326
- * The data type of this input.
327
- *
328
318
  * The data type of the input value. Aligns with InSpec input types.
329
319
  */
330
320
  export declare enum InputType {
@@ -336,27 +326,8 @@ export declare enum InputType {
336
326
  String = "String"
337
327
  }
338
328
  /**
339
- * Cryptographic integrity information for verifying this baseline has not been tampered
340
- * with.
341
- *
342
- * Cryptographic integrity information for verifying the HDF file has not been tampered
343
- * with. If algorithm is provided, checksum must also be provided, and vice versa.
344
- *
345
- * Cryptographic integrity information for verifying this file.
346
- *
347
- * Cryptographic integrity information for verifying this comparison document.
348
- *
349
- * Cryptographic integrity information for verifying this system document has not been
350
- * tampered with.
351
- *
352
- * Cryptographic integrity information for verifying this plan document has not been
353
- * tampered with.
354
- *
355
- * Cryptographic integrity information for verifying this amendments document has not been
356
- * tampered with.
357
- *
358
- * Cryptographic integrity information for verifying this evidence package has not been
359
- * tampered with.
329
+ * Cryptographic integrity information for verifying the HDF file has not been tampered with. If
330
+ * algorithm is provided, checksum must also be provided, and vice versa.
360
331
  */
361
332
  export interface Integrity {
362
333
  /**
@@ -378,40 +349,17 @@ export interface Integrity {
378
349
  [property: string]: any;
379
350
  }
380
351
  /**
381
- * The hash algorithm used for the checksum.
382
- *
383
- * Supported cryptographic hash algorithms for checksums and integrity verification.
352
+ * Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers
353
+ * container-image and other artifact digests that use it.
384
354
  */
385
355
  export declare enum HashAlgorithm {
356
+ Blake3 = "blake3",
386
357
  Sha256 = "sha256",
387
358
  Sha384 = "sha384",
388
359
  Sha512 = "sha512"
389
360
  }
390
361
  /**
391
- * SHA-256 checksum of the original baseline definition file (before execution). This is an
392
- * immutable reference to the baseline as defined, used to detect tampering with baseline
393
- * requirements or metadata.
394
- *
395
362
  * Cryptographic checksum for baseline integrity verification.
396
- *
397
- * SHA-256 checksum of the previous amendment in chronological order. Creates a
398
- * tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
399
- * on a requirement.
400
- *
401
- * SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
402
- * Used to detect tampering with test results. Compare with currentChecksum to verify
403
- * amendment integrity.
404
- *
405
- * Optional cryptographic checksum for verifying the integrity of remediation resources
406
- * fetched from the URI. Recommended for security when referencing external automation
407
- * scripts.
408
- *
409
- * Cryptographic checksum of the source document for integrity verification.
410
- *
411
- * Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
412
- * for the first amendment.
413
- *
414
- * Cryptographic checksum for verifying the referenced document's integrity.
415
363
  */
416
364
  export interface Checksum {
417
365
  /**
@@ -426,9 +374,6 @@ export interface Checksum {
426
374
  }
427
375
  /**
428
376
  * A requirement that has been evaluated, including any findings.
429
- *
430
- * Core requirement fields shared between baseline requirements and evaluated requirements.
431
- * Contains the fundamental requirement definition without assessment results.
432
377
  */
433
378
  export interface EvaluatedRequirement {
434
379
  /**
@@ -577,14 +522,13 @@ export interface EvaluatedRequirement {
577
522
  }
578
523
  /**
579
524
  * Represents a package referenced by a vulnerability finding or by an amendment's scope. On
580
- * Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'.
581
- * On Standalone_Override.affectedPackages it says 'this amendment is scoped to these
582
- * packages' (used by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a
583
- * system-level component identifier — see `components[]` on hdf-system for those. Validity
584
- * requires at least one of: (name + version + ecosystem), purl alone, or cpe alone. purl
585
- * and cpe are self-describing identifiers that encode name/version implicitly, so either
586
- * may stand on its own; the name+version+ecosystem combination is the explicit form for
587
- * sources without formal identifiers.
525
+ * Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'. On
526
+ * Standalone_Override.affectedPackages it says 'this amendment is scoped to these packages' (used
527
+ * by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a system-level component identifier
528
+ * — see `components[]` on hdf-system for those. Validity requires at least one of: (name + version
529
+ * + ecosystem), purl alone, or cpe alone. purl and cpe are self-describing identifiers that encode
530
+ * name/version implicitly, so either may stand on its own; the name+version+ecosystem combination
531
+ * is the explicit form for sources without formal identifiers.
588
532
  */
589
533
  export interface AffectedPackage {
590
534
  /**
@@ -671,16 +615,12 @@ export declare enum ControlType {
671
615
  Technical = "technical"
672
616
  }
673
617
  /**
674
- * Structured CVSS scoring data backing this override. Captures the rubric (which
675
- * Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
676
- * a riskAdjustment. For other override types this is optional context.
677
- *
678
- * A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding.
679
- * Captures the vendor-supplied Base metric group and optional consumer-supplied Threat,
680
- * Environmental, and Supplemental metric groups. Supports all four CVSS major versions
681
- * (2.0, 3.0, 3.1, 4.0). Vector strings are validated against a permissive umbrella grammar;
682
- * semantic validation (correct metrics per version, correct values per metric) is performed
683
- * by the hdf-utilities `validateCvssVector` helper rather than at the schema layer.
618
+ * A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding. Captures
619
+ * the vendor-supplied Base metric group and optional consumer-supplied Threat, Environmental, and
620
+ * Supplemental metric groups. Supports all four CVSS major versions (2.0, 3.0, 3.1, 4.0). Vector
621
+ * strings are validated against a permissive umbrella grammar; semantic validation (correct metrics
622
+ * per version, correct values per metric) is performed by the hdf-utilities `validateCvssVector`
623
+ * helper rather than at the schema layer.
684
624
  */
685
625
  export interface Cvss {
686
626
  /**
@@ -752,15 +692,9 @@ export interface Cvss {
752
692
  [property: string]: any;
753
693
  }
754
694
  /**
755
- * Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
756
- * 'none' or 'critical' bands; map accordingly when populating.
757
- *
758
695
  * Qualitative CVSS severity band. Aligns with FIRST/NVD bands: none=0.0, low=0.1-3.9,
759
- * medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum
760
- * used on Requirement_Core (which includes 'informational').
761
- *
762
- * Qualitative severity band corresponding to computedScore. Same band convention as
763
- * baseSeverity.
696
+ * medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum used on
697
+ * Requirement_Core (which includes 'informational').
764
698
  */
765
699
  export declare enum CVSSSeverity {
766
700
  Critical = "critical",
@@ -792,29 +726,19 @@ export interface Description {
792
726
  [property: string]: any;
793
727
  }
794
728
  /**
795
- * The type of the most recent non-expired override or POAM governing this requirement.
796
- * Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
797
- * riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
798
- * POAMs apply.
799
- *
800
- * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
801
- * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
802
- * remediation tracked (no status change). 'inherited': control provided by another
803
- * component or system. 'falsePositive': scanner incorrectly identified a finding — for
804
- * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
805
- * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
806
- * this system, so status is typically set to 'notApplicable'. The disposition field on the
807
- * requirement distinguishes false positives from genuinely not-applicable findings.
808
- * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
809
- * Adjustment); does not change pass/fail status, only impact via the impact field.
810
- * 'operationalRequirement': deviation required by operational constraints (FedRAMP
811
- * Operational Requirement); the finding cannot be remediated because the system requires
812
- * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
813
- * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
814
- *
815
- * The type of override applied to this requirement.
816
- *
817
- * The type of amendment.
729
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk accepted
730
+ * by Authorizing Official. 'attestation': manually verified by assessor. 'poam': remediation
731
+ * tracked (no status change). 'inherited': control provided by another component or system.
732
+ * 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the
733
+ * check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE,
734
+ * SCA), the flagged vulnerability does not apply to this system, so status is typically set to
735
+ * 'notApplicable'. The disposition field on the requirement distinguishes false positives from
736
+ * genuinely not-applicable findings. 'riskAdjustment': impact score adjusted based on environmental
737
+ * context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact
738
+ * field. 'operationalRequirement': deviation required by operational constraints (FedRAMP
739
+ * Operational Requirement); the finding cannot be remediated because the system requires the
740
+ * affected functionality. Remains an open risk. Migration note: 'exception' was removed in v3.1.0 —
741
+ * use 'waiver' with status 'notApplicable' instead.
818
742
  */
819
743
  export declare enum OverrideType {
820
744
  Attestation = "attestation",
@@ -826,20 +750,9 @@ export declare enum OverrideType {
826
750
  Waiver = "waiver"
827
751
  }
828
752
  /**
829
- * The current effective compliance status of this requirement after applying the most
830
- * recent non-expired override with a status field, or computed from results (worst-wins) if
831
- * no status-bearing overrides exist.
832
- *
833
- * The status of an individual test result. 'notApplicable' indicates the requirement does
834
- * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
835
- * requires manual verification).
836
- *
837
- * The status of this test within the requirement. Example: 'failed'.
838
- *
839
- * The new status this override sets for the requirement. Optional when only impact is being
840
- * overridden.
841
- *
842
- * The new status this amendment sets. Optional when only impact is being overridden.
753
+ * The status of an individual test result. 'notApplicable' indicates the requirement does not apply
754
+ * to the target. 'notReviewed' indicates the requirement was not assessed (e.g., requires manual
755
+ * verification).
843
756
  */
844
757
  export declare enum ResultStatus {
845
758
  Error = "error",
@@ -849,13 +762,9 @@ export declare enum ResultStatus {
849
762
  Passed = "passed"
850
763
  }
851
764
  /**
852
- * FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
853
- * alongside CVSS for prioritization — captures the probability the vulnerability will be
854
- * exploited.
855
- *
856
- * FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All
857
- * three fields are required when an Epss object is present; the date disambiguates which
858
- * day's score this is, since EPSS recomputes daily.
765
+ * FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All three
766
+ * fields are required when an Epss object is present; the date disambiguates which day's score this
767
+ * is, since EPSS recomputes daily.
859
768
  */
860
769
  export interface Epss {
861
770
  /**
@@ -877,8 +786,8 @@ export interface Epss {
877
786
  [property: string]: any;
878
787
  }
879
788
  /**
880
- * Supporting evidence for a finding or override, such as screenshots, code samples, log
881
- * excerpts, or URLs.
789
+ * Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts,
790
+ * or URLs.
882
791
  */
883
792
  export interface Evidence {
884
793
  /**
@@ -917,41 +826,8 @@ export interface Evidence {
917
826
  [property: string]: any;
918
827
  }
919
828
  /**
920
- * Identity of who or what captured this evidence.
921
- *
922
- * Represents an identity that performed an action, such as capturing evidence or applying
923
- * an override.
924
- *
925
- * Identity of who created this POA&M. For simple cases, use type 'simple' with just an
926
- * identifier.
927
- *
928
- * Identity of who completed this milestone.
929
- *
930
- * The identity that created this signature.
931
- *
932
- * Identity of who applied this override. For simple cases, use type 'simple' with just an
933
- * identifier.
934
- *
935
- * Identity of the person or system that approved this override.
936
- *
937
- * Team or individual responsible for this component. Enables per-component ownership when
938
- * different teams manage different parts of a system.
939
- *
940
- * The identity of the person or system responsible for executing the test. This could be a
941
- * human auditor manually completing a checklist, an automated CI/CD system, or a security
942
- * tool. Optional field to support both automated and manual HDF generation.
943
- *
944
- * Team or individual responsible for this system's authorization and compliance. Maps to
945
- * OSCAL responsible-party with role 'system-owner'.
946
- *
947
- * Default identity of who created this amendments document. Individual overrides may
948
- * specify their own appliedBy.
949
- *
950
- * Identity of the authorizing official who approved these amendments.
951
- *
952
- * Identity of who applied this amendment.
953
- *
954
- * Identity of who prepared this evidence package.
829
+ * Represents an identity that performed an action, such as capturing evidence or applying an
830
+ * override.
955
831
  */
956
832
  export interface Identity {
957
833
  /**
@@ -965,18 +841,27 @@ export interface Identity {
965
841
  identifier: string;
966
842
  /**
967
843
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
968
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
969
- * classification, or 'other' for custom identity systems.
844
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
845
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
846
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
847
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
848
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
849
+ * custom identity systems.
970
850
  */
971
851
  type: IdentityType;
972
852
  [property: string]: any;
973
853
  }
974
854
  /**
975
855
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
976
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
977
- * classification, or 'other' for custom identity systems.
856
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
857
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
858
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
859
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
860
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
861
+ * custom identity systems.
978
862
  */
979
863
  export declare enum IdentityType {
864
+ Agent = "agent",
980
865
  Email = "email",
981
866
  Other = "other",
982
867
  Simple = "simple",
@@ -1022,9 +907,9 @@ export interface Kev {
1022
907
  [property: string]: any;
1023
908
  }
1024
909
  /**
1025
- * Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
1026
- * POAMs do NOT change the effectiveStatus - the requirement remains in its current state
1027
- * while the POA&M tracks remediation efforts.
910
+ * Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance. POAMs do
911
+ * NOT change the effectiveStatus - the requirement remains in its current state while the POA&M
912
+ * tracks remediation efforts.
1028
913
  */
1029
914
  export interface Poam {
1030
915
  /**
@@ -1106,21 +991,9 @@ export declare enum MilestoneStatus {
1106
991
  Pending = "pending"
1107
992
  }
1108
993
  /**
1109
- * Optional digital signature for enhanced trust and non-repudiation.
1110
- *
1111
- * A digital signature following W3C Data Integrity Proofs pattern. Supports hardware
1112
- * security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic
1113
- * signing methods via JWK, PEM, or Base58 key formats.
1114
- *
1115
- * Optional digital signature for enhanced trust and non-repudiation. Supports hardware
1116
- * security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
1117
- * methods.
1118
- *
1119
- * Digital signature for non-repudiation.
1120
- *
1121
- * Document-level digital signature covering all amendments.
1122
- *
1123
- * Digital signature covering the entire evidence package.
994
+ * A digital signature following W3C Data Integrity Proofs pattern. Supports hardware security
995
+ * tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic signing methods
996
+ * via JWK, PEM, or Base58 key formats.
1124
997
  */
1125
998
  export interface Signature {
1126
999
  /**
@@ -1164,10 +1037,8 @@ export interface Signature {
1164
1037
  [property: string]: any;
1165
1038
  }
1166
1039
  /**
1167
- * The verification method containing the public key for signature verification.
1168
- *
1169
- * Verification method containing the public key needed to verify a digital signature.
1170
- * Supports multiple key formats including JWK (for RSA, EC), PEM, and Base58.
1040
+ * Verification method containing the public key needed to verify a digital signature. Supports
1041
+ * multiple key formats including JWK (for RSA, EC), PEM, and Base58.
1171
1042
  */
1172
1043
  export interface VerificationMethod {
1173
1044
  /**
@@ -1209,12 +1080,6 @@ export declare enum POAMType {
1209
1080
  }
1210
1081
  /**
1211
1082
  * A reference to an external document.
1212
- *
1213
- * A reference using the 'ref' field.
1214
- *
1215
- * A URL pointing at the reference.
1216
- *
1217
- * A URI pointing at the reference.
1218
1083
  */
1219
1084
  export interface Reference {
1220
1085
  ref?: {
@@ -1269,9 +1134,6 @@ export interface RequirementResult {
1269
1134
  [property: string]: any;
1270
1135
  }
1271
1136
  /**
1272
- * Explicit severity rating. Typically derived from impact score but provided explicitly for
1273
- * clarity.
1274
- *
1275
1137
  * Severity rating for a requirement. Typically derived from the numeric impact score.
1276
1138
  */
1277
1139
  export declare enum Severity {
@@ -1282,8 +1144,6 @@ export declare enum Severity {
1282
1144
  Medium = "medium"
1283
1145
  }
1284
1146
  /**
1285
- * The explicit location of the requirement within the source code.
1286
- *
1287
1147
  * The explicit location of a requirement within source code.
1288
1148
  */
1289
1149
  export interface SourceLocation {
@@ -1298,9 +1158,9 @@ export interface SourceLocation {
1298
1158
  [property: string]: any;
1299
1159
  }
1300
1160
  /**
1301
- * An intentional change to a requirement's compliance status and/or impact score. At least
1302
- * one of status or impact must be set. Overrides change the effectiveStatus or impact of
1303
- * the requirement. All overrides must have an expiration date to enforce periodic review.
1161
+ * An intentional change to a requirement's compliance status and/or impact score. At least one of
1162
+ * status or impact must be set. Overrides change the effectiveStatus or impact of the requirement.
1163
+ * All overrides must have an expiration date to enforce periodic review.
1304
1164
  */
1305
1165
  export interface StatusOverride {
1306
1166
  /**
@@ -1368,11 +1228,8 @@ export interface StatusOverride {
1368
1228
  [property: string]: any;
1369
1229
  }
1370
1230
  /**
1371
- * Override to the requirement's impact score. At least one of status or impact must be
1372
- * set.
1373
- *
1374
- * An override to the requirement's impact score. The prior impact is the original result
1375
- * value or the preceding override in the chain.
1231
+ * An override to the requirement's impact score. The prior impact is the original result value or
1232
+ * the preceding override in the chain.
1376
1233
  */
1377
1234
  export interface ImpactOverride {
1378
1235
  /**
@@ -1382,28 +1239,21 @@ export interface ImpactOverride {
1382
1239
  [property: string]: any;
1383
1240
  }
1384
1241
  /**
1385
- * Structured controlled-vocabulary classification for why this override applies.
1386
- * Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
1387
- * and attestation overrides where the structured category enables filtering and lossless
1388
- * round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
1389
- * precedent vocabulary and rationale.
1390
- *
1391
- * Structured controlled-vocabulary reason for an override, complementing the free-text
1392
- * 'reason' field. 'reason' carries the human-readable rationale an auditor reads;
1393
- * 'justification' carries the machine-readable category enabling filtering, aggregation,
1394
- * and lossless round-trip with structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields
1395
- * may be present simultaneously and are NOT redundant: 'reason' explains the specific
1396
- * circumstance; 'justification' classifies it. Authors SHOULD populate both when a
1397
- * controlled-vocabulary value applies — the enum value alone is not self-explanatory to an
1398
- * auditor. The vocabulary is drawn from the VEX ecosystem: the first five values are common
1399
- * across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six (requires_configuration /
1400
- * requires_dependency / requires_environment / protected_by_compiler / protected_at_runtime
1401
- * / protected_at_perimeter) are CycloneDX-specific and describe why the vulnerable code
1402
- * path is unreachable in the deployed configuration. The enum is extended additively across
1403
- * schema versions as other ecosystems' controlled vocabularies are integrated; documents
1404
- * using values added in a newer schema version will fail validation against an older
1405
- * schema. Consumers SHOULD validate against the schema version declared by the document
1406
- * ($schema) rather than assume a fixed vocabulary.
1242
+ * Structured controlled-vocabulary reason for an override, complementing the free-text 'reason'
1243
+ * field. 'reason' carries the human-readable rationale an auditor reads; 'justification' carries
1244
+ * the machine-readable category enabling filtering, aggregation, and lossless round-trip with
1245
+ * structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields may be present simultaneously and are
1246
+ * NOT redundant: 'reason' explains the specific circumstance; 'justification' classifies it.
1247
+ * Authors SHOULD populate both when a controlled-vocabulary value applies — the enum value alone is
1248
+ * not self-explanatory to an auditor. The vocabulary is drawn from the VEX ecosystem: the first
1249
+ * five values are common across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six
1250
+ * (requires_configuration / requires_dependency / requires_environment / protected_by_compiler /
1251
+ * protected_at_runtime / protected_at_perimeter) are CycloneDX-specific and describe why the
1252
+ * vulnerable code path is unreachable in the deployed configuration. The enum is extended
1253
+ * additively across schema versions as other ecosystems' controlled vocabularies are integrated;
1254
+ * documents using values added in a newer schema version will fail validation against an older
1255
+ * schema. Consumers SHOULD validate against the schema version declared by the document ($schema)
1256
+ * rather than assume a fixed vocabulary.
1407
1257
  */
1408
1258
  export declare enum Justification {
1409
1259
  ComponentNotPresent = "component_not_present",
@@ -1419,19 +1269,12 @@ export declare enum Justification {
1419
1269
  VulnerableCodeNotPresent = "vulnerable_code_not_present"
1420
1270
  }
1421
1271
  /**
1422
- * How this requirement is intended to be verified. Disambiguates the two cases that null
1423
- * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
1424
- * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
1425
- * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
1426
- * runs without operator action; 'hybrid' = part automated, part manual. Optional: when
1427
- * omitted, consumers should not infer a default.
1428
- *
1429
- * How a requirement is intended to be verified. Disambiguates the two cases that null
1430
- * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
1431
- * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
1432
- * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
1433
- * runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to
1434
- * disambiguate from the unrelated Verification_Method DID-context struct.
1272
+ * How a requirement is intended to be verified. Disambiguates the two cases that null 'code'
1273
+ * overloads: 'manual-by-design' (the requirement is statement-form and not amenable to automation,
1274
+ * e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could exist but does not yet,
1275
+ * e.g. a STIG rule lacking a fix). 'automated' = a check exists and runs without operator action;
1276
+ * 'hybrid' = part automated, part manual. Named '_Enum' to disambiguate from the unrelated
1277
+ * Verification_Method DID-context struct.
1435
1278
  */
1436
1279
  export declare enum VerificationMethodEnum {
1437
1280
  Automated = "automated",
@@ -1462,39 +1305,21 @@ export interface SupportedPlatform {
1462
1305
  [property: string]: any;
1463
1306
  }
1464
1307
  /**
1465
- * A system component. Uses discriminated union pattern with 'type' field as discriminator.
1466
- * Superset of Target with identity, external IDs, and SBOM support.
1467
- *
1468
- * A physical or virtual server, workstation, or network device.
1469
- *
1470
- * Base properties shared by all component types. Extends the Target concept with stable
1471
- * identity, external references, and SBOM embedding.
1472
- *
1473
- * A static container image (not running).
1474
- *
1475
- * A running container instance.
1476
- *
1477
- * A container orchestration platform (Kubernetes, OpenShift, ECS, etc.).
1478
- *
1479
- * A cloud provider account (AWS account, Azure subscription, GCP project).
1480
- *
1481
- * A specific cloud resource (EC2 instance, S3 bucket, Azure VM, etc.).
1482
- *
1483
- * A code repository (for SAST tools).
1484
- *
1485
- * A running application or API (for DAST tools).
1486
- *
1487
- * A software artifact or dependency (for SCA tools).
1488
- *
1489
- * A network segment or network device.
1490
- *
1491
- * A database instance.
1308
+ * A system component. Uses discriminated union pattern with 'type' field as discriminator. Superset
1309
+ * of Target with identity, external IDs, and SBOM support.
1492
1310
  */
1493
1311
  export interface Component {
1494
1312
  /**
1495
1313
  * Names of baselines that apply to this component.
1496
1314
  */
1497
1315
  baselineRefs?: string[];
1316
+ /**
1317
+ * Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
1318
+ * each carried by passthrough (ref/document) or normalized. Replaces the former
1319
+ * sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
1320
+ * ai-model BOM). See primitives/bom.schema.json.
1321
+ */
1322
+ boms?: BillOfMaterials[];
1498
1323
  /**
1499
1324
  * Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
1500
1325
  * hdf-results. Enables cross-document correlation, diffing, and data flow references.
@@ -1516,6 +1341,15 @@ export interface Component {
1516
1341
  * System-specific overrides for baseline input values.
1517
1342
  */
1518
1343
  inputOverrides?: InputOverride[];
1344
+ /**
1345
+ * Cryptographic integrity of this component's underlying artifact — model weights or
1346
+ * shards, dataset archive, container image, or package bytes. An array supports
1347
+ * multi-file/sharded artifacts. This is the single, generic home for artifact/subject
1348
+ * integrity across all component types (it replaced the former per-type Container_Image
1349
+ * digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[])
1350
+ * and from the document tamper-evidence Integrity type.
1351
+ */
1352
+ integrity?: Checksum[];
1519
1353
  /**
1520
1354
  * Optional key-value labels for flexible grouping. Well-known keys: system, component,
1521
1355
  * environment, region, team. Values must be strings.
@@ -1532,20 +1366,6 @@ export interface Component {
1532
1366
  * different teams manage different parts of a system.
1533
1367
  */
1534
1368
  owner?: Identity;
1535
- /**
1536
- * Embedded CycloneDX or SPDX SBOM document representing this component's software
1537
- * inventory. The sbomFormat field determines which format constraints apply.
1538
- */
1539
- sbom?: any;
1540
- /**
1541
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1542
- */
1543
- sbomFormat?: SBOMFormat;
1544
- /**
1545
- * URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
1546
- * relative path, absolute URI, or fragment identifier.
1547
- */
1548
- sbomRef?: string;
1549
1369
  /**
1550
1370
  * Label selector to match targets belonging to this component during migration. Targets
1551
1371
  * with matching labels are automatically included.
@@ -1554,13 +1374,31 @@ export interface Component {
1554
1374
  [key: string]: string;
1555
1375
  };
1556
1376
  /**
1557
- * Component type discriminator. Same values as Target types.
1377
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
1378
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1558
1379
  */
1559
1380
  type: TargetType;
1560
1381
  /**
1561
- * Fully qualified domain name.
1382
+ * Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
1383
+ * host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
1384
+ * workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
1385
+ * from a source that carries directory membership.
1386
+ */
1387
+ domain?: string;
1388
+ /**
1389
+ * Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
1390
+ * (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
1391
+ * schema does not enforce case so source fidelity is preserved on round-trip.
1562
1392
  */
1563
1393
  fqdn?: string;
1394
+ /**
1395
+ * Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
1396
+ * from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
1397
+ * (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
1398
+ * suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
1399
+ * the source reports; do not derive it from the FQDN.
1400
+ */
1401
+ hostname?: string;
1564
1402
  /**
1565
1403
  * IP address of the host.
1566
1404
  */
@@ -1577,10 +1415,6 @@ export interface Component {
1577
1415
  * Operating system version.
1578
1416
  */
1579
1417
  osVersion?: string;
1580
- /**
1581
- * Image digest for immutable reference.
1582
- */
1583
- digest?: string;
1584
1418
  /**
1585
1419
  * Container image ID.
1586
1420
  */
@@ -1629,6 +1463,11 @@ export interface Component {
1629
1463
  * Package version.
1630
1464
  *
1631
1465
  * Database version.
1466
+ *
1467
+ * Model version, revision, or checkpoint tag.
1468
+ *
1469
+ * Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
1470
+ * release marker.
1632
1471
  */
1633
1472
  version?: string;
1634
1473
  /**
@@ -1675,10 +1514,6 @@ export interface Component {
1675
1514
  * Environment. Example: 'production', 'staging', 'development'.
1676
1515
  */
1677
1516
  environment?: string;
1678
- /**
1679
- * Package checksum for verification.
1680
- */
1681
- checksum?: string;
1682
1517
  /**
1683
1518
  * Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
1684
1519
  */
@@ -1707,11 +1542,311 @@ export interface Component {
1707
1542
  * Database port.
1708
1543
  */
1709
1544
  port?: number;
1545
+ /**
1546
+ * Provider/registry identifier for the model. Examples: a Hugging Face repo id
1547
+ * ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
1548
+ * BOM(s) and to lineage references from other models.
1549
+ */
1550
+ modelId?: string;
1551
+ /**
1552
+ * Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
1553
+ * ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
1554
+ * its dataset BOM(s) and to datasetRefs from ai-model components.
1555
+ */
1556
+ datasetId?: string;
1557
+ [property: string]: any;
1558
+ }
1559
+ export interface BillOfMaterials {
1560
+ /**
1561
+ * The manifest kind. Determines which normalized type-extension (model/dataset/packages)
1562
+ * may appear.
1563
+ */
1564
+ bomType: string;
1565
+ /**
1566
+ * Normalized dataset extension. Permitted only when bomType is dataset.
1567
+ */
1568
+ dataset?: DatasetBOMExtension;
1569
+ /**
1570
+ * Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
1571
+ * SPDX object). HDF does not constrain its internal shape — full manifest validation is a
1572
+ * tool-level concern.
1573
+ */
1574
+ document?: {
1575
+ [key: string]: any;
1576
+ };
1577
+ /**
1578
+ * Source manifest format the BOM was produced from or references. Examples: cyclonedx,
1579
+ * cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
1580
+ * schema change; the converter that emits the BOM owns the value.
1581
+ */
1582
+ format: string;
1583
+ /**
1584
+ * Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
1585
+ * NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
1586
+ * weights, dataset archive) is a component-level concern, not carried here. Subject
1587
+ * identity is inherited from the host component/system; per-node identity lives in the
1588
+ * type-extension.
1589
+ */
1590
+ hashes?: Checksum[];
1591
+ /**
1592
+ * Optional license of the BOM document as a whole (SPDX license expression). Nullable and
1593
+ * often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
1594
+ * live in the type-extension, not here.
1595
+ */
1596
+ license?: null | string;
1597
+ /**
1598
+ * Normalized ai-model extension. Permitted only when bomType is ai-model.
1599
+ */
1600
+ model?: AIModelBOMExtension;
1601
+ /**
1602
+ * Normalized sbom extension: the flattened software package inventory. Permitted only when
1603
+ * bomType is sbom.
1604
+ */
1605
+ packages?: SBOMPackage[];
1606
+ /**
1607
+ * Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
1608
+ * manifest document. Present for externally-hosted BOMs.
1609
+ */
1610
+ ref?: string;
1611
+ /**
1612
+ * Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
1613
+ * documentNamespace). Correlates the same BOM across evidence packages.
1614
+ */
1615
+ uniqueId?: string;
1616
+ }
1617
+ /**
1618
+ * Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All optional;
1619
+ * open for partial-fidelity passthrough of unmapped native fields. Symmetric with
1620
+ * AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just as the
1621
+ * model extension carries baseModelRef/adaptationType.
1622
+ */
1623
+ export interface DatasetBOMExtension {
1624
+ /**
1625
+ * References to the source dataset(s) this one was derived from — a dataset componentId, or
1626
+ * a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
1627
+ * ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
1628
+ */
1629
+ baseDatasetRefs?: string[];
1630
+ /**
1631
+ * Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
1632
+ * phi.
1633
+ */
1634
+ dataClassification?: string;
1635
+ /**
1636
+ * Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
1637
+ */
1638
+ datasetFormat?: string;
1639
+ /**
1640
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1641
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1642
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1643
+ */
1644
+ derivation?: DatasetDerivationType;
1645
+ /**
1646
+ * Free-text statement of the dataset's intended use (CISA/G7 minimum element).
1647
+ */
1648
+ intendedUse?: string;
1649
+ /**
1650
+ * Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
1651
+ * image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
1652
+ * encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
1653
+ * physical format. String or array of strings.
1654
+ */
1655
+ modality?: string[] | string;
1656
+ /**
1657
+ * Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
1658
+ * provenance'; SPDX 3.0 dataset_dataCollectionProcess).
1659
+ */
1660
+ provenance?: string;
1661
+ /**
1662
+ * Number of records/examples in the dataset.
1663
+ */
1664
+ recordCount?: number;
1665
+ /**
1666
+ * Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
1667
+ * open-ended by design). Intentionally free-text and will remain so permanently:
1668
+ * recordCount is the one structured statistic, and restructuring this into an object later
1669
+ * would break existing consumers, so it stays a string (additive-only).
1670
+ */
1671
+ statisticalProperties?: string;
1672
+ [property: string]: any;
1673
+ }
1674
+ /**
1675
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1676
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1677
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1678
+ */
1679
+ export declare enum DatasetDerivationType {
1680
+ Augmented = "augmented",
1681
+ Filtered = "filtered",
1682
+ Merged = "merged",
1683
+ Sampled = "sampled"
1684
+ }
1685
+ /**
1686
+ * Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All fields
1687
+ * optional (standards-correct; only the EU AI Act makes a subset binding for high-risk/GPAI). Left
1688
+ * open (additionalProperties: true) so a converter can carry unmapped native fields opaquely
1689
+ * (partial-fidelity pattern). Subject name/version are inherited from the host aiModel component,
1690
+ * not repeated here.
1691
+ */
1692
+ export interface AIModelBOMExtension {
1693
+ /**
1694
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
1695
+ * vocabulary (the only typed lineage enum in the ecosystem).
1696
+ */
1697
+ adaptationType?: ModelAdaptationType;
1698
+ /**
1699
+ * Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
1700
+ * purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
1701
+ */
1702
+ baseModelRef?: string;
1703
+ /**
1704
+ * References to the training/evaluation datasets this model was produced from — preferably
1705
+ * a dataset component's componentId (correlating to a first-class dataset subject rather
1706
+ * than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
1707
+ * component exists.
1708
+ */
1709
+ datasetRefs?: string[];
1710
+ /**
1711
+ * Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
1712
+ * is the set of training knobs, NOT the model's trainable parameterCount — the two are
1713
+ * routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
1714
+ * ai_hyperparameter.
1715
+ */
1716
+ hyperparameters?: Hyperparameter[];
1717
+ /**
1718
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
1719
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
1720
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
1721
+ */
1722
+ inputOutput?: InputOutput;
1723
+ /**
1724
+ * Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
1725
+ */
1726
+ intendedUse?: string;
1727
+ /**
1728
+ * Model's learning/training paradigm. Free-text because the value set varies across
1729
+ * standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
1730
+ * Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
1731
+ * modelParameters.approach.type ∩ CISA/G7 learning type.
1732
+ */
1733
+ learningApproach?: string;
1734
+ /**
1735
+ * Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
1736
+ */
1737
+ modelArchitecture?: string;
1738
+ /**
1739
+ * Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
1740
+ * because the EU AI Act keys GPAI obligations off model scale.
1741
+ */
1742
+ parameterCount?: number;
1743
+ /**
1744
+ * Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
1745
+ * heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
1746
+ * true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
1747
+ * intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
1748
+ * CISA/G7 KPI cluster.
1749
+ */
1750
+ performanceMetrics?: PerformanceMetric[];
1751
+ /**
1752
+ * On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
1753
+ * pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
1754
+ * safetensors, pytorch, gguf, onnx, tensorflow.
1755
+ */
1756
+ serializationFormat?: string;
1757
+ /**
1758
+ * The ML task the model performs. Free-text. Examples: text-classification,
1759
+ * sentiment-analysis, object-detection, translation. Sourced from CycloneDX
1760
+ * modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
1761
+ * intended-application.
1762
+ */
1763
+ task?: string;
1764
+ [property: string]: any;
1765
+ }
1766
+ /**
1767
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
1768
+ * vocabulary (the only typed lineage enum in the ecosystem).
1769
+ */
1770
+ export declare enum ModelAdaptationType {
1771
+ Adapter = "adapter",
1772
+ Finetune = "finetune",
1773
+ Merge = "merge",
1774
+ Quantized = "quantized"
1775
+ }
1776
+ export interface Hyperparameter {
1777
+ /**
1778
+ * Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
1779
+ */
1780
+ name?: string;
1781
+ /**
1782
+ * Hyper-parameter value (free-text).
1783
+ */
1784
+ value?: string;
1785
+ [property: string]: any;
1786
+ }
1787
+ /**
1788
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
1789
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
1790
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
1791
+ */
1792
+ export interface InputOutput {
1793
+ /**
1794
+ * Maximum context/sequence length the model accepts, in tokens.
1795
+ */
1796
+ contextLength?: number;
1797
+ /**
1798
+ * Input/output data types. Examples: string, byte[], float32, image.
1799
+ */
1800
+ dataTypes?: string[];
1801
+ /**
1802
+ * Input/output modalities. String or array of strings. Examples: text, image, audio.
1803
+ * Symmetric with Dataset_Extension.modality.
1804
+ */
1805
+ modality?: string[] | string;
1806
+ /**
1807
+ * Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
1808
+ */
1809
+ tokenizer?: string;
1810
+ [property: string]: any;
1811
+ }
1812
+ export interface PerformanceMetric {
1813
+ /**
1814
+ * Metric name. Examples: accuracy, f1, BLEU, latency.
1815
+ */
1816
+ name?: string;
1817
+ /**
1818
+ * Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
1819
+ * milliseconds).
1820
+ */
1821
+ value?: string;
1822
+ [property: string]: any;
1823
+ }
1824
+ /**
1825
+ * A single normalized software package entry within an sbom BOM. Minimal identity + version for
1826
+ * querying/diffing; the full native record remains available via passthrough (document/ref).
1827
+ */
1828
+ export interface SBOMPackage {
1829
+ /**
1830
+ * SPDX license identifiers/expressions for this package.
1831
+ */
1832
+ licenses?: string[];
1833
+ /**
1834
+ * Package name.
1835
+ */
1836
+ name: string;
1837
+ /**
1838
+ * Package URL (purl) — the preferred cross-BOM identity key when present.
1839
+ */
1840
+ purl?: string;
1841
+ /**
1842
+ * Package version.
1843
+ */
1844
+ version?: string;
1710
1845
  [property: string]: any;
1711
1846
  }
1712
1847
  /**
1713
- * An override of a baseline input value for a specific component. Enables system-specific
1714
- * tailoring of baseline parameters.
1848
+ * An override of a baseline input value for a specific component. Enables system-specific tailoring
1849
+ * of baseline parameters.
1715
1850
  */
1716
1851
  export interface InputOverride {
1717
1852
  /**
@@ -1745,16 +1880,11 @@ export declare enum CloudProvider {
1745
1880
  Other = "other"
1746
1881
  }
1747
1882
  /**
1748
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1749
- */
1750
- export declare enum SBOMFormat {
1751
- Cyclonedx = "cyclonedx",
1752
- Spdx = "spdx"
1753
- }
1754
- /**
1755
- * Component type discriminator. Same values as Target types.
1883
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
1884
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1756
1885
  */
1757
1886
  export declare enum TargetType {
1887
+ AIModel = "aiModel",
1758
1888
  Application = "application",
1759
1889
  Artifact = "artifact",
1760
1890
  CloudAccount = "cloudAccount",
@@ -1763,24 +1893,13 @@ export declare enum TargetType {
1763
1893
  ContainerInstance = "containerInstance",
1764
1894
  ContainerPlatform = "containerPlatform",
1765
1895
  Database = "database",
1896
+ Dataset = "dataset",
1766
1897
  Host = "host",
1767
1898
  Network = "network",
1768
1899
  Repository = "repository"
1769
1900
  }
1770
1901
  /**
1771
- * Information about the tool that generated this file.
1772
- *
1773
1902
  * Information about the tool that generated this HDF file.
1774
- *
1775
- * The tool that generated this file.
1776
- *
1777
- * Information about the tool that generated this comparison.
1778
- *
1779
- * Information about the tool that generated this system document.
1780
- *
1781
- * Information about the tool that generated this plan.
1782
- *
1783
- * Information about the tool that generated this document.
1784
1903
  */
1785
1904
  export interface Generator {
1786
1905
  /**
@@ -1794,15 +1913,9 @@ export interface Generator {
1794
1913
  [property: string]: any;
1795
1914
  }
1796
1915
  /**
1797
- * Optional reference to automated remediation resources (Ansible playbooks, Terraform
1798
- * scripts, etc.) for fixing failing requirements found in this assessment.
1799
- *
1800
- * Reference to automated remediation resources for implementing security controls. Points
1801
- * to external automation content like Ansible playbooks, Terraform scripts, or
1802
- * vendor-provided remediation tools.
1803
- *
1804
- * Optional reference to automated remediation resources (Ansible playbooks, Terraform
1805
- * scripts, etc.) for implementing the security controls defined in this baseline.
1916
+ * Reference to automated remediation resources for implementing security controls. Points to
1917
+ * external automation content like Ansible playbooks, Terraform scripts, or vendor-provided
1918
+ * remediation tools.
1806
1919
  */
1807
1920
  export interface Remediation {
1808
1921
  /**
@@ -1820,12 +1933,8 @@ export interface Remediation {
1820
1933
  [property: string]: any;
1821
1934
  }
1822
1935
  /**
1823
- * Information about the test execution environment where the security tool was run.
1824
- * Distinct from targets (what is being tested).
1825
- *
1826
- * Information about the test execution environment. This is distinct from the target being
1827
- * scanned - the runner is where the security tool executes, while targets are what is being
1828
- * assessed.
1936
+ * Information about the test execution environment. This is distinct from the target being scanned
1937
+ * - the runner is where the security tool executes, while targets are what is being assessed.
1829
1938
  */
1830
1939
  export interface Runner {
1831
1940
  /**
@@ -1843,7 +1952,18 @@ export interface Runner {
1843
1952
  */
1844
1953
  containerImage?: string;
1845
1954
  /**
1846
- * The hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
1955
+ * The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
1956
+ * NOT the DNS suffix of the FQDN. Example: 'CORP'.
1957
+ */
1958
+ domain?: string;
1959
+ /**
1960
+ * The fully qualified domain name of the runner system, when known. Distinct from the short
1961
+ * 'hostname'; kept separate for the same reason as on host components (an FQDN is not
1962
+ * reliably decomposable). Example: 'ci-runner-01.build.example.com'.
1963
+ */
1964
+ fqdn?: string;
1965
+ /**
1966
+ * The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
1847
1967
  * 'k8s-node-worker-03'.
1848
1968
  */
1849
1969
  hostname?: string;
@@ -1865,8 +1985,6 @@ export interface Runner {
1865
1985
  [property: string]: any;
1866
1986
  }
1867
1987
  /**
1868
- * Statistics for the assessment run, including duration and result counts.
1869
- *
1870
1988
  * Statistics for the assessment run(s) such as duration and result counts.
1871
1989
  */
1872
1990
  export interface Statistics {
@@ -1881,8 +1999,6 @@ export interface Statistics {
1881
1999
  [property: string]: any;
1882
2000
  }
1883
2001
  /**
1884
- * Breakdowns of requirement statistics by result status.
1885
- *
1886
2002
  * Statistics for requirement results, grouped by status.
1887
2003
  */
1888
2004
  export interface StatisticHash {
@@ -1909,17 +2025,7 @@ export interface StatisticHash {
1909
2025
  [property: string]: any;
1910
2026
  }
1911
2027
  /**
1912
- * Statistics for requirements that encountered an error during assessment.
1913
- *
1914
2028
  * Statistics for a given item, such as the total count.
1915
- *
1916
- * Statistics for requirements that failed.
1917
- *
1918
- * Statistics for requirements that are not applicable to the target.
1919
- *
1920
- * Statistics for requirements that were not reviewed (manual check required).
1921
- *
1922
- * Statistics for requirements that passed.
1923
2029
  */
1924
2030
  export interface StatisticBlock {
1925
2031
  /**
@@ -1929,12 +2035,8 @@ export interface StatisticBlock {
1929
2035
  [property: string]: any;
1930
2036
  }
1931
2037
  /**
1932
- * The security tool that produced the assessment data in this file.
1933
- *
1934
- * The security tool that produced the assessment data represented in this HDF file. Aligns
1935
- * with SARIF, OSCAL, and CycloneDX terminology.
1936
- *
1937
- * The security tool that produced the assessment data in this source.
2038
+ * The security tool that produced the assessment data represented in this HDF file. Aligns with
2039
+ * SARIF, OSCAL, and CycloneDX terminology.
1938
2040
  */
1939
2041
  export interface Tool {
1940
2042
  /**
@@ -1955,11 +2057,8 @@ export interface Tool {
1955
2057
  [property: string]: any;
1956
2058
  }
1957
2059
  /**
1958
- * Information on the set of requirements that can be assessed, including baseline metadata
1959
- * and requirement definitions.
1960
- *
1961
- * Shared metadata fields for baselines. Used in both standalone baseline documents and
1962
- * evaluated baseline results.
2060
+ * Information on the set of requirements that can be assessed, including baseline metadata and
2061
+ * requirement definitions.
1963
2062
  */
1964
2063
  export interface HDFBaseline {
1965
2064
  /**
@@ -2043,9 +2142,6 @@ export interface HDFBaseline {
2043
2142
  }
2044
2143
  /**
2045
2144
  * A requirement definition without assessment results.
2046
- *
2047
- * Core requirement fields shared between baseline requirements and evaluated requirements.
2048
- * Contains the fundamental requirement definition without assessment results.
2049
2145
  */
2050
2146
  export interface BaselineRequirement {
2051
2147
  /**
@@ -2122,8 +2218,8 @@ export interface BaselineRequirement {
2122
2218
  [property: string]: any;
2123
2219
  }
2124
2220
  /**
2125
- * Structured comparison between two or more HDF security assessment documents. Supports
2126
- * temporal, baseline, fleet, and multi-source comparison modes.
2221
+ * Structured comparison between two or more HDF security assessment documents. Supports temporal,
2222
+ * baseline, fleet, and multi-source comparison modes.
2127
2223
  */
2128
2224
  export interface HDFComparison {
2129
2225
  /**
@@ -2142,7 +2238,8 @@ export interface HDFComparison {
2142
2238
  */
2143
2239
  comparisonMode: ComparisonMode;
2144
2240
  /**
2145
- * Comparison of components between two system documents. Used in systemDrift mode.
2241
+ * Comparison of components between two system documents. Used in systemDrift mode. A
2242
+ * component's BOM changes surface as a field change on its boms[] here.
2146
2243
  */
2147
2244
  componentDiffs?: ComponentDiff[];
2148
2245
  /**
@@ -2172,7 +2269,11 @@ export interface HDFComparison {
2172
2269
  */
2173
2270
  matching?: MatchingConfig;
2174
2271
  /**
2175
- * Comparison of packages between two SBOMs. Used in systemDrift mode for SBOM comparison.
2272
+ * RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
2273
+ * component's BOM changes as a field change on its boms[] (see componentDiffs), and
2274
+ * standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
2275
+ * field is retained for a future normalized package-level diff; consumers must not expect
2276
+ * it from today's systemDrift output.
2176
2277
  */
2177
2278
  packageDiffs?: PackageDiff[];
2178
2279
  /**
@@ -2220,8 +2321,6 @@ export interface Annotation {
2220
2321
  [property: string]: any;
2221
2322
  }
2222
2323
  /**
2223
- * The category of this annotation.
2224
- *
2225
2324
  * The category of an annotation attached to a comparison.
2226
2325
  */
2227
2326
  export declare enum AnnotationCategory {
@@ -2269,13 +2368,11 @@ export declare enum BaselineDiffState {
2269
2368
  Updated = "updated"
2270
2369
  }
2271
2370
  /**
2272
- * The mode of comparison being performed.
2273
- *
2274
- * The mode of comparison. 'temporal' compares the same target over time. 'baseline'
2275
- * compares against a golden reference. 'fleet' compares across multiple systems.
2276
- * 'multiSource' compares outputs from different scanners. 'baselineEvolution' compares two
2277
- * baseline documents to detect requirement changes between versions. 'systemDrift' compares
2278
- * two system documents to detect component-level changes.
2371
+ * The mode of comparison. 'temporal' compares the same target over time. 'baseline' compares
2372
+ * against a golden reference. 'fleet' compares across multiple systems. 'multiSource' compares
2373
+ * outputs from different scanners. 'baselineEvolution' compares two baseline documents to detect
2374
+ * requirement changes between versions. 'systemDrift' compares two system documents to detect
2375
+ * component-level changes.
2279
2376
  */
2280
2377
  export declare enum ComparisonMode {
2281
2378
  Baseline = "baseline",
@@ -2477,8 +2574,6 @@ export interface ScannerConflict {
2477
2574
  [property: string]: any;
2478
2575
  }
2479
2576
  /**
2480
- * How the conflict was resolved.
2481
- *
2482
2577
  * How a conflict between multiple scanner results was resolved.
2483
2578
  */
2484
2579
  export declare enum ConflictResolution {
@@ -2503,13 +2598,9 @@ export interface Value {
2503
2598
  [property: string]: any;
2504
2599
  }
2505
2600
  /**
2506
- * The strategy that was used to match this requirement across sources.
2507
- *
2508
- * The strategy used to match requirements across sources. 'exactId' matches by identical
2509
- * IDs. 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework
2510
- * identifiers. 'fuzzyTitle'/'fuzzyContent' use text similarity.
2511
- *
2512
- * The primary strategy used to match requirements across sources.
2601
+ * The strategy used to match requirements across sources. 'exactId' matches by identical IDs.
2602
+ * 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework identifiers.
2603
+ * 'fuzzyTitle'/'fuzzyContent' use text similarity.
2513
2604
  */
2514
2605
  export declare enum MatchStrategy {
2515
2606
  CciMatch = "cciMatch",
@@ -2520,12 +2611,10 @@ export declare enum MatchStrategy {
2520
2611
  NISTMatch = "nistMatch"
2521
2612
  }
2522
2613
  /**
2523
- * The state of this requirement in the comparison.
2524
- *
2525
- * SARIF-compatible vocabulary extended for security. 'new' = present only in new source,
2526
- * 'absent' = present only in old, 'unchanged' = same effective status, 'updated' = status
2527
- * changed (generic), 'fixed' = was failing now passing, 'regressed' = was passing now
2528
- * failing, 'moved' = reorganized same content, 'split'/'merged' = reserved for v1.1.
2614
+ * SARIF-compatible vocabulary extended for security. 'new' = present only in new source, 'absent' =
2615
+ * present only in old, 'unchanged' = same effective status, 'updated' = status changed (generic),
2616
+ * 'fixed' = was failing now passing, 'regressed' = was passing now failing, 'moved' = reorganized
2617
+ * same content, 'split'/'merged' = reserved for v1.1.
2529
2618
  */
2530
2619
  export declare enum RequirementState {
2531
2620
  Absent = "absent",
@@ -2542,8 +2631,6 @@ export declare enum FormatVersion {
2542
2631
  The100 = "1.0.0"
2543
2632
  }
2544
2633
  /**
2545
- * Configuration for how requirements were matched across sources.
2546
- *
2547
2634
  * Configuration for how requirements are matched across sources.
2548
2635
  */
2549
2636
  export interface MatchingConfig {
@@ -2570,15 +2657,22 @@ export interface MatchingConfig {
2570
2657
  [property: string]: any;
2571
2658
  }
2572
2659
  /**
2573
- * Comparison of a single package between two SBOM versions, matched by purl.
2660
+ * Comparison of a single BOM node between two BOM versions, matched by purl (software) or
2661
+ * identifier (models, datasets, hardware, crypto).
2574
2662
  */
2575
2663
  export interface PackageDiff {
2664
+ /**
2665
+ * Generic identity key for matching a BOM node across versions when no purl applies — e.g.
2666
+ * a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
2667
+ * number. At least one of purl or identifier is required.
2668
+ */
2669
+ identifier?: string;
2576
2670
  /**
2577
2671
  * License identifiers for this package.
2578
2672
  */
2579
2673
  licenses?: string[];
2580
2674
  /**
2581
- * Human-readable package name.
2675
+ * Human-readable node name.
2582
2676
  */
2583
2677
  name?: string;
2584
2678
  /**
@@ -2590,9 +2684,11 @@ export interface PackageDiff {
2590
2684
  */
2591
2685
  oldVersion?: string;
2592
2686
  /**
2593
- * Package URL (purl) used as the identity key for matching across SBOMs.
2687
+ * Package URL (purl) — the preferred identity key for matching software packages across
2688
+ * BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
2689
+ * algorithms) key on identifier instead.
2594
2690
  */
2595
- purl: string;
2691
+ purl?: string;
2596
2692
  /**
2597
2693
  * The state of this package: added (new in new SBOM), removed (absent from new SBOM),
2598
2694
  * updated (version changed), unchanged.
@@ -2677,8 +2773,6 @@ export declare enum OriginalFormat {
2677
2773
  Xccdf = "xccdf"
2678
2774
  }
2679
2775
  /**
2680
- * The role of this source in the comparison.
2681
- *
2682
2776
  * The role of a source document in the comparison.
2683
2777
  */
2684
2778
  export declare enum SourceRole {
@@ -2763,8 +2857,6 @@ export interface ComparisonSummary {
2763
2857
  [property: string]: any;
2764
2858
  }
2765
2859
  /**
2766
- * State counts broken down by severity level.
2767
- *
2768
2860
  * Breakdown of state counts by severity level.
2769
2861
  */
2770
2862
  export interface SeverityBreakdown {
@@ -2787,15 +2879,7 @@ export interface SeverityBreakdown {
2787
2879
  [property: string]: any;
2788
2880
  }
2789
2881
  /**
2790
- * State counts for critical severity requirements.
2791
- *
2792
2882
  * Counts of requirements in each state.
2793
- *
2794
- * State counts for high severity requirements.
2795
- *
2796
- * State counts for low severity requirements.
2797
- *
2798
- * State counts for medium severity requirements.
2799
2883
  */
2800
2884
  export interface StateCounts {
2801
2885
  /**
@@ -2871,8 +2955,8 @@ export interface PerSourceSummary {
2871
2955
  [property: string]: any;
2872
2956
  }
2873
2957
  /**
2874
- * Describes a system's authorization boundary, components, and interconnections. Maps to
2875
- * OSCAL SSP system-characteristics and FedRAMP system inventory.
2958
+ * Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP
2959
+ * system-characteristics and FedRAMP system inventory.
2876
2960
  */
2877
2961
  export interface HDFSystem {
2878
2962
  /**
@@ -2883,6 +2967,13 @@ export interface HDFSystem {
2883
2967
  * Current Authorization to Operate (ATO) status.
2884
2968
  */
2885
2969
  authorizationStatus?: AuthorizationStatus;
2970
+ /**
2971
+ * System-scoped Bills of Materials whose subject is the authorization boundary rather than
2972
+ * a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
2973
+ * Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
2974
+ * primitives/bom.schema.json.
2975
+ */
2976
+ boms?: BillOfMaterials[];
2886
2977
  /**
2887
2978
  * Description of the system's authorization boundary. Example: network CIDR blocks, cloud
2888
2979
  * VPC IDs, physical locations.
@@ -2894,7 +2985,8 @@ export interface HDFSystem {
2894
2985
  categorizationLevel?: CategorizationLevel;
2895
2986
  /**
2896
2987
  * System components within the authorization boundary. Uses the full polymorphic Component
2897
- * type with stable identity (componentId), external references, and SBOM support.
2988
+ * type with stable identity (componentId), external references, and generalized BOM
2989
+ * attachment (boms[]).
2898
2990
  */
2899
2991
  components: Component[];
2900
2992
  /**
@@ -2958,8 +3050,6 @@ export interface HDFSystem {
2958
3050
  [property: string]: any;
2959
3051
  }
2960
3052
  /**
2961
- * Current Authorization to Operate (ATO) status.
2962
- *
2963
3053
  * Authorization to Operate (ATO) status for the system.
2964
3054
  */
2965
3055
  export declare enum AuthorizationStatus {
@@ -2971,8 +3061,6 @@ export declare enum AuthorizationStatus {
2971
3061
  Revoked = "revoked"
2972
3062
  }
2973
3063
  /**
2974
- * FIPS 199 security categorization (impact level).
2975
- *
2976
3064
  * FIPS 199 security categorization level (impact level).
2977
3065
  */
2978
3066
  export declare enum CategorizationLevel {
@@ -2981,10 +3069,10 @@ export declare enum CategorizationLevel {
2981
3069
  Moderate = "moderate"
2982
3070
  }
2983
3071
  /**
2984
- * Declares a control's designation within a system — whether it is common (provided by
2985
- * another component or system), system-specific (implemented locally), or hybrid (shared
2986
- * responsibility). Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP
2987
- * by-component provided/inherited semantics.
3072
+ * Declares a control's designation within a system — whether it is common (provided by another
3073
+ * component or system), system-specific (implemented locally), or hybrid (shared responsibility).
3074
+ * Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP by-component
3075
+ * provided/inherited semantics.
2988
3076
  */
2989
3077
  export interface ControlDesignation {
2990
3078
  /**
@@ -3031,9 +3119,9 @@ export declare enum Designation {
3031
3119
  SystemSpecific = "system-specific"
3032
3120
  }
3033
3121
  /**
3034
- * A data flow between two endpoints. The 'from' endpoint is always a local component; the
3035
- * 'to' endpoint can be local, cross-system, or external. Use 'direction' to indicate
3036
- * whether data flows one-way or both ways.
3122
+ * A data flow between two endpoints. The 'from' endpoint is always a local component; the 'to'
3123
+ * endpoint can be local, cross-system, or external. Use 'direction' to indicate whether data flows
3124
+ * one-way or both ways.
3037
3125
  */
3038
3126
  export interface DataFlow {
3039
3127
  /**
@@ -3080,8 +3168,8 @@ export declare enum Direction {
3080
3168
  Unidirectional = "unidirectional"
3081
3169
  }
3082
3170
  /**
3083
- * Defines an assessment plan — what baselines to run against which targets, with resolved
3084
- * inputs and scheduling. Maps to OSCAL Assessment Plan.
3171
+ * Defines an assessment plan — what baselines to run against which targets, with resolved inputs
3172
+ * and scheduling. Maps to OSCAL Assessment Plan.
3085
3173
  */
3086
3174
  export interface HDFPlan {
3087
3175
  /**
@@ -3136,8 +3224,8 @@ export interface HDFPlan {
3136
3224
  [property: string]: any;
3137
3225
  }
3138
3226
  /**
3139
- * A single assessment within a plan — defines which baseline to run against which targets
3140
- * with what configuration.
3227
+ * A single assessment within a plan — defines which baseline to run against which targets with what
3228
+ * configuration.
3141
3229
  */
3142
3230
  export interface Assessment {
3143
3231
  /**
@@ -3176,8 +3264,6 @@ export interface Assessment {
3176
3264
  [property: string]: any;
3177
3265
  }
3178
3266
  /**
3179
- * Runner/scanner configuration for this assessment.
3180
- *
3181
3267
  * Configuration for the assessment runner/scanner.
3182
3268
  */
3183
3269
  export interface RunnerConfig {
@@ -3192,8 +3278,6 @@ export interface RunnerConfig {
3192
3278
  [property: string]: any;
3193
3279
  }
3194
3280
  /**
3195
- * Optional scheduling configuration for recurring assessments.
3196
- *
3197
3281
  * Scheduling configuration for recurring assessments.
3198
3282
  */
3199
3283
  export interface Schedule {
@@ -3221,10 +3305,8 @@ export interface Schedule {
3221
3305
  [property: string]: any;
3222
3306
  }
3223
3307
  /**
3224
- * The type of assessment plan.
3225
- *
3226
- * The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed,
3227
- * 'hybrid' for both.
3308
+ * The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed, 'hybrid'
3309
+ * for both.
3228
3310
  */
3229
3311
  export declare enum PlanType {
3230
3312
  Automated = "automated",
@@ -3232,8 +3314,8 @@ export declare enum PlanType {
3232
3314
  Manual = "manual"
3233
3315
  }
3234
3316
  /**
3235
- * Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
3236
- * Amendments are standalone documents that can be applied to results via merge operations.
3317
+ * Waivers, attestations, and POA&Ms that modify requirement compliance status or impact. Amendments
3318
+ * are standalone documents that can be applied to results via merge operations.
3237
3319
  */
3238
3320
  export interface HDFAmendments {
3239
3321
  /**
@@ -3292,18 +3374,18 @@ export interface HDFAmendments {
3292
3374
  [property: string]: any;
3293
3375
  }
3294
3376
  /**
3295
- * A standalone override to a requirement's compliance status or risk impact. Validation has
3296
- * two branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor
3297
- * 'impact' may be set — the override records accepted risk without changing the finding
3298
- * (documentation-only). For all other types, at least one of 'status' or 'impact' must be
3299
- * set. This rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
3377
+ * A standalone override to a requirement's compliance status or risk impact. Validation has two
3378
+ * branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor 'impact'
3379
+ * may be set — the override records accepted risk without changing the finding
3380
+ * (documentation-only). For all other types, at least one of 'status' or 'impact' must be set. This
3381
+ * rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
3300
3382
  * finding.associated-risk[].facet[] are separate axes
3301
- * (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2)
3302
- * FedRAMP deviation request types — Risk Adjustment changes impact only, Operational
3303
- * Requirement documents acceptance only, False Positive changes status
3304
- * (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3)
3305
- * NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from
3306
- * control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
3383
+ * (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2) FedRAMP
3384
+ * deviation request types — Risk Adjustment changes impact only, Operational Requirement documents
3385
+ * acceptance only, False Positive changes status
3386
+ * (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3) NIST SP
3387
+ * 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from control assessment
3388
+ * status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
3307
3389
  */
3308
3390
  export interface StandaloneOverride {
3309
3391
  /**
@@ -3400,9 +3482,8 @@ export interface StandaloneOverride {
3400
3482
  [property: string]: any;
3401
3483
  }
3402
3484
  /**
3403
- * Bundles references to all HDF documents for audit, authorization, and compliance review.
3404
- * Each content entry references a document by type, URI, and checksum for integrity
3405
- * verification.
3485
+ * Bundles references to all HDF documents for audit, authorization, and compliance review. Each
3486
+ * content entry references a document by type, URI, and checksum for integrity verification.
3406
3487
  */
3407
3488
  export interface HDFEvidencePackage {
3408
3489
  /**
@@ -3417,6 +3498,13 @@ export interface HDFEvidencePackage {
3417
3498
  * Description of the evidence package's purpose and scope.
3418
3499
  */
3419
3500
  description?: string;
3501
+ /**
3502
+ * References to external native-format evidence (log/telemetry corpora and other artifacts)
3503
+ * carried by URI + integrity hash + format discriminator, without recreating the data
3504
+ * inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
3505
+ * here rather than transcoding them.
3506
+ */
3507
+ externalEvidence?: ExternalEvidenceReference[];
3420
3508
  /**
3421
3509
  * Information about the tool that generated this document.
3422
3510
  */
@@ -3471,10 +3559,8 @@ export interface HDFEvidencePackage {
3471
3559
  [property: string]: any;
3472
3560
  }
3473
3561
  /**
3474
- * Summary of assessment completeness and compliance status.
3475
- *
3476
- * Informational summary of assessment completeness. Not authoritative — tools should
3477
- * compute these from the referenced documents.
3562
+ * Informational summary of assessment completeness. Not authoritative — tools should compute these
3563
+ * from the referenced documents.
3478
3564
  */
3479
3565
  export interface CompletenessCheck {
3480
3566
  /**
@@ -3504,8 +3590,6 @@ export interface CompletenessCheck {
3504
3590
  [property: string]: any;
3505
3591
  }
3506
3592
  /**
3507
- * SBOM coverage across system components.
3508
- *
3509
3593
  * SBOM coverage statistics for the system.
3510
3594
  */
3511
3595
  export interface SBOMCoverage {
@@ -3520,7 +3604,7 @@ export interface SBOMCoverage {
3520
3604
  [property: string]: any;
3521
3605
  }
3522
3606
  /**
3523
- * A reference to an HDF document or SBOM included in the evidence package.
3607
+ * A reference to an HDF document or BOM/manifest included in the evidence package.
3524
3608
  */
3525
3609
  export interface ContentReference {
3526
3610
  /**
@@ -3547,16 +3631,92 @@ export interface ContentReference {
3547
3631
  [property: string]: any;
3548
3632
  }
3549
3633
  /**
3550
- * The type of HDF document being referenced.
3551
- *
3552
- * The type of document referenced in the evidence package.
3634
+ * The type of document referenced in the evidence package. 'bom' covers any
3635
+ * Bill-of-Materials/manifest document (SBOM, AI model/dataset, and reserved future kinds) — its
3636
+ * specific kind is carried by the referenced document's bomType, not by a per-kind Content_Type
3637
+ * value.
3553
3638
  */
3554
3639
  export declare enum ContentType {
3640
+ BOM = "bom",
3555
3641
  HdfAmendments = "hdf-amendments",
3556
3642
  HdfBaseline = "hdf-baseline",
3557
3643
  HdfComparison = "hdf-comparison",
3558
3644
  HdfPlan = "hdf-plan",
3559
3645
  HdfResults = "hdf-results",
3560
- HdfSystem = "hdf-system",
3561
- Sbom = "sbom"
3646
+ HdfSystem = "hdf-system"
3647
+ }
3648
+ /**
3649
+ * A reference to external native-format evidence (log/telemetry corpus or other artifact) carried
3650
+ * by URI + integrity hash + format discriminator. Reference-only: the artifact is never embedded
3651
+ * (corpora can be huge) or transcoded (that would be lossy) — it stays canonical in its native
3652
+ * format and HDF acts as the structured index.
3653
+ */
3654
+ export interface ExternalEvidenceReference {
3655
+ /**
3656
+ * Cryptographic checksum of the referenced artifact for integrity verification.
3657
+ */
3658
+ checksum?: Checksum;
3659
+ /**
3660
+ * Optional human-readable description of this evidence entry.
3661
+ */
3662
+ description?: string;
3663
+ /**
3664
+ * The native format discriminator of the referenced artifact.
3665
+ */
3666
+ format: string;
3667
+ /**
3668
+ * Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
3669
+ * Free-text and untrusted — HDF does not validate it against a registry.
3670
+ */
3671
+ formatVersion?: string;
3672
+ /**
3673
+ * Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
3674
+ * (the semantic standard). Examples: application/x-ndjson, application/json,
3675
+ * application/vnd.apache.parquet, text/csv.
3676
+ */
3677
+ mediaType?: string;
3678
+ /**
3679
+ * Optional descriptive metadata about the referenced corpus. Does not affect integrity.
3680
+ */
3681
+ metadata?: ExternalEvidenceMetadata;
3682
+ /**
3683
+ * URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
3684
+ * a relative path or absolute URL. The data stays canonical in its native format — HDF
3685
+ * references it, never parses or transcodes it.
3686
+ */
3687
+ uri: string;
3688
+ [property: string]: any;
3689
+ }
3690
+ /**
3691
+ * Descriptive metadata about a referenced external evidence corpus. Does not affect integrity.
3692
+ */
3693
+ export interface ExternalEvidenceMetadata {
3694
+ /**
3695
+ * The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
3696
+ * 'elastic-agent'.
3697
+ */
3698
+ collector?: string;
3699
+ /**
3700
+ * Approximate number of records/events in the referenced corpus.
3701
+ */
3702
+ recordCount?: number;
3703
+ /**
3704
+ * The time window the referenced evidence covers.
3705
+ */
3706
+ timeRange?: ExternalEvidenceTimeRange;
3707
+ [property: string]: any;
3708
+ }
3709
+ /**
3710
+ * The time window a referenced external evidence corpus covers.
3711
+ */
3712
+ export interface ExternalEvidenceTimeRange {
3713
+ /**
3714
+ * End of the time window the corpus covers (ISO 8601).
3715
+ */
3716
+ end?: Date;
3717
+ /**
3718
+ * Start of the time window the corpus covers (ISO 8601).
3719
+ */
3720
+ start?: Date;
3721
+ [property: string]: any;
3562
3722
  }