   ;;     (format "There is no arrow in your %s form:" (name fact-or-facts)))))
   )
 
-            
+
+;;; Ta-da!
+
+(defn complete-fact-transformation [metadata forms]
+  (given-possible-fact-nesting
+   (-> forms
+       (expand-fact-body metadata)
+       (convert-expanded-body-to-compendium-form metadata)
+       wrap-with-load-time-code)))
+                                   

           put-check-time-fact-recording-in-body
           make-a-form-that-returns-a-fact-function-that-knows-itself))))

            ;; The rather hackish construction here is to keep
            ;; the expanded fact body out of square brackets because
            ;; `tabular` expansions use `seq-zip`. 
(defn wrap-with-creation-time-fact-recording [function-form]
  (if (working-on-top-level-fact?)
    `((fn [fact-function#]
        (record-fact-existence fact-function#)
        fact-function#)
      ~function-form)
    function-form))




(defn run-after-creation [function-form]
  `(~function-form))

(defn complete-fact-transformation [metadata forms]
  (given-possible-fact-nesting
    (let [wrap-in-runtime-fact-context
          (fn [to-be-wrapped]
            `(within-runtime-fact-context ~(:midje/description metadata)
                                          ~to-be-wrapped))
          form-to-run (-> forms
                          annotate-embedded-arrows-with-line-numbers
                          to-semi-sweet
                          unfold-fakes
                          surround-with-background-fakes
                          midjcoexpand
                          (multiwrap (forms-to-wrap-around :facts))
                          wrap-in-runtime-fact-context
                          report/form-providing-friendly-return-value
                          (convert-expanded-body-to-compendium-form metadata)
                          wrap-with-creation-time-fact-recording
                          run-after-creation)]
      (define-metaconstants form-to-run)
      form-to-run)))



(def-many-methods validate ["fact" "facts"] [[fact-or-facts & args :as form]]
  ;; Removed the check for no arrow because (1) it gives me too many false

    sequential?  (preserve-type form (eagerly (map midjcoexpand form)))
    :else        form))

(defn expand-fact-body [forms metadata]
    (letfn [(wrap-in-runtime-fact-context [to-be-wrapped]
              `(within-runtime-fact-context ~(:midje/description metadata)
                                            ~to-be-wrapped))]
      (-> forms
          annotate-embedded-arrows-with-line-numbers
          to-semi-sweet
          unfold-fakes
          surround-with-background-fakes
          midjcoexpand
          (multiwrap (forms-to-wrap-around :facts))
          wrap-in-runtime-fact-context
          report/form-providing-friendly-return-value)))


;;; Compendium processing

(defn convert-expanded-body-to-compendium-form
  ([expanded-body metadata]
     (convert-expanded-body-to-compendium-form expanded-body metadata
                                               (gensym 'this-function-here-)))

  ;; Having two versions lets tests not get stuck with a gensym.
  ([expanded-body metadata this-function-here-symbol]
     (letfn [(put-check-time-fact-recording-in-body [body]
               (if (working-on-top-level-fact?)
