clean-op is an impossible operation to fix, because its meaning isn't
defined in general, and CANNOT be defined in general. And while some
specific subsets and variants of it CAN be defined, they remain so
specific as to not be of general purpose and/or there are enough
subtly different variants of it to require a breakdown of the vague
idea into clearly separated concepts.
For instance, in the context of using git, you might "just" do a:
git clean -xfd
and call it quits. Yet, unless you specifically configured your
output-translations to point to under the current git repository,
it won't clean your fasl-translated cache, which would be in e.g.
~/.cache/common-lisp/ccl-1.12-f102-linux-x86/home/fare/common-lisp/arnesi/
Then comes the question: should clean-op clean only for the
current implementation, or should it also remove objects for
sbcl, ecl, allegro, etc.? A git clean might erase files that
you'd like to preserve, that you failed to git add. A
rm -rf ~/.cache/common-lisp/ccl-1.12-f102-linux-x86/home/fare/common-lisp/arnesi/
would fail to remove fasls from dependencies or on other
implementations. You could try
rm -rf ~/.cache/common-lisp/ccl-1.12-f102-linux-x86/
or even
rm -rf ~/.cache/common-lisp/
but then that might remove too many things, including things you might
like to keep at that time. And if you have a non-standard
configuration for output-translations, this might still miss some
files you might want to remove.