A chain like A ← B ← C can happen very easily:
Adefines a macroBuses the macro to generate a functionfoo/2CcallsB.foo(x, y)
Changing the definition in A to instead produce a foo/3 and recompiling should fail, but that will only happen if C is recompiled.
There’s a lot more information in the docs for mix xref, which you’ll need to get familiar with to to figure out what’s going on in your application.
Also make sure you’re on the latest Elixir version if at all possible - the core team has done a lot of work behind-the-scenes to try to reduce these kind of headaches in the last couple releases.


















