Warning: you are implementing a protocol for ... but said module is not available

I do have a project to trigger it, it was in the original post

Here is the project

We can easily test this by changing the mix.exs deps to:

      {:ash, "~> 3.9"},
      {:spark, "== 2.3.11"},

And then run MIX_ENV=test mix compile --force --profile time

This will generate the app without any warnings:

==> core
Compiling 6 files (.ex)
[profile]     23ms compiling +      0ms waiting while compiling lib/core/application.ex
[profile]     62ms compiling +      0ms waiting while compiling test/support/factory/builder.ex
[profile]    375ms compiling +      0ms waiting while compiling lib/core/marketplace/chat.ex
[profile]   1991ms compiling +      0ms waiting while compiling lib/core/marketplace/chat/attachment.ex
[profile]    998ms compiling +   1820ms waiting for module Core.Marketplace.Chat.Attachment while compiling lib/core/marketplace/chat/property_message.ex
[profile]     66ms compiling +   2687ms waiting for module Core.Marketplace.Chat.PropertyMessage while compiling test/support/factory/marketplace/chat/property_message.ex
[profile] Finished cycle resolution in 0ms
[profile] Finished compilation cycle of 9 modules in 2852ms
[profile] Finished group pass check of 9 modules in 179ms
Generated core app

But, if we update the spark version to 2.3.12 or newer:

      {:ash, "~> 3.9"},
      {:spark, "== 2.3.12"},

And run the same command MIX_ENV=test mix compile --force --profile time

Now we will see the warning being generated:

==> core
Compiling 6 files (.ex)
[profile]     38ms compiling +      0ms waiting while compiling lib/core/application.ex
[profile]     79ms compiling +      0ms waiting while compiling test/support/factory/builder.ex
[profile]    420ms compiling +      0ms waiting while compiling lib/core/marketplace/chat.ex
[profile] Finished deadlock resolution in 0ms
    warning: you are implementing a protocol for Core.Marketplace.Chat.PropertyMessage but said module is not available. Make sure the module name is correct. If Core.Marketplace.Chat.PropertyMessage is an optional dependency, please wrap the protocol implementation in a Code.ensure_loaded?(Core.Marketplace.Chat.PropertyMessage) check
    │
  1 │ defimpl Core.Support.Factory.Builder, for: Core.Marketplace.Chat.PropertyMessage do
    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    │
    └─ test/support/factory/marketplace/chat/property_message.ex:1: (file)

[profile]     70ms compiling +    327ms waiting for module Core.Marketplace.Chat.PropertyMessage while compiling test/support/factory/marketplace/chat/property_message.ex
[profile]                    |     22ms waiting for module Core.Support.Factory.Builder while compiling test/support/factory/marketplace/chat/property_message.ex
[profile] Finished deadlock resolution in 0ms
[profile]   2112ms compiling +    446ms waiting for module :embedded while compiling lib/core/marketplace/chat/attachment.ex
[profile]   1178ms compiling +   2363ms waiting for module Core.Marketplace.Chat.Attachment while compiling lib/core/marketplace/chat/property_message.ex
[profile] Finished cycle resolution in 0ms
[profile] Finished compilation cycle of 9 modules in 3543ms
[profile] Finished group pass check of 9 modules in 97ms
Generated core app