This is ASDF3. Dependencies are propagated correctly, unlike with ASDF 1&2. If you want to catch a macro redefinition, just define a dependency, as you should.
When I develop interactively and change stuff without saving files, perhaps because I'm working in a scratch buffer, I still want the suite to be recompiled.
If you recompiled a file but did not recompile some files that depend on it, ASDF3 will correctly recompile them when you (test-system :swap-bytes). No need to force anything. This is not ASDF 1&2.
Which files do or don't get compiled twice?
:swap-bytes/test depends on :swap-bytes. When I (asdf:load-system :swap-bytes/test :force '(:swap-bytes/test)), some files from :swap-bytes get recompiled too, namely the last two, network.lisp and endianness.lisp
Indeed, this is a subtle bug in madeira-port: when you depend on a component that is excluded from the build by madeira-port, the component fails to declare an empty set of output-files, while its perform method fails to create the declared output-files, and therefore ASDF while planning decides that this build step is incomplete, as well as anything that depends on it directly or indirectly.
The solution is for madeira-port to also provide a :around method for output-files. That's subtle: I didn't think of it when reading the source code.
For once, this wasn't an ASDF bug.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org If once you have paid him the Dane-geld / You never get rid of the Dane. — Rudyard Kipling