Running 2026.5.7 on Windows 11. Custom local before_dispatch plugin (id router-plugin) worked fine on 4.27 but stopped loading after upgrading. Plugin lives at ~/.openclaw/extensions/router-plugin/.
Root cause: plugins/installs.json has the router-plugin key resolving to two entries — first to the bundled openrouter provider (node_modules/openclaw/dist/extensions/openrouter/), then to my plugin. The bundled one wins and mine is dropped.
Evidence: When inspecting installs.json, the router-plugin key showed two pluginId fields in the same record — first "pluginId": "openrouter" pointing to dist/extensions/openrouter/ (bundled provider), then "pluginId": "router-plugin" pointing to my custom plugin. The bundled entry wins on every restart because the registry is regenerated and the collision reintroduces itself. No config change survives a restart.
One clean boot occurred immediately after openclaw plugins install --dangerously-force-unsafe-install --force — gateway showed 2 plugins: router-plugin, telegram and loaded correctly. Every subsequent restart dropped back to 1 plugin. The install writes the correct registry entry, but restart regenerates the registry and the collision reintroduces itself.
Things I've tried: plugins registry --refresh, renaming manifest id to carson-router (new duplicate collision), plugins install --force, plugins.load.paths pointing at my directory, plugins.entries.openrouter.enabled: false. Nothing survives a restart.
Is there a way to exclude the bundled openrouter from discovery, or force my local plugin to take precedence? Happy to share the full installs.json if useful. @foggy violet