Skip to content

feat(messaging): migrate enrollment to manifest hooks#4248

Open
sandl99 wants to merge 72 commits into
mainfrom
u/sdang/3896-phase-2-messaging-enrollment
Open

feat(messaging): migrate enrollment to manifest hooks#4248
sandl99 wants to merge 72 commits into
mainfrom
u/sdang/3896-phase-2-messaging-enrollment

Conversation

@sandl99
Copy link
Copy Markdown
Contributor

@sandl99 sandl99 commented May 26, 2026

Summary

Migrates messaging enrollment from the legacy ad hoc onboard implementation to the manifest-driven workflow compiler path.

The PR keeps the existing operator-facing enrollment UX, but moves the source of truth for channel setup into channel manifests and registered messaging hooks. Telegram,
Discord, Slack, WeChat, and WhatsApp now declare their enrollment prompts, config inputs, credential bindings, policy needs, render targets, and setup hooks through the
manifest system.

3 key changes

  • Moves onboard messaging orchestration into messaging-channel-setup.ts, with shared manifest-style channels
  • Build messaging plan (a configuration) file including configuration, policy, credential, agent config hooks,
  • Store messaging state into SandboxEntry (sandboxes.json)

Test results

OpenClaw + Hermes

Discord

image

Telegram

image

WeChat

image

Slack

image

Related Issue

Closes #4247 #4535

Changes

  • Moves messaging setup orchestration into messaging-channel-setup.ts and shared helpers into messaging/utils.ts.
  • Adds common manifest hooks for token paste and configuration prompts, then binds Telegram, Discord, Slack, WeChat, and WhatsApp enrollment through channel manifests.
  • Uses static built-in messaging hook initialization so MessagingWorkflowPlanner resolves hooks from the manifest registry.
  • Keeps WeChat QR enrollment and Telegram reachability behavior aligned with the existing onboard UX.
  • Updates compiler, hook runner, channel manifest, and onboard tests for the migrated enrollment flow.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Verification

  • npx prek run --all-files passes
  • npm test passes
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • make docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: San Dang sdang@nvidia.com

Summary by CodeRabbit

  • New Features

    • Manifest-driven messaging onboarding and plan-based add/stop/start/remove flows with serialized messaging plans persisted per sandbox.
    • WeChat host-QR enrollment runtime and unified config prompting across channels.
  • Improvements

    • Clearer enrollment/help text, empty-value guidance, and QR pairing UX/logging.
    • Slack token format hints and explicit credential validation with skip/failure handling.
    • Rebuild and sandbox lifecycle preserve and reapply messaging plans; better non-interactive behavior.

sandl99 and others added 28 commits May 22, 2026 10:03
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
# Conflicts:
#	src/lib/messaging/manifest/types.test.ts
## Summary
Adds the phase-1 messaging manifest compiler that converts channel
manifests into a serializable sandbox messaging plan. The compiler
resolves channel inputs through env keys and interactive enrollment
hooks, then delegates credential, policy, render, build-step,
state-update, and health-check planning to small pure engines.

## Related Issue
Fixes #3994

## Changes
- Add `ManifestCompiler` with interactive enrollment-hook input
resolution and env-key input initialization.
- Add compiler plan engines for credential bindings, network policy,
agent render fragments, build steps, state updates, and health checks.
- Expand `SandboxMessagingPlan` and related manifest plan types to the
top-level plan shape required by #3994.
- Add coverage for built-in Telegram/Discord/Slack/WeChat/WhatsApp
plans, Hermes WeChat policy aliasing, non-interactive env input
behavior, secret-free JSON plans, disabled channels, and a synthetic
non-built-in channel.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [ ] `npx prek run --all-files` passes
- [ ] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

Additional verification performed:
- `npm test -- --project cli src/lib/messaging` passes.
- `npm run typecheck:cli` passes.
- `npm run lint -- src/lib/messaging` passes with the existing unrelated
warning in `src/lib/onboard/child-exit-tracker.test.ts`.
- `git diff --check` passes.
- `npm run source-shape:check` passes.
- `npx prek run --all-files` and the normal pre-push hook were attempted
and currently fail in unrelated full CLI doctor/debug/snapshot tests
outside the messaging compiler changes.

---
Signed-off-by: San Dang <sdang@nvidia.com>

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

## Summary by CodeRabbit

