GitHub API sandbox

GitHub

Point your GitHub client (e.g. Octokit) baseUrl option at https://gh.sandboxapis.dev, a bare env-var swap. Paths, JSON, and headers mirror api.github.com.

REST · 655 endpointsGraphQL · 13 entitiesgit smart-HTTPMCP-ready

Coverage badge

Deep652/667 · 98%

The share of read rows with a final answer — served and verified, a deviation, retired upstream, or a reviewed empty/refusal. Computed in the coverage manifest, copied here.

Live host
gh.sandboxapis.dev
Pinned hosts
10 — generation 1, 2, 3, 5, 6, 8, 9, 10, 11, 12
Serving since
2026-07-31
Lifecycle
Live

Served & verified

475 / 71%

Answering with real universe data, each response checked against GitHub's published spec by the conformance suite on this build.

The full read API

667

Every read surface GitHub publishes, deferred long tail included, minus the rows excluded by policy (4). Writes are out of scope: this universe is read-only.

Not served yet

182

Each returns an explicit, provider-shaped coverage error naming the gap — never invented data. 10 endpoints were retired by GitHub itself and are served only on snapshots pinned before that date — not a gap on our side.

01 / The swap

Point your client at a different base URL.

No SDK of ours, no shim, no recorded fixtures. The same client library you already use, one environment variable different.

shell
curl https://gh.sandboxapis.dev/repos/olympus-labs/parthenon

Verified drop-in clients

  • @octokit/rest22.0.1
  • gh2.102.0
  • renovate44.171.1

The versions the conformance suite drives against this host on every build — pinned in coverage/client-pins.yaml, and watched weekly for upstream releases, because a client library moving without us is how a shipped integration breaks silently.

02 / Coverage by family

Every read surface, grouped the way GitHub groups it.

All 671 rows the coverage manifest carries for GitHub, deferred long tail included and nothing capped. Open a family, or filter by path to find the exact endpoint your client calls.

Status — what a conformance test found

served & verified
answers with real universe data, and this build checked that response against the vendor's spec.
deviation
served and faithful to the real provider, but failing the vendored spec — usually a bug in the spec.
retired
the vendor removed the endpoint; snapshots pinned before that date still serve it.
planned / deferred
not served yet — an explicit coverage error naming the gap, never invented data.
excluded
out of the claim by policy (writes, and surfaces we refuse); not in any denominator on this page.

Mode — what kind of answer a row gets

derive
the response is computed from artifact rows that already exist
generate
canon does not carry this yet; the generator will produce it, then derive
empty
the true answer for this universe is an empty collection — reason + reviewed date required
refuse
mirror the provider's OWN refusal (e.g. its 403 for a non-admin token) — reason + reviewed date required
read-only
a write named in the manifest because clients probe it; the read-only 403 IS its final response, and it never joins the badge denominator
scratch
a write this replica ACCEPTS, into a per-key 24-hour overlay, answering with the provider's own success shape - reason + reviewed date required. The compiled artifact is unchanged and no other caller ever sees the row; a caller WITHOUT a scratch-enabled key gets the read-only refusal on the identical path. Like read-only it never joins the badge denominator (founder ruling 5, 2026-09-17: the published figure has meant READ operations served since A0.1), and unlike read-only it ANSWERS, so the generation report counts it in its own `scratch` column rather than in (excluded). Scratch never creates a pull request, a branch, a commit or a diff - those are canon structure the overlay cannot invent

A row with no mode shown has not been judged yet. Modes are the manifest's own words, from coverage/MODES.yaml; every empty and refuse carries a written reason and a review date before it counts as final.

Held — buildable, deliberately not built yet

data-licensing
the values are VENDOR reference data this project holds no grant to redistribute. Serving needs an independently licensed source, so the outstanding work is a licensing answer, not code.

held is a label, not a mode and not a status. A held row is one somebody looked at, judged buildable, and left with the blocker named — so it is not covered, counts against the ratio above exactly like any other unbuilt row, and still answers the coverage 404. It buys nothing; it only tells you why.

Badge — where Deep starts

Full
every published read row has a final answer
Deep
60% up to 100%
Partial
25% up to 60%
Preview
under 25%

REST + GraphQL + git rows that are not `excluded`. Write operations are NOT rows (DECISIONS 2026-09-01 decision 9): they are counted in meta.write_operations and never enter this ratio.

671 read surfaces in 51 families

actions89 of 103 served & verified
GET
/organizations/{org}/actions/cache/retention-limit

SERVED 2026-10-27 (hello-23 cacheLimits, decisions/2026-10-27-2216 and decisions/2026-10-27-2310): the github.actions-cache-limits catalogue row retention-days, {max_cache_retention_days: 7}, GitHub's documented default (the dependency-caching reference, pinned under github.docs in coverage/provider-pins.yaml). Nobody in this data set changed the limit. Conformance holds it to the served /actions/caches list: no cache was last accessed more than 7 days before the anchor. Older artifacts answer the hello-23 generation gap

served & verified
Next
GET
/organizations/{org}/actions/cache/storage-limit

SERVED 2026-10-27 (hello-23 cacheLimits, decisions/2026-10-27-2216 and decisions/2026-10-27-2310): the github.actions-cache-limits catalogue row storage-gb, {max_cache_size_gb: 10}, GitHub's documented default of 10 GB per repository (the dependency-caching reference, pinned under github.docs in coverage/provider-pins.yaml). Nobody in this data set changed the limit. Conformance holds it to the served /actions/caches list: no repository's caches sum past 10^10 bytes. Older artifacts answer the hello-23 generation gap

served & verified
Next
GET
/orgs/{org}/actions/cache/usage

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints ci_cache - one row per cache key a workflow actually restores, its size and digest READ OFF the artifact row it holds rather than stored twice, and its key composed at compile time as {platform}-{artifact name}-{sha256} over that artifact's real content digest. Scoped to the default branch only: a WorkflowRun records the commit it ran on and not the branch, so attributing a cache to a feature branch would attribute it to a ref canon does not say the run was on

served & verified
Next
GET
/orgs/{org}/actions/cache/usage-by-repository

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints ci_cache - one row per cache key a workflow actually restores, its size and digest READ OFF the artifact row it holds rather than stored twice, and its key composed at compile time as {platform}-{artifact name}-{sha256} over that artifact's real content digest. Scoped to the default branch only: a WorkflowRun records the commit it ran on and not the branch, so attributing a cache to a feature branch would attribute it to a ref canon does not say the run was on

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners

SERVED 2026-09-14 (hello-20 wave W-github): the host's own ephemeral pool, off the same features.ciRunners table discriminated by ownership - GitHub keeps two routes because a hosted machine and a self-hosted one are two lists, and runnersByOwnership() is what keeps a machine off the wrong one. A hosted row is ONE PROVISIONED SLOT, so maximum_runners is 1 and the pool's concurrency is the row count; image_details and machine_size_details come off the github.runner-images-github-owned and github.runner-machine-sizes catalogues this artifact has carried since hello-16, so every image and size named here is one this same host publishes

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners/{hosted_runner_id}

SERVED 2026-09-14 (hello-20 wave W-github): the host's own ephemeral pool, off the same features.ciRunners table discriminated by ownership - GitHub keeps two routes because a hosted machine and a self-hosted one are two lists, and runnersByOwnership() is what keeps a machine off the wrong one. A hosted row is ONE PROVISIONED SLOT, so maximum_runners is 1 and the pool's concurrency is the row count; image_details and machine_size_details come off the github.runner-images-github-owned and github.runner-machine-sizes catalogues this artifact has carried since hello-16, so every image and size named here is one this same host publishes

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners/images/custom

this organization built no custom runner image - nothing in canon records the act, and every hosted machine names an image from GitHub's own github.runner-images-github-owned catalogue. The organization resolves, so the honest answer is the empty {total_count: 0, images: []} page at 200; the three by-id reads over it refuse (decisions/2026-09-14-0220, note 1, which names this split)

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners/images/github-owned

reader.refCatalog("github.runner-images-github-owned"); every row carries source: github and none of them is on the partner catalogue. licence: FACTUAL — the ids are operating-system distribution names and versions ("ubuntu-20.04" on platform "linux-x64" in actions-hosted-runner-curated-image), which carry no authorship. Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners/images/partner

reader.refCatalog("github.runner-images-partner") - the one catalogue in this domain with a theme leg, since source: partner names third-party vendors. licence: NO GRANT NEEDED — source: "partner" names third-party vendors, which is exactly the objection the /vendors ruling met, and it settled it by making the catalogue FICTIONAL. No vendor's data is copied, so nothing has to be licensed. Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners/limits

SERVED 2026-09-14 (hello-20 wave W-github): the host's own ephemeral pool, off the same features.ciRunners table discriminated by ownership - GitHub keeps two routes because a hosted machine and a self-hosted one are two lists, and runnersByOwnership() is what keeps a machine off the wrong one. A hosted row is ONE PROVISIONED SLOT, so maximum_runners is 1 and the pool's concurrency is the row count; image_details and machine_size_details come off the github.runner-images-github-owned and github.runner-machine-sizes catalogues this artifact has carried since hello-16, so every image and size named here is one this same host publishes

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners/machine-sizes

reader.refCatalog("github.runner-machine-sizes") in ord order (smallest first, which key order would reverse). licence: FACTUAL — the response is hardware numbers ({id: "8-core", cpu_cores, memory_gb, storage_gb} in actions-hosted-runner-machine-spec), which carry no authorship. Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Next
GET
/orgs/{org}/actions/hosted-runners/platforms

reader.refCatalog("github.runner-platforms"); every platform an image names is asserted to be one this list offers. licence: FACTUAL — the response is an enumeration of operating-system/architecture identifiers ("linux-x64", "win-x64" in the vendored description's own example), which carries no authorship. Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Next
GET
/orgs/{org}/actions/oidc/customization/properties/repo

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/oidc/customization/sub

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/artifact-and-log-retention

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/fork-pr-contributor-approval

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/fork-pr-workflows-private-repos

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/repositories

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/selected-actions

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/self-hosted-runners

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/self-hosted-runners/repositories

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/permissions/workflow

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/orgs/{org}/actions/policies

{total_count: 0, policies: []}, because no Actions policy exists at either scope: an Actions policy is a named rule object for workflow execution protection, created by a write (POST .../actions/policies), and this data set has issued none. It is not the ci_policy row the .../actions/permissions family serves, which is the scope's Actions SETTINGS and exists whether or not anyone wrote a policy. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

served & verified
Next
GET
/orgs/{org}/actions/runner-groups

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/orgs/{org}/actions/runner-groups/{runner_group_id}

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners

SERVED 2026-09-14 (hello-20 wave W-github): the host's own ephemeral pool, off the same features.ciRunners table discriminated by ownership - GitHub keeps two routes because a hosted machine and a self-hosted one are two lists, and runnersByOwnership() is what keeps a machine off the wrong one. A hosted row is ONE PROVISIONED SLOT, so maximum_runners is 1 and the pool's concurrency is the row count; image_details and machine_size_details come off the github.runner-images-github-owned and github.runner-machine-sizes catalogues this artifact has carried since hello-16, so every image and size named here is one this same host publishes

served & verified
Next
GET
/orgs/{org}/actions/runner-groups/{runner_group_id}/repositories

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/orgs/{org}/actions/runner-groups/{runner_group_id}/runners

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/orgs/{org}/actions/runners

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/orgs/{org}/actions/runners/{runner_id}

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/orgs/{org}/actions/runners/{runner_id}/labels

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/orgs/{org}/actions/secrets

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; served as `organization-actions-secret`, so `visibility` is published and `selected_repositories_url` only on a `selected` row - a link on an `all` row would advertise a route that answers 409. NO `value` MEMBER IS SERVED AND NONE EXISTS: `actions-secret` declares a name and two dates, `ci_binding.value` is NULL on every masked row, and conformance asserts the property is absent from every served secret rather than trusting the schema, which sets no `additionalProperties: false`

served & verified
Next
GET
/orgs/{org}/actions/secrets/{secret_name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; a name the list published, never a name recomputed from the theme's pool. A name this organization does not hold is GitHub's own 404

served & verified
Next
GET
/orgs/{org}/actions/secrets/{secret_name}/repositories

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; the repositories the secret actually reaches - `all` reaches every one, `private` the private ones, `selected` the named ones. The vendored operation declares NO 409 on the secret form (only the variable form does), so this answers the 200 whatever the visibility, and conformance fetches every repository it names to prove the link resolves

served & verified
Next
GET
/orgs/{org}/actions/secrets/public-key

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; the scope's own 32 X25519 public-key bytes, base64-encoded, and its monotonic `key_id`. THE PUBLIC HALF IS REAL AND THERE IS NO PRIVATE HALF - this universe accepts no writes, so nothing is ever encrypted to these bytes; conformance base64-decodes them and asserts the length is 32 rather than accepting any string

served & verified
Next
GET
/orgs/{org}/actions/variables

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; `organization-actions-variable`, whose `value` IS declared and is READ from the artifact row canon's `value_source` names - the telemetry exporter's endpoint and its protocol - so the setting and the thing it configures cannot drift apart

served & verified
Next
GET
/orgs/{org}/actions/variables/{name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; a name the list published. A name this organization does not hold is GitHub's own 404

served & verified
Next
GET
/orgs/{org}/actions/variables/{name}/repositories

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The vendored operation declares a 200 AND a body-less 409 - "Response when the visibility of the variable is not set to `selected`" - and BOTH branches have a row in this universe, which is the vendored document specifying what the organization has to look like. This one answers the 200: the organization's OTLP protocol variable is `selected` to the repository whose collector agent is configured for that wire format. The `agents` twin answers the 409

served & verified
Next
GET
/repos/{owner}/{repo}/actions/artifacts
served & verified
Next
GET
/repos/{owner}/{repo}/actions/artifacts/{artifact_id}
served & verified
Next
GET
/repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}

SERVED 2026-09-09: the SIXTH download redirect, on the founder-ruled 2026-09-02 pattern — the documented 302 to the service host, and the bytes behind it. reader.artifactContent(artifactId) (packages/artifact/src/reader.ts:2825) is the artifact's canonical content, packed by buildZip (packages/renderer-github/src/archive.ts:181) under ArtifactRow.path with the run's completion epoch as the mtime, so the archive is byte-identical on every request. `archive_download_url` on every artifact object has pointed here since Phase C, and conformance follows THAT url. `zip` is the only archive_format GitHub accepts; anything else is its 404. Answers the hello-15 generation gap rather than redirecting to an empty zip

served & verified
Next
GET
/repos/{owner}/{repo}/actions/cache/retention-limit

SERVED 2026-10-27 (hello-23 cacheLimits, decisions/2026-10-27-2216 and decisions/2026-10-27-2310): the same catalogue row the organization serves, because a repository may not exceed its organization and nobody changed either; 7 days, GitHub's documented default. Older artifacts answer the hello-23 generation gap

served & verified
Next
GET
/repos/{owner}/{repo}/actions/cache/storage-limit

SERVED 2026-10-27 (hello-23 cacheLimits, decisions/2026-10-27-2216 and decisions/2026-10-27-2310): the same catalogue row the organization serves, because a repository may not exceed its organization and nobody changed either; 10 GB, GitHub's documented default. Older artifacts answer the hello-23 generation gap

served & verified
Next
GET
/repos/{owner}/{repo}/actions/cache/usage

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints ci_cache - one row per cache key a workflow actually restores, its size and digest READ OFF the artifact row it holds rather than stored twice, and its key composed at compile time as {platform}-{artifact name}-{sha256} over that artifact's real content digest. Scoped to the default branch only: a WorkflowRun records the commit it ran on and not the branch, so attributing a cache to a feature branch would attribute it to a ref canon does not say the run was on

served & verified
Next
GET
/repos/{owner}/{repo}/actions/caches

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints ci_cache - one row per cache key a workflow actually restores, its size and digest READ OFF the artifact row it holds rather than stored twice, and its key composed at compile time as {platform}-{artifact name}-{sha256} over that artifact's real content digest. Scoped to the default branch only: a WorkflowRun records the commit it ran on and not the branch, so attributing a cache to a feature branch would attribute it to a ref canon does not say the run was on

served & verified
Next
GET
/repos/{owner}/{repo}/actions/concurrency_groups

every workflow run in this universe has reached a terminal conclusion, so no concurrency group is active; the check goes red the day canon grows an in-flight run

served & verified
Next
GET
/repos/{owner}/{repo}/actions/jobs/{job_id}
served & verified
Next
GET
/repos/{owner}/{repo}/actions/jobs/{job_id}/logs

hello-13 JobLog carries this job's log text; the documented 302 is simulated in-app (founder ruling 2026-09-02) — the Location names a signed route on the service host that serves those exact bytes as text/plain

served & verified
Next
GET
/repos/{owner}/{repo}/actions/oidc/customization/sub

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/organization-secrets

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; the ORGANIZATION secrets this repository can see, and the visibility rule that decides which lives in `reader.orgBindingsVisibleToRepo` rather than in four renderers. Served as the PLAIN `actions-secret`, not the organization form - the vendored operation names that component here - so no `visibility` is published on this surface even though the rows are the organization's

served & verified
Next
GET
/repos/{owner}/{repo}/actions/organization-variables

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; the organization variables this repository can see, through the same reader rule as its secret twin

served & verified
Next
GET
/repos/{owner}/{repo}/actions/permissions

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/permissions/access

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/permissions/artifact-and-log-retention

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/permissions/fork-pr-workflows-private-repos

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/permissions/selected-actions

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/permissions/workflow

SERVED 2026-09-14 (hello-20 wave W-github): features.ciPolicy mints ci_policy and ci_policy_allowance, one row per scope x audience, and EVERY FIELD IS READ OFF EVIDENCE THIS ARTIFACT ALREADY CARRIES (decisions/2026-09-14-0230): allowed_actions is selected because this organization's config policy hard-fails an unapproved source, default_permissions is read because the CI principal authors no commit and no review, the fork-PR posture is the strict one vacuously satisfied because every person on this roster is a member and the one repository is private, and the action allow-list is MEASURED off the .github/workflows blobs in this same artifact so it cannot permit an action the workflows do not use. Gated on hasCiPolicy()

served & verified
Next
GET
/repos/{owner}/{repo}/actions/policies

{total_count: 0, policies: []}, because no Actions policy exists at either scope: an Actions policy is a named rule object for workflow execution protection, created by a write (POST .../actions/policies), and this data set has issued none. It is not the ci_policy row the .../actions/permissions family serves, which is the scope's Actions SETTINGS and exists whether or not anyone wrote a policy. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals). has_parents changes nothing: no policy exists at the organization either

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runners

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runners/{runner_id}

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runners/{runner_id}/labels

SERVED 2026-09-14 (hello-20 wave W-github): features.ciRunners mints runner_group/runner/runner_label and one appended job.runner column, so a canonical Job now records what it ran ON (decisions/2026-09-14-0220). Each pool holds exactly the MEASURED PEAK CONCURRENCY of the jobs it ran - the smallest fleet that could have run this traffic without a job queueing, and the only fleet size this universe has evidence for - and which machine took which job is a queue rather than a draw. busy is 0 on every row because the anchor is not mid-build. Gated on hasCiRunners(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs
served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}
served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/approvals

no workflow run in this universe ever waited for an approval — all 398 `workflow_run` rows carry a terminal `conclusion` and the table has no pending state; GitHub's own answer for a run with no approval history is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/artifacts
served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}
served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs
served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs

hello-13 JobLog carries every job's log text, so the attempt's zip is a container around canon; the documented 302 is simulated in-app (founder ruling 2026-09-02) and an attempt number this run never had stays a plain 404

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups

the per-run twin of the repository concurrency-group list, held to the same fact: every workflow run has reached a terminal conclusion, so none holds a concurrency group

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/jobs
served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/logs

hello-13 JobLog carries every job's log text, so the run's zip is a container around canon, one member per job; the documented 302 is simulated in-app (founder ruling 2026-09-02)

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments

no workflow run in this universe ever waited for an approval — all 398 `workflow_run` rows carry a terminal `conclusion` and the table has no pending state; GitHub's own answer for a run with no approval history is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Next
GET
/repos/{owner}/{repo}/actions/runs/{run_id}/timing
served & verified
Next
GET
/repos/{owner}/{repo}/actions/secrets

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; the repository's OWN secrets. Two of them are backed by a `person_credential` this organization really issued - the registry pull token and the integration-suite token, whose two dates are the ROTATION PAIR canon records - so their instants are facts rather than plausible numbers

served & verified
Next
GET
/repos/{owner}/{repo}/actions/secrets/{secret_name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; a name the list published

served & verified
Next
GET
/repos/{owner}/{repo}/actions/secrets/public-key

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `actions` family is canon's `pipeline` audience; the repository scope's own 32 public-key bytes

served & verified
Next
GET
/repos/{owner}/{repo}/actions/variables

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The repository's own published settings: its default branch and the tree path the orb document really sits at, both READ from the rows they name so a client that follows either finds the thing it points at

served & verified
Next
GET
/repos/{owner}/{repo}/actions/variables/{name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. A name the list published

served & verified
Next
GET
/repos/{owner}/{repo}/actions/workflows
served & verified
Next
GET
/repos/{owner}/{repo}/actions/workflows/{workflow_id}
served & verified
Next
GET
/repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs
served & verified
Next
GET
/repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing
served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/secrets

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. One scope per name `deployment.environment` actually carries, dated to the FIRST deployment to it. The environment has to resolve through the same derivation `/environments` publishes, so one named there is one this row answers for and one that is not is the ordinary 404

served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. A name the list published

served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The environment scope's own 32 public-key bytes

served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/variables

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The environment's own name, published - and READ from the scope's `environment` column, which is a name copied out of the deployments rather than authored, so the two surfaces cannot name the environment two different things

served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/variables/{name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. A name the list published

served & verified
Next
GET
/enterprises/{enterprise}/actions/cache/retention-limit

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Next
GET
/enterprises/{enterprise}/actions/cache/storage-limit

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Next
GET
/enterprises/{enterprise}/actions/oidc/customization/properties/repo

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Next
GET
/orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}

refuse — this organization built no custom runner image, so no image-definition id and no version under one can resolve - the LIST beside this row answers the empty page at 200, which is the list/id split decisions/2026-09-12-0348 states. Named as a ruling this wave inherits by decisions/2026-09-14-0220, note 1

deferred
Next
GET
/orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions

refuse — this organization built no custom runner image, so no image-definition id and no version under one can resolve - the LIST beside this row answers the empty page at 200, which is the list/id split decisions/2026-09-12-0348 states. Named as a ruling this wave inherits by decisions/2026-09-14-0220, note 1

deferred
Next
GET
/orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}

refuse — this organization built no custom runner image, so no image-definition id and no version under one can resolve - the LIST beside this row answers the empty page at 200, which is the list/id split decisions/2026-09-12-0348 states. Named as a ruling this wave inherits by decisions/2026-09-14-0220, note 1

deferred
Next
GET
/orgs/{org}/actions/policies/{policy_id}

refuse — the by-id half of an honestly empty list, so no id resolves and GitHub's own answer is its 404: no Actions policy exists at either scope: an Actions policy is a named rule object for workflow execution protection, created by a write (POST .../actions/policies), and this data set has issued none. It is not the ci_policy row the .../actions/permissions family serves, which is the scope's Actions SETTINGS and exists whether or not anyone wrote a policy. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

deferred
Next
GET
/orgs/{org}/actions/runners/deprecations/{version}

generateheld · data-licensing — the end-of-life dates of a runner version are GitHub's own release schedule for its runner binary, a fact about GitHub rather than about olympus-labs, which this project holds no grant to redistribute; dates served from a renderer constant would be the request-time vendor catalogue the /vendors ruling forbids, and an answer of null dates would claim GitHub set no schedule. Answers the coverage 404 at the organization scope until a licensed source exists (decisions/2026-10-27-2137-github-unclassified-eight.md)

deferred
Next
GET
/orgs/{org}/actions/runners/downloads

refuse — REFUSED 2026-09-14 on the founder's ruling, and it opens a NEW CLASS: the vendor's own downloadable binaries. The runner-application tarballs are a fact about GITHUB rather than about olympus-labs, so no generation of this universe could carry them; RunnerApplication exists to be DOWNLOADED, so a row whose download_url resolves to nothing serves nobody; and the only url that does resolve is github.com's own release asset, which the per-item licence review held there is no grant to redistribute (coverage/reviews/2026-09-09-hello-15-stale-reasons-git-hosts.md §5.3, the finding /emojis, /zen and /octocat rest on). SERVING GITHUB'S REAL LIST WAS CONSIDERED AND WITHDRAWN on that licence hold plus the cost: a vendor catalogue reaches a renderer only as ref_catalog_entry rows the compiler writes, so it needs a new flag on a new generation and a cutover, not a wave (decisions/2026-09-14-1152). This is the FIRST GitHub refusal that is not GitHub's own - api.github.com answers 200 here - so the 404 carries a message naming what was attempted and why, rather than a bare Not Found (decisions/2026-09-14-1606)

deferred
Next
GET
/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}

refuse — the name half of the concurrency-group pair: with no group active, GitHub answers 404 for the group that does not exist

deferred
Next
GET
/repos/{owner}/{repo}/actions/jobs/{job_id}/steps/{step_number}/logs

generate — a step's log is a slice of its job's log, and canon's job_log_line carries no step attribution (packages/artifact/src/schema.ts): splitting a job's lines across its steps would be a render-time decision with no canonical origin, the same reason the run-log zip this host serves carries no per-step files. The whole job's log is served at `.../actions/jobs/{job_id}/logs`. The row becomes derive when canon records which step wrote each line (decisions/2026-10-27-2137-github-unclassified-eight.md)

deferred
Next
GET
/repos/{owner}/{repo}/actions/policies/{policy_id}

refuse — the by-id half of an honestly empty list, so no id resolves and GitHub's own answer is its 404: no Actions policy exists at either scope: an Actions policy is a named rule object for workflow execution protection, created by a write (POST .../actions/policies), and this data set has issued none. It is not the ci_policy row the .../actions/permissions family serves, which is the scope's Actions SETTINGS and exists whether or not anyone wrote a policy. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

deferred
Next
GET
/repos/{owner}/{repo}/actions/runners/deprecations/{version}

generateheld · data-licensing — the end-of-life dates of a runner version are GitHub's own release schedule for its runner binary, a fact about GitHub rather than about olympus-labs, which this project holds no grant to redistribute; dates served from a renderer constant would be the request-time vendor catalogue the /vendors ruling forbids, and an answer of null dates would claim GitHub set no schedule. Answers the coverage 404 at the repository scope until a licensed source exists (decisions/2026-10-27-2137-github-unclassified-eight.md)

deferred
Next
GET
/repos/{owner}/{repo}/actions/runners/downloads

refuse — REFUSED 2026-09-14 on the founder's ruling, and it opens a NEW CLASS: the vendor's own downloadable binaries. The runner-application tarballs are a fact about GITHUB rather than about olympus-labs, so no generation of this universe could carry them; RunnerApplication exists to be DOWNLOADED, so a row whose download_url resolves to nothing serves nobody; and the only url that does resolve is github.com's own release asset, which the per-item licence review held there is no grant to redistribute (coverage/reviews/2026-09-09-hello-15-stale-reasons-git-hosts.md §5.3, the finding /emojis, /zen and /octocat rest on). SERVING GITHUB'S REAL LIST WAS CONSIDERED AND WITHDRAWN on that licence hold plus the cost: a vendor catalogue reaches a renderer only as ref_catalog_entry rows the compiler writes, so it needs a new flag on a new generation and a cutover, not a wave (decisions/2026-09-14-1152). This is the FIRST GitHub refusal that is not GitHub's own - api.github.com answers 200 here - so the 404 carries a message naming what was attempted and why, rather than a bare Not Found (decisions/2026-09-14-1606)

deferred
Next
orgs45 of 64 served & verified
GET
/organizations

the org list is the one org this universe carries

served & verified
Core
GET
/orgs/{org}
served & verified
Core
GET
/orgs/{org}/failed_invitations

SERVED 2026-09-09 (hello-16): the pending org memberships WITH `failed_epoch` — reader.listMemberships("org", org) (reader.ts:2961). The failure is the clock's: `failed_epoch` IS `expires_epoch`, so nothing had to be invented to make an invitation fail and `failed_at` can never precede the offer — conformance asserts both, and that every row carries the reason the host printed

served & verified
Core
GET
/orgs/{org}/installations

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Core
GET
/orgs/{org}/invitations

SERVED 2026-09-09 (hello-16): the pending org memberships WITHOUT `failed_epoch` — reader.listMemberships("org", org) (reader.ts:2961). An invitation is a membership that has not happened yet (`state: pending`, which is GitHub's own word for it on `team-membership`), so one column discriminates this surface from /orgs/{org}/failed_invitations and conformance asserts nothing appears on both. `login` and `email` are the pair GitHub types nullable on BOTH members because an invitation names a person or an address; canon sets exactly one, and the entry asserts the biconditional

served & verified
Core
GET
/orgs/{org}/invitations/{invitation_id}/teams

SERVED 2026-09-09 (hello-16): the team a pending membership is scoped to — reader.listMemberships over org, team and repository scope (reader.ts:2961). A team-scoped invitation names its team and an organization-scoped one grants none, which is what `team_count` on the invitation object already says; conformance follows `invitation_teams_url` from every invitation and asserts the count and the list agree. An invitation id nobody holds is GitHub's own 404, not an empty list

served & verified
Core
GET
/orgs/{org}/members
served & verified
Core
GET
/orgs/{org}/members/{username}

membership check over team_member

served & verified
Core
GET
/orgs/{org}/memberships/{username}

SERVED 2026-09-09 (hello-16): reader.membershipFor("org", org, person) (packages/artifact/src/reader.ts:2977), validated against the vendored `org-membership`. Canon's five role keys collapse to GitHub's two — `owner` and `admin` both report `admin`, which is what GitHub itself reports for an organization owner — and `state` is canon's own word for the same fact. `permissions` is OMITTED rather than invented: its one member is `can_create_repository` and canon records no such grant. A login the organization does not carry is GitHub's own 404, which is what /orgs/{org}/members/{username} already answers for it

served & verified
Core
GET
/orgs/{org}/outside_collaborators

NOBODY IN THIS UNIVERSE IS OUTSIDE THE ORGANIZATION. The 2026-09-01 classification guessed the opposite — 'canon already marks outside contributors (Person.member = false)' — and no row satisfies it: every person carries member = 1, so `orgMembers()` and `listPeople()` return the same set and the outside-collaborator list is truthfully empty. It is also the fact the collaborator endpoints already publish, since `/repos/{o}/{r}/collaborators?affiliation=outside` answers `[]` for the same reason. Falsifiable: the day the generator gives the org a contributor with member = 0, this row goes red rather than hiding them. RULED by the founder 2026-09-09

served & verified
Core
GET
/orgs/{org}/public_members

SERVED 2026-09-09 (hello-16): reader.listMemberships("org", org) (reader.ts:2961), narrowed to the active rows whose `publicized` bit is set. `publicized` is the ONE drawn preference in the access domain (the `disableSsh` exception) and is roughly half the roster, so this is neither the member list under a second name nor an empty one — the conformance entry asserts both bounds against /orgs/{org}/members and that every public login is a member. Paginated with GitHub's Link header, walked to the last page

served & verified
Core
GET
/orgs/{org}/public_members/{username}

SERVED 2026-09-09 (hello-16): reader.membershipFor("org", org, person) (reader.ts:2977). GitHub answers this operation with a STATUS and no body — its documented 204 when the membership is public and its 404 when it is not — so the conformance entry asserts the three-way outcome (public 204, member-who-does-not-publicise 404, stranger 404) rather than a schema

served & verified
Core
GET
/orgs/{org}/settings/immutable-releases/repositories

immutable releases are not enabled on olympus-labs/parthenon — its three `release` rows carry no immutability marker and canon has no repository release-immutability setting; GitHub's own answer for a repository where immutable releases are not enabled is 404 with no body (the spec's own 404 description), and the ORGANIZATION's selected-repository list is therefore an empty `{total_count: 0, repositories: []}` at 200. RULED by the founder 2026-09-12

served & verified
Core
GET
/user/memberships/orgs

SERVED 2026-09-09 (hello-16): reader.membershipsForPerson(athena) (reader.ts:2969) narrowed to org scope — athena is the caller GET /user already reports, and conformance asserts the two agree. `?state=` is really honored: the pending page is empty rather than the active row, and a value outside the enum is an explicit 400 instead of an unfiltered 200 (DECISIONS 2026-08-21)

served & verified
Core
GET
/user/memberships/orgs/{org}

SERVED 2026-09-09 (hello-16): the same membership addressed by organization — reader.membershipFor("org", org, athena) (reader.ts:2977), byte-identical to the row the listing serves. An organization this host does not serve is GitHub's own 404

served & verified
Core
GET
/user/orgs
served & verified
Core
GET
/users/{username}/orgs
served & verified
Core
GET
/orgs/{org}/hooks

SERVED 2026-09-12 (hello-18 serving wave W-c): off `webhook_subscription`'s hello-18 git-host scopes (features.webhookFilters) through reader.orgWebhooks(), gated on hasWebhookFilters() so hello-17 and all eighty-one -g8..-g11 pins name the generation instead of claiming this organization configured no webhook. Canon stores NEUTRAL event names and this renderer spells them GitHub's way - ref.pushed->push, change.opened/change.merged->pull_request, issue.opened/issue.closed->issues, build.completed->check_run - many-to-one because GitHub subscribes by event NAME and puts the verb in the payload's `action`. The account-wide feed, a DIFFERENT row from PagerDuty's account-scoped subscription - which is why canon's filter vocabulary carries both scopes and why listWebhookSubscriptions() is scoped to the alerting kinds in the same PR as the widening.

served & verified
Next
GET
/orgs/{org}/hooks/{hook_id}

SERVED 2026-09-12 (hello-18 serving wave W-c): off `webhook_subscription`'s hello-18 git-host scopes (features.webhookFilters) through reader.orgWebhooks(), gated on hasWebhookFilters() so hello-17 and all eighty-one -g8..-g11 pins name the generation instead of claiming this organization configured no webhook. Canon stores NEUTRAL event names and this renderer spells them GitHub's way - ref.pushed->push, change.opened/change.merged->pull_request, issue.opened/issue.closed->issues, build.completed->check_run - many-to-one because GitHub subscribes by event NAME and puts the verb in the payload's `action`. `org-hook` is a DIFFERENT schema from `hook` and the differences are honoured: it declares neither test_url nor last_response, so neither is emitted even though the row carries the delivery columns.

served & verified
Next
GET
/orgs/{org}/hooks/{hook_id}/config

SERVED 2026-09-12 (hello-18 serving wave W-c): off `webhook_subscription`'s hello-18 git-host scopes (features.webhookFilters) through reader.orgWebhooks(), gated on hasWebhookFilters() so hello-17 and all eighty-one -g8..-g11 pins name the generation instead of claiming this organization configured no webhook. Canon stores NEUTRAL event names and this renderer spells them GitHub's way - ref.pushed->push, change.opened/change.merged->pull_request, issue.opened/issue.closed->issues, build.completed->check_run - many-to-one because GitHub subscribes by event NAME and puts the verb in the payload's `action`. The same `webhook-config` the repository pair serves, off the organization's own row - and conformance asserts the two scopes advertise DIFFERENT delivery URLs, because canon picks the receiver by scope.

served & verified
Next
GET
/orgs/{org}/hooks/{hook_id}/deliveries

SERVED 2026-09-14 (hello-20 wave W-github): the App's own hook is a webhook_subscription at a FOURTH SCOPE (filter_kind app_reference), not a new table - hello-18 already settled that a repository hook, an organization hook and a namespace hook are the same object at three scopes - and features.githubApp mints webhook_delivery, bounded at the last three deliveries per subscription. A delivery that happened has a log entry, which is what hello-18's own last_delivery_code column already asserted. duration is 0 on every row and that is a ruling rather than a gap: this universe's clock is whole seconds, so a delivery's request and response fall inside one recorded instant and its duration is below the resolution this universe measures at (decisions/2026-09-14-0345)

served & verified
Next
GET
/orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}

