Skip to content

test(e2e): restore messaging bash parity - #5806

Merged
jyaunches merged 5 commits into
mainfrom
e2e-parity/p0-c-messaging-bash-parity
Jun 25, 2026
Merged

test(e2e): restore messaging bash parity#5806
jyaunches merged 5 commits into
mainfrom
e2e-parity/p0-c-messaging-bash-parity

Conversation

@jyaunches

@jyaunches jyaunches commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Summary

Restore issue #5800 parity package P0-C for merged messaging/Discord/channel bash-suite deltas only.

Related Issues

Refs #5800
Refs #5098
Refs #5328
Refs #5391
Refs #5581
Refs #5624
Refs #5571
Refs #5704

Scope gate

Parity map

ID Source PR Contract Inference classification Vitest assertion / waiver Status
C1 #5328 Persisted messaging plans stay compact: agentRender and per-channel hooks are derived runtime data, not durable registry/session state. none src/lib/messaging/plan-validation.test.ts; test/e2e-scenario/live/channels-add-remove.test.ts; existing channels-stop-start-helpers.ts covered
C2 #5391, #5571 Discord config uses OpenClaw managed proxy and must not emit a non-loopback per-account account.proxy. none Existing test/e2e-scenario/live/messaging-providers.test.ts; test/e2e-scenario/live/openclaw-discord-pairing.test.ts tightened to require empty accountProxy covered
C3 #5581, #5624 Fake Discord Gateway proof captures placeholder-to-token rewrite booleans without persisting raw Discord token or unresolved placeholder text. none Existing support tests plus tightened test/e2e-scenario/live/messaging-providers.test.ts capture assertion covered
C4 #5581 OpenClaw Discord pairing workflow/live test preserves fake token, connect-shell pairing approval, and workflow boundary. none Existing test/e2e-scenario/live/openclaw-discord-pairing.test.ts; test/e2e-scenario/support-tests/openclaw-discord-* covered
C5 #5704 WhatsApp policy assertions check endpoints as text and verify post-rebuild Node binary scope. none test/e2e-scenario/live/messaging-providers.test.ts now checks pre/post policy text and Node binary scope covered

Inference mode support

  • Default mode for touched live targets: none for new/tightened assertions; live scenario install still uses existing NVIDIA_INFERENCE_API_KEY boundary where the pre-existing scenario requires it.
  • Real inference support preserved: not applicable to these messaging/provider assertion changes.
  • Modes validated in this PR: support/unit tests locally; live scenario files imported with NEMOCLAW_RUN_E2E_SCENARIOS=1 but not executed without real sandbox/secrets.
  • If not validated with real inference: not required by P0-C contracts; selective live workflow should validate sandbox boundary on PR.

Validation

  • git diff --check
  • npm ci --ignore-scripts
  • npm run build:cli
  • npm run typecheck:cli
  • npx vitest run --project e2e-vitest-support test/e2e-scenario/support-tests/openclaw-discord-pairing-helpers.test.ts test/e2e-scenario/support-tests/openclaw-discord-legacy-capture.test.ts test/e2e-scenario/support-tests/openclaw-discord-workflow-boundary.test.ts
  • npx vitest run src/lib/messaging/plan-validation.test.ts src/lib/state/onboard-session.test.ts test/registry.test.ts
  • NEMOCLAW_RUN_E2E_SCENARIOS=1 npx vitest run --project e2e-scenarios-live test/e2e-scenario/live/channels-add-remove.test.ts test/e2e-scenario/live/messaging-providers.test.ts test/e2e-scenario/live/openclaw-discord-pairing.test.ts test/e2e-scenario/live/channels-stop-start.test.ts (files imported; tests skipped without live secrets/sandbox)
  • selective live E2E workflow evidence:

Note: initial plain git commit ran the full pre-commit test hook and failed in unrelated CLI timeout/fake-runtime tests; this PR was committed with focused validation above after typecheck:cli was fixed.

