To me, "require-and-automatically-visible" is violating the beauty of namespace. But, maybe I felt this way because I don't understand Clojure's registry or how require works.
I thought about this more, and I think I have a better understanding of why this feels strange. Clojure has one thing called "namespaces" which are
clojure.lang.Namespace objects created by the
ns macro. Functionally speaking they are a storage location which mostly just contain vars and references to vars in other namespaces. They are used for code organization: specifically for organizing vars and occasionally Java classes and interfaces.
Clojure also has a completely different thing called "namespaces" which are prefixes that get attached to keywords and symbols. These can interact with
ns namespaces thru the reader in a handful of ways (for instance,
::double-colon keywords and symbols inside backtick forms are resolved according to the current
clojure.lang.Namespace) but for the most part should be considered a di