More specifically, the issue is that it defines a static directory in plugin.json:
"staticDirs": {
"s3": "public"
},
But doesn't have it.
It seems to be an artifact of people forking and updating it without fully understanding what exactly it was doing - looking back at some history at some point someone moved the templates from public/templates to just templates/ and apparently NodeBB wasn't enforcing that directories have to exist at that point, so it wasn't noticed and all future forks inherited this bug.
NodeBB is IMO doing fine here - a lack of directory a plugin declared to have might suggest some issue with the installation or the plugin itself (for example a typo in a path). A plugin incorrectly declaring something it doesn't use can't really be distinguished from these issues.
Also, @julian while .gitignore works, I feel like it's a bit of abuse of that feature and the name is misleading (upon seeing a directory with .gitignore my first thought would be that something is supposed to go there but will be ignored. And I feel without knowing much about git I might've assumed it meant the whole directory would be ignored by git - the opposite of what it actually does). I personally prefer the convention of using an empty file named .gitkeep (or just .keep), since it more obviously refers to keeping the directory and wouldn't have any other potential impact on files included by git.
EDIT: TL;DR of the issue:
[image: 1663029091446-why-would-nodebb-do-this.png]