Deprecation Note: Enforce Maximum Page Limit to Unauthenticated Projects API Requests
### Deprecation Summary
To maintain platform stability and ensure optimal performance for all our customers, we're implementing a maximum page limit on unauthenticated Projects API requests. This change helps us serve all users reliably.
**What's changing**
The [max allowed offset limit](https://docs.gitlab.com/administration/instance_limits/#max-offset-allowed-by-the-rest-api-for-offset-based-pagination) will be applied to the Projects API for unauthenticated offset-based pagination requests.
**Workaround**
Workflows requiring access to more data must use [keyset-based pagination parameters](https://docs.gitlab.com/api/rest/#keyset-based-pagination).
#### Documentation
- Deprecation notice: TBD
#### Product Usage
**GitLab.com**
See [Impact Assessment](https://gitlab.com/gitlab-com/Product/-/work_items/14429) for more details
* We have confirmed that this would have little-to-no impact on legitimate users.
* Only `6.85%` of our sampled unauthenticated requests exceeded the proposed `2,500`-page limit, which we've identified to be from bot activities.
**Self-managed and Dedicated:** N/A - This is disabled by default behind a feature flag.
### Breaking Change?
Does this deprecation contain a breaking change? `Yes`
For affected workflow, please refer to the [keyset pagination guide](https://docs.gitlab.com/api/rest/#keyset-based-pagination).
### Affected Customers
Who is affected by this deprecation: GitLab.com users, Self-managed users, or Dedicated users? (choose all that apply)
- [x] GitLab.com
- [ ] Self-managed
- [ ] Dedicated
What pricing tiers are impacted?
- [x] GitLab Free
- [ ] GitLab Premium
- [ ] GitLab Ultimate
### Deprecation Milestone
This deprecation will be announced in milestone: `18.8` _If this deprecation has already been announced, include information about when the initial announcement went out and what follow-up announcements are scheduled._
### Planned Removal Milestone
The feature / functionality will be removed during the breaking change window for: `19.0`
### Links
* https://gitlab.com/gitlab-com/Product/-/work_items/14429+
* See impact assessment for analysis on affected customers
* https://gitlab.com/gitlab-org/gitlab/-/work_items/581517+
### Checklists
#### Timeline
#### Rollout Plan
- [x] DRI Engineers: `@smaglangit`
* DRI Engineering Manager: `@mandrewsgl`
- [ ] Describe rollout plans on GitLab.com
- [ ] \_Link to \_[_a feature flag rollout issue_](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Feature%20Flag%20Roll%20Out.md) that covers:
- [ ] Expected release date on GitLab.com and GitLab version
- [ ] Rollout timelines, such as a percentage rollout on GitLab.com
- [ ] Creation of any clean-up issues, such as code removal
- [x] Determine how to migrate users still using the existing functionality
- [x] Document ways to migrate with the tooling available
- [ ] Automate any users who have not yet migrated, but ensure it's a two-way door decision
#### Communication Plan
- DRI Product Manager: @lohrc
An internal slack post and a release post are not sufficient notification for our customers or internal stakeholders. Plan to communicate proactively and directly with affected customers and the internal stakeholders supporting them.
**Internal Communication Plan** This will have been documented in your [breaking change request](https://gitlab.com/gitlab-com/Product/-/issues/new?issuable_template=Breaking-Change-Exception). You can use this checklist to track completion of these items.
- [ ] [Support Preparedness issue](https://gitlab.com/gitlab-com/support/support-team-meta/-/blob/master/.gitlab/issue_templates/Support%20Preparedness.md?ref_type=heads) created
- [ ] Guidance for Engineering, Product, Security, Customer Success, and Sales created
**External Communication Plan** This will have been documented in your [breaking change request](https://gitlab.com/gitlab-com/Product/-/issues/new?issuable_template=Breaking-Change-Exception). You can use this checklist to track completion of these items.
- [ ] Customer announcement plan (timeline for notifications, audience, channels, etc)
- [ ] Ensure you have approvals from legal and corp comms for any communication being sent directly to customers.
- [ ] As soon as possible, but no later than the third milestone preceding the major release, ensure that the following are complete (for example, given the following release schedule: `17.8, 17.9, 17.10, 17.11, 18.0` – `17.9` is the third milestone preceding the major release).
- [ ] A [deprecation announcement entry](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-the-announcement) has been created so the deprecation will appear in release posts and on the [general deprecation page](https://docs.gitlab.com/ee/update/deprecations). _Add link to the relevant merge request._
- [ ] Documentation has been updated to mark the feature as [deprecated](https://docs.gitlab.com/development/documentation/versions/#deprecations-and-removals). _Add link to the relevant merge request._
- [ ] On the major milestone:
- [ ] The deprecated item has been removed. _Add link to the relevant merge request._
- [ ] If the removal of the deprecated item is a [breaking change](https://docs.gitlab.com/update/terminology/#breaking-change), the merge request is labeled ~"breaking change".
- [ ] Document the migration plan for users, clearly outlining the actions they need to take to mitigate the impact of the breaking change.
- [ ] Add link
#### Development
- [ ] DRI Engineers: @smaglangit
* DRI Engineering Manager: `@mandrewsgl`
- [ ] Measure usage of the impacted product feature
- [ ] Evaluate metrics across **GitLab.com, Self-Managed, Dedicated**
- [ ] _add issue link_
- [ ] _list any metrics and/or dashboards_
- [ ] Create tooling for customers to manually migrate their data or workflows
- [ ] _add issue link_
- [ ] Build mechanism for users to manually enable the breaking change ahead of time
- [ ] _add issue link_
- [ ] Automate the migration for those who do not take any manual steps (ensure the automation can be reverted)
- [ ] _add issue link_
- [ ] Develop rollout plan of breaking change on GitLab.com
- [ ] _add feature flag rollout issue_
- [ ] Dogfood the changes on GitLab.com or a Self-Managed test instance
- [ ] _add issue link_
- [ ] (Optional) Create UI controls for instance admins to disable the breaking change, providing flexibility to Self-Managed / Dedicated customers. Optional as this depends on the breaking change.
- [ ] _add issue link_
#### Stakeholder Mentions
* [ ] Product Designer `@jason_istakinganap`
* [ ] Tech Writer @z_painter
* [ ] Any other stable counterparts based on the [product categories](https://handbook.gitlab.com/handbook/product/categories/):
* [ ] Add Sales/CS counterpart or mention `@timtams`
* [ ] Support counterpart @asmaa.hassan @b_freitas
* [ ] Add Marketing counterpart or mention `@martin_klaus`
* [ ] Add Corp comms if direct customer comms are needed `@jmalleo`
* [ ] Mention (in internal note) Customer Success Managers / Acount Managers / Solutions Architects for impacted customers
#### Labels
<!--Populate the Section, Group, and Category-->
- [x] This issue is labeled ~deprecation, and with the relevant `~devops::`, `~group::`, and `~Category:` labels.
- [x] This issue is labeled ~"breaking change" if the removal of the deprecated item will be a [breaking change](https://docs.gitlab.com/update/terminology/#breaking-change).
<!--Label reminders - you should have one of each of the following labels.
Use the following resources to find the appropriate labels:
- https://gitlab.com/gitlab-org/gitlab/-/labels
- https://about.gitlab.com/handbook/product/categories/features/-->
<!--Identifies that this Issue is related to deprecating a feature-->
### References
- [Deprecations, removals, and breaking changes](https://handbook.gitlab.com/handbook/marketing/blog/release-posts/#deprecations-removals-and-breaking-changes)
- [Deprecation guidelines](https://docs.gitlab.com/ee/development/deprecation_guidelines/)
- [Deprecations and removals doc styleguide](https://docs.gitlab.com/ee/development/documentation/styleguide/deprecations_and_removals)
- [REST API Deprecations](https://docs.gitlab.com/development/documentation/restful_api_styleguide/#deprecations) and [REST API breaking changes](https://docs.gitlab.com/development/api_styleguide/#breaking-changes).
- [GraphQL Deprecations](https://docs.gitlab.com/development/api_graphql_styleguide/#deprecating-schema-items) and [GraphQL API breaking changes](https://docs.gitlab.com/development/api_graphql_styleguide/#breaking-changes).
- [GitLab release and maintenance policy](https://docs.gitlab.com/policy/maintenance/)
- Videos :tv:
- [How to deprecate and remove features in GitLab releases](https://youtu.be/9gy7tg94j7s)
- [Review of GitLab deprecations and removals policy & Runner team deprecations and removals process](https://youtu.be/ehT1xBajCRI)
issue