Skip to content

fix(messaging): activate OpenClaw channels in generated config#4400

Closed
ericksoa wants to merge 14 commits into
mainfrom
fix/openclaw-messaging-channel-activation
Closed

fix(messaging): activate OpenClaw channels in generated config#4400
ericksoa wants to merge 14 commits into
mainfrom
fix/openclaw-messaging-channel-activation

Conversation

@ericksoa
Copy link
Copy Markdown
Contributor

@ericksoa ericksoa commented May 28, 2026

Summary

  • Explicitly enables OpenClaw-native messaging channels in generated openclaw.json for Telegram, Discord, Slack, and WhatsApp.
  • Enables matching plugins.entries.<channel> records so OpenClaw discovers selected messaging providers through its real channel/plugin path.
  • Extends test/e2e/test-messaging-providers.sh to verify both generated activation and openclaw channels list --all --json runtime discovery for Telegram, Discord, Slack, and WhatsApp.
  • Adds generator regression coverage for Telegram, Discord, and WhatsApp activation.

Refs #4251

Test Plan

  • python3 -m py_compile scripts/generate-openclaw-config.py
  • git diff --check
  • bash -n test/e2e/test-messaging-providers.sh
  • npm test -- test/generate-openclaw-config.test.ts
  • npm test -- test/nemoclaw-start.test.ts
  • npm test -- test/seed-wechat-accounts.test.ts
  • npm test -- test/onboard-messaging.test.ts -t "non-interactive setupMessagingChannels returns channels with tokens|setupSelectedMessagingChannels|wechat|whatsapp"
  • npm test -- test/validate-e2e-coverage.test.ts test/e2e-scenario/framework-tests/e2e-coverage-report.test.ts
  • npm run build:cli

Summary by CodeRabbit

  • Tests

    • Enhanced test coverage for messaging channel configuration and runtime discovery, including verification of enabled state for Discord, Slack, Telegram, and WhatsApp channels.
    • Added assertions to validate messaging provider plugin activation and channel installation status.
  • Chores

    • Improved consistency in messaging channel configuration generation.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR standardizes OpenClaw channel configuration generation to unconditionally enable all messaging channels (discord, slack, telegram, whatsapp) with consistent enabled: True and accounts.default structure, dynamically enables corresponding plugin registry entries for present channels, and extends E2E test coverage with helper functions and Phase 3 assertions to validate both generated config and runtime channel discovery.

Changes

OpenClaw Channel Configuration and Validation

Layer / File(s) Summary
Config generation for dynamic channel enablement and plugin registry
scripts/generate-openclaw-config.py
Per-channel channels.<id> assembly now unconditionally sets enabled: True and accounts.default for all non-WhatsApp channels instead of conditional Slack-only merging. WhatsApp uses a simplified enabled: True with explicit healthMonitor.enabled: False. Telegram account-building removes a redundant conditional before groupPolicy assignment. plugins.entries switches from enabling only Slack to dynamically enabling all supported channel plugins (discord, slack, telegram, whatsapp) present in _ch_cfg.
Unit tests for generated config structure
test/generate-openclaw-config.test.ts
Three test cases now validate channels.*.enabled flags and plugins.entries.* shapes: WhatsApp-only assertions verify channels.whatsapp.enabled and plugins.entries.whatsapp, Telegram+WhatsApp run validates both channels and their plugin entries, and non-Slack proxy routing test validates Telegram and Discord configurations alongside existing proxy assertions.
E2E test helpers and Phase 3 channel activation validation
test/e2e/test-messaging-providers.sh
Extended documentation header includes OpenClaw runtime discovery and diagnostics steps. Adds four new helper functions: assert_openclaw_config_activation() to verify both channel and plugin entries are enabled in openclaw.json, summarize_openclaw_config_activation() for compact state output, summarize_openclaw_runtime_channels() for runtime state summary, and assert_openclaw_runtime_channel() to validate runtime discovery via openclaw channels list --all --json with strict schema validation. Phase 3 logic now extracts and validates config activation for all channels, probes runtime discovery with timing, and asserts runtime installed/configured status.

Sequence Diagram(s)

sequenceDiagram
  participant Phase3Test as Phase 3 Test
  participant assert_config as assert_openclaw_config_activation()
  participant ConfigJSON as openclaw.json
  participant assert_runtime as assert_openclaw_runtime_channel()
  participant OpenClawCLI as openclaw channels list
  
  Phase3Test->>assert_config: For each: telegram/discord/slack/whatsapp
  assert_config->>ConfigJSON: Parse channels[ch].enabled
  assert_config->>ConfigJSON: Parse plugins.entries[ch].enabled
  assert_config-->>Phase3Test: Config activation verified
  
  Phase3Test->>assert_runtime: For each channel with expected_account
  assert_runtime->>OpenClawCLI: channels list --all --json
  OpenClawCLI-->>assert_runtime: Channel report with accounts list
  assert_runtime->>assert_runtime: Validate installed=true, origin=configured
  assert_runtime-->>Phase3Test: Runtime status verified
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#4222: Both PRs modify scripts/generate-openclaw-config.py and its tests to ensure all messaging channels are explicitly enabled in channels.*.enabled and corresponding plugins.entries.* entries are activated, then extend E2E assertions for runtime/configured discovery.