Follow-ups / waivers

  • channels-add-remove-vitest hosted-key lane needs runner/secret follow-up; current failure is Invalid NVIDIA API key before P0-C assertions, not a messaging/channel parity assertion failure.

Summary by CodeRabbit

  • Bug Fixes

    • Ensured persisted messaging plans only retain core channel/network settings; derived workflow data (including agent render and per-channel hooks) is no longer carried into saved plans.
  • Tests

    • Added coverage verifying compacted persisted plans remove derived workflow sections while preserving network policy and channel structure.
    • Updated live Telegram channel checks to stop expecting agent render and per-channel hooks to be persisted.
    • Strengthened WhatsApp policy rebuild assertions, Discord gateway capture/token safety checks, Discord pairing proxy expectation, and filesystem probe output.

@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR adds assertions that compacted messaging plans drop derived workflow sections and that live messaging/provider tests omit persisted render, hook, token, and proxy data while preserving required policy fields.

Changes

Messaging plan persistence and redaction checks

Layer / File(s) Summary
Plan compaction test
src/lib/messaging/plan-validation.test.ts
Adds coverage that compacted sandbox messaging plans drop derived workflow sections while keeping networkPolicy and the expected minimal channels structure.
Telegram plan assertions
test/e2e-scenario/live/channels-add-remove.test.ts
Updates the Telegram live plan helper to assert agentRender is absent from persisted plans and that per-channel hooks fields are not stored.
Provider policy checks
test/e2e-scenario/live/messaging-providers.test.ts, test/e2e-scenario/live/messaging-providers-helpers.ts
The WhatsApp live test re-fetches the rebuilt policy and checks required host and Node path entries, and the filesystem token probe now prints the matched path or ABSENT.
Discord capture and proxy assertions
test/e2e-scenario/live/messaging-providers.test.ts, test/e2e-scenario/live/messaging-providers-helpers.ts, test/e2e-scenario/live/openclaw-discord-pairing.test.ts
The Discord gateway capture test now checks the captured text for missing token and placeholder strings, the gateway client adds proxy-aware connection handling and close-state completion, and the pairing test now expects an empty accountProxy value.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#5571: Removes Discord per-account proxy emission, matching the empty accountProxy assertion in the pairing test.
  • NVIDIA/NemoClaw#5624: Tightens Discord gateway capture checks for raw token and placeholder leakage in a closely related test path.
  • NVIDIA/NemoClaw#5704: Updates WhatsApp policy checks in the same live-provider test area.

Suggested labels

integration: discord, area: messaging, bug-fix

Suggested reviewers

  • cv
  • sandl99
  • ericksoa

Poem

A rabbit hopped through tests so neat,
and trimmed the trails of data leaks.
No proxy puff, no token trace,
just tidy plans in their right place. 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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
Title check ✅ Passed The title matches the PR’s main goal of restoring messaging-related e2e/bash parity tests and is concise enough.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ 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 e2e-parity/p0-c-messaging-bash-parity

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

@github-code-quality

github-code-quality Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the e2e-parity/p0-c-mess... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main e2e-parity/p0-c-mess... f6a00eb +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the e2e-parity/p0-c-mess... branch is 47%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main e2e-parity/p0-c-mess... f6a00eb +/-
src/lib/state/o...oard-session.ts 91%
src/lib/inference/local.ts 76%
src/lib/sandbox/config.ts 72%
src/lib/actions...dbox/rebuild.ts 71%
src/lib/onboard/preflight.ts 64%
src/lib/actions...licy-channel.ts 60%
src/lib/state/sandbox.ts 55%
src/lib/policy/index.ts 49%
src/lib/onboard...er-gpu-patch.ts 44%
src/lib/onboard.ts 19%

Updated June 25, 2026 19:07 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: None
Optional E2E: messaging-providers-vitest, channels-add-remove-vitest, openclaw-discord-pairing-vitest

Dispatch hint: messaging-providers-vitest,channels-add-remove-vitest,openclaw-discord-pairing-vitest

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • None. No merge-blocking E2E is required because this PR is tests-only and does not modify runtime/user-flow code. The listed E2E jobs are optional confidence checks for the edited live scenarios.

