                            depth max-depth top-bolt path-from-top)
                (let [path (first comp-paths)
                      bolts-at (first bolts-at-paths)]
-                 (lazy-seq
-                  (flatten
-                   (mapfn #(let [bolt (assoc-in bolt path %)]
-                             (if (= false (get-in % [:phrasal]))
-                               [bolt]
-                               (add-bolt-at top-bolt bolt path % model depth max-depth)))
-                          bolts-at))))))))))
-
-(defn add-bolt-at [top-bolt bolt path bolt-at model depth max-depth]
+                 (flatten
+                  (mapfn #(let [bolt (assoc-in bolt path %)]
+                            (if (= false (get-in % [:phrasal]))
+                              [bolt]
+                              (-> (add-bolt-at top-bolt bolt path % model depth max-depth truncate?)
+                                  ((fn [with-added-complement]
+                                     (if truncate? (truncate with-added-complement [path] model)
+                                         with-added-complement))))))
+                         bolts-at)))))))))
+
+(defn add-bolt-at [top-bolt bolt path bolt-at model depth max-depth truncate?]
   (lazy-seq
    (mapfn #(do-defaults % model)
           (let [comp-paths (find-comp-paths bolt-at)

  (let [depth 0
        max-depth max-total-depth]
    (flatten
     (mapfn #(add-bolt-at % % [] % model depth max-depth)
            (lightning-bolts model spec 0 max-total-depth)))))

(defn generate-n

(defn add-comps
  "given a bolt, return the lazy sequence of all bolts derived from this bolt after adding,
   at each supplied path in comp-paths, the bolts for that path."
  [bolt model comp-paths bolts-at-paths depth max-depth & [top-bolt path-from-top truncate?]]
  (lazy-seq
   (let [top-bolt (or top-bolt bolt)
         truncate? (if (= truncate? false)
                     false
                     true)]
     (if (empty? comp-paths)
       [bolt] ;; done: we've added all the comps to the bolt, so just return the bolt as a singleton vector.
       ;; else, more comp-paths to go.
