POST /graphql, which is the only place Projects v2 exists. The conformance suite drives the twin through octokit 5.0.5, the SDK GitHub publishes, against REST API version 2022-11-28. GitHub publishes no Python client, so there is no Python target.
Slug: github
What it models
The account, one collaborator, the organization and one repository are the same in every container, so a seed plan can name them before any container exists:
twinbay owns everything, hubot is the one assignable collaborator, twinbay-labs is the organization both belong to, and twinbay/sandbox is a repository with GitHub’s nine default labels and a main branch. The sandbox numbers whatever you create afterwards.
Advancing opens whichever rate-limit window had anything spent in it, and settles the mergeability of every open pull request, which GitHub computes in the background.
Scenarios
busy-repository, pull-request-in-review, merge-conflict, organization-workspace, project-board, archived-repository, issues-disabled, locked-issue, rate-limited-token.
Not modelled
Actions, releases, webhooks, gists, search, teams, reviews and review comments, and git data beyond the one route that creates a branch. Four refusals are worth naming, because each one is a route or field GitHub has and the twin declines on purpose:GET /graphql, which is a full schema introspection on the live API; a pull request’s files and commits, because there is no git here to diff; editing or labelling a pull request through the issue routes; and setting a project field value, or a board owned by anything but the organization.
An unmodelled route answers 501 in GitHub’s own envelope, and an unmodelled GraphQL field answers 501 with extensions.code: "notModelled" rather than null.