diff --git a/app/assets/javascripts/diffs/components/diff_file.vue b/app/assets/javascripts/diffs/components/diff_file.vue
index 933891d698cc7f9202223d97fb66f199d1816df5..d09cc064b2c292446fa8ac8f2125296f1911c3c0 100644
--- a/app/assets/javascripts/diffs/components/diff_file.vue
+++ b/app/assets/javascripts/diffs/components/diff_file.vue
@@ -170,10 +170,7 @@ export default {
       return !this.isCollapsed && !this.isFileTooLarge;
     },
     showLocalFileReviews() {
-      const loggedIn = Boolean(gon.current_user_id);
-      const featureOn = this.glFeatures.localFileReviews;
-
-      return loggedIn && featureOn;
+      return Boolean(gon.current_user_id);
     },
     codequalityDiffForFile() {
       return this.codequalityDiff?.files?.[this.file.file_path] || [];
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 4c17e2e6caa42b968766406cb0e8e55f6536f929..3133f24b2c8184382a2e94bea420f36b8a185b32 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -35,7 +35,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
     push_frontend_feature_flag(:merge_request_widget_graphql, @project, default_enabled: :yaml)
     push_frontend_feature_flag(:default_merge_ref_for_diffs, @project, default_enabled: :yaml)
     push_frontend_feature_flag(:core_security_mr_widget_counts, @project)
-    push_frontend_feature_flag(:local_file_reviews, default_enabled: :yaml)
     push_frontend_feature_flag(:paginated_notes, @project, default_enabled: :yaml)
     push_frontend_feature_flag(:confidential_notes, @project, default_enabled: :yaml)
     push_frontend_feature_flag(:usage_data_i_testing_summary_widget_total, @project, default_enabled: :yaml)
diff --git a/app/graphql/types/group_type.rb b/app/graphql/types/group_type.rb
index 6aa30fff86d1ee49dd7b19928809c1d15906fac0..46b8833e5fbe57f460e0b570fbc3962e6daa40a7 100644
--- a/app/graphql/types/group_type.rb
+++ b/app/graphql/types/group_type.rb
@@ -158,8 +158,7 @@ def label(title:)
     field :runners, Types::Ci::RunnerType.connection_type,
           null: true,
           resolver: Resolvers::Ci::GroupRunnersResolver,
-          description: "Find runners visible to the current user.",
-          feature_flag: :runner_graphql_query
+          description: "Find runners visible to the current user."
 
     def avatar_url
       object.avatar_url(only_path: false)
diff --git a/app/graphql/types/mutation_type.rb b/app/graphql/types/mutation_type.rb
index 293d19d068a684f27dca187af2963f0ed7a8cd45..31f46f6573302c4fa337c40d002164a8e682c855 100644
--- a/app/graphql/types/mutation_type.rb
+++ b/app/graphql/types/mutation_type.rb
@@ -103,9 +103,9 @@ class MutationType < BaseObject
     mount_mutation Mutations::Ci::Job::Unschedule
     mount_mutation Mutations::Ci::JobTokenScope::AddProject
     mount_mutation Mutations::Ci::JobTokenScope::RemoveProject
-    mount_mutation Mutations::Ci::Runner::Update, feature_flag: :runner_graphql_query
-    mount_mutation Mutations::Ci::Runner::Delete, feature_flag: :runner_graphql_query
-    mount_mutation Mutations::Ci::RunnersRegistrationToken::Reset, feature_flag: :runner_graphql_query
+    mount_mutation Mutations::Ci::Runner::Update
+    mount_mutation Mutations::Ci::Runner::Delete
+    mount_mutation Mutations::Ci::RunnersRegistrationToken::Reset
     mount_mutation Mutations::Namespace::PackageSettings::Update
     mount_mutation Mutations::Groups::Update
     mount_mutation Mutations::UserCallouts::Create
diff --git a/app/graphql/types/query_type.rb b/app/graphql/types/query_type.rb
index 71897644991928c9647ee039b67644dca603eca0..e02191fbf3e1b282a593a099447918f0de5938ea 100644
--- a/app/graphql/types/query_type.rb
+++ b/app/graphql/types/query_type.rb
@@ -120,14 +120,12 @@ class QueryType < ::Types::BaseObject
           null: true,
           resolver: Resolvers::Ci::RunnerResolver,
           extras: [:lookahead],
-          description: "Find a runner.",
-          feature_flag: :runner_graphql_query
+          description: "Find a runner."
 
     field :runners, Types::Ci::RunnerType.connection_type,
           null: true,
           resolver: Resolvers::Ci::RunnersResolver,
-          description: "Find runners visible to the current user.",
-          feature_flag: :runner_graphql_query
+          description: "Find runners visible to the current user."
 
     field :ci_config, resolver: Resolvers::Ci::ConfigResolver, complexity: 126 # AUTHENTICATED_MAX_COMPLEXITY / 2 + 1
 
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 8ff5a6f38e21103b0e339c3e723e5dfd06c28146..8dd650751bf0b52f3f407b25b6a5f3fd07eddd10 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -58,7 +58,8 @@ class CommitStatus < Ci::ApplicationRecord
   scope :in_pipelines, ->(pipelines) { where(pipeline: pipelines) }
   scope :eager_load_pipeline, -> { eager_load(:pipeline, project: { namespace: :route }) }
   scope :with_pipeline, -> { joins(:pipeline) }
-  scope :updated_at_before, ->(date) { where('updated_at < ?', date) }
+  scope :updated_at_before, ->(date) { where('ci_builds.updated_at < ?', date) }
+  scope :created_at_before, ->(date) { where('ci_builds.created_at < ?', date) }
   scope :updated_before, ->(lookback:, timeout:) {
     where('(ci_builds.created_at BETWEEN ? AND ?) AND (ci_builds.updated_at BETWEEN ? AND ?)', lookback, timeout, lookback, timeout)
   }
diff --git a/app/workers/stuck_ci_jobs_worker.rb b/app/workers/stuck_ci_jobs_worker.rb
index 5723380a3f32ed9220eb99d1bfb3e74dbb96b084..7754f0d2d27e0a00d0fd51e329ec78e4728a2736 100644
--- a/app/workers/stuck_ci_jobs_worker.rb
+++ b/app/workers/stuck_ci_jobs_worker.rb
@@ -26,14 +26,14 @@ def perform
     drop(running_timed_out_builds, failure_reason: :stuck_or_timeout_failure)
 
     drop(
-      Ci::Build.pending.updated_before(lookback: BUILD_LOOKBACK.ago, timeout: BUILD_PENDING_OUTDATED_TIMEOUT.ago),
+      pending_builds(BUILD_PENDING_OUTDATED_TIMEOUT.ago),
       failure_reason: :stuck_or_timeout_failure
     )
 
     drop(scheduled_timed_out_builds, failure_reason: :stale_schedule)
 
     drop_stuck(
-      Ci::Build.pending.updated_before(lookback: BUILD_LOOKBACK.ago, timeout: BUILD_PENDING_STUCK_TIMEOUT.ago),
+      pending_builds(BUILD_PENDING_STUCK_TIMEOUT.ago),
       failure_reason: :stuck_or_timeout_failure
     )
 
@@ -42,6 +42,19 @@ def perform
 
   private
 
+  # rubocop: disable CodeReuse/ActiveRecord
+  # We're adding the ordering clause by `created_at` and `project_id`
+  # because we want to force the query planner to use the
+  # `ci_builds_gitlab_monitor_metrics` index all the time.
+  def pending_builds(timeout)
+    if Feature.enabled?(:ci_new_query_for_pending_stuck_jobs)
+      Ci::Build.pending.created_at_before(timeout).updated_at_before(timeout).order(created_at: :asc, project_id: :asc)
+    else
+      Ci::Build.pending.updated_before(lookback: BUILD_LOOKBACK.ago, timeout: timeout)
+    end
+  end
+  # rubocop: enable CodeReuse/ActiveRecord
+
   def scheduled_timed_out_builds
     Ci::Build.where(status: :scheduled).where( # rubocop: disable CodeReuse/ActiveRecord
       'ci_builds.scheduled_at IS NOT NULL AND ci_builds.scheduled_at < ?',
diff --git a/config/feature_flags/development/local_file_reviews.yml b/config/feature_flags/development/ci_new_query_for_pending_stuck_jobs.yml
similarity index 51%
rename from config/feature_flags/development/local_file_reviews.yml
rename to config/feature_flags/development/ci_new_query_for_pending_stuck_jobs.yml
index 4001f6ade729ceb8cc6b3a284e52d0f064dc3d88..5e63330d01d4dd14997ea0794b2d3466bc6b0141 100644
--- a/config/feature_flags/development/local_file_reviews.yml
+++ b/config/feature_flags/development/ci_new_query_for_pending_stuck_jobs.yml
@@ -1,8 +1,8 @@
 ---
-name: local_file_reviews
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/51513
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/296674
-milestone: '13.9'
+name: ci_new_query_for_pending_stuck_jobs
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68880
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/339322
+milestone: '14.3'
 type: development
-group: group::code review
-default_enabled: true
+group: group::pipeline execution
+default_enabled: false
diff --git a/config/feature_flags/development/runner_graphql_query.yml b/config/feature_flags/development/runner_graphql_query.yml
deleted file mode 100644
index b7af0a2bb228783cc0407313d1d25fe694647863..0000000000000000000000000000000000000000
--- a/config/feature_flags/development/runner_graphql_query.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: runner_graphql_query
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59763
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/328700
-type: development
-group: group::runner
-default_enabled: true
-milestone: '13.12'
diff --git a/doc/administration/geo/replication/datatypes.md b/doc/administration/geo/replication/datatypes.md
index 27a63493131627dc7e69539d36b309c7731ff1a6..94e47d9f1e1421d1e3adb3ff0f52c515a1aaa59e 100644
--- a/doc/administration/geo/replication/datatypes.md
+++ b/doc/administration/geo/replication/datatypes.md
@@ -47,6 +47,8 @@ verification methods:
 | Blobs    | Container registry _(object storage)_           | Geo with API/Managed/Docker API (*2*) | _Not implemented_      |
 | Blobs    | Package registry _(file system)_                | Geo with API                          | SHA256 checksum        |
 | Blobs    | Package registry _(object storage)_             | Geo with API/Managed (*2*)            | _Not implemented_      |
+| Blobs    | Infrastructure registry _(file system)_         | Geo with API                          | SHA256 checksum        |
+| Blobs    | Infrastructure registry _(object storage)_      | Geo with API/Managed (*2*)            | _Not implemented_      |
 | Blobs    | Versioned Terraform State _(file system)_       | Geo with API                          | SHA256 checksum        |
 | Blobs    | Versioned Terraform State _(object storage)_    | Geo with API/Managed (*2*)            | _Not implemented_      |
 | Blobs    | External Merge Request Diffs _(file system)_    | Geo with API                          | _Not implemented_      |
@@ -189,16 +191,9 @@ successfully, you must replicate their data using some other means.
 |[Job logs](../../job_logs.md)                                                                                  | **Yes** (10.4)                                                          | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/8923)                | Via Object Storage provider if supported. Native Geo support (Beta).          | Verified only on transfer or manually using [Integrity Check Rake Task](../../raketasks/check.md) on both sites and comparing the output between them. |
 |[Container Registry](../../packages/container_registry.md)                                                     | **Yes** (12.3)                                                          | No                                                                      | No                                                                            | Disabled by default. See [instructions](docker_registry.md) to enable. |
 |[Content in object storage (beta)](object_storage.md)                                                          | **Yes** (12.4)                                                          | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/13845)               | No                                                                            |       |
