diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 4498e08d754d3424c7bd7db38d970772cbb959dd..ee9c2501bfc407ff5e8d1e4bc76addbe9c6c8647 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -205,13 +205,8 @@ def group_name
     # 'rspec:linux: 1/10' => 'rspec:linux'
     common_name = name.to_s.gsub(%r{\d+[\s:\/\\]+\d+\s*}, '')
 
-    if ::Gitlab::Ci::Features.one_dimensional_matrix_enabled?
-      # 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux'
-      common_name.gsub!(%r{: \[.*\]\s*\z}, '')
-    else
-      # 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux: [aws]'
-      common_name.gsub!(%r{: \[.*, .*\]\s*\z}, '')
-    end
+    # 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux'
+    common_name.gsub!(%r{: \[.*\]\s*\z}, '')
 
     common_name.strip!
     common_name
diff --git a/config/feature_flags/development/one_dimensional_matrix.yml b/config/feature_flags/development/one_dimensional_matrix.yml
deleted file mode 100644
index 1db16474d3872073b68d80495fe9f7953f4d2ef9..0000000000000000000000000000000000000000
--- a/config/feature_flags/development/one_dimensional_matrix.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-name: one_dimensional_matrix
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42170
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/256062
-type: development
-group: group::pipeline authoring
-default_enabled: true
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 2c8f0bbfd337fdf3fdad0c918574d5c4d2a21016..26ac8159a0914883f72b1a66588fe36f711138e4 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -3574,9 +3574,6 @@ There can be from 2 to 50 jobs.
 
 [In GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/26362) and later,
 you can have one-dimensional matrices with a single job.
-The ability to have one-dimensional matrices is [deployed behind a feature flag](../../user/feature_flags.md),
-enabled by default. It's enabled on GitLab.com. For self-managed GitLab instances,
-administrators can opt to disable it by [disabling the `one_dimensional_matrix:` feature flag](../../administration/feature_flags.md). **(CORE ONLY)**
 
 Every job gets the same `CI_NODE_TOTAL` [environment variable](../variables/README.md#predefined-environment-variables) value, and a unique `CI_NODE_INDEX` value.
 
diff --git a/lib/gitlab/ci/config/entry/product/variables.rb b/lib/gitlab/ci/config/entry/product/variables.rb
index 2481989060ef2b4e63fa39de95ef192a28ac7579..aa34cfb3acc1fbc4de89dad09527dc82d2f33de8 100644
--- a/lib/gitlab/ci/config/entry/product/variables.rb
+++ b/lib/gitlab/ci/config/entry/product/variables.rb
@@ -14,7 +14,7 @@ class Variables < ::Gitlab::Config::Entry::Node
             validations do
               validates :config, variables: { array_values: true }
               validates :config, length: {
-                minimum: :minimum,
+                minimum: 1,
                 too_short: 'requires at least %{count} items'
               }
             end
@@ -28,10 +28,6 @@ def value
                 .map { |key, value| [key.to_s, Array(value).map(&:to_s)] }
                 .to_h
             end
-
-            def minimum
-              ::Gitlab::Ci::Features.one_dimensional_matrix_enabled? ? 1 : 2
-            end
           end
         end
       end
diff --git a/lib/gitlab/ci/features.rb b/lib/gitlab/ci/features.rb
index 1b58e3ec71a46dd010740b699afae69c7d47ee76..1734f3c9c2b8c83f4a9074e1e917bee470010fa2 100644
--- a/lib/gitlab/ci/features.rb
+++ b/lib/gitlab/ci/features.rb
@@ -59,10 +59,6 @@ def self.log_invalid_trace_chunks?(project)
         ::Feature.enabled?(:ci_trace_log_invalid_chunks, project, type: :ops, default_enabled: false)
       end
 
-      def self.one_dimensional_matrix_enabled?
-        ::Feature.enabled?(:one_dimensional_matrix, default_enabled: true)
-      end
-
       def self.manual_bridges_enabled?(project)
         ::Feature.enabled?(:ci_manual_bridges, project, default_enabled: true)
       end
diff --git a/spec/lib/gitlab/ci/config/entry/product/matrix_spec.rb b/spec/lib/gitlab/ci/config/entry/product/matrix_spec.rb
index 3388ae0af2f13ba9f7b6e330e0bb1bd24128c771..ff44a235ea5993c09552a385bff9c58086db4c11 100644
--- a/spec/lib/gitlab/ci/config/entry/product/matrix_spec.rb
+++ b/spec/lib/gitlab/ci/config/entry/product/matrix_spec.rb
@@ -46,98 +46,53 @@
       end
     end
 
-    context 'with one_dimensional_matrix feature flag enabled' do
-      before do
-        stub_feature_flags(one_dimensional_matrix: true)
-        matrix.compose!
+    context 'when entry config has only one variable with multiple values' do
+      let(:config) do
+        [
+          {
+            'VAR_1' => %w[build test]
+          }
+        ]
       end
 
-      context 'when entry config has only one variable with multiple values' do
-        let(:config) do
-          [
-            {
-              'VAR_1' => %w[build test]
-            }
-          ]
-        end
-
-        describe '#valid?' do
-          it { is_expected.to be_valid }
-        end
+      describe '#valid?' do
+        it { is_expected.to be_valid }
+      end
 
-        describe '#errors' do
-          it 'returns no errors' do
-            expect(matrix.errors)
-              .to be_empty
-          end
+      describe '#errors' do
+        it 'returns no errors' do
+          expect(matrix.errors)
+            .to be_empty
         end
+      end
 
-        describe '#value' do
-          before do
-            matrix.compose!
-          end
-
-          it 'returns the value without raising an error' do
-            expect(matrix.value).to eq([{ 'VAR_1' => %w[build test] }])
-          end
+      describe '#value' do
+        before do
+          matrix.compose!
         end
 
-        context 'when entry config has only one variable with one value' do
-          let(:config) do
-            [
-              {
-                'VAR_1' => %w[test]
-              }
-            ]
-          end
-
-          describe '#valid?' do
-            it { is_expected.to be_valid }
-          end
-
-          describe '#errors' do
-            it 'returns no errors' do
-              expect(matrix.errors)
-                .to be_empty
-            end
-          end
-
-          describe '#value' do
-            before do
-              matrix.compose!
-            end
-
-            it 'returns the value without raising an error' do
-              expect(matrix.value).to eq([{ 'VAR_1' => %w[test] }])
-            end
-          end
+        it 'returns the value without raising an error' do
+          expect(matrix.value).to eq([{ 'VAR_1' => %w[build test] }])
         end
       end
-    end
 
-    context 'with one_dimensional_matrix feature flag disabled' do
-      before do
-        stub_feature_flags(one_dimensional_matrix: false)
-        matrix.compose!
-      end
-
-      context 'when entry config has only one variable with multiple values' do
+      context 'when entry config has only one variable with one value' do
         let(:config) do
           [
             {
-              'VAR_1' => %w[build test]
+              'VAR_1' => %w[test]
             }
           ]
         end
 
         describe '#valid?' do
-          it { is_expected.not_to be_valid }
+          it { is_expected.to be_valid }
         end
 
         describe '#errors' do
-          it 'returns error about too many jobs' do
+          it 'returns no errors' do
             expect(matrix.errors)
-              .to include('variables config requires at least 2 items')
+              .to be_empty
           end
         end
 
@@ -147,38 +102,7 @@
           end
 
           it 'returns the value without raising an error' do
-            expect(matrix.value).to eq([{ 'VAR_1' => %w[build test] }])
-          end
-        end
-
-        context 'when entry config has only one variable with one value' do
-          let(:config) do
-            [
-              {
-                'VAR_1' => %w[test]
-              }
-            ]
-          end
-
-          describe '#valid?' do
-            it { is_expected.not_to be_valid }
-          end
-
-          describe '#errors' do
-            it 'returns no errors' do
-              expect(matrix.errors)
-                .to include('variables config requires at least 2 items')
-            end
-          end
-
-          describe '#value' do
-            before do
-              matrix.compose!
-            end
-
-            it 'returns the value without raising an error' do
-              expect(matrix.value).to eq([{ 'VAR_1' => %w[test] }])
-            end
+            expect(matrix.value).to eq([{ 'VAR_1' => %w[test] }])
           end
         end
       end
diff --git a/spec/lib/gitlab/ci/config/entry/product/variables_spec.rb b/spec/lib/gitlab/ci/config/entry/product/variables_spec.rb
index 407efb438b5a93c80a42bde41e3b4dc95797ff2a..5e920ce34e099b00bc13212236695451898ee72d 100644
--- a/spec/lib/gitlab/ci/config/entry/product/variables_spec.rb
+++ b/spec/lib/gitlab/ci/config/entry/product/variables_spec.rb
@@ -1,7 +1,6 @@
 # frozen_string_literal: true
 
-# After Feature one_dimensional_matrix is removed, this can be changed back to fast_spec_helper
-require 'spec_helper'
+require 'fast_spec_helper'
 require_dependency 'active_model'
 
 RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do
@@ -46,70 +45,18 @@
       end
     end
 
-    context 'with one_dimensional_matrix feature flag enabled' do
-      context 'with only one variable' do
-        before do
-          stub_feature_flags(one_dimensional_matrix: true)
-        end
-        let(:config) { { VAR: 'test' } }
-
-        describe '#valid?' do
-          it 'is valid' do
-            expect(entry).to be_valid
-          end
-        end
+    context 'with only one variable' do
+      let(:config) { { VAR: 'test' } }
 
-        describe '#errors' do
-          it 'does not append errors' do
-            expect(entry.errors).to be_empty
-          end
+      describe '#valid?' do
+        it 'is valid' do
+          expect(entry).to be_valid
         end
       end
-    end
-
-    context 'with one_dimensional_matrix feature flag disabled' do
-      context 'when entry value is not correct' do
-        before do
-          stub_feature_flags(one_dimensional_matrix: false)
-        end
-        shared_examples 'invalid variables' do |message|
-          describe '#errors' do
-            it 'saves errors' do
-              expect(entry.errors).to include(message)
-            end
-          end
-
-          describe '#valid?' do
-            it 'is not valid' do
-              expect(entry).not_to be_valid
-            end
-          end
-        end
-
-        context 'with array' do
-          let(:config) { [:VAR, 'test'] }
 
-          it_behaves_like 'invalid variables', /should be a hash of key value pairs/
-        end
-
-        context 'with empty array' do
-          let(:config) { { VAR: 'test', VAR2: [] } }
-
-          it_behaves_like 'invalid variables', /should be a hash of key value pairs/
-        end
-
-        context 'with nested array' do
-          let(:config) { { VAR: 'test', VAR2: [1, [2]] } }
-
-          it_behaves_like 'invalid variables', /should be a hash of key value pairs/
-        end
-
-        context 'with one_dimensional_matrix feature flag disabled' do
-          context 'with only one variable' do
-            let(:config) { { VAR: 'test' } }
-
-            it_behaves_like 'invalid variables', /variables config requires at least 2 items/
-          end
+      describe '#errors' do
+        it 'does not append errors' do
+          expect(entry.errors).to be_empty
         end
       end
     end
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index 877188097fde6b2c1f5ec40c758100e867edab08..9824eb91bc7a6fe67be39e302e49385b2a28734a 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -493,104 +493,49 @@ def create_status(**opts)
     end
   end
 
-  context 'with the one_dimensional_matrix feature flag disabled' do
-    describe '#group_name' do
-      before do
-        stub_feature_flags(one_dimensional_matrix: false)
-      end
-
-      let(:commit_status) do
-        build(:commit_status, pipeline: pipeline, stage: 'test')
-      end
-
-      subject { commit_status.group_name }
-
-      tests = {
-        'rspec:windows' => 'rspec:windows',
-        'rspec:windows 0' => 'rspec:windows 0',
-        'rspec:windows 0 test' => 'rspec:windows 0 test',
-        'rspec:windows 0 1' => 'rspec:windows',
-        'rspec:windows 0 1 name' => 'rspec:windows name',
-        'rspec:windows 0/1' => 'rspec:windows',
-        'rspec:windows 0/1 name' => 'rspec:windows name',
-        'rspec:windows 0:1' => 'rspec:windows',
-        'rspec:windows 0:1 name' => 'rspec:windows name',
-        'rspec:windows 10000 20000' => 'rspec:windows',
-        'rspec:windows 0 : / 1' => 'rspec:windows',
-        'rspec:windows 0 : / 1 name' => 'rspec:windows name',
-        '0 1 name ruby' => 'name ruby',
-        '0 :/ 1 name ruby' => 'name ruby',
-        'rspec: [aws]' => 'rspec: [aws]',
-        'rspec: [aws] 0/1' => 'rspec: [aws]',
-        'rspec: [aws, max memory]' => 'rspec',
-        'rspec:linux: [aws, max memory, data]' => 'rspec:linux',
-        'rspec: [inception: [something, other thing], value]' => 'rspec',
-        'rspec:windows 0/1: [name, other]' => 'rspec:windows',
-        'rspec:windows: [name, other] 0/1' => 'rspec:windows',
-        'rspec:windows: [name, 0/1] 0/1' => 'rspec:windows',
-        'rspec:windows: [0/1, name]' => 'rspec:windows',
-        'rspec:windows: [, ]' => 'rspec:windows',
-        'rspec:windows: [name]' => 'rspec:windows: [name]',
-        'rspec:windows: [name,other]' => 'rspec:windows: [name,other]'
-      }
-
-      tests.each do |name, group_name|
-        it "'#{name}' puts in '#{group_name}'" do
-          commit_status.name = name
-
-          is_expected.to eq(group_name)
-        end
-      end
-    end
-  end
+  describe '#group_name' do
+    using RSpec::Parameterized::TableSyntax
 
-  context 'with one_dimensional_matrix feature flag enabled' do
-    describe '#group_name' do
-      before do
-        stub_feature_flags(one_dimensional_matrix: true)
-      end
+    let(:commit_status) do
+      build(:commit_status, pipeline: pipeline, stage: 'test')
+    end
+
+    subject { commit_status.group_name }
+
+    where(:name, :group_name) do
+      'rspec:windows'                                       | 'rspec:windows'
+      'rspec:windows 0'                                     | 'rspec:windows 0'
+      'rspec:windows 0 test'                                | 'rspec:windows 0 test'
+      'rspec:windows 0 1'                                   | 'rspec:windows'
+      'rspec:windows 0 1 name'                              | 'rspec:windows name'
+      'rspec:windows 0/1'                                   | 'rspec:windows'
+      'rspec:windows 0/1 name'                              | 'rspec:windows name'
+      'rspec:windows 0:1'                                   | 'rspec:windows'
+      'rspec:windows 0:1 name'                              | 'rspec:windows name'
+      'rspec:windows 10000 20000'                           | 'rspec:windows'
+      'rspec:windows 0 : / 1'                               | 'rspec:windows'
+      'rspec:windows 0 : / 1 name'                          | 'rspec:windows name'
+      '0 1 name ruby'                                       | 'name ruby'
+      '0 :/ 1 name ruby'                                    | 'name ruby'
+      'rspec: [aws]'                                        | 'rspec'
+      'rspec: [aws] 0/1'                                    | 'rspec'
+      'rspec: [aws, max memory]'                            | 'rspec'
+      'rspec:linux: [aws, max memory, data]'                | 'rspec:linux'
+      'rspec: [inception: [something, other thing], value]' | 'rspec'
+      'rspec:windows 0/1: [name, other]'                    | 'rspec:windows'
+      'rspec:windows: [name, other] 0/1'                    | 'rspec:windows'
+      'rspec:windows: [name, 0/1] 0/1'                      | 'rspec:windows'
+      'rspec:windows: [0/1, name]'                          | 'rspec:windows'
+      'rspec:windows: [, ]'                                 | 'rspec:windows'
+      'rspec:windows: [name]'                               | 'rspec:windows'
+      'rspec:windows: [name,other]'                         | 'rspec:windows'
+    end
+
+    with_them do
+      it "#{params[:name]} puts in #{params[:group_name]}" do
+        commit_status.name = name
 
-      let(:commit_status) do
-        build(:commit_status, pipeline: pipeline, stage: 'test')
-      end
-
-      subject { commit_status.group_name }
-
-      tests = {
-        'rspec:windows' => 'rspec:windows',
-        'rspec:windows 0' => 'rspec:windows 0',
-        'rspec:windows 0 test' => 'rspec:windows 0 test',
-        'rspec:windows 0 1' => 'rspec:windows',
-        'rspec:windows 0 1 name' => 'rspec:windows name',
-        'rspec:windows 0/1' => 'rspec:windows',
-        'rspec:windows 0/1 name' => 'rspec:windows name',
-        'rspec:windows 0:1' => 'rspec:windows',
-        'rspec:windows 0:1 name' => 'rspec:windows name',
-        'rspec:windows 10000 20000' => 'rspec:windows',
-        'rspec:windows 0 : / 1' => 'rspec:windows',
-        'rspec:windows 0 : / 1 name' => 'rspec:windows name',
-        '0 1 name ruby' => 'name ruby',
-        '0 :/ 1 name ruby' => 'name ruby',
-        'rspec: [aws]' => 'rspec',
-        'rspec: [aws] 0/1' => 'rspec',
-        'rspec: [aws, max memory]' => 'rspec',
-        'rspec:linux: [aws, max memory, data]' => 'rspec:linux',
-        'rspec: [inception: [something, other thing], value]' => 'rspec',
-        'rspec:windows 0/1: [name, other]' => 'rspec:windows',
-        'rspec:windows: [name, other] 0/1' => 'rspec:windows',
-        'rspec:windows: [name, 0/1] 0/1' => 'rspec:windows',
-        'rspec:windows: [0/1, name]' => 'rspec:windows',
-        'rspec:windows: [, ]' => 'rspec:windows',
-        'rspec:windows: [name]' => 'rspec:windows',
-        'rspec:windows: [name,other]' => 'rspec:windows'
-      }
-
-      tests.each do |name, group_name|
-        it "'#{name}' puts in '#{group_name}'" do
-          commit_status.name = name
-
-          is_expected.to eq(group_name)
-        end
+        is_expected.to eq(group_name)
       end
     end
   end