The docs say things like to have at least an empty __init__.py, but the stock collections like community.general don’t have one. Instead, they have lots of complex files (JSON in toplevel, YAML and text in meta/, …).
__init__ was required when doing sub directories for ‘adjacent’ plugins (might still be, need to check), but collections for core >2.10 should not need it anymore.
Perhaps, but community.docker is the one I’m interested in how it works, since I need to fork and rename 3.13.10 for access to the older docker compose module for Debian bookworm and older.
(In retrospect, upgrading the control node to trixie was a mistake, but then, we had to do that to be able to manage trixie targets…)