The discovery heuristic only searched the first 8 KB of a plugin's __init__.py for the provider contract, so a valid provider with a long module docstring was invisible. Fall back to _defines_memory_provider (AST parse, no import) when the cheap text search misses.