anchor.diff:              {<<"id">>, D#tagcontent.id},
               {<<"version">>, 1},
               {<<"urls">>, D#tagcontent.urls},
  -            {<<"last-modified">>, D#tagcontent.last_modified}
  +            {<<"last-modified">>, D#tagcontent.last_modified},
  +            {<<"user-data">>, D#tagcontent.user}
           ]})).
   
   -spec tag_lookup(any(), [binary()], [any()]) ->
  
positive.code: -type replica() :: {timer:timestamp(), nonempty_string()}.
  -record(tagcontent, {id :: binary(),
                       last_modified :: binary(),
                       urls :: [binary()]}).
  -type tagcontent() :: #tagcontent{}.
  -record(state, {tag, % :: binary(),
                  data :: 'false'  | 'notfound' | 'deleted' | {'error', _}
  
negative.code:         {'EXIT', _} ->
              {error, corrupted_json};
          {struct, Body} ->
              case tag_lookup(Body,
                              [<<"id">>, <<"urls">>, <<"last-modified">>, <<"user-data">>],
                              []) of
                  {ok, [Id, Urls, LastModified, UserData]} ->
                      {ok, #tagcontent{id = Id,
                                       last_modified = LastModified,
                                       urls = Urls,
                                       user = UserData}};
                  _ -> {error, invalid_object}
              end
      end.
  