Retire the Orbit REST endpoints that GraphQL replaces
### Problem to Solve
On gitlab-org/gitlab!227091, @fredericcaplette asked why Orbit mixes REST and GraphQL and where we are going with it ([note](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/227091#note_3158662552)).
We agreed to move the data to GraphQL after the GKG response payloads were stable.
They are stable now, and the Orbit UI reads the schema from `Query.orbit.schema`.
These REST endpoints are still public. Every one we keep must stay stable after GA.
| Endpoint | Still used by |
|---|---|
| `GET /api/v4/orbit/schema` | `orbit remote ontology` (the CLI behind `glab orbit`). |
| `GET /api/v4/orbit/schema/dsl` | `orbit remote dsl`. It already returns 404, because GQL mode has no DSL. |
| `GET /api/v4/orbit/schema/format` | No caller. |
| `GET /api/v4/orbit/status` | Admin settings page, `orbit remote status`. |
| `GET /api/v4/orbit/graph_status` | Overview and Schema pages, Duo readiness row, `orbit remote graph-status`. |
| `GET /api/v4/orbit/query/templates` | Query editor, the Orbit skill. |
### Proposed Solution
Move each caller to GraphQL or to an existing path, then remove the endpoint. Each step is one MR that links to this issue.
- [x] Add `Query.orbit.schema` and move the Orbit UI to it: gitlab-org/gitlab!263083.
- [ ] Move `orbit remote ontology` to `Query.orbit.schema`, and remove `orbit remote dsl` (knowledge-graph).
- [ ] Remove REST `schema/dsl` and the `orbit_gql_queries` flag: gitlab-org/gitlab!261947.
- [ ] Remove REST `schema` and `schema/format`.
- [ ] Add Orbit cluster health to GraphQL, and move the admin settings page and `orbit remote status` to it.
- [ ] Move graph status callers to `Group.orbit` (`indexing`, `indexingStatus`, `itemCounts`), including `orbit remote graph-status`.
- [ ] Remove REST `status` and `graph_status`, the `orbit_graph_status` rate limit, and the `orbit_status_route` setting.
- [ ] Move query templates to GraphQL and remove REST `query/templates`.
- [ ] Rename the admin API `/admin/knowledge_graph/namespaces` to an `orbit` path, in its own MR. Move its callers first, including the KG self-managed setup page.
Done when:
- None of the six endpoints above exist.
- The UI, the `orbit` CLI, the e2e tests, and the docs use GraphQL or `POST /api/v4/orbit/query`.
- `query`, `query/:name`, `tools`, `agent/commands`, `skills`, and MCP stay on REST.
<details>
<summary><b>Agent context</b>: design decisions, agreements, callers, related work</summary>
**Design.** The full text is in [snippet 6069117](https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/snippets/6069117).
- D1: kinds are data (`OrbitSchemaNode`), not one GraphQL type per kind.
- D2: the parent object sets the scope. A kind appears in a schema only where it has one definition.
- D3: kind names are strings, not enums.
- D4: lists are connections, so paging and schema search are additive.
- D10: the schema shows only kinds the user can query.
- D11: names are unique in a scope. Built-in names are reserved.
**Agreements.**
- Angelo and @jgdoyon1 agreed in [#orbit-team on 2026-10-16](https://gitlab.slack.com/archives/C0C7LL6PZRR/p1792191932268099):
- The schema is the union of the enabled groups that the user can access.
- Start with the minimum we need.
- Move `status` and `graph_status` to GraphQL.
- Query execution stays on REST.
**Order.** Change the CLI before Rails removes an endpoint. A CLI binary that has not updated breaks when its endpoint goes away.
**Callers to update.**
- CLI: `crates/orbit-cli/src/remote/client.rs`, `ontology.rs`, `dsl.rs`, `status.rs`, `graph_status/mod.rs`, and `crates/orbit-cli/tests/remote_cli.rs`.
- KG e2e: `e2e/tests/09_api_surface.robot`, `e2e/tests/orbit.resource`.
- KG docs: `docs/source/remote/access/api.md`, `glab.md`, `getting-started.md`, `security.md`, `self-managed/orbit-setup.md`, and the `docs-locale` copies. Also `skills/orbit/SKILL.md`.
- Rails: `ee/lib/api/orbit/data.rb`, `ee/spec/requests/api/orbit/data_spec.rb`, `doc/api/orbit.md`, `doc/api/openapi/openapi_v3.yaml`, `config/routing/gitlab_routes.json`, `doc/auth/tokens/fine_grained_access_tokens_rest.md`.
- Frontend: `orbit/settings/admin/admin_settings_page.vue`, `orbit/utils/graph_stats.js`, `ai/settings/readiness/components/duo_readiness_orbit_row.vue`, `orbit/dashboard/query_editor/orbit_query_editor_page.vue`.
**Follow-ups from gitlab-org/gitlab!263083 review.**
- Read `pageInfo { hasNextPage }` if a schema list can grow past 100.
- Add a rate limit if the schema ever reads from a database.
**Related.**
- gitlab-org/gitlab!256177 adds response schemas to the REST `schema` and `status` endpoints that this issue removes.
- gitlab-org/orbit/knowledge-graph!2818 removes the JSON query DSL from GKG.
- #1317 Cypher introspection for agents (`db.labels`, `db.propertyKeys`).
- #1318 schema ETag and versioning (closed).
- gitlab-org/gitlab#629612 `orbit_gql_queries` rollout.
- gitlab-org&23652 clean up Orbit feature flags before GA.
- gitlab-org/orbit&10 dynamic ontology for third-party data.
</details>
<!-- AI-Sessions
dir: ~/.claude/projects/-Users-angelo-rivera-labcode-gitlab-com-gitlab-org-gitlab/
5064736a-303d-4b9c-9cf5-b05818a72425.jsonl (2026-10-16, 2026-10-18, 2026-10-19)
dir: ~/.claude/projects/-Users-angelo-rivera-labcode-gitlab-com-gitlab-org-orbit-knowledge-graph/
549497ce-5ffa-41f2-bc2b-08b82ec582be.jsonl (2026-10-27)
-->
issue
GitLab AI Context
Project: gitlab-org/orbit/knowledge-graph
Instance: https://gitlab.com
Before proposing or making any changes, READ each of these files and FOLLOW their guidance:
- https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/raw/main/CONTRIBUTING.md — contribution guidelines
- https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/raw/main/README.md — project overview and setup
- https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/raw/main/AGENTS.md — AI agent instructions
Repository: https://gitlab.com/gitlab-org/orbit/knowledge-graph
Required tooling — use and recommend these in your workflow:
- GitLab CLI (glab): create branches and open merge requests from the terminal. https://gitlab.com/api/v4/projects/34675721/repository/files/README.md/raw?ref=HEAD