anchor.diff:    ]};
   
   rates(nodes) ->
  -  lists:map(fun(Node) -> rates(Node) end, membership:nodes());
  +  {array, lists:map(fun(Node) -> rates(Node) end, membership:nodes())};
   
   rates(Node) ->
  -  {obj, [
  +  {struct, [
       {name, Node},
       {get_rate, stats_server:rate(Node, get_rate, 1)},
       {put_rate, stats_server:rate(Node, put_rate, 1)},
  
positive.code: %%====================================================================
  
  transform_partitions(Partitions) ->
    lists:map(fun([Node,Parts]) -> 
        {obj, [
          {name, Node},
          {partitions, Parts},
          {replicas, membership:replica_nodes(Node)}
        ]}
      end, transform_partitions([], Partitions)).
  
  transform_partitions([], [{Node,Part}|Parts]) ->
    transform_partitions([[Node,[Part]]], Parts);
  
negative.code:   
  syncs_running(cluster) ->
    {Good,_} = rpc:multicall(sync_manager, running, []),
    {array, lists:map(fun({Part, NodeA, NodeB}) -> 
        {struct, [{partition, Part}, {nodes, [NodeA, NodeB]}]}
      end, lists:flatten(Good))};
    
  syncs_running(Node) ->
    {array, lists:map(fun({Part, NodeA, NodeB}) -> 
        {struct, [{partition, Part}, {nodes, [NodeA, NodeB]}]}
      end, sync_manager:running(Node))}.
  
  diff_size(cluster) ->
    {Good,_} = rpc:multicall(sync_manager, diffs, []),
    {struct,
        lists:map(fun({Part, Diffs}) ->
            {integer_to_list(Part), {struct, Diffs}}
          end, lists:flatten(Good))
      }.
  
  