-
-
Notifications
You must be signed in to change notification settings - Fork 69.5k
Regression: doctor --fix adds whatsapp to plugins.allow on v2026.3.22 #52931
Description
openclaw doctor --fix regression on v2026.3.22: tries to add whatsapp to plugins.allow
Summary
On OpenClaw 2026.3.22, openclaw doctor --fix fails on an otherwise healthy config when WhatsApp is configured as a channel.
Doctor reports:
WhatsApp configured, enabled automatically.
Then exits with:
Error: Config validation failed: plugins.allow: plugin not found: whatsapp
This appears to be a doctor migration bug, not a user-config error. Doctor seems to treat the channels.whatsapp channel id as if it were a plugin id and attempts to write whatsapp into plugins.allow, which then fails schema validation.
Environment
- OpenClaw version:
2026.3.22 (4dcc39c) - OS: macOS
26.3.1arm64 - Install type: global
pnpm - Gateway mode: local LaunchAgent
Current config shape
Relevant config excerpt:
{
"channels": {
"whatsapp": {
"enabled": true,
"dmPolicy": "allowlist",
"allowFrom": ["+8615687411111"],
"groupPolicy": "allowlist"
}
},
"plugins": {
"allow": [
"memory-lancedb-pro",
"synology-chat"
]
}
}Notes:
plugins.allowdoes not containwhatsappwhatsappis configured only underchannels.whatsappopenclaw gateway healthisOKopenclaw statusis healthy
Reproduction
- Upgrade to
v2026.3.22 - Use a config with:
channels.whatsapp.enabled = true- no
whatsappentry inplugins.allow
- Run:
openclaw doctor --fixActual result
Doctor prints migration hints, then exits with:
Error: Config validation failed: plugins.allow: plugin not found: whatsapp
Full tail of the output from a real run:
Synology Chat: configured
Agents: main (default), scheduler, ckm-rag, qa, backend-dev, tech-lead, system-maintenance
Heartbeat interval: 30m (main)
Session store (main): /Users/coxi/.openclaw/agents/main/sessions/sessions.json (3 entries)
- agent:main:whatsapp:direct:+8615687411111 (7736m ago)
- agent:main:main (8475m ago)
- agent:main:synology-chat-4 (9020m ago)
Memory search is explicitly disabled (enabled: false).
Error: Config validation failed: plugins.allow: plugin not found: whatsapp
Expected result
One of:
- Doctor should leave
plugins.allowunchanged and only keep WhatsApp underchannels.whatsapp, or - Doctor should enable WhatsApp using the current channel-native configuration path instead of the plugin allowlist.
In either case, doctor should not write an invalid plugin id into plugins.allow.
Suspected root cause
Doctor appears to conflate channel ids with plugin ids during auto-enable/fix migration.
channels.whatsappis valid channel configurationplugins.allowaccepts only installed plugin ids- doctor seems to generate an invalid config candidate by inserting
whatsappintoplugins.allow - validation then fails before the fix flow can complete
Why this looks like a regression
v2026.3.22 includes breaking changes around plugins, channels, and config migration. On this version:
- WhatsApp works as a configured channel
- the gateway is healthy before running doctor
doctor --fixis the command introducing the invalid config transition
That strongly suggests the bug is inside doctor's auto-enable/migration path rather than in the base config.
Impact
- users upgrading to
v2026.3.22may be blocked from usingopenclaw doctor --fix - the recommended post-upgrade repair flow cannot complete successfully for configs with WhatsApp enabled
- users may think their config is broken even when the gateway is otherwise healthy
Workaround
- do not run
openclaw doctor --fixonv2026.3.22when WhatsApp is enabled openclaw doctor --non-interactiveandopenclaw doctor --deep --non-interactivestill work for diagnostics- keep
whatsapponly underchannels.whatsapp - if
plugins.allowgets polluted withwhatsapp, remove it manually
Additional observations
- re-running
openclaw doctor --fixafter cleaning unrelated invalid plugin entries still reproduces the same failure - the config file remained unchanged on the failed run in this environment, so the issue appears to occur during doctor's attempted write/validation cycle rather than from a pre-existing stale file