anchor.diff:        |> Result.Error
   }
   
  -let resolutionManager (sourceExplorer : ISourceExplorer) : MailboxProcessor<ResolutionRequest> =
  +let resolutionManager (context : TaskContext) : MailboxProcessor<ResolutionRequest> =
     MailboxProcessor.Start(fun inbox -> async {
       let mutable unresolvableCores : Map<Set<PackageConstraint>, SearchStrategyError> = Map.empty
       let mutable underconstraintDeps : Set<PackageConstraint> = Set.empty
       let mutable world : Map<PackageConstraint, Set<Set<PackageConstraint>>> = Map.empty
   
  +    let sourceExplorer = context.SourceExplorer
  +    let logger = createLogger context.Console (Some "solver")
       let findBadCores (constraints : Constraints) =
         unresolvableCores
           |> Map.toSeq
  
positive.code:           match candidate with
            | Result.Error (Unresolvable d) ->
              unresolvableCores <- (unresolvableCores |> Map.add (Set [d]) (Unresolvable d))
              yield Result.Error <| Unresolvable d
            | Result.Error (LimitReached (d, Constants.MaxConsecutiveFailures)) ->
              if hadCandidate
              then
                underconstraintDeps <- (underconstraintDeps |> Set.add d)
              yield Result.Error <| LimitReached (d, Constants.MaxConsecutiveFailures)
            | Result.Ok (_, (location, versions)) ->
              let! lock = sourceExplorer.LockLocation location
  
negative.code:     Locations = manifest.Locations
    }
  
    let resolver = resolutionManager context
  
    let prefetcher = Prefetcher (context.SourceExplorer, 10)
  
  