Skip to content

fix(openclaw): repair Telegram placeholders and host-gateway web_fetch#4288

Merged
cv merged 12 commits into
mainfrom
fix/4251-openclaw-telegram-webfetch-wt
May 27, 2026
Merged

fix(openclaw): repair Telegram placeholders and host-gateway web_fetch#4288
cv merged 12 commits into
mainfrom
fix/4251-openclaw-telegram-webfetch-wt

Conversation

@ericksoa
Copy link
Copy Markdown
Contributor

@ericksoa ericksoa commented May 27, 2026

Summary

Fixes #4251.

This remediates the two OpenClaw compatibility regressions reported against the current NemoClaw/OpenClaw pairing:

  • refreshes OpenClaw provider credential placeholders at startup so Telegram/Discord config uses the runtime-scoped OpenShell placeholder instead of a stale canonical placeholder
  • adds redacted Telegram startup diagnostics for invalid/unresolved Bot API credentials and config/env placeholder mismatch
  • enables trusted env-proxy mode for OpenClaw web_fetch
  • carries a fail-closed OpenClaw dist patch that allows only host.openshell.internal inside OpenShell sandbox mode, while preserving private/internal/special-use SSRF blocks
  • extends nightly E2E coverage for Telegram placeholder reconciliation and host-gateway web_fetch
  • extends network-policy-e2e with a deny-case proving an unapproved host.openshell.internal:<port> remains blocked by OpenShell policy after the OpenClaw hostname compatibility carve-out

Validation

Local post-merge validation on c4687650155f3c67ca588c3c1a58b3009bd48eb8:

  • bash -n scripts/nemoclaw-start.sh test/e2e/test-network-policy.sh test/e2e/test-messaging-providers.sh
  • node --check nemoclaw-blueprint/scripts/telegram-diagnostics.js
  • python3 -m py_compile scripts/generate-openclaw-config.py
  • git diff --check HEAD~2..HEAD
  • npx vitest run test/nemoclaw-start.test.ts test/generate-openclaw-config.test.ts test/fetch-guard-patch-regression.test.ts --testTimeout 60000 --reporter=dot — 189 passed
  • npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000 — 3 passed
  • npm run build:cli
  • npm run typecheck:cli

Additional validation for PR Review Advisor follow-up on 4c80f352e53894f35b4beb901159199654f2346a:

  • bash -n test/e2e/test-network-policy.sh
  • shellcheck test/e2e/test-network-policy.sh
  • git diff --check
  • npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000 — 3 passed

Pre-push hook checks also passed through shellcheck, hadolint, gitleaks, TypeScript CLI, env-var docs gate, and package/tag sync before the hook runner stopped returning control locally; pushes used --no-verify after those checks completed.

Nightly E2E

E2E advisor required jobs against the earlier PR head (c4687650155f3c67ca588c3c1a58b3009bd48eb8):

  • Run: https://github.com/NVIDIA/NemoClaw/actions/runs/26489097603
  • cloud-e2e: passed
  • messaging-providers-e2e: passed
  • network-policy-e2e: failed in old TC-NET-10 setup because the test allowed host.openshell.internal:<port> without the private host-gateway allowed_ips policy shape. This is fixed in 4c80f352e53894f35b4beb901159199654f2346a.

Expanded rerun against prior PR head (4c80f352e53894f35b4beb901159199654f2346a):

  • Run: https://github.com/NVIDIA/NemoClaw/actions/runs/26489579940
  • Jobs: network-policy-e2e, messaging-providers-e2e, cloud-e2e, sandbox-survival-e2e, sandbox-operations-e2e, openclaw-slack-pairing-e2e
  • Superseded by the latest 6a257839cc01fcf796a09b74bccd7089cfd88907 run after adding Telegram diagnostics E2E coverage.

Additional optional confidence:

Telegram diagnostics E2E and CodeRabbit follow-up on latest PR head (6b2dd2d808747cbe9671adf2f9cc5dc13e5448df):

  • Added hermetic sandbox-side assertions in messaging-providers-e2e for missing TELEGRAM_BOT_TOKEN, scoped-placeholder mismatch, startup probe HTTP 401, and sanitized diagnostic output.
  • Addressed CodeRabbit's redaction follow-up by removing raw telegram_diag_output excerpts from all diagnostics E2E failure messages; failure paths now report fixed messages or E2E_FAIL_* sentinels only.
  • Local validation: bash -n test/e2e/test-messaging-providers.sh, shellcheck test/e2e/test-messaging-providers.sh, git diff --check, npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000 — 3 passed.
  • Required advisor run on latest head: https://github.com/NVIDIA/NemoClaw/actions/runs/26490200510
  • Required jobs: network-policy-e2e, messaging-providers-e2e
  • Optional expanded run on latest head: https://github.com/NVIDIA/NemoClaw/actions/runs/26490184102
  • Optional jobs: cloud-e2e, sandbox-survival-e2e, sandbox-operations-e2e, openclaw-slack-pairing-e2e, brave-search-e2e, messaging-compatible-endpoint-e2e, rebuild-openclaw-e2e, openclaw-onboard-security-posture-e2e, diagnostics-e2e, telegram-injection-e2e.
  • Current observed status: both latest-head runs are in progress; brave-search-e2e has passed in the optional run.

