diff --git a/.gitattributes b/.gitattributes
index 10d01cfed4336717d075cb05c5faf7e5f436568a..c6e40acb9455ba2c3d6272ffa5a71d75ba977a78 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,8 +1,8 @@
 /acquia-pipelines.yml export-ignore
-/behat.yml export-ignore
 /drush.yml export-ignore
 /grumphp.yml export-ignore
 /hooks export-ignore
+/logs export-ignore
 /phpunit.xml export-ignore
 /settings.local.php export-ignore
 /*.sh export-ignore
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 07486a837136a696d400d34f2632bb6c79920b6e..a4d55c05fa6966691da87d0f3c30c1624a60f9b6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.12.0
+* Hotfixed a bug that could prevent tests from running under SimpleTest. There
+  are no user-facing changes in this version.
+
 ## 3.11.0
 * Added support for Drupal core 8.8.x.
 
diff --git a/logs/8.x-1.0-rc1.md b/logs/1.0.0-rc1.md
similarity index 100%
rename from logs/8.x-1.0-rc1.md
rename to logs/1.0.0-rc1.md
diff --git a/logs/8.x-1.0-rc2.md b/logs/1.0.0-rc2.md
similarity index 100%
rename from logs/8.x-1.0-rc2.md
rename to logs/1.0.0-rc2.md
diff --git a/logs/8.x-1.0.md b/logs/1.0.0.md
similarity index 100%
rename from logs/8.x-1.0.md
rename to logs/1.0.0.md
diff --git a/logs/8.x-1.1.md b/logs/1.1.0.md
similarity index 100%
rename from logs/8.x-1.1.md
rename to logs/1.1.0.md
diff --git a/logs/8.x-1.2.md b/logs/1.2.0.md
similarity index 100%
rename from logs/8.x-1.2.md
rename to logs/1.2.0.md
diff --git a/logs/8.x-2.0-rc1.md b/logs/2.0.0-rc1.md
similarity index 100%
rename from logs/8.x-2.0-rc1.md
rename to logs/2.0.0-rc1.md
diff --git a/logs/8.x-2.0-rc2.md b/logs/2.0.0-rc2.md
similarity index 100%
rename from logs/8.x-2.0-rc2.md
rename to logs/2.0.0-rc2.md
diff --git a/logs/8.x-2.0.md b/logs/2.0.0.md
similarity index 100%
rename from logs/8.x-2.0.md
rename to logs/2.0.0.md
diff --git a/logs/8.x-2.2.md b/logs/2.2.0.md
similarity index 100%
rename from logs/8.x-2.2.md
rename to logs/2.2.0.md
diff --git a/logs/8.x-2.3.md b/logs/2.3.0.md
similarity index 100%
rename from logs/8.x-2.3.md
rename to logs/2.3.0.md
diff --git a/logs/8.x-2.4.md b/logs/2.4.0.md
similarity index 100%
rename from logs/8.x-2.4.md
rename to logs/2.4.0.md
diff --git a/logs/8.x-3.0.md b/logs/3.0.0.md
similarity index 100%
rename from logs/8.x-3.0.md
rename to logs/3.0.0.md
diff --git a/logs/8.x-3.1.md b/logs/3.1.0.md
similarity index 100%
rename from logs/8.x-3.1.md
rename to logs/3.1.0.md
diff --git a/logs/8.x-3.10.md b/logs/3.10.0.md
similarity index 100%
rename from logs/8.x-3.10.md
rename to logs/3.10.0.md
diff --git a/logs/8.x-3.11.md b/logs/3.11.0.md
similarity index 100%
rename from logs/8.x-3.11.md
rename to logs/3.11.0.md
diff --git a/logs/3.12.0.md b/logs/3.12.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..1d0bda4fe1e31a7548359b7e87697babf048da91
--- /dev/null
+++ b/logs/3.12.0.md
@@ -0,0 +1,3 @@
+## 3.12.0
+* Hotfixed a bug that could prevent tests from running under SimpleTest. There
+  are no user-facing changes in this version.
diff --git a/logs/8.x-3.2.md b/logs/3.2.0.md
similarity index 100%
rename from logs/8.x-3.2.md
rename to logs/3.2.0.md
diff --git a/logs/8.x-3.3.md b/logs/3.3.0.md
similarity index 100%
rename from logs/8.x-3.3.md
rename to logs/3.3.0.md
diff --git a/logs/8.x-3.4.md b/logs/3.4.0.md
similarity index 100%
rename from logs/8.x-3.4.md
rename to logs/3.4.0.md
diff --git a/logs/8.x-3.5.md b/logs/3.5.0.md
similarity index 100%
rename from logs/8.x-3.5.md
rename to logs/3.5.0.md
diff --git a/logs/8.x-3.6.md b/logs/3.6.0.md
similarity index 100%
rename from logs/8.x-3.6.md
rename to logs/3.6.0.md
diff --git a/logs/8.x-3.7.md b/logs/3.7.0.md
similarity index 100%
rename from logs/8.x-3.7.md
rename to logs/3.7.0.md
diff --git a/logs/8.x-3.8.md b/logs/3.8.0.md
similarity index 100%
rename from logs/8.x-3.8.md
rename to logs/3.8.0.md
diff --git a/logs/8.x-3.9.md b/logs/3.9.0.md
similarity index 100%
rename from logs/8.x-3.9.md
rename to logs/3.9.0.md
diff --git a/make-fixture.sh b/make-fixture.sh
index 9706cabc96306a8287a7acaca8b67a716a60e63e..7ee733a21a4a1fa0bfa81d01a0c458eefa94a822 100755
--- a/make-fixture.sh
+++ b/make-fixture.sh
@@ -8,13 +8,15 @@ if [[ $BRANCH != release/* ]]; then
 fi
 
 VERSION=${BRANCH#release/}
+# Ask git for the most recent semantic version tag, and use it as the version
+# from which to update.
+FROM=$(git tag --list --sort -creatordate | head -n 2 | grep -E '^(\d+.?){3}$')
 
 ./install-drupal.sh
 
-# Destroy the database.
+# Destroy the database and importing the fixture from which to update.
+echo "Replacing database with $FROM snapshot..."
 drush sql:drop --yes
-
-# Import the fixture from which to update.
 cd docroot
 php core/scripts/db-tools.php import ../tests/fixtures/$FROM.php.gz
 cd ..
diff --git a/release-branch.sh b/release-branch.sh
new file mode 100755
index 0000000000000000000000000000000000000000..26a07533f41354cae53dfe34bf0b2d607477cf71
--- /dev/null
+++ b/release-branch.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# Prepares a release branch.
+# Example usage: DB_URL=mysql://user:password@server/db ./release-branch.sh 3.12.0
+
+RELEASE_BRANCH=release/$1
+
+# Ensure we are on a mainline release branch.
+BRANCH=$(git rev-parse --abbrev-ref HEAD)
+
+if [[ $BRANCH =~ ^8\.x\-[0-9]+\.x$ ]]; then
+  CHANGE_LOG=logs/$1.md
+
+  if [[ ! -f $CHANGE_LOG ]]; then
+    echo "$CHANGE_LOG must exist before creating a release branch."
+    exit 1
+  fi
+
+  git pull
+  git fetch origin --tags
+  git checkout -b $RELEASE_BRANCH
+
+  cd logs
+  ./generate.sh > ../CHANGELOG.md
+  cd ..
+
+  composer update
+  ./make-fixture.sh
+
+  git add .
+  git commit --quiet --message "$1 Release"
+  git push --set-upstream origin $RELEASE_BRANCH
+else
+  echo "This can only be done from a mainline release branch, e.g. 8.x-4.x."
+  exit 1
+fi
diff --git a/release.sh b/release.sh
index bf09dfc74af69ddeea18a7122378b17d64aefe0d..cab744a443f650d841523764c9ff1b4f8b9ba034 100755
--- a/release.sh
+++ b/release.sh
@@ -1,16 +1,20 @@
 #!/bin/bash
 
 # Tags and pushes a release to origin and drupal.org.
-# Example usage: ./release.sh 2.2.0 8.x-2.2
+# Example usage: ./release.sh 2.2.0
 
-SEMANTIC_VERSION=$1
-DRUPAL_VERSION=$2
+DRUPAL_VERSION=8.x-${1%.0}
 
 PROJECT=${PWD##*/}
-RELEASE_BRANCH=release/$SEMANTIC_VERSION
+RELEASE_BRANCH=release/$1
 
 MARKDOWN=`command -v markdown`
 
+# Since this script does things that are pretty permanent, give the user 5
+# seconds to cancel without consequences.
+echo "Tagging $DRUPAL_VERSION from $RELEASE_BRANCH in 5 seconds..."
+sleep 5
+
 # Ensure we are on a mainline release branch.
 BRANCH=$(git rev-parse --abbrev-ref HEAD)
 
@@ -18,7 +22,7 @@ if [[ $BRANCH =~ ^8\.x\-[0-9]+\.x$ ]]; then
   git remote add drupal-org git@git.drupal.org:project/$PROJECT.git
 
   git merge --squash $RELEASE_BRANCH
-  git commit --all --quiet --message "$SEMANTIC_VERSION Release"
+  git commit --all --quiet --message "$1 Release"
   git push --quiet origin
   git push --quiet drupal-org
   echo "Merged $RELEASE_BRANCH and pushed to origin and drupal.org."
@@ -26,9 +30,9 @@ if [[ $BRANCH =~ ^8\.x\-[0-9]+\.x$ ]]; then
   git branch -D $RELEASE_BRANCH
   git push origin :$RELEASE_BRANCH
 
-  git tag $SEMANTIC_VERSION
-  git push --quiet origin $SEMANTIC_VERSION
-  echo "Tagged $SEMANTIC_VERSION and pushed to origin."
+  git tag $1
+  git push --quiet origin $1
+  echo "Tagged $1 and pushed to origin."
 
   git tag $DRUPAL_VERSION
   git push --quiet drupal-org $DRUPAL_VERSION
diff --git a/tests/fixtures/3.12.0.php.gz b/tests/fixtures/3.12.0.php.gz
new file mode 100644
index 0000000000000000000000000000000000000000..41fadc9897e0bf54591f708f628defcf2a96cb90
Binary files /dev/null and b/tests/fixtures/3.12.0.php.gz differ
diff --git a/tests/src/FunctionalJavascript/ModerationSidebarTest.php b/tests/src/FunctionalJavascript/ModerationSidebarTest.php
index 824e59bbdaf64e908595748613a8028d50cd9d2c..ccbd0863aae711a4d9f47ac5ac4134b6d860c3c0 100644
--- a/tests/src/FunctionalJavascript/ModerationSidebarTest.php
+++ b/tests/src/FunctionalJavascript/ModerationSidebarTest.php
@@ -6,6 +6,8 @@ use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 
 /**
  * Tests Lightning Workflow's integration with Moderation Sidebar.
+ *
+ * @group lightning_workflow
  */
 class ModerationSidebarTest extends WebDriverTestBase {