SERVED 2026-10-27 (hello-23 deliveryEvents, founder ruling F3, decisions/2026-10-27-2218 and decisions/2026-10-27-2310): the organization hook's delivery in full, composed exactly as the repository twin's: the list's item plus the request (the event body as of the delivery instant, the signed headers) and a null response. A check_run delivery answers the coverage 404 with its reason. Older artifacts answer the hello-23 generation gap

served & verified
Next
GET
/orgs/{org}/attestations/{subject_digest}

no artifact in this universe is attested — all 392 `artifact` rows are plain workflow-run uploads with no provenance bundle and none of the three workflows (`ci`, `lint`, `release`) runs an attestation step; GitHub's own answer for a subject digest with no attestations is `{attestations: []}` at 200 (the spec's 200 has NO required member). The operation also declares a 404 and the ORCHESTRATOR RULED the 200: a digest is a content address rather than a resource id, so asking about an artifact nobody signed is a well-formed question whose answer is "none". RULED by the founder 2026-09-12

served & verified
Long tail
GET
/orgs/{org}/attestations/repositories

no artifact in this universe is attested — all 392 `artifact` rows are plain workflow-run uploads with no provenance bundle and none of the three workflows (`ci`, `lint`, `release`) runs an attestation step; this operation's own 200 is a bare array of the repositories that have attestations, so its empty answer is `[]` rather than the `{attestations: []}` envelope the by-digest reads carry. RULED by the founder 2026-09-12

served & verified
Long tail
GET
/orgs/{org}/blocks

nobody is blocked in this universe: the org's cast is its own employees and the outside contributors it works with, and a block only exists because someone created it

served & verified
Long tail
GET
/orgs/{org}/insights/api/subject-stats

this replica records no request of its own, and nobody has viewed or cloned these repositories from outside - an API-insight or a traffic count would be a number with no fact behind it, which is the held-vs-invent line SPEC:220 draws. The scope resolves, so the honest answer is the report with an empty series (and, where the report carries them, the two zero counts that say the same thing) at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/insights/api/time-stats

this replica records no request of its own, and nobody has viewed or cloned these repositories from outside - an API-insight or a traffic count would be a number with no fact behind it, which is the held-vs-invent line SPEC:220 draws. The scope resolves, so the honest answer is the report with an empty series (and, where the report carries them, the two zero counts that say the same thing) at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/issue-fields

one of twenty things nobody in this organization did: no org custom property was defined, no repository carries a value for one, no org issue field exists, no autolink was configured, and this replica keeps no global topic index of its own. The scope resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/issue-types

STALE REASON ("new canon entity IssueType"): there is no entity to build. GitHub's issue type is a NAME plus a nullable description, and the set this organization offers IS `select distinct kind from issue` — a closed canon vocabulary (bug, feature-request, incident, question, task) present in every generation. Conformance cross-checks the published list against every issue's kind in BOTH directions, so a type nothing can be and a kind nothing advertises are each red

served & verified
Long tail
GET
/orgs/{org}/organization-roles

SERVED 2026-09-09 (hello-16): reader.listMembershipRoles() (reader.ts:2985) in GitHub's `{total_count, roles}` envelope. Five catalog ROWS rather than an enum rendered at request time: the vendored `organization-role` REQUIRES a `permissions` array, and a permission list composed inside a renderer is a fact invented at serving time. `permissions` is canon's closed `scope:level` vocabulary, which the schema types `array<string>` with no enum; `base_role` is GitHub's own enum and is read off the same list's repository rung, so the two cannot disagree — conformance recomputes it

served & verified
Long tail
GET
/orgs/{org}/organization-roles/{role_id}

SERVED 2026-09-09 (hello-16): the same catalog row by id — reader.listMembershipRoles() (reader.ts:2985) addressed by githubId(MembershipRoleRow.id), byte-identical to the row the catalog serves. An id the catalog does not carry is GitHub's own 404

served & verified
Long tail
GET
/orgs/{org}/organization-roles/{role_id}/teams

no team holds a custom organization role: the access domain attaches a role to a PERSON on their own membership (reader.listMemberships, packages/artifact/src/reader.ts:2961) and to nothing else, which is the same statement `user-role-assignment.assignment: direct` and its empty `inherited_from` make from the other side on the sibling row served 2026-09-09. SERVED 2026-09-10 as GitHub's empty array, behind the hello-16 generation gate and behind the role guard — an id the catalog does not carry is still GitHub's own 404 — RULED EMPTY by the founder 2026-09-10

served & verified
Long tail
GET
/orgs/{org}/organization-roles/{role_id}/users

SERVED 2026-09-09 (hello-16): the active org memberships whose role is this catalog row's key — reader.listMemberships("org", org) (reader.ts:2961). Conformance asserts the holders of all five roles TOGETHER are exactly the member list, so the catalog partitions the organization rather than covering part of it. `maintainer` and `reader` have no holders at org scope — maintainer is repository-scoped here and this universe has no outside contributor — which is a fact about the organization, not a gap

served & verified
Long tail
GET
/orgs/{org}/personal-access-token-requests

SERVED 2026-09-12 (hello-17): reader.credentialRequests() behind reader.hasCallerCredentials(), validated against `organization-programmatic-access-grant-request`. THE hello-16 ASK IS ANSWERED: that wave said canon modelled no pending token request, and hello-17 adds "pending" to CredentialState with a request_reason column (decisions/2026-09-11-0151) — the org's newest engineer asks for the scope their first blocked act needed, at the instant of that act. THE ROWS ARE REACHABLE THROUGH ONE ACCESSOR AND NOWHERE ELSE: credentialScope() excludes `pending` from credentialsForPerson and listCredentials, so /orgs/{org}/personal-access-tokens cannot serve a request as a grant by forgetting a filter, and conformance asserts the two ledgers share no token_id and no id. `token_expired: false`, `token_expires_at: null` and `token_last_used_at: null` are not defaults — the generator throws if a pending row carries an expiry, an end or a use, because a request has never been a token. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Long tail
GET
/orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories

SERVED 2026-09-12 (hello-17): what the requested token would reach. `repository_selection` is `all` for the reason the granted twin gives — canon's personal-token acts as its owner everywhere its owner can act and carries no scope_ref, and every repository here belongs to the organization — so the answer is the organization's repositories through the same orgReposResponse /orgs/{org}/personal-access-tokens/{pat_id}/repositories uses. One request, one answer, and the two routes cannot describe different repositories; conformance asserts they agree and that an unminted pat_request_id is a 404. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Long tail
GET
/orgs/{org}/personal-access-tokens

SERVED 2026-09-09 (hello-16): reader.listCredentials("personal-token") (reader.ts:3026), validated against `organization-programmatic-access-grant`. Every repository in this universe belongs to the organization, so every personal token that reaches a repository reaches an organization resource and no scope filter had to be invented to decide which tokens count. Canon's provider-neutral `TokenScope`s are mapped ONCE, in packages/renderer-github/src/render-credentials.ts, into GitHub's fine-grained `{organization, repository, other}` permission spelling (the WorkflowStateKey precedent), and the table is TOTAL — an unmapped scope throws rather than being silently dropped. METADATA ONLY: a token's value is shown once at creation by the provider we replicate reads of, so canon holds none (the PagerDuty routing-key rule, DECISIONS 2026-09-03) and conformance asserts no served byte is shaped like one

served & verified
Long tail
GET
/orgs/{org}/personal-access-tokens/{pat_id}/repositories

SERVED 2026-09-09 (hello-16): what a granted token reaches. `repository_selection` is `all` on every grant — a personal token acts as its owner wherever its owner can act and carries no `scope_ref` — so the answer is the organization's repositories through the same shaper /orgs/{org}/repos uses, and conformance asserts the two lists are identical. `pat_id` is the GRANT's own id and not the token's: the two are distinct numbers on one object, and the entry asserts the token id does NOT address it

served & verified
Long tail
GET
/orgs/{org}/properties/installations

no GitHub App installation is registered for external custom properties: a registration needs an App holding the organization_external_properties_for_repos permission, and the one App in this data set holds checks, contents and metadata only (app_permission, served at /app); no custom property exists here either. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

served & verified
Long tail
GET
/orgs/{org}/properties/installations/schema

no GitHub App installation is registered for external custom properties, so no installation has defined one: a registration needs an App holding the organization_external_properties_for_repos permission, and the one App in this data set holds checks, contents and metadata only (app_permission, served at /app). The documented answer for an installation that defined none is the empty array at 200, which `/orgs/{org}/properties/installations` beside it already answers for the same fact. The organization still resolves: an unknown one is the ordinary 404 (decisions/2026-10-27-2137-github-unclassified-eight.md)

served & verified
Long tail
GET
/orgs/{org}/properties/schema

one of twenty things nobody in this organization did: no org custom property was defined, no repository carries a value for one, no org issue field exists, no autolink was configured, and this replica keeps no global topic index of its own. The scope resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/properties/values

one of twenty things nobody in this organization did: no org custom property was defined, no repository carries a value for one, no org issue field exists, no autolink was configured, and this replica keeps no global topic index of its own. The scope resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/rulesets

no ruleset exists at either scope — canon's only ref-protection rows (`protected_ref`, 2) are scoped to `namespace-001`, a container GitHub has no counterpart for, and repo-01 carries an empty `namespace` column; classic branch protection on `main` (branch.protected=1, served by render-protection.ts) is GitHub's OTHER mechanism and does not imply a ruleset, so GitHub's own answer for a scope with no rulesets is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Long tail
GET
/orgs/{org}/rulesets/rule-suites

no ruleset exists at either scope — canon's only ref-protection rows (`protected_ref`, 2) are scoped to `namespace-001`, a container GitHub has no counterpart for, and repo-01 carries an empty `namespace` column; classic branch protection on `main` (branch.protected=1, served by render-protection.ts) is GitHub's OTHER mechanism and does not imply a ruleset, so GitHub's own answer for a scope with no rulesets is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Long tail
GET
/orgs/{org}/security-managers

no security managers are configured: `membership` records what each membership GRANTS and MEMBERSHIP_PERMISSIONS (packages/canon/src/access.ts) has no security rung at all — org, team, repo and namespace, five levels each — so naming a team here would hand it a grant nothing in this universe made. SERVED 2026-09-10 as GitHub's empty array, behind the hello-16 generation gate; falsifiable the day canon confers the authority — RULED EMPTY by the founder 2026-09-10

served & verified
Long tail
GET
/orgs/{org}/settings/network-configurations

nobody launched a codespace, configured hosted-compute networking or registered a private registry - the last is hello-19's founder ruling F3 verbatim (olympus-labs runs no private package registry), which three already-terminal Dependabot rows rest on. The organization resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/settings/immutable-releases

refuse — one of twenty things nobody in this organization did: no custom property, no autolink, no interaction limit, no immutable-release setting and no pull-request stack was ever created, so nothing here is addressable by name or number. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Core
GET
/orgs/{org}/artifacts/{subject_digest}/metadata/deployment-records

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/artifacts/{subject_digest}/metadata/storage-records

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/artifacts/metadata/deployment-record/cluster/{cluster}/jobs/{job_id}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/blocks/{username}

refuse — the id half of the org block pair: with nobody blocked, GitHub answers 404 to the per-user block check

planned
Long tail
GET
/orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}

refuse — this replica records no request of its own, so no actor and no user has an API-insight statistic to read - the subject and interval COLLECTIONS beside this row answer the empty list at 200, and a row addressed through an actor id over them cannot resolve. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/insights/api/summary-stats

refuse — this replica records no request of its own, so no actor and no user has an API-insight statistic to read - the subject and interval COLLECTIONS beside this row answer the empty list at 200, and a row addressed through an actor id over them cannot resolve. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/insights/api/summary-stats/{actor_type}/{actor_id}

refuse — this replica records no request of its own, so no actor and no user has an API-insight statistic to read - the subject and interval COLLECTIONS beside this row answer the empty list at 200, and a row addressed through an actor id over them cannot resolve. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/insights/api/summary-stats/users/{user_id}

refuse — this replica records no request of its own, so no actor and no user has an API-insight statistic to read - the subject and interval COLLECTIONS beside this row answer the empty list at 200, and a row addressed through an actor id over them cannot resolve. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/insights/api/time-stats/{actor_type}/{actor_id}

refuse — this replica records no request of its own, so no actor and no user has an API-insight statistic to read - the subject and interval COLLECTIONS beside this row answer the empty list at 200, and a row addressed through an actor id over them cannot resolve. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/insights/api/time-stats/users/{user_id}

refuse — this replica records no request of its own, so no actor and no user has an API-insight statistic to read - the subject and interval COLLECTIONS beside this row answer the empty list at 200, and a row addressed through an actor id over them cannot resolve. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/insights/api/user-stats/{user_id}

refuse — this replica records no request of its own, so no actor and no user has an API-insight statistic to read - the subject and interval COLLECTIONS beside this row answer the empty list at 200, and a row addressed through an actor id over them cannot resolve. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/properties/schema/{custom_property_name}

refuse — one of twenty things nobody in this organization did: no custom property, no autolink, no interaction limit, no immutable-release setting and no pull-request stack was ever created, so nothing here is addressable by name or number. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/rulesets/{ruleset_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/rulesets/{ruleset_id}/history

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/rulesets/{ruleset_id}/history/{version_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/rulesets/rule-suites/{rule_suite_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/settings/network-configurations/{network_configuration_id}

refuse — nobody launched a codespace, configured hosted-compute networking or registered a private registry, so nothing here is addressable: this row reads a registry by name, a network configuration by id, or a codespace default for a repository nobody has ever started one in. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/orgs/{org}/settings/network-settings/{network_settings_id}

refuse — nobody launched a codespace, configured hosted-compute networking or registered a private registry, so nothing here is addressable: this row reads a registry by name, a network configuration by id, or a codespace default for a repository nobody has ever started one in. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
repos31 of 40 served & verified
GET
/orgs/{org}/repos
served & verified
Core
GET
/repos/{owner}/{repo}
served & verified
Core
GET
/repos/{owner}/{repo}/activity
served & verified
Core
GET
/repos/{owner}/{repo}/codeowners/errors

SERVED 2026-09-12 (hello-17 `repoOwnership`): {errors: []} for a file that EXISTS and PARSES. hello-17 puts .github/CODEOWNERS in the tree (decisions/2026-09-11-2256 — one line per subsystem naming the team the service catalogue says is paged for it, at GitHub's own canonical location, which is also the cheapest placement in a content-addressed tree). THE FILE IS PARSED, NOT ASSUMED: packages/renderer-github/src/render-codeowners.ts reads the blob and checks the two things this artifact can ground — an owner token that is not @login, @org/team or an address is GitHub's `Invalid owner`, and one that names no team, login or address this host carries is its `Unknown owner` — and emits nothing else, because inventing GitHub's wording for a rule we cannot evaluate would be a placeholder wearing an error's clothes. A hard-coded empty array would assert the file parses without ever opening it, so conformance re-reads the blob, asserts it carries rules, resolves every @org/team against /orgs/{org}/teams and asserts every owned path prefix has files under it. On an artifact whose tree carries no CODEOWNERS the row answers the hello-17 generation gap rather than GitHub's 404, because a repository without the file and a universe that predates it deserve different sentences (noRepoLicense's argument one generation on)

served & verified
Core
GET
/repos/{owner}/{repo}/contents/{path}
served & verified
Core
GET
/repos/{owner}/{repo}/contributors
served & verified
Core
GET
/repos/{owner}/{repo}/forks

no repository in this universe is a fork and none has been forked: the org owns every repo and there is no account outside it to fork into

served & verified
Core
GET
/repos/{owner}/{repo}/hash-algorithm
served & verified
Core
GET
/repos/{owner}/{repo}/languages
served & verified
Core
GET
/repos/{owner}/{repo}/readme
served & verified
Core
GET
/repos/{owner}/{repo}/readme/{dir}

SERVED 2026-09-12 (hello-17 `repoOwnership`): the content-file object for tools/README.md, read through the same fileAt/shapeContentFile path /repos/{o}/{r}/contents/{path} uses — one blob, one answer, whichever route asks, which conformance asserts by comparing the two objects. hello-17 puts a README inside a directory for the first time (decisions/2026-09-11-2256): tools/ holds probe/ and report/, both real programs with real source in the tree, so every sentence in the document names something a caller can open — which is the whole reason a folder README is safe to write (invariant #5), and conformance checks it. A DIRECTORY WITH NO README IS GITHUB'S OWN 404 and carries no coverage header: /readme/src is a fact about that directory rather than a gap, and conformance asserts both. An artifact whose tree carries neither ownership file answers the hello-17 generation gap instead, because on it NO directory has a README and the row is unanswerable rather than negative

served & verified
Core
GET
/repos/{owner}/{repo}/tags
served & verified
Core
GET
/repos/{owner}/{repo}/tarball/{ref}

the file model already carries the tree, so the archive is a ustar+gzip container around the same blobs the contents endpoints and the git transport serve; the documented 302 is simulated in-app (founder ruling 2026-09-02) and the Location names the resolved commit sha

served & verified
Core
GET
/repos/{owner}/{repo}/teams
served & verified
Core
GET
/repos/{owner}/{repo}/topics

STALE REASON ("new canon entity RepoTopic"): there is no entity to build. `repo.topics_json` holds the list and `shapeRepo` has published it inside the repository object since GitHub coverage began; `topic`'s one required member is `names`, and conformance asserts the standalone list and the embedded one agree

served & verified
Core
GET
/repos/{owner}/{repo}/zipball/{ref}

the zip half of the tarball row: the same tree, the same blobs, deflated into a zip container; the documented 302 is simulated in-app (founder ruling 2026-09-02)

served & verified
Core
GET
/repositories
served & verified
Core
GET
/user/repos
served & verified
Core
GET
/users/{username}/repos
served & verified
Core
GET
/repos/{owner}/{repo}/hooks

SERVED 2026-09-12 (hello-18 serving wave W-c): off `webhook_subscription`'s hello-18 git-host scopes (features.webhookFilters) through reader.repoWebhooks(), gated on hasWebhookFilters() so hello-17 and all eighty-one -g8..-g11 pins name the generation instead of claiming this organization configured no webhook. Canon stores NEUTRAL event names and this renderer spells them GitHub's way - ref.pushed->push, change.opened/change.merged->pull_request, issue.opened/issue.closed->issues, build.completed->check_run - many-to-one because GitHub subscribes by event NAME and puts the verb in the payload's `action`. The repository object has advertised `hooks_url` since wave A and it finally resolves; conformance walks the page and asserts it.

served & verified
Next
GET
/repos/{owner}/{repo}/hooks/{hook_id}

SERVED 2026-09-12 (hello-18 serving wave W-c): off `webhook_subscription`'s hello-18 git-host scopes (features.webhookFilters) through reader.repoWebhooks(), gated on hasWebhookFilters() so hello-17 and all eighty-one -g8..-g11 pins name the generation instead of claiming this organization configured no webhook. Canon stores NEUTRAL event names and this renderer spells them GitHub's way - ref.pushed->push, change.opened/change.merged->pull_request, issue.opened/issue.closed->issues, build.completed->check_run - many-to-one because GitHub subscribes by event NAME and puts the verb in the payload's `action`. Byte-identical to the object the list publishes - one shaper - and the ORGANIZATION's hook id 404s here, which is the scope separation reader.repoWebhooks() enforces one layer down.

served & verified
Next
GET
/repos/{owner}/{repo}/hooks/{hook_id}/config

SERVED 2026-09-12 (hello-18 serving wave W-c): off `webhook_subscription`'s hello-18 git-host scopes (features.webhookFilters) through reader.repoWebhooks(), gated on hasWebhookFilters() so hello-17 and all eighty-one -g8..-g11 pins name the generation instead of claiming this organization configured no webhook. Canon stores NEUTRAL event names and this renderer spells them GitHub's way - ref.pushed->push, change.opened/change.merged->pull_request, issue.opened/issue.closed->issues, build.completed->check_run - many-to-one because GitHub subscribes by event NAME and puts the verb in the payload's `action`. `config` is the same object the hook embeds: url is the delivery_url column, insecure_ssl is READ OFF that URL's scheme, secret is GitHub's own eight-asterisk redaction (the renderer-circleci signing_secret precedent - canon stores no secret because every host redacts it), and content_type is json because these receivers are the org's own ReceiverSlots, into which PagerDuty and CircleCI already deliver JSON and can deliver nothing else.

served & verified
Next
GET
/repos/{owner}/{repo}/hooks/{hook_id}/deliveries

SERVED 2026-09-14 (hello-20 wave W-github): the App's own hook is a webhook_subscription at a FOURTH SCOPE (filter_kind app_reference), not a new table - hello-18 already settled that a repository hook, an organization hook and a namespace hook are the same object at three scopes - and features.githubApp mints webhook_delivery, bounded at the last three deliveries per subscription. A delivery that happened has a log entry, which is what hello-18's own last_delivery_code column already asserted. duration is 0 on every row and that is a ruling rather than a gap: this universe's clock is whole seconds, so a delivery's request and response fall inside one recorded instant and its duration is below the resolution this universe measures at (decisions/2026-09-14-0345)

served & verified
Next
GET
/repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}

SERVED 2026-10-27 (hello-23 deliveryEvents, founder ruling F3, decisions/2026-10-27-2218 and decisions/2026-10-27-2310): the list's own hook-delivery-item plus request and response. webhook_delivery_event links each delivery to its event and subject, and the payload is composed at request time as of the delivery instant: a push carries its one commit and the files it changed, an issues or pull_request payload shows the object as it stood at that second. Request headers carry the list's guid as X-GitHub-Delivery and an X-Hub-Signature-256 under a sandbox key that is never published; response.headers and response.payload are null because the receiver's answer was never recorded. A check_run delivery answers the coverage 404, because its subject is a commit status here and no check run resolves. Older artifacts answer the hello-23 generation gap

served & verified
Next
GET
/repos/{owner}/{repo}/attestations/{subject_digest}

no artifact in this universe is attested — all 392 `artifact` rows are plain workflow-run uploads with no provenance bundle and none of the three workflows (`ci`, `lint`, `release`) runs an attestation step; GitHub's own answer for a subject digest with no attestations is `{attestations: []}` at 200 (the spec's 200 has NO required member). The operation also declares a 404 and the ORCHESTRATOR RULED the 200: a digest is a content address rather than a resource id, so asking about an artifact nobody signed is a well-formed question whose answer is "none". RULED by the founder 2026-09-12

served & verified
Long tail
GET
/repos/{owner}/{repo}/autolinks

one of twenty things nobody in this organization did: no org custom property was defined, no repository carries a value for one, no org issue field exists, no autolink was configured, and this replica keeps no global topic index of its own. The scope resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/issue-types

STALE REASON ("new canon entity IssueType"): there is no entity to build. GitHub's issue type is a NAME plus a nullable description, and the set this organization offers IS `select distinct kind from issue` — a closed canon vocabulary (bug, feature-request, incident, question, task) present in every generation. Conformance cross-checks the published list against every issue's kind in BOTH directions, so a type nothing can be and a kind nothing advertises are each red

served & verified
Long tail
GET
/repos/{owner}/{repo}/properties/values

one of twenty things nobody in this organization did: no org custom property was defined, no repository carries a value for one, no org issue field exists, no autolink was configured, and this replica keeps no global topic index of its own. The scope resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/rules/branches/{branch}

no ruleset exists at either scope — canon's only ref-protection rows (`protected_ref`, 2) are scoped to `namespace-001`, a container GitHub has no counterpart for, and repo-01 carries an empty `namespace` column; classic branch protection on `main` (branch.protected=1, served by render-protection.ts) is GitHub's OTHER mechanism and does not imply a ruleset, so GitHub's own answer for a scope with no rulesets is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Long tail
GET
/repos/{owner}/{repo}/rulesets

no ruleset exists at either scope — canon's only ref-protection rows (`protected_ref`, 2) are scoped to `namespace-001`, a container GitHub has no counterpart for, and repo-01 carries an empty `namespace` column; classic branch protection on `main` (branch.protected=1, served by render-protection.ts) is GitHub's OTHER mechanism and does not imply a ruleset, so GitHub's own answer for a scope with no rulesets is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Long tail
GET
/repos/{owner}/{repo}/rulesets/rule-suites

no ruleset exists at either scope — canon's only ref-protection rows (`protected_ref`, 2) are scoped to `namespace-001`, a container GitHub has no counterpart for, and repo-01 carries an empty `namespace` column; classic branch protection on `main` (branch.protected=1, served by render-protection.ts) is GitHub's OTHER mechanism and does not imply a ruleset, so GitHub's own answer for a scope with no rulesets is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Long tail
GET
/repos/{owner}/{repo}/automated-security-fixes

refuse — no GitHub security product is enabled on olympus-labs/parthenon — canon carries no security-finding entity and no code-security configuration, and the org's only repository is private; GitHub's own answer for a repository not enabled with vulnerability alerts is 404 with no body (the spec declares only 204 and 404 for this operation). RULED by the founder 2026-09-12

planned
Core
GET
/repos/{owner}/{repo}/immutable-releases

refuse — immutable releases are not enabled on olympus-labs/parthenon — its three `release` rows carry no immutability marker and canon has no repository release-immutability setting; GitHub's own answer for a repository where immutable releases are not enabled is 404 with no body (the spec's own 404 description). The renderer answers the `basic-error` body every GitHub 404 on this host carries, pointing at THIS operation's docs page: the spec declares no schema for the 404, and GitHub's API never sends a bodyless one. RULED by the founder 2026-09-12

planned
Core
GET
/repos/{owner}/{repo}/private-vulnerability-reporting

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Core
GET
/repos/{owner}/{repo}/vulnerability-alerts

refuse — no GitHub security product is enabled on olympus-labs/parthenon — canon carries no security-finding entity and no code-security configuration, and the org's only repository is private; GitHub's own answer for a repository not enabled with vulnerability alerts is 404 with no body (the spec declares only 204 and 404 for this operation). RULED by the founder 2026-09-12

planned
Core
GET
/repos/{owner}/{repo}/autolinks/{autolink_id}

refuse — one of twenty things nobody in this organization did: no custom property, no autolink, no interaction limit, no immutable-release setting and no pull-request stack was ever created, so nothing here is addressable by name or number. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/repos/{owner}/{repo}/rulesets/{ruleset_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/repos/{owner}/{repo}/rulesets/{ruleset_id}/history

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
GET
/repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Long tail
issues28 of 31 served & verified
GET
/issues

issue lists across the repo, org and authenticated persona

served & verified
Core
GET
/orgs/{org}/issues

issue lists across the repo, org and authenticated persona

served & verified
Core
GET
/repos/{owner}/{repo}/assignees

assignable users are the repo's collaborators; assignment is already on the issue

served & verified
Core
GET
/repos/{owner}/{repo}/assignees/{assignee}

assignable users are the repo's collaborators; assignment is already on the issue

served & verified
Core
GET
/repos/{owner}/{repo}/issues
served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}
served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}

assignable users are the repo's collaborators; assignment is already on the issue

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/comments
served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by

SERVED 2026-09-12 (hello-17): reader.linksFor(issue) narrowed to `blocks` rows whose TARGET is this issue — the prerequisites that finished before it started. hello-17 `issueLinks` (decisions/2026-09-11-0200) groups issues by (epic, sprint) — a team's slice of one storyline inside one iteration, the tightest grouping the tracker already holds — and writes ONE row per adjacent pair, whose kind the dates decide: `blocks` when the earlier issue closed strictly before the later one opened, `relates` otherwise. One row per pair is what makes "no link is its own inverse" true by construction rather than by a filter, and the direction is read off source/target. Conformance re-derives the canon rule on the wire: every blocker must be closed, and closed strictly before the asking issue was created. A pull-request number carries no dependency and is GitHub's 404, because canon links issues to issues

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking

SERVED 2026-09-12 (hello-17): the same rows read from the other end — `blocks` links whose SOURCE is this issue. hello-17 `issueLinks` (decisions/2026-09-11-0200) groups issues by (epic, sprint) — a team's slice of one storyline inside one iteration, the tightest grouping the tracker already holds — and writes ONE row per adjacent pair, whose kind the dates decide: `blocks` when the earlier issue closed strictly before the later one opened, `relates` otherwise. One row per pair is what makes "no link is its own inverse" true by construction rather than by a filter, and the direction is read off source/target. Conformance asserts the pair agrees: the issue a blocked_by row names must report blocking the issue that named it, which is the one-row-per-pair claim checked from both sides

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/events
served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/issue-field-values

olympus-labs defines no issue field — canon's only custom-field table (`custom_field`, 8 rows) is scoped to `incident`, so no issue can carry a value for one; GitHub's own answer for an issue with no field values is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/labels
served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/parent

SERVED 2026-10-27 (hello-23 issueParents, founder ruling F2 (a), decisions/2026-10-27-2222 and decisions/2026-10-27-2310): the issue_parent row of this child (reader.parentIssueOf), shaped as the issue object. A parent is an existing issue: within an epic, the earliest-filed story is the parent of the tasks and bugs filed after it while it was open, one level deep and in the same repository. An issue with no parent and a pull-request number answer GitHub's 404, the not_found response the pinned description lists. Older artifacts answer the hello-23 generation gap

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/relates_to

SERVED 2026-10-23 (fleet reserve): reader.linksFor(issue) narrowed to `relates` rows, from EITHER end, because a relates link has no direction GitHub publishes. hello-17 `issueLinks` (decisions/2026-09-11-0200) writes one row per adjacent pair in an (epic, sprint) slice and calls it `relates` when the earlier issue had not closed before the later one opened, so conformance re-derives that rule on the wire: every related issue overlaps the asking one in time, and the asking issue appears in each related issue's own list. A pull-request number carries no link and is GitHub's 404

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/sub_issues

SERVED 2026-10-27 (hello-23 issueParents, founder ruling F2 (a), decisions/2026-10-27-2222 and decisions/2026-10-27-2310): the issue_parent rows naming this issue as parent (reader.subIssuesOf), in the order the children were filed. An issue with no children answers [], which on a generation that carries the table is a fact about this tracker; the 30 d recipe has none. The issue object's sub_issues_summary and parent_issue_url are read off the same rows. Older artifacts answer the hello-23 generation gap

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/suggestions

no issue in this universe carries a Copilot suggestion — canon's AI telemetry attributes work to commits (`ai_commit`, 110), pulls (`ai_pull`, 14) and sessions (`agent_session`, 72) and never to an issue; GitHub's own answer for an issue with no suggestions is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Core
GET
/repos/{owner}/{repo}/issues/{issue_number}/timeline

the timeline is the projection of comments, events, transitions and cross-references canon already carries

served & verified
Core
GET
/repos/{owner}/{repo}/issues/comments

repo-wide issue comments over issue_comment (122-hit demand cluster, telemetry 2026-09-01)

served & verified
Core
GET
/repos/{owner}/{repo}/issues/comments/{comment_id}
served & verified
Core
GET
/repos/{owner}/{repo}/issues/events

issue events over the canonical event log and issue_transition

served & verified
Core
GET
/repos/{owner}/{repo}/issues/events/{event_id}

issue events over the canonical event log and issue_transition

served & verified
Core
GET
/repos/{owner}/{repo}/labels
served & verified
Core
GET
/repos/{owner}/{repo}/labels/{name}
served & verified
Core
GET
/repos/{owner}/{repo}/milestones
served & verified
Core
GET
/repos/{owner}/{repo}/milestones/{milestone_number}
served & verified
Core
GET
/repos/{owner}/{repo}/milestones/{milestone_number}/labels

labels over issue_label/label

served & verified
Core
GET
/user/issues

issue lists across the repo, org and authenticated persona

served & verified
Core
POST
/repos/{owner}/{repo}/issues

scratch — ACCEPTED into the per-key 24-hour overlay for a scratch-enabled key: 201 + GitHub's own `issue` object + `Location`, validated against the vendored OpenAPI by packages/conformance/src/github/scratch.test.ts. The NUMBER is minted off the shared issue/pull sequence GitHub really uses - `max(issue.number, pull.number) + N` for this key's Nth scratch issue in this repository - so it can never collide with a real one, and two keys on the same repo mint the same numbers and never see each other's rows. The AUTHOR is an existing canonical persona chosen deterministically per (key, repository) from the repo's collaborators (founder ruling 2), so `user.login` resolves at `/users/{login}` like every other user object; the response says who you were rendered as in `X-SandboxAPIs-Scratch-As`. `assignees`, `labels`, `milestone` and `type` are REFUSED with GitHub's 422 rather than dropped. Over 65,536 body characters is GitHub's own 422; past the key's row cap is GitHub's own secondary-rate-limit 403. An issue created with no body renders `body: null`, which is what api.github.com sends and what the vendored `issue` schema declares (`string | null`); `IssueRow.body` stays a string because the artifact's column is NOT NULL, so the turn happens in the shape layer and only where scratch is responsible - an artifact issue nobody edited is untouched. Without a scratch-enabled key this path is the read-only 403, byte for byte.

excluded
Core
PATCH
/repos/{owner}/{repo}/issues/{issue_number}

