Skip to content

feat(policy): expose active presets, allowed hosts, and approval paths in agent context#4915

Open
laitingsheng wants to merge 13 commits into
mainfrom
feat/4629-policy-agent-context
Open

feat(policy): expose active presets, allowed hosts, and approval paths in agent context#4915
laitingsheng wants to merge 13 commits into
mainfrom
feat/4629-policy-agent-context

Conversation

@laitingsheng
Copy link
Copy Markdown
Contributor

@laitingsheng laitingsheng commented Jun 7, 2026

Summary

Add nemoclaw <sandbox> policy-explain, a redacted summary of the active policy presets, allowed host categories, approval paths, and support boundaries that an in-sandbox agent can read to reason about what is allowed, why something is blocked, and how to request a change.

Related Issue

Resolves #4629

Changes

  • New nemoclaw <sandbox> policy-explain [--json] [--write] command and matching sandbox policy explain oclif topic route.
  • New src/lib/policy/context.ts: buildPolicyContext, renderPolicyContextMarkdown, and classifyAccessFailure (blocked-by-policy / missing-approval / unsupported / unknown).
  • Seed /sandbox/.openclaw/workspace/POLICY.md after the onboard policy step and refresh on every policy-add / policy-remove. --write triggers the seed on demand. Output omits raw policy YAML, binary allowlists, and credential metadata.
  • Docs: new section in docs/network-policy/customize-network-policy.mdx and a command entry in docs/reference/commands.mdx.
  • Tests: unit coverage for the summariser, markdown renderer, classifier branches, action driver, and sandbox write helper; CLI-level E2E that spawns bin/nemoclaw.js against a temp HOME and asserts the markdown / JSON output and routing.

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
  • `npm run 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: Tinson Lai tinsonl@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added a CLI command that emits a redacted, agent/operator-friendly sandbox policy context (human or --json) plus a --write option to refresh the in-sandbox POLICY.md; context auto-refreshes during onboarding and after preset/channel changes. Includes preset verification states, redacted host stems with counts, and access-failure classifications with next-step guidance.
  • Documentation

    • New "Agent Policy Context" and updated command docs covering outputs, flags, redaction rules, classifications, and remediation guidance.
  • Tests

    • Expanded unit and E2E coverage for rendering, JSON/write behavior, refresh outcomes, host redaction, failure classification, CLI integration, and seeding.

…s in agent context

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 7, 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: dcb99500-25f5-4904-ac32-8c852000f118

📥 Commits

Reviewing files that changed from the base of the PR and between 2122861 and d899b42.

📒 Files selected for processing (6)
  • docs/network-policy/customize-network-policy.mdx
  • src/lib/actions/sandbox/policy-explain.ts
  • src/lib/onboard/policy-context-seed.ts
  • src/lib/policy/context.test.ts
  • src/lib/policy/failure-classifier.test.ts
  • src/lib/policy/failure-classifier.ts
💤 Files with no reviewable changes (1)
  • src/lib/policy/context.test.ts
✅ Files skipped from review due to trivial changes (1)
  • docs/network-policy/customize-network-policy.mdx
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/lib/onboard/policy-context-seed.ts
  • src/lib/policy/failure-classifier.ts
  • src/lib/actions/sandbox/policy-explain.ts

📝 Walkthrough

Walkthrough

Adds an agent-facing PolicyContext: build/render and failure classification, a new sandbox:policy:explain CLI (Markdown/JSON and --write), sandbox seeding/refresh after preset mutations and onboarding, host-redaction utilities, tests, and documentation.

Changes

Policy Context Explanation

Layer / File(s) Summary
Policy Context: Data Model & Core Logic
src/lib/policy/host-redaction.ts, src/lib/policy/context.ts, src/lib/policy/context.test.ts, src/lib/policy/host-redaction.test.ts
Defines PolicyContext types and preset verification, canonicalises and redacts host stems (producing redactedHostCount), builds/sorts PolicyContext, and renders deterministic Markdown for agent consumption.
Failure classifier
src/lib/policy/failure-classifier.ts, src/lib/policy/failure-classifier.test.ts
Implements classifyAccessFailure to map gateway/registry/network errors into blocked-by-policy, missing-approval, unsupported, or unknown outcomes with confidence and remediation guidance, plus tests covering matching and error-code matrices.
Policy Explain Action: Execution & Sandbox Writing
src/lib/actions/sandbox/policy-explain.ts, src/lib/actions/sandbox/policy-explain.test.ts, src/commands/sandbox/policy/explain.ts
Implements explainSandboxPolicy and writePolicyContextToSandbox with lazy executor loading, base64-encoded sandbox-write command, --json/--write support, dependency injection, and tests validating logging, unreachable/failed execs, atomic staging, and command-injection protections.
Refresh Helper & Channel Hooks
src/lib/actions/sandbox/policy-context-refresh.ts, src/lib/actions/sandbox/policy-context-refresh.test.ts, src/lib/actions/sandbox/policy-channel.ts, src/lib/actions/sandbox/policy-channel-refresh.test.ts
Adds refreshSandboxPolicyContextFile (outcomes: `ok
CLI Command, Routing, Display & Onboard Seeding
src/commands/sandbox/policy/explain.ts, src/lib/cli/public-route-metadata.ts, src/lib/cli/public-display-defaults.ts, src/lib/cli/command-registry.test.ts, src/lib/cli/public-argv-translation.test.ts, src/lib/onboard/policy-context-seed.ts, src/lib/onboard/policy-context-seed.test.ts, src/lib/onboard/policy-selection.ts, src/lib/onboard.ts
Adds sandbox:policy:explain oclif command (flags --json, --write), publishes route/display metadata and tokens, updates CLI tests to include the new token, introduces seedInitialPolicyContext that shields process.exit, and seeds POLICY.md at the end of onboarding policy selection.
Documentation & End-to-End Tests
docs/network-policy/customize-network-policy.mdx, docs/reference/commands.mdx, docs/reference/commands-nemohermes.mdx, test/policy-explain-cli.test.ts
Documents Agent Policy Context content, redaction boundaries, --json/--write behaviors, when POLICY.md is refreshed, and classification labels; adds E2E CLI tests covering help, redacted Markdown output, JSON output shape, and empty-policy sandbox behavior.

