diff --git a/app/plugins/builtins/automation/plugin.py b/app/plugins/builtins/automation/plugin.py index 34c2d15..c2ccaf9 100644 --- a/app/plugins/builtins/automation/plugin.py +++ b/app/plugins/builtins/automation/plugin.py @@ -244,22 +244,10 @@ class AutomationPlugin(BasePlugin): self._register_workflow_agent_tools() except Exception: logger.exception("Failed to register workflow agent tools") - # Register MiniApps from manifest - try: - from app.plugins.builtins.kommunikation.contracts import get_miniapp_registry - registry = get_miniapp_registry() - for miniapp in self.manifest.miniapps: - registry.register( - app_id=miniapp.app_id, - name=miniapp.name, - icon=miniapp.icon, - description=miniapp.description, - plugin_name=self.manifest.name, - render_schema=miniapp.render_schema, - ) - logger.info("Registered MiniApp '%s' from manifest", miniapp.app_id) - except Exception: - logger.exception("Failed to register MiniApps from manifest") + # NOTE: Manifest MiniApps are registered by super().on_activate() + # (BasePlugin, Phase M1) WITH all fields (permission, component, + # settings_schema). The legacy re-registration here dropped those + # fields and overwrote the correct entries — removed (M5 fix). # Register own cron jobs from manifest try: await self.register_plugin_contributions(db, self.manifest.name, self.manifest) diff --git a/tests/test_m5_plugin_miniapps.py b/tests/test_m5_plugin_miniapps.py index 662dee9..5ed3172 100644 --- a/tests/test_m5_plugin_miniapps.py +++ b/tests/test_m5_plugin_miniapps.py @@ -84,3 +84,21 @@ class TestPluginMiniAppContributions: assert any(f["name"] == "max_items" for f in fields), ( f"{app_id}: max_items missing in settings_schema" ) + + +def test_automation_legacy_reregistration_removed(): + """M5 fix: automation's on_activate used to re-register manifest + miniapps with only a subset of fields AFTER super().on_activate(), + overwriting the correct M1 registration (component/permission lost — + measured live on production 2026-08-30: automation_status comp=no). + The legacy block must stay removed; super() owns the registration. + """ + import inspect + + from app.plugins.builtins.automation.plugin import AutomationPlugin + + src = inspect.getsource(AutomationPlugin.on_activate) + assert "for miniapp in self.manifest.miniapps" not in src, ( + "legacy miniapp re-registration re-introduced" + ) + assert "kommunikation.contracts import get_miniapp_registry" not in src