                   (pr-str db)))))
   (let [nodes (find-nodes
                 (.store db)
+                {}
                 (mdag/get-node (.store db) (::node/id db))
                 (constantly true))]
     (rhizome/view-graph
       (vals nodes)
       (fn adjacent
         [node]
-        (keep (comp nodes ::link/target) (::node/links node)))
+        (keep #(when-let [target (get nodes (::link/target %))]
+                 (vary-meta target assoc ::link/name (::link/name %)))
+              (::node/links node)))
       :node->descriptor node->descriptor
       :edge->descriptor edge->descriptor
       ; :options


(defn- link-label
  [from to]
  (some #(when (= (::node/id to) (::link/target %))
           (::link/name %))
        (::node/links from)))


(defn- edge->descriptor

  function will be called with the source node `:data/type` and a link, and
  should determine whether to follow the link or not. Returns a map of
  multihash ids to loaded node maps."
  [store visited root follow?]
  (loop [visited (assoc visited (::node/id root) root)
         pending (enqueue-links (clojure.lang.PersistentQueue/EMPTY) root)]
    (if-let [[source-type link] (peek pending)]
      (if (visited (::link/target link))
