anchor.diff:                                                       {atom(), term()}]) ->
                                   {props(), props(), props()}.
   ensure_not_present(Unvalidated, Valid, Errors, InvalidPropsSpec) ->
  -    lists:foldl(fun({Key, Allowed, ErrorMessage}, {U, V, E}) ->
  +    lists:foldl(fun({Key, NotAllowed, ErrorMessage}, {U, V, E}) ->
                           case lists:keytake(Key, 1, U) of
                               false ->
                                   {U, V, E};
                               {value, {Key, Val}, U2} ->
                                   Val2 = coerce_bool(Val),
  -                                if Val2 /= Allowed ->
  +                                if Val2 == NotAllowed ->
                                           {U2, V, [{Key, ErrorMessage} | E]};
                                      true ->
  -                                        {U2, [{Key, Allowed} | V], E}
  +                                        {U, V, E}
                                   end
                           end;
                      ({Key, ErrorMessage}, {U, V, E}) ->
  
positive.code:     oneof([{<<"default">>, binary(20)}, binary(20)]).
  
  gen_existing() ->
      Defaults0 = riak_core_bucket_type:defaults(),
      Defaults = lists:keydelete(allow_mult, 1, Defaults0),
      ?LET(Special, oneof([gen_valid_mult_dt(), gen_valid_fp(), gen_valid_consistent(), []]), Defaults ++ Special).
  
  gen_maybe_consistent() ->
      oneof([[], gen_valid_consistent()]).
  
negative.code: %% wild!
  -spec validate_default_bucket(props(), props()) -> {props(), errors()}.
  validate_default_bucket(Existing, New) ->
      {Good, Bad} = validate(New, [], []),
      {merge(Good, Existing), Bad}.
  
  %% @private properties in new overwrite those in old
  -spec merge(props(), props()) -> props().
  