ASDF doesn't introduce logical pathnames, and when you provide them, it makes sure to pass them through to the implementation.
Behaviour of logical pathnames with DIRECTORY is somewhat underspecified.
Given
(setf (logical-pathname-translations "foo") `(("**;*.fasl.*" "/home/foo/faslcache/**/*.fasl") ("**;*.*.*" "/home/foo/**/*.*")))
and existence both
/home/foo/faslcache/bar/quux.fasl /home/foo/bar/quux.fasl
should
(directory "foo:bar;x.fasl")
return both, or just the one in faslcache?
SBCL opts for both (modulo the aforementioned bug), other implementations may do things differently.
I think if it's trying that hard, it should show only the first: only the fasl one is available through the LPN. And then, with :resolve-symlinks nil (or some other implementation-specific hack), it should give the logical pathname of that file instead of its truename.
But yes, I realize that the most recent way I cache the results of the search for all .asd files now (per DIRECTORY returning TRUENAMEs in the standard) breaks the previous ASDF promise of not transforming logical-pathname's into physical pathnames. ASDF BUG - or at least degradation in behavior to LPN users.
Calling TRANSLATE-LOGICAL-PATHNAME first makes the answer unambiguous -- just the faslcache one, thanks -- which is why I believe ASDF should do that prior to calling DIRECTORY.
It's also the wrong thing wrt what ASDF would like to do to support logical pathname users in the same way as before.
I see an ASDF 2.016.2 patch release coming.
PS: I'm impressed with how quick you came with a fix. Thank you!
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org For pretty much every writer, the big problem isn't piracy, it's obscurity. — Tim O'Reilly, as cited by Cory Doctorow