@mitre/hdf-schema 3.0.0 → 3.1.0-rc.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.
Files changed (48) hide show
  1. package/LICENSE.md +55 -0
  2. package/README.md +96 -41
  3. package/dist/go/hdf.go +148 -104
  4. package/dist/helpers.js +4 -44
  5. package/dist/index.d.ts +26 -1
  6. package/dist/index.js +26 -1
  7. package/dist/schemas/hdf-amendments.schema.json +178 -53
  8. package/dist/schemas/hdf-baseline.schema.json +181 -56
  9. package/dist/schemas/hdf-comparison.schema.json +523 -108
  10. package/dist/schemas/hdf-evidence-package.schema.json +175 -50
  11. package/dist/schemas/hdf-plan.schema.json +181 -56
  12. package/dist/schemas/hdf-results.schema.json +502 -87
  13. package/dist/schemas/hdf-system.schema.json +190 -65
  14. package/dist/ts/hdf-amendments.d.ts +43 -15
  15. package/dist/ts/hdf-amendments.js +18 -7
  16. package/dist/ts/hdf-amendments.ts +44 -15
  17. package/dist/ts/hdf-results.d.ts +91 -37
  18. package/dist/ts/hdf-results.js +40 -20
  19. package/dist/ts/hdf-results.ts +91 -36
  20. package/package.json +44 -44
  21. package/dist/python/hdf_amendments.py +0 -695
  22. package/dist/python/hdf_baseline.py +0 -782
  23. package/dist/python/hdf_comparison.py +0 -1771
  24. package/dist/python/hdf_evidence_package.py +0 -593
  25. package/dist/python/hdf_plan.py +0 -363
  26. package/dist/python/hdf_results.py +0 -2163
  27. package/dist/python/hdf_system.py +0 -904
  28. package/src/schemas/hdf-amendments.schema.json +0 -97
  29. package/src/schemas/hdf-baseline.schema.json +0 -190
  30. package/src/schemas/hdf-comparison.schema.json +0 -107
  31. package/src/schemas/hdf-evidence-package.schema.json +0 -227
  32. package/src/schemas/hdf-plan.schema.json +0 -92
  33. package/src/schemas/hdf-results.schema.json +0 -304
  34. package/src/schemas/hdf-system.schema.json +0 -136
  35. package/src/schemas/primitives/amendments.schema.json +0 -155
  36. package/src/schemas/primitives/common.schema.json +0 -814
  37. package/src/schemas/primitives/comparison.schema.json +0 -809
  38. package/src/schemas/primitives/component.schema.json +0 -518
  39. package/src/schemas/primitives/data-flow.schema.json +0 -158
  40. package/src/schemas/primitives/extensions.schema.json +0 -342
  41. package/src/schemas/primitives/parameter.schema.json +0 -128
  42. package/src/schemas/primitives/plan.schema.json +0 -128
  43. package/src/schemas/primitives/platform.schema.json +0 -32
  44. package/src/schemas/primitives/result.schema.json +0 -133
  45. package/src/schemas/primitives/runner.schema.json +0 -83
  46. package/src/schemas/primitives/statistics.schema.json +0 -71
  47. package/src/schemas/primitives/system.schema.json +0 -132
  48. package/src/schemas/primitives/target.schema.json +0 -523
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Waivers, attestations, exceptions, and POA&Ms that modify requirement compliance status.
2
+ * Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
3
3
  * Amendments are standalone documents that can be applied to results via merge operations.
4
4
  */
