emberjs/data — pull request #1716 by slindberg (2014-01-29 21:36:21+00:00)
Title: Maintain consistency of internal changed attributes hash.

This change makes sure that a record's `_attributes` hash is always in sync with the `_data` hash's values, namely that there's never a case such that:

```javascript
// for all valid attributes
record._attributes['attrName'] === record._data['attrName']
```

This can happen due to the order in which values are set in `_attributes` and the `didSetProperty ` state machine transition occurs, as shown in [this jsbin](http://emberjs.jsbin.com/eYaMarak/1). Because this is an implementation detail, and unit tests are meant to test public APIs, I didn't think writing a failing test made sense (this change does not make any current tests fail).

Since this doesn't have any impact on the external API, you're probably wondering why it even matters. The answer is being able to extend ED with functionality that use its internals (and is therefore tied to a specific version of ED) without having to modify the source. My attempt at making ['dependent' relationships](https://gist.github.com/slindberg/8660986) is an example of that.