-|[Infrastructure Registry for Terraform Module](../../../user/packages/terraform_module_registry/index.md)                      | **Yes** (14.0)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (14.0)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
+|[Infrastructure Registry](../../../user/packages/infrastructure_registry/index.md)                             | **Yes** (14.0)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (14.0)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
 |[Project designs repository](../../../user/project/issues/design_management.md)                                | **Yes** (12.7)                                                          | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/32467)               | No | Designs also require replication of LFS objects and Uploads. |
-|[Package Registry for npm](../../../user/packages/npm_registry/index.md)                                       | **Yes** (13.2)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
-|[Package Registry for Maven](../../../user/packages/maven_repository/index.md)                                 | **Yes** (13.2)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
-|[Package Registry for Conan](../../../user/packages/conan_repository/index.md)                                 | **Yes** (13.2)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
-|[Package Registry for NuGet](../../../user/packages/nuget_repository/index.md)                                 | **Yes** (13.2)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
-|[Package Registry for PyPI](../../../user/packages/pypi_repository/index.md)                                   | **Yes** (13.2)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
-|[Package Registry for Composer](../../../user/packages/composer_repository/index.md)                           | **Yes** (13.2)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
-|[Package Registry for generic packages](../../../user/packages/generic_packages/index.md)                      | **Yes** (13.5)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
-|[Package Registry for Helm charts](../../../user/packages/helm_repository/index.md)                            | **Yes** (14.1)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (14.1)                                                          | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind [feature flag](../../feature_flags.md) `geo_package_file_replication`, enabled by default. |
+|[Package Registry](../../../user/packages/package_registry/index.md)                                           | **Yes** (13.2)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10)                                                         | Via Object Storage provider if supported. Native Geo support (Beta).          | Behind feature flag `geo_package_file_replication`, enabled by default. |
 |[Versioned Terraform State](../../terraform_state.md)                                                          | **Yes** (13.5)                                                          | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.12)                                                                     | Via Object Storage provider if supported. Native Geo support (Beta).          | Replication is behind the feature flag `geo_terraform_state_version_replication`, enabled by default. Verification was behind the feature flag `geo_terraform_state_version_verification`, which was removed in 14.0|
 |[External merge request diffs](../../merge_request_diffs.md)                                                   | **Yes** (13.5)                                                          | No                                                                      | Via Object Storage provider if supported. Native Geo support (Beta).          | Replication is behind the feature flag `geo_merge_request_diff_replication`, enabled by default. Verification is under development, behind the feature flag `geo_merge_request_diff_verification`, introduced in 14.0.|
 |[Versioned snippets](../../../user/snippets.md#versioned-snippets)                                             | [**Yes** (13.7)](https://gitlab.com/groups/gitlab-org/-/epics/2809)     | [**Yes** (14.2)](https://gitlab.com/groups/gitlab-org/-/epics/2810)            | No                                                                            | Verification was implemented behind the feature flag `geo_snippet_repository_verification` in 13.11, and the feature flag was removed in 14.2. |
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 2758e1ad2f7dbaad13685e3e0bbdc1f236595826..2daafbef2fb7ce29a8a23745c7d9a65cd6e40927 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -304,7 +304,7 @@ Returns [`QueryComplexity`](#querycomplexity).
 
 ### `Query.runner`
 
-Find a runner. Available only when feature flag `runner_graphql_query` is enabled. This flag is enabled by default.
+Find a runner.
 
 Returns [`CiRunner`](#cirunner).
 
@@ -341,7 +341,7 @@ Returns [`RunnerSetup`](#runnersetup).
 
 ### `Query.runners`
 
-Find runners visible to the current user. Available only when feature flag `runner_graphql_query` is enabled. This flag is enabled by default.
+Find runners visible to the current user.
 
 Returns [`CiRunnerConnection`](#cirunnerconnection).
 
@@ -3769,8 +3769,6 @@ Input type: `RepositionImageDiffNoteInput`
 
 ### `Mutation.runnerDelete`
 
-Available only when feature flag `runner_graphql_query` is enabled. This flag is enabled by default.
-
 Input type: `RunnerDeleteInput`
 
 #### Arguments
@@ -3789,8 +3787,6 @@ Input type: `RunnerDeleteInput`
 
 ### `Mutation.runnerUpdate`
 
-Available only when feature flag `runner_graphql_query` is enabled. This flag is enabled by default.
-
 Input type: `RunnerUpdateInput`
 
 #### Arguments
@@ -3819,8 +3815,6 @@ Input type: `RunnerUpdateInput`
 
 ### `Mutation.runnersRegistrationTokenReset`
 
-Available only when feature flag `runner_graphql_query` is enabled. This flag is enabled by default.
-
 Input type: `RunnersRegistrationTokenResetInput`
 
 #### Arguments
@@ -10039,7 +10033,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
 
 ##### `Group.runners`
 
-Find runners visible to the current user. Available only when feature flag `runner_graphql_query` is enabled. This flag is enabled by default.
+Find runners visible to the current user.
 
 Returns [`CiRunnerConnection`](#cirunnerconnection).
 
diff --git a/doc/update/index.md b/doc/update/index.md
index dc7be2597fe76c9e9397919c6b30186758c02067..2b32cd8a8ff5d84b2f4776acb751a692ee43431e 100644
--- a/doc/update/index.md
+++ b/doc/update/index.md
@@ -182,7 +182,7 @@ Find where your version sits in the upgrade path below, and upgrade GitLab
 accordingly, while also consulting the
 [version-specific upgrade instructions](#version-specific-upgrading-instructions):
 
-`8.11.Z` -> [`8.12.0`](#upgrades-from-versions-earlier-than-812) -> `8.17.7` -> `9.5.10` -> `10.8.7` -> [`11.11.8`](#1200) -> `12.0.12` -> [`12.1.17`](#1210) -> `12.10.14` -> `13.0.14` -> [`13.1.11`](#1310) -> [`13.8.3`](#1383) -> [latest `13.12.Z`](https://about.gitlab.com/releases/categories/releases/) -> [latest `14.0.Z`](#1400) -> [`14.1.Z`](#1410) -> [latest `14.Y.Z`](https://about.gitlab.com/releases/categories/releases/)
+`8.11.Z` -> [`8.12.0`](#upgrades-from-versions-earlier-than-812) -> `8.17.7` -> `9.5.10` -> `10.8.7` -> [`11.11.8`](#1200) -> `12.0.12` -> [`12.1.17`](#1210) -> `12.10.14` -> `13.0.14` -> [`13.1.11`](#1310) -> [`13.8.8`](#1388) -> [latest `13.12.Z`](https://about.gitlab.com/releases/categories/releases/) -> [latest `14.0.Z`](#1400) -> [`14.1.Z`](#1410) -> [latest `14.Y.Z`](https://about.gitlab.com/releases/categories/releases/)
 
 The following table, while not exhaustive, shows some examples of the supported
 upgrade paths.
@@ -190,7 +190,7 @@ upgrade paths.
 | Target version | Your version | Supported upgrade path                                                                               | Note                                                                                                                              |
 | -------------- | ------------ | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
 | `14.1.2`       | `13.9.2`     | `13.9.2` -> `13.12.9` -> `14.0.7` -> `14.1.2`                                                        | Two intermediate versions are required: `13.12` and `14.0`, then `14.1`.                                                          |
-| `13.12.10`     | `12.9.2`     | `12.9.2` -> `12.10.14` -> `13.0.14`  -> `13.1.11` -> `13.8.3` -> `13.12.10`                          | Four intermediate versions are required: `12.10`, `13.0`, `13.1` and `13.8.3`, then `13.12.10`.                               |
+| `13.12.10`     | `12.9.2`     | `12.9.2` -> `12.10.14` -> `13.0.14`  -> `13.1.11` -> `13.8.8` -> `13.12.10`                          | Four intermediate versions are required: `12.10`, `13.0`, `13.1` and `13.8.8`, then `13.12.10`.                               |
 | `13.2.10`      | `11.5.0`     | `11.5.0` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.10.14` -> `13.0.14` -> `13.1.11` -> `13.2.10` | Six intermediate versions are required: `11.11`, `12.0`, `12.1`, `12.10`, `13.0` and `13.1`, then `13.2.10`.                      |
 | `12.10.14`     | `11.3.4`     | `11.3.4` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.10.14`                                        | Three intermediate versions are required: `11.11`, `12.0` and `12.1`, then `12.10.14`.                                            |
 | `12.9.5`       | `10.4.5`     | `10.4.5` -> `10.8.7` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.9.5`                              | Four intermediate versions are required: `10.8`, `11.11`, `12.0` and `12.1`, then `12.9.5`.                                       |
@@ -480,9 +480,9 @@ DETAIL: trigger trigger_0d588df444c8 on table application_settings depends on co
 To work around this bug, follow the previous steps to complete the update.
 More details are available [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/324160).
 
-### 13.8.3
+### 13.8.8
 
-GitLab 13.8 includes a background migration to address [an issue with duplicate service records](https://gitlab.com/gitlab-org/gitlab/-/issues/290008). If duplicate services are present, this background migration must complete before a unique index is applied to the services table, which was [introduced in GitLab 13.9](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52563). Upgrades from GitLab 13.8 and earlier to later versions must include an intermediate upgrade to GitLab 13.8.3 and [must wait until the background migrations complete](#checking-for-background-migrations-before-upgrading) before proceeding.
+GitLab 13.8 includes a background migration to address [an issue with duplicate service records](https://gitlab.com/gitlab-org/gitlab/-/issues/290008). If duplicate services are present, this background migration must complete before a unique index is applied to the services table, which was [introduced in GitLab 13.9](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52563). Upgrades from GitLab 13.8 and earlier to later versions must include an intermediate upgrade to GitLab 13.8.8 and [must wait until the background migrations complete](#checking-for-background-migrations-before-upgrading) before proceeding.
 
 If duplicate services are still present, an upgrade to 13.9.x or later results in a failed upgrade with the following error:
 
diff --git a/doc/user/project/merge_requests/changes.md b/doc/user/project/merge_requests/changes.md
index c59d5973e21a75f3e7fe798163ed8528b0891f55..d348c00bdc2202c95446d4c75725ebb23a858a9c 100644
--- a/doc/user/project/merge_requests/changes.md
+++ b/doc/user/project/merge_requests/changes.md
@@ -97,11 +97,8 @@ a merge request. You can choose to hide or show whitespace changes:
 
 ## Mark files as viewed
 
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/51513) in GitLab 13.9.
-> - Deployed behind a feature flag, enabled by default.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-file-views). **(FREE SELF)**
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/51513) in GitLab 13.9 behind a feature flag, enabled by default.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/296674) in GitLab 14.3.
 
 When reviewing a merge request with many files multiple times, it may be useful to the reviewer
 to focus on new changes and ignore the files that they have already reviewed and don't want to
@@ -116,25 +113,6 @@ To mark a file as viewed:
 Once checked, the file remains marked for that reviewer unless there are newly introduced
 changes to its content or the checkbox is unchecked.
 
-### Enable or disable file views **(FREE SELF)**
-
-The file view feature is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
-can opt to enable it for your instance.
-
-To enable it:
-
-```ruby
-Feature.enable(:local_file_reviews)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:local_file_reviews)
-```
-
 ## Show merge request conflicts in diff
 
 > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/232484) in GitLab 13.5.
diff --git a/spec/frontend/diffs/components/diff_file_spec.js b/spec/frontend/diffs/components/diff_file_spec.js
index 3dec56f2fe3e358394389abcc5c6a41ac2c79bbd..feb7118744b1d60b9ef2f0bab3b42f034d352d9c 100644
--- a/spec/frontend/diffs/components/diff_file_spec.js
+++ b/spec/frontend/diffs/components/diff_file_spec.js
@@ -242,32 +242,20 @@ describe('DiffFile', () => {
       });
 
       it.each`
-        loggedIn | featureOn | bool
-        ${true}  | ${true}   | ${true}
-        ${false} | ${true}   | ${false}
-        ${true}  | ${false}  | ${false}
-        ${false} | ${false}  | ${false}
-      `(
-        'should be $bool when { userIsLoggedIn: $loggedIn, featureEnabled: $featureOn }',
-        ({ loggedIn, featureOn, bool }) => {
-          setLoggedIn(loggedIn);
-
-          ({ wrapper } = createComponent({
-            options: {
-              provide: {
-                glFeatures: {
-                  localFileReviews: featureOn,
-                },
-              },
-            },
-            props: {
-              file: store.state.diffs.diffFiles[0],
-            },
-          }));
+        loggedIn | bool
+        ${true}  | ${true}
+        ${false} | ${false}
+      `('should be $bool when { userIsLoggedIn: $loggedIn }', ({ loggedIn, bool }) => {
+        setLoggedIn(loggedIn);
+
+        ({ wrapper } = createComponent({
+          props: {
+            file: store.state.diffs.diffFiles[0],
+          },
+        }));
 
-          expect(wrapper.vm.showLocalFileReviews).toBe(bool);
-        },
-      );
+        expect(wrapper.vm.showLocalFileReviews).toBe(bool);
+      });
     });
   });
 
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index a951af4cc4f618b05406d66c9d44703ddaa8b52e..7134a387e651852985d4b19a0367163f2e9765e7 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -88,6 +88,15 @@ def create_status(**opts)
     end
   end
 
+  describe '.created_at_before' do
+    it 'finds the relevant records' do
+      status = create(:commit_status, created_at: 1.day.ago, project: project)
+      create(:commit_status, created_at: 1.day.since, project: project)
+
+      expect(described_class.created_at_before(Time.current)).to eq([status])
+    end
+  end
+
   describe '.updated_before' do
     let!(:lookback) { 5.days.ago }
     let!(:timeout) { 1.day.ago }