anchor.diff:  
   type ProjectedDocument<'TDocument> = ('TDocument * Raven.Json.Linq.RavenJObject * Raven.Abstractions.Data.Etag)
   
  +type IDocumentFetcher =
  +    abstract member GetDocument<'TDocument> : string -> Async<ProjectedDocument<'TDocument> option> 
  +
   [<CustomEquality; CustomComparison>]
   type UntypedDocumentProcessor<'TContext> = {
       ProcessorKey : string
  -    Process : Raven.Client.IDocumentStore -> MemoryCache -> obj -> seq<SubscriberEvent<'TContext>> -> Async<seq<DocumentWriteRequest>>
  +    Process : IDocumentFetcher -> obj -> seq<SubscriberEvent<'TContext>> -> Async<seq<DocumentWriteRequest>>
       MatchingKeys: SubscriberEvent<'TContext> -> seq<IComparable>
   }
   with
  
positive.code:         async { 
              let untypedKey = key :> obj
  
              // doc.Writes <- doc.Writes + 1
  
              let! writeRequests = documentProcessor.Process documentStore cache untypedKey events
              let (complete, wait) = getPromise()
                  
              do! writeQueue.Add(writeRequests, complete)
  
negative.code: 
      let cache = new MemoryCache("RavenBatchWrite")
  
      let fetcher = {
          new IDocumentFetcher with
              member x.GetDocument key =
                  RavenOperations.getDocument documentStore cache key
      }
  
      let writeBatch _ docs = async {
          let originalDocMap = 
              docs
  