anchor.diff:      Annotation = orddict_default_fetch(annotation, Data, []),
       % error_logger:warning_msg("about to convert JSON to a tag: Name=~p, SHA=~p, Meta=~p, Annotation=~p", [Name, SHA, Meta, Annotation]),
       case {tag_fjh, wallaroo:put_tag(Name, SHA, Annotation, Meta)} of
  -	{tag_fjh, {fail, Failure}} ->
  -	    ResponseBody = wrq:append_to_response_body(mochijson:binary_encode({struct, [{failure, iolist_to_binary(io_lib:format("~p", [Failure]))}]}), ReqData),
  +	{tag_fjh, {fail, _}=Failure} ->
  +	    ResponseBody = 
  +		wrq:append_to_response_body(mochijson:binary_encode(vfail_to_json(Failure)), ReqData),
   	    {{halt, 400}, ResponseBody, Ctx};
   	_ ->
   	    NewLocation = io_lib:format("/~s/~s", [PathPart, mochiweb_util:quote_plus(Name)]),
  
positive.code: atomize_meta(Dict) ->
      [atomize_pair(Pair) || Pair <- Dict].
  
  from_json_helper(Data, ReqData, Ctx, _NewFunc, tag, PathPart, _ValidFunc) ->
      Name = ensure_str_format(orddict:fetch(name, Data), binary),
      SHA = ensure_str_format(orddict:fetch(commit, Data), list),
  
negative.code: 
  generic_from_json(ReqData, Ctx, NewFunc, PutKind, PathPart, ValidFunc) ->
      % error_logger:warning_msg("Ctx is is ~p~n", [Ctx]),
      % error_logger:warning_msg("Body is is ~p~n", [wrq:req_body(ReqData)]),
      Data = [{list_to_atom(binary_to_list(K)), V} || {K, V} <- (mochijson:binary_decoder([{object_hook, fun peel/1}]))(wrq:req_body(ReqData))],
      % error_logger:warning_msg("Data is is ~p~n", [Data]),
      case wrq:path_info(name, ReqData) of
  