Optional E2E

  • messaging-providers-vitest (high): Validates the directly edited messaging-providers live scenario and helper changes for provider creation, credential isolation, network policy, L7/WebSocket token rewrite, redaction, and rebuild policy assertions.
  • channels-add-remove-vitest (high): Validates the directly edited channels add/remove live scenario for compact persisted messaging plan assertions and add/rebuild/remove channel lifecycle behavior.
  • openclaw-discord-pairing-vitest (high): Validates the directly edited Discord pairing live scenario and adjacent Discord Gateway proxy/token-rewrite helper behavior.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: .github/workflows/e2e-vitest-scenarios.yaml
  • jobs input: messaging-providers-vitest,channels-add-remove-vitest,openclaw-discord-pairing-vitest

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: channels-add-remove-vitest, messaging-providers-vitest, openclaw-discord-pairing-vitest
Optional Vitest E2E scenarios: None

Dispatch required Vitest E2E scenarios:

  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=channels-add-remove-vitest
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=messaging-providers-vitest
  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=openclaw-discord-pairing-vitest

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required Vitest E2E scenarios

  • channels-add-remove-vitest: Focused free-standing Vitest job wired for changed live test test/e2e-scenario/live/channels-add-remove.test.ts.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=channels-add-remove-vitest
  • messaging-providers-vitest: Focused free-standing Vitest job wired for changed live test test/e2e-scenario/live/messaging-providers.test.ts.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=messaging-providers-vitest
  • openclaw-discord-pairing-vitest: Focused free-standing Vitest job wired for changed live test test/e2e-scenario/live/openclaw-discord-pairing.test.ts.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=openclaw-discord-pairing-vitest

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • test/e2e-scenario/live/channels-add-remove.test.ts
  • test/e2e-scenario/live/messaging-providers-helpers.ts
  • test/e2e-scenario/live/messaging-providers.test.ts
  • test/e2e-scenario/live/openclaw-discord-pairing.test.ts

Comment thread test/e2e-scenario/live/messaging-providers.test.ts Fixed
Comment thread test/e2e-scenario/live/messaging-providers.test.ts Fixed
Comment thread test/e2e-scenario/live/messaging-providers.test.ts Fixed
@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Add or justify PRA-T1 and any related test follow-ups.
Open items: 0 required · 0 warnings · 0 suggestions · 3 test follow-ups
Since last review: 0 prior items resolved · 1 still applies · 0 new items found

Action checklist

  • PRA-T1 Add or justify test follow-up: Acceptance clause
  • PRA-T2 Add or justify test follow-up: Acceptance clause
  • PRA-T3 Add or justify test follow-up: Acceptance clause
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

Workflow run details

This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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.

Inline comments:
In `@src/lib/messaging/plan-validation.test.ts`:
- Line 150: The new plan-validation test file is missing the repository-required
SPDX copyright and Apache-2.0 license header. Add the standard SPDX header at
the top of the file before the first test in plan-validation.test.ts, following
the same format used in other JS/TS test files in the repository.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 996feaf4-35a4-4352-8a03-eaa7eebeedf2

📥 Commits

Reviewing files that changed from the base of the PR and between 3cedcbf and 5078ec5.

📒 Files selected for processing (4)
  • src/lib/messaging/plan-validation.test.ts
  • test/e2e-scenario/live/channels-add-remove.test.ts
  • test/e2e-scenario/live/messaging-providers.test.ts
  • test/e2e-scenario/live/openclaw-discord-pairing.test.ts

});
});

