Fold the three notification dispatcher submodules into the modules that own their points, and skip dispatch when no channel is listening
Fixes the packaging described in #3624863: three submodules whose whole content was the code that dispatches at one notification point, none of which bought a dependency its host could not carry.
Five commits, each reviewable on its own:
OrchestraNotification::hasChannel()and the guard at all four dispatch points, with a test. The separate modules used to spare a channel-less site the audience resolution and the instance-variable read by simply not being installed; merging them makes those paths unconditional, so this comes first.orchestra_notificationinto the base module. Two plugins, no services file:Notifyjoins the seven TaskType plugins already there,NotifyAudiencethe five NodeFeature ones, andorchestra.node_feature.notify_tothe five node-feature schema types.orchestra_inbox_notificationintoorchestra_inbox.orchestra_interaction_notificationintoorchestra_interaction, with thepark_notifynode feature and its schema.- The
*_notificationidiom retired in seven places, anddocs/metrics.mdregenerated.
Tracked module directories go 34 -> 31; 43 files, +431 / -568.
The delivery channels stay separate: orchestra_mail and orchestra_easy_email are mutually exclusive in practice and choosing between them is the operator's, which is the seam that carries its weight.
Verified locally: the five kernel classes this touches pass individually, including WorkflowDependenciesTest because moving a plugin changes its provider; the new test was confirmed to fail with the guard disabled; phpcs over the whole module is clean apart from three pre-existing orchestra_bpmn_io/js files this branch never touches; cspell reports nothing on the added lines; and scripts/check-translations.php reports every string translated in the catalogue of the project that ships it.
Draft until CI is green.