It should be possible to do
(s/def ::a ::b) before declaring ::b.
Currently this throws an "Unable to resolve" error.
Alex indicated that everything should have delays but that they are missing in some cases. This seems like one of those cases.
Examples where things work fine are
(s/def ::a (s/and ::b)) and
(s/def ::a (s/keys :req (link: ::b))).