Skip to content
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

Added migration page overview #1061

Draft
wants to merge 52 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
859a6f1
Added migration page overview
kwennB Oct 24, 2024
93bcaba
Update pages/specification/migration/_index.md
kwennB Oct 25, 2024
d4c8b24
Update pages/specification/migration/_index.md
kwennB Oct 25, 2024
8eb9721
Updated migration overview
kwennB Oct 28, 2024
75ee2a1
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
a967f66
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
b22b2ff
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
c5d352e
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
136ee2e
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
fa6391b
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
83536f1
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
dd364ba
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
dd1d4e7
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
33b69ab
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
9c583ce
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
5a4b8b3
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
24488f9
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
4e5a08d
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
d17e308
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
c5b1f87
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
95276a0
Update pages/specification/migration/_index.md
kwennB Oct 29, 2024
288e5d9
Update pages/specification/migration/_index.md
kwennB Oct 30, 2024
7199292
Update pages/specification/migration/_index.md
kwennB Oct 30, 2024
8cc36f0
Update pages/specification/migration/_index.md
kwennB Oct 30, 2024
45aecbc
Update pages/specification/migration/_index.md
kwennB Oct 30, 2024
65ba898
Update pages/specification/migration/_index.md
kwennB Oct 30, 2024
9891c6e
Update pages/specification/migration/_index.md
kwennB Oct 30, 2024
5bdfc65
added updates to migration overview
kwennB Oct 30, 2024
3ef35de
Adding migration folders and cards
benjagm Nov 2, 2024
a68d4f3
updated overview
kwennB Nov 7, 2024
65325b8
renamed page and added metadata
benjagm Nov 8, 2024
419ea36
updated links to the rights migration docs
benjagm Nov 8, 2024
43f9816
Added Alterschema details and individual draft pages
kwennB Nov 8, 2024
bb62eaa
Added migration data to single page-Draft 3-4.
kwennB Nov 12, 2024
757f1f9
Updated the Draft 3-4
kwennB Nov 14, 2024
5eae100
Updated Draft 3-4
kwennB Nov 15, 2024
93da171
Update pages/specification/migration/_index.md
kwennB Nov 20, 2024
994f731
Update pages/draft-04/migration-notes.md
kwennB Nov 20, 2024
ffcf639
Update pages/draft-04/migration-notes.md
kwennB Nov 20, 2024
b439468
Update pages/draft-04/migration-notes.md
kwennB Nov 20, 2024
85b9ceb
Update pages/draft-04/migration-notes.md
kwennB Nov 20, 2024
81ebeea
Updated Draft 3-4 & Overview
kwennB Nov 24, 2024
d718e51
added draft 2-3
kwennB Nov 24, 2024
3a5a632
Update pages/draft-04/migration-notes.md
kwennB Dec 2, 2024
33e536b
Update pages/specification/migration/_index.md
kwennB Dec 2, 2024
266963b
Update pages/specification/migration/_index.md
kwennB Dec 2, 2024
e75e0da
Update pages/specification/migration/_index.md
kwennB Dec 2, 2024
78d912a
Update pages/specification/migration/_index.md
kwennB Dec 2, 2024
5a46c9d
Update pages/draft-03/migration-notes.md
kwennB Dec 2, 2024
91c3b63
Update pages/draft-03/migration-notes.md
kwennB Dec 2, 2024
ddec102
Update pages/draft-03/migration-notes.md
kwennB Dec 2, 2024
f0fd4c2
Updated draft 2-3
kwennB Dec 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions pages/draft-02/[slug].page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React from 'react';
import Head from 'next/head';
import { getLayout } from '~/components/Sidebar';
import StyledMarkdown from '~/components/StyledMarkdown';
import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
import { Headline1 } from '~/components/Headlines';
import { SectionContext } from '~/context';
import { DocsHelp } from '~/components/DocsHelp';

export async function getStaticPaths() {
return getStaticMarkdownPaths('pages/draft-02');
}
export async function getStaticProps(args: any) {
return getStaticMarkdownProps(args, 'pages/draft-02');
}

export default function StaticMarkdownPage({
frontmatter,
content,
}: {
frontmatter: any;
content: any;
}) {
const markdownFile = '_index';
const newTitle = 'JSON Schema - ' + frontmatter.title;

return (
<SectionContext.Provider value={frontmatter.section || null}>
<Head>
<title>{newTitle}</title>
</Head>
<Headline1>{frontmatter.title}</Headline1>
<StyledMarkdown markdown={content} />
<DocsHelp markdownFile={markdownFile} />
</SectionContext.Provider>
);
}
StaticMarkdownPage.getLayout = getLayout;
39 changes: 39 additions & 0 deletions pages/draft-03/[slug].page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React from 'react';
import Head from 'next/head';
import { getLayout } from '~/components/Sidebar';
import StyledMarkdown from '~/components/StyledMarkdown';
import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
import { Headline1 } from '~/components/Headlines';
import { SectionContext } from '~/context';
import { DocsHelp } from '~/components/DocsHelp';

export async function getStaticPaths() {
return getStaticMarkdownPaths('pages/draft-03');
}
export async function getStaticProps(args: any) {
return getStaticMarkdownProps(args, 'pages/draft-03');
}

export default function StaticMarkdownPage({
frontmatter,
content,
}: {
frontmatter: any;
content: any;
}) {
const markdownFile = '_index';
const newTitle = 'JSON Schema - ' + frontmatter.title;

return (
<SectionContext.Provider value={frontmatter.section || null}>
<Head>
<title>{newTitle}</title>
</Head>
<Headline1>{frontmatter.title}</Headline1>
<StyledMarkdown markdown={content} />
<DocsHelp markdownFile={markdownFile} />
</SectionContext.Provider>
);
}
StaticMarkdownPage.getLayout = getLayout;
48 changes: 48 additions & 0 deletions pages/draft-03/migration-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
title: Draft 02 to Draft 03
section: docs
---

### Introduction

The migration from Draft 2 to Draft 3 of JSON Schema introduced significant updates in schema definition and validation behaviors. Draft 3 refined existing keywords, added new ones, and adjusted validation rules to improve schema precision and consistency. This guide will assist you in updating your JSON Schemas to meet Draft 3 requirements, detailing keyword replacements, vocabulary changes, and modifications in validation behaviors.

### Keyword changelog

