openclaw - 💡(How to fix) Fix Bundled channel schema overrides external plugin schema even when bundled plugin is disabled [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#56794Fetched 2026-04-08 01:47:42
View on GitHub
Comments
0
Participants
1
Timeline
2
Reactions
1
Participants
Timeline (top)
cross-referenced ×1subscribed ×1

Root Cause

In buildBundledChannelMaps(), bundled channel plugins are iterated first (line ~334203) and their schemas are unconditionally added to configSchemaMap. When BUNDLED_PLUGIN_METADATA entries are processed (line ~334209), they check !configSchemaMap.has(channelId) to avoid duplicates, but this only prevents metadata entries from overriding bundled plugins — not the other way around.

External plugins (loaded later) never get a chance to override the bundled schema because the map is already populated.

The plugins.entries.feishu.enabled: false config is not consulted during schema map construction.

RAW_BUFFERClick to expand / collapse

Bug Description

When an external plugin (e.g., @larksuite/openclaw-lark) registers the same channel id (feishu) as a bundled channel extension, and the bundled extension is explicitly disabled via plugins.entries.feishu.enabled: false, the bundled extension's config schema still takes priority during validation. This causes config fields defined by the external plugin (e.g., footer) to be rejected as "additional properties", preventing openclaw from starting.

Root Cause

In buildBundledChannelMaps(), bundled channel plugins are iterated first (line ~334203) and their schemas are unconditionally added to configSchemaMap. When BUNDLED_PLUGIN_METADATA entries are processed (line ~334209), they check !configSchemaMap.has(channelId) to avoid duplicates, but this only prevents metadata entries from overriding bundled plugins — not the other way around.

External plugins (loaded later) never get a chance to override the bundled schema because the map is already populated.

The plugins.entries.feishu.enabled: false config is not consulted during schema map construction.

Expected Behavior

When a bundled channel plugin is disabled (enabled: false) or an external plugin registers the same channel id, the external plugin's config schema should take priority in validation.

Steps to Reproduce

  1. Install @larksuite/openclaw-lark plugin
  2. Set plugins.entries.feishu.enabled: false and plugins.entries.openclaw-lark.enabled: true
  3. Add any config field defined by openclaw-lark but not by the bundled feishu extension (e.g., channels.feishu.footer)
  4. Run openclaw status — fails with "must NOT have additional properties"

Environment

  • openclaw: 2026.3.28
  • @larksuite/openclaw-lark: 2026.3.26
  • OS: Ubuntu Linux

Suggested Fix

In buildBundledChannelMaps(), check whether each bundled channel plugin is disabled before adding its schema to configSchemaMap. Or allow external plugin schemas to override bundled ones when they share the same channel id.

extent analysis

Fix Plan

To fix the issue, we need to modify the buildBundledChannelMaps() function to check if a bundled channel plugin is disabled before adding its schema to configSchemaMap. We can also allow external plugin schemas to override bundled ones when they share the same channel id.

Here are the steps:

  • Check if a bundled channel plugin is disabled before adding its schema
  • Allow external plugin schemas to override bundled ones

Code Changes

// In buildBundledChannelMaps()
for (const bundledPlugin of BUNDLED_CHANNEL_PLUGINS) {
  if (!plugins.entries[bundledPlugin.channelId].enabled) {
    // Skip disabled bundled plugins
    continue;
  }
  // Add schema to configSchemaMap
  configSchemaMap.set(bundledPlugin.channelId, bundledPlugin.schema);
}

// Later, when processing external plugins
for (const externalPlugin of externalPlugins) {
  if (configSchemaMap.has(externalPlugin.channelId)) {
    // Override bundled schema with external plugin schema
    configSchemaMap.set(externalPlugin.channelId, externalPlugin.schema);
  } else {
    // Add external plugin schema to configSchemaMap
    configSchemaMap.set(externalPlugin.channelId, externalPlugin.schema);
  }
}

Verification

To verify the fix, follow these steps:

  • Install the @larksuite/openclaw-lark plugin
  • Set plugins.entries.feishu.enabled: false and plugins.entries.openclaw-lark.enabled: true
  • Add a config field defined by openclaw-lark but not by the bundled feishu extension (e.g., channels.feishu.footer)
  • Run openclaw status — it should succeed without errors

Extra Tips

  • Make sure to test the fix with different combinations of enabled and disabled plugins to ensure it works as expected.
  • Consider adding logging or debugging statements to verify that the correct schemas are being used during validation.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING