A related but slightly different issue: is prefer-method supposed to be transitive?
That is, (prefer-method f a b) and (prefer-method f b c) implies (prefer-method f a c)?
(test/deftest transitive
(derive ::transitive-d ::transitive-a)
(derive ::transitive-d ::transitive-c)
(defmulti transitive identity)
(defmethod transitive ::transitive-a [x] [::transitive-a x])
(defmethod transitive ::transitive-c [x] [::transitive-c x])
(prefer-method transitive ::transitive-a ::transitive-b)
(prefer-method transitive ::transitive-b ::transitive-c)
(test/is (= [::transitive-a ::transitive-d]
(transitive ::transitive-d))))