Quicklisp systems are located via a function appended to the end of ASDF:*SYSTEM-DEFINITION-SEARCH-FUNCTIONS*. It looks like ASDF defines this variable with DEFPARAMETER, so every time asdf.lisp is loaded, the value is set to ASDF's initial value. It seems to me that ASDF should use DEFVAR instead.
After a moment's reflection, I don't think DEFVAR is suitable for this situation, since it would make upgrading from an old ASDF1 to a new ASDF2 fail to pick up the new ASDF system definition search functions.
Upgrading from ASDF1 is one thing. Another thing is that on some implementations (notably SBCL), you can't undo a defgeneric and if the signature changed, you have to use a new symbol, which invalidates ASDF extensions, that have to be reloaded.
That is why I recommend that any upgrading of ASDF should happen first. Maybe Quicklisp should upgrade ASDF with (asdf:upgrade-asdf) first thing after loading its own? (and issue an cerror if the new one was actually a downgrade?)
If you have great ideas on how to avoid these issues, we could rename the variable to something different, and then use DEFVAR on the new variable. This would allow both upgrading from previous versions and smoothly upgrading to new ones.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Insanity is hereditary — you get it from your kids.