Skip to content

Commit e1fc15b

Browse files
gregsdennisjdesrosiers
authored andcommitted
lint process
1 parent 9ed207f commit e1fc15b

File tree

1 file changed

+112
-47
lines changed

1 file changed

+112
-47
lines changed

PROCESS.md

+112-47
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
## Purpose
44

5-
This document describes the development and publication process for the JSON Schema specifications contained within this repository.
5+
This document describes the development and publication process for the JSON
6+
Schema specifications contained within this repository.
67

78
- [JSON Schema Core](./jsonschema-core.md)
89
- [JSON Schema Validation](./jsonschema-validation.md)
@@ -11,27 +12,41 @@ This document describes the development and publication process for the JSON Sch
1112

1213
### Defined Behavior
1314

14-
Some behaviors within JSON Schema may be explicitly or implicitly undefined by the specifications for various reasons. How to handle these behaviors is generally left to implementations.
15+
Some behaviors within JSON Schema may be explicitly or implicitly undefined by
16+
the specifications for various reasons. How to handle these behaviors is
17+
generally left to implementations.
1518

16-
A defined behavior is one that is fully and unambiguously defined by the specifications.
19+
A defined behavior is one that is fully and unambiguously defined by the
20+
specifications.
1721

18-
An undefined behavior is said to have an "indeterminate" validation result since implementations may resolve the behavior in different ways.
22+
An undefined behavior is said to have an "indeterminate" validation result since
23+
implementations may resolve the behavior in different ways.
1924

2025
### Stability and Breaking Changes
2126

22-
Stability is defined using the level of compatibility between sequential releases. If all schemas which are written to one release produce the same defined behavior under the following release, then those releases are compatible, and the specification is said to be stable between them.
27+
Stability is defined using the level of compatibility between sequential
28+
releases. If all schemas which are written to one release produce the same
29+
defined behavior under the following release, then those releases are
30+
compatible, and the specification is said to be stable between them.
2331

24-
If an existing schema under the new release exhibits defined behavior that is contrary to defined behavior under the previous release, the new release is said to contain breaking changes and the specification is unstable between those releases.
32+
If an existing schema under the new release exhibits defined behavior that is
33+
contrary to defined behavior under the previous release, the new release is said
34+
to contain breaking changes and the specification is unstable between those
35+
releases.
2536

26-
If a new release fully defines a previously undefined (or under-defined) behavior, the new release is still considered compatible, even if it contradicts the decision of any particular implementation.
37+
If a new release fully defines a previously undefined (or under-defined)
38+
behavior, the new release is still considered compatible, even if it contradicts
39+
the decision of any particular implementation.
2740

28-
For reference, this table shows the validation results of a hypothetical schema and instance across two consecutive releases to illustrate the compatibility of those releases:
41+
For reference, this table shows the validation results of a hypothetical schema
42+
and instance across two consecutive releases to illustrate the compatibility of
43+
those releases:
2944

30-
| _Next_ ➡️<br>⬇️ _Current_ | pass | fail | indeterminate |
31-
|:---:|:---:|:---:|:---:|
32-
| **pass** ||| |
33-
| **fail** ||| |
34-
| **indeterminate** ||| |
45+
| *Next* ➡️<br>⬇️ *Current* | pass | fail | indeterminate |
46+
|:-----------------------:|:----:|:----:|:-------------:|
47+
| **pass** ||| |
48+
| **fail** ||| |
49+
| **indeterminate** ||| |
3550

3651
### Release
3752

@@ -43,30 +58,40 @@ Consecutive releases which maintain compatibility with each other comprise a ver
4358

4459
## Release and Version
4560

46-
The JSON Schema specification will aim to publish annually on or about the First of January each year. Releases are identified by the year they are published.
61+
The JSON Schema specification will aim to publish annually on or about the First
62+
of January each year. Releases are identified by the year they are published.
4763

48-
When a new release contains breaking changes, that release begins a new version of JSON Schema.
64+
When a new release contains breaking changes, that release begins a new version
65+
of JSON Schema.
4966

50-
The version will be identified as an integer, starting with `1` and incrementing as needed.
67+
The version will be identified as an integer, starting with `1` and incrementing
68+
as needed.
5169

52-
Stability will be prioritized when making changes to the specification. Breaking changes are undesired and should be avoided when possible.
70+
Stability will be prioritized when making changes to the specification. Breaking
71+
changes are undesired and should be avoided when possible.
5372

5473
## Publication
5574

5675
### Specifications
5776

58-
The specifications will be published on the JSON Schema website, https://json-schema.org/, using a path comprised of the version, year, and document name. For example,
77+
The specifications will be published on the JSON Schema website,
78+
<https://json-schema.org/>, using a path comprised of the version, year, and
79+
document name. For example,
5980