* **New Features**
* Added manifest compilation system for messaging channels with support
for multiple agents and workflows
  * Implemented credential binding and authentication management
  * Added network policy configuration and agent rendering capabilities
  * Introduced health check and build step planning
  * Added state persistence and hydration management
  * Implemented placeholder resolution for sandbox names and credentials

* **Tests**
* Added comprehensive test suite validating compilation behavior,
credential handling, and plan serialization

<!-- 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/4069?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: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 self-assigned this May 26, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 26, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 34b06530-811c-4cf9-a3eb-649be8112350

📥 Commits

Reviewing files that changed from the base of the PR and between d999e18 and 0538b97.

📒 Files selected for processing (6)
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/rebuild.ts
  • src/lib/messaging/compiler/workflow-planner.test.ts
  • src/lib/messaging/compiler/workflow-planner.ts
  • test/e2e/test-channels-add-remove.sh
  • test/e2e/test-channels-stop-start.sh
🚧 Files skipped from review as they are similar to previous changes (6)
  • test/e2e/test-channels-stop-start.sh
  • src/lib/actions/sandbox/rebuild.ts
  • test/e2e/test-channels-add-remove.sh
  • src/lib/messaging/compiler/workflow-planner.test.ts
  • src/lib/messaging/compiler/workflow-planner.ts
  • src/lib/actions/sandbox/policy-channel.ts

📝 Walkthrough

Walkthrough

Migrates messaging enrollment to manifest-driven hooks and planner workflows: new manifest fields and utilities, shared config-prompt/token-paste hooks, Slack credential validation, WeChat host-QR runtime, compiler/planner changes, onboarding refactor to return SandboxMessagingPlan, policy-channel persistence, and broad test/e2e updates.

Changes

Messaging Channel Enrollment Manifest Migration

