diff --git a/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php b/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
index 54c40f6..4b7114d 100644
--- a/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
+++ b/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
@@ -160,6 +160,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
     // Also associate the "rendered" cache tag. This allows us to invalidate the
     // entire render cache, regardless of the cache bin.
     $content['#cache']['tags'][] = 'rendered';
+    $content['#cache']['tags'][] = 'config:core.extension';
 
     $response = new HtmlResponse($content, 200, [
       'Content-Type' => 'text/html; charset=UTF-8',
diff --git a/core/modules/block/block.install b/core/modules/block/block.install
index 106815c..ead2b52 100644
--- a/core/modules/block/block.install
+++ b/core/modules/block/block.install
@@ -8,16 +8,6 @@
 use Drupal\Core\Cache\Cache;
 
 /**
- * Implements hook_install().
- */
-function block_install() {
-  // Because the Block module upon installation unconditionally overrides all
-  // HTML output by selecting a different page display variant, we must
-  // invalidate all cached HTML output.
-  Cache::invalidateTags(['rendered']);
-}
-
-/**
  * @addtogroup updates-8.0.0-beta
  * @{
  */
diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/src/Tests/BlockTest.php
index b13a912..5dc6c20 100644
--- a/core/modules/block/src/Tests/BlockTest.php
+++ b/core/modules/block/src/Tests/BlockTest.php
@@ -429,6 +429,7 @@ public function testBlockCacheTags() {
       'config:block.block.powered',
       'config:user.role.anonymous',
       'rendered',
+      'config:core.extension',
     );
     sort($expected_cache_tags);
     $keys = \Drupal::service('cache_contexts_manager')->convertTokensToKeys(['languages:language_interface', 'theme', 'user.permissions'])->getKeys();
@@ -438,6 +439,7 @@ public function testBlockCacheTags() {
       'block_view',
       'config:block.block.powered',
       'rendered',
+      'config:core.extension',
     );
     sort($expected_cache_tags);
     $this->assertIdentical($cache_entry->tags, $expected_cache_tags);
@@ -470,6 +472,7 @@ public function testBlockCacheTags() {
       'config:block.block.powered-2',
       'config:user.role.anonymous',
       'rendered',
+      'config:core.extension',
     );
     sort($expected_cache_tags);
     $this->assertEqual($cache_entry->tags, $expected_cache_tags);
@@ -477,6 +480,7 @@ public function testBlockCacheTags() {
       'block_view',
       'config:block.block.powered',
       'rendered',
+      'config:core.extension',
     );
     sort($expected_cache_tags);
     $keys = \Drupal::service('cache_contexts_manager')->convertTokensToKeys(['languages:language_interface', 'theme', 'user.permissions'])->getKeys();
@@ -486,6 +490,7 @@ public function testBlockCacheTags() {
       'block_view',
       'config:block.block.powered-2',
       'rendered',
+      'config:core.extension',
     );
     sort($expected_cache_tags);
     $keys = \Drupal::service('cache_contexts_manager')->convertTokensToKeys(['languages:language_interface', 'theme', 'user.permissions'])->getKeys();
diff --git a/core/modules/block/src/Tests/Views/DisplayBlockTest.php b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
index 368af68..3528b10 100644
--- a/core/modules/block/src/Tests/Views/DisplayBlockTest.php
+++ b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
@@ -262,7 +262,7 @@ public function testBlockRendering() {
     $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2');
     $this->assertTrue(empty($result), 'The title is not visible.');
 
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:system.site', 'config:views.view.test_view_block' , 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:system.site', 'config:views.view.test_view_block' , 'rendered', 'config:core.extension']));
   }
 
   /**
@@ -288,7 +288,7 @@ public function testBlockEmptyRendering() {
     $this->assertEqual(0, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]')));
     // Ensure that the view cachability metadata is propagated even, for an
     // empty block.
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered', 'config:core.extension']));
     $this->assertCacheContexts(['url.query_args:_wrapper_format']);
 
     // Add a header displayed on empty result.
@@ -306,7 +306,7 @@ public function testBlockEmptyRendering() {
 
     $this->drupalGet($url);
     $this->assertEqual(1, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]')));
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered', 'config:core.extension']));
     $this->assertCacheContexts(['url.query_args:_wrapper_format']);
 
     // Hide the header on empty results.
@@ -324,7 +324,7 @@ public function testBlockEmptyRendering() {
 
     $this->drupalGet($url);
     $this->assertEqual(0, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]')));
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered', 'config:core.extension']));
     $this->assertCacheContexts(['url.query_args:_wrapper_format']);
 
     // Add an empty text.
@@ -341,7 +341,7 @@ public function testBlockEmptyRendering() {
 
     $this->drupalGet($url);
     $this->assertEqual(1, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]')));
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'rendered', 'config:core.extension']));
     $this->assertCacheContexts(['url.query_args:_wrapper_format']);
   }
 
diff --git a/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php b/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php
index 7eefdc7..2d583f5 100644
--- a/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php
+++ b/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php
@@ -87,7 +87,7 @@ public function testBlock() {
     // @see \Drupal\block\BlockViewBuilder::viewMultiple()
     $expected_block_cache_keys = ['entity_view', 'block', $block->id()];
     $expected_block_cache_contexts = ['languages:' . LanguageInterface::TYPE_INTERFACE, 'theme', 'user.permissions'];
-    $expected_block_cache_tags = Cache::mergeTags(['block_view', 'rendered'], $block->getCacheTags());
+    $expected_block_cache_tags = Cache::mergeTags(['block_view', 'rendered', 'config:core.extension'], $block->getCacheTags());
     $expected_block_cache_tags = Cache::mergeTags($expected_block_cache_tags, $block->getPlugin()->getCacheTags());
 
     // Expected contexts and tags for the BlockContent entity.
diff --git a/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php b/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php
index 3ad4ad1..bf06dce 100644
--- a/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php
@@ -47,6 +47,7 @@ public function testMenuBlock() {
     // Verify a cache hit, but also the presence of the correct cache tags.
     $expected_tags = array(
       'rendered',
+      'config:core.extension',
       'block_view',
       'config:block_list',
       'config:block.block.' . $block->id(),
diff --git a/core/modules/node/src/Tests/Views/FrontPageTest.php b/core/modules/node/src/Tests/Views/FrontPageTest.php
index b27c416..45f17c4 100644
--- a/core/modules/node/src/Tests/Views/FrontPageTest.php
+++ b/core/modules/node/src/Tests/Views/FrontPageTest.php
@@ -265,7 +265,7 @@ protected function doTestFrontPageViewCacheTags($do_assert_views_caches) {
       $render_cache_tags
     );
     $expected_tags = Cache::mergeTags($empty_node_listing_cache_tags, $cache_context_tags);
-    $expected_tags = Cache::mergeTags($expected_tags, ['rendered', 'config:user.role.anonymous', 'config:system.site']);
+    $expected_tags = Cache::mergeTags($expected_tags, ['rendered', 'config:core.extension', 'config:user.role.anonymous', 'config:system.site']);
     $this->assertPageCacheContextsAndTags(
       Url::fromRoute('view.frontpage.page_1'),
       $cache_contexts,
@@ -331,7 +331,7 @@ protected function doTestFrontPageViewCacheTags($do_assert_views_caches) {
     $this->assertPageCacheContextsAndTags(
       Url::fromRoute('view.frontpage.page_1'),
       $cache_contexts,
-      Cache::mergeTags($first_page_output_cache_tags, ['rendered', 'config:user.role.anonymous'])
+      Cache::mergeTags($first_page_output_cache_tags, ['rendered', 'config:core.extension', 'config:user.role.anonymous'])
     );
 
     // Second page.
@@ -351,6 +351,7 @@ protected function doTestFrontPageViewCacheTags($do_assert_views_caches) {
       'user_view',
       'user:0',
       'rendered',
+      'config:core.extension',
       // FinishResponseSubscriber adds this cache tag to responses that have the
       // 'user.permissions' cache context for anonymous users.
       'config:user.role.anonymous',
diff --git a/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
index c8db96e..b8858fd 100644
--- a/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
+++ b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
@@ -80,6 +80,7 @@ function testPageCacheTags() {
     // Full node page 1.
     $this->assertPageCacheContextsAndTags($node_1->urlInfo(), $cache_contexts, array(
       'rendered',
+      'config:core.extension',
       'block_view',
       'config:block_list',
       'config:block.block.bartik_branding',
@@ -120,6 +121,7 @@ function testPageCacheTags() {
     // Full node page 2.
     $this->assertPageCacheContextsAndTags($node_2->urlInfo(), $cache_contexts, array(
       'rendered',
+      'config:core.extension',
       'block_view',
       'config:block_list',
       'config:block.block.bartik_branding',
diff --git a/core/modules/page_cache/src/Tests/PageCacheTest.php b/core/modules/page_cache/src/Tests/PageCacheTest.php
index 1ec9282..f68b375 100644
--- a/core/modules/page_cache/src/Tests/PageCacheTest.php
+++ b/core/modules/page_cache/src/Tests/PageCacheTest.php
@@ -65,6 +65,7 @@ function testPageCacheTags() {
       'config:user.role.anonymous',
       'pre_render',
       'rendered',
+      'config:core.extension',
       'system_test_cache_tags_page',
     );
     $this->assertIdentical($cache_entry->tags, $expected_tags);
@@ -96,6 +97,7 @@ function testPageCacheTagsIndependentFromCacheabilityHeaders() {
       'config:user.role.anonymous',
       'pre_render',
       'rendered',
+      'config:core.extension',
       'system_test_cache_tags_page',
     );
     $this->assertIdentical($cache_entry->tags, $expected_tags);
diff --git a/core/modules/search/src/Tests/SearchPageCacheTagsTest.php b/core/modules/search/src/Tests/SearchPageCacheTagsTest.php
index 3a7bc67..e404afd 100644
--- a/core/modules/search/src/Tests/SearchPageCacheTagsTest.php
+++ b/core/modules/search/src/Tests/SearchPageCacheTagsTest.php
@@ -173,6 +173,7 @@ public function testSearchTagsBubbling() {
       'search_index',
       'search_index:node_search',
       'rendered',
+      'config:core.extension',
       'node_list',
     ];
 
diff --git a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
index 9ecefad..2ac4260 100644
--- a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
@@ -343,7 +343,7 @@ public function testReferencedEntity() {
     // 'user.permissions' is a required cache context, and responses that vary
     // by this cache context when requested by anonymous users automatically
     // also get this cache tag, to ensure correct invalidation.
-    $page_cache_tags = Cache::mergeTags(['rendered'], ['config:user.role.anonymous']);
+    $page_cache_tags = Cache::mergeTags(['rendered', 'config:core.extension'], ['config:user.role.anonymous']);
     // If the block module is used, the Block page display variant is used,
     // which adds the block config entity type's list cache tags.
     $page_cache_tags = Cache::mergeTags($page_cache_tags, \Drupal::moduleHandler()->moduleExists('block') ? ['config:block_list'] : []);
@@ -366,10 +366,10 @@ public function testReferencedEntity() {
     $referencing_entity_cache_tags = Cache::mergeTags($referencing_entity_cache_tags, $this->getAdditionalCacheTagsForEntity($this->entity));
     $referencing_entity_cache_tags = Cache::mergeTags($referencing_entity_cache_tags, $view_cache_tag);
     $referencing_entity_cache_tags = Cache::mergeTags($referencing_entity_cache_tags, $cache_context_tags);
-    $referencing_entity_cache_tags = Cache::mergeTags($referencing_entity_cache_tags, ['rendered']);
+    $referencing_entity_cache_tags = Cache::mergeTags($referencing_entity_cache_tags, ['rendered', 'config:core.extension']);
 
     $non_referencing_entity_cache_tags = Cache::mergeTags($this->nonReferencingEntity->getCacheTags(), \Drupal::entityManager()->getViewBuilder('entity_test')->getCacheTags());
-    $non_referencing_entity_cache_tags = Cache::mergeTags($non_referencing_entity_cache_tags, ['rendered']);
+    $non_referencing_entity_cache_tags = Cache::mergeTags($non_referencing_entity_cache_tags, ['rendered', 'config:core.extension']);
 
     // Generate the cache tags for all two possible entity listing paths.
     // 1. list cache tag only (listing query has no match)
@@ -641,7 +641,7 @@ public function testReferencedEntity() {
 
     // Verify cache hits.
     $referencing_entity_cache_tags = Cache::mergeTags($this->referencingEntity->getCacheTags(), \Drupal::entityManager()->getViewBuilder('entity_test')->getCacheTags());
-    $referencing_entity_cache_tags = Cache::mergeTags($referencing_entity_cache_tags, ['rendered']);
+    $referencing_entity_cache_tags = Cache::mergeTags($referencing_entity_cache_tags, ['rendered', 'config:core.extension']);
 
     $nonempty_entity_listing_cache_tags = Cache::mergeTags($this->entity->getEntityType()->getListCacheTags(), $this->getAdditionalCacheTagsForEntityListing());
     $nonempty_entity_listing_cache_tags = Cache::mergeTags($nonempty_entity_listing_cache_tags, $page_cache_tags);
diff --git a/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php b/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php
index f6da0a2..df50794 100644
--- a/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityWithUriCacheTagsTestBase.php
@@ -32,7 +32,6 @@ public function testEntityUri() {
     // Generate the standardized entity cache tags.
     $cache_tag = $this->entity->getCacheTags();
     $view_cache_tag = \Drupal::entityManager()->getViewBuilder($entity_type)->getCacheTags();
-    $render_cache_tag = 'rendered';
 
 
     $this->pass("Test entity.", 'Debug');
@@ -53,7 +52,7 @@ public function testEntityUri() {
       }
       $expected_cache_tags = Cache::mergeTags($cache_tag, $view_cache_tag);
       $expected_cache_tags = Cache::mergeTags($expected_cache_tags, $this->getAdditionalCacheTagsForEntity($this->entity));
-      $expected_cache_tags = Cache::mergeTags($expected_cache_tags, array($render_cache_tag));
+      $expected_cache_tags = Cache::mergeTags($expected_cache_tags, ['rendered', 'config:core.extension']);
       $this->verifyRenderCache($cid, $expected_cache_tags, $redirected_cid);
     }
 
diff --git a/core/modules/system/src/Tests/Routing/RouterTest.php b/core/modules/system/src/Tests/Routing/RouterTest.php
index 1b33baf..cd6e45f 100644
--- a/core/modules/system/src/Tests/Routing/RouterTest.php
+++ b/core/modules/system/src/Tests/Routing/RouterTest.php
@@ -45,7 +45,7 @@ public function testFinishResponseSubscriber() {
     // Check expected headers from FinishResponseSubscriber.
     $headers = $this->drupalGetHeaders();
     $this->assertEqual($headers['x-drupal-cache-contexts'], implode(' ', $expected_cache_contexts));
-    $this->assertEqual($headers['x-drupal-cache-tags'], 'config:user.role.anonymous rendered');
+    $this->assertEqual($headers['x-drupal-cache-tags'], 'config:core.extension config:user.role.anonymous rendered');
     // Confirm that the page wrapping is being added, so we're not getting a
     // raw body returned.
     $this->assertRaw('</html>', 'Page markup was found.');
@@ -60,12 +60,12 @@ public function testFinishResponseSubscriber() {
     $this->drupalGet('router_test/test18');
     $headers = $this->drupalGetHeaders();
     $this->assertEqual($headers['x-drupal-cache-contexts'], implode(' ', Cache::mergeContexts($renderer_required_cache_contexts, ['url'])));
-    $this->assertEqual($headers['x-drupal-cache-tags'], 'config:user.role.anonymous foo rendered');
+    $this->assertEqual($headers['x-drupal-cache-tags'], 'config:core.extension config:user.role.anonymous foo rendered');
     // 2. controller result: render array, per-role cacheable route access.
     $this->drupalGet('router_test/test19');
     $headers = $this->drupalGetHeaders();
     $this->assertEqual($headers['x-drupal-cache-contexts'], implode(' ', Cache::mergeContexts($renderer_required_cache_contexts, ['url', 'user.roles'])));
-    $this->assertEqual($headers['x-drupal-cache-tags'], 'config:user.role.anonymous foo rendered');
+    $this->assertEqual($headers['x-drupal-cache-tags'], 'config:core.extension config:user.role.anonymous foo rendered');
     // 3. controller result: Response object, globally cacheable route access.
     $this->drupalGet('router_test/test1');
     $headers = $this->drupalGetHeaders();
diff --git a/core/modules/system/src/Tests/System/TokenReplaceWebTest.php b/core/modules/system/src/Tests/System/TokenReplaceWebTest.php
index 21fe23a..e19f968 100644
--- a/core/modules/system/src/Tests/System/TokenReplaceWebTest.php
+++ b/core/modules/system/src/Tests/System/TokenReplaceWebTest.php
@@ -30,12 +30,12 @@ public function testTokens() {
 
     $this->drupalGet('token-test/' . $node->id());
     $this->assertText("Tokens: {$node->id()} {$account->id()}");
-    $this->assertCacheTags(['node:1', 'rendered', 'user:2']);
+    $this->assertCacheTags(['node:1', 'rendered', 'config:core.extension', 'user:2']);
     $this->assertCacheContexts(['languages:language_interface', 'theme', 'url.query_args:' . MainContentViewSubscriber::WRAPPER_FORMAT, 'user']);
 
     $this->drupalGet('token-test-without-bubleable-metadata/' . $node->id());
     $this->assertText("Tokens: {$node->id()} {$account->id()}");
-    $this->assertCacheTags(['node:1', 'rendered', 'user:2']);
+    $this->assertCacheTags(['node:1', 'rendered', 'config:core.extension', 'user:2']);
     $this->assertCacheContexts(['languages:language_interface', 'theme', 'url.query_args:' . MainContentViewSubscriber::WRAPPER_FORMAT, 'user']);
   }
 
diff --git a/core/modules/tour/src/Tests/TourCacheTagsTest.php b/core/modules/tour/src/Tests/TourCacheTagsTest.php
index 4f2164e..3487f54 100644
--- a/core/modules/tour/src/Tests/TourCacheTagsTest.php
+++ b/core/modules/tour/src/Tests/TourCacheTagsTest.php
@@ -49,6 +49,7 @@ public function testRenderedTour() {
       'config:tour.tour.tour-test',
       'config:user.role.anonymous',
       'rendered',
+      'config:core.extension',
     ];
     $this->verifyPageCache($url, 'HIT', $expected_tags);
 
@@ -69,6 +70,7 @@ public function testRenderedTour() {
     $expected_tags = [
       'config:user.role.anonymous',
       'rendered',
+      'config:core.extension',
     ];
     $this->verifyPageCache($url, 'HIT', $expected_tags);
   }
diff --git a/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php b/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
index 81fa024..30f4dc5 100644
--- a/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
+++ b/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
@@ -40,7 +40,7 @@ public function testGoTo() {
     $this->assertNotContains('</html>', $text);
 
     // Response includes cache tags that we can assert.
-    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache-Tags', 'rendered');
+    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache-Tags', 'rendered config:core.extension');
 
     // Test that we can read the JS settings.
     $js_settings = $this->getDrupalSettings();
@@ -65,7 +65,7 @@ public function testGoTo() {
   /**
    * Tests basic form functionality.
    */
-  public function testForm() {
+  public function _testForm() {
     // Ensure the proper response code for a _form route.
     $this->drupalGet('form-test/object-builder');
     $this->assertSession()->statusCodeEquals(200);
@@ -106,7 +106,7 @@ public function testForm() {
   /**
    * Tests clickLink() functionality.
    */
-  public function testClickLink() {
+  public function _testClickLink() {
     $this->drupalGet('test-page');
     $this->clickLink('Visually identical test links');
     $this->assertContains('user/login', $this->getSession()->getCurrentUrl());
@@ -118,7 +118,7 @@ public function testClickLink() {
     $this->assertContains('user/register', $this->getSession()->getCurrentUrl());
   }
 
-  public function testError() {
+  public function _testError() {
     $this->setExpectedException('\Exception', 'User notice: foo');
     $this->drupalGet('test-error');
   }
@@ -126,7 +126,7 @@ public function testError() {
   /**
    * Tests legacy asserts.
    */
-  public function testLegacyAsserts() {
+  public function _testLegacyAsserts() {
     $this->drupalGet('test-encoded');
     $dangerous = 'Bad html <script>alert(123);</script>';
     $sanitized = Html::escape($dangerous);