scratch — ACCEPTED into the per-key 24-hour overlay for a scratch-enabled key: title, body and state (close/reopen), on a SCRATCH issue or on an ARTIFACT one. The artifact is immutable, so an edit to an artifact issue is stored as its own `issue_patch` row that the read path lays over the issue for this key alone - which is why this is a row at all rather than a column. The 200 carries GitHub's own `issue` object and is validated against the vendored OpenAPI by packages/conformance/src/github/scratch.test.ts, and the SAME object answers the `GET /issues/{n}` that follows it, because the write renders through the read path. `assignees`, `labels`, `milestone`, `type` and `state_reason` are REFUSED with GitHub's 422 rather than silently dropped - this replica models none of them on an issue it did not generate, and a 200 that ignored one would hand back an issue the caller believes is labelled (invariant #4 moved from the query string to the body). A PULL REQUEST number resolves to no editable issue and answers GitHub's 404: a PR's issue view is canon structure the overlay cannot invent. `body: null` is GitHub's "clear it": it is stored as the empty string rather than ignored, and reads back as `null` on the wire. An EMPTY PATCH is a no-op that answers 200 with the issue unchanged and stores no row - real GitHub does the same, and being stricter than the API we mirror is its own bug. Without a scratch-enabled key this path is the read-only 403, byte for byte.

excluded
Core
POST
/repos/{owner}/{repo}/issues/{issue_number}/comments

scratch — ACCEPTED into the per-key 24-hour overlay for a scratch-enabled key: 201 + GitHub's own `issue-comment` object + `Location`, validated against the vendored OpenAPI by packages/conformance/src/github/scratch.test.ts. Comments attach to a SCRATCH issue or to an ARTIFACT one and are merged into `GET /issues/{n}/comments`, the repo-wide `/issues/comments` listing, `/issues/comments/{id}`, the `comments` COUNT on the issue object and the GraphQL `Issue.comments` connection - one merged row list, before every pager, so totals and `Link` headers stay right. The AUTHOR is the same canonical persona the key writes issues as. A PULL REQUEST number answers GitHub's 404, and `search`, the cross-repository issue listings and the event/timeline surfaces do NOT merge in phase 1 and say so with `X-SandboxAPIs-Scratch: unmerged`. Without a scratch-enabled key this path is the read-only 403, byte for byte.

excluded
Core
users26 of 27 served & verified
GET
/user
served & verified
Core
GET
/user/{account_id}

the person table already answers the user list, the by-account-id read and the hovercard

served & verified
Core
GET
/user/blocks

the caller-scoped twin of the org block list, held to the same fact: nobody is blocked in this universe

served & verified
Core
GET
/user/emails

SERVED 2026-09-09 (hello-16): reader.credentialsForPerson(athena, "email") (reader.ts:3016) — athena is the caller GET /user reports. `verified` is `state === active`, a column rather than a decision, so an address canon ever revokes stops being verified in the same edit. `visibility` is `private` on the primary address and null on every other, which is GitHub's own shape and agrees with what /users/{username} publishes: the `users.noreply` form, which is exactly what GitHub shows for a person whose addresses are private

served & verified
Core
GET
/user/followers

SERVED 2026-09-12 (hello-17): reader.followers(athena) behind reader.hasSocialGraph(), shaped as `simple-user` through the same shaper /orgs/{org}/members uses, so a login here is a login that fetches. hello-17 `socialGraph` (decisions/2026-09-11-0200) derives the follow graph from the review log and draws nothing: a reviewer follows the author whose changes they read, and an author follows back ONLY a reviewer who APPROVED. Without that second, narrower rule the graph would be the symmetric closure of the review graph wearing two columns, so `followers` and `following` are genuinely different lists rather than one list served twice. The same person_follow table answers GitLab's /users/{id}/followers, which is the cross-host parity that provider's coverage reason already committed to. Conformance asserts this list and /users/athena/followers are the same list, and that every follower reports following the caller from the other end. An artifact that predates the domain answers the hello-17 generation gap: [] there would assert that nobody in THAT universe follows anybody, a statement its canon never made.

served & verified
Core
GET
/user/following

SERVED 2026-09-12 (hello-17): reader.following(athena) behind reader.hasSocialGraph(). hello-17 `socialGraph` (decisions/2026-09-11-0200) derives the follow graph from the review log and draws nothing: a reviewer follows the author whose changes they read, and an author follows back ONLY a reviewer who APPROVED. Without that second, narrower rule the graph would be the symmetric closure of the review graph wearing two columns, so `followers` and `following` are genuinely different lists rather than one list served twice. The same person_follow table answers GitLab's /users/{id}/followers, which is the cross-host parity that provider's coverage reason already committed to. Conformance asserts this list and /users/athena/following are the same list. An artifact that predates the domain answers the hello-17 generation gap: [] there would assert that nobody in THAT universe follows anybody, a statement its canon never made.

served & verified
Core
GET
/user/following/{username}

SERVED 2026-09-12 (hello-17): GitHub's 204 when the edge exists and its 404 when it does not, with no body either way. The 404 is a fact about the graph rather than a coverage miss, so it carries no coverage header; conformance drives a person the caller does follow, a member she does not, and a login nobody carries, so a green is not "this route says yes to everything". An artifact that predates the domain answers the hello-17 generation gap: [] there would assert that nobody in THAT universe follows anybody, a statement its canon never made.

served & verified
Core
GET
/user/gpg_keys

SERVED 2026-09-12 (hello-17): reader.credentialsForPerson(athena, "gpg") behind reader.hasCallerCredentials(), validated against `gpg-key` and serving a real OpenPGP v4 packet whose long key id a client can recompute from the packet body. hello-17 `callerCredentials` (decisions/2026-09-11-0151) replaces the credential pass's activity thresholds with a rule — THE FOUNDING MEMBER HOLDS ONE OF EVERY CREDENTIAL KIND THIS ORGANIZATION ACCEPTS — and makes the founding member the TEMPLATE'S FIRST PERSONA, which is the login VIEWER_LOGIN resolves to. That is what answers the hello-16 ask on this row ("the authenticated persona holds none of this kind"), and it answers it structurally rather than by moving a threshold until it happened to catch her. ONE SHAPE FOR BOTH SURFACES: GitHub publishes `gpg-key` on the caller's list and on /users/{username}/gpg_keys, so this row reuses that shaper rather than writing a second one, and conformance asserts the two lists are byte-identical. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Core
GET
/user/gpg_keys/{gpg_key_id}

SERVED 2026-09-12 (hello-17): the caller's own GPG key by its number, the same object the list publishes (conformance compares them field for field). hello-17 `callerCredentials` (decisions/2026-09-11-0151) replaces the credential pass's activity thresholds with a rule — THE FOUNDING MEMBER HOLDS ONE OF EVERY CREDENTIAL KIND THIS ORGANIZATION ACCEPTS — and makes the founding member the TEMPLATE'S FIRST PERSONA, which is the login VIEWER_LOGIN resolves to. That is what answers the hello-16 ask on this row ("the authenticated persona holds none of this kind"), and it answers it structurally rather than by moving a threshold until it happened to catch her. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Core
GET
/user/keys

SERVED 2026-09-12 (hello-17): reader.credentialsForPerson(athena, "ssh-auth") behind reader.hasCallerCredentials(), validated against `key`. hello-17 `callerCredentials` (decisions/2026-09-11-0151) replaces the credential pass's activity thresholds with a rule — THE FOUNDING MEMBER HOLDS ONE OF EVERY CREDENTIAL KIND THIS ORGANIZATION ACCEPTS — and makes the founding member the TEMPLATE'S FIRST PERSONA, which is the login VIEWER_LOGIN resolves to. That is what answers the hello-16 ask on this row ("the authenticated persona holds none of this kind"), and it answers it structurally rather than by moving a threshold until it happened to catch her. A `key` SHAPER HAD TO BE WRITTEN FOR THIS ROW and deliberately did not exist before (decisions/2026-09-09-2008 recorded its absence: it would have been code for a response nothing could produce). Its four judgments are facts rather than defaults: `read_only: false` because canon's `ssh-auth` kind is the key its owner PUSHES with (the opposite reading `shapeDeployKey` makes for the opposite kind), `verified` off the state column exactly as shapeEmail reads it, `last_used` off canon's own epoch, and the material split by the same splitSshLine /users/{username}/keys uses — so the caller's view and the public view of one row cannot describe different bytes, which conformance asserts. `url` is this host's own by-id route, which answers. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Core
GET
/user/keys/{key_id}

SERVED 2026-09-12 (hello-17): the caller's own key by its number, through the same reader.credentialsForPerson(athena, "ssh-auth") read the list uses, so the two are the SAME object field for field (conformance compares them). hello-17 `callerCredentials` (decisions/2026-09-11-0151) replaces the credential pass's activity thresholds with a rule — THE FOUNDING MEMBER HOLDS ONE OF EVERY CREDENTIAL KIND THIS ORGANIZATION ACCEPTS — and makes the founding member the TEMPLATE'S FIRST PERSONA, which is the login VIEWER_LOGIN resolves to. That is what answers the hello-16 ask on this row ("the authenticated persona holds none of this kind"), and it answers it structurally rather than by moving a threshold until it happened to catch her. A key id that belongs to somebody ELSE is GitHub's 404 here rather than that person's key, which is the whole difference between this operation and /users/{username}/keys — conformance walks hermes's ids and asserts every one 404s. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Core
GET
/user/public_emails

NO ADDRESS IN THIS UNIVERSE IS PUBLIC, and that is a property of the credential canon rather than of who the caller is. packages/renderer-github/src/render-credentials.ts decides `visibility` from a COLUMN — "private" on the primary address and null on every other, which is GitHub's own shape — and /users/{username} publishes {login}@users.noreply.sandboxapis.dev from the other side, which is exactly what GitHub shows for a person whose addresses are private. The publicly-visible subset of anybody's addresses here is therefore genuinely empty, and GitHub's own answer for a caller who publishes none is [] at 200. SERVED 2026-09-12 (hello-17 GitHub wave) behind reader.hasCredentials() — the domain that decides the answer, not hello-17's caller half, because the claim holds on a hello-16 artifact exactly as it does on a hello-17 one. Falsifiable: the conformance entry's expectsEmpty fails the day canon gives an address a public visibility, and it also asserts the caller DOES hold addresses, so an empty page cannot go green on a universe with no email canon. This supersedes the 2026-09-09 ruling that the emptiness was "about the caller": hello-17 makes the caller the template's first persona structurally (decisions/2026-09-11-0151), and the visibility column was always the thing deciding this row. RULED empty by the hello-17 GitHub wave, 2026-09-12 — flagged for founder confirmation in the PR

served & verified
Core
GET
/user/social_accounts

SERVED 2026-09-09 (hello-16): reader.credentialsForPerson(athena, "social") (reader.ts:3016). Two providers, and the omissions are the design (packages/canon/src/credentials.ts): a row claiming a large proprietary network would carry a URL at somebody else's live service, naming an account that either does not exist or belongs to a real person. Both values resolve inside this organization's own domain, and conformance asserts the caller's list and /users/athena/social_accounts are byte-identical

served & verified
Core
GET
/user/ssh_signing_keys

SERVED 2026-09-12 (hello-17): reader.credentialsForPerson(athena, "ssh-signing") behind reader.hasCallerCredentials(), validated against `ssh-signing-key`. hello-17 `callerCredentials` (decisions/2026-09-11-0151) replaces the credential pass's activity thresholds with a rule — THE FOUNDING MEMBER HOLDS ONE OF EVERY CREDENTIAL KIND THIS ORGANIZATION ACCEPTS — and makes the founding member the TEMPLATE'S FIRST PERSONA, which is the login VIEWER_LOGIN resolves to. That is what answers the hello-16 ask on this row ("the authenticated persona holds none of this kind"), and it answers it structurally rather than by moving a threshold until it happened to catch her. A SIGNING KEY IS A SEPARATE GRANT FROM AN AUTHENTICATION KEY and canon models it as a separate CredentialKind for that reason, so this list and /user/keys must not share material — conformance asserts no key appears on both, because a replica that served one list from both would be asserting a grant nobody made. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Core
GET
/user/ssh_signing_keys/{ssh_signing_key_id}

SERVED 2026-09-12 (hello-17): the caller's own signing key by its number, the same object the list publishes. hello-17 `callerCredentials` (decisions/2026-09-11-0151) replaces the credential pass's activity thresholds with a rule — THE FOUNDING MEMBER HOLDS ONE OF EVERY CREDENTIAL KIND THIS ORGANIZATION ACCEPTS — and makes the founding member the TEMPLATE'S FIRST PERSONA, which is the login VIEWER_LOGIN resolves to. That is what answers the hello-16 ask on this row ("the authenticated persona holds none of this kind"), and it answers it structurally rather than by moving a threshold until it happened to catch her. A hello-16 artifact answers the hello-17 generation gap and NOT hello-16's: it HAS the person_credential table — somebody else's keys are served off it — and none of these rows, which is why the gate is reader.hasCallerCredentials() and not reader.hasCredentials().

served & verified
Core
GET
/users

the person table already answers the user list, the by-account-id read and the hovercard

served & verified
Core
GET
/users/{username}
served & verified
Core
GET
/users/{username}/attestations/{subject_digest}

no artifact in this universe is attested — all 392 `artifact` rows are plain workflow-run uploads with no provenance bundle and none of the three workflows (`ci`, `lint`, `release`) runs an attestation step; GitHub's own answer for a subject digest with no attestations is `{attestations: []}` at 200 (the spec's 200 has NO required member). The operation also declares a 404 and the ORCHESTRATOR RULED the 200: a digest is a content address rather than a resource id, so asking about an artifact nobody signed is a well-formed question whose answer is "none". RULED by the founder 2026-09-12

served & verified
Core
GET
/users/{username}/followers

SERVED 2026-09-12 (hello-17): anybody's followers, off the same reader.followers() read the caller's list uses. hello-17 `socialGraph` (decisions/2026-09-11-0200) derives the follow graph from the review log and draws nothing: a reviewer follows the author whose changes they read, and an author follows back ONLY a reviewer who APPROVED. Without that second, narrower rule the graph would be the symmetric closure of the review graph wearing two columns, so `followers` and `following` are genuinely different lists rather than one list served twice. The same person_follow table answers GitLab's /users/{id}/followers, which is the cross-host parity that provider's coverage reason already committed to. THE ORG LOGIN IS A VALID {username} AND FOLLOWS NOBODY — the rule /users/{org}/repos already follows, because a 404 here would say the account does not exist while /users/{org} says it does — and conformance asserts the organization account answers [] at 200. An artifact that predates the domain answers the hello-17 generation gap: [] there would assert that nobody in THAT universe follows anybody, a statement its canon never made.

served & verified
Core
GET
/users/{username}/following

SERVED 2026-09-12 (hello-17): anybody's following list, off reader.following(). hello-17 `socialGraph` (decisions/2026-09-11-0200) derives the follow graph from the review log and draws nothing: a reviewer follows the author whose changes they read, and an author follows back ONLY a reviewer who APPROVED. Without that second, narrower rule the graph would be the symmetric closure of the review graph wearing two columns, so `followers` and `following` are genuinely different lists rather than one list served twice. The same person_follow table answers GitLab's /users/{id}/followers, which is the cross-host parity that provider's coverage reason already committed to. Conformance walks the whole roster and checks every edge from both ends, which is what proves followers and following are two reads of one asymmetric table rather than one list served twice. An artifact that predates the domain answers the hello-17 generation gap: [] there would assert that nobody in THAT universe follows anybody, a statement its canon never made.

served & verified
Core
GET
/users/{username}/following/{target_user}

SERVED 2026-09-12 (hello-17): GitHub's 204/404 pair for any ordered pair of people. Nobody follows themselves — person_follow has no self-edge by construction — and conformance asserts the self-check is a 404, which is where that construction shows on the wire. An artifact that predates the domain answers the hello-17 generation gap: [] there would assert that nobody in THAT universe follows anybody, a statement its canon never made.

served & verified
Core
GET
/users/{username}/gpg_keys

SERVED 2026-09-09 (hello-16): reader.credentialsForPerson(person, "gpg") (reader.ts:3016). `public_key` is a REAL OpenPGP v4 Ed25519 public-key packet body and `key_id` its long id, derived the way GnuPG derives them; the conformance entry parses the packet and checks the version byte, the algorithm and the id's shape rather than trusting the encoder. `raw_key` is null and `emails` is EMPTY for one reason: a transferable key needs a user id and a self-signature, both of which need a private half this universe never generated — so neither is served rather than being faked. `can_sign`/`can_certify` true and both encryption flags false are facts about Ed25519, checkable from the material

served & verified
Core
GET
/users/{username}/hovercard

the person table already answers the user list, the by-account-id read and the hovercard

served & verified
Core
GET
/users/{username}/keys

SERVED 2026-09-09 (hello-16): reader.credentialsForPerson(person, "ssh-auth") (reader.ts:3016) in GitHub's `key-simple` shape — the id and the material, with no comment, which is what the public listing carries. Conformance decodes the blob to a 51-byte ssh-ed25519 wire key and re-hashes it to the artifact's own fingerprint_sha256, so `ssh-keygen -lf` on the served line reproduces the served fingerprint. The organization login is a valid {username} here and answers with nothing, the rule /users/{org}/repos already follows

served & verified
Core
GET
/users/{username}/social_accounts

SERVED 2026-09-09 (hello-16): reader.credentialsForPerson(person, "social") (reader.ts:3016) — the same rows /user/social_accounts serves for the caller, which conformance asserts are byte-identical for the same person

served & verified
Core
GET
/users/{username}/ssh_signing_keys

SERVED 2026-09-09 (hello-16): reader.credentialsForPerson(person, "ssh-signing") (reader.ts:3016). A SEPARATE endpoint from /users/{username}/keys because it is a separate grant — a key authorised to write and a key trusted to attest authorship are different things — and conformance asserts no key appears on both lists, because serving one list from two addresses would assert a grant nobody made

served & verified
Core
GET
/user/blocks/{username}

refuse — the id half of the caller block pair: with nobody blocked, GitHub answers 404 to the per-user block check

planned
Core
activity24 of 24 served & verified
GET
/events
served & verified
Next
GET
/networks/{owner}/{repo}/events
served & verified
Next
GET
/notifications

SERVED 2026-09-14 (hello-20 wave W-github): NO Notification ENTITY IS NEEDED and none was built - an inbox thread is a SUBJECT (an issue or a pull), a REASON (author/assign/comment/review_requested/subscribed, every one a relationship this artifact already records), an UPDATED_AT and an UNREAD bit, so the inbox is features.watchGraph's preference applied to the activity log and composed by the renderer the way JQL and WIQL are composed from saved_filter. The preference decides membership: a person at disabled has an empty inbox, one at watch sees every thread in the repository, one at participating sees only the threads they are in. A thread is unread when its last activity is later than that person's own last recorded action anywhere - you have not been back since

served & verified
Next
GET
/notifications/threads/{thread_id}

SERVED 2026-09-14 (hello-20 wave W-github): NO Notification ENTITY IS NEEDED and none was built - an inbox thread is a SUBJECT (an issue or a pull), a REASON (author/assign/comment/review_requested/subscribed, every one a relationship this artifact already records), an UPDATED_AT and an UNREAD bit, so the inbox is features.watchGraph's preference applied to the activity log and composed by the renderer the way JQL and WIQL are composed from saved_filter. The preference decides membership: a person at disabled has an empty inbox, one at watch sees every thread in the repository, one at participating sees only the threads they are in. A thread is unread when its last activity is later than that person's own last recorded action anywhere - you have not been back since

served & verified
Next
GET
/notifications/threads/{thread_id}/subscription

SERVED 2026-09-14 (hello-20 wave W-github): NO Notification ENTITY IS NEEDED and none was built - an inbox thread is a SUBJECT (an issue or a pull), a REASON (author/assign/comment/review_requested/subscribed, every one a relationship this artifact already records), an UPDATED_AT and an UNREAD bit, so the inbox is features.watchGraph's preference applied to the activity log and composed by the renderer the way JQL and WIQL are composed from saved_filter. The preference decides membership: a person at disabled has an empty inbox, one at watch sees every thread in the repository, one at participating sees only the threads they are in. A thread is unread when its last activity is later than that person's own last recorded action anywhere - you have not been back since

served & verified
Next
GET
/orgs/{org}/events
served & verified
Next
GET
/repos/{owner}/{repo}/events
served & verified
Next
GET
/repos/{owner}/{repo}/notifications

SERVED 2026-09-14 (hello-20 wave W-github): NO Notification ENTITY IS NEEDED and none was built - an inbox thread is a SUBJECT (an issue or a pull), a REASON (author/assign/comment/review_requested/subscribed, every one a relationship this artifact already records), an UPDATED_AT and an UNREAD bit, so the inbox is features.watchGraph's preference applied to the activity log and composed by the renderer the way JQL and WIQL are composed from saved_filter. The preference decides membership: a person at disabled has an empty inbox, one at watch sees every thread in the repository, one at participating sees only the threads they are in. A thread is unread when its last activity is later than that person's own last recorded action anywhere - you have not been back since

served & verified
Next
GET
/users/{username}/events
served & verified
Next
GET
/users/{username}/events/orgs/{org}
served & verified
Next
GET
/users/{username}/events/public
served & verified
Next
GET
/users/{username}/received_events
served & verified
Next
GET
/users/{username}/received_events/public
served & verified
Next
GET
/feeds

the feed document is a set of URLs computed from the authenticated persona and the repos they can see

served & verified
Long tail
GET
/repos/{owner}/{repo}/stargazers

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints repo_star - a STAR IS A BOOKMARK ON WORK YOU HAVE DONE, so every person who has authored a commit or submitted a review here has one, dated at the earlier of those two firsts. That is 15 of 17 people at 90 d and not the whole roster: the persona who has only filed issues never landed a commit or read a pull, and the CI identity keeps no bookmarks (decisions/2026-09-14-0315). The founder's cross-host rule is honoured by construction - one table, two renderings, so a starred repo is the same repo on GitHub and GitLab. stargazers_count on every repository object is now this same list's length

served & verified
Long tail
GET
/repos/{owner}/{repo}/stargazers/count

SERVED 2026-10-23 (fleet reserve): {count} over the same repo_star rows /stargazers lists (hello-20 watchGraph), so the count, the list and the repository's own stargazers_count are one fact. repo_star records bookmarks and no removal, so GitHub's rule that removed stars are excluded excludes nobody. Older artifacts answer the watch-graph generation gap

served & verified
Long tail
GET
/repos/{owner}/{repo}/stargazers/history

SERVED 2026-10-23 (fleet reserve): the same repo_star rows bucketed into calendar weeks, newest first, from the week of the artifact's anchor back to the repository's creation week, with zero weeks present. Weeks start Sunday 00:00 UTC (GitHub says its boundaries need not align with UTC), `days` counts each day from Sunday, per_page is GitHub's maximum of 30 and the Link header pages backward. The anchor, not a clock, ends the series, so a pin answers the same on two days. Older artifacts answer the watch-graph generation gap

served & verified
Long tail
GET
/repos/{owner}/{repo}/subscribers

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints notification_preference and there is NO repo_subscription table - a subscription and a notification level are ONE FACT SPELLED BY TWO VENDORS, so GitHub's subscribed/ignored pair and GitLab's level enum read the same column. A WATCH IS ACCOUNTABILITY and follows standing rather than activity: whoever administers the organization hears about all of it, whoever maintains the repository hears about that one, everybody else keeps the vendor default, and the machine account is disabled. A row exists only where it DIFFERS from what it would inherit, so watchersOf() resolves the inheritance in the reader and five of the nine watchers carry no repository row at all

served & verified
Long tail
GET
/repos/{owner}/{repo}/subscription

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints notification_preference and there is NO repo_subscription table - a subscription and a notification level are ONE FACT SPELLED BY TWO VENDORS, so GitHub's subscribed/ignored pair and GitLab's level enum read the same column. A WATCH IS ACCOUNTABILITY and follows standing rather than activity: whoever administers the organization hears about all of it, whoever maintains the repository hears about that one, everybody else keeps the vendor default, and the machine account is disabled. A row exists only where it DIFFERS from what it would inherit, so watchersOf() resolves the inheritance in the reader and five of the nine watchers carry no repository row at all

served & verified
Long tail
GET
/user/starred

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints repo_star - a STAR IS A BOOKMARK ON WORK YOU HAVE DONE, so every person who has authored a commit or submitted a review here has one, dated at the earlier of those two firsts. That is 15 of 17 people at 90 d and not the whole roster: the persona who has only filed issues never landed a commit or read a pull, and the CI identity keeps no bookmarks (decisions/2026-09-14-0315). The founder's cross-host rule is honoured by construction - one table, two renderings, so a starred repo is the same repo on GitHub and GitLab. stargazers_count on every repository object is now this same list's length

