Since no one responded, I’ll update the post with what I’ve learned in the mean time. It turns out, static assets don’t need to be handled separately at all. They are included in the deployed bundle, and, are available as resources on the classpath. In my case I’m running a normal ring app via ions, and there’s one gotcha. See:
I’m now looking into using optimus  for a more production-grade way to serve the assets.
The final issue which I mentioned in the original post is rollbacks for failed deploys. Given static assets are deployed along with the server code, there should be no issue about keeping things in sync, but I have another problem in that rollbacks are not happening at all. I posted separately about that but again no replies (so far).