diff --git a/core/drupalci.yml b/core/drupalci.yml
index cd92d8102d..435dc4402f 100644
--- a/core/drupalci.yml
+++ b/core/drupalci.yml
@@ -3,49 +3,15 @@
 # https://www.drupal.org/drupalorg/docs/drupal-ci/customizing-drupalci-testing
 _phpunit_testgroups_to_execute: &testgroups
   # Default: all of Drupal core's test suite runs.
-  testgroups: '--all'
-  # Alternative: run only the tests for one particular module.
+  testgroups: '--class "\Drupal\FunctionalJavascriptTests\Ajax\ThrobberTest"'  # Alternative: run only the tests for one particular module.
   # testgroups: '--module ckeditor5'
 build:
   assessment:
     testing:
-      # Run code quality checks.
-      container_command.commit-checks:
-        commands:
-          - "core/scripts/dev/commit-code-check.sh --drupalci"
-        halt-on-fail: true
-      # run_tests task is executed several times in order of performance speeds.
-      # halt-on-fail can be set on the run_tests tasks in order to fail fast.
-      # suppress-deprecations is false in order to be alerted to usages of
-      # deprecated code.
-      run_tests.phpunit:
-        types: 'PHPUnit-Unit'
-        suppress-deprecations: false
-        halt-on-fail: false
-        <<: *testgroups
-      run_tests.kernel:
-        types: 'PHPUnit-Kernel'
-        suppress-deprecations: false
-        halt-on-fail: false
-        <<: *testgroups
-      run_tests.build:
-        # Limit concurrency due to disk space concerns.
-        concurrency: 15
-        types: 'PHPUnit-Build'
-        suppress-deprecations: false
-        halt-on-fail: false
-        <<: *testgroups
-      run_tests.functional:
-        types: 'PHPUnit-Functional'
-        suppress-deprecations: false
-        halt-on-fail: false
-        <<: *testgroups
       run_tests.javascript:
         concurrency: 15
         types: 'PHPUnit-FunctionalJavascript'
         suppress-deprecations: false
         halt-on-fail: false
         <<: *testgroups
-      # Run nightwatch testing.
-      # @see https://www.drupal.org/project/drupal/issues/2869825
-      nightwatchjs: {}
+        repeat: 1000
diff --git a/core/lib/Drupal/Core/Extension/InfoParserDynamic.php b/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
index 8298223a37..4f4b0e0b88 100644
--- a/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
+++ b/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
@@ -51,7 +51,7 @@ public function parse($filename) {
         throw new InfoParserException('Missing required keys (' . implode(', ', $missing_keys) . ') in ' . $filename);
       }
       if (!isset($parsed_info['core_version_requirement'])) {
-        if (str_starts_with($filename, 'core/') || str_starts_with($filename, $this->root . '/core/')) {
+        if (str_starts_with($filename, 'core/') || str_starts_with($filename, $this->root . DIRECTORY_SEPARATOR . 'core/')) {
           // Core extensions do not need to specify core compatibility: they are
           // by definition compatible so a sensible default is used. Core
           // modules are allowed to provide these for testing purposes.
diff --git a/core/lib/Drupal/Core/Test/StackMiddleware/TestWaitTerminateMiddleware.php b/core/lib/Drupal/Core/Test/StackMiddleware/TestWaitTerminateMiddleware.php
index 58cc844024..8dc3db5428 100644
--- a/core/lib/Drupal/Core/Test/StackMiddleware/TestWaitTerminateMiddleware.php
+++ b/core/lib/Drupal/Core/Test/StackMiddleware/TestWaitTerminateMiddleware.php
@@ -36,12 +36,9 @@ public function __construct(
   public function handle(Request $request, $type = self::MAIN_REQUEST, $catch = TRUE): Response {
     $result = $this->httpKernel->handle($request, $type, $catch);
 
-    if ($this->state->get('drupal.test_wait_terminate')) {
-      // Set a header on the response to instruct the test runner that it must
-      // await the lock. Note that the lock acquired here is automatically
-      // released from within a shutdown function.
-      $this->lock->acquire('test_wait_terminate');
-      $result->headers->set('X-Drupal-Wait-Terminate', '1');
+    $wait = $this->state->get('drupal.test_wait_terminate');
+    if (is_int($wait)) {
+      usleep($wait);
     }
 
     return $result;
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/ThrobberTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/ThrobberTest.php
index eb66398b57..e846a4235a 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/ThrobberTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/ThrobberTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\FunctionalJavascriptTests\Ajax;
 
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use Drupal\Tests\WaitTerminateTestTrait;
 
 /**
  * Tests the throbber.
@@ -11,6 +12,8 @@
  */
 class ThrobberTest extends WebDriverTestBase {
 
+  use WaitTerminateTestTrait;
+
   /**
    * {@inheritdoc}
    */
@@ -28,18 +31,6 @@ class ThrobberTest extends WebDriverTestBase {
    */
   protected $defaultTheme = 'stark';
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp(): void {
-    parent::setUp();
-
-    $admin_user = $this->drupalCreateUser([
-      'administer views',
-    ]);
-    $this->drupalLogin($admin_user);
-  }
-
   /**
    * Tests theming throbber element.
    */
@@ -47,6 +38,10 @@ public function testThemingThrobberElement() {
     $session = $this->getSession();
     $web_assert = $this->assertSession();
     $page = $session->getPage();
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+    ]);
+    $this->drupalLogin($admin_user);
 
     $custom_ajax_progress_indicator_fullscreen = <<<JS
       Drupal.theme.ajaxProgressIndicatorFullscreen = function () {
@@ -69,46 +64,54 @@ public function testThemingThrobberElement() {
 
     // Test theming fullscreen throbber.
     $session->executeScript($custom_ajax_progress_indicator_fullscreen);
-    hold_test_response(TRUE);
+    $this->setWaitForTerminate();
     $page->clickLink('Content: Published (grouped)');
     $this->assertNotNull($web_assert->waitForElement('css', '.custom-ajax-progress-fullscreen'), 'Custom ajaxProgressIndicatorFullscreen.');
-    hold_test_response(FALSE);
+    $this->waitForTerminate();
     $web_assert->assertNoElementAfterWait('css', '.custom-ajax-progress-fullscreen');
+    $this->unsetWaitForTerminate();
 
     // Test theming throbber message.
     $web_assert->waitForElementVisible('css', '[data-drupal-selector="edit-options-group-info-add-group"]');
     $session->executeScript($custom_ajax_progress_message);
-    hold_test_response(TRUE);
+    $this->setWaitForTerminate();
     $page->pressButton('Add another item');
     $this->assertNotNull($web_assert->waitForElement('css', '.ajax-progress-throbber .custom-ajax-progress-message'), 'Custom ajaxProgressMessage.');
-    hold_test_response(FALSE);
+    $this->waitForTerminate();
     $web_assert->assertNoElementAfterWait('css', '.ajax-progress-throbber');
+    $this->unsetWaitForTerminate();
 
     // Test theming throbber.
     $web_assert->waitForElementVisible('css', '[data-drupal-selector="edit-options-group-info-group-items-3-title"]');
     $session->executeScript($custom_ajax_progress_throbber);
-    hold_test_response(TRUE);
+    $this->setWaitForTerminate();
     $page->pressButton('Add another item');
     $this->assertNotNull($web_assert->waitForElement('css', '.custom-ajax-progress-throbber'), 'Custom ajaxProgressThrobber.');
-    hold_test_response(FALSE);
+    $this->waitForTerminate();
     $web_assert->assertNoElementAfterWait('css', '.custom-ajax-progress-throbber');
+    $this->unsetWaitForTerminate();
   }
 
   /**
-   * Tests progress throbber element position.
+   * Tests progress throbber position on a dropbutton in a table display.
    */
-  public function testProgressThrobberPosition() {
-    $this->drupalLogin($this->rootUser);
+  public function testDropbuttonThrobberElementPositionInTableDisplay(): void {
+    $web_assert = $this->assertSession();
+    $admin_user = $this->drupalCreateUser([
+      'administer blocks',
+    ]);
+    $this->drupalLogin($admin_user);
 
     $this->drupalGet('/admin/structure/block');
     $this->clickLink('Place block');
-    hold_test_response(FALSE);
-    $this->assertSession()->waitForText('Place Block');
+    $web_assert->assertWaitOnAjaxRequest();
+    $this->assertNotEmpty($web_assert->waitForElementVisible('css', '#drupal-modal'));
+    $this->setWaitForTerminate();
     $this->clickLink('Place block');
-    hold_test_response(TRUE);
-    $this->assertSession()->elementExists('xpath', '//div[contains(@class, "dropbutton-wrapper")]/following-sibling::div[contains(@class, "ajax-progress-throbber")]');
-    hold_test_response(FALSE);
-    $this->assertSession()->assertNoElementAfterWait('css', '.ajax-progress-throbber');
+    $this->assertNotNull($web_assert->waitForElement('xpath', '//div[contains(@class, "dropbutton-wrapper")]/following-sibling::div[contains(@class, "ajax-progress-throbber")]'));
+    $this->waitForTerminate();
+    $web_assert->assertNoElementAfterWait('css', '.ajax-progress-throbber');
+    $this->unsetWaitForTerminate();
   }
 
 }
diff --git a/core/tests/Drupal/Tests/WaitTerminateTestTrait.php b/core/tests/Drupal/Tests/WaitTerminateTestTrait.php
index 008b155501..8e8c5fc6fd 100644
--- a/core/tests/Drupal/Tests/WaitTerminateTestTrait.php
+++ b/core/tests/Drupal/Tests/WaitTerminateTestTrait.php
@@ -14,8 +14,16 @@ trait WaitTerminateTestTrait {
    * Tests with assertions which operate on data computed during the terminate
    * event need to enable this.
    */
-  protected function setWaitForTerminate() {
-    $this->container->get('state')->set('drupal.test_wait_terminate', TRUE);
+  protected function setWaitForTerminate(int $wait = 100000) {
+    $this->container->get('state')->set('drupal.test_wait_terminate', $wait);
+  }
+
+  protected function unsetWaitForTerminate() {
+    $this->container->get('state')->delete('drupal.test_wait_terminate');
+  }
+
+  protected function waitForTerminate(int $wait = 100000) {
+    usleep($wait);
   }
 
 }
