 core/config/schema/core.data_types.schema.yml      |   1 +
 .../Drupal/Core/Config/Schema/SchemaCheckTrait.php |  26 +++++
 .../block/tests/src/Functional/BlockTest.php       |   1 +
 .../tests/src/Kernel/BlockContentDeletionTest.php  |   2 +-
 .../ckeditor5/src/Plugin/Editor/CKEditor5.php      |   5 -
 .../tests/src/Functional/ImageUploadTest.php       |   6 +-
 .../src/Kernel/CKEditor5PluginManagerTest.php      |  14 +++
 .../tests/src/Kernel/SmartDefaultSettingsTest.php  |   7 ++
 .../ckeditor5/tests/src/Kernel/ValidatorsTest.php  |  39 +++++---
 .../config/install/config_test.validation.yml      |   1 +
 .../tests/src/Functional/ConfigImportAllTest.php   |   3 +
 .../src/Functional/ImageFieldDefaultImagesTest.php |   2 +-
 .../src/Kernel/DefaultsSectionStorageTest.php      |   2 +-
 .../Kernel/LayoutBuilderEntityViewDisplayTest.php  |   2 +-
 .../src/Kernel/OverridesSectionStorageTest.php     |   2 +-
 .../tests/src/Kernel/SectionListTestBase.php       |  18 ++--
 .../tests/src/Kernel/TranslatableFieldTest.php     |   2 +-
 .../layout_builder/tests/src/Unit/SectionTest.php  |  30 +++---
 .../media/config/install/media.settings.yml        |   2 +-
 core/modules/media/config/schema/media.schema.yml  |   1 +
 core/modules/media/media.install                   |  12 +++
 core/modules/media/tests/fixtures/update/media.php |  18 ++++
 .../MediaSettingsDefaultIframeDomainUpdateTest.php |  59 +++++++++++
 .../system/config/install/system.theme.global.yml  |   2 +-
 core/modules/system/system.install                 |  12 +++
 ...GlobalThemeSettingsDefaultLogoUrlUpdateTest.php |  44 +++++++++
 .../update/config/install/update.settings.yml      |   2 +-
 .../modules/update/config/schema/update.schema.yml |   1 +
 .../UpdateSettingsDefaultFetchUrlUpdateTest.php    | 109 +++++++++++++++++++++
 core/modules/update/update.install                 |  12 +++
 .../views/tests/src/Kernel/TestViewsTest.php       |   1 +
 .../tests/src/Functional/AreaEntityUITest.php      |   2 +-
 .../config/install/editor.editor.basic_html.yml    |   5 +
 .../config/install/editor.editor.full_html.yml     |   5 +
 .../config/install/system.theme.global.yml         |   2 +-
 .../minimal/config/install/system.theme.global.yml |   2 +-
 .../Drupal/KernelTests/Config/TypedConfigTest.php  |   7 +-
 .../KernelTests/Core/Config/DefaultConfigTest.php  |  76 --------------
 .../Core/Config/SchemaCheckTraitTest.php           |   5 +
 39 files changed, 411 insertions(+), 131 deletions(-)

diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index 4476e98d0c..0212b7ee2c 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -206,6 +206,7 @@ theme_settings:
           label: 'Logo path'
         url:
           type: uri
+          nullable: true
           label: 'URL'
         use_default:
           type: boolean
diff --git a/core/lib/Drupal/Core/Config/Schema/SchemaCheckTrait.php b/core/lib/Drupal/Core/Config/Schema/SchemaCheckTrait.php
index 431469c7fa..5230a2a7d7 100644
--- a/core/lib/Drupal/Core/Config/Schema/SchemaCheckTrait.php
+++ b/core/lib/Drupal/Core/Config/Schema/SchemaCheckTrait.php
@@ -9,6 +9,7 @@
 use Drupal\Core\TypedData\Type\StringInterface;
 use Drupal\Core\TypedData\Type\FloatInterface;
 use Drupal\Core\TypedData\Type\IntegerInterface;
+use Symfony\Component\Validator\ConstraintViolation;
 
 /**
  * Provides a trait for checking configuration schema.
@@ -57,6 +58,31 @@ public function checkConfigSchema(TypedConfigManagerInterface $typed_config, $co
       $errors[] = $this->checkValue($key, $value);
     }
     $errors = array_merge(...$errors);
+    // Also perform explicit validation. Note this does NOT require every node
+    // in the config schema tree to have validation constraints defined.
+    $violations = $this->schema->validate();
+    $ignored_validation_constraint_messages = [
+      // @see \Drupal\Core\Config\Plugin\Validation\Constraint\ConfigExistsConstraint::$message
+      // @todo Remove this in https://www.drupal.org/project/drupal/issues/3362453
+      "The '.*' config does not exist.",
+      // @see \Drupal\Core\Extension\Plugin\Validation\Constraint\ExtensionExistsConstraint::$moduleMessage
+      // @see \Drupal\Core\Extension\Plugin\Validation\Constraint\ExtensionExistsConstraint::$themeMessage
+      // @todo Remove this in https://www.drupal.org/project/drupal/issues/3362456
+      "Module '.*' is not installed.",
+      "Theme '.*' is not installed.",
+      // @see \Drupal\Core\Plugin\Plugin\Validation\Constraint\PluginExistsConstraint::$unknownPluginMessage
+      // @todo Remove this in https://www.drupal.org/project/drupal/issues/3362457
+      "The '.*' plugin does not exist.",
+    ];
+    $filtered_violations = array_filter(
+      iterator_to_array($violations),
+      fn (ConstraintViolation $v) => preg_match(sprintf("/^(%s)$/", implode('|', $ignored_validation_constraint_messages)), (string) $v->getMessage()) !== 1
+    );
+    $validation_errors = array_map(
+      fn (ConstraintViolation $v) => sprintf("[%s] %s", $v->getPropertyPath(), (string) $v->getMessage()),
+      $filtered_violations
+    );
+    $errors = array_merge($errors, $validation_errors);
     if (empty($errors)) {
       return TRUE;
     }
diff --git a/core/modules/block/tests/src/Functional/BlockTest.php b/core/modules/block/tests/src/Functional/BlockTest.php
index bc6fcded6f..1b31a09e38 100644
--- a/core/modules/block/tests/src/Functional/BlockTest.php
+++ b/core/modules/block/tests/src/Functional/BlockTest.php
@@ -580,6 +580,7 @@ public function testBlockUserRoleDelete() {
     $block = Block::create([
       'id' => $this->randomMachineName(),
       'plugin' => 'system_powered_by_block',
+      'theme' => 'stark',
     ]);
 
     $block->setVisibilityConfig('user_role', [
diff --git a/core/modules/block_content/tests/src/Kernel/BlockContentDeletionTest.php b/core/modules/block_content/tests/src/Kernel/BlockContentDeletionTest.php
index fe41695044..1a18d7d592 100644
--- a/core/modules/block_content/tests/src/Kernel/BlockContentDeletionTest.php
+++ b/core/modules/block_content/tests/src/Kernel/BlockContentDeletionTest.php
@@ -69,7 +69,7 @@ public function testDeletingBlockContentShouldClearPluginCache() {
     $block_content->save();
 
     $plugin_id = 'block_content' . PluginBase::DERIVATIVE_SEPARATOR . $block_content->uuid();
-    $block = $this->placeBlock($plugin_id, ['region' => 'content']);
+    $block = $this->placeBlock($plugin_id, ['region' => 'content', 'theme' => 'stark']);
 
     // Delete it via storage.
     $storage = $this->container->get('entity_type.manager')->getStorage('block_content');
diff --git a/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php b/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
index ab0d03d2c4..c9326b9752 100644
--- a/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
+++ b/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
@@ -12,7 +12,6 @@
 use Drupal\Component\Serialization\Json;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Config\Schema\SchemaCheckTrait;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Form\SubformState;
@@ -50,8 +49,6 @@
  */
 class CKEditor5 extends EditorBase implements ContainerFactoryPluginInterface {
 
-  use SchemaCheckTrait;
-
   /**
    * The CKEditor plugin manager.
    *
@@ -729,8 +726,6 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
     // ::getGeneratedAllowedHtmlValue(), to update filter_html's
     // "allowed_html".
     $form_state->set('ckeditor5_validated_pair', $eventual_editor_and_format);
-
-    assert(TRUE === $this->checkConfigSchema(\Drupal::getContainer()->get('config.typed'), 'editor.editor.id_does_not_matter', $submitted_editor->toArray()), 'Schema errors: ' . print_r($this->checkConfigSchema(\Drupal::getContainer()->get('config.typed'), 'editor.editor.id_does_not_matter', $submitted_editor->toArray()), TRUE));
   }
 
   /**
diff --git a/core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php b/core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php
index fdd7235e44..63834751f3 100644
--- a/core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php
+++ b/core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php
@@ -224,7 +224,11 @@ protected function createEditorWithUpload(array $upload_config) {
             'drupalInsertImage',
           ],
         ],
-        'plugins' => [],
+        'plugins' => [
+          'ckeditor5_imageResize' => [
+            'allow_resize' => FALSE,
+          ],
+        ],
       ],
       'image_upload' => $upload_config,
     ]);
diff --git a/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php b/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
index 9b8742b57c..c79185f538 100644
--- a/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
+++ b/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
@@ -82,6 +82,16 @@ protected function setUp(): void {
     $this->typedConfig = $this->container->get('config.typed');
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function enableModules(array $modules) {
+    parent::enableModules($modules);
+    // Ensure the CKEditor 5 plugin manager instance on the test reflects the
+    // status after the module is installed.
+    $this->manager = $this->container->get('plugin.manager.ckeditor5.plugin');
+  }
+
   /**
    * Mocks a module providing a CKEditor 5 plugin in VFS.
    *
@@ -1374,6 +1384,10 @@ public function providerTestProvidedElements(): array {
         ],
         'text_editor_settings' => [
           'plugins' => [],
+          // Deviate from the default toolbar items because that would cause
+          // the `ckeditor5_heading` plugin to be enabled.
+          // @see \Drupal\ckeditor5\Plugin\Editor\CKEditor5::getDefaultSettings()
+          'toolbar' => ['items' => ['bold', 'italic']],
         ],
         'expected_elements' => [
           'p' => [
diff --git a/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php b/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
index bf294d8375..38defa311c 100644
--- a/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
+++ b/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
@@ -498,6 +498,13 @@ public function test(string $format_id, array $filters_to_drop, array $expected_
 
     // Ensure that the result of ::computeSmartDefaultSettings() always complies
     // with the config schema.
+    // TRICKY: because we're validating using `editor.editor.*` as the config
+    // name, TextEditorObjectDependentValidatorTrait will load the stored filter
+    // format. That has not yet been updated at this point, so in order for
+    // validation to pass, it must first be saved.
+    // @see \Drupal\ckeditor5\Plugin\Validation\Constraint\TextEditorObjectDependentValidatorTrait::createTextEditorObjectFromContext()
+    // @todo Remove this work-around in https://www.drupal.org/project/drupal/issues/3231354
+    $updated_text_editor->getFilterFormat()->save();
     $this->assertConfigSchema(
       $this->typedConfig,
       $updated_text_editor->getConfigDependencyName(),
diff --git a/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php b/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
index 1f4c8a5327..da7983b645 100644
--- a/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
+++ b/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
@@ -580,16 +580,29 @@ public function testPair(array $ckeditor5_settings, array $editor_image_upload_s
       'label' => 'View Mode 2',
     ])->save();
     assert($text_editor instanceof EditorInterface);
-    $this->assertConfigSchema(
-      $this->typedConfig,
-      $text_editor->getConfigDependencyName(),
-      $text_editor->toArray()
-    );
     $text_format = FilterFormat::create([
+      'format' => $text_editor->id(),
+      'name' => $this->randomString(),
       'filters' => $filters,
     ]);
     assert($text_format instanceof FilterFormatInterface);
-
+    // TRICKY: only assert the config schema if we expect NO violations: when
+    // violations are expected, this would just find the very violations that
+    // the next assertion is checking.
+    if (empty($expected_violations)) {
+      // TRICKY: because we're validating using `editor.editor.*` as the config
+      // name, TextEditorObjectDependentValidatorTrait will load the stored
+      // filter format. That has not yet been updated at this point, so in order
+      // for validation to pass, it must first be saved.
+      // @see \Drupal\ckeditor5\Plugin\Validation\Constraint\TextEditorObjectDependentValidatorTrait::createTextEditorObjectFromContext()
+      // @todo Remove this work-around in https://www.drupal.org/project/drupal/issues/3231354
+      $text_format->save();
+      $this->assertConfigSchema(
+        $this->typedConfig,
+        $text_editor->getConfigDependencyName(),
+        $text_editor->toArray()
+      );
+    }
     $this->assertSame($expected_violations, $this->validatePairToViolationsArray($text_editor, $text_format, TRUE));
   }
 
@@ -1062,7 +1075,7 @@ public function providerPair(): array {
       'filters' => [],
       'violations' => [],
     ];
-    $data['INVALID: drupalMedia toolbar item condition NOT met: media filter enabled'] = [
+    $data['INVALID: drupalMedia toolbar item condition NOT met: media filter disabled'] = [
       'settings' => [
         'toolbar' => [
           'items' => [
@@ -1086,13 +1099,17 @@ public function providerPair(): array {
             'drupalMedia',
           ],
         ],
-        'plugins' => [],
+        'plugins' => [
+          'media_media' => [
+            'allow_view_mode_override' => FALSE,
+          ],
+        ],
       ],
       'image_upload' => [
         'status' => FALSE,
       ],
       'filters' => [
-        'filter_html' => [
+        'media_embed' => [
           'id' => 'media_embed',
           'provider' => 'media',
           'status' => TRUE,
@@ -1104,9 +1121,7 @@ public function providerPair(): array {
           ],
         ],
       ],
-      'violations' => [
-        'settings.toolbar.items.0' => 'The <em class="placeholder">Drupal media</em> toolbar item requires the <em class="placeholder">Embed media</em> filter to be enabled.',
-      ],
+      'violations' => [],
     ];
     $data['VALID: HTML format: very minimal toolbar + wildcard in source editing HTML'] = [
       'settings' => [
diff --git a/core/modules/config/tests/config_test/config/install/config_test.validation.yml b/core/modules/config/tests/config_test/config/install/config_test.validation.yml
index fa84ff392b..f86f480297 100644
--- a/core/modules/config/tests/config_test/config/install/config_test.validation.yml
+++ b/core/modules/config/tests/config_test/config/install/config_test.validation.yml
@@ -6,3 +6,4 @@ giraffe:
   hum1: hum1
   hum2: hum2
 uuid: '7C30C50E-641A-4E34-A7F1-46BCFB9BE5A3'
+langcode: en
diff --git a/core/modules/config/tests/src/Functional/ConfigImportAllTest.php b/core/modules/config/tests/src/Functional/ConfigImportAllTest.php
index c04c0eb9ac..10e6d47101 100644
--- a/core/modules/config/tests/src/Functional/ConfigImportAllTest.php
+++ b/core/modules/config/tests/src/Functional/ConfigImportAllTest.php
@@ -11,6 +11,9 @@
 /**
  * Tests the largest configuration import possible with all available modules.
  *
+ * Note that the use of SchemaCheckTestTrait means that the schema conformance
+ * of all default configuration is also tested.
+ *
  * @group config
  */
 class ConfigImportAllTest extends ModuleTestBase {
diff --git a/core/modules/image/tests/src/Functional/ImageFieldDefaultImagesTest.php b/core/modules/image/tests/src/Functional/ImageFieldDefaultImagesTest.php
index adac206549..2b47589546 100644
--- a/core/modules/image/tests/src/Functional/ImageFieldDefaultImagesTest.php
+++ b/core/modules/image/tests/src/Functional/ImageFieldDefaultImagesTest.php
@@ -204,7 +204,7 @@ public function testDefaultImages() {
 
     // Remove the field default from articles.
     $default_image_settings = $field->getSetting('default_image');
-    $default_image_settings['uuid'] = 0;
+    $default_image_settings['uuid'] = \Drupal::service('uuid')->generate();
     $field->setSetting('default_image', $default_image_settings);
     $field->save();
 
diff --git a/core/modules/layout_builder/tests/src/Kernel/DefaultsSectionStorageTest.php b/core/modules/layout_builder/tests/src/Kernel/DefaultsSectionStorageTest.php
index bfa49065b5..70b9df20f1 100644
--- a/core/modules/layout_builder/tests/src/Kernel/DefaultsSectionStorageTest.php
+++ b/core/modules/layout_builder/tests/src/Kernel/DefaultsSectionStorageTest.php
@@ -114,7 +114,7 @@ public function providerTestAccess() {
         'layout_onecol',
         [],
         [
-          'first-uuid' => new SectionComponent('first-uuid', 'content', ['id' => 'foo'], ['harold' => 'maude']),
+          '10000000-0000-1000-a000-000000000000' => new SectionComponent('10000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo'], ['harold' => 'maude']),
         ],
         ['layout_builder_defaults_test' => ['which_party' => 'third']]
       ),
diff --git a/core/modules/layout_builder/tests/src/Kernel/LayoutBuilderEntityViewDisplayTest.php b/core/modules/layout_builder/tests/src/Kernel/LayoutBuilderEntityViewDisplayTest.php
index 3d4d2052ec..53f61b49e3 100644
--- a/core/modules/layout_builder/tests/src/Kernel/LayoutBuilderEntityViewDisplayTest.php
+++ b/core/modules/layout_builder/tests/src/Kernel/LayoutBuilderEntityViewDisplayTest.php
@@ -37,7 +37,7 @@ protected function getSectionList(array $section_data) {
    */
   public function testInvalidConfiguration() {
     $this->expectException(SchemaIncompleteException::class);
-    $this->sectionList->getSection(0)->getComponent('first-uuid')->setConfiguration(['id' => 'foo', 'bar' => 'baz']);
+    $this->sectionList->getSection(0)->getComponent('10000000-0000-1000-a000-000000000000')->setConfiguration(['id' => 'foo', 'bar' => 'baz']);
     $this->sectionList->save();
   }
 
diff --git a/core/modules/layout_builder/tests/src/Kernel/OverridesSectionStorageTest.php b/core/modules/layout_builder/tests/src/Kernel/OverridesSectionStorageTest.php
index ef67ae87ac..f247117b26 100644
--- a/core/modules/layout_builder/tests/src/Kernel/OverridesSectionStorageTest.php
+++ b/core/modules/layout_builder/tests/src/Kernel/OverridesSectionStorageTest.php
@@ -119,7 +119,7 @@ public function testAccess($expected, $is_enabled, array $section_data, array $p
   public function providerTestAccess() {
     $section_data = [
       new Section('layout_onecol', [], [
-        'first-uuid' => new SectionComponent('first-uuid', 'content', ['id' => 'foo']),
+        '10000000-0000-1000-a000-000000000000' => new SectionComponent('10000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
     ];
 
diff --git a/core/modules/layout_builder/tests/src/Kernel/SectionListTestBase.php b/core/modules/layout_builder/tests/src/Kernel/SectionListTestBase.php
index a7388d205a..0a769bca3b 100644
--- a/core/modules/layout_builder/tests/src/Kernel/SectionListTestBase.php
+++ b/core/modules/layout_builder/tests/src/Kernel/SectionListTestBase.php
@@ -37,10 +37,10 @@ protected function setUp(): void {
 
     $section_data = [
       new Section('layout_test_plugin', [], [
-        'first-uuid' => new SectionComponent('first-uuid', 'content', ['id' => 'foo']),
+        '10000000-0000-1000-a000-000000000000' => new SectionComponent('10000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
       new Section('layout_test_plugin', ['setting_1' => 'bar'], [
-        'second-uuid' => new SectionComponent('second-uuid', 'content', ['id' => 'foo']),
+        '20000000-0000-1000-a000-000000000000' => new SectionComponent('20000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
     ];
     $this->sectionList = $this->getSectionList($section_data);
@@ -63,10 +63,10 @@ abstract protected function getSectionList(array $section_data);
   public function testGetSections() {
     $expected = [
       new Section('layout_test_plugin', ['setting_1' => 'Default'], [
-        'first-uuid' => new SectionComponent('first-uuid', 'content', ['id' => 'foo']),
+        '10000000-0000-1000-a000-000000000000' => new SectionComponent('10000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
       new Section('layout_test_plugin', ['setting_1' => 'bar'], [
-        'second-uuid' => new SectionComponent('second-uuid', 'content', ['id' => 'foo']),
+        '20000000-0000-1000-a000-000000000000' => new SectionComponent('20000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
     ];
     $this->assertSections($expected);
@@ -94,11 +94,11 @@ public function testGetSectionInvalidDelta() {
   public function testInsertSection() {
     $expected = [
       new Section('layout_test_plugin', ['setting_1' => 'Default'], [
-        'first-uuid' => new SectionComponent('first-uuid', 'content', ['id' => 'foo']),
+        '10000000-0000-1000-a000-000000000000' => new SectionComponent('10000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
       new Section('layout_onecol'),
       new Section('layout_test_plugin', ['setting_1' => 'bar'], [
-        'second-uuid' => new SectionComponent('second-uuid', 'content', ['id' => 'foo']),
+        '20000000-0000-1000-a000-000000000000' => new SectionComponent('20000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
     ];
 
@@ -112,10 +112,10 @@ public function testInsertSection() {
   public function testAppendSection() {
     $expected = [
       new Section('layout_test_plugin', ['setting_1' => 'Default'], [
-        'first-uuid' => new SectionComponent('first-uuid', 'content', ['id' => 'foo']),
+        '10000000-0000-1000-a000-000000000000' => new SectionComponent('10000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
       new Section('layout_test_plugin', ['setting_1' => 'bar'], [
-        'second-uuid' => new SectionComponent('second-uuid', 'content', ['id' => 'foo']),
+        '20000000-0000-1000-a000-000000000000' => new SectionComponent('20000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
       new Section('layout_onecol'),
     ];
@@ -156,7 +156,7 @@ public function providerTestRemoveAllSections() {
   public function testRemoveSection() {
     $expected = [
       new Section('layout_test_plugin', ['setting_1' => 'bar'], [
-        'second-uuid' => new SectionComponent('second-uuid', 'content', ['id' => 'foo']),
+        '20000000-0000-1000-a000-000000000000' => new SectionComponent('20000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
     ];
 
diff --git a/core/modules/layout_builder/tests/src/Kernel/TranslatableFieldTest.php b/core/modules/layout_builder/tests/src/Kernel/TranslatableFieldTest.php
index 68eb7cb61c..a61f302bcb 100644
--- a/core/modules/layout_builder/tests/src/Kernel/TranslatableFieldTest.php
+++ b/core/modules/layout_builder/tests/src/Kernel/TranslatableFieldTest.php
@@ -67,7 +67,7 @@ protected function setUp(): void {
   public function testSectionsClearedOnCreateTranslation() {
     $section_data = [
       new Section('layout_onecol', [], [
-        'first-uuid' => new SectionComponent('first-uuid', 'content', ['id' => 'foo']),
+        '10000000-0000-1000-a000-000000000000' => new SectionComponent('10000000-0000-1000-a000-000000000000', 'content', ['id' => 'foo']),
       ]),
     ];
     $entity = EntityTest::create([OverridesSectionStorage::FIELD_NAME => $section_data]);
diff --git a/core/modules/layout_builder/tests/src/Unit/SectionTest.php b/core/modules/layout_builder/tests/src/Unit/SectionTest.php
index 7e3c5b1302..65f65d6a6a 100644
--- a/core/modules/layout_builder/tests/src/Unit/SectionTest.php
+++ b/core/modules/layout_builder/tests/src/Unit/SectionTest.php
@@ -34,8 +34,8 @@ protected function setUp(): void {
       [],
       [
         new SectionComponent('existing-uuid', 'some-region', ['id' => 'existing-block-id']),
-        (new SectionComponent('second-uuid', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
-        (new SectionComponent('first-uuid', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
+        (new SectionComponent('20000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
+        (new SectionComponent('10000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
       ],
       [
         'bad_judgement' => ['blink_speed' => 'fast', 'spin_direction' => 'clockwise'],
@@ -52,8 +52,8 @@ protected function setUp(): void {
   public function testGetComponents() {
     $expected = [
       'existing-uuid' => (new SectionComponent('existing-uuid', 'some-region', ['id' => 'existing-block-id']))->setWeight(0),
-      'second-uuid' => (new SectionComponent('second-uuid', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
-      'first-uuid' => (new SectionComponent('first-uuid', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
+      '20000000-0000-1000-a000-000000000000' => (new SectionComponent('20000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
+      '10000000-0000-1000-a000-000000000000' => (new SectionComponent('10000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
     ];
 
     $this->assertComponents($expected, $this->section);
@@ -84,10 +84,10 @@ public function testGetComponent() {
   public function testRemoveComponent() {
     $expected = [
       'existing-uuid' => (new SectionComponent('existing-uuid', 'some-region', ['id' => 'existing-block-id']))->setWeight(0),
-      'second-uuid' => (new SectionComponent('second-uuid', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
+      '20000000-0000-1000-a000-000000000000' => (new SectionComponent('20000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
     ];
 
-    $this->section->removeComponent('first-uuid');
+    $this->section->removeComponent('10000000-0000-1000-a000-000000000000');
     $this->assertComponents($expected, $this->section);
   }
 
@@ -99,8 +99,8 @@ public function testRemoveComponent() {
   public function testAppendComponent() {
     $expected = [
       'existing-uuid' => (new SectionComponent('existing-uuid', 'some-region', ['id' => 'existing-block-id']))->setWeight(0),
-      'second-uuid' => (new SectionComponent('second-uuid', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
-      'first-uuid' => (new SectionComponent('first-uuid', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
+      '20000000-0000-1000-a000-000000000000' => (new SectionComponent('20000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
+      '10000000-0000-1000-a000-000000000000' => (new SectionComponent('10000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
       'new-uuid' => (new SectionComponent('new-uuid', 'some-region', []))->setWeight(1),
     ];
 
@@ -114,12 +114,12 @@ public function testAppendComponent() {
   public function testInsertAfterComponent() {
     $expected = [
       'existing-uuid' => (new SectionComponent('existing-uuid', 'some-region', ['id' => 'existing-block-id']))->setWeight(0),
-      'second-uuid' => (new SectionComponent('second-uuid', 'ordered-region', ['id' => 'second-block-id']))->setWeight(4),
-      'first-uuid' => (new SectionComponent('first-uuid', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
+      '20000000-0000-1000-a000-000000000000' => (new SectionComponent('20000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'second-block-id']))->setWeight(4),
+      '10000000-0000-1000-a000-000000000000' => (new SectionComponent('10000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
       'new-uuid' => (new SectionComponent('new-uuid', 'ordered-region', []))->setWeight(3),
     ];
 
-    $this->section->insertAfterComponent('first-uuid', new SectionComponent('new-uuid', 'ordered-region'));
+    $this->section->insertAfterComponent('10000000-0000-1000-a000-000000000000', new SectionComponent('new-uuid', 'ordered-region'));
     $this->assertComponents($expected, $this->section);
   }
 
@@ -148,8 +148,8 @@ public function testInsertAfterComponentInvalidUuid() {
   public function testInsertComponent() {
     $expected = [
       'existing-uuid' => (new SectionComponent('existing-uuid', 'some-region', ['id' => 'existing-block-id']))->setWeight(0),
-      'second-uuid' => (new SectionComponent('second-uuid', 'ordered-region', ['id' => 'second-block-id']))->setWeight(4),
-      'first-uuid' => (new SectionComponent('first-uuid', 'ordered-region', ['id' => 'first-block-id']))->setWeight(3),
+      '20000000-0000-1000-a000-000000000000' => (new SectionComponent('20000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'second-block-id']))->setWeight(4),
+      '10000000-0000-1000-a000-000000000000' => (new SectionComponent('10000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'first-block-id']))->setWeight(3),
       'new-uuid' => (new SectionComponent('new-uuid', 'ordered-region', []))->setWeight(2),
     ];
 
@@ -163,8 +163,8 @@ public function testInsertComponent() {
   public function testInsertComponentAppend() {
     $expected = [
       'existing-uuid' => (new SectionComponent('existing-uuid', 'some-region', ['id' => 'existing-block-id']))->setWeight(0),
-      'second-uuid' => (new SectionComponent('second-uuid', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
-      'first-uuid' => (new SectionComponent('first-uuid', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
+      '20000000-0000-1000-a000-000000000000' => (new SectionComponent('20000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'second-block-id']))->setWeight(3),
+      '10000000-0000-1000-a000-000000000000' => (new SectionComponent('10000000-0000-1000-a000-000000000000', 'ordered-region', ['id' => 'first-block-id']))->setWeight(2),
       'new-uuid' => (new SectionComponent('new-uuid', 'ordered-region', []))->setWeight(4),
     ];
 
diff --git a/core/modules/media/config/install/media.settings.yml b/core/modules/media/config/install/media.settings.yml
index 32c0935743..d0fb40c6e8 100644
--- a/core/modules/media/config/install/media.settings.yml
+++ b/core/modules/media/config/install/media.settings.yml
@@ -1,4 +1,4 @@
 icon_base_uri: 'public://media-icons/generic'
-iframe_domain: ''
+iframe_domain: ~
 oembed_providers_url: 'https://oembed.com/providers.json'
 standalone_url: false
diff --git a/core/modules/media/config/schema/media.schema.yml b/core/modules/media/config/schema/media.schema.yml
index b5322c9ccf..2f7da6f55e 100644
--- a/core/modules/media/config/schema/media.schema.yml
+++ b/core/modules/media/config/schema/media.schema.yml
@@ -7,6 +7,7 @@ media.settings:
       label: 'Full URI to a folder where the media icons will be installed'
     iframe_domain:
       type: uri
+      nullable: true
       label: 'Domain from which to serve oEmbed content in an iframe'
     oembed_providers_url:
       type: uri
diff --git a/core/modules/media/media.install b/core/modules/media/media.install
index 2744025810..40394b3afa 100644
--- a/core/modules/media/media.install
+++ b/core/modules/media/media.install
@@ -180,3 +180,15 @@ function media_requirements($phase) {
 function media_update_last_removed() {
   return 8700;
 }
+
+/**
+ * Updates media.settings:iframe_domain config if it's still at the default.
+ */
+function media_update_10200() {
+  $media_settings = \Drupal::configFactory()->getEditable('media.settings');
+  if ($media_settings->get('iframe_domain') === '') {
+    $media_settings
+      ->set('iframe_domain', NULL)
+      ->save(TRUE);
+  }
+}
diff --git a/core/modules/media/tests/fixtures/update/media.php b/core/modules/media/tests/fixtures/update/media.php
index df61cc34e5..895e1a3a06 100644
--- a/core/modules/media/tests/fixtures/update/media.php
+++ b/core/modules/media/tests/fixtures/update/media.php
@@ -50,3 +50,21 @@
   ->condition('name', 'existing_updates')
   ->execute();
 
+// Create media.settings.
+$connection->insert('config')
+  ->fields([
+    'collection',
+    'name',
+    'data',
+  ])
+  ->values([
+    'collection' => '',
+    'name' => 'media.settings',
+    'data' => serialize([
+      'icon_base_uri' => 'public://media-icons/generic',
+      'iframe_domain' => '',
+      'oembed_providers_url' => 'https://oembed.com/providers.json',
+      'standalone_url' => FALSE,
+    ]),
+  ])
+  ->execute();
diff --git a/core/modules/media/tests/src/Functional/Update/MediaSettingsDefaultIframeDomainUpdateTest.php b/core/modules/media/tests/src/Functional/Update/MediaSettingsDefaultIframeDomainUpdateTest.php
new file mode 100644
index 0000000000..0f12e6e5e5
--- /dev/null
+++ b/core/modules/media/tests/src/Functional/Update/MediaSettingsDefaultIframeDomainUpdateTest.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Drupal\Tests\media\Functional\Update;
+
+use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\Tests\UpdatePathTestTrait;
+
+/**
+ * Tests update of media.settings:iframe_domain if it's still the default of "".
+ *
+ * @group system
+ */
+class MediaSettingsDefaultIframeDomainUpdateTest extends UpdatePathTestBase {
+
+  use UpdatePathTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      DRUPAL_ROOT . '/core/modules/system/tests/fixtures/update/drupal-9.4.0.bare.standard.php.gz',
+      __DIR__ . '/../../../fixtures/update/media.php',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    // Because the test manually installs media module, the entity type config
+    // must be manually installed similar to kernel tests.
+    $entity_type_manager = \Drupal::entityTypeManager();
+    $media = $entity_type_manager->getDefinition('media');
+    \Drupal::service('entity_type.listener')->onEntityTypeCreate($media);
+    $media_type = $entity_type_manager->getDefinition('media_type');
+    \Drupal::service('entity_type.listener')->onEntityTypeCreate($media_type);
+  }
+
+  /**
+   * Tests update of media.settings:iframe_domain.
+   */
+  public function testUpdate() {
+    $iframe_domain_before = $this->config('media.settings')->get('iframe_domain');
+    $this->assertSame('', $iframe_domain_before);
+
+    $this->runUpdates();
+
+    $iframe_domain_after = $this->config('media.settings')->get('iframe_domain');
+    $this->assertNull($iframe_domain_after);
+  }
+
+}
diff --git a/core/modules/system/config/install/system.theme.global.yml b/core/modules/system/config/install/system.theme.global.yml
index b8da4238c2..598d6bd0cd 100644
--- a/core/modules/system/config/install/system.theme.global.yml
+++ b/core/modules/system/config/install/system.theme.global.yml
@@ -10,5 +10,5 @@ features:
   node_user_picture: true
 logo:
   path: ''
-  url: ''
+  url: ~
   use_default: true
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 635f152ea2..5bef092afd 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1813,3 +1813,15 @@ function system_update_10100(&$sandbox = NULL) {
   }
 
 }
+
+/**
+ * Updates system.theme.global:logo.url config if it's still at the default.
+ */
+function system_update_10200() {
+  $global_theme_settings = \Drupal::configFactory()->getEditable('system.theme.global');
+  if ($global_theme_settings->get('logo.url') === '') {
+    $global_theme_settings
+      ->set('logo.url', NULL)
+      ->save(TRUE);
+  }
+}
diff --git a/core/modules/system/tests/src/Functional/Update/GlobalThemeSettingsDefaultLogoUrlUpdateTest.php b/core/modules/system/tests/src/Functional/Update/GlobalThemeSettingsDefaultLogoUrlUpdateTest.php
new file mode 100644
index 0000000000..54316ff9ed
--- /dev/null
+++ b/core/modules/system/tests/src/Functional/Update/GlobalThemeSettingsDefaultLogoUrlUpdateTest.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Drupal\Tests\system\Functional\Update;
+
+use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\Tests\UpdatePathTestTrait;
+
+/**
+ * Tests update of system.theme.global:logo.url if it's still the default of "".
+ *
+ * @group system
+ */
+class GlobalThemeSettingsDefaultLogoUrlUpdateTest extends UpdatePathTestBase {
+
+  use UpdatePathTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      DRUPAL_ROOT . '/core/modules/system/tests/fixtures/update/drupal-9.4.0.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * Tests update of system.theme.global:logo.url.
+   */
+  public function testUpdate() {
+    $logo_url_before = $this->config('system.theme.global')->get('logo.url');
+    $this->assertSame('', $logo_url_before);
+
+    $this->runUpdates();
+
+    $logo_url_after = $this->config('system.theme.global')->get('logo.url');
+    $this->assertNull($logo_url_after);
+  }
+
+}
diff --git a/core/modules/update/config/install/update.settings.yml b/core/modules/update/config/install/update.settings.yml
index ded8c9d24c..2e4f3fb314 100644
--- a/core/modules/update/config/install/update.settings.yml
+++ b/core/modules/update/config/install/update.settings.yml
@@ -2,7 +2,7 @@ check:
   disabled_extensions: false
   interval_days: 1
 fetch:
-  url: ''
+  url: ~
   max_attempts: 2
   timeout: 30
 notification:
diff --git a/core/modules/update/config/schema/update.schema.yml b/core/modules/update/config/schema/update.schema.yml
index e9da9268e7..06eeb49c36 100644
--- a/core/modules/update/config/schema/update.schema.yml
+++ b/core/modules/update/config/schema/update.schema.yml
@@ -20,6 +20,7 @@ update.settings:
       mapping:
         url:
           type: uri
+          nullable: true
           label: 'URL for fetching available update data'
         max_attempts:
           type: integer
diff --git a/core/modules/update/tests/src/Functional/Update/UpdateSettingsDefaultFetchUrlUpdateTest.php b/core/modules/update/tests/src/Functional/Update/UpdateSettingsDefaultFetchUrlUpdateTest.php
new file mode 100644
index 0000000000..1d82f1d645
--- /dev/null
+++ b/core/modules/update/tests/src/Functional/Update/UpdateSettingsDefaultFetchUrlUpdateTest.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace Drupal\Tests\update\Functional\Update;
+
+use Drupal\Core\Database\Database;
+use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\Tests\UpdatePathTestTrait;
+
+/**
+ * Tests update of update.settings:fetch.url if it's still the default of "".
+ *
+ * @group system
+ */
+class UpdateSettingsDefaultFetchUrlUpdateTest extends UpdatePathTestBase {
+
+  use UpdatePathTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      DRUPAL_ROOT . '/core/modules/system/tests/fixtures/update/drupal-9.4.0.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    $connection = Database::getConnection();
+
+    // Set the schema version.
+    $connection->merge('key_value')
+      ->fields([
+        'value' => 'i:8001;',
+        'name' => 'update',
+        'collection' => 'system.schema',
+      ])
+      ->condition('collection', 'system.schema')
+      ->condition('name', 'update')
+      ->execute();
+
+    // Update core.extension.
+    $extensions = $connection->select('config')
+      ->fields('config', ['data'])
+      ->condition('collection', '')
+      ->condition('name', 'core.extension')
+      ->execute()
+      ->fetchField();
+    $extensions = unserialize($extensions);
+    $extensions['module']['update'] = 0;
+    $connection->update('config')
+      ->fields(['data' => serialize($extensions)])
+      ->condition('collection', '')
+      ->condition('name', 'core.extension')
+      ->execute();
+
+    // Create update.settings config.
+    $default_update_settings = [
+      'check' => [
+        'disabled_extensions' => FALSE,
+        'interval_days' => 1,
+      ],
+      'fetch' => [
+        'url' => '',
+        'max_attempts' => 2,
+        'timeout' => 30,
+      ],
+      'notification' => [
+        'emails' => [],
+        'threshold' => 'all',
+      ],
+    ];
+    $connection->insert('config')
+      ->fields([
+        'collection',
+        'name',
+        'data',
+      ])
+      ->values([
+        'collection' => '',
+        'name' => 'update.settings',
+        'data' => serialize($default_update_settings),
+      ])
+      ->execute();
+  }
+
+  /**
+   * Tests update of update.settings:fetch.url.
+   */
+  public function testUpdate() {
+    $fetch_url_before = $this->config('update.settings')->get('fetch.url');
+    $this->assertSame('', $fetch_url_before);
+
+    $this->runUpdates();
+
+    $fetch_url_after = $this->config('update.settings')->get('fetch.url');
+    $this->assertNull($fetch_url_after);
+  }
+
+}
diff --git a/core/modules/update/update.install b/core/modules/update/update.install
index b77654d622..a9140c44e8 100644
--- a/core/modules/update/update.install
+++ b/core/modules/update/update.install
@@ -175,3 +175,15 @@ function _update_requirement_check($project, $type) {
 function update_update_last_removed() {
   return 8001;
 }
+
+/**
+ * Updates update.settings:fetch.url config if it's still at the default.
+ */
+function update_update_10200() {
+  $update_settings = \Drupal::configFactory()->getEditable('update.settings');
+  if ($update_settings->get('fetch.url') === '') {
+    $update_settings
+      ->set('fetch.url', NULL)
+      ->save(TRUE);
+  }
+}
diff --git a/core/modules/views/tests/src/Kernel/TestViewsTest.php b/core/modules/views/tests/src/Kernel/TestViewsTest.php
index 7ca4d888b5..481e71c375 100644
--- a/core/modules/views/tests/src/Kernel/TestViewsTest.php
+++ b/core/modules/views/tests/src/Kernel/TestViewsTest.php
@@ -37,6 +37,7 @@ public function testDefaultConfig() {
       \Drupal::service('module_handler'),
       \Drupal::service('class_resolver')
     );
+    $typed_config->setValidationConstraintManager(\Drupal::service('validation.constraint'));
 
     // Create a configuration storage with access to default configuration in
     // every module, profile and theme.
diff --git a/core/modules/views_ui/tests/src/Functional/AreaEntityUITest.php b/core/modules/views_ui/tests/src/Functional/AreaEntityUITest.php
index c236fde718..a948fbc7ba 100644
--- a/core/modules/views_ui/tests/src/Functional/AreaEntityUITest.php
+++ b/core/modules/views_ui/tests/src/Functional/AreaEntityUITest.php
@@ -26,7 +26,7 @@ class AreaEntityUITest extends UITestBase {
 
   public function testUI() {
     // Set up a block and an entity_test entity.
-    $block = Block::create(['id' => 'test_id', 'plugin' => 'system_main_block']);
+    $block = Block::create(['id' => 'test_id', 'plugin' => 'system_main_block', 'theme' => 'stark']);
     $block->save();
 
     $entity_test = EntityTest::create(['bundle' => 'entity_test']);
diff --git a/core/profiles/demo_umami/config/install/editor.editor.basic_html.yml b/core/profiles/demo_umami/config/install/editor.editor.basic_html.yml
index bea27d77b9..2b1d2c54e0 100644
--- a/core/profiles/demo_umami/config/install/editor.editor.basic_html.yml
+++ b/core/profiles/demo_umami/config/install/editor.editor.basic_html.yml
@@ -33,6 +33,9 @@ settings:
         - heading4
         - heading5
         - heading6
+    ckeditor5_list:
+      reversed: false
+      startIndex: false
     ckeditor5_sourceEditing:
       allowed_tags:
         - '<cite>'
@@ -50,6 +53,8 @@ settings:
         - '<h6 id>'
         - '<img src alt data-entity-type data-entity-uuid data-align data-caption width height>'
         - '<drupal-media data-view-mode title>'
+    media_media:
+      allow_view_mode_override: false
 image_upload:
   status: false
   scheme: public
diff --git a/core/profiles/demo_umami/config/install/editor.editor.full_html.yml b/core/profiles/demo_umami/config/install/editor.editor.full_html.yml
index 7862acf65e..20161140e4 100644
--- a/core/profiles/demo_umami/config/install/editor.editor.full_html.yml
+++ b/core/profiles/demo_umami/config/install/editor.editor.full_html.yml
@@ -38,8 +38,13 @@ settings:
         - heading4
         - heading5
         - heading6
+    ckeditor5_list:
+      reversed: false
+      startIndex: false
     ckeditor5_sourceEditing:
       allowed_tags: {  }
+    media_media:
+      allow_view_mode_override: false
 image_upload:
   status: true
   scheme: public
diff --git a/core/profiles/demo_umami/config/install/system.theme.global.yml b/core/profiles/demo_umami/config/install/system.theme.global.yml
index 52e499a993..70080454c8 100644
--- a/core/profiles/demo_umami/config/install/system.theme.global.yml
+++ b/core/profiles/demo_umami/config/install/system.theme.global.yml
@@ -10,5 +10,5 @@ features:
   node_user_picture: true
 logo:
   path: ''
-  url: ''
+  url: ~
   use_default: true
diff --git a/core/profiles/minimal/config/install/system.theme.global.yml b/core/profiles/minimal/config/install/system.theme.global.yml
index 0fdc4b977e..243194347b 100644
--- a/core/profiles/minimal/config/install/system.theme.global.yml
+++ b/core/profiles/minimal/config/install/system.theme.global.yml
@@ -10,5 +10,5 @@ features:
   node_user_picture: false
 logo:
   path: ''
-  url: ''
+  url: ~
   use_default: true
diff --git a/core/tests/Drupal/KernelTests/Config/TypedConfigTest.php b/core/tests/Drupal/KernelTests/Config/TypedConfigTest.php
index adba8b8e0b..47bd91b1e0 100644
--- a/core/tests/Drupal/KernelTests/Config/TypedConfigTest.php
+++ b/core/tests/Drupal/KernelTests/Config/TypedConfigTest.php
@@ -24,6 +24,11 @@ class TypedConfigTest extends KernelTestBase {
    */
   protected static $modules = ['config_test'];
 
+  /**
+   * {@inheritdoc}
+   */
+  protected static $configSchemaCheckerExclusions = ['config_test.validation'];
+
   /**
    * {@inheritdoc}
    */
@@ -86,7 +91,7 @@ public function testTypedDataAPI() {
     $typed_config_manager = \Drupal::service('config.typed');
     $typed_config = $typed_config_manager->createFromNameAndData('config_test.validation', \Drupal::configFactory()->get('config_test.validation')->get());
     $this->assertInstanceOf(TypedConfigInterface::class, $typed_config);
-    $this->assertEquals(['_core', 'llama', 'cat', 'giraffe', 'uuid'], array_keys($typed_config->getElements()));
+    $this->assertEquals(['_core', 'llama', 'cat', 'giraffe', 'uuid', 'langcode'], array_keys($typed_config->getElements()));
 
     $config_test_entity = \Drupal::entityTypeManager()->getStorage('config_test')->create([
       'id' => 'asterix',
diff --git a/core/tests/Drupal/KernelTests/Core/Config/DefaultConfigTest.php b/core/tests/Drupal/KernelTests/Core/Config/DefaultConfigTest.php
deleted file mode 100644
index 483d104c8c..0000000000
--- a/core/tests/Drupal/KernelTests/Core/Config/DefaultConfigTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace Drupal\KernelTests\Core\Config;
-
-use Drupal\Tests\SchemaCheckTestTrait;
-use Drupal\config_test\TestInstallStorage;
-use Drupal\Core\Config\InstallStorage;
-use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\KernelTests\KernelTestBase;
-use Symfony\Component\DependencyInjection\Reference;
-
-/**
- * Tests that default configuration provided by all modules matches schema.
- *
- * @group config
- */
-class DefaultConfigTest extends KernelTestBase {
-
-  use SchemaCheckTestTrait;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  protected static $modules = ['system', 'config_test'];
-
-  /**
-   * Config files to be ignored by this test.
-   *
-   * @var array
-   */
-  protected $toSkip = [
-    // Skip files provided by the config_schema_test module since that module
-    // is explicitly for testing schema.
-    'config_schema_test.ignore',
-    'config_schema_test.noschema',
-    'config_schema_test.plugin_types',
-    'config_schema_test.someschema.somemodule.section_one.subsection',
-    'config_schema_test.someschema.somemodule.section_two.subsection',
-    'config_schema_test.someschema.with_parents',
-    'config_schema_test.someschema',
-  ];
-
-  /**
-   * {@inheritdoc}
-   */
-  public function register(ContainerBuilder $container) {
-    parent::register($container);
-    $container->register('default_config_test.schema_storage')
-      ->setClass('\Drupal\config_test\TestInstallStorage')
-      ->addArgument(InstallStorage::CONFIG_SCHEMA_DIRECTORY);
-
-    $definition = $container->getDefinition('config.typed');
-    $definition->replaceArgument(1, new Reference('default_config_test.schema_storage'));
-  }
-
-  /**
-   * Tests default configuration data type.
-   */
-  public function testDefaultConfig() {
-    $typed_config = \Drupal::service('config.typed');
-    // Create a configuration storage with access to default configuration in
-    // every module, profile and theme.
-    $default_config_storage = new TestInstallStorage();
-    foreach ($default_config_storage->listAll() as $config_name) {
-      if (in_array($config_name, $this->toSkip)) {
-        continue;
-      }
-
-      $data = $default_config_storage->read($config_name);
-      $this->assertConfigSchema($typed_config, $config_name, $data);
-    }
-  }
-
-}
diff --git a/core/tests/Drupal/KernelTests/Core/Config/SchemaCheckTraitTest.php b/core/tests/Drupal/KernelTests/Core/Config/SchemaCheckTraitTest.php
index 97699eeb99..bd89523a54 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/SchemaCheckTraitTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/SchemaCheckTraitTest.php
@@ -56,9 +56,14 @@ public function testTrait() {
     $config_data['boolean'] = [];
     $ret = $this->checkConfigSchema($this->typedConfig, 'config_test.types', $config_data);
     $expected = [
+      // Storage type check errors.
+      // @see \Drupal\Core\Config\Schema\SchemaCheckTrait::checkValue()
       'config_test.types:new_key' => 'missing schema',
       'config_test.types:new_array' => 'missing schema',
       'config_test.types:boolean' => 'non-scalar value but not defined as an array (such as mapping or sequence)',
+      // Validation constraints violations.
+      // @see \Drupal\Core\TypedData\TypedDataInterface::validate()
+      '0' => '[boolean] This value should be of the correct primitive type.',
     ];
     $this->assertEquals($expected, $ret);
   }
