Issue #3614981: Decouple MyrestNormalizer from hardcoded module dependencies
MyrestNormalizer referenced myfacet, myrest_metatag and myentity classes directly, so the module could not run without them.
- Add MyrestMetatagProviderInterface and the "myrest_metatag_provider" service tag. The normalizer collects tagged providers via a tagged iterator instead of injecting MyrestMetatagHelper, and works with an empty collection when no module provides metatags.
- Add the myrest.normalize and myrest.metatags events so modules can inject data without the normalizer knowing about them.
- Drop the myfacet.manager injection: it was never used.
- Replace the MyentityMyrestMetatagInterface check with the core FieldableEntityInterface / referencedEntities() API.
- Move the ARTICLES_NID / CONTACTS_NID constants from myentity to the new myrest.settings:special_pages configuration, with schema and defaults.
- Add METATAG_DEFAULTS so downstream logic never reads an undefined "noindex" key when no provider is registered.
- Fix a fatal error: ByteSizeMarkup was used without a use statement and resolved to the local namespace on every normalized response.
- Accept a nullable CacheableMetadata in getMetatags(), matching what normalize() actually passes.
- Replace the untranslated "[Translated]-[Translated]" publisher metatag with the configured site name, and restore the mangled comments.
- Expand the unit test to cover provider collection, foreign services, missing providers and cacheability.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Closes #3614981