diff --git a/app/models/ci/bridge.rb b/app/models/ci/bridge.rb
index 662fb3cffa85be0610a65a5204b5f17e8c70cee1..22dcc7c18a0bfc925c7b3cac7ad8e8bde61bc4a0 100644
--- a/app/models/ci/bridge.rb
+++ b/app/models/ci/bridge.rb
@@ -19,11 +19,6 @@ class Bridge < Ci::Processable
     belongs_to :project
     belongs_to :trigger_request
 
-    # To be removed upon :ci_bridge_remove_sourced_pipelines feature flag removal
-    has_many :sourced_pipelines, class_name: "::Ci::Sources::Pipeline",
-                                 foreign_key: :source_job_id,
-                                 inverse_of: :source_bridge
-
     has_one :downstream_pipeline, through: :sourced_pipeline, source: :pipeline
 
     validates :ref, presence: true
@@ -89,20 +84,8 @@ def inherit_status_from_downstream!(pipeline)
       end
     end
 
-    def sourced_pipelines
-      if Feature.enabled?(:ci_bridge_remove_sourced_pipelines, project)
-        raise 'Ci::Bridge does not have sourced_pipelines association'
-      end
-
-      super
-    end
-
     def has_downstream_pipeline?
-      if Feature.enabled?(:ci_bridge_remove_sourced_pipelines, project)
-        sourced_pipeline.present?
-      else
-        sourced_pipelines.exists?
-      end
+      sourced_pipeline.present?
     end
 
     def downstream_pipeline_params
diff --git a/config/feature_flags/development/ci_bridge_remove_sourced_pipelines.yml b/config/feature_flags/development/ci_bridge_remove_sourced_pipelines.yml
deleted file mode 100644
index 503e676d4ab65d4ffa66cc355154d8975397a264..0000000000000000000000000000000000000000
--- a/config/feature_flags/development/ci_bridge_remove_sourced_pipelines.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: ci_bridge_remove_sourced_pipelines
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105708
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/384359
-milestone: '15.7'
-type: development
-group: group::pipeline authoring
-default_enabled: false
diff --git a/spec/models/ci/bridge_spec.rb b/spec/models/ci/bridge_spec.rb
index 169b00b9c7463e3929a23e2fc1ccef8c6348331a..e8102c2c1ea1e9f033fbf534e5bfd83c3c0749c0 100644
--- a/spec/models/ci/bridge_spec.rb
+++ b/spec/models/ci/bridge_spec.rb
@@ -21,8 +21,8 @@
     { trigger: { project: 'my/project', branch: 'master' } }
   end
 
-  it 'has many sourced pipelines' do
-    expect(bridge).to have_many(:sourced_pipelines)
+  it 'has one sourced pipeline' do
+    expect(bridge).to have_one(:sourced_pipeline)
   end
 
   it_behaves_like 'has ID tokens', :ci_bridge
@@ -34,24 +34,6 @@
     expect(bridge).to have_one(:downstream_pipeline)
   end
 
-  describe '#sourced_pipelines' do
-    subject { bridge.sourced_pipelines }
-
-    it 'raises error' do
-      expect { subject }.to raise_error RuntimeError, 'Ci::Bridge does not have sourced_pipelines association'
-    end
-
-    context 'when ci_bridge_remove_sourced_pipelines is disabled' do
-      before do
-        stub_feature_flags(ci_bridge_remove_sourced_pipelines: false)
-      end
-
-      it 'returns the sourced_pipelines association' do
-        expect(bridge.sourced_pipelines).to eq([])
-      end
-    end
-  end
-
   describe '#retryable?' do
     let(:bridge) { create(:ci_bridge, :success) }
 
diff --git a/spec/services/ci/create_downstream_pipeline_service_spec.rb b/spec/services/ci/create_downstream_pipeline_service_spec.rb
index bcdb2b4f79638c72720a89b34642e59118f7a50d..bac766f5736d6624e873fdabe0631e97e390f9b6 100644
--- a/spec/services/ci/create_downstream_pipeline_service_spec.rb
+++ b/spec/services/ci/create_downstream_pipeline_service_spec.rb
@@ -41,12 +41,6 @@
 
   subject { service.execute(bridge) }
 
