EMBEDDER_MISMATCH
A candidate cleared the threshold but was written by a different Embedder.identity, so its similarity was never a real number and the entry was refused unscored.
This one is not a tuning signal, it is an incident. Every other reason describes a judgement the cache made; this one says the store holds vectors from a model that is no longer running, which happens when an embedding model is swapped for another and nothing invalidated what the old one wrote. Lowering the threshold cannot help and would make it worse. See docs/MIGRATION.md for the two ways out, re-embedding or a separate scope, and CacheEvent.EmbedderMismatch for the event that names both identities.