@Override
  public boolean removeAssociatedValue(int inputId) {
    ValueContainerImpl<Value> mergedSnapshot = myMergedSnapshot;
    if (mergedSnapshot != null) {
      mergedSnapshot.removeAssociatedValue(inputId);
    }

    boolean wasRemovedFromAdded = removeFromAdded(inputId);
    //RC: It is teasing to short-circuit here if wasRemovedFromAdded=true -- seems like no need to add inputId to invalidatedIds?
    //    Wrong: inputId could be contained in the (not yet loaded) <mergedSnapshot> -- inputId still needs to be in invalidatedIds then.
    //    I.e consider scenario:
    //    1) container X created: { merged=null, added=[], invalidated=[] }
    //       underlying container (to-be-mergedSnapshot, not yet loaded) = [..., (inputId, value), ... ]
    //    2) X.addValue(inputId, value) => X{ merged=null, added=[(inputId, value)], invalidated=[] }
    //    3) X.removeAssociatedValue(inputId) => X{ merged=null, added=[], invalidated=[] }
    //       I.e. the underlying container remains unchanged.
    //       But this is wrong: (inputId, value) must be removed from the underlying container

    boolean wasAddedToRemoved = addToRemoved(inputId);

    return wasRemovedFromAdded || wasAddedToRemoved;
  }
@Override
  public boolean removeAssociatedValue(int inputId)