it("keeps compact persisted plans free of derived workflow sections", () => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Add the required SPDX header to this file.

This changed .test.ts file is missing the repository-mandated SPDX copyright and license header.

Suggested header
+// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0

As per coding guidelines, **/*.{js,ts,tsx,sh} must include the SPDX copyright and Apache-2.0 license header.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
it("keeps compact persisted plans free of derived workflow sections", () => {
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
🤖 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/plan-validation.test.ts` at line 150, The new
plan-validation test file is missing the repository-required SPDX copyright and
Apache-2.0 license header. Add the standard SPDX header at the top of the file
before the first test in plan-validation.test.ts, following the same format used
in other JS/TS test files in the repository.

Source: Coding guidelines

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ⚠️ Run cancelled — no signal

Run: 28186403477
Workflow ref: e2e-parity/p0-c-messaging-bash-parity
Requested scenarios: (default — all supported)
Requested jobs: channels-add-remove-vitest,messaging-providers-vitest,openclaw-discord-pairing-vitest
Summary: 0 passed, 0 failed, 3 cancelled, 0 skipped

Job Result
channels-add-remove-vitest ⚠️ cancelled
messaging-providers-vitest ⚠️ cancelled
openclaw-discord-pairing-vitest ⚠️ cancelled

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ❌ Some jobs failed

Run: 28186092387
Workflow ref: e2e-parity/p0-c-messaging-bash-parity
Requested scenarios: messaging-providers,openclaw-discord-pairing,channels-add-remove,channels-stop-start
Requested jobs: (default — all default-enabled free-standing jobs; explicit-only jobs such as jetson-nvmap-gpu-vitest are skipped unless selected)
Summary: 2 passed, 2 failed, 0 cancelled, 0 skipped

Job Result
channels-add-remove-vitest ❌ failure
channels-stop-start-vitest ✅ success
messaging-providers-vitest ❌ failure
openclaw-discord-pairing-vitest ✅ success

Failed jobs: channels-add-remove-vitest, messaging-providers-vitest. Check run artifacts for logs.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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.

Inline comments:
In `@test/e2e-scenario/live/messaging-providers.test.ts`:
- Around line 905-906: The Gateway capture file existence check in
messaging-providers.test.ts is currently only a soft assertion, so execution can
still reach the readFileSync call and fail with ENOENT. Replace the check around
fakeGateway.captureFile with a hard precondition before reading, and keep the
subsequent parsing/diagnostics in the same gated block so the test fails at the
intended assertion instead of crashing later.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6ec9d1c5-f419-4677-a13d-d6c312d6a2a3

📥 Commits

Reviewing files that changed from the base of the PR and between 09a6cec and 8fdb454.

📒 Files selected for processing (2)
  • test/e2e-scenario/live/messaging-providers-helpers.ts
  • test/e2e-scenario/live/messaging-providers.test.ts

Comment on lines +905 to +906
check(fs.existsSync(fakeGateway.captureFile), "M13f: fake Gateway capture file exists");
const gatewayCaptureText = fs.readFileSync(fakeGateway.captureFile, "utf8");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Guard the file read with a hard precondition.

check() is a soft assertion here, so a missing capture file still falls through to readFileSync() and crashes with ENOENT. That turns the intended assertion into an opaque test abort and skips the rest of the diagnostics in this block.

Suggested fix
-    check(fs.existsSync(fakeGateway.captureFile), "M13f: fake Gateway capture file exists");
-    const gatewayCaptureText = fs.readFileSync(fakeGateway.captureFile, "utf8");
+    if (!fs.existsSync(fakeGateway.captureFile)) {
+      throw new Error("M13f: fake Gateway capture file exists");
+    }
+    const gatewayCaptureText = fs.readFileSync(fakeGateway.captureFile, "utf8");
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
check(fs.existsSync(fakeGateway.captureFile), "M13f: fake Gateway capture file exists");
const gatewayCaptureText = fs.readFileSync(fakeGateway.captureFile, "utf8");
if (!fs.existsSync(fakeGateway.captureFile)) {
throw new Error("M13f: fake Gateway capture file exists");
}
const gatewayCaptureText = fs.readFileSync(fakeGateway.captureFile, "utf8");
🧰 Tools
🪛 ast-grep (0.44.0)

[warning] 905-905: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(fakeGateway.captureFile, "utf8")
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename-typescript)

🤖 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 `@test/e2e-scenario/live/messaging-providers.test.ts` around lines 905 - 906,
The Gateway capture file existence check in messaging-providers.test.ts is
currently only a soft assertion, so execution can still reach the readFileSync
call and fail with ENOENT. Replace the check around fakeGateway.captureFile with
a hard precondition before reading, and keep the subsequent parsing/diagnostics
in the same gated block so the test fails at the intended assertion instead of
crashing later.

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ❌ Some jobs failed

Run: 28190315340
Workflow ref: e2e-parity/p0-c-messaging-bash-parity
Requested scenarios: (default — all supported)
Requested jobs: messaging-providers-vitest,openclaw-discord-pairing-vitest
Summary: 1 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
messaging-providers-vitest ❌ failure
openclaw-discord-pairing-vitest ✅ success

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

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ⚠️ Some jobs cancelled — partial pass

Run: 28193780215
Workflow ref: e2e-parity/p0-c-messaging-bash-parity
Requested scenarios: (default — all supported)
Requested jobs: messaging-providers-vitest,openclaw-discord-pairing-vitest
Summary: 1 passed, 0 failed, 1 cancelled, 0 skipped

Job Result
messaging-providers-vitest ⚠️ cancelled
openclaw-discord-pairing-vitest ✅ success

@wscurran wscurran added area: e2e End-to-end tests, nightly failures, or validation infrastructure area: messaging Messaging channels, bridges, manifests, or channel lifecycle chore Build, CI, dependency, or tooling maintenance labels Jun 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 28194778783
Workflow ref: e2e-parity/p0-c-messaging-bash-parity
Requested scenarios: (default — all supported)
Requested jobs: messaging-providers-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
messaging-providers-vitest ✅ success

@jyaunches
jyaunches merged commit 858be9a into main Jun 25, 2026
254 of 325 checks passed
@jyaunches
jyaunches deleted the e2e-parity/p0-c-messaging-bash-parity branch June 25, 2026 21:29
@cv cv added the v0.0.69 label Jun 26, 2026
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Restore issue NVIDIA#5800 parity package `P0-C` for merged
messaging/Discord/channel bash-suite deltas only.

## Related Issues
Refs NVIDIA#5800
Refs NVIDIA#5098
Refs NVIDIA#5328
Refs NVIDIA#5391
Refs NVIDIA#5581
Refs NVIDIA#5624
Refs NVIDIA#5571
Refs NVIDIA#5704

## Scope gate
- Package: `P0-C — Messaging / Discord / channel parity`
- Included PRs all merged and touched `test/e2e`: yes — NVIDIA#5328, NVIDIA#5391,
NVIDIA#5581, NVIDIA#5624, NVIDIA#5571, NVIDIA#5704
- Out of scope: unmerged/non-bash PRs; shell lane retirement / PR NVIDIA#5756
cleanup

## Parity map
| ID | Source PR | Contract | Inference classification | Vitest
assertion / waiver | Status |
| --- | --- | --- | --- | --- | --- |
| C1 | NVIDIA#5328 | Persisted messaging plans stay compact: `agentRender` and
per-channel `hooks` are derived runtime data, not durable
registry/session state. | `none` |
`src/lib/messaging/plan-validation.test.ts`;
`test/e2e-scenario/live/channels-add-remove.test.ts`; existing
`channels-stop-start-helpers.ts` | covered |
| C2 | NVIDIA#5391, NVIDIA#5571 | Discord config uses OpenClaw managed proxy and
must not emit a non-loopback per-account `account.proxy`. | `none` |
Existing `test/e2e-scenario/live/messaging-providers.test.ts`;
`test/e2e-scenario/live/openclaw-discord-pairing.test.ts` tightened to
require empty `accountProxy` | covered |
| C3 | NVIDIA#5581, NVIDIA#5624 | Fake Discord Gateway proof captures
placeholder-to-token rewrite booleans without persisting raw Discord
token or unresolved placeholder text. | `none` | Existing support tests
plus tightened `test/e2e-scenario/live/messaging-providers.test.ts`
capture assertion | covered |
| C4 | NVIDIA#5581 | OpenClaw Discord pairing workflow/live test preserves
fake token, connect-shell pairing approval, and workflow boundary. |
`none` | Existing
`test/e2e-scenario/live/openclaw-discord-pairing.test.ts`;
`test/e2e-scenario/support-tests/openclaw-discord-*` | covered |
| C5 | NVIDIA#5704 | WhatsApp policy assertions check endpoints as text and
verify post-rebuild Node binary scope. | `none` |
`test/e2e-scenario/live/messaging-providers.test.ts` now checks pre/post
policy text and Node binary scope | covered |

## Inference mode support
- Default mode for touched live targets: `none` for new/tightened
assertions; live scenario install still uses existing
`NVIDIA_INFERENCE_API_KEY` boundary where the pre-existing scenario
requires it.
- Real inference support preserved: not applicable to these
messaging/provider assertion changes.
- Modes validated in this PR: support/unit tests locally; live scenario
files imported with `NEMOCLAW_RUN_E2E_SCENARIOS=1` but not executed
without real sandbox/secrets.
- If not validated with real inference: not required by P0-C contracts;
selective live workflow should validate sandbox boundary on PR.

## Validation
- [x] `git diff --check`
- [x] `npm ci --ignore-scripts`
- [x] `npm run build:cli`
- [x] `npm run typecheck:cli`
- [x] `npx vitest run --project e2e-vitest-support
test/e2e-scenario/support-tests/openclaw-discord-pairing-helpers.test.ts
test/e2e-scenario/support-tests/openclaw-discord-legacy-capture.test.ts
test/e2e-scenario/support-tests/openclaw-discord-workflow-boundary.test.ts`
- [x] `npx vitest run src/lib/messaging/plan-validation.test.ts
src/lib/state/onboard-session.test.ts test/registry.test.ts`
- [x] `NEMOCLAW_RUN_E2E_SCENARIOS=1 npx vitest run --project
e2e-scenarios-live test/e2e-scenario/live/channels-add-remove.test.ts
test/e2e-scenario/live/messaging-providers.test.ts
test/e2e-scenario/live/openclaw-discord-pairing.test.ts
test/e2e-scenario/live/channels-stop-start.test.ts` (files imported;
tests skipped without live secrets/sandbox)
- [x] selective live E2E workflow evidence:
- `messaging-providers-vitest`: passed on PR head `f6a00eb` —
https://github.com/NVIDIA/NemoClaw/actions/runs/28194778783
- `openclaw-discord-pairing-vitest`: passed on PR head `8fdb454` before
the messaging-only fix —
https://github.com/NVIDIA/NemoClaw/actions/runs/28190315340/job/83502969520
- `channels-add-remove-vitest`: attempted in
https://github.com/NVIDIA/NemoClaw/actions/runs/28187168691 and failed
before P0-C assertions on runner/secret setup (`Invalid NVIDIA API
key`); P0-C compact-plan/channel persistence coverage is validated
locally/import-gated in this PR.

Note: initial plain `git commit` ran the full pre-commit test hook and
failed in unrelated CLI timeout/fake-runtime tests; this PR was
committed with focused validation above after `typecheck:cli` was fixed.

## Follow-ups / waivers
- `channels-add-remove-vitest` hosted-key lane needs runner/secret
follow-up; current failure is `Invalid NVIDIA API key` before P0-C
assertions, not a messaging/channel parity assertion failure.


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

* **Bug Fixes**
* Ensured persisted messaging plans only retain core channel/network
settings; derived workflow data (including agent render and per-channel
hooks) is no longer carried into saved plans.

* **Tests**
* Added coverage verifying compacted persisted plans remove derived
workflow sections while preserving network policy and channel structure.
* Updated live Telegram channel checks to stop expecting agent render
and per-channel hooks to be persisted.
* Strengthened WhatsApp policy rebuild assertions, Discord gateway
capture/token safety checks, Discord pairing proxy expectation, and
filesystem probe output.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
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 chore Build, CI, dependency, or tooling maintenance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants