Removed Default Status. Adjusted Constraint on Absense of Part.#2222
Removed Default Status. Adjusted Constraint on Absense of Part.#2222brian-ruf wants to merge 3 commits intousnistgov:control-statusfrom
Conversation
…atus values beyond
There was a problem hiding this comment.
Pull request overview
Updates the OSCAL catalog metaschema constraints around control status handling, expanding which status values allow omitting a statement part and adjusting the documented allowed status values.
Changes:
- Expanded the
expectconstraint sostatementis not required for additionalstatusvalues (reserved/deprecated/superseded). - Removed
normalfrom the documentedstatusallowed-values enumeration.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -278,7 +278,7 @@ | |||
| </model> | |||
| <constraint> | |||
| <expect id="oscal-catalog-control-require-statement-when-not-withdrawn" target="." | |||
There was a problem hiding this comment.
The constraint id oscal-catalog-control-require-statement-when-not-withdrawn no longer matches the updated logic (it now also exempts reserved/deprecated/superseded). Consider renaming the id (and/or adding an inline note) so future maintainers don’t misinterpret what this expect is validating.
| <expect id="oscal-catalog-control-require-statement-when-not-withdrawn" target="." | |
| <!-- Require a statement part unless the control is in an exempt inactive lifecycle state. --> | |
| <expect id="oscal-catalog-control-require-statement-when-not-inactive" target="." |
There was a problem hiding this comment.
revised the label to better reflect the constraint revisions.
| <enum value="withdrawn">The control is no longer used. It may have been retired, incorporated into another control, or moved to a different control.</enum> | ||
| <enum value="normal">[Default] This control exists as intended.</enum> | ||
| <enum value="reserved">This is a placeholder for a future control.</enum> | ||
| <enum value="deprecated">This control will be withdrawn. The withdrawn timeline or milestone may be describe the remarks.</enum> |
There was a problem hiding this comment.
Grammar issue in the deprecated status description: “may be describe the remarks” is ungrammatical and should be rephrased (e.g., “may be described in the remarks”).
| <enum value="deprecated">This control will be withdrawn. The withdrawn timeline or milestone may be describe the remarks.</enum> | |
| <enum value="deprecated">This control will be withdrawn. The withdrawn timeline or milestone may be described in the remarks.</enum> |
There was a problem hiding this comment.
fixed the grammar issues
iMichaela
left a comment
There was a problem hiding this comment.
Please see inline comments.
| <expect id="oscal-catalog-control-require-statement-when-not-withdrawn" target="." | ||
| test="prop[@name='status']/@value=('withdrawn','Withdrawn') or part[@name='statement']"/> | ||
| <expect id="oscal-catalog-control-require-statement-when-appropriate" target="." | ||
| test="prop[@name='status']/@value=('withdrawn','Withdrawn', 'reserved', 'deprecated', 'superseded') or part[@name='statement']"/> |
There was a problem hiding this comment.
The suggested description of a superseded control reads: "This control has been superseded by the artifact indicated by one or more "superseded-by" links or as described in the remarks." If we allow for the control to be empty, then we also allow for the important superseded information to not exist. I disagree with this proposal that allows a superseded control to be empty because it is important to have which information is superseded.
This is also the case with a deprecated control. As long as the control is still used until it is withdrawn on date X, the information must exist to inform the user of the date when will be withdrawn and in the interim, the control content should be available for use.
Please remove deprecated and superseded from the ('withdrawn','Withdrawn', 'reserved', 'deprecated', 'superseded') list.
Please update then the id to: id="oscal-catalog-control-require-statement-when-not-withdrawn-or-reserved"
There was a problem hiding this comment.
@brian-ruf - Please let me know if you had a chance to review the comments and if you want to discuss them.
There was a problem hiding this comment.
I did not see your earlier comment earlier.
I respectfully disagree with you assertion.
The framework or baseline author* - not the NIST OSCAL Team - decides whether the content must remain present or may be absent in any given set of controls. NIST is free to impose that requirement on 800-53 controls, in an RMF-specific set of constraints; however, it is not fair for NIST to impose that restriction on other framework/baseline authors.
If that is the only way you will approve this, I will adjust the constraint, but I do so under protest.
There was a problem hiding this comment.
I did not see your earlier comment earlier.
I respectfully disagree with you assertion. The framework or baseline author* - not the NIST OSCAL Team - decides whether the content must remain present or may be absent in any given set of controls. NIST is free to impose that requirement on 800-53 controls, in an RMF-specific set of constraints; however, it is not fair for NIST to impose that restriction on other framework/baseline authors.
If that is the only way you will approve this, I will adjust the constraint, but I do so under protest.
@brian-ruf -- I might not have explained properly the concern I raised. The definition of "deprecated" and "superseded" controls imply that the information is still available. For a "deprecated" control which will be removed in the near future, but still usable at the current labeling time to not have a content is problematic. What would someone implement? I requested today for the OF members that generate or use catalogs other than 800-53, to provide their perspective.
This PR updates the usnistgov/control-status branch in PR #2202.
It removes the default value and adjusts an undocumented constraint to ensure controls with certain status values can be empty. This is identical to what is currently allowed for "withdrawn" controls and simply expands the rule to also cover "reserved", "deprecated" and "superseded" controls.
Committer Notes
{Please provide a brief description of what this PR accomplishes. Be sure to reference any issues addressed. If the PR is a work-in-progress submitted for early review, please include [WIP] at the beginning of the title or mark the PR as DRAFT.}
All Submissions:
By submitting a pull request, you are agreeing to provide this contribution under the CC0 1.0 Universal public domain dedication.
(For reviewers: The wiki has guidance on code review and overall issue review for completeness.)
Changes to Core Features: