Backport the Orbit GA changes to 19.5
What does this MR do and why?
Backports to 19.5 the 46 Orbit and related MRs merged to master after the 19.5 cutoff (2026-10-12 13:08 UTC). One cherry-pick commit per MR, in table order, plus one conflict fix for !263077 (merged) and one commit for the changelog entry. Most are features: needs a release manager exception.
MRs
| # | MR | Area | Change | Author | Approved | Merged |
|---|---|---|---|---|---|---|
| 1 | !260940 (merged) | Monetization | Use the Orbit promo gate for billing namespace candidates | jgdoyon1 | 2026-10-12 | 2026-10-12 |
| 2 | !261364 (merged) | UI | Replace the Orbit empty state with the Off page | jgdoyon1 | 2026-10-12 | 2026-10-12 |
| 3 | !261396 (merged) | Query | Report unsupported resource types in Orbit redaction | michaelangeloio | 2026-10-12 | 2026-10-12 |
| 4 | !255038 (merged) | Monetization | Block Orbit queries when no billing namespace can be resolved | snachnolkar | 2026-10-12 | 2026-10-12 |
| 5 | !261557 (merged) | UI | List only Orbit groups the user can query on the dashboard | jgdoyon1 | 2026-10-12 | 2026-10-12 |
| 6 | !261394 (merged) | UI | Add the Group status tab to the Orbit dashboard | jgdoyon1 | 2026-10-12 | 2026-10-12 |
| 7 | !261635 (merged) | Monetization | Resolve the Orbit access state for 10 groups and check the admin turn on | jgdoyon1 | 2026-10-12 | 2026-10-12 |
| 8 | !261783 (merged) | Monetization | Change orbit_promo_access_gate flag type to gitlab_com_derisk | dgruzd | 2026-10-13 | 2026-10-13 |
| 9 | !261883 (merged) | UI | Stop the Orbit Overview waiting on groups that never index | jgdoyon1 | 2026-10-13 | 2026-10-13 |
| 10 | !261892 (merged) | UI | Show the Orbit counts of the groups that answer | jgdoyon1 | 2026-10-13 | 2026-10-13 |
| 11 | !261894 (merged) | Platform | Move the Orbit GraphQL API under one orbit object | jgdoyon1 | 2026-10-13 | 2026-10-14 |
| 12 | !261927 (merged) | Query | Update dependency gitlab-orbit-proto to v0.137.1 | gitlab-dependency-update-bot | 2026-10-14 | 2026-10-14 |
| 13 | !262136 (merged) | Monetization | Add the Orbit billing account for top-level groups | jgdoyon1 | 2026-10-14 | 2026-10-14 |
| 14 | !262214 (merged) | UI | Keep the Orbit overview globe while new projects index | jgdoyon1 | 2026-10-14 | 2026-10-14 |
| 15 | !262193 (merged) | UI | Point Orbit "Leave feedback" link to open master feedback epic | mvanremmerden | 2026-10-14 | 2026-10-14 |
| 16 | !262267 (merged) | UI | Update the Orbit Quickstart, overview card, and group status billing link | jgdoyon1 | 2026-10-14 | 2026-10-14 |
| 17 | !261207 (merged) | MCP | Register Orbit tools in the main MCP server | michaelangeloio | 2026-10-15 | 2026-10-15 |
| 18 | !261155 (merged) | Monetization | Disable beta Orbit enrollments on GitLab.com at GA | dgruzd | 2026-10-15 | 2026-10-15 |
| 19 | !262469 (merged) | MCP | Cover non-object JSON query string in Orbit command tool spec | dgruzd | 2026-10-15 | 2026-10-15 |
| 20 | !260931 (merged) | MCP | Answer Orbit MCP notifications with 202 Accepted | jmrp | 2026-10-15 | 2026-10-15 |
| 21 | !261678 (merged) | Monetization | Add the self-managed Orbit instance trial | jgdoyon1 | 2026-10-15 | 2026-10-15 |
| 22 | !262502 (merged) | UI | Show the Orbit node sidebar below the indexing button | jgdoyon1 | 2026-10-15 | 2026-10-15 |
| 23 | !262545 (merged) | Monetization | Declare the external dependency of the Orbit trial cron | jgdoyon1 | 2026-10-15 | 2026-10-15 |
| 24 | !262544 (merged) | UI | Remove Beta badges from the Orbit UI | jgdoyon1 | 2026-10-15 | 2026-10-15 |
| 25 | !262603 (merged) | Monetization | Allow Orbit indexing without a trial on GitLab Self-Managed | jgdoyon1 | 2026-10-15 | 2026-10-15 |
| 26 | !262325 (merged) | UI | List the groups of the Orbit token on the Orbit dashboard | jgdoyon1 | 2026-10-15 | 2026-10-16 |
| 27 | !262749 (merged) | Monetization | Record direct Orbit enrollments on self-managed | dgruzd | 2026-10-16 | 2026-10-16 |
| 28 | !262337 (merged) | Monetization | Show the Orbit access rule on every Orbit page and index instances without a trial | jgdoyon1 | 2026-10-16 | 2026-10-16 |
| 29 | !262992 (merged) | UI | Remove the unused Orbit schema type validators | jgdoyon1 | 2026-10-16 | 2026-10-17 |
| 30 | !263010 (merged) | UI | Redesign the Orbit Schema tab as a clustered graph | jgdoyon1 | 2026-10-17 | 2026-10-17 |
| 31 | !263038 (merged) | Query | Stream Orbit query results through Rails in chunks | michaelangeloio | 2026-10-18 | 2026-10-18 |
| 32 | !263080 (merged) | Monetization | Apply the Orbit GA indexing billing rules | jgdoyon1 | 2026-10-18 | 2026-10-18 |
| 33 | !263091 (merged) | Monetization | Ask CustomersDot-ineligible groups to purchase Orbit | jgdoyon1 | 2026-10-19 | 2026-10-19 |
| 34 | !263083 (merged) | UI | Serve the Orbit schema through GraphQL | michaelangeloio | 2026-10-19 | 2026-10-19 |
| 35 | !263099 (merged) | Monetization | Move the Orbit trial end to the group billing account | jgdoyon1 | 2026-10-19 | 2026-10-19 |
| 36 | !263063 (merged) | Monetization | Change orbit_trial flag type to beta | dgruzd | 2026-10-19 | 2026-10-19 |
| 37 | !263232 (merged) | Query | Enable orbit_query_in_rails by default | dgruzd | 2026-10-19 | 2026-10-19 |
| 38 | !262486 (merged) | UI | Point Duo Chat Orbit "Leave feedback" link to master epic | mvanremmerden | 2026-10-19 | 2026-10-19 |
| 39 | !262737 (merged) | Indexing | Add repository_storage to Knowledge Graph code indexing tasks | dgruzd | 2026-10-19 | 2026-10-19 |
| 40 | !263077 (merged) | Query | Remove the orbit_query_in_rails feature flag | michaelangeloio | 2026-10-19 | 2026-10-19 |
| 41 | !263371 (merged) | Monetization | Fix Orbit settings and dashboard issues from the monetization E2E run | jgdoyon1 | 2026-10-20 | 2026-10-20 |
| 42 | !260668 (merged) | MCP | Add a WWW-Authenticate challenge to insufficient scope errors | jmrp | 2026-10-12 | 2026-10-12 |
| 43 | !261813 (merged) | MCP | Answer refused tokens on the MCP endpoints with their challenge | jmrp | 2026-10-17 | 2026-10-17 |
| 44 | !263719 (merged) | Query | Add SKIP and OFFSET to the Orbit query editor | aalgutifan | 2026-10-20 | 2026-10-20 |
| 45 | !263611 (merged) | UI | Make the Orbit UI copy correct and consistent before GA | jgdoyon1 | 2026-10-21 | 2026-10-21 |
| 46 | !263777 (merged) | Monetization | Say that indexing continues on the Orbit settings after the trial | jgdoyon1 | 2026-10-21 | 2026-10-21 |
Selection
MRs merged to master after the cutoff, queried on 2026-10-21 14:30 UTC:
- Label groupcontext-systems.
- Orbit authors:
jgdoyon1,michaelangeloio,dgruzd,snachnolkar,jmrp,mvanremmerden,aalgutifan,michaelusa,bohdanpk. - Diff lines that mention
orbitorknowledge_graph, any author.
All Orbit results are in the table. Related: !260668 (merged) and !261813 (merged) fix the OAuth challenge on /api/v4/orbit/mcp. Already on 19-5-stable-ee: !262112 (merged), !262513 (merged), !262140 (merged).
Excluded:
- Non-Orbit MRs by the same authors, and MRs that only mention Orbit (!263479 (merged) docs generator, !263066 (merged) Duo Workflow runner, !263282 (merged) route tier spec).
- !262861 (merged): Caproni dev ports only.
- !257859 (merged): preferences tab move, needs !257460 (merged).
- !257207 (merged), !257491 (merged), !258909 (merged): cost management billable usage export. Lists Orbit usage, but behind the
billable_usage_exportWIP flag, off by default.
Dependencies: a cherry-pick dry run on 19-5-stable-ee applies all picks in order. Conflicts:
- !263077 (merged): keep 19.5
labkitandgopbinworkhorse/go.mod, the other rows ofdoc/auth/tokens/fine_grained_access_tokens_rest.md, and one test name inmcp_test.go. - !261813 (merged): keep 19.5
doc/user/model_context_protocol/mcp_server.md(no matching section in 19.5).
Verification
- This pipeline.
- Orbit
e2e-gitlab-stable: [19-5]against the CNG images of this revision (gitlab-org/orbit/knowledge-graph!2970 (merged)).
Points for reviewers
- Migration: !262737 (merged) adds
repository_storagetop_knowledge_graph_code_indexing_tasks. - GKG: !263038 (merged) bumps
gitlab-orbit-proto0.137 to 0.147. The 19.5 GKG must support it. - Puma: !263038 (merged), !263232 (merged) and !263077 (merged) move Orbit queries from Workhorse to Puma and remove the flag. No rollback flag.
- REST API: !260668 (merged) adds
WWW-Authenticatewith the accepted scopes to every 403insufficient_scope.
Local tests
Dry run of the first 41 picks: Jest 1,461, Go 644, RSpec 5,467, ESLint and GraphQL docs clean. 6 RSpec failures pass on re-run (test order, shared test DB; same on master). !260668 (merged) and !261813 (merged): syntax and RuboCop clean. !263719 (merged), !263611 (merged), !263777 (merged): 918 Jest examples pass.
MR acceptance checklist
- This MR is backporting a bug fix, documentation update, or spec fix, previously merged in the default branch. Not the case for most MRs: release manager exception requested.
- The MRs on the default branch have been deployed to GitLab.com.
- The MR title is descriptive.
- Required labels have been applied to this merge request
- severity label and bug subtype labels (if applicable)
- If this MR fixes a bug that affects customers, the customer label has been applied.
- This MR has been approved by a maintainer (only one approval is required).
- Ensure the
E2E Omnibus GitLab EEpipeline (triggered by thee2e:test-on-omnibus-eejob) has succeeded.
Note to the merge request author and maintainer
If you have questions about the patch release process, please:
- Refer to the patch release runbook for engineers and maintainers for guidance.
- Ask questions on the
#releasesSlack channel (internal only). - Once the backport has been merged, the commit changes will be automatically deployed to a release environment that can be used for manual validation. See after merging runbook for details.
References
- Plan and dry run: https://claude.ai/code/artifact/183cc650-e205-49aa-8ec5-9ea24bf0442b