anchor.diff:          |> Map.ofSeq
     }
   
  -  let private recoverOrFail state log resolutions =
  +  let private recoverOrFail atom state log resolutions =
       resolutions
       |> AsyncSeq.map (fun resolution ->
           match resolution with
           | Resolution.Backtrack (s, f) ->
  -          log("trying to recover from: " + resolution.ToString() |> text, LoggingLevel.Info)
  +          log("trying to recover from: " + f.ToString() + " [" + atom.ToString() + "]" |> text, LoggingLevel.Info)
             if state.Constraints.ContainsKey f.Package &&
               match f.Constraint with
               | All xs -> xs |> List.forall state.Constraints.[f.Package].Contains
  
positive.code:     }
  
    let fetchCandidatesForConstraint sourceExplorer locations package constraints = asyncSeq {
      let candidatesToExplore = SourceExplorer.fetchLocationsForConstraint sourceExplorer locations package constraints
      let mutable hasCandidates = false
      let mutable consecutiveFailures = 0
      for x in candidatesToExplore do
  
negative.code:   open Buckaroo.Result
  
    [<Literal>]
    let MaxConsecutiveFailures = 10
  
    type LocatedAtom = Atom * PackageLocation
  
  