anchor.diff:      let doAutoMerge() = 
           // TODO allow caller to specify settings to control or disable this
           if autoMerge then
  -            match checkForMerge 0 4 false true with
  +            match cascadeMerge 0 4 false with
               | Some f -> startBackgroundMergeJob f
               | None -> ()
   
  
positive.code:                 }
              )
  
      let rec checkForMerge level min all cascade =
          let h = header
          let segmentsOfAge = List.filter (fun g -> (Map.find g h.segments).age=level) h.currentState
          // TODO we are trusting segmentsOfAge to be contiguous.  need test cases to
  
negative.code:             // beginning.
              // TODO if we only do partial here, we might want to schedule a job to do more.
              let grp = if all then segmentsOfAge else List.skip (count - min) segmentsOfAge
              tryMerge grp
          else
              //printfn "no merge needed %d -- %d" level count
              None
  
      let wrapMergeForLater f = async {
          //printfn "inside"
          let! g = f
          //printfn "now waiting for writeLock"
          use! tx = getWriteLock None
          tx.CommitMerge g
          return [ g ]
      }
  
      let plainMerge level min all =
          let maybe = getPossibleMerge level min all
          match maybe with
          | Some f ->
              //printfn "    and it's gonna happen"
              let blk = wrapMergeForLater f
              Some blk
          | None -> 
              //printfn "    but can't"
              None
  
      let rec cascadeMerge level min all =
          let maybe = getPossibleMerge level min all
          match maybe with
          | Some f ->
              //printfn "    and it's gonna happen"
              let blk = wrapMergeForLater f
              let blk2 = async {
                  let! a = blk
                  //printfn "now check the next level"
                  match cascadeMerge (level + 1) min all with
                  | Some f2 -> 
                      let! b = f2
                      return b @ a
                  | None -> return a
              }
              Some blk2
          | None -> 
              //printfn "    but can't"
              None
  
      let critSectionBackgroundMergeJobs = obj()
  