code: function add(name) {
  
      function set(v) {
        var oldValue = shadow[name];
        if (oldValue === v) return;
        o[name] = v;
        notifier.notify({type: 'update', object: u, name, oldValue});
        shadow[name] = oldValue.change(v);
      }
  
      // When property on upwardable object is accessed, report it and return shadow value.
      function get() {
        accessNotifier.notify({type: 'access', object: u, name});
        return shadow[name];
      }
  
      function observe(changes) {
  //      changes.forEach(change => shadow[name] = shadow[name].change(change.newValue));
  //      observers[name].reobserve(shadow[name]);
      }
  
      shadow[name] = makeUpwardable(o[name]);
      observers[name] = Observer(shadow[name], observe, ['upward']).observe();
      defineProperty(u, name, {set: set, get: get, enumerable: true});
    }
docs: Add a property. Set up getter and setter, Observe. Populate shadow.