Just after the server starts in the --verbose mode, Jekyll will output a list of paths it is not going to watch for changes…
Posting a screenshot of that will help us decide if its a bug or incorrect configuration…
Something to keep in mind is that the exclude in the _config is doing double duty.
Its what jekyll is ignoring processing into your _site output. Its using the list of things in one way (disk path globs)
The watcher gem is also using that same list for what to ignore file change events of, but its building different regex to apply to the file change path events.
When watcher is building the regex, the /** syntax freaks it out, because its not a valid regex, so it throws it away, and doesnt not ignore changes in .idea, thus changes in that folder will cause a regen cycle, but the output will be the same, because to jekyll, nothing is actually different, as it is correctly using the /** format and ignoring the fact that .idea even exists.
Jekyll will indeed auto exclude (for building purposes) any folders that start with _ or . BUT, if you dont explicitly list them in exclude, the watcher gem wont add a regex to ignore them for the “purposes of watching for file changes” so the original .idea/ in exclude will should work to ignore the folder from the watcher from triggering a regen.
Granted I’m testing this with Jekyll 3.8.5, not 4.0, and somethings in the watcher gem have changed, but I think what might have happened in your original setup is if you left it in watch mode and changed the _config, it wasnt reloaded, so the test was faulty.
Something else that might (but not likely?) be causing it is the quotes because you have it in inline array format, and not yaml list format. I would say it would parse the same, but it could be something dumb as a different path in Psych that gets trimmed one way but not the other?