served & verified
Long tail
GET
/user/starred/{owner}/{repo}

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints repo_star - a STAR IS A BOOKMARK ON WORK YOU HAVE DONE, so every person who has authored a commit or submitted a review here has one, dated at the earlier of those two firsts. That is 15 of 17 people at 90 d and not the whole roster: the persona who has only filed issues never landed a commit or read a pull, and the CI identity keeps no bookmarks (decisions/2026-09-14-0315). The founder's cross-host rule is honoured by construction - one table, two renderings, so a starred repo is the same repo on GitHub and GitLab. stargazers_count on every repository object is now this same list's length

served & verified
Long tail
GET
/user/subscriptions

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints notification_preference and there is NO repo_subscription table - a subscription and a notification level are ONE FACT SPELLED BY TWO VENDORS, so GitHub's subscribed/ignored pair and GitLab's level enum read the same column. A WATCH IS ACCOUNTABILITY and follows standing rather than activity: whoever administers the organization hears about all of it, whoever maintains the repository hears about that one, everybody else keeps the vendor default, and the machine account is disabled. A row exists only where it DIFFERS from what it would inherit, so watchersOf() resolves the inheritance in the reader and five of the nine watchers carry no repository row at all

served & verified
Long tail
GET
/users/{username}/starred

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints repo_star - a STAR IS A BOOKMARK ON WORK YOU HAVE DONE, so every person who has authored a commit or submitted a review here has one, dated at the earlier of those two firsts. That is 15 of 17 people at 90 d and not the whole roster: the persona who has only filed issues never landed a commit or read a pull, and the CI identity keeps no bookmarks (decisions/2026-09-14-0315). The founder's cross-host rule is honoured by construction - one table, two renderings, so a starred repo is the same repo on GitHub and GitLab. stargazers_count on every repository object is now this same list's length

served & verified
Long tail
GET
/users/{username}/subscriptions

SERVED 2026-09-14 (hello-20 wave W-github): features.watchGraph mints notification_preference and there is NO repo_subscription table - a subscription and a notification level are ONE FACT SPELLED BY TWO VENDORS, so GitHub's subscribed/ignored pair and GitLab's level enum read the same column. A WATCH IS ACCOUNTABILITY and follows standing rather than activity: whoever administers the organization hears about all of it, whoever maintains the repository hears about that one, everybody else keeps the vendor default, and the machine account is disabled. A row exists only where it DIFFERS from what it would inherit, so watchersOf() resolves the inheritance in the reader and five of the nine watchers carry no repository row at all

served & verified
Long tail
apps13 of 22 served & verified
GET
/app

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/app/hook/config

SERVED 2026-09-14 (hello-20 wave W-github): the App's own hook is a webhook_subscription at a FOURTH SCOPE (filter_kind app_reference), not a new table - hello-18 already settled that a repository hook, an organization hook and a namespace hook are the same object at three scopes - and features.githubApp mints webhook_delivery, bounded at the last three deliveries per subscription. A delivery that happened has a log entry, which is what hello-18's own last_delivery_code column already asserted. duration is 0 on every row and that is a ruling rather than a gap: this universe's clock is whole seconds, so a delivery's request and response fall inside one recorded instant and its duration is below the resolution this universe measures at (decisions/2026-09-14-0345)

served & verified
Long tail
GET
/app/hook/deliveries

SERVED 2026-09-14 (hello-20 wave W-github): the App's own hook is a webhook_subscription at a FOURTH SCOPE (filter_kind app_reference), not a new table - hello-18 already settled that a repository hook, an organization hook and a namespace hook are the same object at three scopes - and features.githubApp mints webhook_delivery, bounded at the last three deliveries per subscription. A delivery that happened has a log entry, which is what hello-18's own last_delivery_code column already asserted. duration is 0 on every row and that is a ruling rather than a gap: this universe's clock is whole seconds, so a delivery's request and response fall inside one recorded instant and its duration is below the resolution this universe measures at (decisions/2026-09-14-0345)

served & verified
Long tail
GET
/app/hook/deliveries/{delivery_id}

SERVED 2026-10-27 (hello-23 deliveryEvents, founder ruling F3, decisions/2026-10-27-2218 and decisions/2026-10-27-2310): the App hook's delivery in full, the repository twin's composition plus the installation the delivery was made through; every delivered event is one the App's permissions let it receive. A check_run delivery answers the coverage 404, because its subject is a commit status here and no check run resolves. Older artifacts answer the hello-23 generation gap

served & verified
Long tail
GET
/app/installation-requests

an installation request exists because somebody who could not install an App asked an owner to. This organization WROTE this App and installed it on itself the moment it existed, so nobody ever asked - the honest answer is the empty list under an App that resolves. Rides the founder's 2026-09-14 batch on the App's own fact (decisions/2026-09-14-0345: one App, because this roster holds one bot)

served & verified
Long tail
GET
/app/installations

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/app/installations/{installation_id}

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/apps/{app_slug}

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/installation/repositories

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/orgs/{org}/installation

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/repos/{owner}/{repo}/installation

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/user/installations

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/user/installations/{installation_id}/repositories

SERVED 2026-09-14 (hello-20 wave W-github): features.githubApp mints app/app_permission/app_installation - ONE App, because this roster holds one bot and app.actor resolves to it, which is what makes the App's check runs the same actor everything else already attributes them to (decisions/2026-09-14-0345). A PERMISSION EXISTS BECAUSE THE ACTOR DID THE THING: checks:write because it wrote 101 check runs, contents:read because every one names a commit it had to read, metadata:read because no App on any of these hosts exists without it - and it holds neither issues nor pull-requests, because it commented on nothing and reviewed nothing. /app answers authenticatingApp() rather than the first row. Gated on hasGithubApp()

served & verified
Long tail
GET
/marketplace_listing/accounts/{account_id}

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/marketplace_listing/plans

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/marketplace_listing/plans/{plan_id}/accounts

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/marketplace_listing/stubbed/accounts/{account_id}

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/marketplace_listing/stubbed/plans

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/marketplace_listing/stubbed/plans/{plan_id}/accounts

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/user/marketplace_purchases

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/user/marketplace_purchases/stubbed

refuse — the org is neither a GitHub Marketplace listing nor a purchaser, and GitHub answers 404 to marketplace reads for an account with no listing

deferred
Long tail
GET
/users/{username}/installation

refuse — no App is installed on a personal account here: nobody in olympus-labs owns a repository of their own (the hello-16 ownership ruling the ten /user(s)/packages rows also rest on), so there is nothing for one to be installed on. Deliberately NOT generation-gated - that is true on hello-20 and on every frozen pin alike, so naming a generation would be a worse answer than the one GitHub itself gives

deferred
Long tail
codespaces2 of 22 served & verified
GET
/repos/{owner}/{repo}/codespaces/devcontainers

no repository in this universe carries a `.devcontainer`, so the repo's devcontainer list is truthfully empty

served & verified
Long tail
GET
/repos/{owner}/{repo}/codespaces/machines

nobody launched a codespace, configured hosted-compute networking or registered a private registry - the last is hello-19's founder ruling F3 verbatim (olympus-labs runs no private package registry), which three already-terminal Dependabot rows rest on. The organization resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/codespaces

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/orgs/{org}/codespaces/secrets

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/orgs/{org}/codespaces/secrets/{secret_name}

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/orgs/{org}/codespaces/secrets/{secret_name}/repositories

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/orgs/{org}/codespaces/secrets/public-key

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/orgs/{org}/members/{username}/codespaces

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/repos/{owner}/{repo}/codespaces

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/repos/{owner}/{repo}/codespaces/new

refuse — nobody launched a codespace, configured hosted-compute networking or registered a private registry, so nothing here is addressable: this row reads a registry by name, a network configuration by id, or a codespace default for a repository nobody has ever started one in. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/codespaces/permissions_check

refuse — nobody launched a codespace, configured hosted-compute networking or registered a private registry, so nothing here is addressable: this row reads a registry by name, a network configuration by id, or a codespace default for a repository nobody has ever started one in. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/codespaces/secrets

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/repos/{owner}/{repo}/codespaces/secrets/{secret_name}

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/repos/{owner}/{repo}/codespaces/secrets/public-key

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces/{codespace_name}

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces/{codespace_name}/exports/{export_id}

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces/{codespace_name}/machines

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces/secrets

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces/secrets/{secret_name}

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces/secrets/{secret_name}/repositories

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
GET
/user/codespaces/secrets/public-key

refuse — no persona in this universe launches a Codespace: every Codespaces object exists only because a write created one, and this universe accepts no writes

deferred
Long tail
copilot13 of 20 served & verified
GET
/orgs/{org}/copilot/billing
served & verified
Next
GET
/orgs/{org}/copilot/billing/seats
served & verified
Next
GET
/orgs/{org}/copilot/coding-agent/permissions

SERVED 2026-09-14 (hello-20 wave W-github): the coding-agent audience of the same features.ciPolicy table - a pipeline policy and an agent policy are one SHAPE at two audiences, and twelve columns are NULL on an agent row because an agent does not run an action. The content-exclusion rules are the generated LOCKFILES in that repository's own head tree, measured at compile time, so a rule naming a file the tree does not hold would be a policy about nothing; the four security tools on the cloud-agent configuration are all off, which is the founder's ruling of 2026-09-12 (no security product is enabled on olympus-labs) applied to the surface that asks about them

served & verified
Next
GET
/orgs/{org}/copilot/coding-agent/permissions/repositories

SERVED 2026-09-14 (hello-20 wave W-github): the coding-agent audience of the same features.ciPolicy table - a pipeline policy and an agent policy are one SHAPE at two audiences, and twelve columns are NULL on an agent row because an agent does not run an action. The content-exclusion rules are the generated LOCKFILES in that repository's own head tree, measured at compile time, so a rule naming a file the tree does not hold would be a policy about nothing; the four security tools on the cloud-agent configuration are all off, which is the founder's ruling of 2026-09-12 (no security product is enabled on olympus-labs) applied to the surface that asks about them

served & verified
Next
GET
/orgs/{org}/copilot/content_exclusion

SERVED 2026-09-14 (hello-20 wave W-github): the coding-agent audience of the same features.ciPolicy table - a pipeline policy and an agent policy are one SHAPE at two audiences, and twelve columns are NULL on an agent row because an agent does not run an action. The content-exclusion rules are the generated LOCKFILES in that repository's own head tree, measured at compile time, so a rule naming a file the tree does not hold would be a policy about nothing; the four security tools on the cloud-agent configuration are all off, which is the founder's ruling of 2026-09-12 (no security product is enabled on olympus-labs) applied to the surface that asks about them

served & verified
Next
GET
/orgs/{org}/copilot/metrics/reports/organization-1-day
served & verified
Next
GET
/orgs/{org}/copilot/metrics/reports/organization-28-day/latest
served & verified
Next
GET
/orgs/{org}/copilot/metrics/reports/repos-1-day
served & verified
Next
GET
/orgs/{org}/copilot/metrics/reports/user-teams-1-day
served & verified
Next
GET
/orgs/{org}/copilot/metrics/reports/users-1-day
served & verified
Next
GET
/orgs/{org}/copilot/metrics/reports/users-28-day/latest
served & verified
Next
GET
/orgs/{org}/members/{username}/copilot
served & verified
Next
GET
/repos/{owner}/{repo}/copilot/cloud-agent/configuration

SERVED 2026-09-14 (hello-20 wave W-github): the coding-agent audience of the same features.ciPolicy table - a pipeline policy and an agent policy are one SHAPE at two audiences, and twelve columns are NULL on an agent row because an agent does not run an action. The content-exclusion rules are the generated LOCKFILES in that repository's own head tree, measured at compile time, so a rule naming a file the tree does not hold would be a policy about nothing; the four security tools on the cloud-agent configuration are all off, which is the founder's ruling of 2026-09-12 (no security product is enabled on olympus-labs) applied to the surface that asks about them

served & verified
Next
GET
/orgs/{org}/copilot/metrics

derive — served on the pins frozen before the retirement; the live host refuses it (meta.retired_meaning)

retired
Next
GET
/enterprises/{enterprise}/copilot/metrics/reports/enterprise-1-day

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer. The identical ruling already governs every sibling under this prefix (see `github|rest|GET|/enterprises/{enterprise}/teams`, reviewed 2026-09-01); serving a Copilot report here would require minting the enterprise those fifteen rows deny. RULED by the founder 2026-09-09

deferred
Next
GET
/enterprises/{enterprise}/copilot/metrics/reports/enterprise-28-day/latest

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer. The identical ruling already governs every sibling under this prefix (see `github|rest|GET|/enterprises/{enterprise}/teams`, reviewed 2026-09-01); serving a Copilot report here would require minting the enterprise those fifteen rows deny. RULED by the founder 2026-09-09

deferred
Next
GET
/enterprises/{enterprise}/copilot/metrics/reports/repos-1-day

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer. The identical ruling already governs every sibling under this prefix (see `github|rest|GET|/enterprises/{enterprise}/teams`, reviewed 2026-09-01); serving a Copilot report here would require minting the enterprise those fifteen rows deny. RULED by the founder 2026-09-09

deferred
Next
GET
/enterprises/{enterprise}/copilot/metrics/reports/user-teams-1-day

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer. The identical ruling already governs every sibling under this prefix (see `github|rest|GET|/enterprises/{enterprise}/teams`, reviewed 2026-09-01); serving a Copilot report here would require minting the enterprise those fifteen rows deny. RULED by the founder 2026-09-09

deferred
Next
GET
/enterprises/{enterprise}/copilot/metrics/reports/users-1-day

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer. The identical ruling already governs every sibling under this prefix (see `github|rest|GET|/enterprises/{enterprise}/teams`, reviewed 2026-09-01); serving a Copilot report here would require minting the enterprise those fifteen rows deny. RULED by the founder 2026-09-09

deferred
Next
GET
/enterprises/{enterprise}/copilot/metrics/reports/users-28-day/latest

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer. The identical ruling already governs every sibling under this prefix (see `github|rest|GET|/enterprises/{enterprise}/teams`, reviewed 2026-09-01); serving a Copilot report here would require minting the enterprise those fifteen rows deny. RULED by the founder 2026-09-09

deferred
Next
teams17 of 17 served & verified
GET
/orgs/{org}/teams
served & verified
Core
GET
/orgs/{org}/teams/{team_slug}
served & verified
Core
GET
/orgs/{org}/teams/{team_slug}/invitations

SERVED 2026-09-09 (hello-16): the pending TEAM memberships — reader.listMemberships("team", team) (reader.ts:2961), rendered in the `organization-invitation` shape the operation declares. The invitee is somebody this organization already knows, so `login` is set and `email` is null, and the same row answers /orgs/{org}/teams/{team_slug}/memberships/{username} with `state: pending`

served & verified
Core
GET
/orgs/{org}/teams/{team_slug}/members
served & verified
Core
GET
/orgs/{org}/teams/{team_slug}/memberships/{username}

SERVED 2026-09-09 (hello-16): reader.membershipFor("team", team, person) (reader.ts:2977), validated against `team-membership`. `state: pending` is real on this universe — one person is on a team's roster by invitation and not yet by membership — and /orgs/{org}/teams/{team_slug}/invitations serves that same row from the other side

served & verified
Core
GET
/orgs/{org}/teams/{team_slug}/repos
served & verified
Core
GET
/orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}

teams, their repo grants and the caller's own team list, over team/team_member

served & verified
Core
GET
/orgs/{org}/teams/{team_slug}/teams

the org's teams are flat — four discipline teams, none nested under another — so a team's child-team list is truthfully empty

served & verified
Core
GET
/teams/{team_id}

teams, their repo grants and the caller's own team list, over team/team_member

served & verified
Core
GET
/teams/{team_id}/invitations

SERVED 2026-09-09 (hello-16): the same list through the legacy team id — teamByLegacyId plus reader.listMemberships("team", team) (reader.ts:2961). Conformance asserts the legacy and slug forms are byte-identical

served & verified
Core
GET
/teams/{team_id}/members

team members over team_member, addressed by legacy team id

served & verified
Core
GET
/teams/{team_id}/members/{username}

team members over team_member, addressed by legacy team id

served & verified
Core
GET
/teams/{team_id}/memberships/{username}

SERVED 2026-09-09 (hello-16): the same row through the legacy team id — teamByLegacyId (render-access.ts) plus reader.membershipFor("team", team, person) (reader.ts:2977). `url` is the address the caller used, and conformance asserts the legacy and slug forms agree about role and state

served & verified
Core
GET
/teams/{team_id}/repos

teams, their repo grants and the caller's own team list, over team/team_member

served & verified
Core
GET
/teams/{team_id}/repos/{owner}/{repo}

teams, their repo grants and the caller's own team list, over team/team_member

served & verified
Core
GET
/teams/{team_id}/teams

the legacy id-addressed twin of the team child-team list, held to the same fact: the org's teams are flat, so no team has a child

served & verified
Core
GET
/user/teams

teams, their repo grants and the caller's own team list, over team/team_member

served & verified
Core
code-scanning4 of 15 served & verified
GET
/orgs/{org}/code-scanning/alerts

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/code-scanning/alerts

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/code-scanning/analyses

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/code-scanning/codeql/databases

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/code-scanning/ai-scan

refuse — no security product is enabled on olympus-labs, so AI Scan was never configured at the organization scope and the question gets GitHub's own 404, the answer `/repos/{owner}/{repo}/code-scanning/default-setup` gives on this host under the founder's 2026-09-14 batch (fact R1). The 403 the operation declares for a caller who is not an owner or security manager is deliberately not taken, for that batch's reason: a 403 is a claim about the caller, and this is a claim about what nobody here configured. Classified 2026-10-27 by applying fact R1 (decisions/2026-10-27-2137-github-unclassified-eight.md)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/ai-scan

refuse — no security product is enabled on olympus-labs, so AI Scan was never configured at the repository scope and the question gets GitHub's own 404, the answer `/repos/{owner}/{repo}/code-scanning/default-setup` gives on this host under the founder's 2026-09-14 batch (fact R1). The 403 the operation declares for a repository without GitHub Advanced Security is deliberately not taken, for that batch's reason: a 403 is a claim about the caller, and this is a claim about what nobody here configured. Classified 2026-10-27 by applying fact R1 (decisions/2026-10-27-2137-github-unclassified-eight.md)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/alerts/{alert_number}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/codeql/databases/{language}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/default-setup

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
packages9 of 15 served & verified
GET
/orgs/{org}/docker/conflicts

olympus-labs publishes its image to the CONTAINER registry and has never used the legacy docker.pkg.github.com one, so nothing could collide on a migration off it. features.packageRegistry makes this answerable rather than populated: the organization now publishes packages, and this list is the one family of them that is truthfully empty. Rides the founder's 2026-09-14 batch on the fact it shares with the /user(s) docker-conflict rows beside it

served & verified
Long tail
GET
/orgs/{org}/packages

SERVED 2026-09-14 (hello-20 wave W-github): features.packageRegistry mints Package/PackageVersion/PackageFile - one package per manifest in the head tree, one version per release at that release's own commit, and a file whose sha256 the compiler MEASURED over bytes @sandboxapis/archive rebuilds on demand (founder ruling F4, decisions/2026-09-14-0158). GitHub's package_type is a CLOSED enum (npm|maven|rubygems|docker|nuget|container) and canon's is npm|golang|pypi|generic, so this host publishes the npm package and the container registry and GitLab publishes the Go module and the PyPI distribution - a package_type outside the vendored enum would be invariant #2 broken to make a number look better. Gated on hasPackageRegistry(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Long tail
GET
/orgs/{org}/packages/{package_type}/{package_name}

SERVED 2026-09-14 (hello-20 wave W-github): features.packageRegistry mints Package/PackageVersion/PackageFile - one package per manifest in the head tree, one version per release at that release's own commit, and a file whose sha256 the compiler MEASURED over bytes @sandboxapis/archive rebuilds on demand (founder ruling F4, decisions/2026-09-14-0158). GitHub's package_type is a CLOSED enum (npm|maven|rubygems|docker|nuget|container) and canon's is npm|golang|pypi|generic, so this host publishes the npm package and the container registry and GitLab publishes the Go module and the PyPI distribution - a package_type outside the vendored enum would be invariant #2 broken to make a number look better. Gated on hasPackageRegistry(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Long tail
GET
/orgs/{org}/packages/{package_type}/{package_name}/versions

SERVED 2026-09-14 (hello-20 wave W-github): features.packageRegistry mints Package/PackageVersion/PackageFile - one package per manifest in the head tree, one version per release at that release's own commit, and a file whose sha256 the compiler MEASURED over bytes @sandboxapis/archive rebuilds on demand (founder ruling F4, decisions/2026-09-14-0158). GitHub's package_type is a CLOSED enum (npm|maven|rubygems|docker|nuget|container) and canon's is npm|golang|pypi|generic, so this host publishes the npm package and the container registry and GitLab publishes the Go module and the PyPI distribution - a package_type outside the vendored enum would be invariant #2 broken to make a number look better. Gated on hasPackageRegistry(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Long tail
GET
/orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}

SERVED 2026-09-14 (hello-20 wave W-github): features.packageRegistry mints Package/PackageVersion/PackageFile - one package per manifest in the head tree, one version per release at that release's own commit, and a file whose sha256 the compiler MEASURED over bytes @sandboxapis/archive rebuilds on demand (founder ruling F4, decisions/2026-09-14-0158). GitHub's package_type is a CLOSED enum (npm|maven|rubygems|docker|nuget|container) and canon's is npm|golang|pypi|generic, so this host publishes the npm package and the container registry and GitLab publishes the Go module and the PyPI distribution - a package_type outside the vendored enum would be invariant #2 broken to make a number look better. Gated on hasPackageRegistry(), so the 127 pins frozen before hello-20 answer the generation

served & verified
Long tail
GET
/user/docker/conflicts

no person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so a personal package namespace has nothing in it and nothing in it could collide on a registry migration. The person resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/user/packages

no person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so a personal package namespace has nothing in it and nothing in it could collide on a registry migration. The person resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/users/{username}/docker/conflicts

no person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so a personal package namespace has nothing in it and nothing in it could collide on a registry migration. The person resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/users/{username}/packages

no person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so a personal package namespace has nothing in it and nothing in it could collide on a registry migration. The person resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/user/packages/{package_type}/{package_name}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/user/packages/{package_type}/{package_name}/versions

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/user/packages/{package_type}/{package_name}/versions/{package_version_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/users/{username}/packages/{package_type}/{package_name}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/users/{username}/packages/{package_type}/{package_name}/versions

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
pulls13 of 15 served & verified
GET
/repos/{owner}/{repo}/pulls
served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}
served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/comments
served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/commits
served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/files

the changed-file list and the merge check are computable from the PR's commits and git trees

served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/merge

the changed-file list and the merge check are computable from the PR's commits and git trees

served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers
served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/reviews
served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}

a single review and its comments over review/review_comment

served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments

NO REVIEW COMMENT IN THIS UNIVERSE BELONGS TO A REVIEW. `review_comment.review` is NULL on every one of the 100 rows, which is why `shapePullReviewComment` has always rendered `pull_request_review_id: null` — so a review's comment list is empty BY THE DATA, and the response agrees with the comments' own bodies rather than contradicting them. The comments themselves are served and non-empty at `/pulls/{n}/comments`; only the review→comment edge is missing, and attaching a pull request's comments to its single review would invent a relationship canon never recorded. Falsifiable: the day the generator links a comment to a review, this row goes red. RULED by the founder 2026-09-09

served & verified
Core
GET
/repos/{owner}/{repo}/pulls/comments
served & verified
Core
GET
/repos/{owner}/{repo}/pulls/comments/{comment_id}
served & verified
Core
GET
/repos/{owner}/{repo}/stacks

