diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index ac4763103b24f6d2edc44e7c22c0f6d37b9849c0..ef66c8aeb2e1c1cb1afa5de0dc30ad22767bbe88 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -405,6 +405,7 @@
     - <<: *if-security-merge-request
       changes: *code-backstage-patterns
     - <<: *if-merge-request-title-as-if-foss
+    - <<: *if-merge-request-title-run-all-rspec
     - <<: *if-merge-request
       changes: *ci-patterns
 
@@ -483,6 +484,7 @@
     - <<: *if-security-merge-request
       changes: *code-qa-patterns
     - <<: *if-merge-request-title-as-if-foss
+    - <<: *if-merge-request-title-run-all-rspec
     - <<: *if-merge-request
       changes: *ci-patterns
 
@@ -700,6 +702,7 @@
       changes: *db-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *db-patterns
+    - <<: *if-merge-request-title-run-all-rspec
     - <<: *if-merge-request
       changes: *ci-patterns
 
@@ -716,6 +719,7 @@
       changes: *db-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *db-patterns
+    - <<: *if-merge-request-title-run-all-rspec
 
 .rails:rules:as-if-foss-unit:
   rules:
@@ -725,6 +729,7 @@
       changes: *backend-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *backend-patterns
+    - <<: *if-merge-request-title-run-all-rspec
     - <<: *if-merge-request
       changes: *ci-patterns
 
@@ -741,6 +746,7 @@
       changes: *backend-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *backend-patterns
+    - <<: *if-merge-request-title-run-all-rspec
 
 .rails:rules:as-if-foss-integration:
   rules:
@@ -750,6 +756,7 @@
       changes: *backend-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *backend-patterns
+    - <<: *if-merge-request-title-run-all-rspec
     - <<: *if-merge-request
       changes: *ci-patterns
 
@@ -766,6 +773,7 @@
       changes: *backend-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *backend-patterns
+    - <<: *if-merge-request-title-run-all-rspec
 
 .rails:rules:as-if-foss-system:
   rules:
@@ -775,6 +783,7 @@
       changes: *code-backstage-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *code-backstage-patterns
+    - <<: *if-merge-request-title-run-all-rspec
     - <<: *if-merge-request
       changes: *ci-patterns
 
@@ -791,6 +800,7 @@
       changes: *code-backstage-patterns
     - <<: *if-merge-request-title-as-if-foss
       changes: *code-backstage-patterns
+    - <<: *if-merge-request-title-run-all-rspec
 
 .rails:rules:ee-and-foss-db-library-code:
   rules:
diff --git a/app/views/dashboard/projects/_projects.html.haml b/app/views/dashboard/projects/_projects.html.haml
index 5122164dbcba7f0dbf7591d669b179fd8647c85b..06ef89e0b572ad4e97deacd24ead14c2747cd5d7 100644
--- a/app/views/dashboard/projects/_projects.html.haml
+++ b/app/views/dashboard/projects/_projects.html.haml
@@ -1 +1 @@
-= render 'shared/projects/list', projects: @projects, pipeline_status: Feature.enabled?(:dashboard_pipeline_status, default_enabled: true), user: current_user
+= render 'shared/projects/list', projects: @projects, pipeline_status: true, user: current_user
diff --git a/app/views/projects/runners/_runner.html.haml b/app/views/projects/runners/_runner.html.haml
index 41159df1435e02800de55b588be6761b2ebdd9bb..7f5acbbe890af273095d4dfe8a847a0bacc69076 100644
--- a/app/views/projects/runners/_runner.html.haml
+++ b/app/views/projects/runners/_runner.html.haml
@@ -40,5 +40,5 @@
   - if runner.tags.present?
     %p
       - runner.tags.map(&:name).sort.each do |tag|
-        %span.badge.badge-primary
+        %span.badge.gl-badge.sm.badge-pill.badge-primary
           = tag
diff --git a/changelogs/unreleased/209061-remove-dashboard-pipeline-status-ff.yml b/changelogs/unreleased/209061-remove-dashboard-pipeline-status-ff.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5abe0575a0ff1f1cf9aba5e4609cfc524449be5b
--- /dev/null
+++ b/changelogs/unreleased/209061-remove-dashboard-pipeline-status-ff.yml
@@ -0,0 +1,5 @@
+---
+title: Remove dashboard_pipeline_status feature flag
+merge_request: 55472
+author:
+type: other
diff --git a/changelogs/unreleased/gl-badge-runners.yml b/changelogs/unreleased/gl-badge-runners.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9b5724012641c71315c93276b46eadfd3ebd5c89
--- /dev/null
+++ b/changelogs/unreleased/gl-badge-runners.yml
@@ -0,0 +1,5 @@
+---
+title: Apply new GitLab UI for badge in runners list
+merge_request: 54766
+author: Yogi (@yo)
+type: changed
diff --git a/changelogs/unreleased/sfang-do-not-show-token-name.yml b/changelogs/unreleased/sfang-do-not-show-token-name.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d4c337a87041b472d11903bacc906fcfd4e063fa
--- /dev/null
+++ b/changelogs/unreleased/sfang-do-not-show-token-name.yml
@@ -0,0 +1,5 @@
+---
+title: Do not expose user name if user is project bot
+merge_request: 54022
+author:
+type: changed
diff --git a/config/feature_flags/development/dashboard_pipeline_status.yml b/config/feature_flags/development/dashboard_pipeline_status.yml
deleted file mode 100644
index f24ba5983a80f302c10fc2b1862b60be4477d1dd..0000000000000000000000000000000000000000
--- a/config/feature_flags/development/dashboard_pipeline_status.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: dashboard_pipeline_status
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/22029
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/209061
-milestone: '12.7'
-type: development
-group: group::continuous integration
-default_enabled: true
diff --git a/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/delete_modal.vue b/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/delete_modal.vue
index 9410d5f825539713df0c2ff2d0c354bbc9d058ae..6982e1d79aa3b42eece6292a7be12f20a7fd45ac 100644
--- a/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/delete_modal.vue
+++ b/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/delete_modal.vue
@@ -37,13 +37,14 @@ export default {
       this.reportDeleting();
 
       try {
+        const { id } = this;
         const {
           data: { destroyComplianceFramework },
         } = await this.$apollo.mutate({
           mutation: deleteComplianceFrameworkMutation,
           variables: {
             input: {
-              id: this.id,
+              id,
             },
           },
           awaitRefetchQueries: true,
@@ -62,7 +63,7 @@ export default {
         if (error) {
           this.reportError(new Error(error));
         } else {
-          this.reportSuccess();
+          this.reportSuccess(id);
         }
       } catch (error) {
         this.reportError(error);
@@ -75,8 +76,8 @@ export default {
       Sentry.captureException(error);
       this.$emit('error');
     },
-    reportSuccess() {
-      this.$emit('delete');
+    reportSuccess(id) {
+      this.$emit('delete', id);
     },
     show() {
       this.$refs.modal.show();
diff --git a/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/list.vue b/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/list.vue
index 009fffdd576db882421fda4882b075febe55eb41..4e611aeca4d862f67818292cb64c4927c3af14d4 100644
--- a/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/list.vue
+++ b/ee/app/assets/javascripts/groups/settings/compliance_frameworks/components/list.vue
@@ -39,7 +39,7 @@ export default {
   data() {
     return {
       markedForDeletion: {},
-      deletingFramework: null,
+      deletingFrameworksIds: [],
       complianceFrameworks: [],
       error: '',
       message: '',
@@ -70,7 +70,7 @@ export default {
   },
   computed: {
     isLoading() {
-      return this.$apollo.loading && !this.deletingFramework;
+      return this.$apollo.loading && this.deletingFrameworksIds.length === 0;
     },
     hasLoaded() {
       return !this.isLoading && !this.error;
@@ -105,15 +105,18 @@ export default {
     onError() {
       this.error = this.$options.i18n.deleteError;
     },
-    onDelete() {
+    onDelete(id) {
       this.message = this.$options.i18n.deleteMessage;
-      this.deletingFramework = null;
+      const idx = this.deletingFrameworksIds.indexOf(id);
+      if (idx > -1) {
+        this.deletingFrameworksIds.splice(idx, 1);
+      }
     },
     onDeleting() {
-      this.deletingFramework = this.markedForDeletion;
+      this.deletingFrameworksIds.push(this.markedForDeletion.id);
     },
-    isDeleting(framework) {
-      return this.deletingFramework === framework;
+    isDeleting(id) {
+      return this.deletingFrameworksIds.includes(id);
     },
   },
   i18n: {
@@ -153,7 +156,7 @@ export default {
           v-for="framework in complianceFrameworks"
           :key="framework.parsedId"
           :framework="framework"
-          :loading="isDeleting(framework)"
+          :loading="isDeleting(framework.id)"
           @delete="markForDeletion"
         />
       </gl-tab>
diff --git a/ee/spec/frontend/groups/settings/compliance_frameworks/components/delete_modal_spec.js b/ee/spec/frontend/groups/settings/compliance_frameworks/components/delete_modal_spec.js
index cb5178e75ec3319869204792ab74784f3cd86091..6288fe4c0b465b4a077424d20d66f63ed73abee7 100644
--- a/ee/spec/frontend/groups/settings/compliance_frameworks/components/delete_modal_spec.js
+++ b/ee/spec/frontend/groups/settings/compliance_frameworks/components/delete_modal_spec.js
@@ -117,7 +117,7 @@ describe('DeleteModal', () => {
 
       await waitForPromises();
 
-      expect(wrapper.emitted('delete')).toHaveLength(1);
+      expect(wrapper.emitted('delete')[0]).toEqual([frameworkFoundResponse.id]);
     });
 
     it('emits "error" event and reports to Sentry when there is a network error', async () => {
diff --git a/ee/spec/frontend/groups/settings/compliance_frameworks/components/list_spec.js b/ee/spec/frontend/groups/settings/compliance_frameworks/components/list_spec.js
index 112e386fc54bfb83b1c6dea2802deacbd21b2230..54f91013057f15a051e2cf39e8d0cdfb9750d688 100644
--- a/ee/spec/frontend/groups/settings/compliance_frameworks/components/list_spec.js
+++ b/ee/spec/frontend/groups/settings/compliance_frameworks/components/list_spec.js
@@ -213,13 +213,18 @@ describe('List', () => {
         expect(findDeleteModal().vm.show).toHaveBeenCalled();
       });
 
-      describe('and the item is being deleted', () => {
+      describe('and multiple items are being deleted', () => {
         beforeEach(() => {
-          findDeleteModal().vm.$emit('deleting');
+          findListItems().wrappers.forEach((listItem) => {
+            listItem.vm.$emit('delete', listItem.props('framework'));
+            findDeleteModal().vm.$emit('deleting');
+          });
         });
 
-        it('sets "loading" to true on the marked list item', () => {
-          expect(findListItem().props('loading')).toBe(true);
+        it('sets "loading" to true on the deleting list items', () => {
+          expect(findListItems().wrappers.every((listItem) => listItem.props('loading'))).toBe(
+            true,
+          );
         });
 
         describe('and an error occurred', () => {
@@ -238,10 +243,14 @@ describe('List', () => {
 
         describe('and the item was successfully deleted', () => {
           beforeEach(async () => {
-            findDeleteModal().vm.$emit('delete');
+            findDeleteModal().vm.$emit('delete', framework.id);
             await waitForPromises();
           });
 
+          it('sets "loading" to false on the deleted list item', () => {
+            expect(findListItem().props('loading')).toBe(false);
+          });
+
           it('shows the alert for the success message', () => {
             expect(findAlert().props('dismissible')).toBe(true);
             expect(findAlert().props('variant')).toBe('info');
diff --git a/lib/api/entities/user_safe.rb b/lib/api/entities/user_safe.rb
index feb01767fd6cf5be8bac1647b9b55441729062e4..2b7c14cba6e26c32a64c235d22d4fdd41bf4aca5 100644
--- a/lib/api/entities/user_safe.rb
+++ b/lib/api/entities/user_safe.rb
@@ -3,7 +3,8 @@
 module API
   module Entities
     class UserSafe < Grape::Entity
-      expose :id, :name, :username
+      expose :id, :username
+      expose :name, unless: ->(user) { user.project_bot? && !options[:current_user].admin?}
     end
   end
 end
diff --git a/spec/features/dashboard/projects_spec.rb b/spec/features/dashboard/projects_spec.rb
index 8705c22c41a6681c5abda53f943f9911759b8bfa..d7330b5267b7666594278d37815167b7b90c5c9c 100644
--- a/spec/features/dashboard/projects_spec.rb
+++ b/spec/features/dashboard/projects_spec.rb
@@ -198,14 +198,6 @@
       it_behaves_like 'hidden pipeline status'
     end
 
-    context 'when dashboard_pipeline_status is disabled' do
-      before do
-        stub_feature_flags(dashboard_pipeline_status: false)
-      end
-
-      it_behaves_like 'hidden pipeline status'
-    end
-
     context "when last_pipeline is missing" do
       before do
         project.last_pipeline.delete
diff --git a/spec/features/projects/members/list_spec.rb b/spec/features/projects/members/list_spec.rb
index f1fc3927b0374097d899b6a4f2ad495bd1139dc9..3cc3c763e29c6865e90a414c5b196a4bbe7dd285 100644
--- a/spec/features/projects/members/list_spec.rb
+++ b/spec/features/projects/members/list_spec.rb
@@ -127,7 +127,7 @@
       it 'does not show form used to change roles and "Expiration date" or the remove user button' do
         visit_members_page
 
-        page.within find_member_row(project_bot) do
+        page.within find_username_row(project_bot) do
           expect(page).not_to have_button('Maintainer')
           expect(page).to have_field('Expiration date', disabled: true)
           expect(page).not_to have_button('Remove member')
diff --git a/spec/lib/api/entities/user_spec.rb b/spec/lib/api/entities/user_spec.rb
index e35deeb6263feb4b16ce2a92f6313d3d34ca0359..0deaf47697707efbce42f94d75dacf67cf00456a 100644
--- a/spec/lib/api/entities/user_spec.rb
+++ b/spec/lib/api/entities/user_spec.rb
@@ -35,4 +35,22 @@
       expect(subject[:bot]).to eq(true)
     end
   end
+
+  context 'with project bot user' do
+    let(:user) { create(:user, :project_bot) }
+
+    context 'when the requester is not an admin' do
+      it 'does not expose project bot user name' do
+        expect(subject).not_to include(:name)
+      end
+    end
+
+    context 'when the requester is an admin' do
+      let(:current_user) { create(:user, :admin) }
+
+      it 'exposes project bot user name' do
+        expect(subject).to include(:name)
+      end
+    end
+  end
 end
diff --git a/spec/support/helpers/features/members_table_helpers.rb b/spec/support/helpers/features/members_table_helpers.rb
index 4a0e218ed3e0f6b43aaf8d7f15a0ac810371f7ae..80fd4bcf07acb7d9cda33082372f0bbad0d74523 100644
--- a/spec/support/helpers/features/members_table_helpers.rb
+++ b/spec/support/helpers/features/members_table_helpers.rb
@@ -41,6 +41,10 @@ def find_member_row(user)
             find_row(user.name)
           end
 
+          def find_username_row(user)
+            find_row(user.username)
+          end
+
           def find_invited_member_row(email)
             find_row(email)
           end