Issue #3618193: White screen when Domain Config UI and Interface Translation are both installed (3.x backport)

Fixes #3618193. Regression from #3618091, released in 3.1.0-alpha5.

domain.config_factory_override was given a module_handler constructor argument so it could invoke hook_domain_config_pinned_keys_alter(). That service is tagged config.factory.override, and domain_config_ui decorates config.factory and collects those overrides, so the argument closes a circular reference: building the module handler leads back to config.factory, to the decorator, and back to the service being constructed. Any site with domain_config_ui and Interface Translation installed white screens on every route.

The module handler now arrives through a setter, declared with calls: in the service definition, so the object is constructed first and the dependency set afterwards. That is the standard way to break a construction cycle, and the sibling domain.language.config_factory_override in this project already takes its own dependency exactly that way.

Reproduced and verified on a real site with domain_config, domain_config_ui and locale installed: every route returned 500 before, and the front page returns 200 after, with no circular reference or ArgumentCountError in the logs and the module handler confirmed present on the service.

No test is included, deliberately. A functional test installing domain_config_ui together with locale does not reproduce this: a minimal test site builds its container without the loop, because the cycle depends on which services are instantiated first and in what order, which follows from the whole module set. Such a test passes against the broken wiring and would be a false guard. A guard that works needs to inspect the compiled container for a circular reference rather than drive a request, and is worth doing properly in its own issue rather than rushed alongside a critical fix.

Merge request reports

Loading