anchor.diff:                  | DepState.Depends (t,deps) -> t :: (deps |> List.collect traverseTargets)
                   | _ -> []
   
  -            /// Replaces all FileTarget
  +            /// Collapses all instances of FileTarget to a single one
               let mergeDeps depends =
                   depends
                   |> List.partition (function |DepState.Depends (FileTarget _,_) -> true | _ -> false)
  
positive.code:                     in
                      DepState.Refs allFiles :: rest
              // TODO where're phony actions
              // TODO make it more inductive? Consider initial graph but with stripped targets
  
              let ptgt t = t, t |> mg |> mergeDeps |> List.map stripReasons |> take 5
              // mg >> List.map stripReasons
  
negative.code: 
              let start = System.DateTime.Now
              let db = Storage.openDb options.ProjectRoot logger
  
              let ctx = {
                  Ordinal = 0
                  TaskPool = pool; Throttler = throttler
                  Options = options; Rules = rules
                  Logger = logger; RootLogger = logger; Db = db
                  NeedRebuild = fun _ -> false
                  }
              // TODO wrap more elegantly
              let rec get_changed_deps = Common.memoize (getDepsImpl ctx (fun x -> get_changed_deps x)) in
  
              let check_rebuild target =
                  get_changed_deps >>
                  function
                  | [] -> false, ""
                  | DepState.Other reason::_            -> true, reason
                  | DepState.Depends (t,_) ::_          -> true, "Depends on target " + (Target.getFullName t)
                  | DepState.FilesChanged (file::_) ::_ -> true, "File(s) changed " + file
                  | _ -> true, "Some reason"
                  >>
                  function
                  | false, _ -> false
                  | true, reason ->
                      do ctx.Logger.Log Info "Rebuild %A: %s" (getShortname target) reason
                      true
                  <| target
  
              let ctx = {ctx with NeedRebuild = check_rebuild}
  
              logger.Log Info "Options: %A" options
  
  