Summary by CodeRabbit

  • New Features

    • Allow web-fetch access to the OpenShell host-gateway hostname when running in sandbox mode.
  • Improvements

    • Richer Telegram startup diagnostics with probe classification, redaction, breadcrumb logging, and credential-placeholder checks.
    • Web fetch defaults to using a trusted environment proxy.
    • Startup ordering adjusted to refresh and validate provider credential placeholders earlier.
  • Bug Fixes

    • Prevent raw provider credentials from being written into config and emit clearer warnings.
  • Tests

    • Added and extended e2e/unit tests for host-gateway fetch, hostname-policy behavior, diagnostics, and placeholder refresh.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 27, 2026

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: c1b92ba8-78c1-45ce-bbdd-0c1e28a44c13

📥 Commits

Reviewing files that changed from the base of the PR and between b279ae5 and b8a3413.

📒 Files selected for processing (3)
  • scripts/generate-openclaw-config.py
  • test/e2e/test-network-policy.sh
  • test/generate-openclaw-config.test.ts

📝 Walkthrough

Walkthrough

Adds Dockerfile Patch 2b to allow host.openshell.internal in sandboxed OpenClaw, strengthens provider placeholder refresh and credential validation, enhances Telegram startup-probe diagnostics, and expands unit and E2E tests to verify these behaviors.

Changes

OpenClaw Host-Gateway SSRF Policy & Provider Credential Safety

Layer / File(s) Summary
Dockerfile Patch 2b for host-gateway hostname policy
Dockerfile
Adds Patch 2b documentation and implementation that detects assertHostnameAllowedWithPolicy, normalizes hostnames, injects an early-return for host.openshell.internal when OPENSHELL_SANDBOX=1, verifies the injection, and fails closed if the patch target is missing but internal-hostname blocks remain.
Web fetch config with trusted-env proxy
scripts/generate-openclaw-config.py
Initialize tools.web.fetch in generated config and include useTrustedEnvProxy: True; tools.web.search is added only when NEMOCLAW_WEB_SEARCH_ENABLED=1.
Provider placeholder refresh & credential validation
scripts/nemoclaw-start.sh
refresh_openclaw_provider_placeholders() now builds a structured _placeholder_report, collects warnings, applies scoped placeholder replacements only when runtime placeholders differ, validates messaging-channel credential placeholders against runtime env values, refuses to persist raw credentials into openclaw.json, and adjusts startup ordering for baseline/hash and channel configuration.
Telegram diagnostics startup probe logging
nemoclaw-blueprint/scripts/telegram-diagnostics.js
Adds startup-probe diagnostics: new internal flags, probe-classification helpers, sanitized readiness/failure logging on response/error, reads bot token from openclaw.json, compares it to TELEGRAM_BOT_TOKEN placeholder, and schedules placeholder diagnostics on process.nextTick.
Fetch-guard patch regression tests for Patch 2b
test/fetch-guard-patch-regression.test.ts
Extends fixtures to record hostnameChecks and expose assertHostnameAllowedWithPolicy; verifies sandbox allows host.openshell.internal while blocking foo.internal and 169.254.169.254; adds a fail-closed test for missing validator target with residual blocks.
Unit tests: provider refresh & Telegram diagnostics
test/nemoclaw-start.test.ts, test/generate-openclaw-config.test.ts
Adds provider placeholder refresh vitest suite asserting placeholder rewriting, redaction, and warnings; updates config tests to assert tools.web.fetch includes enabled: true and useTrustedEnvProxy: true; extends Telegram diagnostics tests with startup-probe classification and redaction checks.
E2E network policy test for host-gateway web_fetch
test/e2e/test-network-policy.sh
Adds TC-NET-10 to validate OpenClaw web_fetch host-gateway compatibility: runs allowed/denied servers, applies sandbox policy permitting host.openshell.internal:<port>, verifies Node fetch and sandboxed web_fetch approved/denied cases, and cleans up processes.
E2E Telegram messaging provider placeholder verification
test/e2e/test-messaging-providers.sh
Adds M7b verification to ensure Telegram botToken in openclaw.json is the runtime-scoped placeholder and not the canonical unresolved form; extends diagnostics probe harness (M7c–M7f) to mock Bot API scenarios and assert sanitized diagnostics output.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#3869: Also modifies the Dockerfile fetch-guard patch/classifier logic and fetch-guard regression tests; code-level related to Patch 2b changes.
  • NVIDIA/NemoClaw#4260: Overlaps in fetch-guard regression test and Dockerfile patch verification around Patch 2b and OpenClaw version/integrity inputs.

Suggested labels

fix, Sandbox, E2E, enhancement: testing, v0.0.52

"🐰 I hopped through Dockerfile lines with care,
I nudged host.openshell to pass the snare,
I checked placeholders, kept tokens obscure,
Diagnostics logged, no secrets to ensure,
A little rabbit celebrates with flair!"

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: fixing Telegram placeholder handling and enabling host-gateway web_fetch, directly addressing the core objectives.
Linked Issues check ✅ Passed The PR addresses all coding requirements from #4251: restores Telegram functionality via placeholder refresh and diagnostics [4251], enables trusted proxy for web_fetch [4251], applies OpenClaw SSRF hostname patch for host.openshell.internal [4251], and adds comprehensive E2E validation [4251].
Out of Scope Changes check ✅ Passed All changes directly support the linked issue objectives: Dockerfile patches, Telegram diagnostics, OpenClaw config, startup placeholder refresh, E2E tests for messaging/network-policy, and fetch-guard regression tests are all within scope.

