Thank you for this! On the second point, you are absolutely correct; that was sloppy writing on my part. I will correct that in the post.
I'm not certain I understand your first point. When I add the type hint, it's me asserting the type, not the compiler proving anything. If the value at runtime isn't actually a byte array, I would expect a ClassCastException.
But I am new to Clojure, and I may well be mistaken about what the compiler is doing.
I mean, I think that probably is what happens. But then, while it's sped up a lot, the generated bytecode presumably also includes instructions to try the cast and raise that exception when it fails.
(And the possible "JIT hotpath optimization" could be something like, at the bottom level, branch-predicting that cast.)