@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
package/LICENSE.md ADDED
@@ -0,0 +1,55 @@
1
+ # License
2
+
3
+ Copyright © 2025 The MITRE Corporation.
4
+
5
+ Approved for Public Release; Distribution Unlimited. Case Number 18-3678.
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
8
+ not use this file except in compliance with the License. You may obtain a
9
+ copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
+ License for the specific language governing permissions and limitations
17
+ under the License.
18
+
19
+ ## Redistribution Terms
20
+
21
+ Redistribution and use in source and binary forms, with or without
22
+ modification, are permitted provided that the following conditions are
23
+ met:
24
+
25
+ - Redistributions of source code must retain the above copyright/digital
26
+ rights legend, this list of conditions and the following Notice.
27
+ - Redistributions in binary form must reproduce the above
28
+ copyright/digital rights legend, this list of conditions and the
29
+ following Notice in the documentation and/or other materials provided
30
+ with the distribution.
31
+ - Neither the name of The MITRE Corporation nor the names of its contributors
32
+ may be used to endorse or promote products derived from this software
33
+ without specific prior written permission.
34
+
35
+ ## Notice
36
+
37
+ The MITRE Corporation grants permission to reproduce, distribute, modify, and
38
+ otherwise use this software to the extent permitted by the licensed terms
39
+ provided in the LICENSE file included with this project.
40
+
41
+ This software was produced by The MITRE Corporation for the U.S. Government
42
+ under contract. As such the U.S. Government has certain use and data
43
+ rights in this software. No use other than those granted to the U.S.
44
+ Government, or to those acting on behalf of the U.S. Government, under
45
+ these contract arrangements is authorized without the express written
46
+ permission of The MITRE Corporation.
47
+
48
+ Some files in this codebase were generated by generative AI, under the
49
+ direction and review of The MITRE Corporation employees, for the purpose of
50
+ development efficiency. All AI-generated code functionality was validated
51
+ by standard quality and assurance testing.
52
+
53
+ For further information, please contact The MITRE Corporation,
54
+ Contracts Management Office, 7515 Colshire Drive, McLean, VA 22102-7539,
55
+ (703) 983-6000.
package/README.md CHANGED
@@ -7,7 +7,7 @@ JSON schemas and multi-language type definitions for **Heimdall Data Format (HDF
7
7
  HDF is a standardized format for representing security assessment results. This package provides:
8
8
 
9
9
  - **JSON Schemas** for validating HDF documents
10
- - **Generated types** for TypeScript, Go, and Python
10
+ - **Generated types** for TypeScript and Go
11
11
 
12
12
  ## Installation
13
13
 
@@ -17,31 +17,67 @@ npm install @mitre/hdf-schema
17
17
 
18
18
  ## Schema Types
19
19
 
20
- ### HDF Results
20
+ Seven document types covering the full security assessment lifecycle:
21
21
 
22
- Assessment results from running security checks against target systems. Contains:
22
+ ### HDF Results (`hdf-results`)
23
23
 
24
- - Target system information (hosts, containers, cloud accounts, etc.)
25
- - Evaluated baselines with requirement results
26
- - Pass/fail status for each check
27
- - Statistics and timing data
24
+ Assessment findings from running security checks against target systems. The primary output of converters. Contains evaluated baselines with requirement results, components (hosts, containers, cloud resources), status overrides with disposition tracking, and statistics.
28
25
 
29
- ### HDF Baseline
26
+ ### HDF Baseline (`hdf-baseline`)
30
27
 
31
- Security requirement definitions without results. Contains:
28
+ Security requirement definitions without results — the "what to check" document. Contains requirement metadata (title, descriptions, severity, impact), check/fix instructions, framework mappings (NIST, CCI), and dependency information.
32
29
 
33
- - Requirement metadata (title, description, severity)
34
- - Check and fix instructions
35
- - Framework mappings (NIST, CIS, etc.)
36
- - Dependencies between requirements
30
+ ### HDF System (`hdf-system`)
31
+
32
+ Authorization boundary definition. Describes a system's components (with polymorphic types: host, container, cloud account, application, etc.), data flows between components, and control designations (common/hybrid/system-specific).
33
+
34
+ ### HDF Plan (`hdf-plan`)
35
+
36
+ Assessment plan linking baselines to system components. Defines what will be assessed, how, and by whom. References baselines, systems, and runner configurations.
37
+
38
+ ### HDF Amendments (`hdf-amendments`)
39
+
40
+ Standalone amendment documents containing waivers, attestations, POA&Ms, and other overrides. Applied to results via `hdf amend apply` to track adjudication decisions (false positives, risk adjustments, operational requirements).
41
+
42
+ ### HDF Evidence Package (`hdf-evidence-package`)
43
+
44
+ Bundles references to all documents needed for a compliance review — results, baselines, system, plan, and amendments — with checksums for integrity verification.
45
+
46
+ ### HDF Comparison (`hdf-comparison`)
47
+
48
+ Output of the diff engine. Structural comparison between two or more HDF documents showing requirement-level changes, status transitions, and field diffs.
37
49
 
38
50
  ## Usage
39
51
 
52
+ ### Importing Schemas
53
+
54
+ Schemas can be imported in two ways:
55
+
56
+ ```typescript
57
+ // Named exports from the barrel (all schemas available)
58
+ import { hdfResultsSchema, hdfBaselineSchema, hdfSystemSchema } from '@mitre/hdf-schema';
59
+
60
+ // Sub-path imports (one schema per import, tree-shakeable)
61
+ import type { HdfResults } from '@mitre/hdf-schema/hdf-results';
62
+ import type { HdfBaseline } from '@mitre/hdf-schema/hdf-baseline';
63
+ import type { HdfSystem } from '@mitre/hdf-schema/hdf-system';
64
+ import type { HdfPlan } from '@mitre/hdf-schema/hdf-plan';
65
+ import type { HdfAmendments } from '@mitre/hdf-schema/hdf-amendments';
66
+ import type { HdfEvidencePackage } from '@mitre/hdf-schema/hdf-evidence-package';
67
+ import type { HdfComparison } from '@mitre/hdf-schema/hdf-comparison';
68
+ ```
69
+
70
+ Helper functions (severity mapping, effective status computation):
71
+
72
+ ```typescript
73
+ import { severityToImpact, impactToSeverity, computeEffectiveStatus } from '@mitre/hdf-schema/helpers';
74
+ ```
75
+
40
76
  ### Validating Documents (TypeScript/JavaScript)
41
77
 
42
78
  ```typescript
43
79
  import Ajv from 'ajv';
44
- import hdfResultsSchema from '@mitre/hdf-schema/schemas/hdf-results.schema.json';
80
+ import { hdfResultsSchema } from '@mitre/hdf-schema';
45
81
 
46
82
  const ajv = new Ajv({ strict: false });
47
83
  const validate = ajv.compile(hdfResultsSchema);
@@ -58,8 +94,8 @@ if (!isValid) {
58
94
  import type { HdfResults, HdfBaseline } from '@mitre/hdf-schema';
59
95
 
60
96
  function processResults(results: HdfResults) {
61
- for (const baseline of results.profiles) {
62
- for (const requirement of baseline.controls) {
97
+ for (const baseline of results.baselines) {
98
+ for (const requirement of baseline.requirements) {
63
99
  console.log(`${requirement.id}: ${requirement.results[0]?.status}`);
64
100
  }
65
101
  }
@@ -69,39 +105,33 @@ function processResults(results: HdfResults) {
69
105
  ### Using Generated Types (Go)
70
106
 
71
107
  ```go
72
- import "github.com/mitre/hdf-libs/hdf-schema/dist/go/hdf"
108
+ import hdf "github.com/mitre/hdf-libs/hdf-schema/dist/go"
73
109
 
74
110
  func main() {
75
- data := []byte(`{"platform": {...}, "profiles": [...]}`)
76
- results, err := hdf.UnmarshalHdfResults(data)
111
+ data := []byte(`{"baselines": [...]}`)
112
+ results, err := hdf.UnmarshalHDFResults(data)
77
113
  if err != nil {
78
114
  panic(err)
79
115
  }
80
- fmt.Println(results.Version)
116
+ for _, baseline := range results.Baselines {
117
+ fmt.Printf("%s: %d requirements\n", baseline.Name, len(baseline.Requirements))
118
+ }
81
119
  }
82
120
  ```
83
121
 
84
- ### Using Generated Types (Python)
85
-
86
- ```python
87
- from hdf_results import HdfResults
88
- import json
89
-
90
- with open('results.json') as f:
91
- data = json.load(f)
92
- results = HdfResults.from_dict(data)
93
- print(results.version)
94
- ```
95
-
96
122
  ## Schema Files
97
123
 
98
124
  | File | Description |
99
125
  |------|-------------|
100
- | `src/schemas/hdf-results.schema.json` | Results schema (modular, uses $ref) |
101
- | `src/schemas/hdf-baseline.schema.json` | Baseline schema (modular, uses $ref) |
126
+ | `src/schemas/hdf-results.schema.json` | Assessment findings (modular, uses $ref) |
127
+ | `src/schemas/hdf-baseline.schema.json` | Requirement definitions without results |
128
+ | `src/schemas/hdf-system.schema.json` | Authorization boundary, components, data flows |
129
+ | `src/schemas/hdf-plan.schema.json` | Assessment plan linking baselines to components |
130
+ | `src/schemas/hdf-amendments.schema.json` | Waivers, attestations, POA&Ms |
131
+ | `src/schemas/hdf-evidence-package.schema.json` | Bundle of references to all documents |
132
+ | `src/schemas/hdf-comparison.schema.json` | Differential analysis between assessments |
102
133
  | `src/schemas/primitives/*.schema.json` | Shared type definitions |
103
- | `dist/schemas/hdf-results.schema.json` | Bundled results schema (self-contained) |
104
- | `dist/schemas/hdf-baseline.schema.json` | Bundled baseline schema (self-contained) |
134
+ | `dist/schemas/*.schema.json` | Bundled schemas (self-contained, all $refs inlined) |
105
135
 
106
136
  ### Modular vs Bundled Schemas
107
137
 
@@ -115,9 +145,8 @@ After building, types are available in:
115
145
 
116
146
  | Language | Location |
117
147
  |----------|----------|
118
- | TypeScript | `dist/ts/hdf-results.ts`, `dist/ts/hdf-baseline.ts` |
119
- | Go | `dist/go/hdf_results.go`, `dist/go/hdf_baseline.go` |
120
- | Python | `dist/python/hdf_results.py`, `dist/python/hdf_baseline.py` |
148
+ | TypeScript | `dist/ts/hdf-*.ts` (7 files, one per schema) |
149
+ | Go | `dist/go/hdf.go` (single file containing all types) |
121
150
 
122
151
  ## Development
123
152
 
@@ -138,6 +167,32 @@ pnpm build:schemas
138
167
  pnpm build:types
139
168
  ```
140
169
 
141
- ## Schema Version
170
+ ## Versioning
171
+
172
+ This package has two version numbers that serve different purposes:
173
+
174
+ - **Package version** (`package.json` `version`): Follows npm semver. Bumped on every release — bug fixes, new helpers, type generation improvements, dependency updates. This is what consumers see in `npm install @mitre/hdf-schema@3.0.1`.
175
+
176
+ - **Schema version** (`$id` URL in each `.schema.json`): Identifies the schema structure itself. Only changes when the schema structure changes — new fields, removed fields, type changes, constraint changes. Example: `https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.1.0`.
177
+
178
+ These versions are aligned at major boundaries (both are 3.x to signal this is the successor to the heimdall2 v2.x ecosystem) but can diverge at minor/patch levels. A package patch release (e.g., 3.0.1 → 3.0.2) that only fixes a converter bug or updates a helper function does not change the schema `$id`. A schema structural change (e.g., adding a new required field) bumps the schema version in the `$id` URL regardless of where the package version stands.
179
+
180
+ The `$id` URLs are also the canonical hosted location for each schema: `https://mitre.github.io/hdf-libs/schemas/`.
181
+
182
+ ### JSON Schema dialect
183
+
184
+ All schemas use **JSON Schema draft/2020-12**.
185
+
186
+ ### Hosted schema documentation
187
+
188
+ Interactive schema reference documentation is published at:
189
+ **<https://mitre.github.io/hdf-libs/schemas/>**
190
+
191
+ ### What's new in v3.1.0
142
192
 
143
- This package uses **JSON Schema draft/2020-12**.
193
+ - **`disposition`** field on `EvaluatedRequirement` — the type of the governing override or POAM (e.g., `waiver`, `falsePositive`, `riskAdjustment`). Indicates why a requirement is in its current state.
194
+ - **`effectiveImpact`** field on `EvaluatedRequirement` — the computed impact score (0.0–1.0) after applying the most recent non-expired impact override.
195
+ - **`Impact_Override`** type on `Status_Override` and `Standalone_Override` — object with a `value` field (0.0–1.0). At least one of `status` or `impact` must be set (enforced via `anyOf`).
196
+ - **`Override_Type` expansion** — added `falsePositive`, `riskAdjustment`, `operationalRequirement`; removed `exception` (use `waiver` with `status: "notApplicable"` instead).
197
+ - **`vendorDependency`** added to POAM type enum.
198
+ - **Breaking:** The `./schemas/<name>.schema.json` sub-path export was removed. Use named imports from the barrel (`import { hdfResultsSchema } from '@mitre/hdf-schema'`) instead.
package/dist/go/hdf.go CHANGED
@@ -342,8 +342,18 @@ type EvaluatedRequirement struct {
342
342
  // present. Convention: place default description first. Common labels: 'default', 'check',
343
343
  // 'fix', 'rationale'.
344
344
  Descriptions []Description `json:"descriptions"`
345
- // The current effective status of this requirement after applying the most recent
346
- // non-expired override, or computed from results if no overrides exist.
345
+ // The type of the most recent non-expired override or POAM governing this requirement.
346
+ // Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
347
+ // riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
348
+ // POAMs apply.
349
+ Disposition *OverrideType `json:"disposition,omitempty"`
350
+ // The current effective impact score (0.0–1.0) after applying the most recent non-expired
351
+ // override with an impact field. Absent when no impact overrides apply; consumers should
352
+ // use the requirement's impact field in that case.
353
+ EffectiveImpact *float64 `json:"effectiveImpact,omitempty"`
354
+ // The current effective compliance status of this requirement after applying the most
355
+ // recent non-expired override with a status field, or computed from results (worst-wins) if
356
+ // no status-bearing overrides exist.
347
357
  EffectiveStatus *ResultStatus `json:"effectiveStatus,omitempty"`
348
358
  // Supporting evidence for this requirement's findings, such as screenshots, code samples,
349
359
  // or log excerpts.
@@ -359,9 +369,10 @@ type EvaluatedRequirement struct {
359
369
  Severity *Severity `json:"severity,omitempty"`
360
370
  // The explicit location of the requirement within the source code.
361
371
  SourceLocation *SourceLocation `json:"sourceLocation,omitempty"`
362
- // Chronological history of all status overrides applied to this requirement. Status
363
- // overrides are intentional changes to the compliance status (waivers, attestations). Most
364
- // recent override should be first in array. Preserves full audit trail.
372
+ // Chronological history of all overrides applied to this requirement. Overrides are
373
+ // intentional changes to the compliance status and/or impact score (waivers, attestations,
374
+ // false positives, risk adjustments). Most recent override should be first in array.
375
+ // Preserves full audit trail.
365
376
  StatusOverrides []StatusOverride `json:"statusOverrides,omitempty"`
366
377
  // The requirement identifier. Example: 'SV-238196'.
367
378
  ID string `json:"id"`
@@ -421,8 +432,8 @@ type Evidence struct {
421
432
  //
422
433
  // The identity that created this signature.
423
434
  //
424
- // Identity of who applied this status override. For simple cases, use type 'simple' with
425
- // just an identifier.
435
+ // Identity of who applied this override. For simple cases, use type 'simple' with just an
436
+ // identifier.
426
437
  //
427
438
  // Identity of the person or system that approved this override.
428
439
  //
@@ -482,6 +493,7 @@ type PoamElement struct {
482
493
  Signature *Signature `json:"signature,omitempty"`
483
494
  // The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
484
495
  // compensating controls. 'riskAcceptance' documents decision to accept risk.
496
+ // 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
485
497
  Type PoamType `json:"type"`
486
498
  }
487
499
 
@@ -603,36 +615,48 @@ type SourceLocation struct {
603
615
  Ref *string `json:"ref,omitempty"`
604
616
  }
605
617
 
606
- // An intentional change to a requirement's compliance status (waiver or attestation).
607
- // Status overrides change the effectiveStatus of the requirement. All status overrides must
608
- // have an expiration date to enforce periodic review.
618
+ // An intentional change to a requirement's compliance status and/or impact score. At least
619
+ // one of status or impact must be set. Overrides change the effectiveStatus or impact of
620
+ // the requirement. All overrides must have an expiration date to enforce periodic review.
609
621
  type StatusOverride struct {
610
- // Timestamp when this status override was applied. ISO 8601 format.
611
- AppliedAt time.Time `json:"appliedAt"`
612
- // Identity of who applied this status override. For simple cases, use type 'simple' with
613
- // just an identifier.
614
- AppliedBy Identity `json:"appliedBy"`
615
- // Supporting evidence for this status override, such as screenshots demonstrating manual
616
- // verification for attestations.
617
- Evidence []Evidence `json:"evidence,omitempty"`
618
- // Timestamp when this status override expires and must be reviewed/renewed. REQUIRED - no
619
- // permanent status overrides allowed. ISO 8601 format.
620
- ExpiresAt time.Time `json:"expiresAt"`
621
- // SHA-256 checksum of the previous amendment in chronological order. Creates a
622
- // tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
623
- // on a requirement.
624
- PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
625
- // Explanation for why this status override was applied.
626
- Reason string `json:"reason"`
627
- // Optional digital signature for enhanced trust and non-repudiation. Supports hardware
628
- // security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
629
- // methods.
630
- Signature *Signature `json:"signature,omitempty"`
631
- // The new status this override sets for the requirement. This intentionally changes the
632
- // compliance status.
633
- Status ResultStatus `json:"status"`
634
- // The type of status override applied to this requirement.
635
- Type OverrideType `json:"type"`
622
+ // Timestamp when this override was applied. ISO 8601 format.
623
+ AppliedAt time.Time `json:"appliedAt"`
624
+ // Identity of who applied this override. For simple cases, use type 'simple' with just an
625
+ // identifier.
626
+ AppliedBy Identity `json:"appliedBy"`
627
+ // Supporting evidence for this override, such as screenshots demonstrating manual
628
+ // verification for attestations.
629
+ Evidence []Evidence `json:"evidence,omitempty"`
630
+ // Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no
631
+ // permanent overrides allowed. ISO 8601 format.
632
+ ExpiresAt time.Time `json:"expiresAt"`
633
+ // Override to the requirement's impact score. At least one of status or impact must be set.
634
+ Impact *ImpactOverride `json:"impact,omitempty"`
635
+ // SHA-256 checksum of the previous amendment in chronological order. Creates a
636
+ // tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
637
+ // on a requirement.
638
+ PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
639
+ // Explanation for why this override was applied.
640
+ Reason string `json:"reason"`
641
+ // Optional digital signature for enhanced trust and non-repudiation. Supports hardware
642
+ // security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
643
+ // methods.
644
+ Signature *Signature `json:"signature,omitempty"`
645
+ // The new status this override sets for the requirement. Optional when only impact is being
646
+ // overridden.
647
+ Status *ResultStatus `json:"status,omitempty"`
648
+ // The type of override applied to this requirement.
649
+ Type OverrideType `json:"type"`
650
+ }
651
+
652
+ // Override to the requirement's impact score. At least one of status or impact must be
653
+ // set.
654
+ //
655
+ // An override to the requirement's impact score. The prior impact is the original result
656
+ // value or the preceding override in the chain.
657
+ type ImpactOverride struct {
658
+ // The overridden impact score (0.0–1.0).
659
+ Value float64 `json:"value"`
636
660
  }
637
661
 
638
662
  // A supported platform target. Example: the platform name being 'ubuntu'.
@@ -1514,7 +1538,7 @@ type Schedule struct {
1514
1538
  StartDate *time.Time `json:"startDate,omitempty"`
1515
1539
  }
1516
1540
 
1517
- // Waivers, attestations, exceptions, and POA&Ms that modify requirement compliance status.
1541
+ // Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
1518
1542
  // Amendments are standalone documents that can be applied to results via merge operations.
1519
1543
  type HDFAmendments struct {
1520
1544
  // Unique identifier for this amendments document. Useful for cross-referencing when
@@ -1536,7 +1560,7 @@ type HDFAmendments struct {
1536
1560
  Labels map[string]string `json:"labels,omitempty"`
1537
1561
  // Human-readable name for this amendments document. Example: 'Portal Q1 2026 Waivers'.
1538
1562
  Name string `json:"name"`
1539
- // The set of amendments (waivers, attestations, exceptions, POA&Ms).
1563
+ // The set of amendments (waivers, attestations, POA&Ms, and other overrides).
1540
1564
  Overrides []StandaloneOverride `json:"overrides"`
1541
1565
  // Document-level digital signature covering all amendments.
1542
1566
  Signature *Signature `json:"signature,omitempty"`
@@ -1546,46 +1570,47 @@ type HDFAmendments struct {
1546
1570
  Version *string `json:"version,omitempty"`
1547
1571
  }
1548
1572
 
1549
- // A standalone amendment that modifies a requirement's compliance status. Extends the
1550
- // inline Status_Override concept with requirementId and baselineRef for use outside of
1551
- // results documents.
1573
+ // A standalone amendment that modifies a requirement's compliance status and/or impact
1574
+ // score. At least one of status or impact must be set. Extends the inline Override concept
1575
+ // with requirementId and baselineRef for use outside of results documents.
1552
1576
  type StandaloneOverride struct {
1553
- // When this amendment was applied. ISO 8601 format.
1554
- AppliedAt time.Time `json:"appliedAt"`
1555
- // Identity of who applied this amendment.
1556
- AppliedBy Identity `json:"appliedBy"`
1557
- // Name of the baseline containing the requirement. Required when the system has multiple
1558
- // baselines with potentially overlapping requirement IDs.
1559
- BaselineRef *string `json:"baselineRef,omitempty"`
1560
- // componentId of the component this amendment is scoped to. When set, the amendment only
1561
- // applies to the specified component. When omitted, the amendment applies system-wide.
1562
- ComponentRef *string `json:"componentRef,omitempty"`
1563
- // Supporting evidence (screenshots, logs, URLs, documents).
1564
- Evidence []Evidence `json:"evidence,omitempty"`
1565
- // When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
1566
- // format.
1567
- ExpiresAt time.Time `json:"expiresAt"`
1568
- // componentId of the local component that provides this control. Set when the provider is
1569
- // in the same system. Omit for external or cross-system providers; the reason field
1570
- // explains the source. Primarily used with type 'inherited'.
1571
- InheritedFrom *string `json:"inheritedFrom,omitempty"`
1572
- // Remediation milestones (primarily for POA&M type amendments).
1573
- Milestones []Milestone `json:"milestones,omitempty"`
1574
- // Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
1575
- // for the first amendment.
1576
- PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
1577
- // Justification for this amendment.
1578
- Reason string `json:"reason"`
1579
- // The ID of the requirement being amended. Must match a requirement ID in the referenced
1580
- // baseline.
1581
- RequirementID string `json:"requirementId"`
1582
- // Digital signature for non-repudiation.
1583
- Signature *Signature `json:"signature,omitempty"`
1584
- // The new status this amendment sets. For POA&Ms, this is the current status (POA&Ms track
1585
- // work, they don't change status).
1586
- Status ResultStatus `json:"status"`
1587
- // The type of amendment.
1588
- Type OverrideType `json:"type"`
1577
+ // When this amendment was applied. ISO 8601 format.
1578
+ AppliedAt time.Time `json:"appliedAt"`
1579
+ // Identity of who applied this amendment.
1580
+ AppliedBy Identity `json:"appliedBy"`
1581
+ // Name of the baseline containing the requirement. Required when the system has multiple
1582
+ // baselines with potentially overlapping requirement IDs.
1583
+ BaselineRef *string `json:"baselineRef,omitempty"`
1584
+ // componentId of the component this amendment is scoped to. When set, the amendment only
1585
+ // applies to the specified component. When omitted, the amendment applies system-wide.
1586
+ ComponentRef *string `json:"componentRef,omitempty"`
1587
+ // Supporting evidence (screenshots, logs, URLs, documents).
1588
+ Evidence []Evidence `json:"evidence,omitempty"`
1589
+ // When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
1590
+ // format.
1591
+ ExpiresAt time.Time `json:"expiresAt"`
1592
+ // Override to the requirement's impact score. At least one of status or impact must be set.
1593
+ Impact *ImpactOverride `json:"impact,omitempty"`
1594
+ // componentId of the local component that provides this control. Set when the provider is
1595
+ // in the same system. Omit for external or cross-system providers; the reason field
1596
+ // explains the source. Primarily used with type 'inherited'.
1597
+ InheritedFrom *string `json:"inheritedFrom,omitempty"`
1598
+ // Remediation milestones (primarily for POA&M type amendments).
1599
+ Milestones []Milestone `json:"milestones,omitempty"`
1600
+ // Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
1601
+ // for the first amendment.
1602
+ PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
1603
+ // Justification for this amendment.
1604
+ Reason string `json:"reason"`
1605
+ // The ID of the requirement being amended. Must match a requirement ID in the referenced
1606
+ // baseline.
1607
+ RequirementID string `json:"requirementId"`
1608
+ // Digital signature for non-repudiation.
1609
+ Signature *Signature `json:"signature,omitempty"`
1610
+ // The new status this amendment sets. Optional when only impact is being overridden.
1611
+ Status *ResultStatus `json:"status,omitempty"`
1612
+ // The type of amendment.
1613
+ Type OverrideType `json:"type"`
1589
1614
  }
1590
1615
 
1591
1616
  // Bundles references to all HDF documents for audit, authorization, and compliance review.
@@ -1715,8 +1740,44 @@ const (
1715
1740
  Sha512 HashAlgorithm = "sha512"
1716
1741
  )
1717
1742
 
1718
- // The current effective status of this requirement after applying the most recent
1719
- // non-expired override, or computed from results if no overrides exist.
1743
+ // The type of the most recent non-expired override or POAM governing this requirement.
1744
+ // Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
1745
+ // riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
1746
+ // POAMs apply.
1747
+ //
1748
+ // The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
1749
+ // accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
1750
+ // remediation tracked (no status change). 'inherited': control provided by another
1751
+ // component or system. 'falsePositive': scanner incorrectly identified a finding — for
1752
+ // compliance scans (STIG, CIS), the check actually passes, so status is typically set to
1753
+ // 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
1754
+ // this system, so status is typically set to 'notApplicable'. The disposition field on the
1755
+ // requirement distinguishes false positives from genuinely not-applicable findings.
1756
+ // 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
1757
+ // Adjustment); does not change pass/fail status, only impact via the impact field.
1758
+ // 'operationalRequirement': deviation required by operational constraints (FedRAMP
1759
+ // Operational Requirement); the finding cannot be remediated because the system requires
1760
+ // the affected functionality. Remains an open risk. Migration note: 'exception' was removed
1761
+ // in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
1762
+ //
1763
+ // The type of override applied to this requirement.
1764
+ //
1765
+ // The type of amendment.
1766
+ type OverrideType string
1767
+
1768
+ const (
1769
+ Attestation OverrideType = "attestation"
1770
+ FalsePositive OverrideType = "falsePositive"
1771
+ Inherited OverrideType = "inherited"
1772
+ OperationalRequirement OverrideType = "operationalRequirement"
1773
+ OverrideTypeWaiver OverrideType = "waiver"
1774
+ Poam OverrideType = "poam"
1775
+ RiskAdjustment OverrideType = "riskAdjustment"
1776
+ )
1777
+
1778
+ // The current effective compliance status of this requirement after applying the most
1779
+ // recent non-expired override with a status field, or computed from results (worst-wins) if
1780
+ // no status-bearing overrides exist.
1720
1781
  //
1721
1782
  // The status of an individual test result. 'notApplicable' indicates the requirement does
1722
1783
  // not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
@@ -1724,11 +1785,10 @@ const (
1724
1785
  //
1725
1786
  // The status of this test within the requirement. Example: 'failed'.
1726
1787
  //
1727
- // The new status this override sets for the requirement. This intentionally changes the
1728
- // compliance status.
1788
+ // The new status this override sets for the requirement. Optional when only impact is being
1789
+ // overridden.
1729
1790
  //
1730
- // The new status this amendment sets. For POA&Ms, this is the current status (POA&Ms track
1731
- // work, they don't change status).
1791
+ // The new status this amendment sets. Optional when only impact is being overridden.
1732
1792
  type ResultStatus string
1733
1793
 
1734
1794
  const (
@@ -1775,12 +1835,14 @@ const (
1775
1835
 
1776
1836
  // The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
1777
1837
  // compensating controls. 'riskAcceptance' documents decision to accept risk.
1838
+ // 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
1778
1839
  type PoamType string
1779
1840
 
1780
1841
  const (
1781
- Mitigation PoamType = "mitigation"
1782
- RiskAcceptance PoamType = "riskAcceptance"
1783
- TypeRemediation PoamType = "remediation"
1842
+ Mitigation PoamType = "mitigation"
1843
+ RiskAcceptance PoamType = "riskAcceptance"
1844
+ TypeRemediation PoamType = "remediation"
1845
+ VendorDependency PoamType = "vendorDependency"
1784
1846
  )
1785
1847
 
1786
1848
  // Explicit severity rating. Typically derived from impact score but provided explicitly for
@@ -1797,24 +1859,6 @@ const (
1797
1859
  SeverityLow Severity = "low"
1798
1860
  )
1799
1861
 
1800
- // The type of status override applied to this requirement.
1801
- //
1802
- // The type of amendment. 'waiver': risk accepted (AO). 'attestation': manually verified
1803
- // (assessor). 'exception': not applicable (system owner + AO). 'poam': remediation tracked
1804
- // (no status change). 'inherited': control provided by another component or system
1805
- // (overrides to notApplicable/passed).
1806
- //
1807
- // The type of amendment.
1808
- type OverrideType string
1809
-
1810
- const (
1811
- Attestation OverrideType = "attestation"
1812
- Exception OverrideType = "exception"
1813
- Inherited OverrideType = "inherited"
1814
- OverrideTypeWaiver OverrideType = "waiver"
1815
- Poam OverrideType = "poam"
1816
- )
1817
-
1818
1862
  type CloudProvider string
1819
1863
 
1820
1864
  const (