5
5
  export interface HdfAmendments {
@@ -41,7 +41,7 @@ export interface HdfAmendments {
41
41
  */
42
42
  name: string;
43
43
  /**
44
- * The set of amendments (waivers, attestations, exceptions, POA&Ms).
44
+ * The set of amendments (waivers, attestations, POA&Ms, and other overrides).
45
45
  */
46
46
  overrides: StandaloneOverride[];
47
47
  /**
@@ -158,9 +158,9 @@ export declare enum HashAlgorithm {
158
158
  Sha512 = "sha512"
159
159
  }
160
160
  /**
161
- * A standalone amendment that modifies a requirement's compliance status. Extends the
162
- * inline Status_Override concept with requirementId and baselineRef for use outside of
163
- * results documents.
161
+ * A standalone amendment that modifies a requirement's compliance status and/or impact
162
+ * score. At least one of status or impact must be set. Extends the inline Override concept
163
+ * with requirementId and baselineRef for use outside of results documents.
164
164
  */
165
165
  export interface StandaloneOverride {
166
166
  /**
@@ -190,6 +190,10 @@ export interface StandaloneOverride {
190
190
  * format.
191
191
  */
192
192
  expiresAt: Date;
193
+ /**
194
+ * Override to the requirement's impact score. At least one of status or impact must be set.
195
+ */
196
+ impact?: ImpactOverride;
193
197
  /**
194
198
  * componentId of the local component that provides this control. Set when the provider is
195
199
  * in the same system. Omit for external or cross-system providers; the reason field
@@ -219,10 +223,9 @@ export interface StandaloneOverride {
219
223
  */
220
224
  signature?: Signature;
221
225
  /**
222
- * The new status this amendment sets. For POA&Ms, this is the current status (POA&Ms track
223
- * work, they don't change status).
226
+ * The new status this amendment sets. Optional when only impact is being overridden.
224
227
  */
225
- status: ResultStatus;
228
+ status?: ResultStatus;
226
229
  /**
227
230
  * The type of amendment.
228
231
  */
@@ -280,6 +283,20 @@ export declare enum EvidenceType {
280
283
  Screenshot = "screenshot",
281
284
  URL = "url"
282
285
  }
286
+ /**
287
+ * Override to the requirement's impact score. At least one of status or impact must be
288
+ * set.
289
+ *
290
+ * An override to the requirement's impact score. The prior impact is the original result
291
+ * value or the preceding override in the chain.
292
+ */
293
+ export interface ImpactOverride {
294
+ /**
295
+ * The overridden impact score (0.0–1.0).
296
+ */
297
+ value: number;
298
+ [property: string]: any;
299
+ }
283
300
  /**
284
301
  * A milestone or task within a POA&M remediation plan.
285
302
  */
@@ -415,8 +432,7 @@ export interface VerificationMethod {
415
432
  [property: string]: any;
416
433
  }
417
434
  /**
418
- * The new status this amendment sets. For POA&Ms, this is the current status (POA&Ms track
419
- * work, they don't change status).
435
+ * The new status this amendment sets. Optional when only impact is being overridden.
420
436
  *
421
437
  * The status of an individual test result. 'notApplicable' indicates the requirement does
422
438
  * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
@@ -432,15 +448,27 @@ export declare enum ResultStatus {
432
448
  /**
433
449
  * The type of amendment.
434
450
  *
435
- * The type of amendment. 'waiver': risk accepted (AO). 'attestation': manually verified
436
- * (assessor). 'exception': not applicable (system owner + AO). 'poam': remediation tracked
437
- * (no status change). 'inherited': control provided by another component or system
438
- * (overrides to notApplicable/passed).
451
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
452
+ * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
453
+ * remediation tracked (no status change). 'inherited': control provided by another
454
+ * component or system. 'falsePositive': scanner incorrectly identified a finding — for
455
+ * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
456
+ * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
457
+ * this system, so status is typically set to 'notApplicable'. The disposition field on the
458
+ * requirement distinguishes false positives from genuinely not-applicable findings.
459
+ * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
460
+ * Adjustment); does not change pass/fail status, only impact via the impact field.
461
+ * 'operationalRequirement': deviation required by operational constraints (FedRAMP
462
+ * Operational Requirement); the finding cannot be remediated because the system requires
463
+ * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
464
+ * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
439
465
  */
440
466
  export declare enum OverrideType {
441
467
  Attestation = "attestation",
442
- Exception = "exception",
468
+ FalsePositive = "falsePositive",
443
469
  Inherited = "inherited",
470
+ OperationalRequirement = "operationalRequirement",
444
471
  Poam = "poam",
472
+ RiskAdjustment = "riskAdjustment",
445
473
  Waiver = "waiver"
446
474
  }
@@ -44,8 +44,7 @@ export var Status;
44
44
  Status["Pending"] = "pending";
45
45
  })(Status || (Status = {}));
46
46
  /**
47
- * The new status this amendment sets. For POA&Ms, this is the current status (POA&Ms track
48
- * work, they don't change status).
47
+ * The new status this amendment sets. Optional when only impact is being overridden.
49
48
  *
50
49
  * The status of an individual test result. 'notApplicable' indicates the requirement does
51
50
  * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
@@ -62,16 +61,28 @@ export var ResultStatus;
62
61
  /**
63
62
  * The type of amendment.
64
63
  *
65
- * The type of amendment. 'waiver': risk accepted (AO). 'attestation': manually verified
66
- * (assessor). 'exception': not applicable (system owner + AO). 'poam': remediation tracked
67
- * (no status change). 'inherited': control provided by another component or system
68
- * (overrides to notApplicable/passed).
64
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
65
+ * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
66
+ * remediation tracked (no status change). 'inherited': control provided by another
67
+ * component or system. 'falsePositive': scanner incorrectly identified a finding — for
68
+ * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
69
+ * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
70
+ * this system, so status is typically set to 'notApplicable'. The disposition field on the
71
+ * requirement distinguishes false positives from genuinely not-applicable findings.
72
+ * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
73
+ * Adjustment); does not change pass/fail status, only impact via the impact field.
74
+ * 'operationalRequirement': deviation required by operational constraints (FedRAMP
75
+ * Operational Requirement); the finding cannot be remediated because the system requires
76
+ * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
77
+ * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
69
78
  */
70
79
  export var OverrideType;
71
80
  (function (OverrideType) {
72
81
  OverrideType["Attestation"] = "attestation";
73
- OverrideType["Exception"] = "exception";
82
+ OverrideType["FalsePositive"] = "falsePositive";
74
83
  OverrideType["Inherited"] = "inherited";
84
+ OverrideType["OperationalRequirement"] = "operationalRequirement";
75
85
  OverrideType["Poam"] = "poam";
86
+ OverrideType["RiskAdjustment"] = "riskAdjustment";
76
87
  OverrideType["Waiver"] = "waiver";
77
88
  })(OverrideType || (OverrideType = {}));
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Waivers, attestations, exceptions, and POA&Ms that modify requirement compliance status.
2
+ * Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
3
3
  * Amendments are standalone documents that can be applied to results via merge operations.
4
4
  */
5
5
  export interface HdfAmendments {
@@ -39,7 +39,7 @@ export interface HdfAmendments {
39
39
  */
40
40
  name: string;
41
41
  /**
42
- * The set of amendments (waivers, attestations, exceptions, POA&Ms).
42
+ * The set of amendments (waivers, attestations, POA&Ms, and other overrides).
43
43
  */
44
44
  overrides: StandaloneOverride[];
45
45
  /**
@@ -162,9 +162,9 @@ export enum HashAlgorithm {
162
162
  }
163
163
 
164
164
  /**
165
- * A standalone amendment that modifies a requirement's compliance status. Extends the
166
- * inline Status_Override concept with requirementId and baselineRef for use outside of
167
- * results documents.
165
+ * A standalone amendment that modifies a requirement's compliance status and/or impact
166
+ * score. At least one of status or impact must be set. Extends the inline Override concept
167
+ * with requirementId and baselineRef for use outside of results documents.
168
168
  */
169
169
  export interface StandaloneOverride {
170
170
  /**
@@ -194,6 +194,10 @@ export interface StandaloneOverride {
194
194
  * format.
195
195
  */
196
196
  expiresAt: Date;
197
+ /**
198
+ * Override to the requirement's impact score. At least one of status or impact must be set.
199
+ */
200
+ impact?: ImpactOverride;
197
201
  /**
198
202
  * componentId of the local component that provides this control. Set when the provider is
199
203
  * in the same system. Omit for external or cross-system providers; the reason field
@@ -223,10 +227,9 @@ export interface StandaloneOverride {
223
227
  */
224
228
  signature?: Signature;
225
229
  /**
226
- * The new status this amendment sets. For POA&Ms, this is the current status (POA&Ms track
227
- * work, they don't change status).
230
+ * The new status this amendment sets. Optional when only impact is being overridden.
228
231
  */
229
- status: ResultStatus;
232
+ status?: ResultStatus;
230
233
  /**
231
234
  * The type of amendment.
232
235
  */
@@ -287,6 +290,21 @@ export enum EvidenceType {
287
290
  URL = "url",
288
291
  }
289
292
 
293
+ /**
294
+ * Override to the requirement's impact score. At least one of status or impact must be
295
+ * set.
296
+ *
297
+ * An override to the requirement's impact score. The prior impact is the original result
298
+ * value or the preceding override in the chain.
299
+ */
300
+ export interface ImpactOverride {
301
+ /**
302
+ * The overridden impact score (0.0–1.0).
303
+ */
304
+ value: number;
305
+ [property: string]: any;
306
+ }
307
+
290
308
  /**
291
309
  * A milestone or task within a POA&M remediation plan.
292
310
  */
@@ -425,8 +443,7 @@ export interface VerificationMethod {
425
443
  }
426
444
 
427
445
  /**
428
- * The new status this amendment sets. For POA&Ms, this is the current status (POA&Ms track
429
- * work, they don't change status).
446
+ * The new status this amendment sets. Optional when only impact is being overridden.
430
447
  *
431
448
  * The status of an individual test result. 'notApplicable' indicates the requirement does
432
449
  * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
@@ -443,15 +460,27 @@ export enum ResultStatus {
443
460
  /**
444
461
  * The type of amendment.
445
462
  *
446
- * The type of amendment. 'waiver': risk accepted (AO). 'attestation': manually verified
447
- * (assessor). 'exception': not applicable (system owner + AO). 'poam': remediation tracked
448
- * (no status change). 'inherited': control provided by another component or system
449
- * (overrides to notApplicable/passed).
463
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
464
+ * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
465
+ * remediation tracked (no status change). 'inherited': control provided by another
466
+ * component or system. 'falsePositive': scanner incorrectly identified a finding — for
467
+ * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
468
+ * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
469
+ * this system, so status is typically set to 'notApplicable'. The disposition field on the
470
+ * requirement distinguishes false positives from genuinely not-applicable findings.
471
+ * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
472
+ * Adjustment); does not change pass/fail status, only impact via the impact field.
473
+ * 'operationalRequirement': deviation required by operational constraints (FedRAMP
474
+ * Operational Requirement); the finding cannot be remediated because the system requires
475
+ * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
476
+ * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
450
477
  */
451
478
  export enum OverrideType {
452
479
  Attestation = "attestation",
453
- Exception = "exception",
480
+ FalsePositive = "falsePositive",
454
481
  Inherited = "inherited",
482
+ OperationalRequirement = "operationalRequirement",
455
483
  Poam = "poam",
484
+ RiskAdjustment = "riskAdjustment",
456
485
  Waiver = "waiver",
457
486
  }
@@ -417,8 +417,22 @@ export interface EvaluatedRequirement {
417
417
  */
418
418
  descriptions: Description[];
419
419
  /**
420
- * The current effective status of this requirement after applying the most recent
421
- * non-expired override, or computed from results if no overrides exist.
420
+ * The type of the most recent non-expired override or POAM governing this requirement.
421
+ * Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
422
+ * riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
423
+ * POAMs apply.
424
+ */
425
+ disposition?: OverrideType;
426
+ /**
427
+ * The current effective impact score (0.0–1.0) after applying the most recent non-expired
428
+ * override with an impact field. Absent when no impact overrides apply; consumers should
429
+ * use the requirement's impact field in that case.
430
+ */
431
+ effectiveImpact?: number;
432
+ /**
433
+ * The current effective compliance status of this requirement after applying the most
434
+ * recent non-expired override with a status field, or computed from results (worst-wins) if
435
+ * no status-bearing overrides exist.
422
436
  */
423
437
  effectiveStatus?: ResultStatus;
424
438
  /**
@@ -446,9 +460,10 @@ export interface EvaluatedRequirement {
446
460
  */
447
461
  sourceLocation?: SourceLocation;
448
462
  /**
449
- * Chronological history of all status overrides applied to this requirement. Status
450
- * overrides are intentional changes to the compliance status (waivers, attestations). Most
451
- * recent override should be first in array. Preserves full audit trail.
463
+ * Chronological history of all overrides applied to this requirement. Overrides are
464
+ * intentional changes to the compliance status and/or impact score (waivers, attestations,
465
+ * false positives, risk adjustments). Most recent override should be first in array.
466
+ * Preserves full audit trail.
452
467
  */
453
468
  statusOverrides?: StatusOverride[];
454
469
  /**
@@ -494,8 +509,41 @@ export interface Description {
494
509
  [property: string]: any;
495
510
  }
496
511
  /**
497
- * The current effective status of this requirement after applying the most recent
498
- * non-expired override, or computed from results if no overrides exist.
512
+ * The type of the most recent non-expired override or POAM governing this requirement.
513
+ * Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
514
+ * riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
515
+ * POAMs apply.
516
+ *
517
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
518
+ * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
519
+ * remediation tracked (no status change). 'inherited': control provided by another
520
+ * component or system. 'falsePositive': scanner incorrectly identified a finding — for
521
+ * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
522
+ * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
523
+ * this system, so status is typically set to 'notApplicable'. The disposition field on the
524
+ * requirement distinguishes false positives from genuinely not-applicable findings.
525
+ * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
526
+ * Adjustment); does not change pass/fail status, only impact via the impact field.
527
+ * 'operationalRequirement': deviation required by operational constraints (FedRAMP
528
+ * Operational Requirement); the finding cannot be remediated because the system requires
529
+ * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
530
+ * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
531
+ *
532
+ * The type of override applied to this requirement.
533
+ */
534
+ export declare enum OverrideType {
535
+ Attestation = "attestation",
536
+ FalsePositive = "falsePositive",
537
+ Inherited = "inherited",
538
+ OperationalRequirement = "operationalRequirement",
539
+ Poam = "poam",
540
+ RiskAdjustment = "riskAdjustment",
541
+ Waiver = "waiver"
542
+ }
543
+ /**
544
+ * The current effective compliance status of this requirement after applying the most
545
+ * recent non-expired override with a status field, or computed from results (worst-wins) if
546
+ * no status-bearing overrides exist.
499
547
  *
500
548
  * The status of an individual test result. 'notApplicable' indicates the requirement does
501
549
  * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
@@ -503,8 +551,8 @@ export interface Description {
503
551
  *
504
552
  * The status of this test within the requirement. Example: 'failed'.
505
553
  *
506
- * The new status this override sets for the requirement. This intentionally changes the
507
- * compliance status.
554
+ * The new status this override sets for the requirement. Optional when only impact is being
555
+ * overridden.
508
556
  */
509
557
  export declare enum ResultStatus {
510
558
  Error = "error",
@@ -566,8 +614,8 @@ export interface Evidence {
566
614
  *
567
615
  * The identity that created this signature.
568
616
  *
569
- * Identity of who applied this status override. For simple cases, use type 'simple' with
570
- * just an identifier.
617
+ * Identity of who applied this override. For simple cases, use type 'simple' with just an
618
+ * identifier.
571
619
  *
572
620
  * Identity of the person or system that approved this override.
573
621
  *
@@ -664,6 +712,7 @@ export interface Poam {
664
712
  /**
665
713
  * The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
666
714
  * compensating controls. 'riskAcceptance' documents decision to accept risk.
715
+ * 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
667
716
  */
668
717
  type: PoamType;
669
718
  [property: string]: any;
@@ -790,11 +839,13 @@ export interface VerificationMethod {
790
839
  /**
791
840
  * The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
792
841
  * compensating controls. 'riskAcceptance' documents decision to accept risk.
842
+ * 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
793
843
  */
794
844
  export declare enum PoamType {
795
845
  Mitigation = "mitigation",
796
846
  Remediation = "remediation",
797
- RiskAcceptance = "riskAcceptance"
847
+ RiskAcceptance = "riskAcceptance",
848
+ VendorDependency = "vendorDependency"
798
849
  }
799
850
  /**
800
851
  * A reference to an external document.
@@ -887,30 +938,34 @@ export interface SourceLocation {
887
938
  [property: string]: any;
888
939
  }
889
940
  /**
890
- * An intentional change to a requirement's compliance status (waiver or attestation).
891
- * Status overrides change the effectiveStatus of the requirement. All status overrides must
892
- * have an expiration date to enforce periodic review.
941
+ * An intentional change to a requirement's compliance status and/or impact score. At least
942
+ * one of status or impact must be set. Overrides change the effectiveStatus or impact of
943
+ * the requirement. All overrides must have an expiration date to enforce periodic review.
893
944
  */
894
945
  export interface StatusOverride {
895
946
  /**
896
- * Timestamp when this status override was applied. ISO 8601 format.
947
+ * Timestamp when this override was applied. ISO 8601 format.
897
948
  */
898
949
  appliedAt: Date;
899
950
  /**
900
- * Identity of who applied this status override. For simple cases, use type 'simple' with
901
- * just an identifier.
951
+ * Identity of who applied this override. For simple cases, use type 'simple' with just an
952
+ * identifier.
902
953
  */
903
954
  appliedBy: Identity;
904
955
  /**
905
- * Supporting evidence for this status override, such as screenshots demonstrating manual
956
+ * Supporting evidence for this override, such as screenshots demonstrating manual
906
957
  * verification for attestations.
907
958
  */
908
959
  evidence?: Evidence[];
909
960
  /**
910
- * Timestamp when this status override expires and must be reviewed/renewed. REQUIRED - no
911
- * permanent status overrides allowed. ISO 8601 format.
961
+ * Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no
962
+ * permanent overrides allowed. ISO 8601 format.
912
963
  */
913
964
  expiresAt: Date;
965
+ /**
966
+ * Override to the requirement's impact score. At least one of status or impact must be set.
967
+ */
968
+ impact?: ImpactOverride;
914
969
  /**
915
970
  * SHA-256 checksum of the previous amendment in chronological order. Creates a
916
971
  * tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
@@ -918,7 +973,7 @@ export interface StatusOverride {
918
973
  */
919
974
  previousChecksum?: Checksum;
920
975
  /**
921
- * Explanation for why this status override was applied.
976
+ * Explanation for why this override was applied.
922
977
  */
923
978
  reason: string;
924
979
  /**
@@ -928,30 +983,29 @@ export interface StatusOverride {
928
983
  */
929
984
  signature?: Signature;
930
985
  /**
931
- * The new status this override sets for the requirement. This intentionally changes the
932
- * compliance status.
986
+ * The new status this override sets for the requirement. Optional when only impact is being
987
+ * overridden.
933
988
  */
934
- status: ResultStatus;
989
+ status?: ResultStatus;
935
990
  /**
936
- * The type of status override applied to this requirement.
991
+ * The type of override applied to this requirement.
937
992
  */
938
993
  type: OverrideType;
939
994
  [property: string]: any;
940
995
  }
941
996
  /**
942
- * The type of status override applied to this requirement.
997
+ * Override to the requirement's impact score. At least one of status or impact must be
998
+ * set.
943
999
  *
944
- * The type of amendment. 'waiver': risk accepted (AO). 'attestation': manually verified
945
- * (assessor). 'exception': not applicable (system owner + AO). 'poam': remediation tracked
946
- * (no status change). 'inherited': control provided by another component or system
947
- * (overrides to notApplicable/passed).
1000
+ * An override to the requirement's impact score. The prior impact is the original result
1001
+ * value or the preceding override in the chain.
948
1002
  */
949
- export declare enum OverrideType {
950
- Attestation = "attestation",
951
- Exception = "exception",
952
- Inherited = "inherited",
953
- Poam = "poam",
954
- Waiver = "waiver"
1003
+ export interface ImpactOverride {
1004
+ /**
1005
+ * The overridden impact score (0.0–1.0).
1006
+ */
1007
+ value: number;
1008
+ [property: string]: any;
955
1009
  }
956
1010
  /**
957
1011
  * A supported platform target. Example: the platform name being 'ubuntu'.
@@ -43,8 +43,42 @@ export var HashAlgorithm;
43
43
  HashAlgorithm["Sha512"] = "sha512";
44
44
  })(HashAlgorithm || (HashAlgorithm = {}));
45
45
  /**
46
- * The current effective status of this requirement after applying the most recent
47
- * non-expired override, or computed from results if no overrides exist.
46
+ * The type of the most recent non-expired override or POAM governing this requirement.
47
+ * Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
48
+ * riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
49
+ * POAMs apply.
50
+ *
51
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
52
+ * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
53
+ * remediation tracked (no status change). 'inherited': control provided by another
54
+ * component or system. 'falsePositive': scanner incorrectly identified a finding — for
55
+ * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
56
+ * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
57
+ * this system, so status is typically set to 'notApplicable'. The disposition field on the
58
+ * requirement distinguishes false positives from genuinely not-applicable findings.
59
+ * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
60
+ * Adjustment); does not change pass/fail status, only impact via the impact field.
61
+ * 'operationalRequirement': deviation required by operational constraints (FedRAMP
62
+ * Operational Requirement); the finding cannot be remediated because the system requires
63
+ * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
64
+ * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
65
+ *
66
+ * The type of override applied to this requirement.
67
+ */
68
+ export var OverrideType;
69
+ (function (OverrideType) {
70
+ OverrideType["Attestation"] = "attestation";
71
+ OverrideType["FalsePositive"] = "falsePositive";
72
+ OverrideType["Inherited"] = "inherited";
73
+ OverrideType["OperationalRequirement"] = "operationalRequirement";
74
+ OverrideType["Poam"] = "poam";
75
+ OverrideType["RiskAdjustment"] = "riskAdjustment";
76
+ OverrideType["Waiver"] = "waiver";
77
+ })(OverrideType || (OverrideType = {}));
78
+ /**
79
+ * The current effective compliance status of this requirement after applying the most
80
+ * recent non-expired override with a status field, or computed from results (worst-wins) if
81
+ * no status-bearing overrides exist.
48
82
  *
49
83
  * The status of an individual test result. 'notApplicable' indicates the requirement does
50
84
  * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
@@ -52,8 +86,8 @@ export var HashAlgorithm;
52
86
  *
53
87
  * The status of this test within the requirement. Example: 'failed'.
54
88
  *
55
- * The new status this override sets for the requirement. This intentionally changes the
56
- * compliance status.
89
+ * The new status this override sets for the requirement. Optional when only impact is being
90
+ * overridden.
57
91
  */
58
92
  export var ResultStatus;
59
93
  (function (ResultStatus) {
@@ -100,12 +134,14 @@ export var Status;
100
134
  /**
101
135
  * The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
102
136
  * compensating controls. 'riskAcceptance' documents decision to accept risk.
137
+ * 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
103
138
  */
104
139
  export var PoamType;
105
140
  (function (PoamType) {
106
141
  PoamType["Mitigation"] = "mitigation";
107
142
  PoamType["Remediation"] = "remediation";
108
143
  PoamType["RiskAcceptance"] = "riskAcceptance";
144
+ PoamType["VendorDependency"] = "vendorDependency";
109
145
  })(PoamType || (PoamType = {}));
110
146
  /**
111
147
  * Explicit severity rating. Typically derived from impact score but provided explicitly for
@@ -121,22 +157,6 @@ export var Severity;
121
157
  Severity["Low"] = "low";
122
158
  Severity["Medium"] = "medium";
123
159
  })(Severity || (Severity = {}));
124
- /**
125
- * The type of status override applied to this requirement.
126
- *
127
- * The type of amendment. 'waiver': risk accepted (AO). 'attestation': manually verified
128
- * (assessor). 'exception': not applicable (system owner + AO). 'poam': remediation tracked
129
- * (no status change). 'inherited': control provided by another component or system
130
- * (overrides to notApplicable/passed).
131
- */
132
- export var OverrideType;
133
- (function (OverrideType) {
134
- OverrideType["Attestation"] = "attestation";
135
- OverrideType["Exception"] = "exception";
136
- OverrideType["Inherited"] = "inherited";
137
- OverrideType["Poam"] = "poam";
138
- OverrideType["Waiver"] = "waiver";
139
- })(OverrideType || (OverrideType = {}));
140
160
  export var CloudProvider;
141
161
  (function (CloudProvider) {
142
162
  CloudProvider["Aws"] = "aws";