anchor.diff:  
     let fetchCandidatesForConstraint sourceExplorer locations package constraints = asyncSeq {
       let candidatesToExplore = SourceExplorer.fetchLocationsForConstraint sourceExplorer locations package (Constraint.simplify constraints)
  +
       let mutable hasCandidates = false
  -    let mutable consecutiveFailures = 0
  +    let mutable branchFailures = Map.empty
  +
       for x in candidatesToExplore do
  -      if consecutiveFailures > MaxConsecutiveFailures then
  +      if branchFailures |> Map.exists (fun _ v -> v > MaxConsecutiveFailures) then
           yield
  -          Result.Error (NotSatisfiable {
  -          Package = package;
  -          Constraint = constraints
  -          Msg = (string MaxConsecutiveFailures) + " consecutive versions didn't have a valid manifest"
  -        })
  +          NotSatisfiable {
  +            Package = package;
  +            Constraint = constraints
  +            Msg = (string MaxConsecutiveFailures) + " consecutive versions didn't have a valid manifest"
  +          }
  +          |> Result.Error
         else
           yield!
             match x with
  
positive.code:             })
            }
  
      if hasCandidates = false then
        yield Result.Error (NotSatisfiable {
            Package = package;
            Constraint = constraints;
            Msg = "No Version we tested had a valid manifest"
        })
    }
  
    let constraintsOf (ds: Set<Dependency>) =
  
negative.code:     |> Seq.groupBy fst
      |> Seq.map (fun (k, xs) -> (k, xs |> Seq.map snd |> Set.ofSeq))
      |> Map.ofSeq
  
    let findConflicts (solution : Solution) (dependencies : Constraints) = seq {
       let maybeConflict =
  