✏️ 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 fix/4251-openclaw-telegram-webfetch-wt

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 27, 2026

E2E Advisor Recommendation

Required E2E: network-policy-e2e, messaging-providers-e2e
Optional E2E: brave-search-e2e, token-rotation-e2e, rebuild-openclaw-e2e

Dispatch hint: network-policy-e2e,messaging-providers-e2e

Auto-dispatched E2E: network-policy-e2e, messaging-providers-e2e via nightly-e2e.yaml at 4c97cd3b04cf3cfcee52370ec2a9be1eb804d81cnightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • network-policy-e2e (high): Required because the PR changes OpenClaw web_fetch proxy configuration and the Dockerfile SSRF/fetch-guard patch that controls whether approved host.openshell.internal traffic reaches the OpenShell L7 proxy while unapproved ports remain denied. The touched E2E script now contains the direct host-gateway/web_fetch coverage for this behavior.
  • messaging-providers-e2e (high): Required because the PR changes Telegram diagnostics and provider placeholder refresh/order in nemoclaw-start, which affects credential scoping, L7 credential rewriting, token secrecy, and real messaging-provider startup paths. The touched E2E script validates Telegram diagnostics, placeholder matching, credential isolation, and messaging API reachability.

Optional E2E

  • brave-search-e2e (medium-high): Useful adjacent confidence because generate-openclaw-config changes the tools.web shape while preserving Brave web search configuration. This verifies real web-search credentials, policy, and OpenClaw tool behavior with BRAVE_API_KEY.
  • token-rotation-e2e (high): Useful adjacent confidence for provider placeholder refresh behavior across re-onboard/token rotation, especially because nemoclaw-start now warns on placeholder mismatch and refreshes scoped OpenShell placeholders differently.
  • rebuild-openclaw-e2e (high): Useful adjacent confidence for Dockerfile/OpenClaw patch compatibility in an upgrade/rebuild path. Not strictly required because the required network and messaging E2Es already exercise current image build/startup paths.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: nightly-e2e.yaml
  • jobs input: network-policy-e2e,messaging-providers-e2e

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 27, 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

Selective E2E Results — ✅ All requested jobs passed

Run: 26489068238
Target ref: c4687650155f3c67ca588c3c1a58b3009bd48eb8
Workflow ref: main
Requested jobs: messaging-providers-e2e,network-policy-e2e,brave-search-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
brave-search-e2e ✅ success
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled

@ericksoa ericksoa added v0.0.53 Release target bug Something isn't working Integration: OpenClaw Support for OpenClaw priority: high Important issue that should be resolved in the next release labels May 27, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 27, 2026

PR Review Advisor

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

Review findings

🛠️ Needs attention

  • None.

🔎 Worth checking

  • Source-of-truth review needed: Dockerfile Patch 2b host-gateway SSRF carve-out: 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 source-of-truth rationale and removal condition are now present, but the injected code still does not enforce or prove the trusted-env-proxy/web_fetch call path for the generic helper early return.
  • Patch 2b still allows host.openshell.internal from a generic SSRF hostname helper (Dockerfile:290): The new tests and comments strengthen the intended web_fetch path, but the injected early return is still inside the generic assertHostnameAllowedWithPolicy(hostname, policy) function and is gated only by OPENSHELL_SANDBOX plus the exact normalized hostname. If OpenClaw calls the same helper from a strict/direct or non-web_fetch sandbox path, that path would skip OpenClaw's internal-hostname block for host.openshell.internal and rely on downstream proxy/policy behavior instead of enforcing the stated trusted-env-proxy boundary at the source.
    • Recommendation: Constrain the carve-out to the trusted-env-proxy/web_fetch path if the compiled OpenClaw shape exposes that context, or add a fail-closed classifier/regression test proving assertHostnameAllowedWithPolicy can only allow host.openshell.internal from the reviewed trusted-proxy web_fetch call path and that strict/direct fetch paths still reject it.
    • Evidence: Dockerfile injects `const normalizedHost = normalizeHostname(hostname); if (process.env.OPENSHELL_SANDBOX === "1" && normalizedHost === "host.openshell.internal") return normalizedHost;` into `assertHostnameAllowedWithPolicy`. TC-NET-10 proves approved web_fetch works and an unapproved port is denied, but it does not prove call-path confinement for this shared helper.
  • web_fetch is now enabled by default through the trusted env proxy (scripts/generate-openclaw-config.py:817): The generated OpenClaw config now enables keyless web_fetch with useTrustedEnvProxy for all default configs, not only when web search is enabled. This appears intentional for the linked host-gateway regression, and OpenShell policy remains the main egress control, but it expands the default network-capable tool surface and should be confirmed as the intended least-privilege posture.
    • Recommendation: Confirm that default web_fetch availability is intended for all sandboxes and that OpenShell L7 policy denies unapproved egress for this tool in the default/restricted tiers. If not intended globally, gate this setting to the scenarios that require host-gateway web_fetch.
    • Evidence: `tools_web = config.setdefault("tools", {}).setdefault("web", {})` followed by `tools_web["fetch"] = {"enabled": True, "useTrustedEnvProxy": True}` runs unconditionally; tests update the default expectation accordingly.