Sequence Diagram(s)

sequenceDiagram
  participant User as User (CLI)
  participant CLI as sandbox:policy:explain
  participant Explain as explainSandboxPolicy
  participant Builder as buildPolicyContext
  participant Registry as SandboxRegistry
  participant Exec as SandboxExec (openshell)

  User->>CLI: run sandbox:policy:explain <name> [--json] [--write]
  CLI->>Explain: explainSandboxPolicy(sandboxName, options)
  Explain->>Builder: buildPolicyContext(sandboxName)
  Builder->>Registry: read tier, applied presets, registry content
  Explain->>CLI: output Markdown or JSON
  alt writeToSandbox
    Explain->>Exec: execute base64 decode write to /sandbox/.openclaw/workspace/POLICY.md
    Exec-->>Explain: { status, stdout, stderr } or null
    Explain->>CLI: warn on failure
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#4577: Both PRs modify src/lib/actions/sandbox/policy-channel.ts around channel preset application/removal flows; this PR adds refresh calls after those operations.
  • NVIDIA/NemoClaw#4768: Both PRs touch onboarding policy selection logic; this PR seeds initial policy context during selection.
  • NVIDIA/NemoClaw#4686: Both PRs modify onboarding/preset pipeline and may intersect in preset selection/seeding behavior.

Suggested labels

area: cli

Suggested reviewers

  • cv
  • prekshivyas

"🐰 I peek into the sandbox, map the rules with cheer,
I hide the secrets, list what agents need to hear,
I seed POLICY.md so the agent knows the way,
I flag blocked hosts and the steps to fix the fray,
A hop, a nibble — policy explained today!"

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 16.07% 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 PR title clearly and concisely summarizes the main feature: exposing active presets, allowed hosts, and approval paths to agents via policy context.
Linked Issues check ✅ Passed The PR implementation fully addresses all acceptance criteria from issue #4629: provides agent-facing policy context, enables failure classification, redacts secrets, and includes comprehensive test coverage.
Out of Scope Changes check ✅ Passed All changes are directly aligned with the policy-context feature; minor supporting changes (onboard refactoring, CLI registrations) are necessary for the core implementation.

✏️ 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 feat/4629-policy-agent-context

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 7, 2026

E2E Advisor Recommendation

Required E2E: network-policy-e2e, cloud-onboard-e2e, channels-add-remove-e2e
Optional E2E: docs-validation-e2e, hermes-e2e

Dispatch hint: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e

Auto-dispatched E2E: network-policy-e2e, cloud-onboard-e2e, channels-add-remove-e2e via nightly-e2e.yaml at d899b4219a4e211e220e0f4acbc3460c471d152fnightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • network-policy-e2e (high): Primary live coverage for policy-add, custom presets, deny/allow enforcement, hot reload, and SSRF/network boundary behavior. This PR changes policy mutation hooks, policy context construction, redaction, and policy failure classification, so the network-policy sandbox flow should block merge.
  • cloud-onboard-e2e (high): Validates a real install/onboard flow with custom policy presets. The PR adds best-effort seeding of /sandbox/.openclaw/workspace/POLICY.md from the onboarding policy step, so a live onboarding E2E is required to catch regressions in the seed path and sandbox readiness interactions.
  • channels-add-remove-e2e (high): The changed policy-channel code now refreshes policy context after channel preset apply/remove. This job exercises the real channels add/remove + rebuild lifecycle and the matching network-policy preset behavior for Telegram, covering the user flow most likely to regress from these hooks.

Optional E2E

  • docs-validation-e2e (low): Useful confidence for the updated command reference and network-policy docs, including command/docs parity. Not merge-blocking for runtime behavior because unit tests cover route metadata and the required E2Es cover live policy flows.
  • hermes-e2e (high): Optional smoke for the nemohermes-facing documentation/branding and agent-agnostic onboarding seed path. The changed code is shared, but existing Hermes E2E does not appear to specifically assert policy-explain or POLICY.md contents, so this is adjacent confidence rather than required coverage.