Layer / File(s) Summary
Manifest schema and utilities
src/lib/messaging/manifest/types.ts, src/lib/messaging/utils.ts, src/lib/messaging/index.ts
Added manifest enrollment/help fields, input format hints, prompt gating, utilities for agent id/availability/seed and credential presence, and re-exported utils.
Channel manifests & tests
src/lib/messaging/channels/*/manifest.ts, src/lib/messaging/channels/manifests.test.ts
Updated manifests (Telegram/Discord/Slack/WeChat/WhatsApp) with enrollmentHelp/enrollmentNotes, emptyValueMessage, promptWhenInput, token formatPattern/formatHint, added per-channel config-prompt enroll hooks, and aligned manifest tests.
Config-prompt hook
src/lib/messaging/hooks/common/config-prompt.ts, src/lib/messaging/hooks/common/config-prompt.test.ts
New shared configPromptHook handling manifest-derived config outputs: resolve fields, conditionally skip prompting, record env/outputs/state, support mention-mode, and include tests for ordering/gating/logging.
Token-paste hook refactor
src/lib/messaging/hooks/common/token-paste.ts, tests
Token resolution now reads secret input specs from manifests, returns token + source, validates formats, persists prompted credentials, logs enrollment notes, and updates registrations/tests.
WeChat host-QR & ilink login
src/lib/messaging/channels/wechat/hooks/*
Added default host-QR runtime options and runner, merged defaults into hook registration, added optional log callback and clearer success/failure logging; tests updated to inject log.
Built-in hooks & Slack validate
src/lib/messaging/hooks/builtins.ts, src/lib/messaging/hooks/common/*, src/lib/messaging/channels/slack/hooks/*
Composed common hook registrations (token-paste + config-prompt), exposed BUILT_IN_MESSAGING_HOOK_REGISTRY, added Slack credential validation hook (slack.validateCredentials) and registration helpers, and adjusted related tests.
Manifest compiler
src/lib/messaging/compiler/manifest-compiler.ts, tests
Defaulted compiler hooks to BUILT_IN_MESSAGING_HOOK_REGISTRY, apply credential availability before building hook inputs, normalize env/config values, skip enrollment hooks whose outputs are already satisfied, add isInteractive flag, and update tests.
Workflow planner
src/lib/messaging/compiler/workflow-planner.ts, tests
Added planner methods to derive add/stop/start/remove/rebuild plans from sandbox entries, merging/deriving credential availability and plan mutations; added tests for sandbox-entry plan behaviors.
Applier & planner tests
src/lib/messaging/applier/setup-applier.test.ts, src/lib/messaging/compiler/workflow-planner.test.ts
Extended fixtures to include Slack validation and WeChat log stubs, added withEnv helper, and updated expected hook request sequences to include config-prompt hooks and new reachability sequencing.
Onboarding manifest-first refactor
src/lib/onboard/messaging-channel-setup.ts, src/lib/onboard.ts
Rewrote onboarding to seed channels from manifests, present interactive selection UI, snapshot credential availability, build SandboxMessagingPlan via MessagingWorkflowPlanner (non-interactive or interactive), persist messaging-plan state, and delegate setup from onboard.ts.
Onboarding tests & integration
src/lib/onboard/messaging-channel-setup.test.ts, test/onboard-messaging.test.ts
Expanded tests for Slack token validation flows, Telegram reachability gating, Discord prompt gating, WeChat host-QR enrollment routing, WhatsApp tokenless enrollment, and serialized messaging-plan assertions.
policy-channel manifest integration
src/lib/actions/sandbox/policy-channel.ts, test/channels-add-preset.test.ts
Replaced hardcoded channel listing/provider resolution with manifest registry; channels add now builds and persists a manifest-driven SandboxMessagingPlan, collects manifest-declared credentials, handles in-sandbox-qr vs non-QR flows, and merges plan state into the registry/onboard session.
Registry persistence
src/lib/state/registry.ts
Added SandboxMessagingState schema and persisted messaging field on SandboxEntry with safe deep-clone logic.
Misc scripts & e2e
scripts/install.sh, test/e2e/*, test/channels-add-preset.test.ts
Installer path normalization adjustments, broadened Telegram reachability gating for e2e tests, host registry assertions for messaging plan/config, and multiple test harness/env updates.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

enhancement: messaging, enhancement: integration, Integration: Slack, Integration: WhatsApp, refactor

Suggested reviewers

  • ericksoa
  • cv

Poem

"I’m a rabbit in the code-lane bright,
manifests hop and prompts take flight.
Hooks and plans stitched in a neat row,
QR lights blink, deployments go.
Hop, persist, rebuild — we ship at dawn!"

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch u/sdang/3896-phase-2-messaging-enrollment

…messaging-enrollment

# Conflicts:
#	src/lib/messaging/applier/index.ts
#	src/lib/messaging/applier/setup-applier.test.ts
#	src/lib/messaging/channels/discord/manifest.ts
#	src/lib/messaging/channels/manifests.test.ts
#	src/lib/messaging/channels/slack/manifest.ts
#	src/lib/messaging/channels/telegram/hooks/get-me-reachability.test.ts
#	src/lib/messaging/channels/telegram/hooks/get-me-reachability.ts
#	src/lib/messaging/channels/telegram/hooks/index.ts
#	src/lib/messaging/channels/telegram/manifest.ts
#	src/lib/messaging/channels/wechat/hooks/ilink-login.ts
#	src/lib/messaging/channels/wechat/hooks/implementations.test.ts
#	src/lib/messaging/channels/wechat/hooks/index.ts
#	src/lib/messaging/channels/wechat/manifest.ts
#	src/lib/messaging/channels/whatsapp/manifest.ts
#	src/lib/messaging/compiler/manifest-compiler.test.ts
#	src/lib/messaging/compiler/manifest-compiler.ts
#	src/lib/messaging/compiler/workflow-planner.test.ts
#	src/lib/messaging/hooks/builtins.ts
#	src/lib/messaging/hooks/common/index.ts
#	src/lib/messaging/hooks/common/token-paste.test.ts
#	src/lib/messaging/hooks/common/token-paste.ts
#	src/lib/messaging/hooks/hook-runner.test.ts
#	src/lib/messaging/hooks/hook-runner.ts
#	src/lib/messaging/hooks/types.ts
#	src/lib/messaging/manifest/types.ts
@copy-pr-bot
Copy link
Copy Markdown

copy-pr-bot Bot commented Jun 1, 2026

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26767258521
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 55 passed, 0 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-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
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 ✅ success
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

@cv cv added v0.0.57 Release target and removed v0.0.56 Release target labels Jun 1, 2026
sandl99 added 2 commits June 2, 2026 17:36
…messaging-enrollment

# Conflicts:
#	src/lib/actions/sandbox/policy-channel.ts
#	src/lib/onboard.ts
#	src/lib/onboard/messaging-channel-setup.test.ts
#	src/lib/onboard/messaging-channel-setup.ts
#	test/channels-add-preset.test.ts
#	test/onboard-messaging.test.ts
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/lib/onboard.ts (1)

1122-1153: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Re-check the PID before escalating the gateway kill.

This path only tests isPidAlive(pid) after SIGTERM, and the initial guard here is weaker than isDockerDriverGatewayProcessAlive() because it skips requireDockerDriverEnv. A recycled PID can therefore be mistaken for the recorded Docker-driver gateway and get SIGKILLed.

🛡️ Suggested guard
 function terminateDockerDriverGatewayProcess(pid: number): boolean {
-  if (!isPidAlive(pid)) {
+  const isExpectedGateway = () =>
+    isDockerDriverGatewayProcess(pid, resolveOpenShellGatewayBinary(), {
+      requireDockerDriverEnv: shouldRequireDockerDriverEnv(),
+    });
+  if (!isPidAlive(pid) || !isExpectedGateway()) {
     return false;
   }
 
   try {
     process.kill(pid, "SIGTERM");
     for (let i = 0; i < 10; i += 1) {
-      if (!isPidAlive(pid)) break;
+      if (!isPidAlive(pid) || !isExpectedGateway()) break;
       sleepSeconds(1);
     }
-    if (isPidAlive(pid)) process.kill(pid, "SIGKILL");
+    if (isPidAlive(pid) && isExpectedGateway()) {
+      process.kill(pid, "SIGKILL");
+    }
     return true;
   } catch {
     return false;
   }
 }
 
 function stopDockerDriverGatewayProcess(): boolean {
   const pid = getDockerDriverGatewayPid();
   if (pid === null || !isPidAlive(pid)) {
     clearDockerDriverGatewayRuntimeFiles();
     return false;
   }
-  if (!isDockerDriverGatewayProcess(pid, resolveOpenShellGatewayBinary())) {
+  if (!isDockerDriverGatewayProcess(pid, resolveOpenShellGatewayBinary(), {
+    requireDockerDriverEnv: shouldRequireDockerDriverEnv(),
+  })) {
     clearDockerDriverGatewayRuntimeFiles();
     return false;
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/onboard.ts` around lines 1122 - 1153,
terminateDockerDriverGatewayProcess currently escalates from SIGTERM to SIGKILL
based only on isPidAlive; update the logic so stopDockerDriverGatewayProcess
re-validates the PID is the gateway before escalation by calling
isDockerDriverGatewayProcessAlive (or isDockerDriverGatewayProcess with
requireDockerDriverEnv) right after the SIGTERM wait loop and before sending
SIGKILL; locate terminateDockerDriverGatewayProcess and
stopDockerDriverGatewayProcess and change the post-term check to verify the PID
matches the recorded Docker-driver gateway (using
isDockerDriverGatewayProcessAlive/isDockerDriverGatewayProcess and
resolveOpenShellGatewayBinary) and only send SIGKILL when that check confirms it
is still the gateway, while retaining getDockerDriverGatewayPid and
clearDockerDriverGatewayRuntimeFiles behavior.
src/lib/messaging/hooks/common/token-paste.ts (1)

109-109: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Normalize the credential-store fallback in token paste

The env value is normalized, but the readCredential fallback is used raw; this is also how getMessagingToken() handles credentials (normalizeCredentialValue(process.env[envKey]) || getCredential(envKey)), so stored tokens containing trailing whitespace/\r could fail the field.format validation and be skipped.

🛡️ Proposed fix
-  let token = normalizeCredentialValue(env[field.envKey]) || readCredential(field.envKey);
+  let token =
+    normalizeCredentialValue(env[field.envKey]) ||
+    normalizeCredentialValue(readCredential(field.envKey));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/messaging/hooks/common/token-paste.ts` at line 109, The token
fallback uses a raw readCredential value which can contain trailing
whitespace/CR and fail validation; update the token assignment (the token
variable in token-paste.ts) to normalize both sources (env[field.envKey] and
readCredential(field.envKey)) — i.e., use normalizeCredentialValue(...) for the
env lookup and also call normalizeCredentialValue(readCredential(field.envKey))
as the fallback so stored credentials are trimmed/massaged before applying
field.format validation (consistent with getMessagingToken behavior).
🧹 Nitpick comments (1)
src/lib/messaging/compiler/manifest-compiler.ts (1)

358-374: ⚡ Quick win

Consider documenting the enrollment hook execution logic.

shouldRunEnrollmentHook implements nuanced conditional logic:

  • Always runs tokenPaste handlers (line 362)
  • Always runs hooks with no outputs (line 365)
  • For hooks with required outputs, runs if any required output is unavailable (lines 367-370)
  • Always runs hooks with only config outputs (line 372)
  • Otherwise runs if any output is unavailable (line 373)

This logic is sound but non-obvious. A brief inline comment explaining the rationale would help maintainability.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/messaging/compiler/manifest-compiler.ts` around lines 358 - 374, Add
a concise inline comment above the shouldRunEnrollmentHook function explaining
its enrollment-execution rules: always run handlers ending with ".tokenPaste",
run when there are no outputs, when any required output (from hook.outputs) is
missing, always run if all outputs are config-only, otherwise run when any
non-config output is missing; reference the helper isHookOutputAvailable and the
types ChannelHookSpec and SandboxMessagingInputReference to clarify the checks
and intent for future maintainers.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/lib/messaging/hooks/common/token-paste.ts`:
- Line 109: The token fallback uses a raw readCredential value which can contain
trailing whitespace/CR and fail validation; update the token assignment (the
token variable in token-paste.ts) to normalize both sources (env[field.envKey]
and readCredential(field.envKey)) — i.e., use normalizeCredentialValue(...) for
the env lookup and also call
normalizeCredentialValue(readCredential(field.envKey)) as the fallback so stored
credentials are trimmed/massaged before applying field.format validation
(consistent with getMessagingToken behavior).

In `@src/lib/onboard.ts`:
- Around line 1122-1153: terminateDockerDriverGatewayProcess currently escalates
from SIGTERM to SIGKILL based only on isPidAlive; update the logic so
stopDockerDriverGatewayProcess re-validates the PID is the gateway before
escalation by calling isDockerDriverGatewayProcessAlive (or
isDockerDriverGatewayProcess with requireDockerDriverEnv) right after the
SIGTERM wait loop and before sending SIGKILL; locate
terminateDockerDriverGatewayProcess and stopDockerDriverGatewayProcess and
change the post-term check to verify the PID matches the recorded Docker-driver
gateway (using isDockerDriverGatewayProcessAlive/isDockerDriverGatewayProcess
and resolveOpenShellGatewayBinary) and only send SIGKILL when that check
confirms it is still the gateway, while retaining getDockerDriverGatewayPid and
clearDockerDriverGatewayRuntimeFiles behavior.

---

Nitpick comments:
In `@src/lib/messaging/compiler/manifest-compiler.ts`:
- Around line 358-374: Add a concise inline comment above the
shouldRunEnrollmentHook function explaining its enrollment-execution rules:
always run handlers ending with ".tokenPaste", run when there are no outputs,
when any required output (from hook.outputs) is missing, always run if all
outputs are config-only, otherwise run when any non-config output is missing;
reference the helper isHookOutputAvailable and the types ChannelHookSpec and
SandboxMessagingInputReference to clarify the checks and intent for future
maintainers.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 54568311-e710-4e76-b416-1115a5725df0

📥 Commits

Reviewing files that changed from the base of the PR and between ac3c8bc and 4017a4c.

📒 Files selected for processing (25)
  • scripts/install.sh
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/messaging/applier/setup-applier.test.ts
  • src/lib/messaging/channels/manifests.test.ts
  • src/lib/messaging/channels/slack/hooks/credential-validation.test.ts
  • src/lib/messaging/channels/slack/hooks/credential-validation.ts
  • src/lib/messaging/channels/slack/hooks/index.ts
  • src/lib/messaging/channels/slack/hooks/validate-credentials.test.ts
  • src/lib/messaging/channels/slack/hooks/validate-credentials.ts
  • src/lib/messaging/channels/slack/manifest.ts
  • src/lib/messaging/compiler/manifest-compiler.test.ts
  • src/lib/messaging/compiler/manifest-compiler.ts
  • src/lib/messaging/compiler/workflow-planner.test.ts
  • src/lib/messaging/hooks/builtins.ts
  • src/lib/messaging/hooks/common/token-paste.test.ts
  • src/lib/messaging/hooks/common/token-paste.ts
  • src/lib/messaging/hooks/hook-runner.test.ts
  • src/lib/onboard.ts
  • src/lib/onboard/messaging-channel-setup.test.ts
  • src/lib/sandbox/channels.ts
  • test/channels-add-preset.test.ts
  • test/e2e/test-channels-stop-start.sh
  • test/e2e/test-messaging-providers.sh
  • test/install-docker-group-reexec.test.ts
  • test/onboard-messaging.test.ts
💤 Files with no reviewable changes (7)
  • test/install-docker-group-reexec.test.ts
  • test/e2e/test-messaging-providers.sh
  • test/e2e/test-channels-stop-start.sh
  • src/lib/sandbox/channels.ts
  • test/onboard-messaging.test.ts
  • test/channels-add-preset.test.ts
  • src/lib/onboard/messaging-channel-setup.test.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • scripts/install.sh
  • src/lib/messaging/channels/manifests.test.ts
  • src/lib/actions/sandbox/policy-channel.ts

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26816072600
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Workflow ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 51 passed, 4 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 ❌ failure
double-onboard-e2e ❌ failure
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-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 ❌ failure
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
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: docs-validation-e2e, double-onboard-e2e, messaging-providers-e2e, rebuild-hermes-stale-base-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26816072600
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Workflow ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 52 passed, 3 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 ❌ failure
double-onboard-e2e ❌ failure
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-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 ✅ success
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: docs-validation-e2e, double-onboard-e2e, messaging-providers-e2e. Check run artifacts for logs.

@cv cv added v0.0.58 Release target and removed v0.0.57 Release target labels Jun 3, 2026
@wscurran wscurran added area: integrations Third-party service integration behavior area: messaging Messaging channels, bridges, manifests, or channel lifecycle feature PR adds or expands user-visible functionality and removed enhancement: integration labels Jun 3, 2026
@cv cv added v0.0.59 Release target and removed v0.0.58 Release target labels Jun 4, 2026
Signed-off-by: San Dang <sdang@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26931388430
Target ref: d999e1822ec786380042e470f9f52826d12dde9b
Workflow ref: main
Requested jobs: all (no filter)
Summary: 56 passed, 0 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-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
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 ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-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

sandl99 added 2 commits June 4, 2026 16:52
## Summary
Persist manifest messaging plans through channel lifecycle operations so
add, stop, start, remove, and rebuild can carry the new architecture
state in `SandboxEntry` while legacy registry fields continue to work.

## Related Issue
Fixes #4535
Refs #3896

## Changes
- Added `MessagingWorkflowPlanner` helpers that merge a compiled
add-channel plan into a stored sandbox plan and mutate stored plans for
stop/start/remove/rebuild.
- Updated `channels add`, `channels stop`, `channels start`, and
`channels remove` to write `SandboxEntry.messaging.plan` without
removing legacy registry updates.
- Staged stored manifest plans during rebuild through the existing
messaging plan env path.
- Added planner tests for add merge, stop/start mutation, remove
pruning, rebuild staging from stored plans, and no-compile behavior when
no stored plan exists.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [ ] `npx prek run --all-files` passes
- [ ] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `npm run docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
Signed-off-by: San Dang <sdang@nvidia.com>


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

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Improved messaging channel management with manifest-driven
configuration for Discord, Telegram, Slack, WeChat, and WhatsApp
* Support for multiple authentication modes including token-based and QR
code enrollment
  * Enhanced channel validation and reachability checks during setup

* **Bug Fixes**
  * More reliable credential handling and credential binding resolution
  * Better error messaging and validation for channel configuration

* **Tests**
* Expanded test coverage for channel enrollment workflows and manifest
validation

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

---------

Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26944524013
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 37 passed, 0 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 ⚠️ cancelled
docs-validation-e2e ✅ success
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
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 ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ✅ success
sessions-agents-cli-e2e ⚠️ cancelled
shields-config-e2e ✅ success
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ✅ success
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26944897258
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Workflow ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: channels-add-remove-e2e,channels-stop-start-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26957346522
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 55 passed, 1 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-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
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 ❌ failure
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 ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-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: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

2 similar comments
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26957346522
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 55 passed, 1 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-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
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 ❌ failure
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 ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-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: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 26957346522
Target ref: u/sdang/3896-phase-2-messaging-enrollment
Requested jobs: all (no filter)
Summary: 55 passed, 1 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-dashboard-e2e ✅ success
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
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
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 ❌ failure
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 ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
sessions-agents-cli-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: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

@cv cv added v0.0.60 Release target and removed v0.0.59 Release target labels Jun 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: integrations Third-party service integration behavior area: messaging Messaging channels, bridges, manifests, or channel lifecycle feature PR adds or expands user-visible functionality integration: discord Discord integration or channel behavior integration: slack Slack integration or channel behavior integration: telegram Telegram integration or channel behavior integration: whatsapp WhatsApp integration or channel behavior v0.0.60 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Phase 2: migrate messaging enrollment to manifest hooks

3 participants