openclaw - ✅(Solved) Fix qqbot missing from channel contract guardrails and package-manifest checks [2 pull requests, 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#65851Fetched 2026-04-14 05:40:04
View on GitHub
Comments
0
Participants
1
Timeline
2
Reactions
0
Author
Participants
Timeline (top)
cross-referenced ×2

qqbot is a bundled channel plugin (extensions/qqbot/) with three runtime dependencies (mpg123-decoder, silk-wasm, ws) that are already mirrored in the root package.json. However, qqbot is not present in:

  1. src/plugins/contracts/package-manifest.contract.test.ts -- validates that plugin dependencies stay in sync with root-level mirrors
  2. src/channels/plugins/contracts/channel-import-guardrails.test.ts GUARDED_CHANNEL_EXTENSIONS -- ensures channel plugins do not directly import core internal modules
  3. Same file, LOCAL_EXTENSION_API_BARREL_GUARDS -- ensures extensions go through the API barrel instead of direct paths

All other bundled channels (feishu, zalo, zalouser, telegram, discord, slack, synology-chat, etc.) are included in these lists.

Root Cause

qqbot is a bundled channel plugin (extensions/qqbot/) with three runtime dependencies (mpg123-decoder, silk-wasm, ws) that are already mirrored in the root package.json. However, qqbot is not present in:

  1. src/plugins/contracts/package-manifest.contract.test.ts -- validates that plugin dependencies stay in sync with root-level mirrors
  2. src/channels/plugins/contracts/channel-import-guardrails.test.ts GUARDED_CHANNEL_EXTENSIONS -- ensures channel plugins do not directly import core internal modules
  3. Same file, LOCAL_EXTENSION_API_BARREL_GUARDS -- ensures extensions go through the API barrel instead of direct paths

All other bundled channels (feishu, zalo, zalouser, telegram, discord, slack, synology-chat, etc.) are included in these lists.

Fix Action

Fixed

PR fix notes

PR #65850: chore: channel infra consistency -- qqbot guardrails, synology-chat labeler, onboarding scopes

Description (problem / solution / changelog)

Summary

Three small infra gaps found while auditing bundled channel and provider extensions:

  • Problem 1: qqbot is a bundled channel plugin but was missing from package-manifest.contract.test.ts and channel-import-guardrails.test.ts, while all other bundled channels (feishu, zalo, telegram, discord, etc.) are covered. This means dependency drift and import boundary violations in qqbot would not be caught by CI.
  • Problem 2: extensions/synology-chat/ and docs/channels/synology-chat.md exist, but .github/labeler.yml has no channel: synology-chat rule. PRs touching Synology Chat files are not auto-labeled.
  • Problem 3: runway and alibaba are video-generation-only providers (no text providers key) but had no onboardingScopes set, defaulting to ["text-inference"] and appearing in the text model onboarding wizard. Other media-only providers (fal, vydra) correctly set ["image-generation"].
  • What changed: Added qqbot to two test guardrail lists with its 3 mirrored runtime deps; added synology-chat labeler rule; set onboardingScopes: ["image-generation"] for runway and alibaba manifests.
  • What did NOT change (scope boundary): No runtime logic, no new dependencies, no config migration. Pure additive test/infra/metadata fixes.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #65851
  • Closes #65852
  • Closes #65854
  • This PR fixes a bug or regression

Root Cause (if applicable)

  • Root cause: qqbot was added as a bundled channel but never included in the guardrail test lists. synology-chat was similarly missed in the labeler. runway and alibaba were contributed as video-only providers without explicit onboardingScopes, inheriting the default text-inference scope.
  • Missing detection / guardrail: No automated check ensures all bundled channels appear in the guardrail lists or that the labeler covers all extension directories.
  • Contributing context: Additive oversights from when the extensions were first contributed.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Existing coverage already sufficient
  • Target test or file: package-manifest.contract.test.ts, channel-import-guardrails.test.ts
  • Scenario the test should lock in: qqbot dependencies stay mirrored in root package.json; qqbot imports respect the plugin-sdk boundary
  • Existing test that already covers this: The contract tests themselves -- this PR adds qqbot to them
  • If no new test is added, why not: Adding qqbot to the existing test infrastructure IS the coverage fix

User-visible / Behavior Changes

  1. QQBot dependency and import boundary violations will now be caught in CI (previously silent)
  2. PRs touching extensions/synology-chat/** or docs/channels/synology-chat.md will get the channel: synology-chat label
  3. Runway and Alibaba will no longer appear in the text-inference onboarding wizard; they will appear in the image-generation wizard instead (matching fal and vydra behavior)

Diagram (if applicable)

N/A

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No

Repro + Verification

Environment

  • OS: macOS (darwin 25.1.0)
  • Runtime/container: Node 22+, pnpm
  • Model/provider: N/A (infra changes)
  • Integration/channel: qqbot, synology-chat, runway, alibaba

Steps

  1. pnpm vitest run src/plugins/contracts/package-manifest.contract.test.ts -- 39 tests pass (was 38)
  2. pnpm vitest run src/channels/plugins/contracts/channel-import-guardrails.test.ts -- 12 tests pass
  3. Verify .github/labeler.yml contains channel: synology-chat
  4. Verify extensions/runway/openclaw.plugin.json and extensions/alibaba/openclaw.plugin.json have onboardingScopes: ["image-generation"]

Expected

  • All tests pass; labeler rule present; manifests correctly scoped

Actual

  • Confirmed all of the above

Evidence

  • Failing test/log before + passing after
  • Contract tests: 39 passed (was 38 before qqbot)
  • Guardrail tests: 12 passed
  • Pre-commit hooks (lint + typecheck + format + import cycles) all pass

Human Verification (required)

  • Verified scenarios: Both contract test suites pass locally; pre-commit hooks pass; manual diff review of all 5 changed files
  • Edge cases checked: Confirmed byteplus and together are NOT changed because they register text providers (so defaulting to text-inference is correct for them); only pure video providers (runway, alibaba) get the scope fix
  • What you did NOT verify: Actual onboarding UI rendering (would need interactive openclaw configure flow)

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No
  • Migration needed? No

Risks and Mitigations

  • Risk: If qqbot currently has import boundary violations that were previously undetected, the guardrail test will now catch them and fail CI.
    • Mitigation: This is the intended behavior -- surfaces real issues rather than hiding them. Verified locally that qqbot passes the guardrails.
  • Risk: Runway/Alibaba users who relied on finding these providers in the text-inference wizard will now need to look in the image-generation wizard.
    • Mitigation: These are video-only providers with no text model support, so appearing in text-inference was always incorrect.

Changed files

  • .github/labeler.yml (modified, +5/-0)
  • extensions/alibaba/openclaw.plugin.json (modified, +1/-0)
  • extensions/runway/openclaw.plugin.json (modified, +1/-0)
  • src/channels/plugins/contracts/channel-import-guardrails.test.ts (modified, +2/-0)
  • src/plugins/contracts/package-manifest.contract.test.ts (modified, +5/-0)

PR #65855: chore: add qqbot to channel contract guardrails and fix synology-chat labeler

Description (problem / solution / changelog)

Summary

  • Problem: Two infra gaps found while auditing bundled channel extensions:
    1. qqbot is a bundled channel plugin (extensions/qqbot/) with 3 runtime dependencies (mpg123-decoder, silk-wasm, ws) mirrored in the root package.json, but it was missing from package-manifest.contract.test.ts and both lists in channel-import-guardrails.test.ts (GUARDED_CHANNEL_EXTENSIONS, LOCAL_EXTENSION_API_BARREL_GUARDS). Every other bundled channel (feishu, zalo, telegram, discord, slack, synology-chat, etc.) is in these lists.
    2. extensions/synology-chat/ and docs/channels/synology-chat.md exist, but .github/labeler.yml has no channel: synology-chat rule. All other bundled channels have labeler entries.
  • Why it matters: Without guardrails, dependency drift and import boundary violations in qqbot go undetected in CI. Without the labeler rule, PRs touching synology-chat are not auto-labeled for triage.
  • What changed: Added qqbot to package-manifest.contract.test.ts (with its 3 mirrored deps), GUARDED_CHANNEL_EXTENSIONS, and LOCAL_EXTENSION_API_BARREL_GUARDS; added channel: synology-chat rule to .github/labeler.yml.
  • What did NOT change (scope boundary): No runtime logic, no new dependencies, no config changes. Purely additive test and CI infra fixes.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #65851
  • Closes #65852
  • This PR fixes a bug or regression

Root Cause (if applicable)

  • Root cause: qqbot was added as a bundled channel but never included in the guardrail test lists. synology-chat was similarly missed in the labeler config.
  • Missing detection / guardrail: No automated check ensures all bundled channels appear in the guardrail lists or that the labeler covers all extension directories.
  • Contributing context: Additive oversights from when the extensions were first contributed.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Existing coverage already sufficient
  • Target test or file: package-manifest.contract.test.ts, channel-import-guardrails.test.ts
  • Scenario the test should lock in: qqbot dependencies stay mirrored in root package.json; qqbot imports respect the plugin-sdk boundary
  • Existing test that already covers this: The contract tests themselves -- this PR adds qqbot to them
  • If no new test is added, why not: Adding qqbot to the existing test infrastructure IS the coverage fix

User-visible / Behavior Changes

  1. QQBot dependency and import boundary violations will now be caught in CI (previously silent)
  2. PRs touching extensions/synology-chat/** or docs/channels/synology-chat.md will get the channel: synology-chat label

Diagram (if applicable)

N/A

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No

Repro + Verification

Environment

  • OS: macOS (darwin 25.1.0)
  • Runtime/container: Node 22+, pnpm
  • Model/provider: N/A
  • Integration/channel: qqbot, synology-chat

Steps

  1. pnpm vitest run src/plugins/contracts/package-manifest.contract.test.ts -- 39 tests pass (was 38)
  2. pnpm vitest run src/channels/plugins/contracts/channel-import-guardrails.test.ts -- 12 tests pass
  3. Verify .github/labeler.yml contains channel: synology-chat

Expected

  • All tests pass; labeler rule present

Actual

  • Confirmed

Evidence

  • Failing test/log before + passing after
  • Contract tests: 39 passed (was 38 before qqbot)
  • Guardrail tests: 12 passed
  • Pre-commit hooks all pass

Human Verification (required)

  • Verified scenarios: Both contract test suites pass locally; pre-commit hooks pass; diff review of all 3 changed files
  • Edge cases checked: Verified qqbot's 3 runtime deps (mpg123-decoder, silk-wasm, ws) are all present in root package.json
  • What you did NOT verify: N/A -- all changes are test/CI config

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No
  • Migration needed? No

Risks and Mitigations

  • Risk: If qqbot currently has import boundary violations that were previously undetected, the guardrail test will now fail CI.
    • Mitigation: Intended behavior. Verified locally that qqbot passes all guardrails.

Changed files

  • .github/labeler.yml (modified, +5/-0)
  • src/channels/plugins/contracts/channel-import-guardrails.test.ts (modified, +2/-0)
  • src/plugins/contracts/package-manifest.contract.test.ts (modified, +5/-0)
RAW_BUFFERClick to expand / collapse

Description

qqbot is a bundled channel plugin (extensions/qqbot/) with three runtime dependencies (mpg123-decoder, silk-wasm, ws) that are already mirrored in the root package.json. However, qqbot is not present in:

  1. src/plugins/contracts/package-manifest.contract.test.ts -- validates that plugin dependencies stay in sync with root-level mirrors
  2. src/channels/plugins/contracts/channel-import-guardrails.test.ts GUARDED_CHANNEL_EXTENSIONS -- ensures channel plugins do not directly import core internal modules
  3. Same file, LOCAL_EXTENSION_API_BARREL_GUARDS -- ensures extensions go through the API barrel instead of direct paths

All other bundled channels (feishu, zalo, zalouser, telegram, discord, slack, synology-chat, etc.) are included in these lists.

Impact

If qqbot's dependency mirrors drift or its imports violate the plugin boundary, CI will not catch it.

Expected

qqbot should be added to all three guardrail lists, consistent with other bundled channel plugins.

extent analysis

TL;DR

Add qqbot to the lists in src/plugins/contracts/package-manifest.contract.test.ts, src/channels/plugins/contracts/channel-import-guardrails.test.ts to ensure dependency sync and import compliance.

Guidance

  • Verify that qqbot is indeed a bundled channel plugin with the specified dependencies (mpg123-decoder, silk-wasm, ws) to understand its requirements.
  • Check the existing lists in src/plugins/contracts/package-manifest.contract.test.ts and src/channels/plugins/contracts/channel-import-guardrails.test.ts to see how other bundled channels are handled for consistency.
  • Add qqbot to the GUARDED_CHANNEL_EXTENSIONS and LOCAL_EXTENSION_API_BARREL_GUARDS lists in src/channels/plugins/contracts/channel-import-guardrails.test.ts to prevent direct imports of core internal modules and ensure API barrel usage.
  • Update src/plugins/contracts/package-manifest.contract.test.ts to include qqbot in the validation for dependency sync with root-level mirrors.

Example

No specific code example is provided due to the nature of the issue focusing on configuration and test updates rather than code implementation.

Notes

This solution assumes that qqbot is correctly identified as a bundled channel plugin with the mentioned dependencies and that the issue is solely about updating the guardrail lists for consistency and compliance.

Recommendation

Apply workaround: Add qqbot to the specified lists as this directly addresses the identified issue of missing validation and import compliance checks for qqbot.

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