anchor.diff:          rexi:reply(Error)
       end.
   
  +view_fold(#full_doc_info{} = FullDocInfo, OffsetReds, Acc) ->
  +    % matches for _all_docs and translates #full_doc_info{} -> KV pair
  +    case couch_doc:to_doc_info(FullDocInfo) of
  +    #doc_info{revs=[#rev_info{deleted=false, rev=Rev}|_]} ->
  +        Id = FullDocInfo#full_doc_info.id,
  +        Value = {[{rev,couch_doc:rev_to_str(Rev)}]},
  +        view_fold({{Id,Id}, Value}, OffsetReds, Acc);
  +    #doc_info{revs=[#rev_info{deleted=true}|_]} ->
  +        {ok, Acc}
  +    end;
  +view_fold(KV, OffsetReds, #view_acc{offset=nil} = Acc) ->
  +    % calculates the offset for this shard
  +    #view_acc{db=Db, reduce_fun=Reduce} = Acc,
  +    Offset = Reduce(OffsetReds),
  +    rexi:sync_reply({total_and_offset, couch_db:get_doc_count(Db), Offset}),
  +    view_fold(KV, OffsetReds, Acc#view_acc{offset=Offset});
  +view_fold(_KV, _Offset, #view_acc{limit=0} = Acc) ->
  +    % we scanned through limit+skip local rows
  +    {stop, Acc};
  +view_fold({{Key,Id}, Value}, _Offset, Acc) ->
  +    % the normal case
  +    #view_acc{
  +        db = Db,
  +        limit = Limit,
  +        include_docs = IncludeDocs,
  +        stop_fun = PassedEnd
  +    } = Acc,
  +    case PassedEnd(Key, Id) of
  +    true ->
  +        {stop, Acc};
  +    false ->
  +        RowProps = case IncludeDocs of
  +        true ->
  +            case couch_db:open_doc(Db, Id, []) of
  +              {not_found, missing} ->
  +                  [{id, Id}, {key, Key}, {value, Value}, {error, missing}];
  +              {not_found, deleted} ->
  +                  [{id, Id}, {key, Key}, {value, Value}];
  +              {ok, Doc} ->
  +                  JsonDoc = couch_doc:to_json_obj(Doc, []),
  +                  [{id, Id}, {key, Key}, {value, Value}, {doc, JsonDoc}]
  +            end;
  +        false ->
  +            [{id, Id}, {key, Key}, {value, Value}]
  +        end,
  +        rexi:sync_reply({row, RowProps}),
  +        {ok, Acc#view_acc{limit=Limit-1}}
  +    end.
   
  -%%
  -%% helper funs
  -%%
  +all_docs_stop_fun(#view_query_args{direction=fwd, end_key=EndKey}) ->
  +    fun(ViewKey, _) ->
  +        couch_db_updater:less_docid(EndKey, ViewKey)
  +    end;
  +all_docs_stop_fun(#view_query_args{direction=rev, end_key=EndKey}) ->
  +    fun(ViewKey, _) ->
  +        couch_db_updater:less_docid(ViewKey, EndKey)
  +    end.
  
positive.code: 
  -export([get_db_info/1, get_doc_count/1, get_update_seq/1]).
  -export([open_doc/3, open_revs/4, get_missing_revs/2, update_docs/3]).
  
  -include("fabric.hrl").
  
  %% rpc endpoints
  %%  call to with_db will supply your M:F with a #db{} and then remaining args
  
  get_db_info(DbName) ->
      with_db(DbName, {couch_db, get_db_info, []}).
  
  get_doc_count(DbName) ->
      rexi:reply(case couch_db:open(DbName) of
      {ok, Db} ->
          {ok, {Count, _DelCount}} = couch_btree:full_reduce(Db#db.id_tree),
          {ok, Count};
  
negative.code:     end).
  
  get_update_seq(DbName) ->
      rexi:reply(case couch_db:open(DbName, []) of
      {ok, #db{update_seq = Seq}} ->
          {ok, Seq};
      Error ->
  