anchor.diff:                          state.Hints
                           |> AsyncSeq.append freshHints;
                     }
  +
  +                  log (text "!!!!!!!!!!!!!!!!!!!!!!", LoggingLevel.Trace)
  +                  log (nextState.Solution|>string|>text, LoggingLevel.Trace)
  +                  log (text "!!!!!!!!!!!!!!!!!!!!!!", LoggingLevel.Trace)
   
                     yield! step context strategy nextState
                   })
  
positive.code: 
      let sourceExplorer = context.SourceExplorer
  
      let log = namespacedLogger context.Console "solver"
  
      let unsatisfied =
        findUnsatisfied state.Solution state.Constraints
  
negative.code:     |> AsyncSeq.map (fun resolution ->
          match resolution with
          | Resolution.Failure f ->
            log("########################################Trying to recover: " + f.ToString()|>text, LoggingLevel.Info)
  
            if state.Constraints.ContainsKey f.Package &&
              match f.Constraint with
              | All xs -> xs |> List.forall state.Constraints.[f.Package].Contains
              | x -> state.Constraints.[f.Package].Contains x
            then resolution
            else
              log("########################################Trying different resolution to workaround: " + f.ToString()|>text, LoggingLevel.Info)
              // we backtracked far enough, we can proceed normally...
              // TODO: remember f.Package + f.Constraint always fails
              Resolution.Error (new System.Exception (f.ToString()))
  