Suggested labels

fix, Integration: Slack

Suggested reviewers

  • cv
  • wscurran

Poem

🐰 All channels now dance in harmony,
With enabled: true in consistency,
Plugins follow each channel's call,
E2E helpers test them all,
Configuration blooms so free! 🌸

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: enabling OpenClaw channels in the generated configuration for multiple messaging providers (Telegram, Discord, Slack, WhatsApp).
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/openclaw-messaging-channel-activation

Comment @coderabbitai help to get the list of available commands and usage tips.

@ericksoa ericksoa self-assigned this May 28, 2026
@ericksoa ericksoa added bug Something fails against expected or documented behavior integration: openclaw OpenClaw integration behavior integration: telegram Telegram integration or channel behavior enhancement: messaging v0.0.54 Release target labels May 28, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

E2E Advisor Recommendation

Required E2E: messaging-providers-e2e, cloud-onboard-e2e
Optional E2E: rebuild-openclaw-e2e, openclaw-slack-pairing-e2e, openclaw-discord-pairing-e2e, channels-stop-start-e2e

Dispatch hint: messaging-providers-e2e,cloud-onboard-e2e

Auto-dispatched E2E: messaging-providers-e2e, cloud-onboard-e2e via nightly-e2e.yaml at 637ad256255979276795fb6b3007dbb9dc15d237nightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • messaging-providers-e2e (high (~75 min timeout)): Primary coverage for the changed behavior: builds an OpenClaw sandbox with Telegram, Discord, Slack, and WhatsApp messaging channels; validates provider creation, placeholder isolation, L7 credential rewrite, OpenClaw channel/plugin activation, and the newly expanded hermetic plugin-send proofs.
  • cloud-onboard-e2e (medium/high): Required baseline for Dockerfile and optimized build-context changes. It exercises the public install/onboard path, sandbox image build, sandbox health, security checks, and confirms the new build-time script is present in the staged Docker context for a normal OpenClaw onboard.

Optional E2E

  • rebuild-openclaw-e2e (medium (~60 min timeout)): Useful adjacent confidence for src/lib/sandbox/build-context.ts and Dockerfile changes because rebuild flows reuse the optimized build context and should continue to include the new openclaw-build-messaging-plugins.py script.
  • openclaw-slack-pairing-e2e (medium): Optional targeted check for Slack-specific external plugin activation and placeholder rewriting. The PR changes Slack plugin enablement, pinned plugin install behavior, and Slack proof helper resolution.
  • openclaw-discord-pairing-e2e (medium): Optional targeted check for Discord external plugin behavior and gateway/pairing credential rewrite. The PR changes Discord plugin activation and adds Discord runtime-send proof helpers.
  • channels-stop-start-e2e (very high (~120 min timeout)): Optional broader channel lifecycle confidence across Telegram, Discord, WeChat, Slack, and WhatsApp after changing OpenClaw channel/plugin activation and messaging plugin installation. High cost, so not merge-blocking if messaging-providers-e2e passes.

New E2E recommendations

  • live messaging sends (medium): messaging-providers-e2e can exercise real Telegram/Discord/Slack sends only when repository secrets and target IDs are configured; otherwise the path is skipped and hermetic fakes provide coverage. A dedicated required-secrets live-send workflow would make real provider regressions explicit rather than optional.
    • Suggested test: Add a workflow-dispatched live messaging send E2E that requires TELEGRAM_BOT_TOKEN_REAL/TELEGRAM_CHAT_ID_E2E, DISCORD_BOT_TOKEN_REAL/DISCORD_CHANNEL_ID_E2E, and SLACK_BOT_TOKEN_REAL/SLACK_APP_TOKEN_REAL/SLACK_CHANNEL_ID_E2E, and fails fast if any required live secret is absent.

Dispatch hint

  • Workflow: .github/workflows/nightly-e2e.yaml
  • jobs input: messaging-providers-e2e,cloud-onboard-e2e

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

E2E Scenario Advisor Recommendation

Required scenario E2E: None
Optional scenario E2E: None

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required scenario E2E

  • None. No scenario workflow, scenario metadata, scenario runtime, or validation-suite files changed.

Optional scenario E2E

  • None.

Relevant changed files

  • None.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

PR Review Advisor

Findings: 1 needs attention, 5 worth checking, 1 nice ideas
Since last review: 0 prior items resolved, 6 still apply, 0 new items found

Review findings

