diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index 1e02703cbe78ee94f8f11d7864df936b068ad297..c837583dd45a40025f0bd4a585d46d73f2405daf 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -5,7 +5,6 @@ import { createAlert } from '~/alert';
 import { TYPE_MERGE_REQUEST } from '~/issues/constants';
 import toast from '~/vue_shared/plugins/global_toast';
 import { __ } from '~/locale';
-import eventHub from '~/vue_merge_request_widget/event_hub';
 import { loadingIconForLegacyJS } from '~/loading_icon_for_legacy_js';
 import axios from './lib/utils/axios_utils';
 import { addDelimiter } from './lib/utils/text_utility';
@@ -146,10 +145,6 @@ MergeRequest.decreaseCounter = function (by = 1) {
 };
 
 MergeRequest.toggleDraftStatus = function (title, isReady) {
-  if (!window.gon?.features?.realtimeMrStatusChange) {
-    eventHub.$emit('MRWidgetUpdateRequested');
-  }
-
   if (isReady) {
     toast(__('Marked as ready. Merging is now allowed.'));
   } else {
diff --git a/app/assets/javascripts/merge_requests/components/sticky_header.vue b/app/assets/javascripts/merge_requests/components/sticky_header.vue
index a66490b5f7512fa6c2be2e0673c435956de08a5d..c6e8a9ea582874e33b34b410994f8937b4089784 100644
--- a/app/assets/javascripts/merge_requests/components/sticky_header.vue
+++ b/app/assets/javascripts/merge_requests/components/sticky_header.vue
@@ -25,7 +25,7 @@ export default {
           };
         },
         skip() {
-          return !this.issuableId || !this.glFeatures.realtimeMrStatusChange;
+          return !this.issuableId;
         },
         result({ data: { mergeRequestMergeStatusUpdated } }) {
           if (mergeRequestMergeStatusUpdated) {
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue b/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue
index ad78de8728f5dd40f7bc6c5731f7c87713d8f741..95fa01c23f14a5373c5b1e93cd8c84ef732139cb 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue
@@ -7,7 +7,6 @@ import { HTTP_STATUS_UNAUTHORIZED } from '~/lib/utils/http_status';
 import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
 import { s__, __, sprintf } from '~/locale';
 import { getIdFromGraphQLId } from '~/graphql_shared/utils';
-import eventHub from '../../event_hub';
 import approvalsMixin from '../../mixins/approvals';
 import StateContainer from '../state_container.vue';
 import { INVALID_RULES_DOCS_PATH } from '../../constants';
@@ -215,11 +214,6 @@ export default {
       this.clearError();
       return serviceFn()
         .then(() => {
-          if (!window.gon?.features?.realtimeMrStatusChange) {
-            eventHub.$emit('MRWidgetUpdateRequested');
-            eventHub.$emit('ApprovalUpdated');
-          }
-
           // TODO: Remove this line when we move to Apollo subscriptions
           this.$apollo.queries.approvals.refetch();
         })
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue
index fad0830388e47e5573f5cdedfe0bf64da7896f96..52cdafd4717d5549eb96098620c0f7df52f5878d 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue
@@ -97,7 +97,7 @@ export default {
           return readyToMergeSubscription;
         },
         skip() {
-          return !this.mr?.id || this.loading || !window.gon?.features?.realtimeMrStatusChange;
+          return !this.mr?.id || this.loading;
         },
         variables() {
           return {
diff --git a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue
index e9efc8e75be7794a58749ad38e63e5b5f250223f..ab899436accf611f79c324e24282a1bdcb0b5475 100644
--- a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue
@@ -134,7 +134,7 @@ export default {
           return getStateSubscription;
         },
         skip() {
-          return !this.mr?.id || this.loading || !window.gon?.features?.realtimeMrStatusChange;
+          return !this.mr?.id || this.loading;
         },
         variables() {
           return {
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 6558dc10994adaa694b477c04d0b45937b63a3e5..4e91392692f9cdf6da6105d33aafb330a15e6360 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -45,7 +45,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
     push_frontend_feature_flag(:deprecate_vulnerabilities_feedback, @project)
     push_frontend_feature_flag(:moved_mr_sidebar, project)
     push_frontend_feature_flag(:mr_experience_survey, project)
-    push_frontend_feature_flag(:realtime_mr_status_change, project)
     push_frontend_feature_flag(:saved_replies, current_user)
     push_frontend_feature_flag(:code_quality_inline_drawer, project)
     push_frontend_feature_flag(:auto_merge_labels_mr_widget, project)
diff --git a/app/graphql/graphql_triggers.rb b/app/graphql/graphql_triggers.rb
index 7abd1258958b662fb76a0615a275540d09ff300c..527eb50b644e97897ffc87a75ae43bd7f3555edb 100644
--- a/app/graphql/graphql_triggers.rb
+++ b/app/graphql/graphql_triggers.rb
@@ -48,8 +48,6 @@ def self.merge_request_reviewers_updated(merge_request)
   end
 
   def self.merge_request_merge_status_updated(merge_request)
-    return unless Feature.enabled?(:realtime_mr_status_change, merge_request.project)
-
     GitlabSchema.subscriptions.trigger(
       :merge_request_merge_status_updated, { issuable_id: merge_request.to_gid }, merge_request
     )
diff --git a/config/feature_flags/development/realtime_mr_status_change.yml b/config/feature_flags/development/realtime_mr_status_change.yml
deleted file mode 100644
index a922ba7d12a396a37623192e6526252f72af96c1..0000000000000000000000000000000000000000
--- a/config/feature_flags/development/realtime_mr_status_change.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: realtime_mr_status_change
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/103011
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/385077
-milestone: '15.7'
-type: development
-group: group::code review
-default_enabled: true
diff --git a/ee/spec/frontend/vue_merge_request_widget/ee_mr_widget_options_spec.js b/ee/spec/frontend/vue_merge_request_widget/ee_mr_widget_options_spec.js
index 1c3dbb21e8d24f1738237d795137bc3581cb89d0..a09a790615a50a6a34ae286255e5dc39e39fa866 100644
--- a/ee/spec/frontend/vue_merge_request_widget/ee_mr_widget_options_spec.js
+++ b/ee/spec/frontend/vue_merge_request_widget/ee_mr_widget_options_spec.js
@@ -52,6 +52,8 @@ import _Deployment from '~/vue_merge_request_widget/components/deployment/deploy
 import securityReportMergeRequestDownloadPathsQuery from '~/vue_shared/security_reports/graphql/queries/security_report_merge_request_download_paths.query.graphql';
 
 import getStateQuery from '~/vue_merge_request_widget/queries/get_state.query.graphql';
+import getStateSubscription from '~/vue_merge_request_widget/queries/get_state.subscription.graphql';
+import readyToMergeSubscription from '~/vue_merge_request_widget/queries/states/ready_to_merge.subscription.graphql';
 import readyToMergeQuery from 'ee_else_ce/vue_merge_request_widget/queries/states/ready_to_merge.query.graphql';
 import mergeQuery from '~/vue_merge_request_widget/queries/states/new_ready_to_merge.query.graphql';
 import approvalsQuery from 'ee_else_ce/vue_merge_request_widget/components/approvals/queries/approvals.query.graphql';
@@ -115,6 +117,8 @@ describe('ee merge request widget options', () => {
           return newSub;
         },
       ],
+      [getStateSubscription, () => createMockApolloSubscription()],
+      [readyToMergeSubscription, () => createMockApolloSubscription()],
     ];
     const apolloProvider = createMockApollo(queryHandlers);
 
diff --git a/spec/frontend/vue_merge_request_widget/components/approvals/approvals_spec.js b/spec/frontend/vue_merge_request_widget/components/approvals/approvals_spec.js
index 724f9ea0346a1aade6650a3e64f24915c30d1724..2aed037be6f0fd659a74f44abd6090f88a04bb8b 100644
--- a/spec/frontend/vue_merge_request_widget/components/approvals/approvals_spec.js
+++ b/spec/frontend/vue_merge_request_widget/components/approvals/approvals_spec.js
@@ -243,10 +243,6 @@ describe('MRWidget approvals', () => {
           it('calls service approve', () => {
             expect(service.approveMergeRequest).toHaveBeenCalled();
           });
-
-          it('emits to eventHub', () => {
-            expect(eventHub.$emit).toHaveBeenCalledWith('MRWidgetUpdateRequested');
-          });
         });
 
         describe('and error', () => {
@@ -297,10 +293,6 @@ describe('MRWidget approvals', () => {
           it('calls service unapprove', () => {
             expect(service.unapproveMergeRequest).toHaveBeenCalled();
           });
-
-          it('emits to eventHub', () => {
-            expect(eventHub.$emit).toHaveBeenCalledWith('MRWidgetUpdateRequested');
-          });
         });
 
         describe('and error', () => {
diff --git a/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js b/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js
index daa45a9e876b585af452fd459fb7919dabcb33e3..db97a93599310f05f834c2c2288d6bce5eb61c01 100644
--- a/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js
+++ b/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js
@@ -33,6 +33,7 @@ import StatusIcon from '~/vue_merge_request_widget/components/extensions/status_
 import securityReportMergeRequestDownloadPathsQuery from '~/vue_shared/security_reports/graphql/queries/security_report_merge_request_download_paths.query.graphql';
 import getStateQuery from '~/vue_merge_request_widget/queries/get_state.query.graphql';
 import getStateSubscription from '~/vue_merge_request_widget/queries/get_state.subscription.graphql';
+import readyToMergeSubscription from '~/vue_merge_request_widget/queries/states/ready_to_merge.subscription.graphql';
 import readyToMergeQuery from 'ee_else_ce/vue_merge_request_widget/queries/states/ready_to_merge.query.graphql';
 import approvalsQuery from 'ee_else_ce/vue_merge_request_widget/components/approvals/queries/approvals.query.graphql';
 import approvedBySubscription from 'ee_else_ce/vue_merge_request_widget/components/approvals/queries/approvals.subscription.graphql';
@@ -72,6 +73,7 @@ describe('MrWidgetOptions', () => {
   let queryResponse;
   let wrapper;
   let mock;
+  let stateSubscription;
 
   const COLLABORATION_MESSAGE = 'Members who can merge are allowed to add commits';
   const findApprovalsWidget = () => wrapper.findComponent(Approvals);
@@ -117,6 +119,7 @@ describe('MrWidgetOptions', () => {
       },
     };
     stateQueryHandler = jest.fn().mockResolvedValue(queryResponse);
+    stateSubscription = createMockApolloSubscription();
 
     const mounting = fullMount ? mount : shallowMount;
     const queryHandlers = [
@@ -137,6 +140,8 @@ describe('MrWidgetOptions', () => {
     ];
     const subscriptionHandlers = [
       [approvedBySubscription, () => mockedApprovalsSubscription],
+      [getStateSubscription, () => stateSubscription],
+      [readyToMergeSubscription, () => createMockApolloSubscription()],
       ...(options.apolloSubscriptions || []),
     ];
     const apolloProvider = createMockApollo(queryHandlers);
@@ -1312,11 +1317,8 @@ describe('MrWidgetOptions', () => {
     });
 
     describe('when the MR is updated by observing its status', () => {
-      let stateSubscription;
-
       beforeEach(() => {
         window.gon.features.realtimeMrStatusChange = true;
-        stateSubscription = createMockApolloSubscription();
       });
 
       it("shows the Preparing widget when the MR reports it's not ready yet", async () => {
@@ -1326,9 +1328,7 @@ describe('MrWidgetOptions', () => {
             state: 'opened',
             detailedMergeStatus: 'PREPARING',
           },
-          {
-            apolloSubscriptions: [[getStateSubscription, () => stateSubscription]],
-          },
+          {},
           {},
           false,
         );
@@ -1343,9 +1343,7 @@ describe('MrWidgetOptions', () => {
             state: 'opened',
             detailedMergeStatus: 'PREPARING',
           },
-          {
-            apolloSubscriptions: [[getStateSubscription, () => stateSubscription]],
-          },
+          {},
           {},
           false,
         );
diff --git a/spec/graphql/graphql_triggers_spec.rb b/spec/graphql/graphql_triggers_spec.rb
index f59ce805fcda237273e4a4b651f0ac1bd48aeac5..864818351a119dc872473fb7a9d5aa9af7544de4 100644
--- a/spec/graphql/graphql_triggers_spec.rb
+++ b/spec/graphql/graphql_triggers_spec.rb
@@ -116,20 +116,6 @@
 
       GraphqlTriggers.merge_request_merge_status_updated(merge_request)
     end
-
-    context 'when realtime_mr_status_change feature flag is disabled' do
-      before do
-        stub_feature_flags(realtime_mr_status_change: false)
-      end
-
-      it 'does not trigger realtime_mr_status_change subscription' do
-        merge_request = build_stubbed(:merge_request)
-
-        expect(GitlabSchema.subscriptions).not_to receive(:trigger)
-
-        GraphqlTriggers.merge_request_merge_status_updated(merge_request)
-      end
-    end
   end
 
   describe '.merge_request_approval_state_updated' do