Oh! Yes, I think that's it. I didn't realize the uberjar would include source, which clojure would attempt to re-compile. I'm not sure why that would be useful in an uberjar.
I tried the lein :omit-source flag, which does indeed omit the source for my project, but still includes the source for all the dependencies, like clojure core libs. So I then get
java.lang.ClassCastException: clojure.core.VecNode cannot be cast to clojure.core.VecNode
and what-not. If I manually prune all the .clj from the zip file, then this exception goes away.
Is there some easier way to achieve this? Either tell clojure not to recompile, or tell lein not to include source from dependencies?