   "dev build, source only"
   [v verbose bool "verbose"]
   (let [mod (str (-> (boot/get-env) :gae :module))
-        rgx (re-pattern (str "(^" mod "/.*clj$)"))
-        prev (atom nil)]
-    (println "MODULE: " mod)
-    (println "REGEX: " rgx)
-    ;; (comp
-    (boot/with-pre-wrap [fileset]
-      (let [changes (->> (boot/fileset-diff @prev fileset)
-                         boot/output-files
-                         (map :path))
-            fs (boot/new-fileset)
-            cache-dir (boot/cache-dir! :boot-gae/build)]
-        (doseq [path changes]
-          (if verbose (util/info (str "changed: " path "\n")))
-          (let [in-file (boot/tmp-file (boot/tmp-get fileset path))
-                out-file (if (str/ends-with? path "clj")
-                           (doto (io/file cache-dir classes-dir path) io/make-parents)
-                           (doto (io/file cache-dir path) io/make-parents))]
-            (io/copy in-file out-file))))
-      (reset! prev fileset))))
+        prev (atom nil)
+        cache-dir (boot/cache-dir! :boot-gae/build)]
+    ;; (println "MODULE: " mod)
+    (comp
+     (boot/with-pre-wrap [fileset]
+       (let [changes (->> (boot/fileset-diff @prev fileset)
+                          boot/output-files
+                          (map :path))
+             fs (boot/new-fileset)]
+         (doseq [path changes]
+           (if verbose (util/info (str "changed: " path "\n")))
+           (let [in-file (boot/tmp-file (boot/tmp-get fileset path))
+                 out-file (if (str/ends-with? path "clj")
+                            (doto (io/file cache-dir classes-dir path) io/make-parents)
+                            (doto (io/file cache-dir path) io/make-parents))]
+             (io/copy in-file out-file)))
+         (reset! prev fileset)))
+     (builtin/sift :include #{#".*"} :invert true)
+     (boot/with-pre-wrap [fileset]
+      (-> fileset
+          (boot/add-asset cache-dir)
+          boot/commit!)))))
 
 (boot/deftask prod
   "make a prod build"

            [clojure.string :as str]
            [clojure.set :as set]
            [clojure.pprint :as pp]
            [stencil.core :as stencil]
            [boot.user]
            [boot.pod :as pod]
            [boot.core :as boot]
            [boot.util :as util]
            [boot.task.built-in :as builtin])
  (:import [com.google.appengine.tools KickStart]
           [java.io File]
           [java.net URL URLClassLoader]))

          (appengine :verbose verbose)
          (builtin/sift :move {#"(.*clj$)" (str classes-dir "/$1")})
          (builtin/sift :move {#"(.*\.class$)" (str classes-dir "/$1")})
          (builtin/sift :move {#"(^.*)" (str mod "/$1")})
          ;; FIXME: use cache instead?
          ;; (builtin/target :dir #{(str "target/" mod)})
          )))
