Name conflict between internal module and second-level dependency

The rule of thumb is to never define root level modules, each application should use its own based on app name. For example all your modules in your app (if your app is named my_app) should be in format MyApp.*, this is simply because all module names are just atoms and global. The only exceptions you can see with naming is with phoenix, there you have MyApp.* and MyAppWeb.*.

It’s strange that the compiler did not throw an error, because if you would try to define modules with duplicate names in your application, it will not compile.