-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Do we need a deprecated status for Decision Points? #388
Comments
What would it look like for the code to issue a warning if a decision tree is using a deprecated or superseded version? |
I hadn't been thinking of UI, just of representing status in the data object. So for example: SSVC/src/ssvc/decision_points/automatable.py Lines 36 to 45 in e5567ee
might get an extra line: deprecated = False, which would then flow downstream into the JSON object and the documentation. If we wanted to support more than just a binary deprecated status, we might consider something like a Getting back to the UI question: We don't really have any sort of UI for SSVC aside from the policy generator tool etc. And we could decide separately whether they need to have any indication that one of the decision points they're using is deprecated. We can do that in this issue and address it in a single PR if appropriate, of course. I'm just noting that the questions:
are distinct questions that could be answered independently. I've also not thought about whether we need to do something similar with outcomes as well -- presumably whatever logic argues in favor of it with decision points might also apply to outcome sets. But outcomes seem to be more "shelf-stable", so maybe that's also ok to wait and see because YAGNI. |
OK, thanks. Good point we don't need to handle UI questions here. Agree. Is In that sense, I might actually argue for no flag for |
I'll probably need to extend this comment later, but the more I think about it we might want to institute a small decision point lifecycle. ---
title: Decision Point Lifecycle (3-state)
---
stateDiagram-v2
direction LR
[*] --> Proposed
Proposed --> Supported
Supported --> Deprecated
---
title: Decision Point Lifecycle (4-state)
---
stateDiagram-v2
direction LR
[*] --> Proposed
Proposed --> Supported
Supported --> Deprecated
Supported --> Superseded
Superseded --> Deprecated
I'm not committed to the state names, consider them placeholders for now. We might settle on other names later. My rationale for this is
3 states or 4?I thought about whether On the one hand: We could potentially track the state using the 3-state model above, and have a separate optional field like On the other hand: Using a separate Additional thoughtsA future process might emerge in which we periodically review the status of each extant decision point to decide whether it needs to move between these states. I think this could turn into a decent mechanism for managing the decision point vocabulary over time. |
Thanks!
I might propose these are "informational". I'm trying to distinguish between "things you can get changed by creating an issue in this repository" (which I'd call proposed early on and then supported later) and "things we have copied from other documentation and we are not at liberty to change, go talk to the relevant documentation owner". CVSS would be this latter. The SIG makes changes to CVSS, we can just represent their outputs for convenience in this repository.
This seems like the more intuitive option to me. |
I get your point that we are not the arbiters of CVSS vector elements, and we are in agreement on that. I'm not clear on whether you're
An example of the latter would be: We have a decision point for CVSS Confidentiality Impact in https://github.com/CERTCC/SSVC/blob/main/src/ssvc/decision_points/cvss/confidentiality_impact.py If someone suggests we change the wording of SSVC/src/ssvc/decision_points/cvss/confidentiality_impact.py Lines 110 to 117 in ad427b3
we would have to redirect them to the FIRST CVSS SIG because the description text came from the CVSS v4 spec. However, if they were noting that our text in those lines was out-of-sync with a more recent version of CVSS, we'd still respond according to the status of the decision point. If it was deprecated, we could decline the change. If it were supported or proposed, we would likely need to make an adjustment. I don't think informational rises to the level of being a lifecycle state. I think it's just a sort of annotation on a decision point that "We modeled this from somewhere else, and our intent in supporting it is to maintain synchronization with the source semantics. If you want to change the semantics, go to the authoritative source. If you want to help us keep our modeled implementation in sync with that source, and it's not deprecated, we'll be happy to consider your request." |
I was thinking this first one. Part of this is we should only implement stuff in SSVC as informational that is finalized. If the CVSS SIG comes out with 4.1 and it changes some text, people can make a PR or an issue that creates any new informational points to add them to our library. I get there is a distinction here in that we had to do some metric value version numbering for the CVSS metrics that is distinct from the CVSS versioning, as an exercise related to #322. But I wouldn't expect that to mean we are "supporting" those example metric version numbers. Is that a concern? Should we be doing that? it seems like a distraction to me. |
It seems to me that having different states implies having different service level expectations. What is the SLE distinction between "informational" and "supported" in this case? I guess I'm not clear on what "supported" means for that matter. Is it
Otherwise, it seems like for both "supported" and "informational":
What if we went with four states as follows: flowchart LR
subgraph supported
available
preferred
end
proposed --> available
proposed --> preferred
available --> preferred
preferred --> available
preferred --> deprecated
available --> deprecated
so most of the CVSS decision points land in available instead of preferred to start, but maybe some move up to preferred instead of reinventing or duplicating the vector elements. I expect CVSS v1 and v2 elements to be largely static for the forseeable future, but I also don't see us ever starting to use them either, so technically they're available which costs us approximately zero in carrying costs. We could even consider moving CVSSv4 Automatable and Value Density to preferred and our own versions to available with a There is a practical consideration over the long term insofar as if we have an externally-sourced element that is basically dormant in the world (thinking of CVSSv1 vector elements for example) for which there are no known active data sources, ---
title: Don't quote me on this
---
flowchart LR
experimental --> emerging
experimental --> exited
emerging --> core
emerging -->specialized
emerging --> declining
core --> specialized
specialized --> core
specialized --> declining
declining --> exited
core --> declining
I've kind of been thinking of a rough equivalence between:
|
Thanks for expanding this out. Here's my thoughts on the difference (using these labels for now, point taken we may rename them once we decide what the SLEs actually mean)
My thinking would be
For supported:
For informational:
I think it's worth distinguishing between these kinds of change making. I need to think more about these other ideas. Sorry, just wanted to do one idea at a time. |
That clarification helps.
Understood. I suppose while we're thinking about this kind of state machine, we should probably be working towards one that works for any of the formally-versioned things (Decision Points, Decision Point Groups, possibly future Outcomes, etc.) |
I'll actually recommend we do specific before we try to generalize. I guess there is no reason why we can't have informational outcome sets or groups. But the problem we have at hand is with decision points, not these other things. So I'm tempted to stick to solving the problem we actually have in front of us. Can you say a little more about how you expect "available" to be used in practice? |
I think they're largely synonymous in terms of support. The difference is that "available" could include things we created for ourselves (i.e., that maybe were "preferred" at some point) whereas given the above thread, "informational" would only be applicable to stuff that originated outside of SSVC to begin with. I don't know that "available" and "informational" are distinct states though. It's almost like the "informational" axis is kind of orthogonal to the "do we recommend using it" axis. Have to think about this some more maybe. |
Maybe we could simplify with a "supported --> available --> deprecated" workflow. And things that I've been thinking about as "informational" just enter directly into available status. Creation / proposal / ideation / experimentation by the SSVC community can make things that are started as "supported" when they are v1. I think we can already use the existing versioning regime to say some new idea is a v0.1 decision point with whatever name, and it doesn't become supported until the community decides it's stable enough to call it a v1.0. So that experimental phase definitely exists, but I don't know that it's a problem we need to solve with this status flag about deprecated / supported. I guess what you called 3-state in #388 (comment) I'm suggesting adding something between supported and depreciated but otherwise keeping it linear, and I guess adding a new entry point where things can come in directly as available if they are from another source. |
The discussion in #370 reminded me that ADR-006 contains the following line:
However, we currently have no mechanism to express this beyond noting in the documentation that a decision point has been deprecated, or superseded as in the case with Virulence evolving into Automatable.
So this issue is intended to lead to a decision of whether a documentation-level indication of deprecation is sufficient, or whether we need to reflect it in the data schema and corresponding object models.
The text was updated successfully, but these errors were encountered: