diff --git a/automatic_updates_extensions/src/ExtensionUpdater.php b/automatic_updates_extensions/src/ExtensionUpdater.php
index e88a5693255b06daaedbcce9b53771b8539734bd..c40d4b7c0f1719ab18360f78a0076d983755e1b7 100644
--- a/automatic_updates_extensions/src/ExtensionUpdater.php
+++ b/automatic_updates_extensions/src/ExtensionUpdater.php
@@ -37,7 +37,7 @@ class ExtensionUpdater extends Stage {
     foreach ($project_versions as $project_name => $version) {
       $package = "drupal/$project_name";
       $group = array_key_exists($package, $require_dev) ? 'dev' : 'production';
-      $package_versions[$group][$package] = $version;
+      $package_versions[$group][$package] = static::convertToSemanticVersion($version);
     }
 
     // Ensure that package versions are available to pre-create event
@@ -92,4 +92,28 @@ class ExtensionUpdater extends Stage {
     }
   }
 
+  /**
+   * Converts version numbers to semantic versions if needed.
+   *
+   * @param string $project_version
+   *   The version number.
+   *
+   * @return string
+   *   The version number, converted if needed.
+   */
+  private static function convertToSemanticVersion(string $project_version): string {
+    if (stripos($project_version, '8.x-') === 0) {
+      $project_version = substr($project_version, 4);
+      $version_parts = explode('-', $project_version);
+      $project_version = $version_parts[0] . '.0';
+      if (count($version_parts) === 2) {
+        $project_version .= '-' . $version_parts[1];
+      }
+      return $project_version;
+    }
+    else {
+      return $project_version;
+    }
+  }
+
 }
diff --git a/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php b/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
index abfd48db7537c947aef5c8671f3349ce38ba583e..fd5cc781e88148719ed78d52c2f67d2f8992b19c 100644
--- a/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
+++ b/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
@@ -47,7 +47,9 @@ class ExtensionUpdaterTest extends AutomaticUpdatesKernelTestBase {
 
     $id = $this->container->get('automatic_updates_extensions.updater')->begin([
       'my_module' => '9.8.1',
-      'my_dev_module' => '9.8.2',
+      // Use a legacy version number to ensure they are converted to semantic
+      // version numbers which will work with the drupal.org Composer facade.
+      'my_dev_module' => '8.x-1.2-alpha1',
     ]);
     // Rebuild the container to ensure the package versions are persisted.
     /** @var \Drupal\Core\DrupalKernel $kernel */
@@ -66,7 +68,7 @@ class ExtensionUpdaterTest extends AutomaticUpdatesKernelTestBase {
         'drupal/my_module' => '9.8.1',
       ],
       'dev' => [
-        'drupal/my_dev_module' => '9.8.2',
+        'drupal/my_dev_module' => '1.2.0-alpha1',
       ],
     ];
     $this->assertSame($expected_versions, $extension_updater->claim($id)->getPackageVersions());
@@ -90,13 +92,13 @@ class ExtensionUpdaterTest extends AutomaticUpdatesKernelTestBase {
         'require',
         '--dev',
         '--no-update',
-        'drupal/my_dev_module:9.8.2',
+        'drupal/my_dev_module:1.2.0-alpha1',
       ],
       [
         'update',
         '--with-all-dependencies',
         'drupal/my_module:9.8.1',
-        'drupal/my_dev_module:9.8.2',
+        'drupal/my_dev_module:1.2.0-alpha1',
       ],
     ];
     $extension_updater->stage();