diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION
index 1966080cbf6..db3e4690b4d 100644
--- a/GITLAB_PAGES_VERSION
+++ b/GITLAB_PAGES_VERSION
@@ -1 +1 @@
-f32d3d9029112f6740e784a031d4b9b60f49aa48
+41a9a2963eb4f08f2ba15667d005377f6127fa4d
diff --git a/app/assets/javascripts/ide/lib/gitlab_web_ide/is_multi_domain_enabled.js b/app/assets/javascripts/ide/lib/gitlab_web_ide/is_multi_domain_enabled.js
index 9ac657166b2..b90091085fa 100644
--- a/app/assets/javascripts/ide/lib/gitlab_web_ide/is_multi_domain_enabled.js
+++ b/app/assets/javascripts/ide/lib/gitlab_web_ide/is_multi_domain_enabled.js
@@ -1,2 +1 @@
-export const isMultiDomainEnabled = () =>
- gon?.dot_com === true && gon?.features?.webIdeMultiDomain === true;
+export const isMultiDomainEnabled = () => gon?.dot_com === true;
diff --git a/app/controllers/admin/organizations_controller.rb b/app/controllers/admin/organizations_controller.rb
index dc48fe7507e..1e55e3046a3 100644
--- a/app/controllers/admin/organizations_controller.rb
+++ b/app/controllers/admin/organizations_controller.rb
@@ -2,7 +2,7 @@
module Admin
class OrganizationsController < ApplicationController
- feature_category :cell
+ feature_category :organization
before_action :check_feature_flag!
before_action only: [:index] do
diff --git a/app/controllers/ide_controller.rb b/app/controllers/ide_controller.rb
index 41133caa210..e5611459690 100644
--- a/app/controllers/ide_controller.rb
+++ b/app/controllers/ide_controller.rb
@@ -24,7 +24,6 @@ class IdeController < ApplicationController
def index
@fork_info = fork_info(project, params[:branch])
- push_frontend_feature_flag(:web_ide_multi_domain, @project.group)
render layout: 'fullscreen'
end
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index d4dc75a523d..65a8869cc0d 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -145,7 +145,7 @@ class SearchController < ApplicationController
return true
end
- return true if ::Feature.disabled?(:allow_anonymous_searches, type: :ops)
+ return true unless ::Gitlab::CurrentSettings.anonymous_searches_allowed?
false
end
diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb
index 37f1f2fedd6..915939fa18e 100644
--- a/app/helpers/application_settings_helper.rb
+++ b/app/helpers/application_settings_helper.rb
@@ -74,6 +74,13 @@ module ApplicationSettingsHelper
def global_search_settings_checkboxes(form)
[
+ form.gitlab_ui_checkbox_component(
+ :anonymous_searches_allowed,
+ _("Allow unauthenticated users to use search"),
+ checkbox_options: {
+ checked: @application_setting.anonymous_searches_allowed, multiple: false
+ }
+ ),
form.gitlab_ui_checkbox_component(
:global_search_block_anonymous_searches_enabled,
_("Restrict global search to authenticated users only"),
diff --git a/app/services/concerns/work_items/widgetable_service.rb b/app/services/concerns/work_items/widgetable_service.rb
index 10b63114c00..a3eee1b8de0 100644
--- a/app/services/concerns/work_items/widgetable_service.rb
+++ b/app/services/concerns/work_items/widgetable_service.rb
@@ -42,6 +42,10 @@ module WorkItems
handle_widget_quick_actions!(work_item)
end
+ def params_include_state_and_status_changes?
+ params.include?(:state_event) && widget_params.dig(:status_widget, :status)
+ end
+
private
def new_type_excludes_widget?(widget, resource_parent)
diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb
index 09325ec4e00..40c5cbcb5bf 100644
--- a/app/services/issues/close_service.rb
+++ b/app/services/issues/close_service.rb
@@ -3,10 +3,10 @@
module Issues
class CloseService < Issues::BaseService
# Closes the supplied issue if the current user is able to do so.
- def execute(issue, commit: nil, notifications: true, system_note: true, skip_authorization: false)
+ def execute(issue, commit: nil, notifications: true, system_note: true, skip_authorization: false, status: nil)
return issue unless can_close?(issue, skip_authorization: skip_authorization)
- close_issue(issue, closed_via: commit, notifications: notifications, system_note: system_note)
+ close_issue(issue, closed_via: commit, notifications: notifications, system_note: system_note, status: status)
end
# Closes the supplied issue without checking if the user is authorized to
@@ -14,7 +14,7 @@ module Issues
#
# The code calling this method is responsible for ensuring that a user is
# allowed to close the given issue.
- def close_issue(issue, closed_via: nil, notifications: true, system_note: true)
+ def close_issue(issue, closed_via: nil, notifications: true, system_note: true, status: nil)
if issue.is_a?(ExternalIssue)
close_external_issue(issue, closed_via)
@@ -23,7 +23,7 @@ module Issues
return issue unless handle_closing_issue!(issue, current_user)
- after_close(issue, closed_via: closed_via, notifications: notifications, system_note: system_note)
+ after_close(issue, status, closed_via: closed_via, notifications: notifications, system_note: system_note)
end
private
@@ -34,7 +34,7 @@ module Issues
end
# overriden in EE
- def after_close(issue, closed_via: nil, notifications: true, system_note: true)
+ def after_close(issue, _status, closed_via: nil, notifications: true, system_note: true)
event_service.close_issue(issue, current_user)
create_note(issue, closed_via) if system_note
@@ -45,7 +45,13 @@ module Issues
closed_via = _("commit %{commit_id}") % { commit_id: closed_via.id } if closed_via.is_a?(Commit)
- notification_service.async.close_issue(issue, current_user, { closed_via: closed_via }) if notifications
+ if notifications
+ user = current_user
+ issue.run_after_commit_or_now do
+ NotificationService.new.async.close_issue(issue, user, { closed_via: closed_via })
+ end
+ end
+
todo_service.close_issue(issue, current_user)
perform_incident_management_actions(issue)
execute_hooks(issue, 'close')
diff --git a/app/services/issues/duplicate_service.rb b/app/services/issues/duplicate_service.rb
index 863fd81765f..34d2ffa8eb4 100644
--- a/app/services/issues/duplicate_service.rb
+++ b/app/services/issues/duplicate_service.rb
@@ -11,8 +11,8 @@ module Issues
create_issue_duplicate_note(duplicate_issue, canonical_issue)
create_issue_canonical_note(canonical_issue, duplicate_issue)
- close_service.new(container: container, current_user: current_user).execute(duplicate_issue)
duplicate_issue.update(duplicated_to: canonical_issue)
+ close_service.new(container: container, current_user: current_user).execute(duplicate_issue)
relate_two_issues(duplicate_issue, canonical_issue)
end
diff --git a/app/services/issues/reopen_service.rb b/app/services/issues/reopen_service.rb
index 07f389cab08..ca56351ef81 100644
--- a/app/services/issues/reopen_service.rb
+++ b/app/services/issues/reopen_service.rb
@@ -2,10 +2,10 @@
module Issues
class ReopenService < Issues::BaseService
- def execute(issue, skip_authorization: false)
+ def execute(issue, skip_authorization: false, status: nil)
return issue unless can_reopen?(issue, skip_authorization: skip_authorization)
- after_reopen(issue) if reopen_issue(issue)
+ after_reopen(issue, status) if reopen_issue(issue)
issue
end
@@ -13,7 +13,7 @@ module Issues
private
# overriden in EE
- def after_reopen(issue)
+ def after_reopen(issue, _status)
event_service.reopen_issue(issue, current_user)
if current_user.project_bot?
@@ -22,7 +22,8 @@ module Issues
end
create_note(issue, 'reopened')
- notification_service.async.reopen_issue(issue, current_user)
+ user = current_user
+ issue.run_after_commit_or_now { NotificationService.new.async.reopen_issue(issue, user) }
perform_incident_management_actions(issue)
execute_hooks(issue, 'reopen')
invalidate_cache_counts(issue, users: issue.assignees)
diff --git a/app/workers/namespaces/enable_descendants_cache_cron_worker.rb b/app/workers/namespaces/enable_descendants_cache_cron_worker.rb
index fb9005f5e28..ecc37b0c038 100644
--- a/app/workers/namespaces/enable_descendants_cache_cron_worker.rb
+++ b/app/workers/namespaces/enable_descendants_cache_cron_worker.rb
@@ -24,11 +24,6 @@ module Namespaces
# rubocop: disable CodeReuse/ActiveRecord -- Batching over groups.
def perform
- # rubocop: disable Gitlab/FeatureFlagWithoutActor -- This is a global worker.
- return if Feature.disabled?(:periodical_namespace_descendants_cache_worker)
-
- # rubocop: enable Gitlab/FeatureFlagWithoutActor
-
limiter = Gitlab::Metrics::RuntimeLimiter.new(MAX_RUNTIME)
ids_to_cache = Set.new
last_id = get_last_id
diff --git a/config/feature_flags/beta/periodical_namespace_descendants_cache_worker.yml b/config/feature_flags/beta/periodical_namespace_descendants_cache_worker.yml
deleted file mode 100644
index 0ae174633a2..00000000000
--- a/config/feature_flags/beta/periodical_namespace_descendants_cache_worker.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-name: periodical_namespace_descendants_cache_worker
-feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/509554
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/176648
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/510967
-milestone: '17.8'
-group: group::optimize
-type: beta
-default_enabled: true
diff --git a/config/feature_flags/gitlab_com_derisk/web_ide_multi_domain.yml b/config/feature_flags/gitlab_com_derisk/web_ide_multi_domain.yml
deleted file mode 100644
index 93ff3ce3859..00000000000
--- a/config/feature_flags/gitlab_com_derisk/web_ide_multi_domain.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-name: web_ide_multi_domain
-feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/520263
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185623
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/526529
-milestone: '17.11'
-group: group::remote development
-type: gitlab_com_derisk
-default_enabled: false
diff --git a/db/fixtures/development/02_users.rb b/db/fixtures/development/02_users.rb
index e175ab93740..a52ff1dd86f 100644
--- a/db/fixtures/development/02_users.rb
+++ b/db/fixtures/development/02_users.rb
@@ -192,6 +192,7 @@ class Gitlab::Seeder::Users
end
Gitlab::Seeder.quiet do
- users = Gitlab::Seeder::Users.new(organization: Organizations::Organization.default_organization)
+ organization = User.admins.first.organizations.first
+ users = Gitlab::Seeder::Users.new(organization: organization)
users.seed!
end
diff --git a/db/fixtures/development/03_project.rb b/db/fixtures/development/03_project.rb
index 639c2a69a3a..63b840030b4 100644
--- a/db/fixtures/development/03_project.rb
+++ b/db/fixtures/development/03_project.rb
@@ -251,6 +251,7 @@ class Gitlab::Seeder::Projects
end
Gitlab::Seeder.quiet do
- projects = Gitlab::Seeder::Projects.new(organization: Organizations::Organization.default_organization)
+ organization = User.admins.first.organizations.first
+ projects = Gitlab::Seeder::Projects.new(organization: organization)
projects.seed!
end
diff --git a/db/fixtures/development/12_snippets.rb b/db/fixtures/development/12_snippets.rb
index caa6887a581..6a9fd73bfc0 100644
--- a/db/fixtures/development/12_snippets.rb
+++ b/db/fixtures/development/12_snippets.rb
@@ -33,7 +33,7 @@ Gitlab::Seeder.quiet do
title: FFaker::Lorem.sentence(3),
file_name: 'file.rb',
visibility_level: Gitlab::VisibilityLevel.values.sample,
- organization: Organizations::Organization.default_organization,
+ organization: User.admins.first.organizations.first,
content: 'foo'
}).tap do |snippet|
snippet.repository.expire_exists_cache
diff --git a/db/fixtures/development/17_cycle_analytics.rb b/db/fixtures/development/17_cycle_analytics.rb
index 3fedc46b381..f73d24c0ca5 100644
--- a/db/fixtures/development/17_cycle_analytics.rb
+++ b/db/fixtures/development/17_cycle_analytics.rb
@@ -231,7 +231,7 @@ class Gitlab::Seeder::CycleAnalytics # rubocop:disable Style/ClassAndModuleChild
confirmed_at: DateTime.now,
password: ::User.random_password
) do |user|
- user.assign_personal_namespace(Organizations::Organization.default_organization)
+ user.assign_personal_namespace(project.organization)
end
project.group&.add_developer(user)
@@ -252,6 +252,7 @@ class Gitlab::Seeder::CycleAnalytics # rubocop:disable Style/ClassAndModuleChild
name: "Value Stream Management Group #{suffix}",
path: "vsmg-#{suffix}"
)
+
project = FactoryBot.create(
:project,
:repository,
@@ -260,7 +261,6 @@ class Gitlab::Seeder::CycleAnalytics # rubocop:disable Style/ClassAndModuleChild
creator: admin,
namespace: namespace
)
-
project.create_repository
project
end
diff --git a/db/fixtures/development/18_abuse_reports.rb b/db/fixtures/development/18_abuse_reports.rb
index da50a04a586..a85865b0d30 100644
--- a/db/fixtures/development/18_abuse_reports.rb
+++ b/db/fixtures/development/18_abuse_reports.rb
@@ -4,6 +4,8 @@ module Db
class AbuseReport
def self.seed
Gitlab::Seeder.quiet do
+ organization = User.admins.first.organizations.first
+
(::AbuseReport.default_per_page + 3).times do |i|
username = "#{::Gitlab::Seeder::REPORTED_USER_START}#{::Gitlab::Faker::Internet.unique_username}"
reported_user =
@@ -14,7 +16,7 @@ module Db
confirmed_at: DateTime.now,
password: ::User.random_password
) do |user|
- user.assign_personal_namespace(Organizations::Organization.default_organization)
+ user.assign_personal_namespace(organization)
end
label_title = "abuse_report_label_#{FactoryBot.generate(:label_title)}"
diff --git a/db/fixtures/development/20_nested_groups.rb b/db/fixtures/development/20_nested_groups.rb
index f542553f0a5..b9da2017e86 100644
--- a/db/fixtures/development/20_nested_groups.rb
+++ b/db/fixtures/development/20_nested_groups.rb
@@ -25,7 +25,7 @@ Sidekiq::Testing.inline! do
full_path, _, project_path = full_path.rpartition('/')
group = Sidekiq::Worker.skipping_transaction_check do
Group.find_by_full_path(full_path) || Groups::NestedCreateService.new(
- user, group_path: full_path, organization_id: Organizations::Organization.default_organization.id
+ user, group_path: full_path, organization_id: user.organizations.first.id
).execute
end
diff --git a/db/fixtures/development/25_api_personal_access_token.rb b/db/fixtures/development/25_api_personal_access_token.rb
index 79c240601a6..65206686cd7 100644
--- a/db/fixtures/development/25_api_personal_access_token.rb
+++ b/db/fixtures/development/25_api_personal_access_token.rb
@@ -14,7 +14,7 @@ Gitlab::Seeder.quiet do
user.personal_access_tokens.build(params).tap do |pat|
pat.expires_at = 365.days.from_now
pat.set_token(token)
- pat.organization = Organizations::Organization.default_organization
+ pat.organization = user.organizations.first
pat.save!
end
end
diff --git a/db/fixtures/development/30_composer_packages.rb b/db/fixtures/development/30_composer_packages.rb
index 0f32bdd461d..0d1458ab7f5 100644
--- a/db/fixtures/development/30_composer_packages.rb
+++ b/db/fixtures/development/30_composer_packages.rb
@@ -101,7 +101,9 @@ Gitlab::Seeder.quiet do
Sidekiq::Testing.inline! do
COMPOSER_PACKAGES.each do |path, versions|
- project = Gitlab::Seeder::ComposerPackages.new(organization: Organizations::Organization.default_organization)
+ organization = User.admins.first.organizations.first
+
+ project = Gitlab::Seeder::ComposerPackages.new(organization: organization)
project.create_real_project!(path)
versions.each do |version|
diff --git a/db/fixtures/development/33_triage_ops.rb b/db/fixtures/development/33_triage_ops.rb
index 1580be3aeb6..2e2fb3fe349 100644
--- a/db/fixtures/development/33_triage_ops.rb
+++ b/db/fixtures/development/33_triage_ops.rb
@@ -170,7 +170,7 @@ class Gitlab::Seeder::TriageOps
password: SecureRandom.hex.slice(0, 16),
user_type: :project_bot
) do |user|
- user.assign_personal_namespace(Organizations::Organization.default_organization)
+ user.assign_personal_namespace(@organization)
end
end
@@ -220,7 +220,7 @@ class Gitlab::Seeder::TriageOps
name: group_path.titleize,
path: group_path,
parent: parent,
- organization_id: organization.id
+ organization_id: @organization.id
)
group.description = FFaker::Lorem.sentence
group.save!
@@ -247,7 +247,8 @@ class Gitlab::Seeder::TriageOps
path: project_path,
description: FFaker::Lorem.sentence,
visibility_level: Gitlab::VisibilityLevel::PRIVATE,
- skip_disk_validation: true
+ skip_disk_validation: true,
+ organization_id: @organization.id
}
project = ::Projects::CreateService.new(User.first, params).execute
@@ -260,7 +261,9 @@ end
if ENV['SEED_TRIAGE_OPS']
Gitlab::Seeder.quiet do
- seeder = Gitlab::Seeder::TriageOps.new(organization: Organizations::Organization.default_organization)
+ organization = User.admins.first.organizations.first
+
+ seeder = Gitlab::Seeder::TriageOps.new(organization: organization)
seeder.seed!
end
else
diff --git a/db/fixtures/development/37_timelogs.rb b/db/fixtures/development/37_timelogs.rb
index c2835a2d283..ad43776d2b1 100644
--- a/db/fixtures/development/37_timelogs.rb
+++ b/db/fixtures/development/37_timelogs.rb
@@ -59,7 +59,9 @@ class Gitlab::Seeder::Timelogs
end
def self.find_or_create_reporter_user(username, password)
+ organization = User.admins.first.organizations.first
user = User.find_by_username(username)
+
if user.nil?
print "\nCreating user '#{username}' with password: '#{password}'"
@@ -70,7 +72,7 @@ class Gitlab::Seeder::Timelogs
confirmed_at: DateTime.now,
password: password
) do |user|
- user.assign_personal_namespace(Organizations::Organization.default_organization)
+ user.assign_personal_namespace(organization)
end
end
diff --git a/doc/administration/cicd/job_artifacts_troubleshooting.md b/doc/administration/cicd/job_artifacts_troubleshooting.md
index d92d80935f1..ed308ae5d07 100644
--- a/doc/administration/cicd/job_artifacts_troubleshooting.md
+++ b/doc/administration/cicd/job_artifacts_troubleshooting.md
@@ -28,7 +28,7 @@ reasons are:
removes these.
- Artifact files might be left on disk and not deleted by housekeeping. Run the
[Rake task for _orphaned_ artifact files](../raketasks/cleanup.md#remove-orphan-artifact-files)
- to remove these. This script should always find work to do because it also removes empty directories (see above).
+ to remove these. This script should always find work to do because it also removes empty directories (see the previous reason).
- [Artifact housekeeping was changed significantly](#housekeeping-disabled-in-gitlab-150-to-152), and you might need to enable a feature flag to use the updated system.
- The [keep latest artifacts from most recent success jobs](../../ci/jobs/job_artifacts.md#keep-artifacts-from-most-recent-successful-jobs)
feature is enabled.
@@ -149,7 +149,7 @@ for more details.
#### Clean up `unknown` artifacts
The Sidekiq worker that processes all `unknown` artifacts is enabled by default in
-GitLab 15.3 and later. It analyzes the artifacts returned by the above database query and
+GitLab 15.3 and later. It analyzes the artifacts returned by the previous database query and
determines which should be `locked` or `unlocked`. Artifacts are then deleted
by that worker if needed.
@@ -638,7 +638,7 @@ WARNING: Uploading artifacts as "archive" to coordinator... POST https://gitlab.
FATAL: invalid argument
```
-If a job artifact fails to upload with the above error when using consolidated object storage, make sure you are [using separate buckets](../object_storage.md#use-separate-buckets) for each data type.
+If a job artifact fails to upload due to the previous error when using consolidated object storage, make sure you are [using separate buckets](../object_storage.md#use-separate-buckets) for each data type.
## Job artifacts fail to upload with `FATAL: invalid argument` when using Windows mount
diff --git a/doc/administration/cicd/job_logs.md b/doc/administration/cicd/job_logs.md
index 389804b668e..37d415426bf 100644
--- a/doc/administration/cicd/job_logs.md
+++ b/doc/administration/cicd/job_logs.md
@@ -250,7 +250,7 @@ The incremental logging process uses Redis as temporary storage and follows this
1. The runner sends a piece of log to GitLab.
1. GitLab appends the data to Redis in the `Gitlab::Redis::TraceChunks` namespace.
1. After the data in Redis reaches 128 KB, the data is flushed to a persistent store.
-1. The above steps repeat until the job is finished.
+1. The previous steps repeat until the job is finished.
1. After the job is finished, GitLab schedules a Sidekiq worker to archive the log.
1. The Sidekiq worker archives the log to object storage and cleans up temporary data.
diff --git a/doc/administration/dedicated/configure_instance/saml.md b/doc/administration/dedicated/configure_instance/saml.md
index 98c13869413..1cb993868f1 100644
--- a/doc/administration/dedicated/configure_instance/saml.md
+++ b/doc/administration/dedicated/configure_instance/saml.md
@@ -56,7 +56,7 @@ To add a SAML provider for your GitLab Dedicated instance:
- **Security**
1. To start using this provider, select the **Enable this provider** checkbox.
1. Select **Save**.
-1. To add another SAML provider, select **Add SAML provider** again and follow the steps above. You can add up to ten providers.
+1. To add another SAML provider, select **Add SAML provider** again and follow the previous steps. You can add up to ten providers.
1. Scroll up to the top of the page. The **Initiated changes** banner explains that your SAML configuration changes are applied during the next maintenance window. To apply the changes immediately, select **Apply changes now**.
After the changes are applied, you can sign in to your GitLab Dedicated instance using this SAML provider. To use group sync, [configure the SAML group links](../../../user/group/saml_sso/group_sync.md#configure-saml-group-links).
diff --git a/doc/administration/load_balancer.md b/doc/administration/load_balancer.md
index 507748a39f4..4b117f8c6f1 100644
--- a/doc/administration/load_balancer.md
+++ b/doc/administration/load_balancer.md
@@ -109,7 +109,7 @@ GitLab Pages requires a separate virtual IP address. Configure DNS to point the
Some organizations have policies against opening SSH port 22. In this case,
it may be helpful to configure an alternate SSH hostname that allows users
to use SSH on port 443. An alternate SSH hostname requires a new virtual IP address
-compared to the other GitLab HTTP configuration above.
+compared to the other GitLab HTTP configuration documented previously.
Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
diff --git a/doc/administration/logs/_index.md b/doc/administration/logs/_index.md
index e9286f6e811..34abde34249 100644
--- a/doc/administration/logs/_index.md
+++ b/doc/administration/logs/_index.md
@@ -619,7 +619,7 @@ processing them, such as before being enqueued.
This log file follows the same structure as
[`sidekiq.log`](#sidekiqlog), so it is structured as JSON if
-you've configured this for Sidekiq as mentioned above.
+you've configured this for Sidekiq as mentioned previously.
## `gitlab-shell.log`
@@ -863,7 +863,8 @@ This file is located at:
- `/home/git/gitlab/log/mail_room_json.log` on self-compiled installations.
This structured log file records internal activity in the `mail_room` gem.
-Its name and path are configurable, so the name and path may not match the above.
+Its name and path are configurable, so the name and path may not match this one
+documented previously.
## `web_hooks.log`
diff --git a/doc/administration/logs/tracing_correlation_id.md b/doc/administration/logs/tracing_correlation_id.md
index 0ae2e541a83..fe1947d08ea 100644
--- a/doc/administration/logs/tracing_correlation_id.md
+++ b/doc/administration/logs/tracing_correlation_id.md
@@ -189,7 +189,7 @@ The response contains the data from the API endpoint, and a `correlation_id` val
You can then view the database details for this request:
-1. Paste the `x-request-id` value into the `request details` field of the [performance bar](../monitoring/performance/performance_bar.md) and press Enter/Return. This example uses the `x-request-id` value `01FGN8P881GF2E5J91JYA338Y3`, returned by the above response:
+1. Paste the `x-request-id` value into the `request details` field of the [performance bar](../monitoring/performance/performance_bar.md) and press Enter/Return. This example uses the `x-request-id` value `01FGN8P881GF2E5J91JYA338Y3`, returned by the previous response:

diff --git a/doc/administration/maintenance_mode/_index.md b/doc/administration/maintenance_mode/_index.md
index faeebedd5f0..6042299d331 100644
--- a/doc/administration/maintenance_mode/_index.md
+++ b/doc/administration/maintenance_mode/_index.md
@@ -89,7 +89,7 @@ If Geo is enabled, Git pushes to both primary and secondaries fail.
### Merge requests, issues, epics
-All write actions except those mentioned above fail. For example, a user cannot update merge requests or issues.
+All write actions except those mentioned previously fail. For example, a user cannot update merge requests or issues.
### Incoming email
diff --git a/doc/administration/monitoring/performance/grafana_configuration.md b/doc/administration/monitoring/performance/grafana_configuration.md
index a437c1670b7..02e6e02748c 100644
--- a/doc/administration/monitoring/performance/grafana_configuration.md
+++ b/doc/administration/monitoring/performance/grafana_configuration.md
@@ -39,7 +39,7 @@ GitLab displays your link in the **Admin** area under **Monitoring > Metrics Das
## Required Scopes
-When setting up Grafana through the process above, no scope shows in the screen in
+When setting up Grafana through the previous process, no scope shows in the screen in
the **Admin** area under **Applications > GitLab Grafana**. However, the `read_user` scope is
required and is provided to the application automatically. Setting any scope other than
`read_user` without also including `read_user` leads to this error when you try to sign in using
diff --git a/doc/administration/monitoring/prometheus/web_exporter.md b/doc/administration/monitoring/prometheus/web_exporter.md
index b23d3b77afd..7ce17bbf326 100644
--- a/doc/administration/monitoring/prometheus/web_exporter.md
+++ b/doc/administration/monitoring/prometheus/web_exporter.md
@@ -93,7 +93,7 @@ To serve metrics via HTTPS instead of HTTP, enable TLS in the exporter settings:
1. Save the file and [reconfigure GitLab](../../restart_gitlab.md#reconfigure-a-linux-package-installation)
for the changes to take effect.
-When TLS is enabled, the same `port` and `address` is used as described above.
+When TLS is enabled, the same `port` and `address` is used as described previously.
The metrics server cannot serve both HTTP and HTTPS at the same time.
## Troubleshooting
diff --git a/doc/administration/object_storage.md b/doc/administration/object_storage.md
index 7aa97e9216e..db5dd93716f 100644
--- a/doc/administration/object_storage.md
+++ b/doc/administration/object_storage.md
@@ -139,7 +139,7 @@ For an example, see how to [use the consolidated form and Amazon S3](#full-examp
#### Disable object storage for specific features
-As seen above, object storage can be disabled for specific types by
+As seen previously, object storage can be disabled for specific types by
setting the `enabled` flag to `false`. For example, to disable object
storage for CI artifacts:
diff --git a/doc/administration/packages/container_registry.md b/doc/administration/packages/container_registry.md
index 9d1d661a96b..0f8b7f8e313 100644
--- a/doc/administration/packages/container_registry.md
+++ b/doc/administration/packages/container_registry.md
@@ -1689,7 +1689,7 @@ flowchart LR
linkStyle 2 stroke-width:4px,stroke:green
```
-The flow described by the diagram above:
+The flow described by the previous diagram:
1. A user runs `docker login registry.gitlab.example` on their client. This reaches the web server (or LB) on port 443.
1. Web server connects to the Registry backend pool (by default, using port 5000). Because the user
diff --git a/doc/administration/packages/container_registry_metadata_database.md b/doc/administration/packages/container_registry_metadata_database.md
index bcc2b622870..14dec7e31f1 100644
--- a/doc/administration/packages/container_registry_metadata_database.md
+++ b/doc/administration/packages/container_registry_metadata_database.md
@@ -740,7 +740,7 @@ which can happen if you:
- Attempted the [one step import](#one-step-import) and encountered errors.
- Attempted the [three-step import](#three-step-import) process and encountered errors.
- Stopped the import process on purpose.
-- Tried to run the import again after any of the above.
+- Tried to run the import again after any of the previous actions.
- Ran the import against the wrong configuration file.
To resolve this issue, you must delete the existing entries in the tags table.
diff --git a/doc/administration/packages/container_registry_troubleshooting.md b/doc/administration/packages/container_registry_troubleshooting.md
index 329f86b1ca5..8f166f4f0a3 100644
--- a/doc/administration/packages/container_registry_troubleshooting.md
+++ b/doc/administration/packages/container_registry_troubleshooting.md
@@ -52,7 +52,7 @@ Error response from daemon: Get registry.example.com/v1/users/: x509: certificat
```
The Docker daemon running the command expects a cert signed by a recognized CA,
-thus the error above.
+thus the previous error.
While GitLab doesn't support using self-signed certificates with Container
Registry out of the box, it is possible to make it work by
@@ -583,7 +583,7 @@ docker login example.s3.amazonaws.com:5050
docker push example.s3.amazonaws.com:5050/root/docker-test/docker-image
```
-In the example above, we see the following trace on the mitmproxy window:
+In the previous example, we see the following trace on the mitmproxy window:
```plaintext
PUT https://example.s3.amazonaws.com:4567/v2/root/docker-test/blobs/uploads/(UUID)/(QUERYSTRING)
diff --git a/doc/administration/pages/_index.md b/doc/administration/pages/_index.md
index b5f3f462ff3..ccadc4c9df0 100644
--- a/doc/administration/pages/_index.md
+++ b/doc/administration/pages/_index.md
@@ -1176,7 +1176,7 @@ It's possible to run GitLab Pages on multiple servers if you wish to distribute
the load. You can do this through standard load balancing practices such as
configuring your DNS server to return multiple IPs for your Pages server, or
configuring a load balancer to work at the IP level. If you wish to
-set up GitLab Pages on multiple servers, perform the above procedure for each
+set up GitLab Pages on multiple servers, perform the previous procedure for each
Pages server.
## Domain source configuration
diff --git a/doc/administration/pages/source.md b/doc/administration/pages/source.md
index 47a1fded883..733b9b9bbfd 100644
--- a/doc/administration/pages/source.md
+++ b/doc/administration/pages/source.md
@@ -236,7 +236,7 @@ outside world.
1. Edit `/etc/default/gitlab` and set `gitlab_pages_enabled` to `true` in
order to enable the pages daemon. In `gitlab_pages_options` the
- `-pages-domain` must match the `host` setting that you set above.
+ `-pages-domain` must match the `host` value that you set previously.
The `-root-cert` and `-root-key` settings are the wildcard TLS certificates
of the `example.io` domain:
diff --git a/doc/administration/raketasks/check.md b/doc/administration/raketasks/check.md
index 547cf67be80..f0947e9ce97 100644
--- a/doc/administration/raketasks/check.md
+++ b/doc/administration/raketasks/check.md
@@ -426,8 +426,8 @@ To reset broken tokens:
## Troubleshooting
-The following are solutions to problems you might discover using the Rake tasks documented
-above.
+The following are solutions to problems you might discover using the Rake tasks
+documented previously.
### Dangling objects
diff --git a/doc/policy/development_stages_support.md b/doc/policy/development_stages_support.md
index 433b369bfef..68198104234 100644
--- a/doc/policy/development_stages_support.md
+++ b/doc/policy/development_stages_support.md
@@ -174,4 +174,4 @@ to apply to their experimental and beta features:
a different direction would provide more value or a better user experience. If open questions must be answered
to decide if the feature is worth putting in the product, list and answer those.
-For the exit criteria of **AI features**, in addition to the above, see the UX maturity requirements.
+For the exit criteria of **AI features**, in addition to the list documented previously, see the UX maturity requirements.
diff --git a/doc/policy/early_access_program/_index.md b/doc/policy/early_access_program/_index.md
index d8c84579445..748b36fcb54 100644
--- a/doc/policy/early_access_program/_index.md
+++ b/doc/policy/early_access_program/_index.md
@@ -26,7 +26,8 @@ You are more than welcome to [request a free trial](https://about.gitlab.com/fre
## Add a feature to the program
-Create a merge request and add your feature to the [table above](#features-included-in-the-gitlab-early-access-program). Assign `@nick_vh` and `@knockfog-ext` as reviewers. In addition, post a message in the `#developer-relations-early-access-program` Slack channel for details.
+Create a merge request and add your feature to the [previous table](#features-included-in-the-gitlab-early-access-program).
+Assign `@nick_vh` and `@knockfog-ext` as reviewers. In addition, post a message in the `#developer-relations-early-access-program` Slack channel for details.