-  shared_context 'when ci_bridge_remove_sourced_pipelines is disabled' do
-    before do
-      stub_feature_flags(ci_bridge_remove_sourced_pipelines: false)
-    end
-  end
-
   context 'when downstream project has not been found' do
     let(:trigger) do
       { trigger: { project: 'unknown/project' } }
@@ -128,19 +122,6 @@
       expect(pipeline.source_bridge).to be_a ::Ci::Bridge
     end
 
-    context 'when ci_bridge_remove_sourced_pipelines is disabled' do
-      include_context 'when ci_bridge_remove_sourced_pipelines is disabled'
-
-      it 'creates a new pipeline in a downstream project' do
-        expect(pipeline.user).to eq bridge.user
-        expect(pipeline.project).to eq downstream_project
-        expect(bridge.sourced_pipelines.first.pipeline).to eq pipeline
-        expect(pipeline.triggered_by_pipeline).to eq upstream_pipeline
-        expect(pipeline.source_bridge).to eq bridge
-        expect(pipeline.source_bridge).to be_a ::Ci::Bridge
-      end
-    end
-
     it_behaves_like 'logs downstream pipeline creation' do
       let(:downstream_pipeline) { pipeline }
       let(:expected_root_pipeline) { upstream_pipeline }
@@ -179,31 +160,6 @@
         expect(subject).to be_error
         expect(subject.message).to eq("Already has a downstream pipeline")
       end
-
-      context 'when ci_bridge_remove_sourced_pipelines is disabled' do
-        include_context 'when ci_bridge_remove_sourced_pipelines is disabled'
-
-        before do
-          bridge.sourced_pipelines.create!(
-            source_pipeline: bridge.pipeline,
-            source_project: bridge.project,
-            project: bridge.project,
-            pipeline: create(:ci_pipeline, project: bridge.project)
-          )
-        end
-
-        it 'logs an error and exits' do
-          expect(Gitlab::ErrorTracking)
-            .to receive(:track_exception)
-            .with(
-              instance_of(described_class::DuplicateDownstreamPipelineError),
-              bridge_id: bridge.id, project_id: bridge.project.id)
-            .and_call_original
-          expect(Ci::CreatePipelineService).not_to receive(:new)
-          expect(subject).to be_error
-          expect(subject.message).to eq("Already has a downstream pipeline")
-        end
-      end
     end
 
     context 'when target ref is not specified' do
@@ -237,19 +193,6 @@
         expect(pipeline.source_bridge).to be_a ::Ci::Bridge
       end
 
-      context 'when ci_bridge_remove_sourced_pipelines is disabled' do
-        include_context 'when ci_bridge_remove_sourced_pipelines is disabled'
-
-        it 'creates a new pipeline in a downstream project' do
-          expect(pipeline.user).to eq bridge.user
-          expect(pipeline.project).to eq downstream_project
-          expect(bridge.sourced_pipelines.first.pipeline).to eq pipeline
-          expect(pipeline.triggered_by_pipeline).to eq upstream_pipeline
-          expect(pipeline.source_bridge).to eq bridge
-          expect(pipeline.source_bridge).to be_a ::Ci::Bridge
-        end
-      end
-
       it 'updates the bridge status when downstream pipeline gets processed' do
         expect(pipeline.reload).to be_failed
         expect(bridge.reload).to be_failed
@@ -301,20 +244,6 @@
             expect(pipeline.source_bridge).to be_a ::Ci::Bridge
           end
 
-          context 'when ci_bridge_remove_sourced_pipelines is disabled' do
-            include_context 'when ci_bridge_remove_sourced_pipelines is disabled'
-
-            it 'creates a child pipeline in the same project' do
-              expect(pipeline.builds.map(&:name)).to match_array(%w[rspec echo])
-              expect(pipeline.user).to eq bridge.user
-              expect(pipeline.project).to eq bridge.project
-              expect(bridge.sourced_pipelines.first.pipeline).to eq pipeline
-              expect(pipeline.triggered_by_pipeline).to eq upstream_pipeline
-              expect(pipeline.source_bridge).to eq bridge
-              expect(pipeline.source_bridge).to be_a ::Ci::Bridge
-            end
-          end
-
           it 'updates bridge status when downstream pipeline gets processed' do
             expect(pipeline.reload).to be_created
             expect(bridge.reload).to be_success