no pull request in this universe is stacked on another — all 24 `pull` rows carry `base_branch='main'` and no pull's base is another pull's head (0 rows on that self-join); GitHub's own answer for a repository with no stacks is `[]` at 200. RULED by the founder 2026-09-12

served & verified
Core
GET
/repos/{owner}/{repo}/pulls/{pull_number}/merge-async/{uuid}

refuse — an asynchronous merge request exists only because a write created it (PUT .../merge-async returns the uuid), and this universe accepts no writes (invariant #3): every merged pull request here was merged by its own recorded merge, and none carries a merge-async uuid, so GitHub's own answer is its 404. The pull request must still resolve; an unknown number is the ordinary 404. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

planned
Core
GET
/repos/{owner}/{repo}/stacks/{stack_number}

refuse — one of twenty things nobody in this organization did: no custom property, no autolink, no interaction limit, no immutable-release setting and no pull-request stack was ever created, so nothing here is addressable by name or number. RULED by the founder 2026-09-14 (seed §A-R batch F1)

planned
Core
agents13 of 14 served & verified
GET
/orgs/{org}/agents/secrets

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience - GitHub's newest family, whose vendored operations mirror the Actions ones byte-for-byte and reuse the identical components; served as `organization-actions-secret`, so `visibility` is published and `selected_repositories_url` only on a `selected` row - a link on an `all` row would advertise a route that answers 409. NO `value` MEMBER IS SERVED AND NONE EXISTS: `actions-secret` declares a name and two dates, `ci_binding.value` is NULL on every masked row, and conformance asserts the property is absent from every served secret rather than trusting the schema, which sets no `additionalProperties: false`

served & verified
Long tail
GET
/orgs/{org}/agents/secrets/{secret_name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience - GitHub's newest family, whose vendored operations mirror the Actions ones byte-for-byte and reuse the identical components; a name the list published, never a name recomputed from the theme's pool. A name this organization does not hold is GitHub's own 404

served & verified
Long tail
GET
/orgs/{org}/agents/secrets/{secret_name}/repositories

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience - GitHub's newest family, whose vendored operations mirror the Actions ones byte-for-byte and reuse the identical components; the repositories the secret actually reaches - `all` reaches every one, `private` the private ones, `selected` the named ones. The vendored operation declares NO 409 on the secret form (only the variable form does), so this answers the 200 whatever the visibility, and conformance fetches every repository it names to prove the link resolves

served & verified
Long tail
GET
/orgs/{org}/agents/secrets/public-key

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience - GitHub's newest family, whose vendored operations mirror the Actions ones byte-for-byte and reuse the identical components; the scope's own 32 X25519 public-key bytes, base64-encoded, and its monotonic `key_id`. THE PUBLIC HALF IS REAL AND THERE IS NO PRIVATE HALF - this universe accepts no writes, so nothing is ever encrypted to these bytes; conformance base64-decodes them and asserts the length is 32 rather than accepting any string

served & verified
Long tail
GET
/orgs/{org}/agents/variables

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience - GitHub's newest family, whose vendored operations mirror the Actions ones byte-for-byte and reuse the identical components; `organization-actions-variable`, whose `value` IS declared and is READ from the artifact row canon's `value_source` names - the telemetry exporter's endpoint and its protocol - so the setting and the thing it configures cannot drift apart

served & verified
Long tail
GET
/orgs/{org}/agents/variables/{name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience - GitHub's newest family, whose vendored operations mirror the Actions ones byte-for-byte and reuse the identical components; a name the list published. A name this organization does not hold is GitHub's own 404

served & verified
Long tail
GET
/orgs/{org}/agents/variables/{name}/repositories

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. THE 409 BRANCH of the same operation, and the only answer this organization can give it: its one coding-agent variable is the workspace the agent operates in, which every repository sees, so its visibility is `all`. The vendored 409 declares no body and neither does this. The `actions` twin answers the 200, so the two rows together exercise both branches the document declares

served & verified
Long tail
GET
/repos/{owner}/{repo}/agents/organization-secrets

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience; the ORGANIZATION secrets this repository can see, and the visibility rule that decides which lives in `reader.orgBindingsVisibleToRepo` rather than in four renderers. Served as the PLAIN `actions-secret`, not the organization form - the vendored operation names that component here - so no `visibility` is published on this surface even though the rows are the organization's

served & verified
Long tail
GET
/repos/{owner}/{repo}/agents/organization-variables

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience; the organization variables this repository can see, through the same reader rule as its secret twin

served & verified
Long tail
GET
/repos/{owner}/{repo}/agents/secrets

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience; the repository's OWN secrets. Two of them are backed by a `person_credential` this organization really issued - the registry pull token and the integration-suite token, whose two dates are the ROTATION PAIR canon records - so their instants are facts rather than plausible numbers

served & verified
Long tail
GET
/repos/{owner}/{repo}/agents/secrets/{secret_name}

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience; a name the list published

served & verified
Long tail
GET
/repos/{owner}/{repo}/agents/secrets/public-key

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The `agents` family is canon's `coding-agent` audience; the repository scope's own 32 public-key bytes

served & verified
Long tail
GET
/repos/{owner}/{repo}/agents/variables

SERVED 2026-09-12 (hello-19 wave W-a) as GitHub's empty envelope at 200: this organization hands its coding agent ONE setting at the REPOSITORY scope and it is a SECRET - the push token the agent runs with - so there is no repository-scoped variable to publish. The one published agent setting, the workspace it operates in, is ORGANIZATION-scoped and reaches this repository through `/repos/{owner}/{repo}/agents/organization-variables`, which is green; duplicating it here would publish one setting as two. The route is the SAME code as its `actions` twin, so the day canon gives the agent a repository variable this row stops being empty on its own, and conformance drives it (`expectsEmpty`) rather than asserting nothing

served & verified
Long tail
GET
/repos/{owner}/{repo}/agents/variables/{name}

refuse — REFUSED 2026-09-12 (hello-19 wave W-a) with GitHub's own 404: no name resolves over the empty collection its list half answers - see that row. Ungated across generations, because "this repository holds no coding-agent variable" is as true on every registered pin as it is on hello-19

deferred
Long tail
projects8 of 14 served & verified
GET
/orgs/{org}/projectsV2

STALE REASON ("new canon entity Board"): a projectsV2 PROJECT is not a board. It is a titled, dated container of issues with an owner, a creator and an open/closed state, which is canon's `epic` exactly (22 rows) — the same entity renderer-linear/src/pm.ts already publishes as a Linear project. The BOARD (its views, columns and field definitions) is the part canon still lacks and no row here publishes one. Gated on hello-16's portfolio columns, four of which are REQUIRED members of `projects-v2`

served & verified
Next
GET
/orgs/{org}/projectsV2/{project_number}

STALE REASON ("new canon entity Board"): a projectsV2 PROJECT is not a board. It is a titled, dated container of issues with an owner, a creator and an open/closed state, which is canon's `epic` exactly (22 rows) — the same entity renderer-linear/src/pm.ts already publishes as a Linear project. The BOARD (its views, columns and field definitions) is the part canon still lacks and no row here publishes one. Gated on hello-16's portfolio columns, four of which are REQUIRED members of `projects-v2`

served & verified
Next
GET
/orgs/{org}/projectsV2/{project_number}/fields

SERVED 2026-09-14 (hello-20 wave W-github): features.boards mints board_column and board_field and NO board row - a projectsV2 project is already canon's epic, and a second object for one thing would be the duplication invariant #5 catches (decisions/2026-09-14-0233). A board's columns are the workflow states its issues ACTUALLY PASSED THROUGH, in issue_transition order, so the Status field's options are a measurement of this project's own work rather than a layout somebody chose; there is no WIP limit, because a peak is an observation and a limit is a policy nobody here set. Gated on hasBoards() as well as hasPortfolio()

served & verified
Next
GET
/orgs/{org}/projectsV2/{project_number}/fields/{field_id}

SERVED 2026-09-14 (hello-20 wave W-github): features.boards mints board_column and board_field and NO board row - a projectsV2 project is already canon's epic, and a second object for one thing would be the duplication invariant #5 catches (decisions/2026-09-14-0233). A board's columns are the workflow states its issues ACTUALLY PASSED THROUGH, in issue_transition order, so the Status field's options are a measurement of this project's own work rather than a layout somebody chose; there is no WIP limit, because a peak is an observation and a limit is a policy nobody here set. Gated on hasBoards() as well as hasPortfolio()

served & verified
Next
GET
/orgs/{org}/projectsV2/{project_number}/items

STALE REASON ("new canon entity Board"): the items of an epic ARE its issues (reader.epicIssues()), and each item's `content` is the object `/repos/{owner}/{repo}/issues/{issue_number}` already serves — so the two cross-check. Every item is an `Issue`: canon attaches a pull request to an issue rather than to an epic, and a draft issue exists only because somebody typed one into a project

served & verified
Next
GET
/orgs/{org}/projectsV2/{project_number}/items/{item_id}

STALE REASON ("new canon entity Board"): the items of an epic ARE its issues (reader.epicIssues()), and each item's `content` is the object `/repos/{owner}/{repo}/issues/{issue_number}` already serves — so the two cross-check. Every item is an `Issue`: canon attaches a pull request to an issue rather than to an epic, and a draft issue exists only because somebody typed one into a project

served & verified
Next
GET
/orgs/{org}/projectsV2/{project_number}/views/{view_number}/items

SERVED 2026-09-14 (hello-20 wave W-github): features.boards mints board_column and board_field and NO board row - a projectsV2 project is already canon's epic, and a second object for one thing would be the duplication invariant #5 catches (decisions/2026-09-14-0233). A board's columns are the workflow states its issues ACTUALLY PASSED THROUGH, in issue_transition order, so the Status field's options are a measurement of this project's own work rather than a layout somebody chose; there is no WIP limit, because a peak is an observation and a limit is a policy nobody here set. Gated on hasBoards() as well as hasPortfolio()

served & verified
Next
GET
/users/{username}/projectsV2

no person in this organization owns a project — all 22 `epic` rows carry a `team` and belong to one of the four teams, never to an individual; GitHub's own answer for a user who owns no projects is `[]` at 200. The ORGANIZATION's list is served with real content in the same wave, which is what makes this an answer rather than a gap. RULED by the founder 2026-09-12

served & verified
Next
GET
/users/{username}/projectsV2/{project_number}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
GET
/users/{username}/projectsV2/{project_number}/fields

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
GET
/users/{username}/projectsV2/{project_number}/fields/{field_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
GET
/users/{username}/projectsV2/{project_number}/items

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
GET
/users/{username}/projectsV2/{project_number}/items/{item_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
GET
/users/{username}/projectsV2/{project_number}/views/{view_number}/items

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
dependabot6 of 13 served & verified
GET
/orgs/{org}/dependabot/alerts

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/dependabot/secrets

SERVED 2026-09-12 (hello-19 wave W-a) as GitHub's empty envelope at 200, by FOUNDER RULING F3 (2026-09-12): olympus-labs runs no private package registry, so a dependency bot has nothing private to reach and this organization holds no Dependabot secret. The SCOPE is real - canon mints it and `.../dependabot/secrets/public-key` is green beside this row, exactly as GitHub publishes a Dependabot public key whether or not a secret exists - and the empty list is only an honest `[]` once something says the scope exists, which is why this row is gated on `hasCiBindings()` and answers the generation on an older artifact. `compiler/src/hello19.test.ts` coherence check 9 asserts the emptiness in canon at both windows, so the ruling is falsifiable the day this organization gains a private registry

served & verified
Long tail
GET
/orgs/{org}/dependabot/secrets/public-key

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The Dependabot scope's own 32 X25519 public-key bytes. GREEN even though the collection beside it is empty by founder ruling F3, because that is exactly what GitHub does: the key is what a client would encrypt a NEW secret to, so it is published whether or not one exists

served & verified
Long tail
GET
/repos/{owner}/{repo}/dependabot/alerts

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/dependabot/secrets

SERVED 2026-09-12 (hello-19 wave W-a) as GitHub's empty envelope at 200, by FOUNDER RULING F3 (2026-09-12): olympus-labs runs no private package registry, so a dependency bot has nothing private to reach and this repository holds no Dependabot secret. The SCOPE is real - canon mints it and `.../dependabot/secrets/public-key` is green beside this row, exactly as GitHub publishes a Dependabot public key whether or not a secret exists - and the empty list is only an honest `[]` once something says the scope exists, which is why this row is gated on `hasCiBindings()` and answers the generation on an older artifact. `compiler/src/hello19.test.ts` coherence check 9 asserts the emptiness in canon at both windows, so the ruling is falsifiable the day this organization gains a private registry

served & verified
Long tail
GET
/repos/{owner}/{repo}/dependabot/secrets/public-key

SERVED 2026-09-12 (hello-19 wave W-a): `ci_binding` + `ci_binding_scope` - the settings and credentials this organization hands its pipelines. GitHub publishes ONE object as two URL families, so a secret is a binding whose value may not be published and a variable is one whose value may; canon carries exactly that boolean (`masked`) and this row is the same read with a different filter. The Dependabot scope's own 32 X25519 public-key bytes. GREEN even though the collection beside it is empty by founder ruling F3, because that is exactly what GitHub does: the key is what a client would encrypt a NEW secret to, so it is published whether or not one exists

served & verified
Long tail
GET
/enterprises/{enterprise}/dependabot/alerts

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Long tail
GET
/enterprises/{enterprise}/dependabot/repository-access

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Long tail
GET
/orgs/{org}/dependabot/repository-access

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/orgs/{org}/dependabot/secrets/{secret_name}

refuse — REFUSED 2026-09-12 (hello-19 wave W-a) with GitHub's own 404: no name resolves over the empty collection founder ruling F3 leaves at this scope - olympus-labs runs no private package registry. Ungated across generations, because the absence is true on every artifact this project has produced

deferred
Long tail
GET
/orgs/{org}/dependabot/secrets/{secret_name}/repositories

refuse — REFUSED 2026-09-12 (hello-19 wave W-a) with GitHub's own 404: the secret whose repositories this asks for does not exist - see the by-name row beside it

deferred
Long tail
GET
/repos/{owner}/{repo}/dependabot/alerts/{alert_number}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/dependabot/secrets/{secret_name}

refuse — REFUSED 2026-09-12 (hello-19 wave W-a) with GitHub's own 404: no name resolves over the empty collection founder ruling F3 leaves at this scope

deferred
Long tail
graphql12 of 13 served & verified
GQL
checks
served & verified
Core
GQL
commit-statuses
served & verified
Core
GQL
issues
served & verified
Core
GQL
orgs
served & verified
Core
GQL
pulls
served & verified
Core
GQL
refs
served & verified
Core
GQL
releases
served & verified
Core
GQL
repos
served & verified
Core
GQL
reviews
served & verified
Core
GQL
teams
served & verified
Core
GQL
users
served & verified
Core
GQL
projects-v2-views

SERVED 2026-09-14 (hello-20 leftovers): the ProjectV2View type, the ProjectV2.views connection and its view(number:) sibling now sit in this host's schema subset, reached through Organization.projectsV2/projectV2 - every field and argument name validated against the VENDORED GitHub schema so a transcription slip reds rather than diverging quietly. A project has ONE view and that is a reading of the canon rather than a limit: features.boards mints one layout per scope (decisions/2026-09-14-0233), which is the same fact /orgs/{org}/projectsV2/{n}/views/1/items rests on, and layout is BOARD_LAYOUT because an ordered column list is what a board is. An epic nobody filed an issue against truthfully has NO view, and the suite asserts both cases exist. THE TWO GATES ARE SEPARATE SENTENCES: no portfolio names hello-16, no board names hello-20, each an explicit NOT_COVERED error in the errors array carrying the generation - never an empty connection (invariant #4's GraphQL clause, the wording renderer-gitlab and renderer-linear already use). The row runs on a hello-20 harness of its own, which is what the previous ask named

served & verified
Long tail
GQL
discussions

generate — new canon entity Discussion. The 2026-09-14 batch rules that nobody in olympus-labs enabled discussions - has_discussions is false on every repository object this host serves - but a GraphQL entity row cannot be armed empty or refused today: MODES.yaml's empty mode is driven by an expectsEmpty conformance entry, which runs a REST fetch, and no graphql row in the fleet carries one. THE ASK: an empty/refuse mechanism for a GraphQL entity row. Reported by the 2026-09-14 GitHub serving wave

deferred
Next
branches8 of 12 served & verified
GET
/repos/{owner}/{repo}/branches
served & verified
Core
GET
/repos/{owner}/{repo}/branches/{branch}
served & verified
Core
GET
/repos/{owner}/{repo}/branches/{branch}/protection
served & verified
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins
served & verified
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews
served & verified
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/required_signatures

the protection document already shapes required_signatures and the status-check contexts from real check runs (render-protection.ts)

served & verified
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks
served & verified
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts

the protection document already shapes required_signatures and the status-check contexts from real check runs (render-protection.ts)

served & verified
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/restrictions

refuse — no branch in this repository restricts who may push — canon's only two `protected_ref` rows are scoped to `namespace-001` and repo-01 carries an empty `namespace` column, so the document shapeBranchProtection publishes (render-protection.ts:37) has no `restrictions` object; GitHub's own answer for a protected branch with no push restrictions is 404. RULED by the founder 2026-09-12

planned
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps

refuse — no branch in this repository restricts who may push — canon's only two `protected_ref` rows are scoped to `namespace-001` and repo-01 carries an empty `namespace` column, so the document shapeBranchProtection publishes (render-protection.ts:37) has no `restrictions` object; GitHub's own answer for a protected branch with no push restrictions is 404. RULED by the founder 2026-09-12

planned
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams

refuse — no branch in this repository restricts who may push — canon's only two `protected_ref` rows are scoped to `namespace-001` and repo-01 carries an empty `namespace` column, so the document shapeBranchProtection publishes (render-protection.ts:37) has no `restrictions` object; GitHub's own answer for a protected branch with no push restrictions is 404. RULED by the founder 2026-09-12

planned
Next
GET
/repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users

refuse — no branch in this repository restricts who may push — canon's only two `protected_ref` rows are scoped to `namespace-001` and repo-01 carries an empty `namespace` column, so the document shapeBranchProtection publishes (render-protection.ts:37) has no `restrictions` object; GitHub's own answer for a protected branch with no push restrictions is 404. RULED by the founder 2026-09-12

planned
Next
deployments9 of 11 served & verified
GET
/repos/{owner}/{repo}/deployments
served & verified
Next
GET
/repos/{owner}/{repo}/deployments/{deployment_id}
served & verified
Next
GET
/repos/{owner}/{repo}/deployments/{deployment_id}/statuses
served & verified
Next
GET
/repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}
served & verified
Next
GET
/repos/{owner}/{repo}/environments
served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}
served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules

neither `production` nor `staging` restricts which branches may deploy to it — all 22 `deployment` rows name a ref that already exists in `branch`, and canon carries no per-environment branch policy; GitHub's own answer for an environment with no policies is `{total_count: 0, branch_policies: []}` at 200 (this operation nests the same empty page under `custom_deployment_protection_rules`). RULED by the founder 2026-09-12

served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps

neither `production` nor `staging` restricts which branches may deploy to it — all 22 `deployment` rows name a ref that already exists in `branch`, and canon carries no per-environment branch policy; GitHub's own answer for an environment with no policies is `{total_count: 0, branch_policies: []}` at 200 (this operation nests the same empty page under `available_custom_deployment_protection_rule_integrations`). RULED by the founder 2026-09-12

served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies

neither `production` nor `staging` restricts which branches may deploy to it — all 22 `deployment` rows name a ref that already exists in `branch`, and canon carries no per-environment branch policy; GitHub's own answer for an environment with no policies is `{total_count: 0, branch_policies: []}` at 200 (this operation nests the same empty page under `branch_policies`). RULED by the founder 2026-09-12

served & verified
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
GET
/repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}

refuse — the by-id half of a list that is already an honest empty. No person in olympus-labs owns anything publishable - every repository belongs to the organization (the hello-16 ownership ruling) - so the /user and /users/{username} package collections are empty and no package name can resolve under them; the ruleset reads are addressed over four green/empty ruleset lists (founder, 2026-09-12: no ruleset exists at either scope); the two environment reads are addressed over three armed empties; and the personal projectsV2 reads are addressed over a personal project list nobody here keeps. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Next
gists4 of 11 served & verified
GET
/gists

no snippet and no gist exists in this organization - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one, which is GitLab's own armed wording for the same fact. The collection's parent resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/gists/public

no snippet and no gist exists in this organization - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one, which is GitLab's own armed wording for the same fact. The collection's parent resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/gists/starred

no snippet and no gist exists in this organization - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one, which is GitLab's own armed wording for the same fact. The collection's parent resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/users/{username}/gists

no snippet and no gist exists in this organization - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one, which is GitLab's own armed wording for the same fact. The collection's parent resolves, so the honest answer is GitHub's empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/gists/{gist_id}

refuse — no gist exists in this organization, so no gist id can resolve - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one. GitHub's own answer for a gist that does not exist is 404, which is what this row mirrors; the three gist COLLECTIONS beside it answer the empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/gists/{gist_id}/{sha}

refuse — no gist exists in this organization, so no gist id can resolve - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one. GitHub's own answer for a gist that does not exist is 404, which is what this row mirrors; the three gist COLLECTIONS beside it answer the empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/gists/{gist_id}/comments

refuse — no gist exists in this organization, so no gist id can resolve - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one. GitHub's own answer for a gist that does not exist is 404, which is what this row mirrors; the three gist COLLECTIONS beside it answer the empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/gists/{gist_id}/comments/{comment_id}

refuse — no gist exists in this organization, so no gist id can resolve - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one. GitHub's own answer for a gist that does not exist is 404, which is what this row mirrors; the three gist COLLECTIONS beside it answer the empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/gists/{gist_id}/commits

refuse — no gist exists in this organization, so no gist id can resolve - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one. GitHub's own answer for a gist that does not exist is 404, which is what this row mirrors; the three gist COLLECTIONS beside it answer the empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/gists/{gist_id}/forks

refuse — no gist exists in this organization, so no gist id can resolve - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one. GitHub's own answer for a gist that does not exist is 404, which is what this row mirrors; the three gist COLLECTIONS beside it answer the empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/gists/{gist_id}/star

refuse — no gist exists in this organization, so no gist id can resolve - every shared file in olympus-labs lives in the parthenon repository and no persona has ever posted one. GitHub's own answer for a gist that does not exist is 404, which is what this row mirrors; the three gist COLLECTIONS beside it answer the empty list at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
migrations0 of 11 served & verified
GET
/repos/{owner}/{repo}/import

refuse — a source import exists only because someone started one, and this universe has never run one — but GitHub removed the Source Import API on 2024-04-12, before the 2026-03-10 generation every gh pin emulates, so no pin serves it and every host answers GitHub's own deprecated 404 naming the GitHub Importer (meta.retired_meaning)

retired
Long tail
GET
/repos/{owner}/{repo}/import/authors

refuse — a source import exists only because someone started one, and this universe has never run one — but GitHub removed the Source Import API on 2024-04-12, before the 2026-03-10 generation every gh pin emulates, so no pin serves it and every host answers GitHub's own deprecated 404 naming the GitHub Importer (meta.retired_meaning)

retired
Long tail
GET
/repos/{owner}/{repo}/import/large_files

refuse — a source import exists only because someone started one, and this universe has never run one — but GitHub removed the Source Import API on 2024-04-12, before the 2026-03-10 generation every gh pin emulates, so no pin serves it and every host answers GitHub's own deprecated 404 naming the GitHub Importer (meta.retired_meaning)

retired
Long tail
GET
/orgs/{org}/migrations

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
GET
/orgs/{org}/migrations/{migration_id}

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
GET
/orgs/{org}/migrations/{migration_id}/archive

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
GET
/orgs/{org}/migrations/{migration_id}/repositories

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
GET
/user/migrations

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
GET
/user/migrations/{migration_id}

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
GET
/user/migrations/{migration_id}/archive

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
GET
/user/migrations/{migration_id}/repositories

refuse — a migration or a source import exists only because someone started one; this universe has never run either, so GitHub answers 404 for the job that was never created

deferred
Long tail
billing10 of 10 served & verified
GET
/organizations/{org}/settings/billing/ai_credit/usage

SERVED 2026-09-14 (hello-20 wave W-github): features.billingPeriods mints billing_period/spend_limit/retention_policy - one UTC calendar month of one product's spend on one meter, clipped to the window (decisions/2026-09-14-0343). EVERY AMOUNT DIVIDES BACK: unit_price_micro_cents stores the rate the row was priced at, so a reader multiplies the quantity by it and gets the gross, and gross = discount + net holds BY CONSTRUCTION rather than by two roundings. Every quantity is a fold over rows this artifact already carries - minutes are the month's jobs with each duration rounded up, seats are the Copilot licences held at month end, premium requests are the sessions ai_usage_day recorded - and every rate was verified against the vendor's own published page on 2026-09-14

served & verified
Long tail
GET
/organizations/{org}/settings/billing/budgets

SERVED 2026-09-14 (hello-20 wave W-github): features.billingPeriods mints spend_limit, and a cap CARRIES NO AMOUNT in the artifact: it is a policy expressed as a MULTIPLE of the worst month, and this host resolves it against the price list it already publishes, so there is one number behind the budget and the usage report rather than two that could drift. alert_threshold_percent is floor(100 / multiple), derived from the multiple rather than chosen beside it

served & verified
Long tail
GET
/organizations/{org}/settings/billing/budgets/{budget_id}

SERVED 2026-09-14 (hello-20 wave W-github): features.billingPeriods mints spend_limit, and a cap CARRIES NO AMOUNT in the artifact: it is a policy expressed as a MULTIPLE of the worst month, and this host resolves it against the price list it already publishes, so there is one number behind the budget and the usage report rather than two that could drift. alert_threshold_percent is floor(100 / multiple), derived from the multiple rather than chosen beside it

served & verified
Long tail
GET
/organizations/{org}/settings/billing/premium_request/usage

SERVED 2026-09-14 (hello-20 wave W-github): features.billingPeriods mints billing_period/spend_limit/retention_policy - one UTC calendar month of one product's spend on one meter, clipped to the window (decisions/2026-09-14-0343). EVERY AMOUNT DIVIDES BACK: unit_price_micro_cents stores the rate the row was priced at, so a reader multiplies the quantity by it and gets the gross, and gross = discount + net holds BY CONSTRUCTION rather than by two roundings. Every quantity is a fold over rows this artifact already carries - minutes are the month's jobs with each duration rounded up, seats are the Copilot licences held at month end, premium requests are the sessions ai_usage_day recorded - and every rate was verified against the vendor's own published page on 2026-09-14

served & verified
Long tail
GET
/organizations/{org}/settings/billing/usage

SERVED 2026-09-14 (hello-20 wave W-github): features.billingPeriods mints billing_period/spend_limit/retention_policy - one UTC calendar month of one product's spend on one meter, clipped to the window (decisions/2026-09-14-0343). EVERY AMOUNT DIVIDES BACK: unit_price_micro_cents stores the rate the row was priced at, so a reader multiplies the quantity by it and gets the gross, and gross = discount + net holds BY CONSTRUCTION rather than by two roundings. Every quantity is a fold over rows this artifact already carries - minutes are the month's jobs with each duration rounded up, seats are the Copilot licences held at month end, premium requests are the sessions ai_usage_day recorded - and every rate was verified against the vendor's own published page on 2026-09-14

served & verified
Long tail
GET
/organizations/{org}/settings/billing/usage/summary

SERVED 2026-09-14 (hello-20 wave W-github): features.billingPeriods mints billing_period/spend_limit/retention_policy - one UTC calendar month of one product's spend on one meter, clipped to the window (decisions/2026-09-14-0343). EVERY AMOUNT DIVIDES BACK: unit_price_micro_cents stores the rate the row was priced at, so a reader multiplies the quantity by it and gets the gross, and gross = discount + net holds BY CONSTRUCTION rather than by two roundings. Every quantity is a fold over rows this artifact already carries - minutes are the month's jobs with each duration rounded up, seats are the Copilot licences held at month end, premium requests are the sessions ai_usage_day recorded - and every rate was verified against the vendor's own published page on 2026-09-14

served & verified
Long tail
GET
/users/{username}/settings/billing/ai_credit/usage

nobody in olympus-labs owns anything billable of their own: every repository belongs to the organization (the hello-16 ownership ruling), every Copilot seat is granted by it, and every minute and byte on the bill is the organization's - so a personal account here runs up no usage at all. The person resolves and the report is a real one about them, so the honest answer is the empty usage report at 200 rather than a 404. Rides the founder's 2026-09-14 batch on the same fact as the /user(s)/packages group

served & verified
Long tail
GET
/users/{username}/settings/billing/premium_request/usage

nobody in olympus-labs owns anything billable of their own: every repository belongs to the organization (the hello-16 ownership ruling), every Copilot seat is granted by it, and every minute and byte on the bill is the organization's - so a personal account here runs up no usage at all. The person resolves and the report is a real one about them, so the honest answer is the empty usage report at 200 rather than a 404. Rides the founder's 2026-09-14 batch on the same fact as the /user(s)/packages group

served & verified
Long tail
GET
/users/{username}/settings/billing/usage

nobody in olympus-labs owns anything billable of their own: every repository belongs to the organization (the hello-16 ownership ruling), every Copilot seat is granted by it, and every minute and byte on the bill is the organization's - so a personal account here runs up no usage at all. The person resolves and the report is a real one about them, so the honest answer is the empty usage report at 200 rather than a 404. Rides the founder's 2026-09-14 batch on the same fact as the /user(s)/packages group

served & verified
Long tail
GET
/users/{username}/settings/billing/usage/summary

nobody in olympus-labs owns anything billable of their own: every repository belongs to the organization (the hello-16 ownership ruling), every Copilot seat is granted by it, and every minute and byte on the bill is the organization's - so a personal account here runs up no usage at all. The person resolves and the report is a real one about them, so the honest answer is the empty usage report at 200 rather than a 404. Rides the founder's 2026-09-14 batch on the same fact as the /user(s)/packages group

served & verified
Long tail
commits9 of 10 served & verified
GET
/repos/{owner}/{repo}/commits
served & verified
Core
GET
/repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head
served & verified
Core
GET
/repos/{owner}/{repo}/commits/{commit_sha}/pulls
served & verified
Core
GET
/repos/{owner}/{repo}/commits/{ref}
served & verified
Core
GET
/repos/{owner}/{repo}/commits/{ref}/status
served & verified
Core
GET
/repos/{owner}/{repo}/commits/{ref}/statuses
served & verified
Core
GET
/repos/{owner}/{repo}/compare/{basehead}
served & verified
Core
GET
/repos/{owner}/{repo}/comments

no commit in this universe carries a comment (DECISIONS 2026-08-20 [commit-detail] decision 2), so the repository-wide commit-comment list is truthfully empty

served & verified
Long tail
GET
/repos/{owner}/{repo}/commits/{commit_sha}/comments

no commit in this universe carries a comment: review conversation happens on the pull request, and canon has no commit-comment entity (DECISIONS 2026-08-20 [commit-detail] decision 2)

served & verified
Long tail
GET
/repos/{owner}/{repo}/comments/{comment_id}

refuse — the id half of the commit-comment pair: with no commit comment in this universe, no comment id can resolve

planned
Long tail
copilot-spaces2 of 10 served & verified
GET
/orgs/{org}/copilot-spaces

nobody in this organization has made a Copilot space - a space is a curated context bundle a person creates, and this universe records no such act (the migrations/import pattern: it exists only because somebody started one). The scope resolves, so the honest answer is the empty {spaces: []} envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/users/{username}/copilot-spaces

nobody in this organization has made a Copilot space - a space is a curated context bundle a person creates, and this universe records no such act (the migrations/import pattern: it exists only because somebody started one). The scope resolves, so the honest answer is the empty {spaces: []} envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/copilot-spaces/{space_number}

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/orgs/{org}/copilot-spaces/{space_number}/collaborators

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/orgs/{org}/copilot-spaces/{space_number}/resources

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/orgs/{org}/copilot-spaces/{space_number}/resources/{space_resource_id}

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/users/{username}/copilot-spaces/{space_number}

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/users/{username}/copilot-spaces/{space_number}/collaborators

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/users/{username}/copilot-spaces/{space_number}/resources

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/users/{username}/copilot-spaces/{space_number}/resources/{space_resource_id}

refuse — nobody in this organization has made a Copilot space, so no space number can resolve and neither can a collaborator or a resource under one - the two space COLLECTIONS beside this row answer the empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
metrics10 of 10 served & verified
GET
/repos/{owner}/{repo}/community/profile

the community profile is which of README/LICENSE/CONTRIBUTING/CODE_OF_CONDUCT the tree actually holds

served & verified
Long tail
GET
/repos/{owner}/{repo}/stats/code_frequency

every statistic is an aggregation over commits (authors, weeks, additions/deletions)

served & verified
Long tail
GET
/repos/{owner}/{repo}/stats/commit_activity

every statistic is an aggregation over commits (authors, weeks, additions/deletions)

served & verified
Long tail
GET
/repos/{owner}/{repo}/stats/contributors

every statistic is an aggregation over commits (authors, weeks, additions/deletions)

served & verified
Long tail
GET
/repos/{owner}/{repo}/stats/participation

every statistic is an aggregation over commits (authors, weeks, additions/deletions)

served & verified
Long tail
GET
/repos/{owner}/{repo}/stats/punch_card

every statistic is an aggregation over commits (authors, weeks, additions/deletions)

served & verified
Long tail
GET
/repos/{owner}/{repo}/traffic/clones

this replica records no request of its own, and nobody has viewed or cloned these repositories from outside - an API-insight or a traffic count would be a number with no fact behind it, which is the held-vs-invent line SPEC:220 draws. The scope resolves, so the honest answer is the report with an empty series (and, where the report carries them, the two zero counts that say the same thing) at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/traffic/popular/paths

this replica records no request of its own, and nobody has viewed or cloned these repositories from outside - an API-insight or a traffic count would be a number with no fact behind it, which is the held-vs-invent line SPEC:220 draws. The scope resolves, so the honest answer is the report with an empty series (and, where the report carries them, the two zero counts that say the same thing) at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/traffic/popular/referrers

this replica records no request of its own, and nobody has viewed or cloned these repositories from outside - an API-insight or a traffic count would be a number with no fact behind it, which is the held-vs-invent line SPEC:220 draws. The scope resolves, so the honest answer is the report with an empty series (and, where the report carries them, the two zero counts that say the same thing) at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/traffic/views

this replica records no request of its own, and nobody has viewed or cloned these repositories from outside - an API-insight or a traffic count would be a number with no fact behind it, which is the held-vs-invent line SPEC:220 draws. The scope resolves, so the honest answer is the report with an empty series (and, where the report carries them, the two zero counts that say the same thing) at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
code-security2 of 9 served & verified
GET
/orgs/{org}/code-security/configurations

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/code-security/configurations/defaults

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/enterprises/{enterprise}/code-security/configurations

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Long tail
GET
/enterprises/{enterprise}/code-security/configurations/{configuration_id}

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Long tail
GET
/enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Long tail
GET
/enterprises/{enterprise}/code-security/configurations/defaults

refuse — olympus-labs is a standalone organization, not an enterprise account, so no enterprise slug in this universe resolves — GitHub's own 404 for an unknown enterprise is the whole answer

deferred
Long tail
GET
/orgs/{org}/code-security/configurations/{configuration_id}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/orgs/{org}/code-security/configurations/{configuration_id}/repositories

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-security-configuration

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
secret-scanning5 of 8 served & verified
GET
/orgs/{org}/secret-scanning/alerts

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/secret-scanning/custom-patterns

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/secret-scanning/alerts

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/secret-scanning/custom-patterns

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/secret-scanning/scan-history

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/secret-scanning/pattern-configurations

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
agent-automations2 of 7 served & verified
GET
/agents/automations

the caller's automations are a bare array, and it is empty because no Copilot automation exists in this data set: an automation exists only because a write created one (POST /agents/repos/{owner}/{repo}/automations), this data set has issued none, and the repository's own cloud-agent configuration on this host reports is_automations_enabled false, so no agent task here was started by one. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

served & verified
Long tail
GET
/agents/repos/{owner}/{repo}/automations

the repository's automations are the {automations, total_count} envelope with total_count 0, because no Copilot automation exists in this data set: an automation exists only because a write created one (POST /agents/repos/{owner}/{repo}/automations), this data set has issued none, and the repository's own cloud-agent configuration on this host reports is_automations_enabled false, so no agent task here was started by one. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

served & verified
Long tail
GET
/agents/automations/{automation_id}

refuse — the by-id half of an honestly empty list, so no id resolves and GitHub's own answer is its 404: no Copilot automation exists in this data set: an automation exists only because a write created one (POST /agents/repos/{owner}/{repo}/automations), this data set has issued none, and the repository's own cloud-agent configuration on this host reports is_automations_enabled false, so no agent task here was started by one. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

deferred
Long tail
GET
/agents/automations/{automation_id}/tasks

refuse — the tasks of an automation that cannot be addressed, so GitHub's own 404: no Copilot automation exists in this data set: an automation exists only because a write created one (POST /agents/repos/{owner}/{repo}/automations), this data set has issued none, and the repository's own cloud-agent configuration on this host reports is_automations_enabled false, so no agent task here was started by one. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

deferred
Long tail
GET
/agents/automations/available-tools

generateheld · data-licensing — the tools an automation can select are GitHub's own catalogue, not a fact about this data set: the operation's schema calls the catalogue authoritative and open-ended and says clients must accept identifiers they have not seen, so every id, title and description would be copied from the vendor, which this project holds no grant to redistribute, and a renderer constant would be the request-time vendor catalogue the /vendors ruling forbids. Answers the coverage 404 until an independently licensed source exists (decisions/2026-10-27-2137-github-unclassified-eight.md)

deferred
Long tail
GET
/agents/automations/available-triggers

generateheld · data-licensing — the triggers an automation can fire on, with their field schemas, are GitHub's own catalogue, not a fact about this data set: the operation's schema calls the catalogue authoritative and open-ended and says clients must accept identifiers they have not seen, so every id, title and description would be copied from the vendor, which this project holds no grant to redistribute, and a renderer constant would be the request-time vendor catalogue the /vendors ruling forbids. Answers the coverage 404 until an independently licensed source exists (decisions/2026-10-27-2137-github-unclassified-eight.md)

deferred
Long tail
GET
/agents/repos/{owner}/{repo}/automations/{automation_id}

refuse — the by-id half of the repository's honestly empty automation list, so no id resolves and GitHub's own answer is its 404: no Copilot automation exists in this data set: an automation exists only because a write created one (POST /agents/repos/{owner}/{repo}/automations), this data set has issued none, and the repository's own cloud-agent configuration on this host reports is_automations_enabled false, so no agent task here was started by one. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

deferred
Long tail
search7 of 7 served & verified
GET
/search/code

search over the artifact rows the other search endpoints already query

served & verified
Next
GET
/search/commits

search over the artifact rows the other search endpoints already query

served & verified
Next
GET
/search/issues
served & verified
Next
GET
/search/labels

search over the artifact rows the other search endpoints already query

served & verified
Next
GET
/search/repositories
served & verified
Next
GET
/search/topics

one of twenty things nobody in this organization did: no org custom property was defined, no repository carries a value for one, no org issue field exists, no autolink was configured, and this replica keeps no global topic index of its own. The scope resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Next
GET
/search/users
served & verified
Next
checks6 of 6 served & verified
GET
/repos/{owner}/{repo}/check-runs/{check_run_id}
served & verified
Core
GET
/repos/{owner}/{repo}/check-runs/{check_run_id}/annotations

this universe's CI records a per-job conclusion and nothing finer, so a resolving check-run id answers 200 [] while a bogus one still 404s (DECISIONS 2026-08-20 [commit-detail], verdict b)

served & verified
Core
GET
/repos/{owner}/{repo}/check-suites/{check_suite_id}
served & verified
Core
GET
/repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs
served & verified
Core
GET
/repos/{owner}/{repo}/commits/{ref}/check-runs
served & verified
Core
GET
/repos/{owner}/{repo}/commits/{ref}/check-suites
served & verified
Core
classroom0 of 6 served & verified
GET
/assignments/{assignment_id}

refuse — GitHub Classroom is a separate product with its own teacher accounts; this universe has no classroom, and every classroom object exists only because a teacher created it — and GitHub sunset Classroom itself on 2026-08-28, so live hosts answer its own 410 while the gh pins, which all emulate the pre-sunset 2026-03-10 generation, keep this refusal (meta.retired_meaning)

retired
Long tail
GET
/assignments/{assignment_id}/accepted_assignments

refuse — GitHub Classroom is a separate product with its own teacher accounts; this universe has no classroom, and every classroom object exists only because a teacher created it — and GitHub sunset Classroom itself on 2026-08-28, so live hosts answer its own 410 while the gh pins, which all emulate the pre-sunset 2026-03-10 generation, keep this refusal (meta.retired_meaning)

retired
Long tail
GET
/assignments/{assignment_id}/grades

refuse — GitHub Classroom is a separate product with its own teacher accounts; this universe has no classroom, and every classroom object exists only because a teacher created it — and GitHub sunset Classroom itself on 2026-08-28, so live hosts answer its own 410 while the gh pins, which all emulate the pre-sunset 2026-03-10 generation, keep this refusal (meta.retired_meaning)

retired
Long tail
GET
/classrooms

refuse — GitHub Classroom is a separate product with its own teacher accounts; this universe has no classroom, and every classroom object exists only because a teacher created it — and GitHub sunset Classroom itself on 2026-08-28, so live hosts answer its own 410 while the gh pins, which all emulate the pre-sunset 2026-03-10 generation, keep this refusal (meta.retired_meaning)

retired
Long tail
GET
/classrooms/{classroom_id}

refuse — GitHub Classroom is a separate product with its own teacher accounts; this universe has no classroom, and every classroom object exists only because a teacher created it — and GitHub sunset Classroom itself on 2026-08-28, so live hosts answer its own 410 while the gh pins, which all emulate the pre-sunset 2026-03-10 generation, keep this refusal (meta.retired_meaning)

retired
Long tail
GET
/classrooms/{classroom_id}/assignments

refuse — GitHub Classroom is a separate product with its own teacher accounts; this universe has no classroom, and every classroom object exists only because a teacher created it — and GitHub sunset Classroom itself on 2026-08-28, so live hosts answer its own 410 while the gh pins, which all emulate the pre-sunset 2026-03-10 generation, keep this refusal (meta.retired_meaning)

retired
Long tail
git5 of 6 served & verified
GET
/repos/{owner}/{repo}/git/blobs/{file_sha}
served & verified
Long tail
GET
/repos/{owner}/{repo}/git/commits/{commit_sha}
served & verified
Long tail
GET
/repos/{owner}/{repo}/git/matching-refs/{ref}

refs resolve against the branch/commit tables the git transport already serves

served & verified
Long tail
GET
/repos/{owner}/{repo}/git/ref/{ref}

refs resolve against the branch/commit tables the git transport already serves

served & verified
Long tail
GET
/repos/{owner}/{repo}/git/trees/{tree_sha}
served & verified
Long tail
GET
/repos/{owner}/{repo}/git/tags/{tag_sha}

refuse — EVERY TAG IN THIS UNIVERSE IS LIGHTWEIGHT. A canonical `release` carries tag, body, author, created_epoch and tag_commit, but no tag OBJECT and therefore no object sha — and `{tag_sha}` is the only way this operation is addressed, so no sha can ever resolve. The project already ruled this in packages/renderer-github/src/git/objects.ts (`repoRefs`): 'Tags are LIGHTWEIGHT (a ref straight at a commit), which is what the artifact actually models … Inventing an annotated tag object here would mint a sha no other endpoint serves.' The Azure DevOps twin (`.../annotatedtags/{objectId}`) was ruled the same way in #419. GitHub answers 404 for a git object it does not hold, which is the whole answer. RULED by the founder 2026-09-09

deferred
Long tail
interactions4 of 6 served & verified
GET
/orgs/{org}/interaction-limits

no interaction limit is active anywhere in this universe — olympus-labs is a private organization whose one repository is private (repo.visibility='private'), so there is no drive-by traffic to limit and nobody has set one; GitHub's own answer for a scope with no active limit is `{}` at 200 (the spec's 200 has no required member). RULED by the founder 2026-09-12

