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:                 do! sourceExplorer.FetchManifest (lock, c) |> Async.Ignore
                  yield Result.Ok (package, (packageLocation, c))
                  hasCandidates <- true
                  consecutiveFailures <- 0
                with _ ->
                  consecutiveFailures <- consecutiveFailures + 1
                  ()
              }
            | Unsatisfiable u -> asyncSeq {
              yield
  
negative.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>) =
  