I think this may be a bug. I believe handlers need to take a single argument https://github.com/clojure/core.async/blob/master/src/main/clojure/clojure/core/async/impl/ioc_macros.clj#L1007
There was a discussion recently about Clojure generating an extra arity where a map can be passed where & {:keys ...}
is accepted. I just learned today that Ruby has a similar thing which will be deprecated in their next version:
https://blog.saeloun.com/2019/10/07/ruby-2-7-keyword-arguments-redesign.html