Spec Evolution #464
Replies: 4 comments 7 replies
-
My preference is a combination of (2) and (3). A feature is developed in its entirety in an external specification. Once the feature is finalized, then it can be moved into the main spec. At that point, it follows the normal deprecation procedure. It doesn't make sense to me to actively develop features in a spec that we claim to be stable. |
Beta Was this translation helpful? Give feedback.
-
I think a "Staged Stability" process is the best way to go. I think "Deprecate and Replace" is too rigid. It assumes we're going to get it right the first time. Unless the feature is very simple, it's almost certainly going to go through some iteration to get it right. Dynamic References are a prime example of this. I think if we use this approach exclusively, we'll end up with a graveyard of deprecated keywords as some of the new features get worked out. Using this approach will also make it take longer for us to release new features and the feature will not be as good as they could be. We'll take longer thinking (and arguing) about the best way for something to work and when we do release it, we're still just guessing we'll likely get some things wrong. Complex features like the Vocabulary System might never get released because we'll never feel confident that it's "done" enough to be released. I think "External Spec" is good, but too open and optional. As we've seen with vocabularies, implementations never support vocabularies that the implementer didn't define. I think we need stronger requirements for implementations to provide support for new features or nothing will ever get added. At best, we have a bunch of implementations with different supported feature sets. The "Staged Stability" process I have in mind addresses the problems I have with each of those approaches. I think it allows us to move fast, get it right, and ensure interoperability. Loosely, this is what I had in mind.
Edit: I don't know why some of those check marks are rendering differently than others. They aren't intended to have different meanings. |
Beta Was this translation helpful? Give feedback.
-
We had a discussion on this topic at the last OCWM and here's summary of what we decided. We decided that we will start off with developing new features external to the main spec documents. It will be optional, but strongly encouraged that implementations support these features. We will use community engagement and bowtie to encourage implementations to implement these features. We all agreed that these implementations provide important feedback that we need to make sure we get things right before declaring the feature stable. Once a feature is stable, it must be deprecated before it can be removed. What criteria it takes to be declared stable will be the topic of a different discussion. There remains concern that implementers will shy away from implementing anything that isn't stable if it's not required to do so. If community engagement fails to get the results we hope for, we can pivot to being more strict about what implementations must support. It's easier to go from less strict to more strict than it would be to go the other way around. Any features that are currently considered unstable will be moved out of the spec and into separate documents. What current features are considered unstable/experimental will be a topic of another discussion. |
Beta Was this translation helpful? Give feedback.
-
This has been incorporated into https://github.com/orgs/json-schema-org/discussions/671. Closing for now. |
Beta Was this translation helpful? Give feedback.
-
Let's get on the same page about how the spec will evolve. We've previously agreed that spec releases will be compatible. In the rare occasion that an incompatible change is necessary, it must be deprecated for a reasonable amount of time before it can be removed. Other than the constraint that new features must be added in a compatible way, how do we want to introduce new features into JSON Schema?
Here are some of the options that have been put forward.
These options aren't mutually exclusive. Parts of each could be adopted. For example, we could choose a "Staged Stability" approach where the proposal starts out as an "External Spec", then moves into the spec as an explicitly "experimental" feature, and finally moves to stable status. Then once in stable status, it needs to follow the "Deprecate and Replace" approach.
Scope: I don't think we need to decide on details in this discussion. If possible, I'd like to agree on a general direction and work out the details later. However, getting into some of the details is often necessary to decide which direction is best.
Disclaimer: I did my best to accurately represent the approaches that have been proposed in various places. If I have misrepresented your idea or you have another idea, please let us know.
Beta Was this translation helpful? Give feedback.
All reactions