Skip to content

Commit 12a8a9a

Browse files
committed
Add PROCESS.md documenting the new SDLC
1 parent 47753d9 commit 12a8a9a

File tree

1 file changed

+163
-0
lines changed

1 file changed

+163
-0
lines changed

PROCESS.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# JSON Schema Specification Development Process
2+
This document formally defines the process used to evolve the JSON Schema
3+
specification as of the first stable release in 2023. It applies to the core
4+
specification and the specifications for any dialects and vocabularies
5+
maintained by the JSON Schema Org. It does not necessarily apply to everything
6+
the JSON Schema Org maintains. For example, media type registration follows the
7+
IETF process. Certain components used within JSON Schema, such as Relative JSON
8+
Pointer, may also follow a separate process.
9+
10+
## Canonical URLs
11+
There MUST be a stable canonical URL for referencing any specification that
12+
follows this process. If the spec is made available from any other URLs, they
13+
SHOULD redirect to the canonical URL. If the canonical URL is changed in the
14+
future, all previous canonical URLs MUST remain accessible as redirects to the
15+
current URL.
16+
17+
## Mutable Spec
18+
There is only one version of the specification and it can be updated at any time
19+
as long as those changes don't violate the compatibility rules identified by the
20+
stability model. Bug fixes, clarifications, and other non-functional spec
21+
updates can be merged at any time even for stable features. A change-log blog
22+
post SHOULD be prepared quarterly to give visibility to any changes that were
23+
merged in the last quarter.
24+
25+
## The Stability Model
26+
Every feature in the spec has a release status. It's either evolving, stable, or
27+
deprecated. Flags are used to show the status a feature is in. If a feature
28+
doesn't have a flag, it's considered stable. If it has a year flag (such as
29+
`2024`) that's the year the feature reached stability. The other flags indicate
30+
a feature that is not yet stable or is deprecated.
31+
32+
### Champions
33+
Any feature that is evolving SHOULD have a champion. The champion is responsible
34+
for shepherding the feature through the process to into stable status. The
35+
champion doesn't need to do all the work, they're just responsible for making
36+
sure the work gets done. The champion role MAY be shared by more than one
37+
person. An evolving feature without a champion SHOULD be removed from the spec.
38+
39+
### Proposals
40+
New features start out as proposals. Proposals are informal GitHub Issues or
41+
Discussions and can be submitted by anyone.
42+
43+
All proposals MUST be backward compatible with the current stable specification.
44+
Features that could be problematic for forward compatibility are highly
45+
discouraged, but may be considered if the feature is optional and disabled by
46+
default.
47+
48+
**Promotion Checklist:**
49+
[] Consensus among JSON Schema Org core contributors that the proposal is worth
50+
pursuing
51+
[] The proposal has a champion
52+
[] A PR for an entry for in the `STAGE-0` registry has been approved
53+
54+
### STAGE-0
55+
`STAGE-0` features are tracked in the `STAGE-0` Registry on the website. This
56+
registry lists all `STAGE-0` features. Each entry SHOULD include the following
57+
checklist as well as an informal description with at least one example and any
58+
relevant links.
59+
60+
This stage requires at least two implementations to implement the feature. The
61+
purpose of these implementations is to identify any potential implementation
62+
issues that might lead to low adoption such as difficulty of implementation or
63+
performance implications. Therefore, these implementations don't need to be
64+
publicly available or have real world use at this point.
65+
66+
**Promotion Checklist:**
67+
[] There is general consensus among the core contributors for adding the feature
68+
to the spec
69+
[] Tests are available in the test suite
70+
[] Two implementations have implemented the feature and pass the tests suite
71+
[] A blog post has been published introducing the feature
72+
[] A PR for the spec has been approved that completely specifies the feature and
73+
removes the feature from the `STAGE-0` registry.
74+
75+
### STAGE-1
76+
`STAGE-1` features are included to the specification, but flagged as `STAGE-1`
77+
and are not subject to the compatibility requirements of "stable" features. They
78+
can be added at any time as long as it meets all criteria for `STAGE-1` status.
79+
80+
At this stage, the feature should be seeing real world use. These features MAY
81+
change or be removed all together based on what we learn from real world usage,
82+
but anything more than small changes should be extremely rare. Any necessary
83+
feature experimentation and evolution should have be done in `STAGE-0`.
84+
85+
Implementers are encouraged to implement `STAGE-1` features, but are not
86+
expected to maintain support for previous versions if they change. Users who
87+
choose to use these features should be prepared for the possibility of changes
88+
and be willing to update their schemas if a change does occur.
89+
90+
A `STAGE-1` feature can be promoted to `STAGE-2` at any time. Ideally a
91+
feature should stay in `STAGE-1` for about one year, but may stay longer if we
92+
don't see it used enough in the wild.
93+
94+
**Promotion Checklist:**
95+
[] There is general consensus that the feature has been proven to be a good
96+
addition to JSON Schema and is unlikely to change.
97+
[] We see the feature being used successfully in the wild and not generating a
98+
lot of community support issues that could indicate a problem.
99+
100+
### STAGE-2
101+
`STAGE-2` features are in the last stages of becoming stable. Changes are
102+
unlikely, but backward incompatible changes are still allowed in extreme cases.
103+
Users can be reasonably sure that the feature won't change, but can't expect all
104+
implementations to support the feature yet.
105+
106+
`STAGE-2` is a staging area for features that are ready to be declared stable,
107+
but are waiting for the next release or don't yet have enough implementations.
108+
When we see the vast majority of actively maintained implementations support
109+
this feature, it will be promoted to stable in the next release. Implementers
110+
SHOULD support `STAGE-2` features so they aren't out-of-date when the next
111+
release happens.
112+
113+
Being in `STAGE-2` isn't a guarantee that a feature will be declared stable in
114+
the next release. If we don't see that the vast majority of actively maintained
115+
implementation have implemented the feature, it may stay in `STAGE-2` another
116+
year to allow implementations to catch up.
117+
118+
`STAGE-2` features can only be promoted to stable as part of a release.
119+
120+
**Promotion Checklist:**
121+
[] The vast majority of actively maintained implementations support the feature
122+
123+
### Stable
124+
Any part of the specification that doesn't have stability flag or has a year
125+
stability flag such as `2024` is considered stable. This flag indicates the year
126+
a feature was declared stable. Any changes to stable features MUST be backward
127+
compatible and not introduce problems for forward compatibility. Stable features
128+
are never removed, but may be deprecated.
129+
130+
### Deprecated
131+
Any feature in the specification that is flagged in the form `DEPRECATED-{YEAR}`
132+
is considered deprecated as of the year specified. Implementations SHOULD still
133+
support these features to maintain backward compatibility. Deprecated features
134+
will never be removed from the spec, but schema authors SHOULD migrate away from
135+
using them as implementations may begin dropping support for these features at
136+
some point.
137+
138+
A feature can only be deprecated as part of a release.
139+
140+
## Release Process
141+
Releases occur on Jan 1 every year. Each release is identified with the
142+
four-digit year of when the release occurred. Releases never introduce anything
143+
new. The only change should be updating `STAGE-2` flags to `{YEAR}` flags for
144+
the features that are promoted to stable that year, or adding adding deprecation
145+
flags for any features that are deprecated that year.
146+
147+
Implementations that express support for a particular release MUST support all
148+
features that are stable as of that release.
149+
150+
A snapshot of the spec will be taken of the stable parts of the spec and made
151+
available as a PDF on the website at.
152+
153+
## Meta-Schemas
154+
Meta-schemas associated with the specification(s) maintained under this process
155+
are subject to the same compatibility rules as the specification. They can be
156+
updated at any time, but changes MUST be backward compatible and allow for
157+
forward compatibility with future schemas.
158+
159+
Meta-schema URIs SHOULD not change once published, but if they do, the old URI
160+
MUST remain available and redirect to the new URI.
161+
162+
Meta-schemas are considered non-normative. It's sometimes not possible or not
163+
practical for the meta-schema to describe every constraint in the specification.

0 commit comments

Comments
 (0)