diff --git a/.cspell-project-words.txt b/.cspell-project-words.txt
index d5e69cffd98ca43cea7ac9d80cabdf8ddf73d7bd..88ef6d6b4234605161fce78247806553cdd59c19 100644
--- a/.cspell-project-words.txt
+++ b/.cspell-project-words.txt
@@ -6,6 +6,10 @@ csslint
 interdif
 nomsg
 backported
+oneline
+mkdocs
+testgroup
+phpenv
 
 # Scheduler words
 timecheck
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9a2727e22e1bcaa39eb5d6dd92f7304df521ee14..32330928463c69fd367688e8da43e64fc987ec04 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,10 +23,11 @@ variables:
   OPT_IN_TEST_NEXT_MAJOR: 1
   OPT_IN_TEST_DRUPAL9: 1
   OPT_IN_TEST_DRUPAL8: 1
-  RUN_JOB_UPGRADE_STATUS: 1
+
   _SHOW_ENVIRONMENT_VARIABLES: 1
   _PHPUNIT_CONCURRENT: 1
   _PHPUNIT_TESTGROUPS: ''
+  _CSPELL_EXTRA: '--dot'
 
 ################
 # Job overrides
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 3f4251345f3861985ffe2666514c9782e51a1314..0000000000000000000000000000000000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,155 +0,0 @@
-language: php
-os: linux
-dist: xenial
-
-services:
-  - mysql
-
-env:
-  global:
-    # Make the script re-usable for other modules.
-    - MODULE=scheduler
-    # Initialize the real SYMFONY_DEPRECATIONS_HELPER variable.
-    - SYMFONY_DEPRECATIONS_HELPER=0
-    # Create a default for the allowed deprecations per branch.
-    - DEPRECATIONS=0
-
-jobs:
-  fast_finish: true
-  include:
-    - php: 7.2
-      env:
-        - DRUPAL_CORE=8.9.x
-        # Skip Rules because it cannot be installed at 8.x.
-        - RULES=NO
-        # ---- Remaining self deprecation notices (0)
-    - php: 7.3
-      env:
-        - DRUPAL_CORE=9.1.x
-        - RULES=YES
-        # --- Remaining self deprecation notices (0)
-        # --- Remaining direct deprecation notices (0)
-    - php: 7.4
-      env:
-        - DRUPAL_CORE=9.5.x
-        # Skip Rules testing in this run.
-        - RULES=NO
-        # --- Remaining self deprecation notices (0)
-        # --- Remaining direct deprecation notices (0)
-
-    - php: 8.1
-      env:
-        - DRUPAL_CORE=10.0.x
-        - RULES=YES
-        # ---- Remaining self deprecation notices (4)
-        #    2 Behat\Mink\Element\ElementInterface::getText() might add "string"
-        #    2 Behat\Mink\Element\ElementInterface::waitFor() might add "mixed"
-        # ---- Remaining direct deprecation notices (3)
-        #    1 PHPUnit\TextUI\DefaultResultPrinter class is considered internal
-        #    1 DrupalListener implements "PHPUnit\Framework\TestListener
-        #    1 DrupalListener uses "PHPUnit\Framework\TestListenerDefaultImplementation"
-        # ---- Other deprecation notices (1)
-        #    1 PHPUnit\Framework\TestCase::addWarning() method is considered internal
-        - DEPRECATIONS=8
-
-# Be sure to cache composer downloads.
-cache:
-  directories:
-    - $HOME/.composer
-
-before_script:
-  # At job start-up Composer is installed. For some earlier versions of PHP this
-  # will be Composer 1 therefore we need to self-update to Composer 2.
-  - composer --version
-  - composer self-update --2
-  - echo $MODULE
-
-  # Remove Xdebug as we don't need it and it causes
-  # PHP Fatal error:  Maximum function nesting level of '256' reached.
-  # We also don't care if that file exists or not on PHP 7.
-  - phpenv config-rm xdebug.ini || true
-
-  # Navigate out of module directory to prevent blown stack by recursive module
-  # lookup.
-  - cd ..
-
-  # Create database.
-  - mysql -e "create database $MODULE"
-  # Export database variable for kernel tests.
-  - export SIMPLETEST_DB=mysql://root:@127.0.0.1/$MODULE
-
-  # Download Drupal core from the Github mirror because it is faster.
-  - travis_retry git clone --branch $DRUPAL_CORE --depth 1 https://github.com/drupal/drupal.git
-  - cd drupal
-  # Store the path to Drupal root.
-  - DRUPAL_ROOT=$(pwd)
-  - echo $DRUPAL_ROOT
-
-  # Make a directory for our module and copy the built source into it.
-  - mkdir $DRUPAL_ROOT/modules/$MODULE
-  - cp -R $TRAVIS_BUILD_DIR/* $DRUPAL_ROOT/modules/$MODULE/
-
-  # Install Composer and allow composer plugins.
-  - travis_retry composer install
-  - |
-    if [[ $DRUPAL_CORE =~ ^(8|9\.0|9\.1) ]]; then
-      composer config --no-plugins allow-plugins.composer/installers true
-      composer config --no-plugins allow-plugins.drupal/core-project-message true
-      composer config --no-plugins allow-plugins.drupal/core-vendor-hardening true
-    fi
-
-  # Install the testing dependencies via Composer.
-  - travis_retry composer require drupal/devel
-  - travis_retry composer require drush/drush
-  - # Need to get Rules dev because 3.0.0-alpha7 has deprecation warnings.
-  - if [ "$RULES" == "YES" ]; then travis_retry composer require drupal/rules:"3.x-dev"; fi
-  # Use * to allow any compatible version, not the latest version.
-  - travis_retry composer require drupal/workbench_moderation:*
-  # Use * because only the dev version of WBMA is compatible with D9. None for D10.
-  - if [[ $DRUPAL_CORE =~ ^(8|9) ]]; then travis_retry composer require drupal/workbench_moderation_actions:*; fi
-
-  # Coder is already installed as part of composer install. We just need to set
-  # the installed_paths to pick up the Drupal standards. This is only for Coder
-  # up to version 8.3.13. From 8.3.14 onwards this is done at install time.
-  - |
-    if [[ "$DRUPAL_CORE" == "8.9.x" || "$DRUPAL_CORE" == "9.2.x" || "$DRUPAL_CORE" == "9.3.x" ]]; then
-      $DRUPAL_ROOT/vendor/bin/phpcs --config-set installed_paths $DRUPAL_ROOT/vendor/drupal/coder/coder_sniffer
-    fi
-
-  # Start a web server on port 8888, run in the background.
-  - php -S localhost:8888 &
-
-  # Export web server URL for browser tests.
-  - export SIMPLETEST_BASE_URL=http://localhost:8888
-
-  # Get the allowed number of deprecation warnings.
-  - SYMFONY_DEPRECATIONS_HELPER=$DEPRECATIONS || $SYMFONY_DEPRECATIONS_HELPER
-  - echo $SYMFONY_DEPRECATIONS_HELPER
-
-script:
-  # Run the PHPUnit tests, excluding the javascript tests.
-  - cd $DRUPAL_ROOT
-  - if [ "$RULES" == "YES" ]; then
-      ./vendor/bin/phpunit -c ./core/phpunit.xml.dist --debug ./modules/$MODULE/ --exclude-group=scheduler_js;
-    else
-      ./vendor/bin/phpunit -c ./core/phpunit.xml.dist --debug ./modules/$MODULE/ --exclude-group=scheduler_js --filter '/^(?!.*(rules)).*/i';
-    fi
-
-  # Check for coding standards. First show the versions.
-  - composer config --no-plugins allow-plugins.composer/installers true
-  - composer config --no-plugins allow-plugins.drupal/core-project-message true
-  - composer config --no-plugins allow-plugins.drupal/core-vendor-hardening true
-  - composer show drupal/coder | egrep 'name |vers'
-  - composer show squizlabs/php_codesniffer | egrep 'name |vers'
-  - $DRUPAL_ROOT/vendor/bin/phpcs --version
-  - $DRUPAL_ROOT/vendor/bin/phpcs --config-show installed_paths
-
-  # Change into $MODULE directory to avoid having to add --standard=$DRUPAL_ROOT/modules/$MODULE/phpcs.xml.dist
-  - cd $DRUPAL_ROOT/modules/$MODULE
-
-  # List the standards and the sniffs that are used.
-  - $DRUPAL_ROOT/vendor/bin/phpcs -i
-  - $DRUPAL_ROOT/vendor/bin/phpcs -e
-
-  # Show the violations in detail, plus summary and source report.
-  - $DRUPAL_ROOT/vendor/bin/phpcs . --report-full --report-summary --report-source -s
diff --git a/.tugboat/config.yml b/.tugboat/config.yml
index 8b4fb5e324597aa119fb88f1f83647fc41ca05c6..3032fb53f0dfe0805ae961d67dd69c3095d45ace 100644
--- a/.tugboat/config.yml
+++ b/.tugboat/config.yml
@@ -1,3 +1,4 @@
+# cspell:ignore q0rban tugboatqa updatedb
 services:
   php:
     image: q0rban/tugboat-drupal:10
@@ -24,7 +25,7 @@ services:
         # Composer package repository.
         composer config repositories.tugboat vcs $TUGBOAT_ROOT
 
-        # Now we can require this module, specifing the branch name we created
+        # Now we can require this module, specifying the branch name we created
         # above that uses the $TUGBOAT_REPO_ID environment variable.
         composer require drupal/scheduler:dev-$TUGBOAT_REPO_ID
 
@@ -110,7 +111,7 @@ services:
 
         # Update this module, including all dependencies.
         composer update drupal/scheduler --with-all-dependencies
-        vendor/bin/drush --yes updb
+        vendor/bin/drush --yes updatedb
         vendor/bin/drush cache:rebuild
 
   mysql: