anchor.diff:      | (_, LblPathNode n) -> length n + 1
       | (_, LblPathLeaf _) -> 2
   
  -    let format showDetails (c : DependencyChain) =
  +    let format (resolution: PackageResolver.PackageResolution) showDetails (c : DependencyChain) =
           let formatVerReq (vr : VersionRequirement) =
               match vr.ToString() with
               | "" -> ""
  
positive.code:                 topLevelDeps
                  |> Set.toList
                  |> List.collect (fun p -> AdjLblGraph.paths p packageName graph)
              let version =
                  group.Resolution
                  |> Map.find packageName
                  |> fun x -> x.Version
              match Set.contains packageName directDeps, Set.contains packageName topLevelDeps with
              | true, true ->
                  Result.Ok ((TopLevel, version), [])
              | true, false ->
                  Result.Ok ((Direct chains, version), [])
              | false, false ->
                  Result.Ok ((Transitive chains, version), [])
              | false, true ->
                  failwith "impossible"
  
  
negative.code:             for (top, chains) in chains |> List.groupBy (DependencyChain.first) do
                  match chains |> List.sortBy DependencyChain.length, options.Details with
                  | shortest :: [], false ->
                      DependencyChain.format resolution options.Details shortest |> tracen
                  | shortest :: rest, false ->
                      DependencyChain.format resolution options.Details shortest |> tracen
                      tracen ""
                      tracefn 
                          "... and %d chain%s more starting at %O ..." 
  