served & verified
Long tail
GET
/repos/{owner}/{repo}/interaction-limits

no interaction limit is active anywhere in this universe — olympus-labs is a private organization whose one repository is private (repo.visibility='private'), so there is no drive-by traffic to limit and nobody has set one; GitHub's own answer for a scope with no active limit is `{}` at 200 (the spec's 200 has no required member). RULED by the founder 2026-09-12

served & verified
Long tail
GET
/repos/{owner}/{repo}/interaction-limits/pulls/bypass-list

no interaction limit is active anywhere in this universe — olympus-labs is a private organization whose one repository is private (repo.visibility='private'), so there is no drive-by traffic to limit and nobody has set one; this operation's own 200 is an ARRAY of the users who may bypass the cap, so its empty answer is `[]` rather than the `{}` the three limit reads carry. RULED by the founder 2026-09-12

served & verified
Long tail
GET
/user/interaction-limits

no interaction limit is active anywhere in this universe — olympus-labs is a private organization whose one repository is private (repo.visibility='private'), so there is no drive-by traffic to limit and nobody has set one; GitHub's own answer for a scope with no active limit is `{}` at 200 (the spec's 200 has no required member). RULED by the founder 2026-09-12

served & verified
Long tail
GET
/orgs/{org}/interaction-limits/pulls/creation-cap

refuse — the organization twin of the repository row the founder ruled on 2026-09-14 (seed batch F1): no interaction limit was ever created in this organization, which /orgs/{org}/interaction-limits already answers with {}, so there is no creation-cap configuration to read and GitHub's own answer is its 404. RULED 2026-10-23 (fleet reserve, from the 2026-10-20 re-pin proposals)

deferred
Long tail
GET
/repos/{owner}/{repo}/interaction-limits/pulls/creation-cap

refuse — one of twenty things nobody in this organization did: no custom property, no autolink, no interaction limit, no immutable-release setting and no pull-request stack was ever created, so nothing here is addressable by name or number. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
pages0 of 6 served & verified
GET
/repos/{owner}/{repo}/pages

refuse — olympus-labs publishes no Pages site - GitLab's armed wording, applied to GitHub - so the whole family refuses, the builds LIST included: a build list is a collection under a SITE, and the site is what does not exist, so there is no resolving parent for it to be empty under. GitHub's own answer for a repository with no Pages site is 404. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/pages/builds

refuse — olympus-labs publishes no Pages site - GitLab's armed wording, applied to GitHub - so the whole family refuses, the builds LIST included: a build list is a collection under a SITE, and the site is what does not exist, so there is no resolving parent for it to be empty under. GitHub's own answer for a repository with no Pages site is 404. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/pages/builds/{build_id}

