diff --git a/.gitlab/ci/build-images.gitlab-ci.yml b/.gitlab/ci/build-images.gitlab-ci.yml
index 1621d474d39f1198f62704f85095d64403a778fb..5525f5ed1c3cef59c9e696c6da03fcd812cee434 100644
--- a/.gitlab/ci/build-images.gitlab-ci.yml
+++ b/.gitlab/ci/build-images.gitlab-ci.yml
@@ -27,7 +27,7 @@ build-qa-image as-if-foss:
   extends:
     - build-qa-image
     - .as-if-foss
-    - .build-images:rules:build-qa-image-as-if-foss
+    - .qa:rules:package-and-test-ce:follow-up
 
 follow-up:build-qa-image:
   extends:
@@ -87,7 +87,7 @@ build-assets-image as-if-foss:
   extends:
     - build-assets-image
     - .as-if-foss
-    - .build-images:rules:build-assets-image-as-if-foss
+    - .qa:rules:package-and-test-ce:follow-up
   needs: ["compile-production-assets as-if-foss"]
 
 follow-up:build-assets-image:
diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml
index 23a3e13743a3388f203b8b1eb616d0d1464c0358..5d42dd82522e22c7a9987e34411aabf59919252e 100644
--- a/.gitlab/ci/frontend.gitlab-ci.yml
+++ b/.gitlab/ci/frontend.gitlab-ci.yml
@@ -64,7 +64,7 @@ compile-production-assets as-if-foss:
   extends:
     - compile-production-assets
     - .as-if-foss
-    - .frontend:rules:compile-production-assets-as-if-foss
+    - .qa:rules:package-and-test-ce:follow-up
 
 follow-up:compile-production-assets:
   extends:
diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml
index 2dea48c8c3e37eeaaa489bac9a09f5ea308aaf30..bb11ece96ae287ecbe10399895c57845e898ad00 100644
--- a/.gitlab/ci/qa.gitlab-ci.yml
+++ b/.gitlab/ci/qa.gitlab-ci.yml
@@ -192,11 +192,11 @@ e2e:post-run-e2e-message:
 e2e:package-and-test-ce:
   extends:
     - e2e:package-and-test-ee
-    - .qa:rules:package-and-test-ce
+    - .qa:rules:package-and-test-ce:follow-up
   needs:
     - build-assets-image as-if-foss
     - build-qa-image as-if-foss
-    - e2e-test-pipeline-generate
+    - e2e-test-pipeline-generate as-if-foss
   variables:
     FOSS_ONLY: "1"
     RELEASE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ce:${RELEASE_IMAGE_TAG}"
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index ddea2cf48ca99deb3ec024c5f66f5c8a3c3a358a..14c6651bf6d49b798921b817b40aa8b61bc7875a 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -956,18 +956,6 @@
     - !reference [".releases:rules:canonical-dot-com-gitlab-stable-branch-only-setup-test-env", rules]
     - !reference [".releases:rules:canonical-dot-com-security-gitlab-stable-branch-only-setup-test-env", rules]
 
-.build-images:rules:build-qa-image-as-if-foss:
-  rules:
-    - <<: *if-not-canonical-namespace
-      when: never
-    - <<: *if-merge-request-labels-pipeline-expedite
-      when: never
-    - !reference [".strict-ee-only-rules", rules]
-    - <<: *if-default-branch-schedule-nightly
-      variables:
-        ARCH: amd64,arm64
-    - !reference [".build-images:rules:build-qa-image-merge-requests", rules]
-
 # When new minor release tag is pushed, re-tag gdk image with pattern ignored by registry cleanup
 .build-images:rules:retag-gdk-image:
   rules:
@@ -1267,13 +1255,6 @@
     - if: '$ENABLE_COMPILE_PRODUCTION_ASSETS == "true"'
     - !reference [".frontend:rules:assets-shared", rules]
 
-.frontend:rules:compile-production-assets-as-if-foss:
-  rules:
-    - <<: *if-not-canonical-namespace
-      when: never
-    - !reference [".strict-ee-only-rules", rules]
-    - !reference [.frontend:rules:compile-production-assets, rules]
-
 .frontend:rules:compile-test-assets:
   rules:
     - if: '$ENABLE_COMPILE_TEST_ASSETS == "true"'
@@ -1715,7 +1696,8 @@
     - !reference [".qa:rules:package-and-test-common", rules]
     - !reference [".qa:rules:e2e-schedule-blocking", rules]
 
-.qa:rules:package-and-test-ce:
+# Note: If any changes are made to this rule, the following should also be updated - .qa:rules:package-and-test-ce:follow-up
+.qa:rules:package-and-test-ce:start:
   rules:
     - !reference [".qa:rules:package-and-test-never-run", rules]
     - <<: *if-security-merge-request
@@ -1730,6 +1712,26 @@
     - <<: *if-default-branch-schedule-nightly
       allow_failure: true
       variables:
+        ARCH: amd64,arm64
+        CREATE_TEST_FAILURE_ISSUES: "true"
+        PROCESS_TEST_RESULTS: "true"
+        QA_SAVE_TEST_METRICS: "true"
+        QA_EXPORT_TEST_METRICS: "false"
+
+.qa:rules:package-and-test-ce:follow-up:
+  rules:
+    - !reference [".qa:rules:package-and-test-never-run", rules]
+    - <<: *if-security-merge-request
+      changes: *qa-patterns
+      allow_failure: true
+    - !reference [".prevent-tier-2-and-below", rules]
+    - <<: *if-security-merge-request
+      changes: *code-patterns
+      allow_failure: true
+    - <<: *if-default-branch-schedule-nightly
+      allow_failure: true
+      variables:
+        ARCH: amd64,arm64
         CREATE_TEST_FAILURE_ISSUES: "true"
         PROCESS_TEST_RESULTS: "true"
         QA_SAVE_TEST_METRICS: "true"
diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml
index 0ebe3c586193ad94b49028725f3c3ae1cbf68897..e3282f0bb2e53d3ee6dc53e6120edfc707947443 100644
--- a/.gitlab/ci/setup.gitlab-ci.yml
+++ b/.gitlab/ci/setup.gitlab-ci.yml
@@ -214,9 +214,19 @@ e2e-test-pipeline-generate:
 # This is the manual start of the chain of E2E jobs
 # After playing this, it'll follow up with:
 # follow-up:compile-production-assets -> follow-up:build-assets-image --\
-#                                    \-> follow-up:e2e:package-and-test-ee
-# follow-up:build-qa-image --------------------------------------------------------------------------/
+#                                                                       \-> follow-up:e2e:package-and-test-ee
+# follow-up:build-qa-image ---------------------------------------------/
 manual:e2e-test-pipeline-generate:
   extends:
     - e2e-test-pipeline-generate
     - .qa:rules:manual-e2e
+
+# This is the start of the chain of E2E jobs for CE
+# After playing this, it'll follow up with:
+# compile-production-assets as-if-foss -> build-assets-image as-if-foss --\
+#                                                                         \-> e2e:package-and-test-ce
+# build-qa-image as-if-foss ----------------------------------------------/
+e2e-test-pipeline-generate as-if-foss:
+  extends:
+    - e2e-test-pipeline-generate
+    - .qa:rules:package-and-test-ce:start