anchor.diff:            (getf '(:badge "opinion-badge.svg"
                     :tree "tree.json"
                     :warstats "warstats.json"
  -                  :opinion-warstats "opin-warstats.json"
                     :references "references.json"
                     :questions "questions.json"
                     :opinions "opinions.json"
  
positive.code:   "First check the in memory cache for warstats, then check the disk storage, then create minimal default stats. Cache is of the format generated by reference-list-for-rooturl. Returned warstats are just for the requested entity, not for the whole tree."
    (or
     (cl-hash-util:hget cache (list url :warstats))
     (when-let* ((spec (%warstats-pathdata-for-url url))
                 (path (apply #'make-warstats-path spec)))
       (when (probe-file path)
         (with-open-file (fh path)
           ;;FIXME: verify me: need hash tables. Warstats are a plist?
           (%tidy-loaded-json (json:decode-json fh)))))
     ;;FIXME: The default warstats figures should all be in one place, perhaps?
     ;;FIXME: Do we need a full warstats dict?
     (list :effect 1 :controversy 0)))
  
  
negative.code:                            :refbot (system-generated-p (car node))
                             :refopinid (assoc-cdr :id refopin)
                             :refopinurl (assoc-cdr :url refopin)
                             :warstats
                             (request-warstats-for-url (assoc-cdr :reference refopin))
                             :warstats-src-url
  