refuse — olympus-labs publishes no Pages site - GitLab's armed wording, applied to GitHub - so the whole family refuses, the builds LIST included: a build list is a collection under a SITE, and the site is what does not exist, so there is no resolving parent for it to be empty under. GitHub's own answer for a repository with no Pages site is 404. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/pages/builds/latest

refuse — olympus-labs publishes no Pages site - GitLab's armed wording, applied to GitHub - so the whole family refuses, the builds LIST included: a build list is a collection under a SITE, and the site is what does not exist, so there is no resolving parent for it to be empty under. GitHub's own answer for a repository with no Pages site is 404. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}

refuse — olympus-labs publishes no Pages site - GitLab's armed wording, applied to GitHub - so the whole family refuses, the builds LIST included: a build list is a collection under a SITE, and the site is what does not exist, so there is no resolving parent for it to be empty under. GitHub's own answer for a repository with no Pages site is 404. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/pages/health

refuse — olympus-labs publishes no Pages site - GitLab's armed wording, applied to GitHub - so the whole family refuses, the builds LIST included: a build list is a collection under a SITE, and the site is what does not exist, so there is no resolving parent for it to be empty under. GitHub's own answer for a repository with no Pages site is 404. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
releases6 of 6 served & verified
GET
/repos/{owner}/{repo}/releases
served & verified
Core
GET
/repos/{owner}/{repo}/releases/{release_id}
served & verified
Core
GET
/repos/{owner}/{repo}/releases/{release_id}/assets

release assets over the release the tag already resolves to (14-hit demand cluster, telemetry 2026-09-01)

served & verified
Core
GET
/repos/{owner}/{repo}/releases/assets/{asset_id}

release assets over the release the tag already resolves to (14-hit demand cluster, telemetry 2026-09-01)

served & verified
Core
GET
/repos/{owner}/{repo}/releases/latest
served & verified
Core
GET
/repos/{owner}/{repo}/releases/tags/{tag}
served & verified
Core
collaborators5 of 5 served & verified
GET
/repos/{owner}/{repo}/collaborators

repo collaborators are the teams with access plus the outside contributors canon already marks (Person.member = false)

served & verified
Core
GET
/repos/{owner}/{repo}/collaborators/{username}

repo collaborators are the teams with access plus the outside contributors canon already marks (Person.member = false)

served & verified
Core
GET
/repos/{owner}/{repo}/collaborators/{username}/permission

repo collaborators are the teams with access plus the outside contributors canon already marks (Person.member = false)

served & verified
Core
GET
/repos/{owner}/{repo}/invitations

no pending repository invitations in this universe: reader.listMemberships(repo, repo) (reader.ts:2961) holds six rows and every one is `active` — the repository roster is the approvers whose organization role is a plain member, plus the CI identity, and all of them were GRANTED rather than offered. SERVED 2026-09-10 as GitHub's empty array, behind the hello-16 generation gate and behind the repository guard — an unknown repository is still GitHub's own 404 — RULED EMPTY by the founder 2026-09-10

served & verified
Core
GET
/user/repository_invitations

no pending repository invitations in this universe: reader.membershipsForPerson(athena) (reader.ts:2969) carries no pending repository row, because nobody here has been offered a repository. It is the caller's side of /repos/{owner}/{repo}/invitations and answers the same fact, so conformance asserts the two agree. SERVED 2026-09-10 as GitHub's empty array, behind the hello-16 generation gate — RULED EMPTY by the founder 2026-09-10

served & verified
Core
meta3 of 5 served & verified
GET
/
served & verified
Core
GET
/meta
served & verified
Core
GET
/versions

reader.refCatalog("github.api-versions") in the artifact's own ord order (newest first), and the version this host stamps into x-github-api-version is asserted to be one of them. licence: FACTUAL — the response is a list of API version DATES (gh api /versions returns ["2026-03-10","2022-11-28"]), which carries no authorship, and this host already declares the version each pin emulates. Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Core
GET
/octocat

generateheld · data-licensing — static provider catalog, and NOT `derive`: `derive` is defined in this file as computed from artifact rows that already exist, and a vendor catalog is not an artifact row. LICENCE: NO GRANT — the response is ASCII art of the Octocat, which is GitHub artwork and a GitHub trademark. The per-item licence finding is coverage/reviews/2026-09-09-hello-15-stale-reasons-git-hosts.md §5.3, and §5.4 records why the label waited for a shard arm

planned
Core
GET
/zen

generateheld · data-licensing — static provider catalog, and NOT `derive`: `derive` is defined in this file as computed from artifact rows that already exist, and a vendor catalog is not an artifact row. LICENCE: NO GRANT — the response is one of GitHub's design aphorisms, creative prose GitHub publishes under no licence. The per-item licence finding is coverage/reviews/2026-09-09-hello-15-stale-reasons-git-hosts.md §5.3, and §5.4 records why the label waited for a shard arm

planned
Core
reactions4 of 5 served & verified
GET
/repos/{owner}/{repo}/issues/{issue_number}/reactions

ContentReaction is canon as of hello-15 (features.contentReactions); reactionsFor() answers it and shapeReaction renders GitHub's closed eight-value content enum over the SAME rows GitLab serves as award emoji. The parent resources now carry the reaction-rollup GitHub embeds

served & verified
Next
GET
/repos/{owner}/{repo}/issues/comments/{comment_id}/reactions

ContentReaction is canon as of hello-15 (features.contentReactions); reactionsFor() answers it and shapeReaction renders GitHub's closed eight-value content enum over the SAME rows GitLab serves as award emoji. The parent resources now carry the reaction-rollup GitHub embeds

served & verified
Next
GET
/repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions

ContentReaction is canon as of hello-15 (features.contentReactions); reactionsFor() answers it and shapeReaction renders GitHub's closed eight-value content enum over the SAME rows GitLab serves as award emoji. The parent resources now carry the reaction-rollup GitHub embeds

served & verified
Next
GET
/repos/{owner}/{repo}/releases/{release_id}/reactions

ContentReaction is canon as of hello-15 (features.contentReactions); reactionsFor() answers it and shapeReaction renders GitHub's closed eight-value content enum over the SAME rows GitLab serves as award emoji. The parent resources now carry the reaction-rollup GitHub embeds

served & verified
Next
GET
/repos/{owner}/{repo}/comments/{comment_id}/reactions

refuse — no commit in this universe carries a comment (DECISIONS 2026-08-20 [commit-detail] decision 2; `/repos/{owner}/{repo}/comments` is already an armed honest empty in honest-empties.ts), so no `comment_id` can ever resolve and GitHub's own answer for a commit comment that does not exist is 404 — the row waits on a CommitComment, not on ContentReaction, whose 80 rows already answer GitHub's other four reaction operations. RULED by the founder 2026-09-12

deferred
Next
security-advisories2 of 5 served & verified
GET
/orgs/{org}/security-advisories

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/security-advisories

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/advisories

generate — GitHub's GLOBAL security-advisory database, which is a catalogue of REAL upstream vulnerabilities rather than anything about olympus-labs - an empty list here would claim no vulnerability is known anywhere, and a generated one would be a false claim about a real project (the constraint render-sbom.ts's real manifests impose, seed trap 29). It is the vendor-reference class /emojis and /codes_of_conduct already sit in, and THE ASK IS A LICENCE ANSWER for redistributing advisory data plus a catalogue to hold it - not renderer work, and deliberately outside the founder's 2026-09-14 batch, which is about what nobody in this organization did. Re-worded by the 2026-09-14 GitHub serving wave

deferred
Long tail
GET
/advisories/{ghsa_id}

generate — GitHub's GLOBAL security-advisory database, which is a catalogue of REAL upstream vulnerabilities rather than anything about olympus-labs - an empty list here would claim no vulnerability is known anywhere, and a generated one would be a false claim about a real project (the constraint render-sbom.ts's real manifests impose, seed trap 29). It is the vendor-reference class /emojis and /codes_of_conduct already sit in, and THE ASK IS A LICENCE ANSWER for redistributing advisory data plus a catalogue to hold it - not renderer work, and deliberately outside the founder's 2026-09-14 batch, which is about what nobody in this organization did. Re-worded by the 2026-09-14 GitHub serving wave

deferred
Long tail
GET
/repos/{owner}/{repo}/security-advisories/{ghsa_id}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
agent-tasks4 of 4 served & verified
GET
/agents/repos/{owner}/{repo}/tasks
served & verified
Next
GET
/agents/repos/{owner}/{repo}/tasks/{task_id}
served & verified
Next
GET
/agents/tasks
served & verified
Next
GET
/agents/tasks/{task_id}
served & verified
Next
dependency-graph2 of 4 served & verified
GET
/repos/{owner}/{repo}/dependency-graph/compare/{basehead}

THE MANIFESTS NEVER CHANGE BETWEEN COMMITS. hello-9's scaffold writes package.json, pnpm-lock.yaml, go.mod/go.sum and requirements.txt from constants, so every commit in a repository carries byte-identical dependency declarations and the diff between any two refs is genuinely empty — GitHub returns the same `[]` for a comparison that adds and removes nothing. This is not the SBOM being unavailable: `/dependency-graph/sbom` serves the real package list (#418), and this row says only that the list did not MOVE. Falsifiable: the day the generator varies a manifest across commits, a comparison spanning that change stops being empty and the row goes red. RULED by the founder 2026-09-09

served & verified
Long tail
GET
/repos/{owner}/{repo}/dependency-graph/sbom

the SBOM is the repo's own manifests and lockfiles, which hello-9 generates for real (DECISIONS 2026-08-22 [compiler/gen-9])

served & verified
Long tail
GET
/repos/{owner}/{repo}/dependency-graph/sbom/fetch-report/{sbom_uuid}

generate — needs a gateway download route (service-own endpoint) — later. The DATA is already served: `/dependency-graph/sbom` returns the real SPDX document (#418). This pair is the request-then-download flow, and its second half is a 302 to bytes on the SERVICE host, so it needs a route in packages/gateway rather than more renderer. Minting an `sbom_url` that 404s would be a placeholder link (invariant #4). RULED by the founder 2026-09-09

deferred
Long tail
GET
/repos/{owner}/{repo}/dependency-graph/sbom/generate-report

generate — needs a gateway download route (service-own endpoint) — later. The DATA is already served: `/dependency-graph/sbom` returns the real SPDX document (#418). This row's 201 hands back an `sbom_url` the fetch-report row must then serve, so the two land together or neither does. RULED by the founder 2026-09-09

deferred
Long tail
code-quality1 of 3 served & verified
GET
/repos/{owner}/{repo}/code-quality/findings

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/repos/{owner}/{repo}/code-quality/findings/{finding_number}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/repos/{owner}/{repo}/code-quality/setup

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
git transport2 of 3 served & verified
POST
/{owner}/{repo}.git/git-upload-pack

fetch negotiation; non-delta packfile v2, side-band-64k, shallow/deepen/unshallow. No partial clone (filter), no protocol v2

served & verified
Core
GET
/{owner}/{repo}.git/info/refs

ref advertisement, pkt-line; ?service=git-upload-pack only — dumb HTTP is not served and 404s

served & verified
Core
POST
/{owner}/{repo}.git/git-receive-pack

read-only — NOT A READ, and in the manifest for the one reason this mode exists - clients demonstrably probe it, because `git push` is what a developer types next after a clone that worked. The read-only 403 IS its final response (invariant #3) rather than a gap waiting on anything: renderer-github/src/git/routes.ts:120 answers the advertisement `?service=git-receive-pack` with readOnly(c, "push to this repository (git-receive-pack)") and the POST is deliberately given NO route at all (routes.ts:134), so both halves of a push refuse identically. The row is `excluded` and never joins the badge denominator, which is what this mode has meant since A0.1 - the zendesk /api/v2/users/me/session/renew precedent (founder ruling 2026-09-06), applied to the fleet's only other excluded row that is a WRITE rather than a scope decision. CLASSIFIED 2026-09-13 (the unjudged-47 pass) and NOT re-ruled: the row's own curated note in git-transport.ts has said exactly this since the transport shipped (DECISIONS 2026-08-23); the mode word was simply never written down beside it. NO NUMBER MOVES - an excluded row is counted in the generation report's (excluded) column either way, and the report's `read-only` column reads 0 whenever the mode is used correctly

excluded
Core
licenses3 of 3 served & verified
GET
/licenses

reader.listLicenses() reads license_catalog (a compile-time table, never a renderer constant) and render-catalogs.ts shapes license-simple over it; node_id is minted with artifact's own nodeId("License", key) except mit, whose api.github.com value the repository object has published since Wave A. licence: FREE — the thirteen bodies GitHub serves (gh api /licenses: agpl-3.0, apache-2.0, bsd-2-clause, bsd-3-clause, bsl-1.0, cc0-1.0, epl-2.0, gpl-2.0, gpl-3.0, lgpl-2.1, mit, mpl-2.0, unlicense) are meant for verbatim redistribution and several say so in their own header — the GPL family carries "Everyone is permitted to copy and distribute verbatim copies of this license document", CC0-1.0 and Unlicense are public-domain dedications, Apache-2.0 ships an APPENDIX instructing reproduction; the key/spdx_id/permissions metadata comes from github/choosealicense.com, which is MIT (gh api repos/github/choosealicense.com/license). Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Long tail
GET
/licenses/{license}

reader.license(key) reads license_catalog and render-catalogs.ts shapes the full license component; the body is the artifact's body column byte for byte, upstream's [year]/[fullname] placeholders included. licence: FREE — the thirteen bodies GitHub serves (gh api /licenses: agpl-3.0, apache-2.0, bsd-2-clause, bsd-3-clause, bsl-1.0, cc0-1.0, epl-2.0, gpl-2.0, gpl-3.0, lgpl-2.1, mit, mpl-2.0, unlicense) are meant for verbatim redistribution and several say so in their own header — the GPL family carries "Everyone is permitted to copy and distribute verbatim copies of this license document", CC0-1.0 and Unlicense are public-domain dedications, Apache-2.0 ships an APPENDIX instructing reproduction; the key/spdx_id/permissions metadata comes from github/choosealicense.com, which is MIT (gh api repos/github/choosealicense.com/license). Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Long tail
GET
/repos/{owner}/{repo}/license

SERVED 2026-09-09 (hello-16): the LICENSE blob `features.repoLicense` put in every tree, read through the same fileAt/shapeContentFile path /repos/{owner}/{repo}/contents/LICENSE uses, so the two cannot describe different bytes. The `license` object is the one `shapeRepo` has published since Wave A (MIT_LICENSE in packages/renderer-github/src/render.ts), which closes the inconsistency the 2026-09-01 reason named: the repository object and this row can no longer name different licences, and conformance asserts they are byte-identical AND that both match the artifact's own /licenses catalogue row for `mit`. The served body carries no upstream `[year]`/`[fullname]` placeholder. `_links.self`, `_links.git` and `download_url` all resolve on this host — the last over the `/{owner}/{repo}/raw/{ref}/{path}` path this renderer has advertised on every content-file since SPEC rev 7 and now answers. `license.url` still points at the /licenses catalogue, which is the CATALOGUE wave's coverage and answers the honest coverage 404 until it lands. An older artifact answers the hello-16 generation gap rather than GitHub's no-licence 404, which would contradict the `license: MIT` the repository object serves on the same host

served & verified
Long tail
private-registries1 of 3 served & verified
GET
/orgs/{org}/private-registries

nobody launched a codespace, configured hosted-compute networking or registered a private registry - the last is hello-19's founder ruling F3 verbatim (olympus-labs runs no private package registry), which three already-terminal Dependabot rows rest on. The organization resolves, so the honest answer is the vendor's empty envelope at 200. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/private-registries/{secret_name}

refuse — nobody launched a codespace, configured hosted-compute networking or registered a private registry, so nothing here is addressable: this row reads a registry by name, a network configuration by id, or a codespace default for a repository nobody has ever started one in. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
GET
/orgs/{org}/private-registries/public-key

refuse — nobody launched a codespace, configured hosted-compute networking or registered a private registry, so nothing here is addressable: this row reads a registry by name, a network configuration by id, or a codespace default for a repository nobody has ever started one in. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
campaigns1 of 2 served & verified
GET
/orgs/{org}/campaigns

no security product is enabled on olympus-labs and no vulnerability exists, so there is no alert, no analysis, no configuration and no custom pattern to list - and it cannot be built either: render-sbom.ts parses the repository's REAL manifests, so this replica publishes express@4.18.2, github.com/google/uuid v1.3.0 and httpx==0.24.1, and a generated finding over one of them would be a false claim about a real upstream project. The collection's parent resolves, so the truthful answer is GitHub's empty list at 200 rather than a 404 that would deny the operation exists. RULED by the founder 2026-09-14 (seed §A-R batch F1)

served & verified
Long tail
GET
/orgs/{org}/campaigns/{campaign_number}

refuse — no security product is enabled on olympus-labs and no vulnerability exists, so nothing is addressable here: this row reads an alert, an analysis, a database, a configuration or an upload by an id no collection on this host can hand out. GitHub's own answer for a thing that does not exist is 404, which is what this row mirrors; the 403 several of these operations declare for a product that is not enabled was deliberately not taken, because a 403 is a claim about the CALLER and this ruling is a claim about what nobody here ever created. RULED by the founder 2026-09-14 (seed §A-R batch F1)

deferred
Long tail
codes-of-conduct0 of 2 served & verified
GET
/codes_of_conduct

generateheld · data-licensing — static provider catalog, and NOT `derive`: `derive` is defined in this file as computed from artifact rows that already exist, and a vendor catalog is not an artifact row. LICENCE: NO USABLE GRANT, and the CC BY 4.0 premise is out of date — EthicalSource/contributor_covenant's only LICENSE.md is the Hippocratic License 3.0, and the other body GitHub serves is the Django Code of Conduct, CC BY-SA 4.0, whose ShareAlike reciprocity cannot travel into a compiled artifact this service publishes. The per-item licence finding is coverage/reviews/2026-09-09-hello-15-stale-reasons-git-hosts.md §5.3, and §5.4 records why the label waited for a shard arm

deferred
Long tail
GET
/codes_of_conduct/{key}

generateheld · data-licensing — static provider catalog, and NOT `derive`: `derive` is defined in this file as computed from artifact rows that already exist, and a vendor catalog is not an artifact row. LICENCE: NO USABLE GRANT, and the CC BY 4.0 premise is out of date — EthicalSource/contributor_covenant's only LICENSE.md is the Hippocratic License 3.0, and the other body GitHub serves is the Django Code of Conduct, CC BY-SA 4.0, whose ShareAlike reciprocity cannot travel into a compiled artifact this service publishes. The per-item licence finding is coverage/reviews/2026-09-09-hello-15-stale-reasons-git-hosts.md §5.3, and §5.4 records why the label waited for a shard arm

deferred
Long tail
deploy-keys2 of 2 served & verified
GET
/repos/{owner}/{repo}/keys

SERVED 2026-09-09: reader.listCheckoutKeys(repo) (packages/artifact/src/reader.ts:2351), validated against the vendored `deploy-key` component. packages/canon/src/ci-config.ts:236 names THIS endpoint as the reason a checkout key's public half is publishable at all; `key` is the ssh-ed25519 material and `title` its OpenSSH comment, and the conformance entry re-hashes the decoded blob to the artifact's own fingerprint_sha256. `read_only` is true because a CI checkout key clones, and `last_used` is null because canon records no use. Paginated with GitHub's Link header, walked to the last page in conformance; answers the hello-15 generation gap on an older artifact rather than an empty array

served & verified
Long tail
GET
/repos/{owner}/{repo}/keys/{key_id}

SERVED 2026-09-09: the same key by id — reader.listCheckoutKeys(repo) (packages/artifact/src/reader.ts:2351) addressed by githubId(CheckoutKeyRow.id), byte-identical to the row the list serves. An id nothing holds is GitHub's own 404

served & verified
Long tail
gitignore2 of 2 served & verified
GET
/gitignore/templates

reader.listGitignoreTemplates() reads gitignore_template; every one of the 163 names it lists resolves at {name}, which conformance follows one by one. licence: CC0-1.0 — github/gitignore publishes its templates under the Creative Commons Zero v1.0 Universal public-domain dedication (its own LICENSE file; gh api repos/github/gitignore/license returns spdx_id CC0-1.0). Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Long tail
GET
/gitignore/templates/{name}

reader.gitignoreTemplate(name) reads gitignore_template and serves the file's bytes verbatim; the lookup is case-sensitive, as upstream's own file names are. licence: CC0-1.0 — github/gitignore publishes its templates under the Creative Commons Zero v1.0 Universal public-domain dedication (its own LICENSE file; gh api repos/github/gitignore/license returns spdx_id CC0-1.0). Older pins answer the refCatalogs generation-gap 404 rather than an empty catalogue, which on these rows would be a false claim about the HOST. SERVED 2026-09-09 (hello-16)

served & verified
Long tail
emojis0 of 1 served & verified
GET
/emojis

generateheld · data-licensing — static provider catalog, and NOT `derive`: `derive` is defined in this file as computed from artifact rows that already exist, and a vendor catalog is not an artifact row. LICENCE: NO GRANT — the response is a map of roughly 1,870 shortcodes whose VALUES are github.githubassets.com URLs for GitHub's own image assets, which this project holds no grant to redistribute and which would also hand a caller live github.com URLs from a sandbox host. The per-item licence finding is coverage/reviews/2026-09-09-hello-15-stale-reasons-git-hosts.md §5.3, and §5.4 records why the label waited for a shard arm

deferred
Long tail
rate-limit1 of 1 served & verified
GET
/rate_limit
served & verified
Core

03 / What's simulated

One data set, rendered in GitHub's dialect.

Every GitHub call resolves against the same simulated data set every other provider serves. Counted from the gh-2026-03-g12 artifact (universe generation 12):

What another provider has to agree with, and the test that makes it

Each line below is one assertion in the conformance suite named beside it — run on every build, over one artifact, through the real renderers. Nothing is claimed here that no expect checks.

05 / Pinned snapshots

Universes that never change, on their own hostnames.

Each pin regenerates byte-identically on every request, so a test written against one never drifts. Generations are DIFFERENT universes, not versions of one — never swap a suffix expecting the same data.

PinHostUniverse generationGitHub API versionRepository files
gh-2026-03gh-2026-03.snap.sandboxapis.devgeneration 12026-03-10not in this generation
gh-2026-03-g10gh-2026-03-g10.snap.sandboxapis.devgeneration 102026-03-10served
gh-2026-03-g11gh-2026-03-g11.snap.sandboxapis.devgeneration 112026-03-10served
gh-2026-03-g12gh-2026-03-g12.snap.sandboxapis.devgeneration 122026-03-10served
gh-2026-03-g2gh-2026-03-g2.snap.sandboxapis.devgeneration 22026-03-10served
gh-2026-03-g3gh-2026-03-g3.snap.sandboxapis.devgeneration 32026-03-10served
gh-2026-03-g5gh-2026-03-g5.snap.sandboxapis.devgeneration 52026-03-10served
gh-2026-03-g6gh-2026-03-g6.snap.sandboxapis.devgeneration 62026-03-10served
gh-2026-03-g8gh-2026-03-g8.snap.sandboxapis.devgeneration 82026-03-10served
gh-2026-03-g9gh-2026-03-g9.snap.sandboxapis.devgeneration 92026-03-10served

Need an endpoint that is not served yet?

Every row GitHub's manifest carries is on this page, so “not here” is an answer rather than a gap in the rendering. Tell us which path and which client, and it moves up the queue — the order is set by what people ask for.

Request coverage