🛠️ Needs attention

  • Live messaging secrets run through target-ref E2E code (.github/workflows/e2e-script.yaml:161): The reusable runner now accepts live Telegram, Discord, and Slack credentials and exports them to the E2E script step. The nightly messaging job invokes this runner with `ref: ${{ inputs.target_ref || github.ref }}`, and the workflow documents `target_ref` as the ref used to test PR head SHAs. The composite action then runs `bash "$E2E_SCRIPT"` from the checked-out target ref, so target-ref code can read or exfiltrate the live third-party credentials. The same script also still logs the first 10 characters of Telegram and Discord tokens, which can expose unmasked secret prefixes.
    • Recommendation: Keep live third-party messaging sends behind a trusted-code boundary that does not execute target-ref shell with live credentials, such as a separate trusted-base workflow/action for live sends. Remove token-prefix logging and log only non-secret mode/length classifications.
    • Evidence: .github/workflows/e2e-script.yaml exports TELEGRAM_BOT_TOKEN_REAL, TELEGRAM_CHAT_ID_E2E, DISCORD_BOT_TOKEN_REAL, DISCORD_CHANNEL_ID_E2E, SLACK_BOT_TOKEN_REAL, SLACK_APP_TOKEN_REAL, and SLACK_CHANNEL_ID_E2E to the Run E2E script step. .github/workflows/nightly-e2e.yaml passes those secrets to messaging-providers-e2e with `ref: ${{ inputs.target_ref || github.ref }}`. .github/actions/run-e2e-script/action.yaml runs `bash "$E2E_SCRIPT"` in the checked-out repo. test/e2e/test-messaging-providers.sh derives tokens from *_REAL first and logs `Telegram token: ${TELEGRAM_TOKEN:0:10}...` and `Discord token: ${DISCORD_TOKEN:0:10}...`.

🔎 Worth checking

  • Source-of-truth review needed: scripts/openclaw-build-messaging-plugins.py: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The helper docstring identifies unversioned catalog drift, and Dockerfile replaces `openclaw doctor --fix --non-interactive` with the helper.
  • External OpenClaw messaging plugins install without integrity verification (scripts/openclaw-build-messaging-plugins.py:25): The new Docker build helper pins external OpenClaw messaging plugin specs to OPENCLAW_VERSION, which fixes unversioned catalog drift, but it still delegates to `openclaw plugins install` without a reviewed dist.integrity value, lockfile, or trusted-registry validation. These external packages are baked into the sandbox runtime image, so registry drift or package compromise would affect delivered sandboxes.
    • Recommendation: Add a fail-closed supply-chain guard for @openclaw/discord, @openclaw/slack, and @openclaw/whatsapp, such as reviewed dist.integrity values, a committed lockfile, or explicit trusted-registry/integrity validation before install. Add tests proving missing or mismatched integrity fails before image build continues.
    • Evidence: EXTERNAL_CHANNEL_PACKAGES maps discord/slack/whatsapp to external npm packages, plugin_specs() emits @openclaw/<channel>@<OPENCLAW_VERSION>, and main() runs `openclaw plugins install <spec>`. Dockerfile validates core openclaw@2026.5.22 integrity but this PR adds no analogous integrity guard for these external plugin packages.
  • Document the source-of-truth contract for the OpenClaw doctor workaround (scripts/openclaw-build-messaging-plugins.py:6): The helper is a localized workaround for upstream OpenClaw doctor/catalog drift. It identifies the invalid state and has tests for version-pinned specs, but the code does not document why the upstream doctor/catalog source cannot be fixed in this PR or when this parallel installer path should be removed.
    • Recommendation: Document the source boundary, why the upstream OpenClaw doctor/catalog behavior cannot be fixed here, and a removal condition such as upstream doctor/catalog support for runtime-version-matched external plugin specs.
    • Evidence: The helper docstring says OpenClaw doctor uses official catalog unversioned plugin specs that can drift from the pinned runtime. Dockerfile replaces `openclaw doctor --fix --non-interactive` with `python3 /usr/local/lib/nemoclaw/openclaw-build-messaging-plugins.py`. test/openclaw-build-messaging-plugins.test.ts covers pinned specs and command ordering, but no source-fix constraint or removal condition is present.
  • Startup egress and runtime dependency staging are not directly proven (test/e2e/test-messaging-providers.sh:1147): The PR adds useful config activation, runtime discovery, and mock send checks, but the newly activated Telegram, Discord, Slack, and WhatsApp plugins still lack a direct assertion that gateway startup avoids npm registry traffic, direct provider egress, or runtime dependency staging after NPM_CONFIG_OFFLINE=true.
    • Recommendation: Add or identify a targeted runtime proof around gateway startup that fails on unexpected npm registry traffic, direct provider egress, or dependency staging after offline mode is enabled. If full coverage is intentionally deferred, document each activated plugin's dependency-staging and network-route assumptions.
    • Evidence: scripts/generate-openclaw-config.py enables plugins.entries for discord, slack, telegram, and whatsapp when configured. Dockerfile sets NPM_CONFIG_OFFLINE=true only after the new build helper. test/e2e/test-messaging-providers.sh calls `openclaw channels list --all --json` and runs mock send proofs, but the reviewed diff does not assert absence of startup registry traffic or unexpected startup provider egress.
  • Messaging runtime-discovery coverage remains split from the scenario source of truth (test/e2e-scenario/validation_suites/suites.yaml:120): Important OpenClaw channel activation and runtime-discovery assertions remain in the legacy messaging-provider shell monolith rather than the scenario suites for all affected channels. Slack has scenario coverage for OpenClaw enabled/runtime-discovery state, but equivalent Telegram and Discord activation checks and a WhatsApp scenario suite were not present.
    • Recommendation: Move or duplicate the OpenClaw channel activation and `openclaw channels list --all --json` assertions into scenario E2E suites for Telegram, Discord, Slack, and WhatsApp, preserving sanitized summary logging instead of raw channel JSON.
    • Evidence: test/e2e/test-messaging-providers.sh adds M6a-M6h for Telegram, Discord, Slack, and WhatsApp. test/e2e-scenario/validation_suites/suites.yaml lists messaging-telegram, messaging-discord, and messaging-slack, but no messaging-whatsapp. messaging/slack/00-slack-provider-state.sh checks OpenClaw enabled/runtime-discovery state, while messaging/discord/00-discord-gateway-path.sh only checks the gateway path.

