diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 90358dd..a14dbf1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -3,27 +3,24 @@
Thanks for your interest in contributing! GAPs are community-driven proposals
that address issues outside the core GraphQL specifications.
-## GAP Number Ranges
+## GAP Numbering
-GAPs use number ranges to categorize different types of proposals:
-
-- **1XXX** — Community directive specifications
-
-Other ranges may be added in the future as new categories are identified. The
-TSC are responsible for creating new GAP ranges.
+Each GAP is numbered after the GitHub Pull Request (PR) that introduces it. For
+example, if the PR that adds a GAP is `graphql/gaps#10`, the proposal becomes
+**GAP-10**.
## Filing a GAP
-1. File an issue outlining the topic for public vetting.
-2. If there is sufficient interest, open a PR that adds a new folder named
- `GAP-0` containing the required files. The proposal must have at least one
- author.
-3. Find a sponsor with merge rights (this may be one of the authors).
-4. Once approved by the authors and sponsor, GAP editors assign the GAP a
- number from the appropriate range (not necessarily the next available
- number), configure `CODEOWNERS`, and merge.
-5. GAP numbers never change. If a proposal needs significant changes, create a
- new GAP and deprecate the old one.
+1. Optionally create an issue outlining the topic to gauge public interest.
+2. Open a PR that adds a new folder named `GAP-0` containing the required files.
+3. Find a sponsor with [merge rights](#commit-access) (this may be one of the
+ authors), and add them to `metadata.yml`.
+4. Once approved by the authors and sponsor, rename the folder to match the PR
+ number (e.g. `GAP-10`), configure `CODEOWNERS`, and merge the PR.
+
+> [!IMPORTANT]
+> GAP numbers never change. If a proposal needs significant changes, create a
+> new GAP and deprecate the old one.
### Required files
@@ -48,8 +45,10 @@ title:
status: proposal | draft | accepted
authors:
- "Your Name "
-sponsor: "@githubUsername"
-# A GitHub issue, discussion, or other public forum
+sponsor: "@githubUername"
+# An separate GitHub issue, discussion, or other public forum where discussion
+# of this GAP occurs. Otherwise, this can be set to the URL of the PR in which
+# the GAP was submited.
discussion: "https://github.com/graphql/graphql-wg/issues/..."
```
@@ -98,8 +97,8 @@ status of a published release, including a top-of-document notice or errata.
## Commit access
Commit access is granted to this repo to the GAP editors and to members of the
-[GraphQL TSC](./GraphQL-TSC.md). To request to become a GAP editor, please reach
-out to a TSC member.
+[GraphQL TSC](https://github.com/graphql/graphql-wg/blob/main/GraphQL-TSC.md).
+To request to become a GAP editor, please reach out to a TSC member.
## GraphQL Specification Membership Agreement
diff --git a/README.md b/README.md
index dd3c22c..b54d52b 100644
--- a/README.md
+++ b/README.md
@@ -17,11 +17,9 @@ https://gaps.graphql.org/
## GAP Numbering
-GAPs use number ranges to categorize different types of proposals:
-
-- **1XXX** — Community directive specifications
-
-Other ranges may be added in the future as new categories are identified.
+Each GAP is numbered after the GitHub Pull Request that introduces it. For
+example, if the PR that adds a GAP is `graphql/gaps#10`, the proposal becomes
+**GAP-10**.
## Repository structure
diff --git a/scripts/validate-structure.js b/scripts/validate-structure.js
index e1a88b6..7401f59 100755
--- a/scripts/validate-structure.js
+++ b/scripts/validate-structure.js
@@ -40,11 +40,11 @@ function validateDirectoryNaming(dirPath) {
return dirName;
}
- // Must match GAP-NNNN format (4 digits, zero-padded)
- if (!/^GAP-\d{4}$/.test(dirName)) {
+ // Must match GAP-NNNN format (one or more digits)
+ if (!/^GAP-\d+$/.test(dirName)) {
error(
dirName,
- `Invalid directory name format. Expected GAP-NNNN (4 digits, zero-padded)`,
+ `Invalid directory name format. Expected GAP-NNNN (e.g. GAP-10, GAP-123)`,
);
}