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:

  1. 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.
  2. orchestra_notification into the base module. Two plugins, no services file: Notify joins the seven TaskType plugins already there, NotifyAudience the five NodeFeature ones, and orchestra.node_feature.notify_to the five node-feature schema types.
  3. orchestra_inbox_notification into orchestra_inbox.
  4. orchestra_interaction_notification into orchestra_interaction, with the park_notify node feature and its schema.
  5. The *_notification idiom retired in seven places, and docs/metrics.md regenerated.

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.

Merge request reports

Loading
Loading