6081
```
6182
https://json-schema.org/1/2025/core.html
6283
https://json-schema.org/1/2025/validation.html
6384
```
6485

65-
Once a specification document has been published, neither the document (save for minor errata such as spelling mistakes) nor its publication URL may change. If the TSC elects to alter the above URL scheme, the new scheme only applies to future publications and are not retroactive.
86+
Once a specification document has been published, neither the document (save for
87+
minor errata such as spelling mistakes) nor its publication URL may change. If
88+
the TSC elects to alter the above URL scheme, the new scheme only applies to
89+
future publications and are not retroactive.
6690

6791
### Meta-schemas
6892

69-
A release meta-schema will be published under the same path using `schema.json` as the file name.
93+
A release meta-schema will be published under the same path using `schema.json`
94+
as the file name.
7095

7196
```
7297
https://json-schema.org/1/2025/schema.json
@@ -78,20 +103,25 @@ The website will also be configured to:
78103
```
79104
https://json-schema.org/1/2025/
80105
```
81-
- serve the meta-schema for the latest release in a version from its version folder
106+
- serve the meta-schema for the latest release in a version from its version
107+
folder
82108
```
83109
https://json-schema.org/1/
84110
```
85111

86-
The latest-release meta-schemas will be updated with proposals as indicated by the [Proposal section](#proposal) of this document.
112+
The latest-release meta-schemas will be updated with proposals as indicated by
113+
the [Proposal section](#proposal) of this document.
114+
115+
> [!IMPORTANT]
116+
> These are only publication and availability URLs. The specification will
117+
> define the `$id` values for the meta-schemas.
87118
88-
```diff
89-
@@ These are only publication and availability URLs. The specification will define the `$id` values for the meta-schemas. @@
90-
```
91119

92120
## Feature Life Cycle
93121

94-
New features will progress through a sequence of stages before being added to the specification, and existing stable features must be formally deprecated before being removed. The stages of the life cycle, in order, are:
122+
New features will progress through a sequence of stages before being added to
123+
the specification, and existing stable features must be formally deprecated
124+
before being removed. The stages of the life cycle, in order, are:
95125

96126
- Concept
97127
- Proposal
@@ -117,48 +147,72 @@ stateDiagram-v2
117147

118148
### Concept
119149

120-
The feature life cycle begins with an idea expressed in a GitHub issue in this repository. Initial discussion may occur in Slack or another space, but the life cycle does not formally begin until a GitHub issue is created.
150+
The feature life cycle begins with an idea expressed in a GitHub issue in this
151+
repository. Initial discussion may occur in Slack or another space, but the life
152+
cycle does not formally begin until a GitHub issue is created.
121153

122-
The discussion should cover how the feature could work, use cases, syntax, alternatives, whether it’s a breaking change, etc., with a goal of deciding rough requirements.
154+
The discussion should cover how the feature could work, use cases, syntax,
155+
alternatives, whether it’s a breaking change, etc., with a goal of deciding
156+
rough requirements.
123157

124-
During this stage, members of the Core Team will implement private prototypes of the ideas expressed in the issue to get a feel for how it integrates with the stable features. Questions to address may include:
158+
During this stage, members of the Core Team will implement private prototypes of
159+
the ideas expressed in the issue to get a feel for how it integrates with the
160+
stable features. Questions to address may include:
125161

126-
- Does the idea operate within the confines of existing JSON Schema evaluation processes, or does it define something new?
127-
- Is the idea merely a shortcut for some existing functionality (syntactic sugar), or does it solve a previously unsolvable problem?
162+
- Does the idea operate within the confines of existing JSON Schema evaluation
163+
processes, or does it define something new?
164+
- Is the idea merely a shortcut for some existing functionality (syntactic
165+
sugar), or does it solve a previously unsolvable problem?
128166
- What is the expected complexity for implementing the feature?
129167

130-
At least two (2) Core Team members must have implemented prototypes before the concept can continue to the formal proposal process.
168+
At least two (2) Core Team members must have implemented prototypes before the
169+
concept can continue to the formal proposal process.
131170

132-
### Proposal
171+
### Proposal {#proposal}
133172

134-
Once a rough consensus for the idea has been reached, a formal proposal will be written, separate from the specification, with the goal of precisely defining specification changes.
173+
Once a rough consensus for the idea has been reached, a formal proposal will be
174+
written, separate from the specification, with the goal of precisely defining
175+
specification changes.
135176

136-
The proposal will use the [Proposal Template](./proposals/proposal-template.md) and be stored in this repository's `proposals` folder.
177+
The proposal will use the [Proposal Template](./proposals/proposal-template.md)
178+
and be stored in this repository's `proposals` folder.
137179

138-
Additionally, a draft ADR will be included using the file name of the proposal document with an `-adr` suffix: `{proposal-file-name}-adr.md`. This ADR will include additional information from the "Concept" discussion.
180+
Additionally, a draft ADR will be included using the file name of the proposal
181+
document with an `-adr` suffix: `{proposal-file-name}-adr.md`. This ADR will
182+
include additional information from the "Concept" discussion.
139183

140184
Proposed keywords will be added to the appropriate vocabulary meta-schemas in:
141185

142186
- latest published release and
143187
- the `main` branch of this repository.
144188

145-
The subschema for the proposed keyword will contain only a `$comment` keyword indicating that the feature is experimental and containing a link to the proposal document. Aside from the `$comment` keyword, the subschema will be empty.
189+
The subschema for the proposed keyword will contain only a `$comment` keyword
190+
indicating that the feature is experimental and containing a link to the
191+
proposal document. Aside from the `$comment` keyword, the subschema will be
192+
empty.
146193

147-
_This is done so that a proposed keyword is allowed but not validated as its syntax may change during the proposal/experimentation process. It also permits different implementations to support different variations of each proposal separately throughout this process. It will be up to the implementation to validate these keywords in accordance with their support._
194+
> [!NOTE]
195+
> This is done so that a proposed keyword is allowed but not validated as its
196+
> syntax may change during the proposal/experimentation process. It also permits
197+
> different implementations to support different variations of each proposal
198+
> separately throughout this process. It will be up to the implementation to
199+
> validate these keywords in accordance with their support.
148200
149201
Tests for the proposal are added to the JSON Schema Test Suite.
150202

151203
```diff
152204
@@ TODO: Identify a location within the test suite for proposals. @@
153205
```
154206

155-
Once an initial draft of the proposal has been completed and published, the feature moves into Experimentation.
207+
Once an initial draft of the proposal has been completed and published, the
208+
feature moves into Experimentation.
156209

157210
### Experimentation
158211

159212
Implementations may begin to support the new feature.
160213

161-
Feedback from implementers and users are expected to result in refinements to the proposal, which will then be updated in the implementations.
214+
Feedback from implementers and users are expected to result in refinements to
215+
the proposal, which will then be updated in the implementations.
162216

163217
Breaking changes to a proposed feature MAY occur, but are highly discouraged.
164218

@@ -174,28 +228,39 @@ In order to proceed to the next stage ([Stable](#stable)):
174228

175229
Experimental features are not considered to be interoperable across implementations.
176230

177-
If a proposal cannot advance to the next stage, it may be removed. The proposal document is moved to an `archive` subfolder, the keyword is removed from the meta-schemas, and any tests are moved to an `archive` subfolder. The removal of a feature which has not reached the stable state is not considered a breaking change.
231+
If a proposal cannot advance to the next stage, it may be removed. The proposal
232+
document is moved to an `archive` subfolder, the keyword is removed from the
233+
meta-schemas, and any tests are moved to an `archive` subfolder. The removal of
234+
a feature which has not reached the stable state is not considered a breaking
235+
change.
178236

179-
### Stable
237+
### Stable {#stable}
180238

181-
The feature is incorporated into the specification in the `main` branch as specified by the proposal document, and the feature will be required as of the next release.
239+
The feature is incorporated into the specification in the `main` branch as
240+
specified by the proposal document, and the feature will be required as of the
241+
next release.
182242

183243
The draft ADR is completed, dated, and moved to the `adr` folder.
184244

185-
The appropriate vocabulary meta-schema in the `main` branch is updated to include a subschema that validates the feature's syntax requirements. This will be made available with the next release.
245+
The appropriate vocabulary meta-schema in the `main` branch is updated to
246+
include a subschema that validates the feature's syntax requirements. This will
247+
be made available with the next release.
186248

187-
Upon publication of the new release, the meta-schema for the lapsed release will have the keyword removed.
249+
Upon publication of the new release, the meta-schema for the lapsed release will
250+
have the keyword removed.
188251

189252
The appropriate tests are incorporated into the main suite.
190253

191254
### Deprecated
192255

193-
If a feature is no longer useful, e.g. it has been replaced, it may be deprecated by indicating it as such in the specification.
256+
If a feature is no longer useful, e.g. it has been replaced, it may be
257+
deprecated by indicating it as such in the specification.
194258

195259
Implementations must support deprecated features.
196260

197261
### Removed
198262

199-
A feature must have been published as deprecated for at least one release before it can be considered for removal.
263+
A feature must have been published as deprecated for at least one release before
264+
it can be considered for removal.
200265

201266
Feature removal is considered a breaking change.

0 commit comments

Comments
 (0)