diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampAgoFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampAgoFormatter.php
index 6c95546..04f96fa 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampAgoFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampAgoFormatter.php
@@ -23,7 +23,7 @@
  *   field_types = {
  *     "timestamp",
  *     "created",
- *     "updated",
+ *     "changed",
  *   }
  * )
  */
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php
index 6861a00..c39b4cf 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php
@@ -19,6 +19,7 @@
  *   field_types = {
  *     "timestamp",
  *     "created",
+ *     "changed",
  *   }
  * )
  */
diff --git a/core/modules/field/src/Tests/FieldDefinitionIntegrityTest.php b/core/modules/field/src/Tests/FieldDefinitionIntegrityTest.php
new file mode 100644
index 0000000..6dff86e
--- /dev/null
+++ b/core/modules/field/src/Tests/FieldDefinitionIntegrityTest.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Tests\FieldDefinitionIntegrityTest.
+ */
+
+namespace Drupal\field\Tests;
+
+use Drupal\simpletest\KernelTestBase;
+
+/**
+ * Tests the integrity of field API plugin definitions.
+ *
+ * @group field
+ */
+class FieldDefinitionIntegrityTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Enable all modules in the system, so we can test their field plugins.
+    $module_names = [];
+    $modules = system_rebuild_module_data();
+    foreach ($modules as $module) {
+      $module_names[] = $module->getName();
+    }
+    $this->enableModules($module_names);
+  }
+
+  /**
+   * Tests the integrity of field plugin definitions.
+   */
+  public function testFieldPluginDefinitionIntegrity() {
+    // Load the IDs of all available field type plugins.
+    $available_field_type_ids = [];
+    /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_type_manager */
+    $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
+    foreach ($field_type_manager->getDefinitions() as $definition) {
+      $available_field_type_ids[] = $definition['id'];
+    }
+
+    // Test the field widget plugins.
+    /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_widget_manager */
+    $field_widget_manager = \Drupal::service('plugin.manager.field.widget');
+    foreach ($field_widget_manager->getDefinitions() as $definition) {
+      $missing_field_type_ids = array_diff($definition['field_types'], $available_field_type_ids);
+      if ($missing_field_type_ids) {
+        $this->fail(sprintf('Field widget %s integrates with non-existent field types: %s', $definition['id'], implode(', ', $missing_field_type_ids)));
+      }
+    }
+
+    // Test the field formatter plugins.
+    /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_formatter_manager */
+    $field_formatter_manager = \Drupal::service('plugin.manager.field.formatter');
+    foreach ($field_formatter_manager->getDefinitions() as $definition) {
+      $missing_field_type_ids = array_diff($definition['field_types'], $available_field_type_ids);
+      if ($missing_field_type_ids) {
+        $this->fail(sprintf('Field formatter %s integrates with non-existent field types: %s', $definition['id'], implode(', ', $missing_field_type_ids)));
+      }
+    }
+  }
+
+}
