      (rerun/compendium-contents)
      (mapcat rerun/namespace-facts namespaces))))
 
+(declare report-results)
+
+(defmacro ^{:private true} report-check-group [& body]
+  `(do (ctf/zero-counters)
+       ~@body
+       (report-results)))
+
+(defn check-facts [& args]
+  (report-check-group 
+   (apply unobtrusive-check-facts args)))
+
 (defn forget-facts
   "After this, `check-facts` does nothing until new facts are defined."
   ([]
-     (rerun/forget-facts-in-namespace *ns*))
+     (forget-facts *ns*))
   ([& namespaces]
      (if (= namespaces [:all])
        (rerun/reset-compendium)
-       (dorun (map rerun/forget-facts-in-namespace namespaces)))))
+       (dorun (map rerun/forget-facts-in-namespace namespaces)))
+     :done))
 
 (defn fetch-matching-facts
   "Returns a sequence of all facts matching

  ;; Clojure 1.4 (at least) runs out of memory. Moreover,
  ;; (require ns1 ns2 ns3 ... nsN :reload-all) will reload a shared
  ;; dependency N times.
  (dorun (map #(require % :reload) (apply fact-namespaces args))))




;;; TODO - the workflow these imply needs testing


(def forget-results ctf/zero-counters)

(defn report-results []
  (report-strings-summary (ctf/counters)))

  []
  ((last-fact-checked)))

(defn unobtrusive-check-facts
  "With no argument, checks all known facts.
   With arguments (namespaces or symbols), only runs facts
   in those namespaces. Returns true iff all facts check out."
