openclaw - 💡(How to fix) Fix [Bug]: 2026.3.28 bundled feishu channelConfigs schema overrides openclaw-lark plugin schema even when bundled plugin is disabled [2 comments, 2 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#56932Fetched 2026-04-08 01:45:50
View on GitHub
Comments
2
Participants
2
Timeline
5
Reactions
0
Author
Participants
Timeline (top)
commented ×2closed ×1locked ×1subscribed ×1

When upgrading from 2026.3.24 to 2026.3.28, Gateway refuses to start with:

channels.feishu: invalid config: must NOT have additional properties
channels.feishu.accounts.jeeves: invalid config: must NOT have additional properties
channels.feishu.accounts.ivy: invalid config: must NOT have additional properties
channels.feishu.accounts.crichton: invalid config: must NOT have additional properties
channels.feishu.accounts.marple: invalid config: must NOT have additional properties

The external plugin @larksuite/openclaw-lark (2026.3.26) registers channel id feishu with a full config schema that includes keys like replyMode, footer, botName, blockStreaming, markdown, dedup, threadSession, and uat. However, the bundled @openclaw/feishu plugin also registers channel id feishu with a channelConfigs schema (new in 2026.3.28) that does not include these keys and sets additionalProperties: false.

The bundled plugin is explicitly disabled (plugins.entries.feishu.enabled: false), but its schema still takes priority during config validation.

Root Cause

Root Cause (code-verified)

Fix Action

Fix / Workaround

  1. Install @larksuite/[email protected]
  2. Configure plugins.entries.feishu.enabled: false and plugins.entries.openclaw-lark.enabled: true
  3. Add any openclaw-lark-specific config key under channels.feishu (e.g., footer, replyMode, botName in accounts)
  4. Upgrade to OpenClaw 2026.3.28
  5. Run openclaw gateway status — fails with "must NOT have additional properties"

Code Example

channels.feishu: invalid config: must NOT have additional properties
channels.feishu.accounts.jeeves: invalid config: must NOT have additional properties
channels.feishu.accounts.ivy: invalid config: must NOT have additional properties
channels.feishu.accounts.crichton: invalid config: must NOT have additional properties
channels.feishu.accounts.marple: invalid config: must NOT have additional properties

---

channelConfigs: { feishu: {
  schema: {
    type: "object",
    properties: { enabled, defaultAccount, appId, appSecret, ... },
    additionalProperties: false  // rejects any key not listed
  }
}}

---

{
  "channels": {
    "feishu": {
      "enabled": true,
      "domain": "lark",
      "connectionMode": "websocket",
      "requireMention": false,
      "streaming": true,
      "replyMode": "streaming",
      "footer": { "status": true, "elapsed": true },
      "accounts": {
        "jeeves": {
          "appId": "cli_xxx",
          "appSecret": "***",
          "domain": "lark",
          "botName": "Jeeves",
          "dmPolicy": "allowlist",
          "groupPolicy": "open"
        }
      }
    }
  },
  "plugins": {
    "entries": {
      "feishu": { "enabled": false },
      "openclaw-lark": { "enabled": true }
    }
  }
}
RAW_BUFFERClick to expand / collapse

Summary

When upgrading from 2026.3.24 to 2026.3.28, Gateway refuses to start with:

channels.feishu: invalid config: must NOT have additional properties
channels.feishu.accounts.jeeves: invalid config: must NOT have additional properties
channels.feishu.accounts.ivy: invalid config: must NOT have additional properties
channels.feishu.accounts.crichton: invalid config: must NOT have additional properties
channels.feishu.accounts.marple: invalid config: must NOT have additional properties

The external plugin @larksuite/openclaw-lark (2026.3.26) registers channel id feishu with a full config schema that includes keys like replyMode, footer, botName, blockStreaming, markdown, dedup, threadSession, and uat. However, the bundled @openclaw/feishu plugin also registers channel id feishu with a channelConfigs schema (new in 2026.3.28) that does not include these keys and sets additionalProperties: false.

The bundled plugin is explicitly disabled (plugins.entries.feishu.enabled: false), but its schema still takes priority during config validation.

Root Cause (code-verified)

2026.3.28 introduced channelConfigs in BUNDLED_PLUGIN_METADATA for the bundled feishu plugin (chat-meta-xAV2SRO1.js:3563):

channelConfigs: { feishu: {
  schema: {
    type: "object",
    properties: { enabled, defaultAccount, appId, appSecret, ... },
    additionalProperties: false  // rejects any key not listed
  }
}}

This schema is missing keys that @larksuite/openclaw-lark defines and users rely on:

  • replyMode — streaming card reply mode
  • footer — card footer config (elapsed/status/tokens)
  • botName — per-account bot display name
  • blockStreaming, markdown, dedup, threadSession, uat

In buildBundledChannelMaps(), bundled channel schemas are added to configSchemaMap unconditionally, without checking whether the bundled plugin is disabled. External plugins loaded later cannot override the bundled schema for the same channel id.

2026.3.24 did not have this issue because channelConfigs did not exist — the bundled feishu entry only had configSchema: { additionalProperties: false, properties: {} } at the plugin level, and channel config validation was delegated to the loaded plugin at runtime.

Steps to Reproduce

  1. Install @larksuite/[email protected]
  2. Configure plugins.entries.feishu.enabled: false and plugins.entries.openclaw-lark.enabled: true
  3. Add any openclaw-lark-specific config key under channels.feishu (e.g., footer, replyMode, botName in accounts)
  4. Upgrade to OpenClaw 2026.3.28
  5. Run openclaw gateway status — fails with "must NOT have additional properties"

Config snippet

{
  "channels": {
    "feishu": {
      "enabled": true,
      "domain": "lark",
      "connectionMode": "websocket",
      "requireMention": false,
      "streaming": true,
      "replyMode": "streaming",
      "footer": { "status": true, "elapsed": true },
      "accounts": {
        "jeeves": {
          "appId": "cli_xxx",
          "appSecret": "***",
          "domain": "lark",
          "botName": "Jeeves",
          "dmPolicy": "allowlist",
          "groupPolicy": "open"
        }
      }
    }
  },
  "plugins": {
    "entries": {
      "feishu": { "enabled": false },
      "openclaw-lark": { "enabled": true }
    }
  }
}

Expected Behavior

When a bundled channel plugin is disabled and an external plugin registers the same channel id, the external plugin's config schema should be used for validation (or at minimum, the bundled schema should not reject keys the external plugin defines).

Environment

  • OpenClaw: 2026.3.28
  • @larksuite/openclaw-lark: 2026.3.26
  • macOS arm64, Node 22.22.1

Related

  • #56794 (same root cause, reported by another user)
  • #56882 (footer config rejected)

extent analysis

Fix Plan

To resolve the issue, we need to modify the buildBundledChannelMaps function to conditionally add bundled channel schemas to configSchemaMap based on whether the bundled plugin is enabled.

Code Changes

// In buildBundledChannelMaps function
if (plugin.enabled) {
  // Add bundled channel schema to configSchemaMap
  configSchemaMap[plugin.channelId] = plugin.channelConfigs.schema;
}

Additionally, we need to update the channelConfigs schema in the bundled @openclaw/feishu plugin to include the missing keys:

channelConfigs: { feishu: {
  schema: {
    type: "object",
    properties: {
      enabled,
      defaultAccount,
      appId,
      appSecret,
      replyMode,
      footer,
      botName,
      blockStreaming,
      markdown,
      dedup,
      threadSession,
      uat,
      ... // other properties
    },
    additionalProperties: false
  }
}}

Alternatively, we can set additionalProperties to true to allow any additional properties:

channelConfigs: { feishu: {
  schema: {
    type: "object",
    properties: {
      enabled,
      defaultAccount,
      appId,
      appSecret,
      ... // other properties
    },
    additionalProperties: true
  }
}}

Verification

To verify the fix, run openclaw gateway status after applying the changes. The gateway should start successfully without any "must NOT have additional properties" errors.

Extra Tips

  • Make sure to update the @openclaw/feishu plugin to the latest version to ensure compatibility with the changes.
  • If using a custom plugin, ensure that the plugin's config schema is compatible with the updated channelConfigs schema.
  • Consider adding a check to ensure that the external plugin's config schema is used when the bundled plugin is disabled.

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