🌱 Nice ideas

  • Remove or justify the test-wide @ts-nocheck (test/openclaw-build-messaging-plugins.test.ts:1): The new TypeScript test disables type checking for the whole file even though it uses ordinary Vitest and Node APIs. Broad type suppression makes future refactors less safe around a helper that controls build-time plugin installation.
    • Recommendation: Remove `// @ts-nocheck`, add targeted types where needed, or add a short justification if there is a concrete TypeScript limitation that cannot be fixed locally.
    • Evidence: test/openclaw-build-messaging-plugins.test.ts starts with `// @ts-nocheck` and then defines helpers around spawnSync, fs, os, path, and Vitest expectations.
Since last review details

Current findings:

  • Source-of-truth review needed: scripts/openclaw-build-messaging-plugins.py: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The helper docstring identifies unversioned catalog drift, and Dockerfile replaces `openclaw doctor --fix --non-interactive` with the helper.
  • Live messaging secrets run through target-ref E2E code (.github/workflows/e2e-script.yaml:161): The reusable runner now accepts live Telegram, Discord, and Slack credentials and exports them to the E2E script step. The nightly messaging job invokes this runner with `ref: ${{ inputs.target_ref || github.ref }}`, and the workflow documents `target_ref` as the ref used to test PR head SHAs. The composite action then runs `bash "$E2E_SCRIPT"` from the checked-out target ref, so target-ref code can read or exfiltrate the live third-party credentials. The same script also still logs the first 10 characters of Telegram and Discord tokens, which can expose unmasked secret prefixes.
    • Recommendation: Keep live third-party messaging sends behind a trusted-code boundary that does not execute target-ref shell with live credentials, such as a separate trusted-base workflow/action for live sends. Remove token-prefix logging and log only non-secret mode/length classifications.
    • Evidence: .github/workflows/e2e-script.yaml exports TELEGRAM_BOT_TOKEN_REAL, TELEGRAM_CHAT_ID_E2E, DISCORD_BOT_TOKEN_REAL, DISCORD_CHANNEL_ID_E2E, SLACK_BOT_TOKEN_REAL, SLACK_APP_TOKEN_REAL, and SLACK_CHANNEL_ID_E2E to the Run E2E script step. .github/workflows/nightly-e2e.yaml passes those secrets to messaging-providers-e2e with `ref: ${{ inputs.target_ref || github.ref }}`. .github/actions/run-e2e-script/action.yaml runs `bash "$E2E_SCRIPT"` in the checked-out repo. test/e2e/test-messaging-providers.sh derives tokens from *_REAL first and logs `Telegram token: ${TELEGRAM_TOKEN:0:10}...` and `Discord token: ${DISCORD_TOKEN:0:10}...`.
  • External OpenClaw messaging plugins install without integrity verification (scripts/openclaw-build-messaging-plugins.py:25): The new Docker build helper pins external OpenClaw messaging plugin specs to OPENCLAW_VERSION, which fixes unversioned catalog drift, but it still delegates to `openclaw plugins install` without a reviewed dist.integrity value, lockfile, or trusted-registry validation. These external packages are baked into the sandbox runtime image, so registry drift or package compromise would affect delivered sandboxes.
    • Recommendation: Add a fail-closed supply-chain guard for @openclaw/discord, @openclaw/slack, and @openclaw/whatsapp, such as reviewed dist.integrity values, a committed lockfile, or explicit trusted-registry/integrity validation before install. Add tests proving missing or mismatched integrity fails before image build continues.
    • Evidence: EXTERNAL_CHANNEL_PACKAGES maps discord/slack/whatsapp to external npm packages, plugin_specs() emits @openclaw/<channel>@<OPENCLAW_VERSION>, and main() runs `openclaw plugins install <spec>`. Dockerfile validates core openclaw@2026.5.22 integrity but this PR adds no analogous integrity guard for these external plugin packages.
  • Document the source-of-truth contract for the OpenClaw doctor workaround (scripts/openclaw-build-messaging-plugins.py:6): The helper is a localized workaround for upstream OpenClaw doctor/catalog drift. It identifies the invalid state and has tests for version-pinned specs, but the code does not document why the upstream doctor/catalog source cannot be fixed in this PR or when this parallel installer path should be removed.
    • Recommendation: Document the source boundary, why the upstream OpenClaw doctor/catalog behavior cannot be fixed here, and a removal condition such as upstream doctor/catalog support for runtime-version-matched external plugin specs.
    • Evidence: The helper docstring says OpenClaw doctor uses official catalog unversioned plugin specs that can drift from the pinned runtime. Dockerfile replaces `openclaw doctor --fix --non-interactive` with `python3 /usr/local/lib/nemoclaw/openclaw-build-messaging-plugins.py`. test/openclaw-build-messaging-plugins.test.ts covers pinned specs and command ordering, but no source-fix constraint or removal condition is present.
  • Startup egress and runtime dependency staging are not directly proven (test/e2e/test-messaging-providers.sh:1147): The PR adds useful config activation, runtime discovery, and mock send checks, but the newly activated Telegram, Discord, Slack, and WhatsApp plugins still lack a direct assertion that gateway startup avoids npm registry traffic, direct provider egress, or runtime dependency staging after NPM_CONFIG_OFFLINE=true.
    • Recommendation: Add or identify a targeted runtime proof around gateway startup that fails on unexpected npm registry traffic, direct provider egress, or dependency staging after offline mode is enabled. If full coverage is intentionally deferred, document each activated plugin's dependency-staging and network-route assumptions.
    • Evidence: scripts/generate-openclaw-config.py enables plugins.entries for discord, slack, telegram, and whatsapp when configured. Dockerfile sets NPM_CONFIG_OFFLINE=true only after the new build helper. test/e2e/test-messaging-providers.sh calls `openclaw channels list --all --json` and runs mock send proofs, but the reviewed diff does not assert absence of startup registry traffic or unexpected startup provider egress.
  • Messaging runtime-discovery coverage remains split from the scenario source of truth (test/e2e-scenario/validation_suites/suites.yaml:120): Important OpenClaw channel activation and runtime-discovery assertions remain in the legacy messaging-provider shell monolith rather than the scenario suites for all affected channels. Slack has scenario coverage for OpenClaw enabled/runtime-discovery state, but equivalent Telegram and Discord activation checks and a WhatsApp scenario suite were not present.
    • Recommendation: Move or duplicate the OpenClaw channel activation and `openclaw channels list --all --json` assertions into scenario E2E suites for Telegram, Discord, Slack, and WhatsApp, preserving sanitized summary logging instead of raw channel JSON.
    • Evidence: test/e2e/test-messaging-providers.sh adds M6a-M6h for Telegram, Discord, Slack, and WhatsApp. test/e2e-scenario/validation_suites/suites.yaml lists messaging-telegram, messaging-discord, and messaging-slack, but no messaging-whatsapp. messaging/slack/00-slack-provider-state.sh checks OpenClaw enabled/runtime-discovery state, while messaging/discord/00-discord-gateway-path.sh only checks the gateway path.
  • Remove or justify the test-wide @ts-nocheck (test/openclaw-build-messaging-plugins.test.ts:1): The new TypeScript test disables type checking for the whole file even though it uses ordinary Vitest and Node APIs. Broad type suppression makes future refactors less safe around a helper that controls build-time plugin installation.
    • Recommendation: Remove `// @ts-nocheck`, add targeted types where needed, or add a short justification if there is a concrete TypeScript limitation that cannot be fixed locally.
    • Evidence: test/openclaw-build-messaging-plugins.test.ts starts with `// @ts-nocheck` and then defines helpers around spawnSync, fs, os, path, and Vitest expectations.

Workflow run details

This is an automated advisory review. A human maintainer must make the final merge decision.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26554878579
Target ref: 9c3cb236dd29015b9a9fa26e726a857ffb92c9d3
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26554971569
Target ref: 4560c7d4e87a9f3d2d8f44f246638b2d12b80435
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26555201622
Target ref: 4a4dcdd2090ac826922a0baedb10b2981de15e96
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26555633394
Target ref: 61729d4bf1cd75c1ab66fd2c5181e29dff99172b
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26555917728
Target ref: 1213935125a20debe5861e69ad8ff37eba2c5cb9
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26555952807
Target ref: 1213935125a20debe5861e69ad8ff37eba2c5cb9
Workflow ref: main
Requested jobs: all (no filter)
Summary: 42 passed, 1 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ❌ failure
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ✅ success
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: network-policy-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26556278457
Target ref: 235ca30e4b634d6c121dae88dbc262df6bc1427e
Workflow ref: main
Requested jobs: all (no filter)
Summary: 2 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ⚠️ cancelled
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ⚠️ cancelled
cloud-inference-e2e ⚠️ cancelled
cloud-onboard-e2e ⚠️ cancelled
credential-migration-e2e ⚠️ cancelled
credential-sanitization-e2e ⚠️ cancelled
device-auth-health-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ⚠️ cancelled
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ⚠️ cancelled
hermes-e2e ⚠️ cancelled
hermes-inference-switch-e2e ⚠️ cancelled
hermes-onboard-security-posture-e2e ⚠️ cancelled
hermes-root-entrypoint-smoke-e2e ⚠️ cancelled
hermes-slack-e2e ⚠️ cancelled
inference-routing-e2e ⚠️ cancelled
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ⚠️ cancelled
kimi-inference-compat-e2e ⚠️ cancelled
launchable-smoke-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
onboard-negative-paths-e2e ⚠️ cancelled
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ⚠️ cancelled
openclaw-discord-pairing-e2e ⚠️ cancelled
openclaw-inference-switch-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ⚠️ cancelled
openclaw-slack-pairing-e2e ⚠️ cancelled
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ⚠️ cancelled
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
shields-config-e2e ⚠️ cancelled
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ⚠️ cancelled
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ⚠️ cancelled
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ⚠️ cancelled
upgrade-stale-sandbox-e2e ⚠️ cancelled
vm-driver-privileged-exec-routing-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26556305176
Target ref: 235ca30e4b634d6c121dae88dbc262df6bc1427e
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26556339630
Target ref: 9c65a5bd4414f21611e07c18186e02d0a46b0d86
Workflow ref: main
Requested jobs: all (no filter)
Summary: 4 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ⚠️ cancelled
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ⚠️ cancelled
cloud-inference-e2e ⚠️ cancelled
cloud-onboard-e2e ⚠️ cancelled
credential-migration-e2e ⚠️ cancelled
credential-sanitization-e2e ⚠️ cancelled
device-auth-health-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ⚠️ cancelled
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ⚠️ cancelled
hermes-e2e ⚠️ cancelled
hermes-inference-switch-e2e ⚠️ cancelled
hermes-onboard-security-posture-e2e ⚠️ cancelled
hermes-root-entrypoint-smoke-e2e ⚠️ cancelled
hermes-slack-e2e ⚠️ cancelled
inference-routing-e2e ⚠️ cancelled
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ✅ success
kimi-inference-compat-e2e ⚠️ cancelled
launchable-smoke-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
onboard-negative-paths-e2e ⚠️ cancelled
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ⚠️ cancelled
openclaw-discord-pairing-e2e ⚠️ cancelled
openclaw-inference-switch-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ⚠️ cancelled
openclaw-slack-pairing-e2e ⚠️ cancelled
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ⚠️ cancelled
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
shields-config-e2e ⚠️ cancelled
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ⚠️ cancelled
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ⚠️ cancelled
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ⚠️ cancelled
upgrade-stale-sandbox-e2e ⚠️ cancelled
vm-driver-privileged-exec-routing-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26556385921
Target ref: 9c65a5bd4414f21611e07c18186e02d0a46b0d86
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 0 passed, 1 failed, 0 skipped