New E2E recommendations

  • policy-explain CLI and sandbox file seeding (high): No existing E2E appears to call nemoclaw <sandbox> policy-explain, --json, or --write, nor assert that /sandbox/.openclaw/workspace/POLICY.md exists after onboarding and is refreshed after policy-add/policy-remove without following symlinks.
    • Suggested test: Add a policy-context E2E phase to test/e2e/test-network-policy.sh or a new policy-explain-e2e job that onboards a sandbox, runs policy-explain text and JSON, verifies redacted active/unapplied preset fields, verifies POLICY.md after onboard, verifies refresh after policy-add/remove, and verifies a pre-created POLICY.md symlink is replaced rather than followed.
  • agent failure-classification policy context (medium): The failure classifier and verification states (verified, registry-only, gateway-only, gateway-unavailable) are unit-tested but not validated against a live gateway drift scenario, so runtime mismatch between registry and OpenShell policy could be missed.
    • Suggested test: Extend network-policy-e2e with a live gateway drift subtest that creates registry-only and gateway-only preset states, runs policy-explain --json, and checks verification fields plus blocked-by-policy vs missing-approval classification guidance.

Dispatch hint

  • Workflow: E2E / Nightly
  • jobs input: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 7, 2026

E2E Scenario Advisor Recommendation

Required scenario E2E: ubuntu-repo-cloud-openclaw-custom-policies, ubuntu-repo-cloud-openclaw-discord
Optional scenario E2E: ubuntu-repo-cloud-hermes, ubuntu-repo-cloud-openclaw-telegram

Dispatch required scenario E2E:

  • gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-custom-policies
  • gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-discord

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: medium

Required scenario E2E

  • ubuntu-repo-cloud-openclaw-custom-policies: Primary scenario coverage for onboarding policy preset selection and registry/session policy state. This PR changes onboarding policy context seeding, policy selection, policy context rendering/redaction/classification, and the in-sandbox POLICY.md refresh path for policy mutations.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-custom-policies
  • ubuntu-repo-cloud-openclaw-discord: Exercises the channel onboarding/policy-preset path touched by policy-channel.ts, including applying a messaging policy preset during channel setup and validating provider/channel state in a real sandbox.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-discord

Optional scenario E2E

  • ubuntu-repo-cloud-hermes: Optional adjacent coverage for the Hermes onboarding/profile path and public command surface documented by the PR. The primary changed policy context code is shared, but the required OpenClaw scenarios cover the main policy/onboarding mutation surfaces.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-hermes
  • ubuntu-repo-cloud-openclaw-telegram: Optional adjacent messaging-channel coverage on a different channel suite. Useful if reviewers want another policy-preset/channel refresh path beyond Discord.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-telegram

Relevant changed files

  • src/commands/sandbox/policy/explain.ts
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/policy-context-refresh.ts
  • src/lib/actions/sandbox/policy-explain.ts
  • src/lib/cli/public-display-defaults.ts
  • src/lib/cli/public-route-metadata.ts
  • src/lib/onboard.ts
  • src/lib/onboard/policy-context-seed.ts
  • src/lib/onboard/policy-selection.ts
  • src/lib/policy/context.ts
  • src/lib/policy/failure-classifier.ts
  • src/lib/policy/host-redaction.ts

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 7, 2026

PR Review Advisor

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

Review findings

🛠️ Needs attention

  • None.

🔎 Worth checking

  • Source-of-truth review needed: src/lib/actions/sandbox/policy-explain.ts symlink-resistant POLICY.md write: 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: buildWriteCommand() constructs mkdir, umask, mktemp, base64 decode to temp, chmod 0644, and mv -fT; tests validate command shape but not actual OpenShell/SSH filesystem behavior.
  • Real sandbox POLICY.md lifecycle is still not identifiable in runtime tests (src/lib/actions/sandbox/policy-explain.ts:126): The new agent context file is written through the OpenShell/SSH sandbox boundary, but the reviewed tests assert command construction with injected exec/write functions or run the CLI against a temporary HOME registry. The code comment says network-policy and channels e2e jobs exercise the real POLICY.md lifecycle, but the repository tests inspected did not contain POLICY.md or policy-explain assertions under test/e2e. That leaves file mode, ownership, actual mktemp/mv behavior, symlink replacement, directory-target behavior, and post-mutation refresh timing unproven at the boundary where regressions matter most.
    • Recommendation: Add or identify targeted runtime/high-fidelity validation for the changed lifecycle: policy-explain --write creates /sandbox/.openclaw/workspace/POLICY.md with expected 0644 readable mode and redacted content; a pre-existing POLICY.md symlink is replaced without clobbering its target; a directory target or non-zero write reports a non-fatal warning; and policy-add/policy-remove refresh the real file only after successful mutations, not dry-run or failed mutations.
    • Evidence: writePolicyContextToSandbox() builds an in-sandbox shell command using mktemp/base64/chmod/mv, while policy-explain.test.ts injects exec, policy-context-refresh.test.ts injects write, policy-channel-refresh.test.ts mocks refreshSandboxPolicyContextFile, and test/policy-explain-cli.test.ts uses a temp HOME registry rather than a live sandbox.
  • Internal-host redaction misses alternate numeric IP encodings (src/lib/policy/host-redaction.ts:40): The policy context redacts common private, loopback, metadata, link-local, and internal-DNS hosts before exposing allowedHostCategories to the agent, but the IPv4 detector only handles dotted-decimal IPv4. Some URL stacks and resolvers treat alternate numeric forms such as 2130706433, 0x7f000001, or octal-looking loopback/private forms as internal addresses. Today those can canonicalize as hostname-like stems and be rendered as public allowed host categories.
    • Recommendation: Extend canonicaliseHost/isInternalHost to detect and redact alternate numeric IPv4 encodings that resolve to internal ranges, or intentionally reject numeric-only/hex/octal host stems. Add negative tests such as 2130706433, 0x7f000001, 0177.0.0.1, and private-range equivalents.
    • Evidence: host-redaction.ts uses IPV4_PATTERN for dotted decimal only, HOSTNAME_PATTERN allows digit-starting labels, and host-redaction.test.ts covers RFC1918/link-local/loopback dotted forms but not integer, hex, or octal variants.

