Change record status: 
Project: 
Introduced in branch: 
8.0.x
Introduced in version: 
8.0.2
Description: 

Interface translation module maintains configuration translations for configuration shipped with projects, such as user roles, text formats, content types, fields, etc. Whether something is sourced from default configuration (shipped with a project) was only decided based on the configuration name. However that means that if an originally default configuration is removed and custom configuration is created with the same name, interface translation will interfere with the translation of those configuration files, and that may result in data loss.

To track which files are installed from default configuration vs. which ones were created custom, we introduced storage of the default configuration file hash in configuration files. To avoid any compatibility problems with existing Drupal 8 projects, we decided to add a new _core key to config_object and config_entity types, which can house this default hash (under the default_config_hash key) and also provide a storage mechanism for any new core data storage needs in a contrib compatible fashion. Modules are of course not supposed to put anything to under the _core key, that is reserved for any future storage needs of Drupal core.

As a result, installation of configuration after Drupal 8.0.2 will include this information:

uuid: 16578f24-9814-4c87-894e-781fb7a0a024
name: 'Drupal 8.0.2'
mail: drupal@example.com
slogan: ''
page:
  403: ''
  404: ''
  front: /node
admin_compact_mode: false
weight_select_max: 100
langcode: en
default_langcode: en
_core:
  default_config_hash: yXadRE77Va-G6dxhd2kPYapAvbnSvTF6hO4oXiOEynI

Existing sites are not yet affected, see #2628004: Create an upgrade path to determine if default_config_hash should be added (2625258).

Impacts: 
Site builders, administrators, editors
Module developers