Job Result
messaging-providers-e2e ❌ failure

Failed jobs: messaging-providers-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26556728169
Target ref: 9c65a5bd4414f21611e07c18186e02d0a46b0d86
Workflow ref: main
Requested jobs: all (no filter)
Summary: 50 passed, 2 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
issue-3600-gpu-proof-optional-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ❌ failure
network-policy-e2e ✅ success
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
openshell-gateway-upgrade-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ✅ success
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ❌ failure
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ✅ success
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: messaging-providers-e2e, runtime-overrides-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26558414515
Target ref: 079ba61009eb7784addad5112b392f46adfe7a4d
Workflow ref: main
Requested jobs: messaging-providers-e2e,rebuild-openclaw-e2e,cloud-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
cloud-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26558462965
Target ref: 48211a61ae6c6c1919092c603b9e5b0554ef4cfc
Workflow ref: main
Requested jobs: all (no filter)
Summary: 5 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ⚠️ cancelled
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ⚠️ cancelled
cloud-inference-e2e ⚠️ cancelled
cloud-onboard-e2e ⚠️ cancelled
credential-migration-e2e ⚠️ cancelled
credential-sanitization-e2e ⚠️ cancelled
device-auth-health-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ⚠️ cancelled
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ⚠️ cancelled
hermes-e2e ⚠️ cancelled
hermes-inference-switch-e2e ⚠️ cancelled
hermes-onboard-security-posture-e2e ⚠️ cancelled
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ⚠️ cancelled
inference-routing-e2e ⚠️ cancelled
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ✅ success
kimi-inference-compat-e2e ⚠️ cancelled
launchable-smoke-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
onboard-negative-paths-e2e ⚠️ cancelled
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ⚠️ cancelled
openclaw-discord-pairing-e2e ⚠️ cancelled
openclaw-inference-switch-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ⚠️ cancelled
openclaw-slack-pairing-e2e ⚠️ cancelled
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ⚠️ cancelled
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
shields-config-e2e ⚠️ cancelled
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ⚠️ cancelled
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ⚠️ cancelled
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ⚠️ cancelled
upgrade-stale-sandbox-e2e ⚠️ cancelled
vm-driver-privileged-exec-routing-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26558533594
Target ref: 48211a61ae6c6c1919092c603b9e5b0554ef4cfc
Workflow ref: main
Requested jobs: messaging-providers-e2e,cloud-onboard-e2e,rebuild-openclaw-e2e,channels-stop-start-e2e
Summary: 4 passed, 0 failed, 0 skipped

Job Result
channels-stop-start-e2e ✅ success
cloud-onboard-e2e ✅ success
messaging-providers-e2e ✅ success
rebuild-openclaw-e2e ✅ success

Comment thread test/e2e/lib/fake-discord-message-api.cjs Fixed
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26574867357
Target ref: ad39f2cf009aa9c92dc6af56a38e6d63a2018141
Workflow ref: main
Requested jobs: messaging-providers-e2e,rebuild-openclaw-e2e,cloud-onboard-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
cloud-onboard-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26575112381
Target ref: 0644e42814e93f7965fec2224a89c610c411b3ac
Workflow ref: main
Requested jobs: messaging-providers-e2e,cloud-onboard-e2e,rebuild-openclaw-e2e
Summary: 2 passed, 1 failed, 0 skipped

Job Result
cloud-onboard-e2e ✅ success
messaging-providers-e2e ❌ failure
rebuild-openclaw-e2e ✅ success

Failed jobs: messaging-providers-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26576407782
Target ref: 83f9eca3dbb10f017e353c045c9306a6189f5d1a
Workflow ref: main
Requested jobs: messaging-providers-e2e,rebuild-openclaw-e2e,cloud-onboard-e2e,token-rotation-e2e
Summary: 2 passed, 1 failed, 0 skipped

Job Result
cloud-onboard-e2e ✅ success
messaging-providers-e2e ❌ failure
rebuild-openclaw-e2e ✅ success
token-rotation-e2e ⚠️ cancelled

Failed jobs: messaging-providers-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26577380287
Target ref: 1616d48386751e77b40cd5d306c1bbf81bc5a9cf
Workflow ref: main
Requested jobs: all (no filter)
Summary: 4 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ⚠️ cancelled
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ⚠️ cancelled
cloud-inference-e2e ⚠️ cancelled
cloud-onboard-e2e ⚠️ cancelled
credential-migration-e2e ⚠️ cancelled
credential-sanitization-e2e ⚠️ cancelled
device-auth-health-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ⚠️ cancelled
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ⚠️ cancelled
hermes-e2e ⚠️ cancelled
hermes-inference-switch-e2e ⚠️ cancelled
hermes-onboard-security-posture-e2e ⚠️ cancelled
hermes-root-entrypoint-smoke-e2e ⚠️ cancelled
hermes-slack-e2e ⚠️ cancelled
inference-routing-e2e ⚠️ cancelled
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ✅ success
kimi-inference-compat-e2e ⚠️ cancelled
launchable-smoke-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
onboard-negative-paths-e2e ⚠️ cancelled
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ⚠️ cancelled
openclaw-discord-pairing-e2e ⚠️ cancelled
openclaw-inference-switch-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ⚠️ cancelled
openclaw-slack-pairing-e2e ⚠️ cancelled
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ⚠️ cancelled
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
shields-config-e2e ⚠️ cancelled
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ⚠️ cancelled
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ⚠️ cancelled
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ⚠️ cancelled
upgrade-stale-sandbox-e2e ⚠️ cancelled
vm-driver-privileged-exec-routing-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26577504339
Target ref: 637ad256255979276795fb6b3007dbb9dc15d237
Workflow ref: main
Requested jobs: all (no filter)
Summary: 5 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ⚠️ cancelled
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ⚠️ cancelled
cloud-inference-e2e ⚠️ cancelled
cloud-onboard-e2e ⚠️ cancelled
credential-migration-e2e ⚠️ cancelled
credential-sanitization-e2e ⚠️ cancelled
device-auth-health-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ⚠️ cancelled
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ⚠️ cancelled
hermes-e2e ⚠️ cancelled
hermes-inference-switch-e2e ⚠️ cancelled
hermes-onboard-security-posture-e2e ⚠️ cancelled
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ⚠️ cancelled
inference-routing-e2e ⚠️ cancelled
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ✅ success
kimi-inference-compat-e2e ⚠️ cancelled
launchable-smoke-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
onboard-negative-paths-e2e ⚠️ cancelled
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ⚠️ cancelled
openclaw-discord-pairing-e2e ⚠️ cancelled
openclaw-inference-switch-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ⚠️ cancelled
openclaw-slack-pairing-e2e ⚠️ cancelled
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ⚠️ cancelled
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
shields-config-e2e ⚠️ cancelled
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ⚠️ cancelled
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ⚠️ cancelled
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ⚠️ cancelled
upgrade-stale-sandbox-e2e ⚠️ cancelled
vm-driver-privileged-exec-routing-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26577645435
Target ref: 637ad256255979276795fb6b3007dbb9dc15d237
Workflow ref: main
Requested jobs: messaging-providers-e2e,cloud-onboard-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
cloud-onboard-e2e ✅ success
messaging-providers-e2e ✅ success