🌱 Nice ideas

  • None.
Consider writing more tests for
  • **Runtime validation** — policy-explain --write creates /sandbox/.openclaw/workspace/POLICY.md in a real sandbox with 0644 mode and redacted content. The PR has broad unit and temp-HOME CLI coverage, but the most security-sensitive behavior writes and refreshes /sandbox/.openclaw/workspace/POLICY.md through the real OpenShell/SSH sandbox boundary. That boundary remains mocked or unexercised in the reviewed tests.
  • **Runtime validation** — policy-explain --write replaces a pre-existing /sandbox/.openclaw/workspace/POLICY.md symlink without modifying the symlink target. The PR has broad unit and temp-HOME CLI coverage, but the most security-sensitive behavior writes and refreshes /sandbox/.openclaw/workspace/POLICY.md through the real OpenShell/SSH sandbox boundary. That boundary remains mocked or unexercised in the reviewed tests.
  • **Runtime validation** — policy-explain --write reports a non-fatal warning when /sandbox/.openclaw/workspace/POLICY.md is a directory or the sandbox write exits non-zero. The PR has broad unit and temp-HOME CLI coverage, but the most security-sensitive behavior writes and refreshes /sandbox/.openclaw/workspace/POLICY.md through the real OpenShell/SSH sandbox boundary. That boundary remains mocked or unexercised in the reviewed tests.
  • **Runtime validation** — policy-add <preset> refreshes the real in-sandbox POLICY.md only after applyPreset succeeds, not on --dry-run or failed apply. The PR has broad unit and temp-HOME CLI coverage, but the most security-sensitive behavior writes and refreshes /sandbox/.openclaw/workspace/POLICY.md through the real OpenShell/SSH sandbox boundary. That boundary remains mocked or unexercised in the reviewed tests.
  • **Runtime validation** — policy-remove <preset> refreshes the real in-sandbox POLICY.md only after removePreset succeeds, not on --dry-run or failed remove. The PR has broad unit and temp-HOME CLI coverage, but the most security-sensitive behavior writes and refreshes /sandbox/.openclaw/workspace/POLICY.md through the real OpenShell/SSH sandbox boundary. That boundary remains mocked or unexercised in the reviewed tests.
  • **Real sandbox POLICY.md lifecycle is still not identifiable in runtime tests** — Add or identify targeted runtime/high-fidelity validation for the changed lifecycle: policy-explain --write creates /sandbox/.openclaw/workspace/POLICY.md with expected 0644 readable mode and redacted content; a pre-existing POLICY.md symlink is replaced without clobbering its target; a directory target or non-zero write reports a non-fatal warning; and policy-add/policy-remove refresh the real file only after successful mutations, not dry-run or failed mutations.
  • **Acceptance clause:** The policy context does not expose secrets, raw tokens, or sensitive internal policy implementation details. — add test evidence or identify existing coverage. Renderer tests assert raw policy YAML, binaries, and websocket credential rewrite details are omitted, and host-redaction.ts strips URL userinfo and common internal ranges. However, alternate numeric IP encodings for internal addresses are not currently redacted, so sensitive internal host stems could still be exposed in allowedHostCategories.
  • **Acceptance clause:** The behavior is covered by at least one test or scripted validation path. — add test evidence or identify existing coverage. The behavior has unit and temp-HOME CLI coverage for context building, rendering, classifier branches, routing, refresh outcomes, and shell command construction. The real sandbox POLICY.md write lifecycle is still not identifiable in runtime tests, despite the security-sensitive OpenShell/SSH boundary.
Since last review details