| Keyword(Draft 2) | Keyword(Draft 3) | Specification | Keyword type | Behavior Details |
| ----------------- | ------------------- | ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$schema` | `$schema` | `core` | Identifier | The `$schema` keyword specifies the URI of the JSON Schema that defines the schema of the current document. Validators use this URI to resolve links and determine the JSON Schema version, enabling appropriate validation features. Including the `$schema` keyword is recommended to ensure compatibility with future JSON Schema changes. |
| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation. |
| not present | `id` | `core` | Identifier | This keyword defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If there is no parent schema, it is resolved against the URI used to retrieve the schema. |
| `optional` | `required` | `core` | Assertion | In **draft-02**, object properties defined within the `properties` keyword were required by default, and the `optional` keyword was used to explicitly make a property optional. In **draft-03**, this behavior changed: properties defined under `properties` are now optional by default. As a result, the `optional` keyword became redundant and was replaced by the `required` keyword to reflect the new default behavior, where properties are optional unless explicitly marked as required. |
| `minimumCanEqual` | `exclusiveMinimum` | `core` | Assertion | Specifies that instance values must be strictly greater than the minimum when `exclusiveMinimum` is `true`. |
| `maximumCanEqual` | `exclusiveMaximum` | `core` | Assertion | This ensures that instance values fall below the maximum when `exclusiveMaximum` is `true`. |
| `format` | `format` | `core` | Annotation | This update refined format handling by adding and removing specific types, offering clearer guidance for expected data formats. |
| not present | `patternProperties` | `core` | Applicator | Enforces schema validation on properties with names matching specified regex patterns. Each property matching a pattern must conform to the schema defined for that pattern in `patternProperties`. |
| `requires` | `dependencies` | `core` | Assertion | Defines property dependencies - if an instance includes a property named in this attribute, that property must meet additional validation requirements defined by its dependency value. |
| not present | `additionalItems` | `core` | Applicator | Defines rules for extra items in an array - can be set to false to disallow extra items beyond specified tuples, or to a schema that additional items must follow. |
| `alternate` | removed | `core` | | - |

### Tutorial

#### Step 1: Review Core Changes:

Start by understanding the key differences between Draft 2 and Draft 3, especially regarding core changes in $schema, $ref, and validation keywords.

- `$schema`: In Draft 3, this remains the same but is now more standardized to handle the schema dialect and the version of the specification being used.
- `$ref`: Draft 3 introduces the `$ref` keyword, which allows referencing external schemas for validation. This will enable more modular and reusable schema definitions.

#### Step 2: Update Validation Keywords:

Draft 3 introduces new validation keywords that improve flexibility in schema definitions. Notable changes include:

- `optional` to `required`: Draft 3 removes the `optional` keyword and introduces `required`, which specifies the required properties for an object.
- `minimumCanEqual` to `exclusiveMinimum`: For numerical validation, `exclusiveMinimum` enforces that the value must be strictly greater than the given minimum value.
- `maximumCanEqual` to `exclusiveMaximum`: Similarly, `exclusiveMaximum` ensures the value is strictly less than the maximum allowed value.
- `patternProperties`: Draft 3 introduces `patternProperties`, which allows you to define schema rules for properties whose names match a regular expression.

#### Step 3: Refactor $ref Usage

Draft 3 introduces `$ref`, which allows you to reference external schemas using **URIs**. This improves schema modularity and enables better reuse of schema definitions.

Validate and test your updated schemas manually, or with your preferred tool.
39 changes: 39 additions & 0 deletions pages/draft-04/[slug].page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React from 'react';
import Head from 'next/head';
import { getLayout } from '~/components/Sidebar';
import StyledMarkdown from '~/components/StyledMarkdown';
import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
import { Headline1 } from '~/components/Headlines';
import { SectionContext } from '~/context';
import { DocsHelp } from '~/components/DocsHelp';

export async function getStaticPaths() {
return getStaticMarkdownPaths('pages/draft-04');
}
export async function getStaticProps(args: any) {
return getStaticMarkdownProps(args, 'pages/draft-04');
}

export default function StaticMarkdownPage({
frontmatter,
content,
}: {
frontmatter: any;
content: any;
}) {
const markdownFile = '_index';
const newTitle = 'JSON Schema - ' + frontmatter.title;

return (
<SectionContext.Provider value={frontmatter.section || null}>
<Head>
<title>{newTitle}</title>
</Head>
<Headline1>{frontmatter.title}</Headline1>
<StyledMarkdown markdown={content} />
<DocsHelp markdownFile={markdownFile} />
</SectionContext.Provider>
);
}
StaticMarkdownPage.getLayout = getLayout;
87 changes: 87 additions & 0 deletions pages/draft-04/migration-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
title: Migrating from Draft 03 to Draft 04
section: docs
---

### Introduction

The migration from Draft 3 to Draft 4 of JSON Schema introduces changes in how schemas are defined and validated. Draft 4, published on January 31, 2013, introduced new keywords and revised the behaviours of existing ones.

This guide will help you adapt your JSON Schemas to align with Draft 4 requirements, covering keyword changes, updates, and behavioural modifications.

### Keyword changelog

Below is a summary table highlighting keyword changes between Draft 3 and Draft 4.

| Keyword (Draft 3) | Keyword (Draft 4) | Specification | Keyword type | Behavior Details |
| ----------------- | ----------------- | ------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$schema` | `$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft4 dialect) |
| `type` | `type` | Validation | Assertion | This change no longer accepts the `any` type, restricting instances to the seven core primitive types only. |
kwennB marked this conversation as resolved.
Show resolved Hide resolved
| `disallow` | removed | Validation | Applicator | The `disallow` keyword specifies types or schemas that an instance must not match, although removed; this functionality has been replaced by the `not` keyword. |
| `required` | `required` | Validation | Assertion | The `required` keyword shifted from being a boolean within each property to a standalone keyword that takes an array of required property names outside of properties. |
| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf` with a stricter requirement that its value must be greater than 0. |
| `extends` | removed | Validation | Applicator | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
| `format` | `format` | Validation | Annotation | - |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing change description. I think there were some changes to what formats are defined, but otherwise there weren't any changes in the behavior of this keyword.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am still unsure how to better describe the format keyword, seeing that changes and discussions are ongoing.

Yes noted for change.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about this for format change description:
The format keyword retains its core function but has undergone several modifications: the attributes phone, style, and color have been removed; ip-address has been renamed to ipv4; and references for all attributes have been added to enhance clarity and usability.

| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array of strings or a schema, eliminating the use of single strings. |
| `id` | `id` | Core | Identifier | - |
| Not present | `allOf` | Core | Applicator | - |
| Not present | `anyOf` | Core | Applicator | - |
| Not present | `definitions` | Validation | Reserved Location | - |
| Not present | `maxProperties` | Validation | Assertion | - |
| Not present | `minProperties` | Validation | Assertion | - |
| Not present | `not` | Core | Applicator | - |
| Not present | `oneOf` | Core | Applicator | - |

#### Helpful notes for Keyword changelog

1. `type`

In Draft-03, the `type` keyword could hold a simple value like "string" or "number" and an entire schema as its value.

For example:

```json
{
"type": {
"type": "array",
"items": { "type": "string" }
}
}
```

This feature was in Draft-03 but changed in later versions of JSON Schema, where `type` is limited to simpler values like strings or arrays of strings.

The `allOf` keyword has now replaced the previous type schema functionality.

<Infobox label="Note"> Starting with Draft 4, schema identifiers that use an empty URI "" or a fragment-only URI "#" are no longer allowed.

In Draft 3, these identifiers were considered valid:

```
id: ""
id: "#"
```

However, this format is now prohibited from Draft 4 onwards.
</Infobox>
Comment on lines +56 to +66
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should id be included in the table?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, it was only used as a reference example.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I didn't understand your response. The infobox is describing a change to how id behaves from draft-03 to draft-04. The table above lists all keyword changes that occurred between draft-03 and draft-04. So, I don't see why id wouldn't be included.

Copy link
Contributor Author

@kwennB kwennB Nov 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is what I was trying to communicate with the infobox.

On Draft 3, it was defined as :
This attribute defines a URI of a schema that contains the full
representation of this schema. When a validator encounters this
attribute, it SHOULD replace the current schema with the schema
referenced by the value's URI (if known and available) and re-validate
the instance. This URI MAY be relative or absolute, and relative URIs
SHOULD be resolved against the URI of the current schema.

And on Draft 4:
The value for this keyword MUST be a string, and MUST be a valid URI. This URI MUST be normalized, and SHOULD NOT be an empty fragment (#) or the empty URI.

--
So it was not only about id.

But thank you for pointing out id; I checked and noticed I skipped adding it here because it didn't change to $id until draft 6. So I will include it here.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So it was not only about id.

Maybe I'm missing something, but I don't think that's true. You've quoted the definition of $ref for draft-03, not id. Maybe that's a source of confusion? Both definitions describe the behavior of id and nothing more. The draft-03 definition is pretty vague and the draft-04 definition isn't great either, but the only clear difference is that empty URIs and empty fragments are discouraged.

Actually, the spec says "SHOULD", not "MUST". So, technically those empty values aren't disallowed, it's just recommended that schema authors don't use them. I think that's a good argument for not considering this not a change and leaving it out of the migration page altogether. Implementations in both drafts should consider those values to effectively be a no-op. The only difference is that draft-04 tells schema authors not to use that particular nonsense value. I'd argue that nothing actually changed in the behavior of id from draft-03 to draft-04.


<Infobox label="Note">
Before Draft 3, the JSON Schema only included the Core specification, which outlined the foundational elements for schema structure. With Draft 4, the specification expanded to incorporate Validation, establishing rules for data format, structure, and type requirements. This addition enabled schema authors to define and enforce validation constraints directly within their schemas, making it easier for implementers to ensure data integrity and compatibility as schemas evolved.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't correct. There was originally only one spec that included everything. Everything that we now consider Core, Validation, and Hyper-Schema was included in that one spec. In draft-04, the one spec was split into the three parts we're familiar with today. So, the spec didn't expand in draft-04 to include validation. Validation was always there. It just split that content into a different document.

This may be too much detail, but what has gone in each document has changed over time as well. The Content vocabulary and a few Meta-Data keywords moved from Hyper-Schema to Validation (draft-07) and the Applicator vocabulary moved from Validation to Core (2019-09).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything that we now consider Core, Validation, and Hyper-Schema was included in that one spec

What was the one spec?

If you also stated that there was originally only one specification, at what point did the Validation become necessary?

In draft-04, the one spec was split into the three parts we're familiar with today. So, the spec didn't expand in draft-04 to include validation. Validation was always there. It just split that content into a different document.

Thank you. I will phrase this better.

The Content vocabulary and a few Meta-Data keywords moved from Hyper-Schema to Validation (draft-07) and the Applicator vocabulary moved from Validation to Core (2019-09).

Are there any more data for scenarios like this?

To better represent this Spec note, what would be the most nearly accurate detail?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What was the one spec?

I'm not sure what you mean. Draft-01, draft-02, and draft-03 were all just one spec that included what is now Core, Validation, and Hyper-Schema. It didn't really have another name like the three do now. It was just the JSON Schema spec.

If you also stated that there was originally only one specification, at what point did the Validation become necessary?

Validation was always part of the spec. It was included from the first draft. It was always necessary.

Are there any more data for scenarios like this?

I think this kind of information is in the release notes for each draft. The older drafts don't have release notes, but those didn't have these kinds of changes.

To better represent this Spec note, what would be the most nearly accurate detail?

Honestly, I'm not sure what this spec note is trying to communicate. Is it just that there are now three specs instead of one?1 That was just a change in the way the spec was maintained. It has little affect on what people can and can't do with JSON Schema. However, splitting off Hyper-Schema meant draft-04 was the first draft where you could implement JSON Schema without including Hyper-Schema support. Implementers could implement Core and Validation and treat Hyper-Schema as an extension that they don't support.

Footnotes

  1. Actually, it was broken into four specs: Core, Validation, Hyper-Schema, and JSON Reference. But, JSON Reference wasn't maintained by us. JSON Reference was merged back into Core in draft-06.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for clarifying about the initial "JSON Schema Spec".

</Infobox>

### Tutorial

This tutorial walks you through key steps and considerations to help you successfully migrate your JSON schemas from Draft 3 to Draft 4.

#### Step 1: Review Core Changes

Start by familiarizing yourself with the updates in the [Draft 4 Core schema specification](https://json-schema.org/draft-04/draft-zyp-json-schema-04.html). Note the revised `type`, `required`, and `dependencies` keywords, which might affect your schemas if you rely on polymorphic types or cross-schema references.

#### Step 2: Update Validation Keywords

Draft 4 has introduced new keywords such as `oneOf`, `not`, `anyOf`, and `allOf`. Review each of these additions, and update your schemas to use these keywords if relevant. For instance:

- If you have properties that must always be present, use `required` to define these properties explicitly.
- For schemas that contain nested dependencies, consider restructuring them using `dependencies` to improve schema maintainability.

Validate and test your updated schemas manually, or with your preferred tool.
6 changes: 6 additions & 0 deletions pages/draft-05/migration-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: Draft 04 to Draft 05
section: docs
---

4-5
4 changes: 4 additions & 0 deletions pages/draft-06/migration-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
title: Draft 05 to Draft 06
section: docs
---
4 changes: 4 additions & 0 deletions pages/draft-07/migration-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
title: Draft 07 to Draft 2010-09
section: docs
---
6 changes: 6 additions & 0 deletions pages/draft/2019-09/migration-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: Draft 2019-09 to Draft 2020-12
section: docs
---

Testing to see if this page is visible.
6 changes: 6 additions & 0 deletions pages/draft/2020-12/migration-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: Draft 2019-09 to Draft 2020-12
section: docs
---

2019-09 to 2020-12
Loading
Loading