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 <noreply@example.com>" -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)`, ); }