Thanks for your interest in contributing! GAPs are community-driven proposals that address issues outside the core GraphQL specifications.
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. Until the PR is filed and the number known, use GAP-0 as a
placeholder.
Before filing a GAP you're encouraged to create an issue outlining the topic to gauge public interest, but doing so is not necessary.
- Clone the repository and create a folder in the root called
GAP-0. - Add the required files to this folder as described below (
README.md,DRAFT.mdandmetadata.yml), commit them, and open a pull request (PR). - Update the GAP number to match the PR number (
graphql/gaps#10has PR number 10). Do not zero-pad the PR number.- Rename the folder from
GAP-0toGAP-Nwhere N is the PR number number. - Update
idinmetadata.ymlto be the PR number. - If not yet configured, update the
discussionpath inmetadata.ymlto point to the PR.
- Rename the folder from
- Ping
@graphql/gaps-editorsto find a sponsor, add them tometadata.yml.
Once approved by the authors and sponsor, CODEOWNERS will be updated and the
PR will be merged.
Important
GAP numbers never change. If a proposal needs significant changes, create a new GAP and deprecate the old one.
Each GAP-N folder must include:
DRAFT.md— the working document of the proposal/specification, written inspec-mdformatREADME.md— a brief overview, why it exists, current status, challenges, drawbacks, and related resources/prior art (written in GitHub Flavoured Markdown)metadata.yml— maintainers, status, and related metadata
Required fields:
id: <the PR number, or 0 if not yet known>
title: <title>
# GAPs are never "strawman". Later we'll probably add additional statuses. If in
# doubt, choose "proposal"
status: proposal | draft | accepted
authors:
- "Your Name <noreply@example.com>"
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/..."Additional optional fields:
related:
- <number>
replaces: <number>
supersededBy: <number>
tags:
- <string>GAPs may be maintained over time. Major changes to a GAP are discouraged, instead a new GAP should be created, however evolution of a GAP over time is often desired.
The sponsor of a GAP is responsible for ensuring changes to the GAP are approved by the authors before merging, though this task may also be performed by the TSC. The authors are responsible for guiding contribution to the GAP.
To release a version of a GAP, copy the current DRAFT.md into a versions
folder named for the year and month of release:
cp GAP-N/DRAFT.md GAP-N/versions/YYYY-MM.mdRules:
- At most one versioned release is allowed per month.
- A versioned release may only be edited in the month it was published, and even then only for trivial typos or exceptional circumstances (e.g. security issues).
This optional file can be created/edited by the TSC or editors to outline the status of a published release, including a top-of-document notice or errata.
Commit access is granted to this repo to the GAP editors and to members of the GraphQL TSC. To request to become a GAP editor, please reach out to a TSC member.
This repository is managed by EasyCLA. Project participants must sign the free (GraphQL Specification Membership agreement before making a contribution. You only need to do this one time, and it can be signed by individual contributors or their employers.
To initiate the signature process please open a PR against this repo. The EasyCLA bot will block the merge if we still need a membership agreement from you.
You can find detailed information here. If you have issues, please email operations@graphql.org.