Current findings:

  • Source-of-truth review needed: src/lib/actions/sandbox/policy-explain.ts symlink-resistant POLICY.md write: 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: buildWriteCommand() constructs mkdir, umask, mktemp, base64 decode to temp, chmod 0644, and mv -fT; tests validate command shape but not actual OpenShell/SSH filesystem behavior.
  • Real sandbox POLICY.md lifecycle is still not identifiable in runtime tests (src/lib/actions/sandbox/policy-explain.ts:126): The new agent context file is written through the OpenShell/SSH sandbox boundary, but the reviewed tests assert command construction with injected exec/write functions or run the CLI against a temporary HOME registry. The code comment says network-policy and channels e2e jobs exercise the real POLICY.md lifecycle, but the repository tests inspected did not contain POLICY.md or policy-explain assertions under test/e2e. That leaves file mode, ownership, actual mktemp/mv behavior, symlink replacement, directory-target behavior, and post-mutation refresh timing unproven at the boundary where regressions matter most.
    • Recommendation: Add or identify targeted runtime/high-fidelity validation for the changed lifecycle: policy-explain --write creates /sandbox/.openclaw/workspace/POLICY.md with expected 0644 readable mode and redacted content; a pre-existing POLICY.md symlink is replaced without clobbering its target; a directory target or non-zero write reports a non-fatal warning; and policy-add/policy-remove refresh the real file only after successful mutations, not dry-run or failed mutations.
    • Evidence: writePolicyContextToSandbox() builds an in-sandbox shell command using mktemp/base64/chmod/mv, while policy-explain.test.ts injects exec, policy-context-refresh.test.ts injects write, policy-channel-refresh.test.ts mocks refreshSandboxPolicyContextFile, and test/policy-explain-cli.test.ts uses a temp HOME registry rather than a live sandbox.
  • Internal-host redaction misses alternate numeric IP encodings (src/lib/policy/host-redaction.ts:40): The policy context redacts common private, loopback, metadata, link-local, and internal-DNS hosts before exposing allowedHostCategories to the agent, but the IPv4 detector only handles dotted-decimal IPv4. Some URL stacks and resolvers treat alternate numeric forms such as 2130706433, 0x7f000001, or octal-looking loopback/private forms as internal addresses. Today those can canonicalize as hostname-like stems and be rendered as public allowed host categories.
    • Recommendation: Extend canonicaliseHost/isInternalHost to detect and redact alternate numeric IPv4 encodings that resolve to internal ranges, or intentionally reject numeric-only/hex/octal host stems. Add negative tests such as 2130706433, 0x7f000001, 0177.0.0.1, and private-range equivalents.
    • Evidence: host-redaction.ts uses IPV4_PATTERN for dotted decimal only, HOSTNAME_PATTERN allows digit-starting labels, and host-redaction.test.ts covers RFC1918/link-local/loopback dotted forms but not integer, hex, or octal variants.

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.

Actionable comments posted: 6

Caution

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

⚠️ Outside diff range comments (2)
src/lib/actions/sandbox/policy-channel.ts (1)

1210-1232: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Missing policy context refresh in channel preset operations.

The documentation states that POLICY.md is refreshed whenever a preset is added or removed. However, applyChannelPresetIfAvailable applies a policy preset (Line 1212) but does not call refreshSandboxPolicyContextFile. Similarly, removeChannelPresetIfPresent (Line 1352) removes presets without refreshing the context file.

When a user adds or removes a messaging channel, the corresponding policy preset is applied or removed, but the in-sandbox policy context at /sandbox/.openclaw/workspace/POLICY.md remains stale until the next explicit policy operation. Agents reading this file will not see the channel-related policy changes.

🔍 Verify preset application paths
#!/bin/bash
# Description: Verify all preset modification call sites in policy-channel.ts

rg -n 'policies\.(applyPreset|removePreset|applyPresetContent)' src/lib/actions/sandbox/policy-channel.ts -A 2 -B 2
🛠️ Proposed fix

Add refresh calls after successful preset operations in both functions:

In applyChannelPresetIfAvailable (after Line 1222):

     }
     syncSessionPolicyPresetsWithRegistry(sandboxName, channelName, "add");
+    refreshSandboxPolicyContextFile(sandboxName);
     return true;

In removeChannelPresetIfPresent (after Line 1361):

     } else {
       syncSessionPolicyPresetsWithRegistry(sandboxName, channelName, "remove");
+      refreshSandboxPolicyContextFile(sandboxName);
     }

Also add a refresh after the error path in removeChannelPresetIfPresent (after Line 1356, inside the !removed block) if you want to attempt a refresh even when removal fails, though this is optional since the preset wasn't actually removed.

🤖 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/actions/sandbox/policy-channel.ts` around lines 1210 - 1232,
applyChannelPresetIfAvailable applies a policy preset via policies.applyPreset
but never refreshes the in-sandbox policy context; update
applyChannelPresetIfAvailable to call
refreshSandboxPolicyContextFile(sandboxName) after a successful apply (i.e.,
after syncSessionPolicyPresetsWithRegistry) so POLICY.md is updated for agents.
Likewise, update removeChannelPresetIfPresent to call
refreshSandboxPolicyContextFile(sandboxName) after a successful
policies.removePreset and after syncSessionPolicyPresetsWithRegistry("remove");
optionally also call refreshSandboxPolicyContextFile(sandboxName) inside the
!removed/error branch if you want to attempt a refresh when removal fails.
docs/reference/commands.mdx (1)

897-900: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

The flag table under policy-explain documents the wrong command.

Line 897–Line 900 list policy-remove flags (--yes/--force, --dry-run) under the policy-explain section. Replace this table with --json/--write (or move this table back under policy-remove) to avoid incorrect operator guidance.

🤖 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 `@docs/reference/commands.mdx` around lines 897 - 900, The table of flags under
the policy-explain section is incorrect — it currently lists policy-remove flags
(`--yes`, `--force`, `--dry-run`); update the documentation by either moving
that table back to the policy-remove section or replacing it with the correct
policy-explain flags (`--json`, `--write`) so the policy-explain entry reflects
the actual flags; search for the policy-explain heading and the table containing
`--yes`/`--force`/`--dry-run` and change it to reference `--json` and `--write`
(or relocate the existing table under the policy-remove heading).
🧹 Nitpick comments (2)
docs/reference/commands.mdx (1)

895-895: 💤 Low value

Reduce em-dash overload in the classification sentence.

Line 895 uses two em dashes in one sentence. Split this into separate sentences or use commas for one boundary.
As per coding guidelines, "Excessive em dashes. One per paragraph is fine; multiple per paragraph or em dashes used instead of commas/periods should be flagged."

🤖 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 `@docs/reference/commands.mdx` at line 895, The sentence containing "The
context also documents how a failed host or integration attempt should be
classified — `blocked-by-policy`, `missing-approval`, `unsupported`, or
`unknown` — so the agent can pick a remediation step instead of surfacing a
lower-level network error." has two em dashes; replace them by splitting into
two sentences or using commas: e.g., end the first sentence after "classified."
then start a new sentence listing the classifications (`blocked-by-policy`,
`missing-approval`, `unsupported`, `unknown`) and finish with "so the agent can
pick a remediation step instead of surfacing a lower-level network error."
Ensure only one em dash (if any) remains in the paragraph.

Source: Coding guidelines

test/policy-explain-cli.test.ts (1)

19-22: ⚡ Quick win

Make spawned CLI env hermetic to prevent flaky E2E behavior.

Line 21 inherits the full parent process.env, which can leak CI/local channel or agent variables into this test. Prefer a minimal allowlist (HOME, PATH, plus explicit test overrides) and explicitly clear unrelated messaging/provider env keys.
Based on learnings, "for hermetic messaging-channel tests ... ensure the spawned helper script does not inherit CI/local messaging credentials/config ... delete/remove unrelated messaging env vars such as DISCORD_* and TELEGRAM_*."

🤖 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/policy-explain-cli.test.ts` around lines 19 - 22, The test currently
passes the full parent environment to the spawned CLI (env: { ...process.env,
...env }) which can leak CI/local messaging credentials; change the spawnSync
call in test/policy-explain-cli.test.ts to construct a hermetic env object
instead: start from a minimal allowlist (at least HOME and PATH), then apply the
test-specific overrides from the existing env variable, and explicitly remove or
unset messaging/provider variables (example patterns: any DISCORD_*, TELEGRAM_*,
and other provider-related keys) before passing it to spawnSync (refer to
process.execPath, CLI and args to locate the call).

