acofx handlers yield the value to inject instead of the updated coeffects. reg-acofx-by-fx takes an options map instead of positional arguments. inject-acofxs takes one vector [id value opts] per acofx; its map form and the options of the whole injection are gone. set-global-error-dispatch! is replaced by set-global-on-failure-event, and :error-dispatch by :on-failure. Functions given at injection are no longer called by the library: a reg-acofx handler gets them unchanged as :value; only reg-acofx-by-fx calls one, with the coeffects, the event and the resolved :initial-args, and its result replaces the :initial-args instead of being merged over them. See "Migrating from 2.x" in the README.
An acofx handler is called as (handler coeffects injection) instead of (apply handler coeffects args); it reads its value under :value of the injection. An injection is [id value opts] per acofx, and inject-acofx takes id value opts instead of [id & args]. On failure, the event the handler names under ::on-failure takes precedence over the injection's :on-failure.
functions given at injection are no longer called for every acofx; only reg-acofx-by-fx computes them, and passes the resolved :initial-args as third argument.
the exception appended to the failure event is an ex-info with :code ::acofx-error and the acofx under ::acofx; the handler's exception is its cause.