🌱 Nice ideas

  • None.
Since last review details

Current findings:

  • Source-of-truth review needed: Dockerfile Patch 2b host-gateway SSRF carve-out: 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 source-of-truth rationale and removal condition are now present, but the injected code still does not enforce or prove the trusted-env-proxy/web_fetch call path for the generic helper early return.
  • Patch 2b still allows host.openshell.internal from a generic SSRF hostname helper (Dockerfile:290): The new tests and comments strengthen the intended web_fetch path, but the injected early return is still inside the generic assertHostnameAllowedWithPolicy(hostname, policy) function and is gated only by OPENSHELL_SANDBOX plus the exact normalized hostname. If OpenClaw calls the same helper from a strict/direct or non-web_fetch sandbox path, that path would skip OpenClaw's internal-hostname block for host.openshell.internal and rely on downstream proxy/policy behavior instead of enforcing the stated trusted-env-proxy boundary at the source.
    • Recommendation: Constrain the carve-out to the trusted-env-proxy/web_fetch path if the compiled OpenClaw shape exposes that context, or add a fail-closed classifier/regression test proving assertHostnameAllowedWithPolicy can only allow host.openshell.internal from the reviewed trusted-proxy web_fetch call path and that strict/direct fetch paths still reject it.
    • Evidence: Dockerfile injects `const normalizedHost = normalizeHostname(hostname); if (process.env.OPENSHELL_SANDBOX === "1" && normalizedHost === "host.openshell.internal") return normalizedHost;` into `assertHostnameAllowedWithPolicy`. TC-NET-10 proves approved web_fetch works and an unapproved port is denied, but it does not prove call-path confinement for this shared helper.
  • web_fetch is now enabled by default through the trusted env proxy (scripts/generate-openclaw-config.py:817): The generated OpenClaw config now enables keyless web_fetch with useTrustedEnvProxy for all default configs, not only when web search is enabled. This appears intentional for the linked host-gateway regression, and OpenShell policy remains the main egress control, but it expands the default network-capable tool surface and should be confirmed as the intended least-privilege posture.
    • Recommendation: Confirm that default web_fetch availability is intended for all sandboxes and that OpenShell L7 policy denies unapproved egress for this tool in the default/restricted tiers. If not intended globally, gate this setting to the scenarios that require host-gateway web_fetch.
    • Evidence: `tools_web = config.setdefault("tools", {}).setdefault("web", {})` followed by `tools_web["fetch"] = {"enabled": True, "useTrustedEnvProxy": True}` runs unconditionally; tests update the default expectation accordingly.

Workflow run details

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

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.

🧹 Nitpick comments (1)
scripts/nemoclaw-start.sh (1)

2510-2527: Run the entrypoint E2E matrix for this startup-order change.

Please run sandbox-survival-e2e, sandbox-operations-e2e, cloud-e2e, and openclaw-slack-pairing-e2e on this branch before merge.

As per coding guidelines scripts/nemoclaw-start.sh: "Changes affect every sandbox boot and are invisible to unit tests... E2E test recommendation: sandbox-survival-e2e, sandbox-operations-e2e, cloud-e2e, openclaw-slack-pairing-e2e."

🤖 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 `@scripts/nemoclaw-start.sh` around lines 2510 - 2527, This change to
scripts/nemoclaw-start.sh alters sandbox boot order around symbols like
configure_messaging_channels, refresh_openclaw_provider_placeholders,
write_openclaw_config_baseline and related startup steps; before merging, run
the full entrypoint E2E matrix on this branch: execute sandbox-survival-e2e,
sandbox-operations-e2e, cloud-e2e, and openclaw-slack-pairing-e2e against the
branch to validate startup ordering and sandbox boot behavior and report any
failures for fixes.
🤖 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.

Nitpick comments:
In `@scripts/nemoclaw-start.sh`:
- Around line 2510-2527: This change to scripts/nemoclaw-start.sh alters sandbox
boot order around symbols like configure_messaging_channels,
refresh_openclaw_provider_placeholders, write_openclaw_config_baseline and
related startup steps; before merging, run the full entrypoint E2E matrix on
this branch: execute sandbox-survival-e2e, sandbox-operations-e2e, cloud-e2e,
and openclaw-slack-pairing-e2e against the branch to validate startup ordering
and sandbox boot behavior and report any failures for fixes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 3c1a92f9-edca-424b-bfb3-2edb2dec831e

📥 Commits

Reviewing files that changed from the base of the PR and between a784f47 and c468765.

📒 Files selected for processing (9)
  • Dockerfile
  • nemoclaw-blueprint/scripts/telegram-diagnostics.js
  • scripts/generate-openclaw-config.py
  • scripts/nemoclaw-start.sh
  • test/e2e/test-messaging-providers.sh
  • test/e2e/test-network-policy.sh
  • test/fetch-guard-patch-regression.test.ts
  • test/generate-openclaw-config.test.ts
  • test/nemoclaw-start.test.ts

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26489097603
Target ref: c4687650155f3c67ca588c3c1a58b3009bd48eb8
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e,cloud-e2e
Summary: 2 passed, 1 failed, 0 skipped

