docs: function propertyDidChange(obj, keyName) {
        var m = obj['__ember_meta__'];
        var watching = (m && m.watching[keyName] > 0) || keyName === 'length';
        var proto = m && m.proto;
        var desc = m && m.descs[keyName];
  
        if (proto === obj) { return; }
  
        // shouldn't this mean that we're watching this key?
        if (desc && desc.didChange) { desc.didChange(obj, keyName); }
        if (!watching && keyName !== 'length') { return; }
  
        if (m && m.deps && m.deps[keyName]) {
          dependentKeysDidChange(obj, keyName, m);
        }
  
        chainsDidChange(obj, keyName, m, false);
        notifyObservers(obj, keyName);
      }