ericksoa added a commit that referenced this pull request May 28, 2026
…ter rebuild (#4403)

## Summary

Fixes #4314
Fixes #4390

This is now the unified messaging-channel PR: it keeps the original
#4403 runtime verification path and folds in the full #4400 OpenClaw
channel activation / plugin-build / E2E coverage set.

OpenClaw 2026.5.22+ no longer auto-starts a messaging bridge from the
account-level `enabled` flag alone — the channel must also be marked
enabled at the top level for the bridge module to load. NemoClaw#4189
fixed this for Slack (PR #4222); the same gap silently produced "no
Telegram process / no logs" for Telegram (#4314, #4390) and would
silently break Discord too.

This PR:

- Bakes `channels.<name>.enabled: true` for Telegram, Discord, Slack,
and WhatsApp in generated `openclaw.json`.
- Enables matching `plugins.entries.<channel>` records so OpenClaw
discovers selected messaging providers through its real channel/plugin
path.
- Pins external OpenClaw messaging plugins at image build time with
`scripts/openclaw-build-messaging-plugins.py` instead of relying on
unversioned `openclaw doctor --fix` catalog drift.
- Adds a gated Telegram startup-grace diagnostic breadcrumb when the
bridge fails to log startup within the grace window.
- Adds a post-rebuild runtime check to `nemoclaw <sandbox> channels add
<channel>` for verifiable OpenClaw channels (telegram/discord/slack),
surfacing missing enabled flags, missing startup breadcrumbs, and
credential/startup warnings.
- Extends messaging-provider E2E coverage with generated activation
checks, `openclaw channels list --all --json` runtime discovery checks,
pinned plugin build coverage, fake provider APIs, and optional live
Telegram/Discord/Slack `openclaw message send` paths when repository
secrets are configured.
- Keeps WeChat out of upfront generated channel config; WeChat remains
on the existing late seed path after plugin install.

## Reproduction (issue #4390 + #4314)

Before the fix, generated config with Telegram selected during
onboarding:

```json
"channels": { "telegram": { "accounts": { "default": { ... } } } }
```

No top-level `enabled: true` meant OpenClaw skipped loading the bridge.
No Telegram process spawned, `/sandbox/.openclaw/telegram/` stayed
empty, and no startup/error breadcrumb appeared.

After the fix:

```json
"channels": { "telegram": { "enabled": true, "accounts": { "default": { ..., "enabled": true } } } }
```

The bridge module is loadable, diagnostics can report silent startup
failure, and `channels add telegram` probes the rebuilt runtime instead
of leaving users with radio silence.

## Test plan

Local validation on the unified branch:

- [x] `python3 -m py_compile scripts/generate-openclaw-config.py
scripts/openclaw-build-messaging-plugins.py`
- [x] `NEMOCLAW_MESSAGING_CHANNELS_B64=$(printf '%s'
'["telegram","discord","slack","whatsapp"]' | base64 | tr -d '\n')
OPENCLAW_VERSION=2026.5.22 python3
scripts/openclaw-build-messaging-plugins.py --dry-run`
- [x] `bash -n test/e2e/test-messaging-providers.sh
test/e2e/lib/discord-rest-policy-proof.sh
test/e2e/lib/slack-api-proof.sh test/e2e/lib/telegram-api-proof.sh`
- [x] `git diff --check HEAD~1..HEAD`
- [x] `npm ci --ignore-scripts`
- [x] `npm run build:cli`
- [x] `npx vitest run test/generate-openclaw-config.test.ts
test/openclaw-build-messaging-plugins.test.ts
test/sandbox-build-context.test.ts test/sandbox-provisioning.test.ts
test/channels-add-preset.test.ts test/telegram-diagnostics.test.ts
test/e2e-script-workflow.test.ts test/validate-e2e-coverage.test.ts` —
160 passed

Live Telegram bot E2E was not run from the local triage worktree because
no Telegram bot credential is available locally; the PR wires optional
live repository secrets through the nightly reusable workflow and keeps
hermetic fake-provider proofs for CI.

## DCO

```
Signed-off-by: Yimo Jiang <yimoj@nvidia.com>
```

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Startup watchdog emits a single breadcrumb when an OpenClaw gateway
bridge fails to start within a configurable grace period.
  * Post-channel-add now verifies bridged channels after a rebuild.
* Image/sandbox build now includes a messaging-plugin installer to
pin/install provider plugins.

* **Bug Fixes**
* Ensure channels, accounts, and plugin entries are marked enabled so
bridges activate reliably.

* **Tests**
* Expanded regression/E2E coverage with fake provider APIs, startup
diagnostics, and live-credential wiring for Telegram/Discord/Slack.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/4403?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Yimo Jiang <yimoj@nvidia.com>
Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
@cjagwani cjagwani closed this May 28, 2026
@cjagwani cjagwani reopened this May 28, 2026
@cjagwani cjagwani closed this May 28, 2026
@cjagwani cjagwani reopened this May 28, 2026
@cjagwani
Copy link
Copy Markdown
Contributor

superseded by merged #4403 (commit 4e088d2) — strict superset, you're co-author on the merge. closing.

@cjagwani cjagwani closed this May 28, 2026
@cv cv added the integration: whatsapp WhatsApp integration or channel behavior label May 30, 2026
@wscurran wscurran added area: e2e End-to-end tests, nightly failures, or validation infrastructure area: messaging Messaging channels, bridges, manifests, or channel lifecycle bug-fix PR fixes a bug or regression feature PR adds or expands user-visible functionality and removed E2E labels Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: e2e End-to-end tests, nightly failures, or validation infrastructure area: messaging Messaging channels, bridges, manifests, or channel lifecycle bug Something fails against expected or documented behavior bug-fix PR fixes a bug or regression feature PR adds or expands user-visible functionality integration: openclaw OpenClaw integration behavior integration: telegram Telegram integration or channel behavior integration: whatsapp WhatsApp integration or channel behavior v0.0.54 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants