Earlier I claimed that the new ASDF TRAVERSE computed a conservative approximation to what needed to be recompiled. In particular, if we have
(defsystem X :depends-on (Y) ....)
With the new patch, if we do load-op on X, and Y has changed, X will be recompiled.
In Classic ASDF, this would not happen.
However, even with the new patch, this does not happen correctly.
In particular, this case will not work properly
(defsystem X :depends-on (Y) ...)
(defsystem Z :depends-on (Y) ...)
Let's imagine I load X and Z, which causes me to load Y.
Now I modify some of the code of Y and reload X. ASDF will notice the change in Y and trigger a recompilation of X.
BUT if I now (asdf:load-system :z), when we check the dependencies of Z and find Y, there will be nothing that needs to be done for Y, so recompilation of Z will /not/ be triggered.
So the problem with trying to do a conservative estimation of what needs to be recompiled is that we don't store with a system object information about the state of things upon which it depends, so we cannot detect a change in the state of those dependencies.....
Information about the last compilation of a system /is/ available in ASDF, but we don't store with X and Z information about the state of Z when they were compiled.
To open YA can of worms, we also don't cache information about systems *across lisp sessions*. But I think I'll just raise that issue and then drop it like a hot potato.
Cheers, r