Source: Learnings

🤖 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 `@docs/network-policy/customize-network-policy.mdx`:
- Around line 350-355: The table maps HTTP 403 to both `blocked-by-policy` and
`missing-approval`; remove the duplicate by keeping HTTP 403 in only one
classification and update the corresponding row text so each status code maps
unambiguously—specifically edit the `blocked-by-policy` and `missing-approval`
rows to ensure 403 appears in only one of them (choose which behavior you want
to preserve), adjust the error-code list (EHOSTUNREACH, ENETUNREACH, ENOTFOUND,
ECONNREFUSED, ETIMEDOUT, EAI_AGAIN) accordingly, and update any adjacent
examples or explanations to reflect the single authoritative classification for
403.

In `@docs/reference/commands.mdx`:
- Line 872: The docs heading "### `$$nemoclaw <name> policy-explain`" does not
match the command listed by the CLI help, causing the parity job to fail; update
this heading to the exact help-surfaced command name (as shown by `$$nemoclaw
--help`) or add the `policy-explain` alias to the CLI help metadata so they
match. Locate the heading in docs/reference/commands.mdx and change the
backticked command token to the CLI's canonical form (or update the CLI's help
registration code to emit the alias) ensuring the token exactly matches the
output of `$$nemoclaw --help` (reference the `$$nemoclaw <name> policy-explain`
token and the help metadata registration).

In `@src/commands/sandbox/policy/explain.ts`:
- Around line 16-20: Update the command's user-facing help by adding the --write
flag to the static usage and examples in the Explain command (look for the
static usage and static examples in src/commands/sandbox/policy/explain.ts);
include --write in the usage string (e.g., "<name> [--json] [--write]" or
similar) and add at least one example showing the flag in static examples
alongside the existing examples (e.g., a "--write" invocation and one combining
"--json --write") so the help output reflects the actual supported flags.

In `@src/lib/actions/sandbox/policy-explain.ts`:
- Around line 91-95: The current branch in the writeToSandbox block suppresses
the "sandbox unreachable" failure; update the logic around
writePolicyContextToSandbox(sandboxName, { ...deps, build, render }) so that any
failed write (writeResult.written === false) always surfaces (e.g., call warn or
throw) instead of ignoring when writeResult.reason === "sandbox unreachable";
reference writeToSandbox, writePolicyContextToSandbox, writeResult,
POLICY_CONTEXT_SANDBOX_PATH and the existing warn call to ensure the same
message path is used for all failure reasons.

In `@src/lib/cli/public-route-metadata.ts`:
- Line 29: The test assertion in public-argv-translation.test.ts that checks
Object.keys(SANDBOX_ROUTE_OVERRIDES).sort() uses a hard-coded expected list and
needs to be updated to include the new "sandbox:policy:explain" override; open
the test around the "keeps explicit compatibility route overrides..." case and
add "sandbox:policy:explain" to the expected array (or replace the hard-coded
array with a derivation from SANDBOX_ROUTE_OVERRIDES to avoid future desyncs),
referencing SANDBOX_ROUTE_OVERRIDES and the new entry added in
public-route-metadata.ts ("sandbox:policy:explain") when making the change.

In `@src/lib/onboard.ts`:
- Around line 5816-5823: Extract the inline best-effort seeding into a small
helper function (e.g., export async function seedPolicyContext(sandboxName:
string)) and move the try/require +
policyExplain.writePolicyContextToSandbox(sandboxName) logic into that helper
(including the silent catch). In the existing onboard thin call site, replace
the inline block with a single call to seedPolicyContext(sandboxName) so
onboard.ts only delegates; keep the same behavior and error swallowing in the
helper. Ensure the helper exports its function name so onboard can import and
call it.

