Summary
openclaw doctor --fix correctly removes stale entries from plugins.allow[] and plugins.entries{} when a plugin is not found, but does not clean up plugins.slots.* references. A stale plugins.slots.<slot> reference causes a hard config validation failure — the entire config is rejected as invalid, and the gateway cannot start. The doctor reports "Repaired missing configured plugin" but leaves the slot untouched, so the user believes it was fixed when nothing actually changed.
This is a higher-severity gap than the existing #65293 (channel reference cleanup) because slot references are fatal to startup, whereas stale plugins.allow / plugins.entries entries are soft warnings only.
Steps to Reproduce
- Configure a plugin in
plugins.slots.memory (e.g. "openclaw-honcho")
- Delete the plugin files from disk:
rm -rf ~/.openclaw/npm/node_modules/@honcho-ai/openclaw-honcho
- Run
openclaw doctor --fix
- Doctor reports "Repaired missing configured plugin" and installs/reinstalls the package
- On a subsequent run, doctor may remove the plugin from
plugins.allow[] and plugins.entries{} (treating them as stale) while plugins.slots.memory still references it
- Run
openclaw config validate — fails with:
plugins.slots.memory: plugin not found: openclaw-honcho
- Gateway cannot start. Running doctor again gives the same "repaired" message but the slot is still stale — unrecoverable loop.
Actual Behavior
Expected Behavior
doctor --fix should either:
- Remove the stale
plugins.slots.<slot> entry when the referenced plugin is not found and cannot be installed, or
- Keep the plugin in
plugins.allow[] and plugins.entries{} when plugins.slots.* still references it (treat the slot as authoritative), or
- At minimum, warn that slots still reference a missing plugin instead of claiming repair success
Root Cause Analysis
The stale-entry cleanup logic in doctor treats plugins.slots.* differently from plugins.allow[] and plugins.entries{}. Slot values are validated at startup (hard error) but not cleaned up during doctor repair. Additionally, when doctor removes entries from plugins.allow[] and plugins.entries{} while a slot still references the same plugin, it creates a contradictory config that can never validate.
Environment
- OpenClaw: 2026.5.2 (8b2a6e5)
- OS: Ubuntu 24.04, Linux x86_64, Node 24
- Install: npm global + systemd-managed gateway
- Plugin:
@honcho-ai/openclaw-honcho 1.4.1
Impact
Users who lose plugin files on disk (npm registry issues, accidental deletion, #76441 wipe) cannot recover via doctor --fix and must manually edit openclaw.json to remove the slot reference. The misleading "repaired" message wastes debugging time.
Related Issues
AI-assisted disclosure: this bug report was drafted with AI assistance based on observed failure mode during gateway troubleshooting.
Summary
openclaw doctor --fixcorrectly removes stale entries fromplugins.allow[]andplugins.entries{}when a plugin is not found, but does not clean upplugins.slots.*references. A staleplugins.slots.<slot>reference causes a hard config validation failure — the entire config is rejected as invalid, and the gateway cannot start. The doctor reports "Repaired missing configured plugin" but leaves the slot untouched, so the user believes it was fixed when nothing actually changed.This is a higher-severity gap than the existing #65293 (channel reference cleanup) because slot references are fatal to startup, whereas stale
plugins.allow/plugins.entriesentries are soft warnings only.Steps to Reproduce
plugins.slots.memory(e.g."openclaw-honcho")rm -rf ~/.openclaw/npm/node_modules/@honcho-ai/openclaw-honchoopenclaw doctor --fixplugins.allow[]andplugins.entries{}(treating them as stale) whileplugins.slots.memorystill references itopenclaw config validate— fails with:Actual Behavior
plugins.allow[]andplugins.entries{}for stale pluginsplugins.slots.*at all — no removal, no warning, no repairopenclaw plugins installandopenclaw doctor --fixwipes other previously-installed@openclaw/*packages from~/.openclaw/npm/node_modules#76441:plugins installcan wipe other packages from disk, creating the exact conditions that trigger this gapExpected Behavior
doctor --fixshould either:plugins.slots.<slot>entry when the referenced plugin is not found and cannot be installed, orplugins.allow[]andplugins.entries{}whenplugins.slots.*still references it (treat the slot as authoritative), orRoot Cause Analysis
The stale-entry cleanup logic in
doctortreatsplugins.slots.*differently fromplugins.allow[]andplugins.entries{}. Slot values are validated at startup (hard error) but not cleaned up during doctor repair. Additionally, when doctor removes entries fromplugins.allow[]andplugins.entries{}while a slot still references the same plugin, it creates a contradictory config that can never validate.Environment
@honcho-ai/openclaw-honcho1.4.1Impact
Users who lose plugin files on disk (npm registry issues, accidental deletion, #76441 wipe) cannot recover via
doctor --fixand must manually editopenclaw.jsonto remove the slot reference. The misleading "repaired" message wastes debugging time.Related Issues
doctor --fixleaves danglingchannels.*references (same class of bug, but for channels instead of slots)openclaw plugins installandopenclaw doctor --fixwipes other previously-installed@openclaw/*packages from~/.openclaw/npm/node_modules#76441:plugins installwipes other packages from disk (compounds this problem by removing files the slot needs)AI-assisted disclosure: this bug report was drafted with AI assistance based on observed failure mode during gateway troubleshooting.