Job Result
cloud-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ❌ failure

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa
Copy link
Copy Markdown
Contributor Author

PR Review Advisor follow-up:

Addressed the host-gateway deny-case recommendation in 4c80f352e53894f35b4beb901159199654f2346a.

What changed:

  • Extended TC-NET-10 to start two live host-gateway HTTP servers.
  • The test now installs a custom one-port host-gateway policy for only the approved port, using the same private host-gateway allowed_ips shape as the existing local-inference/Nous presets.
  • It first proves direct sandbox Node can reach the approved port.
  • It then proves direct sandbox Node cannot reach the unapproved second port.
  • It then asks OpenClaw web_fetch to fetch the unapproved second port and fails if the marker is returned.
  • It also fails if the denied OpenClaw attempt is blocked by OpenClaw's SSRF hostname guard instead of by OpenShell policy, so the test verifies the intended trust boundary: NemoClaw's OpenClaw compatibility carve-out does not create host-service reachability unless OpenShell policy allows that exact host:port.

I also incorporated the failed network-policy-e2e result from the prior advisor run. That failure was in the old TC-NET-10 setup: the direct approved-port probe still got ERROR_fetch failed because the test used a raw endpoint update without the private host-gateway allowed_ips policy shape. The new custom policy file fixes that setup path while keeping the denied second port unapproved.

Validation before push:

  • bash -n test/e2e/test-network-policy.sh
  • shellcheck test/e2e/test-network-policy.sh
  • git diff --check
  • npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000

Expanded nightly run started against the new head 4c80f352e53894f35b4beb901159199654f2346a:

This covers the PR Review Advisor deny-case and CodeRabbit's requested entrypoint E2E matrix.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26489625892
Target ref: 4c80f352e53894f35b4beb901159199654f2346a
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 0 passed, 1 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ❌ failure

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: 26489990654
Target ref: 6a257839cc01fcf796a09b74bccd7089cfd88907
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e,cloud-e2e,sandbox-survival-e2e,sandbox-operations-e2e,openclaw-slack-pairing-e2e,brave-search-e2e,messaging-compatible-endpoint-e2e,rebuild-openclaw-e2e,openclaw-onboard-security-posture-e2e,diagnostics-e2e,telegram-injection-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
brave-search-e2e ✅ success
cloud-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ⚠️ cancelled
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ⚠️ cancelled
openclaw-slack-pairing-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
telegram-injection-e2e ⚠️ cancelled

@ericksoa
Copy link
Copy Markdown
Contributor Author

ericksoa commented May 27, 2026

Follow-up for the E2E Advisor's telegram-diagnostics recommendation:

Added sandbox-side Telegram diagnostics assertions in 6a257839cc01fcf796a09b74bccd7089cfd88907.

What the new messaging-providers-e2e coverage checks:

  • the installed /tmp/nemoclaw-telegram-diagnostics.js preload reports missing TELEGRAM_BOT_TOKEN runtime env
  • it reports scoped placeholder mismatch between openclaw.json and runtime env
  • it reports a Telegram startup probe HTTP 401 via a hermetic mocked Bot API response
  • it fails if raw invalid token material or raw OpenShell placeholder text appears in the diagnostic breadcrumbs

Local validation before push:

  • bash -n test/e2e/test-messaging-providers.sh
  • shellcheck test/e2e/test-messaging-providers.sh
  • git diff --check
  • npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000 — 3 passed

Latest nightly coverage against 6a257839cc01fcf796a09b74bccd7089cfd88907:

The first expanded run https://github.com/NVIDIA/NemoClaw/actions/runs/26489990654 was cancelled by the refreshed advisor concurrency group and is superseded by the two runs above.

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.

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/test-messaging-providers.sh`:
- Around line 1035-1037: The failure messages are printing raw diagnostic
contents from telegram_diag_output which can leak secrets; before calling fail()
replace or strip sensitive values (e.g. bot tokens, keys) from
telegram_diag_output and use that sanitized string in the fail calls that check
for 'E2E_FAIL_' and 'E2E_SKIP_NO_TELEGRAM_BOTTOKEN' (and the other similar
branches). Create or invoke a small sanitizer function (e.g.
sanitize_diag_output) that applies a conservative regex to redact token-like
strings and use sanitize_diag_output(telegram_diag_output) in the fail messages
instead of the raw variable.
🪄 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: c0f48ea3-b6a6-481f-995b-ba8a2fecf401

📥 Commits

Reviewing files that changed from the base of the PR and between 4c80f35 and 6a25783.

📒 Files selected for processing (1)
  • test/e2e/test-messaging-providers.sh

Comment thread test/e2e/test-messaging-providers.sh
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26490053852
Target ref: 6a257839cc01fcf796a09b74bccd7089cfd88907
Workflow ref: main
Requested jobs: cloud-e2e,sandbox-survival-e2e,sandbox-operations-e2e,openclaw-slack-pairing-e2e,brave-search-e2e,messaging-compatible-endpoint-e2e,rebuild-openclaw-e2e,openclaw-onboard-security-posture-e2e,diagnostics-e2e,telegram-injection-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
brave-search-e2e ✅ success
cloud-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ⚠️ cancelled
openclaw-slack-pairing-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
telegram-injection-e2e ⚠️ cancelled

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26490010031
Target ref: 6a257839cc01fcf796a09b74bccd7089cfd88907
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled

@ericksoa
Copy link
Copy Markdown
Contributor Author

CodeRabbit follow-up:

Addressed the raw diagnostic-output concern in 6b2dd2d808747cbe9671adf2f9cc5dc13e5448df.

What changed:

  • Removed raw telegram_diag_output excerpts from all Telegram diagnostics E2E failure messages.
  • The fatal probe branch now reports only sanitized E2E_FAIL_* sentinel codes.
  • Missing-breadcrumb and leak-detected branches now use fixed messages instead of echoing captured diagnostic output.

Validation before push:

  • bash -n test/e2e/test-messaging-providers.sh
  • shellcheck test/e2e/test-messaging-providers.sh
  • git diff --check
  • npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000 — 3 passed

Fresh runs on the redaction follow-up head 6b2dd2d808747cbe9671adf2f9cc5dc13e5448df:

CodeRabbit status is green after the follow-up push; PR Review Advisor is still refreshing on the latest head.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26490200510
Target ref: 6b2dd2d808747cbe9671adf2f9cc5dc13e5448df
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 0 passed, 2 failed, 0 skipped

Job Result
messaging-providers-e2e ❌ failure
network-policy-e2e ❌ failure

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

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26490184102
Target ref: 6b2dd2d808747cbe9671adf2f9cc5dc13e5448df
Workflow ref: main
Requested jobs: cloud-e2e,sandbox-survival-e2e,sandbox-operations-e2e,openclaw-slack-pairing-e2e,brave-search-e2e,messaging-compatible-endpoint-e2e,rebuild-openclaw-e2e,openclaw-onboard-security-posture-e2e,diagnostics-e2e,telegram-injection-e2e
Summary: 10 passed, 0 failed, 0 skipped

Job Result
brave-search-e2e ✅ success
cloud-e2e ✅ success
diagnostics-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
rebuild-openclaw-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
telegram-injection-e2e ✅ success

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa
Copy link
Copy Markdown
Contributor Author

Required E2E follow-up after latest advisor run:

The required run https://github.com/NVIDIA/NemoClaw/actions/runs/26490200510 failed on the test harness additions, not on the product path:

  • network-policy-e2e: TC-NET-10 wrote the generated custom policy to a temp file with no .yaml/.yml suffix, so policy-add --from-file refused it before applying the host-gateway policy.
  • messaging-providers-e2e: the hermetic Telegram startup-probe mock emitted before the diagnostics wrapper reliably observed the fake response in CI, so M7e missed the startup-probe breadcrumb.

Fixed both in 42b6448390e2708fb4e02fd68bc9842f64a05b76:

  • TC-NET-10 now creates nemoclaw-host-gateway-policy.XXXXXX.yaml.
  • The Telegram diagnostics probe now calls https.request(...).end() directly and emits the mocked 401 with setImmediate, after the diagnostics wrapper has attached.

Local validation before push:

  • bash -n test/e2e/test-network-policy.sh test/e2e/test-messaging-providers.sh
  • shellcheck test/e2e/test-network-policy.sh test/e2e/test-messaging-providers.sh
  • git diff --check
  • npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000 — 3 passed

Fresh required advisor rerun on 42b6448390e2708fb4e02fd68bc9842f64a05b76:

The optional expanded run on the prior redaction head completed successfully for all requested optional jobs: https://github.com/NVIDIA/NemoClaw/actions/runs/26490184102

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)
test/e2e/test-network-policy.sh (2)

789-792: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Require a policy-denial signal before passing the deny-case.

This currently passes on any non-zero openclaw agent exit, so timeouts, session failures, or unrelated agent crashes can make TC-NET-10 go green without proving OpenShell blocked the unapproved port.

Suggested fix
-  if [ "$denied_rc" -ne 0 ] || printf '%s\n%s' "$denied_reply" "$denied_raw" | grep -qiE "DENIED_HOST_GATEWAY_POLICY|STATUS_403|\\b403\\b|denied|policy|forbidden|not allowed|not permitted|ERROR_"; then
+  if printf '%s\n%s' "$denied_reply" "$denied_raw" | grep -qiE "DENIED_HOST_GATEWAY_POLICY|STATUS_403|\\b403\\b|denied|policy|forbidden|not allowed|not permitted|ERROR_"; then
     pass "TC-NET-10: OpenClaw web_fetch cannot reach unapproved host gateway port"
+  elif [ "$denied_rc" -ne 0 ]; then
+    rm -f "$ssh_cfg"
+    cleanup_host_server
+    fail "TC-NET-10: OpenClaw web_fetch policy" "agent exited before producing a policy denial signal (exit ${denied_rc}, raw='${denied_raw:0:300}')"
+    return
   else
🤖 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/test-network-policy.sh` around lines 789 - 792, The test currently
treats any non-zero openclaw agent exit (denied_rc) as a pass for TC-NET-10;
change the condition to require an explicit policy-denial signal in the agent
output before marking the case passed. Specifically, update the conditional that
uses denied_rc, denied_reply, denied_raw and parse_openclaw_agent_text so it
only passes when the grep against denial tokens
(DENIED_HOST_GATEWAY_POLICY|STATUS_403|\b403\b|denied|policy|forbidden|not
allowed|not permitted|ERROR_) finds a match in denied_reply or denied_raw (i.e.,
require the policy token), and do not treat a non-zero denied_rc alone as
sufficient; keep parse_openclaw_agent_text usage to normalize output and still
capture raw output for the grep.

630-660: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Avoid the reserve-then-bind port pattern here.

These ports are selected by opening a socket, closing it, and only later starting http.server. Another process can claim either port in between, so TC-NET-10 can fail intermittently for unrelated reasons. Prefer starting each server on port 0 and capturing the actual bound port from the server process or a tiny Python helper.

🤖 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/test-network-policy.sh` around lines 630 - 660, The current test
picks ports by binding/closing sockets into variables port and deny_port then
later starts python3 -m http.server on those ports, which risks races; instead,
change the startup to launch each server bound to port 0 and have the server
process print or communicate its actual assigned port back (replace the two
python3 -m http.server invocations with a small Python helper that binds
HTTPServer(("0.0.0.0", 0)), prints the server.server_port to stdout, flushes,
then serves_forever), capture that printed port into port/deny_port, and use
those captured values for the rest of the test while still recording
server_log/server_pid/deny_server_log/deny_server_pid as before so the test no
longer relies on the reserve-then-bind pattern.
🤖 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 `@test/e2e/test-network-policy.sh`:
- Around line 789-792: The test currently treats any non-zero openclaw agent
exit (denied_rc) as a pass for TC-NET-10; change the condition to require an
explicit policy-denial signal in the agent output before marking the case
passed. Specifically, update the conditional that uses denied_rc, denied_reply,
denied_raw and parse_openclaw_agent_text so it only passes when the grep against
denial tokens
(DENIED_HOST_GATEWAY_POLICY|STATUS_403|\b403\b|denied|policy|forbidden|not
allowed|not permitted|ERROR_) finds a match in denied_reply or denied_raw (i.e.,
require the policy token), and do not treat a non-zero denied_rc alone as
sufficient; keep parse_openclaw_agent_text usage to normalize output and still
capture raw output for the grep.
- Around line 630-660: The current test picks ports by binding/closing sockets
into variables port and deny_port then later starts python3 -m http.server on
those ports, which risks races; instead, change the startup to launch each
server bound to port 0 and have the server process print or communicate its
actual assigned port back (replace the two python3 -m http.server invocations
with a small Python helper that binds HTTPServer(("0.0.0.0", 0)), prints the
server.server_port to stdout, flushes, then serves_forever), capture that
printed port into port/deny_port, and use those captured values for the rest of
the test while still recording
server_log/server_pid/deny_server_log/deny_server_pid as before so the test no
longer relies on the reserve-then-bind pattern.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d28fa435-98b7-409e-ace6-2af644935318

📥 Commits

Reviewing files that changed from the base of the PR and between 6b2dd2d and 42b6448.

📒 Files selected for processing (2)
  • test/e2e/test-messaging-providers.sh
  • test/e2e/test-network-policy.sh
🚧 Files skipped from review as they are similar to previous changes (1)
  • test/e2e/test-messaging-providers.sh

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26490756666
Target ref: 42b6448390e2708fb4e02fd68bc9842f64a05b76
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 0 passed, 2 failed, 0 skipped

Job Result
messaging-providers-e2e ❌ failure
network-policy-e2e ❌ failure

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

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26508114096
Target ref: b279ae554f8504b4fbf6289383dcf5fd6c5d1a7b
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 1 passed, 1 failed, 0 skipped

Job Result
messaging-providers-e2e ✅ success
network-policy-e2e ❌ failure

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

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26509275956
Target ref: e30263655159d8f3261e4866d08e4d48dc9a3f0b
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 1 passed, 1 failed, 0 skipped

Job Result
messaging-providers-e2e ✅ success
network-policy-e2e ❌ failure

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

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26510614192
Target ref: 1a96631f4645f4c3d0c80b09fc819d5d62d81129
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 1 passed, 1 failed, 0 skipped

Job Result
messaging-providers-e2e ✅ success
network-policy-e2e ❌ failure

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

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26511971904
Target ref: b8a3413c6d22b315d5c8292ff8566eb64c681f46
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 0 passed, 1 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ❌ failure

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: 26512270428
Target ref: b8a3413c6d22b315d5c8292ff8566eb64c681f46
Workflow ref: main
Requested jobs: network-policy-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
network-policy-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26513113696
Target ref: b8a3413c6d22b315d5c8292ff8566eb64c681f46
Workflow ref: main
Requested jobs: messaging-providers-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ✅ success

@ericksoa ericksoa requested a review from cv May 27, 2026 14:16
@ericksoa ericksoa self-assigned this May 27, 2026
@ericksoa ericksoa added Integration: Telegram Use this label to identify Telegram bot integration issues with NemoClaw. Integration: Discord Use this label to identify Discord bot integration issues with NemoClaw. labels May 27, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26516866067
Target ref: b8a3413c6d22b315d5c8292ff8566eb64c681f46
Workflow ref: main
Requested jobs: all (no filter)
Summary: 51 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-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 ✅ 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 ❌ failure
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: tunnel-lifecycle-e2e. Check run artifacts for logs.

@ericksoa ericksoa closed this May 27, 2026
@ericksoa ericksoa reopened this May 27, 2026
@cv cv enabled auto-merge (squash) May 27, 2026 15:04
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26519574212
Target ref: b8a3413c6d22b315d5c8292ff8566eb64c681f46
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e,token-rotation-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
token-rotation-e2e ⚠️ cancelled

@cv cv merged commit fcb7097 into main May 27, 2026
25 checks passed
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26519742627
Target ref: 4c97cd3b04cf3cfcee52370ec2a9be1eb804d81c
Workflow ref: main
Requested jobs: network-policy-e2e,messaging-providers-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success

cv pushed a commit that referenced this pull request May 27, 2026
## Summary
- confines the OpenClaw Patch 2b host-gateway allowance to the web_fetch
trusted-env-proxy path
- leaves the generic SSRF hostname helper and strict/direct paths
blocking host.openshell.internal
- documents the default keyless web_fetch trusted-proxy posture and
removal condition
- adds focused regression coverage for trusted-proxy allow and
strict/direct deny cases

## Validation
- npm test -- --run test/fetch-guard-patch-regression.test.ts
test/generate-openclaw-config.test.ts
- python3 -m py_compile scripts/generate-openclaw-config.py
- git diff --check

Follow-up to #4288 PR review advisor feedback.

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

* **Documentation**
  * Clarified configuration notes for web fetch proxy behavior.

* **Tests**
* Expanded regression and sandbox networking tests covering web-fetch
guard scenarios and expected allow/deny outcomes.

* **Chores**
* Updated fetch-guard patching logic to align sandbox networking
behavior with the trusted-proxy path.

<!-- 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/4325?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: Aaron Erickson <aerickson@nvidia.com>
cv pushed a commit that referenced this pull request May 27, 2026
## Summary
- Add the v0.0.53 release notes with the user-facing onboarding,
inference, policy, runtime, Hermes, and maintainer-tooling changes from
the release range.
- Refresh generated `nemoclaw-user-*` skills from the current Fern docs,
including already-merged policy, inference, troubleshooting, and
command-reference updates.
- Remove skipped experimental shield wording from generated-doc source
so the release-prep skip-term gate stays clean.

## Source summary
- #4197 -> `docs/about/release-notes.mdx`,
`docs/reference/commands.mdx`: Document pre-recreate workspace backup,
abort-on-partial-backup behavior, and
`NEMOCLAW_RECREATE_WITHOUT_BACKUP`.
- #4273 -> `docs/about/release-notes.mdx`,
`docs/reference/troubleshooting.mdx`: Document the under-provisioned
runtime prompt defaulting to abort in interactive onboarding.
- #4220 -> `docs/about/release-notes.mdx`,
`docs/network-policy/customize-network-policy.mdx`,
`docs/network-policy/integration-policy-examples.mdx`: Include the
`openclaw-pricing` preset and generated skill refresh.
- #4253 -> `docs/about/release-notes.mdx`,
`docs/inference/use-local-inference.mdx`,
`docs/inference/switch-inference-providers.mdx`: Carry the Ollama
runtime context-window docs into generated skills.
- #4298 -> `docs/about/release-notes.mdx`,
`docs/reference/troubleshooting.mdx`: Carry WSL Docker Desktop GPU
guidance into generated skills and release notes.
- #4297, #4210, #4221, #4225, #4288, #4306, #4311, #4319, #4342, #4284,
#3327 -> `docs/about/release-notes.mdx`: Summarize release-range fixes
and maintainer tooling changes that did not need new standalone docs
pages.

## Verification
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx`
- `rg "permissive mode|shields down|shields up|shields status|config
rotate-token|rotate-token" docs .agents/skills` returned no matches
outside `docs/.docs-skip`.
- `npm run docs` passes with full network access. Fern reports 0 errors
and one existing light-mode accent contrast warning.
- `FERN_VERSION=$(node -p "require('./fern/fern.config.json').version")
&& (cd fern && npx --yes "fern-api@${FERN_VERSION}" check --warnings)`
reports 0 errors and the same contrast warning.

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

## Summary by CodeRabbit

* **Documentation**
* Added v0.0.53 release notes with updates to onboarding, sandbox
recreation, and gateway handling
* Introduced `openclaw-pricing` preset for model pricing endpoint
management
* Clarified Ollama context window configuration and local model
validation behavior
* Updated sandbox recreation workflow documentation with backup/restore
details
* Enhanced interactive onboarding defaults for under-provisioned runtime
warnings
* Revised security guidance for configuration directory permissions and
immutability verification

<!-- 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/4360?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 -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working Integration: Discord Use this label to identify Discord bot integration issues with NemoClaw. Integration: OpenClaw Support for OpenClaw Integration: Telegram Use this label to identify Telegram bot integration issues with NemoClaw. priority: high Important issue that should be resolved in the next release v0.0.53 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenClaw 2026.5.18 bundled in NemoClaw v0.0.50 has critical regressions: Telegram silent failure + web_fetch SSRF blocks host.openshell.internal

3 participants