---

Outside diff comments:
In `@docs/reference/commands.mdx`:
- Around line 897-900: The table of flags under the policy-explain section is
incorrect — it currently lists policy-remove flags (`--yes`, `--force`,
`--dry-run`); update the documentation by either moving that table back to the
policy-remove section or replacing it with the correct policy-explain flags
(`--json`, `--write`) so the policy-explain entry reflects the actual flags;
search for the policy-explain heading and the table containing
`--yes`/`--force`/`--dry-run` and change it to reference `--json` and `--write`
(or relocate the existing table under the policy-remove heading).

In `@src/lib/actions/sandbox/policy-channel.ts`:
- Around line 1210-1232: applyChannelPresetIfAvailable applies a policy preset
via policies.applyPreset but never refreshes the in-sandbox policy context;
update applyChannelPresetIfAvailable to call
refreshSandboxPolicyContextFile(sandboxName) after a successful apply (i.e.,
after syncSessionPolicyPresetsWithRegistry) so POLICY.md is updated for agents.
Likewise, update removeChannelPresetIfPresent to call
refreshSandboxPolicyContextFile(sandboxName) after a successful
policies.removePreset and after syncSessionPolicyPresetsWithRegistry("remove");
optionally also call refreshSandboxPolicyContextFile(sandboxName) inside the
!removed/error branch if you want to attempt a refresh when removal fails.

---

Nitpick comments:
In `@docs/reference/commands.mdx`:
- Line 895: The sentence containing "The context also documents how a failed
host or integration attempt should be classified — `blocked-by-policy`,
`missing-approval`, `unsupported`, or `unknown` — so the agent can pick a
remediation step instead of surfacing a lower-level network error." has two em
dashes; replace them by splitting into two sentences or using commas: e.g., end
the first sentence after "classified." then start a new sentence listing the
classifications (`blocked-by-policy`, `missing-approval`, `unsupported`,
`unknown`) and finish with "so the agent can pick a remediation step instead of
surfacing a lower-level network error." Ensure only one em dash (if any) remains
in the paragraph.

In `@test/policy-explain-cli.test.ts`:
- Around line 19-22: The test currently passes the full parent environment to
the spawned CLI (env: { ...process.env, ...env }) which can leak CI/local
messaging credentials; change the spawnSync call in
test/policy-explain-cli.test.ts to construct a hermetic env object instead:
start from a minimal allowlist (at least HOME and PATH), then apply the
test-specific overrides from the existing env variable, and explicitly remove or
unset messaging/provider variables (example patterns: any DISCORD_*, TELEGRAM_*,
and other provider-related keys) before passing it to spawnSync (refer to
process.execPath, CLI and args to locate the call).
🪄 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: 1be9a847-0cb9-47da-ad98-2bb09fe9e798

📥 Commits

Reviewing files that changed from the base of the PR and between e2edaad and 8303efb.

📒 Files selected for processing (11)
  • docs/network-policy/customize-network-policy.mdx
  • docs/reference/commands.mdx
  • src/commands/sandbox/policy/explain.ts
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/policy-explain.test.ts
  • src/lib/actions/sandbox/policy-explain.ts
  • src/lib/cli/public-route-metadata.ts
  • src/lib/onboard.ts
  • src/lib/policy/context.test.ts
  • src/lib/policy/context.ts
  • test/policy-explain-cli.test.ts

Comment thread docs/network-policy/customize-network-policy.mdx Outdated
Comment thread docs/reference/commands.mdx
Comment thread src/commands/sandbox/policy/explain.ts Outdated
Comment thread src/lib/actions/sandbox/policy-explain.ts
Comment thread src/lib/cli/public-route-metadata.ts
Comment thread src/lib/onboard.ts Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 7, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27097815833
Target ref: 8303efbf5b3e5657ff03789f2293fe0c0c45e6c8
Workflow ref: main
Requested jobs: network-policy-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
network-policy-e2e ✅ success

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@laitingsheng laitingsheng added area: policy Network policy, egress rules, presets, or sandbox policy feature PR adds or expands user-visible functionality labels Jun 7, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 7, 2026

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)
docs/reference/commands-nemohermes.mdx (1)

724-724: ⚡ Quick win

Reduce em-dash usage in this sentence (LLM pattern detected).

This line uses multiple em dashes in one sentence; please rewrite with commas/periods (or keep a single em dash max).

As per coding guidelines: "Excessive em dashes. One per paragraph is fine; multiple per paragraph or em dashes used instead of commas/periods should be flagged."

🤖 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 `@docs/reference/commands-nemohermes.mdx` at line 724, The sentence containing
the phrase "blocked-by-policy, `missing-approval`, `unsupported`, or `unknown`"
uses multiple em dashes; rewrite it to avoid excessive em-dash usage by
replacing the em dashes with commas or a period (or keep a single em dash at
most), e.g., split into two sentences or use commas to list the classifications
so the agent can still pick a remediation step instead of surfacing a
lower-level network error.

Source: Coding guidelines

🤖 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 `@docs/reference/commands-nemohermes.mdx`:
- Line 724: The sentence containing the phrase "blocked-by-policy,
`missing-approval`, `unsupported`, or `unknown`" uses multiple em dashes;
rewrite it to avoid excessive em-dash usage by replacing the em dashes with
commas or a period (or keep a single em dash at most), e.g., split into two
sentences or use commas to list the classifications so the agent can still pick
a remediation step instead of surfacing a lower-level network error.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 9e12faad-695d-4c5d-877d-35544774a1b2

📥 Commits

Reviewing files that changed from the base of the PR and between 60fe251 and f65c805.

📒 Files selected for processing (3)
  • docs/reference/commands-nemohermes.mdx
  • src/lib/cli/command-registry.test.ts
  • src/lib/cli/public-argv-translation.test.ts

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 7, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27101010496
Target ref: f65c805c9b2c6f0ece88c0011fb24227fb97fd27
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e
Summary: 3 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
cloud-onboard-e2e ✅ success
network-policy-e2e ✅ success

…nnel removes

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27112501540
Target ref: 8d30f57fad963689e94c72c3f0971cbd2dd70e89
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e
Summary: 3 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
cloud-onboard-e2e ✅ success
network-policy-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27113087954
Target ref: 9f732af759b2e9f179c55b1b7934f10db7360032
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e
Summary: 3 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
cloud-onboard-e2e ✅ success
network-policy-e2e ✅ success

Comment thread src/lib/policy/context.ts Fixed
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 `@src/lib/policy/context.ts`:
- Around line 546-579: The code calls buildPolicyContext(..., {
skipGatewayProbe: true }) and then treats findMatchingPreset(...) results as
authoritative; change the logic in the branch that uses matched (and references
ctx.activePresets, ctx.approvalPath.inspect) to first verify the preset's
verification state (e.g., matched.verification === "verified" ||
matched.verification === "gateway-only") or perform an actual gateway probe via
buildPolicyContext without skipGatewayProbe before returning high-confidence
"missing-approval"/"unknown" responses; if the preset is
unverified/gateway-unavailable, downgrade confidence or return a
policy-blocked/indeterminate result and advise running the gateway
probe/inspection instead.
🪄 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: 72f8af3e-3535-46fd-adae-ca2f62b77999

📥 Commits

Reviewing files that changed from the base of the PR and between 9f732af and b631ea8.

📒 Files selected for processing (11)
  • docs/network-policy/customize-network-policy.mdx
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/actions/sandbox/policy-context-refresh.test.ts
  • src/lib/actions/sandbox/policy-context-refresh.ts
  • src/lib/actions/sandbox/policy-explain.test.ts
  • src/lib/actions/sandbox/policy-explain.ts
  • src/lib/onboard.ts
  • src/lib/onboard/policy-selection.ts
  • src/lib/policy/context.test.ts
  • src/lib/policy/context.ts
  • test/policy-explain-cli.test.ts
✅ Files skipped from review due to trivial changes (2)
  • docs/network-policy/customize-network-policy.mdx
  • src/lib/onboard.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/lib/policy/context.test.ts
  • src/lib/actions/sandbox/policy-explain.test.ts
  • test/policy-explain-cli.test.ts

Comment thread src/lib/policy/context.ts Outdated
… failures

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…ion, extract onboard seed

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Comment thread src/lib/actions/sandbox/policy-channel-refresh.test.ts Fixed
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 27117590115
Target ref: 741d2da214f639bde08771d8fe8d23105c3bae66
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e
Summary: 2 passed, 1 failed, 0 skipped

Job Result
channels-add-remove-e2e ❌ failure
cloud-onboard-e2e ✅ success
network-policy-e2e ✅ success

Failed jobs: channels-add-remove-e2e. Check run artifacts for logs.

1 similar comment
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 27117590115
Target ref: 741d2da214f639bde08771d8fe8d23105c3bae66
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e
Summary: 2 passed, 1 failed, 0 skipped

Job Result
channels-add-remove-e2e ❌ failure
cloud-onboard-e2e ✅ success
network-policy-e2e ✅ success

Failed jobs: channels-add-remove-e2e. Check run artifacts for logs.

@cv cv added the v0.0.61 Release target label Jun 8, 2026
…inst symlink TOCTOU

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ❌ Some jobs failed

Run: 27120127651
Target ref: 2122861d6eeb26f6e2a6a82870b172e480325cd8
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e
Summary: 1 passed, 1 failed, 0 skipped

Job Result
cloud-onboard-e2e ✅ success
network-policy-e2e ❌ failure

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27120127651
Target ref: 2122861d6eeb26f6e2a6a82870b172e480325cd8
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
cloud-onboard-e2e ✅ success
network-policy-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27120658115
Target ref: feat/4629-policy-agent-context
Requested jobs: channels-add-remove-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success

…y-policy

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 27124157028
Target ref: d899b4219a4e211e220e0f4acbc3460c471d152f
Workflow ref: main
Requested jobs: network-policy-e2e,cloud-onboard-e2e,channels-add-remove-e2e
Summary: 3 passed, 0 failed, 0 skipped

Job Result
channels-add-remove-e2e ✅ success
cloud-onboard-e2e ✅ success
network-policy-e2e ✅ success

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: policy Network policy, egress rules, presets, or sandbox policy feature PR adds or expands user-visible functionality v0.0.61 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(policy): expose active presets, allowed hosts, and approval paths in agent context

3 participants