Skip to content

fix(sandbox): enforce connect shell rlimits - #5682

Merged
cv merged 16 commits into
mainfrom
fix/2173-sandbox-rlimits
Jun 25, 2026
Merged

fix(sandbox): enforce connect shell rlimits#5682
cv merged 16 commits into
mainfrom
fix/2173-sandbox-rlimits

Conversation

@ericksoa

@ericksoa ericksoa commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • move sandbox nproc/nofile limits into a shared rlimit helper
  • install system-wide shell hooks so openshell sandbox connect bash sessions lower nproc to 512 and nofile to 65536
  • replay the hook setup in the thin image so rebuilt sandboxes are fixed before the base image catches up

Fixes #2173

Test plan

  • ./node_modules/.bin/vitest run test/sandbox-init.test.ts test/sandbox-provisioning.test.ts test/sandbox-build-context.test.ts
  • npm run build:cli
  • npm run typecheck:cli
  • shellcheck scripts/lib/sandbox-rlimits.sh
  • git diff --check

Local note: the broad test-cli hook was skipped for commit/push after producing unrelated timeout fallout in the full local coverage sweep; remote CI/advisors are the gate.

Summary by CodeRabbit

  • New Features
    • Added shared runtime library for sandbox RLIMIT hardening and verification (covers nproc/nofile), applied at startup.
    • Installed system-wide shell hooks to enforce limits for login and interactive Bash sessions.
    • Set new hook/library and shell startup configuration to read-only for safer persistence.
  • Bug Fixes
    • Improved stale base image repair to correctly inject and order the proxy and resource-limit snippets.
  • Tests
    • Expanded staging/provisioning and container integration coverage, including fork denial enforcement and quiet/verification failure behavior.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

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

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR adds a shared RLIMIT helper script, moves sandbox startup hardening to the shared script, installs rlimit hooks in Docker images, stages the script in the optimized sandbox build context, and expands tests for provisioning, startup hooks, and runtime enforcement.

Changes

Sandbox rlimits hardening

Layer / File(s) Summary
Shared rlimits library and init source
scripts/lib/sandbox-rlimits.sh, scripts/lib/sandbox-init.sh
Adds shared RLIMIT defaults and helpers, and changes sandbox-init.sh to source the shared script instead of defining hardening inline.
Docker runtime hooks and startup scripts
Dockerfile, Dockerfile.base, agents/hermes/Dockerfile
Copies sandbox-rlimits.sh into runtime images, marks it read-only, installs /etc/profile.d/nemoclaw-rlimits.sh, and rewrites /etc/bash.bashrc to include the proxy and rlimit startup snippets.
Build context staging
src/lib/sandbox/build-context.ts, test/sandbox-build-context.test.ts
Stages sandbox-rlimits.sh in the optimized sandbox build context and updates the staging fixture test.
Provisioning and hook enforcement tests
test/sandbox-provisioning.test.ts, test/sandbox-init.test.ts, test/sandbox-rlimit-hooks.test.ts
Updates provisioning assertions, adds the stale-base regression, covers copied-helper permissions, and validates rlimit hardening and Docker hook behavior.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested reviewers

  • prekshivyas
  • cv

Poem

🐇 I hopped through shells with tidy care,
New rlimits stitched into the air.
The bash hooks hum, the limits stay tight,
And sandbox moons are bounded just right.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 5.88% 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 is concise and accurately highlights the main change: enforcing shell rlimits for sandbox connections.
Linked Issues check ✅ Passed The changes implement shared nproc/nofile hardening, system-wide hooks, and tests that match issue #2173's expected behavior.
Out of Scope Changes check ✅ Passed The modified files stay focused on sandbox rlimit enforcement, hook wiring, and validation, with no unrelated scope visible.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/2173-sandbox-rlimits

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

@github-code-quality

github-code-quality Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the fix/2173-sandbox-rli... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/2173-sandbox-rli... 139580b +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the fix/2173-sandbox-rli... branch is 47%. Coverage data for the main branch is not yet available.

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

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

@ericksoa ericksoa changed the title Enforce sandbox rlimits for connect shells fix(sandbox): enforce connect shell rlimits Jun 23, 2026
@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: No advisor follow-up required beyond maintainer review.
Open items: 0 required · 0 warnings · 0 suggestions · 0 test follow-ups
Since last review: 0 prior items resolved · 0 still apply · 0 new items found

Workflow run details

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

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: cloud-onboard-e2e, sandbox-operations-e2e, openclaw-onboard-security-posture-e2e, hermes-onboard-security-posture-e2e, hermes-root-entrypoint-smoke-e2e, rebuild-openclaw-e2e, rebuild-hermes-e2e
Optional E2E: hermes-secret-boundary-e2e, cloud-e2e

Dispatch hint: cloud-onboard-e2e,sandbox-operations-e2e,openclaw-onboard-security-posture-e2e,hermes-onboard-security-posture-e2e,hermes-root-entrypoint-smoke-e2e,rebuild-openclaw-e2e,rebuild-hermes-e2e

Auto-dispatched E2E: hermes-root-entrypoint-smoke-e2e via nightly-e2e.yaml at 139580b2cbf4e8d5dda19e0e4f53e1781b942fa4nightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • cloud-onboard-e2e (medium): Validates the full OpenClaw hosted onboarding/build path after Dockerfile, Dockerfile.base, and optimized build-context changes, including that the new shared sandbox-rlimits helper is available in the image.
  • sandbox-operations-e2e (high): Exercises real sandbox lifecycle and connect/SSH behavior. This is the closest existing E2E for changes that affect connect shells, process limits, gateway recovery, logs, status, destroy, and multi-sandbox behavior.
  • openclaw-onboard-security-posture-e2e (medium): Validates OpenClaw full onboard on a non-root host with trusted rc-file/runtime-guard assertions, directly relevant to root-owned profile/bash hooks and sandbox startup hardening.
  • hermes-onboard-security-posture-e2e (medium): Validates Hermes full onboard with the same security-posture assertions after Hermes Dockerfile/start.sh changes and rlimit hook replay.
  • hermes-root-entrypoint-smoke-e2e (medium): Builds the real Hermes image and verifies root entrypoint startup and gateway-user execution, which are directly affected by agents/hermes/Dockerfile and agents/hermes/start.sh changes.
  • rebuild-openclaw-e2e (medium): The optimized sandbox build context now stages scripts/lib/sandbox-rlimits.sh; OpenClaw rebuild E2E should verify rebuild/deployment still succeeds with the new copied helper and Dockerfile hooks.
  • rebuild-hermes-e2e (medium): Hermes Dockerfile startup-hook replay and copied helper changes can affect rebuild/upgrade behavior for Hermes sandboxes; run the Hermes rebuild E2E to cover deployment compatibility.

Optional E2E

  • hermes-secret-boundary-e2e (medium): Useful adjacent confidence because Hermes image/startup changed around trusted helper sourcing and security boundaries, though the PR does not primarily change secret placeholder handling.
  • cloud-e2e (medium): Broader OpenClaw install/onboard/inference smoke after Dockerfile and sandbox init changes; optional if cloud-onboard-e2e and sandbox-operations-e2e pass.

New E2E recommendations

  • connect-shell RLIMIT enforcement (high): The PR adds test/e2e-scenario/live/sandbox-rlimits-connect.test.ts, but it appears opt-in via NEMOCLAW_E2E_CONNECT_RLIMITS=1 and not wired to an existing workflow-dispatched job. Existing sandbox-operations-e2e exercises connect but does not prove login and interactive shells receive the new RLIMIT hooks.
    • Suggested test: Add a workflow-dispatchable live Vitest job, for example sandbox-rlimits-connect-e2e, that runs test/e2e-scenario/live/sandbox-rlimits-connect.test.ts with NEMOCLAW_RUN_E2E_SCENARIOS=1 and NEMOCLAW_E2E_CONNECT_RLIMITS=1.
  • Hermes connect-shell RLIMIT enforcement (medium): The new live rlimit acceptance test targets rebuilt OpenClaw runtime. Hermes copies and installs the same hooks, but there is no equivalent live Hermes connect-shell proof in the changed coverage.
    • Suggested test: Add a Hermes-specific live rlimit scenario or extend the proposed sandbox-rlimits-connect-e2e to run against NEMOCLAW_AGENT=hermes where Hermes connect-shell support is available.

Dispatch hint

  • Workflow: nightly-e2e.yaml
  • jobs input: cloud-onboard-e2e,sandbox-operations-e2e,openclaw-onboard-security-posture-e2e,hermes-onboard-security-posture-e2e,hermes-root-entrypoint-smoke-e2e,rebuild-openclaw-e2e,rebuild-hermes-e2e

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: None
Optional Vitest E2E scenarios: None

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required Vitest E2E scenarios

  • None. New free-standing live Vitest test test/e2e-scenario/live/sandbox-rlimits-connect.test.ts is not wired into .github/workflows/e2e-vitest-scenarios.yaml, so the Vitest scenario workflow cannot dispatch it yet. Add a discrete job or register it as a typed live scenario before treating the PR as E2E-runnable.

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • Dockerfile
  • Dockerfile.base
  • agents/hermes/Dockerfile
  • agents/hermes/start.sh
  • scripts/lib/sandbox-init.sh
  • scripts/lib/sandbox-rlimits.sh
  • src/lib/sandbox/build-context.ts
  • test/e2e-scenario/live/sandbox-rlimits-connect.test.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
Dockerfile.base (1)

135-180: 🩺 Stability & Availability | 🔵 Trivial

Run the recommended image-level E2E suite before merge.

These hook and permission changes are only fully verifiable in a real container/runtime path.

As per path instructions, Dockerfile.base changes are only testable with a real container build and should be validated with the listed nightly E2E jobs.

🤖 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 `@Dockerfile.base` around lines 135 - 180, The changes to Dockerfile.base
involving shell init files (/sandbox/.bashrc, /sandbox/.profile), system-wide
proxy hooks (/etc/profile.d/nemoclaw-proxy.sh,
/etc/profile.d/nemoclaw-rlimits.sh), and their permission settings can only be
fully validated in a real container runtime environment. Before merging this PR,
run the recommended image-level E2E suite or nightly E2E jobs to ensure these
hook and permission changes work correctly in an actual container build and
runtime context.

Source: Path instructions

agents/hermes/Dockerfile (1)

96-100: 🩺 Stability & Availability | 🔵 Trivial

Run Hermes-targeted E2E coverage for this image-layer change.

These entrypoint/library wiring changes affect onboarding, probes, and live routing behavior.

As per path instructions, changes under agents/hermes/** should be validated with the recommended Hermes E2E job set.

🤖 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 `@agents/hermes/Dockerfile` around lines 96 - 100, The Dockerfile changes in
the COPY and RUN chmod commands that set up the Hermes entrypoint script
(nemoclaw-start), validation script (validate-hermes-env-secret-boundary.py),
and sandbox resource limit configuration (sandbox-rlimits.sh) require validation
through the Hermes-targeted E2E test suite. Run the recommended Hermes E2E job
set to ensure these entrypoint and library wiring changes do not break
onboarding, probes, or live routing behavior before this pull request can be
merged.

Source: Path instructions

Dockerfile (1)

940-975: 🩺 Stability & Availability | 🔵 Trivial

Please run the Dockerfile-focused E2E jobs for runtime verification.

This block repairs runtime shell wiring and should be validated on a real built image.

As per path instructions, Dockerfile changes are only testable with a real container build and should be exercised with the recommended nightly E2E job set.

🤖 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 `@Dockerfile` around lines 940 - 975, The Dockerfile changes to the shell hooks
configuration (in the RUN command block affecting /etc/bash.bashrc,
/etc/profile.d/nemoclaw-rlimits.sh, and /etc/profile.d/nemoclaw-proxy.sh)
require runtime verification with actual container builds. Trigger the
Dockerfile-focused E2E test jobs from the recommended nightly E2E job set to
validate that the shell wiring and resource limits configuration work correctly
in a real built image, ensuring the conditional hooks are properly applied and
do not cause failures during container execution.

Source: Path instructions

🤖 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 `@agents/hermes/Dockerfile`:
- Around line 96-100: The Dockerfile changes in the COPY and RUN chmod commands
that set up the Hermes entrypoint script (nemoclaw-start), validation script
(validate-hermes-env-secret-boundary.py), and sandbox resource limit
configuration (sandbox-rlimits.sh) require validation through the
Hermes-targeted E2E test suite. Run the recommended Hermes E2E job set to ensure
these entrypoint and library wiring changes do not break onboarding, probes, or
live routing behavior before this pull request can be merged.

In `@Dockerfile`:
- Around line 940-975: The Dockerfile changes to the shell hooks configuration
(in the RUN command block affecting /etc/bash.bashrc,
/etc/profile.d/nemoclaw-rlimits.sh, and /etc/profile.d/nemoclaw-proxy.sh)
require runtime verification with actual container builds. Trigger the
Dockerfile-focused E2E test jobs from the recommended nightly E2E job set to
validate that the shell wiring and resource limits configuration work correctly
in a real built image, ensuring the conditional hooks are properly applied and
do not cause failures during container execution.

In `@Dockerfile.base`:
- Around line 135-180: The changes to Dockerfile.base involving shell init files
(/sandbox/.bashrc, /sandbox/.profile), system-wide proxy hooks
(/etc/profile.d/nemoclaw-proxy.sh, /etc/profile.d/nemoclaw-rlimits.sh), and
their permission settings can only be fully validated in a real container
runtime environment. Before merging this PR, run the recommended image-level E2E
suite or nightly E2E jobs to ensure these hook and permission changes work
correctly in an actual container build and runtime context.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: ff18a2d9-5cfc-418e-b1f7-9720de98cf1a

📥 Commits

Reviewing files that changed from the base of the PR and between 6571684 and 1c94c8c.

📒 Files selected for processing (8)
  • Dockerfile
  • Dockerfile.base
  • agents/hermes/Dockerfile
  • scripts/lib/sandbox-init.sh
  • scripts/lib/sandbox-rlimits.sh
  • src/lib/sandbox/build-context.ts
  • test/sandbox-build-context.test.ts
  • test/sandbox-provisioning.test.ts

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28047572386
Target ref: 1c94c8cace44d1ddb9008d184cab0c7c732fff61
Workflow ref: main
Requested jobs: hermes-root-entrypoint-smoke-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-root-entrypoint-smoke-e2e ✅ success

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

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28048212302
Target ref: 2d0f944e17d3a3b15322e1dd970c086186a83523
Workflow ref: main
Requested jobs: hermes-root-entrypoint-smoke-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-root-entrypoint-smoke-e2e ✅ success

@wscurran wscurran added area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening bug-fix PR fixes a bug or regression labels Jun 23, 2026
@wscurran

Copy link
Copy Markdown
Contributor

@jyaunches jyaunches added v0.0.68 and removed v0.0.67 labels Jun 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28100335158
Target ref: 0ad89a8d4a352f6ee8a4a5863756f50d2d7246ab
Workflow ref: main
Requested jobs: hermes-root-entrypoint-smoke-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-root-entrypoint-smoke-e2e ✅ success

@cjagwani cjagwani self-assigned this Jun 24, 2026
@ericksoa ericksoa added v0.0.69 and removed v0.0.68 labels Jun 25, 2026
ericksoa added 2 commits June 24, 2026 18:29
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 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 `@agents/hermes/Dockerfile`:
- Around line 102-108: The profile hook update in the Dockerfile is too
permissive because the grep guard only checks for the sandbox-rlimits.sh marker,
allowing stale or partial content to skip the current hardening block. Update
the logic around the /etc/profile.d/nemoclaw-rlimits.sh write in the Dockerfile
so it either writes the known-good hook unconditionally or compares against the
full expected hook line that includes harden_resource_limits --quiet &&
verify_resource_limits. Keep the fix tied to the existing sandbox-rlimits.sh
install block so stale-base repair always refreshes the exact contract.
- Around line 114-116: The bashrc filtering step can fail when /etc/bash.bashrc
contains only the lines being removed, because grep -Ev exits nonzero on an
empty result and breaks the chained Dockerfile command before mv runs. Update
the filtering logic in the Dockerfile block that edits /etc/bash.bashrc so it
tolerates fully filtered files, for example by handling the grep exit status or
restructuring the command sequence around the bashrc rewrite and mv step.

In `@scripts/lib/sandbox-rlimits.sh`:
- Around line 46-49: Update verify_resource_limits in
scripts/lib/sandbox-rlimits.sh to check both soft and hard resource limits
instead of only the ulimit -S path. Use the existing
_nemoclaw_limit_flag/_nemoclaw_limit_value flow to read and compare the hard cap
as well, and make the function fail unless both limits are at or below the
expected value. Apply the same fix to the later duplicated check referenced by
the review so the sandbox cannot be bypassed by restoring the soft limit while
the hard limit remains unchanged.
🪄 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: 25d611f2-b70e-4088-8835-fff50327a900

📥 Commits

Reviewing files that changed from the base of the PR and between 2d0f944 and 2c14b1e.

📒 Files selected for processing (7)
  • Dockerfile
  • Dockerfile.base
  • agents/hermes/Dockerfile
  • scripts/lib/sandbox-rlimits.sh
  • test/sandbox-init.test.ts
  • test/sandbox-provisioning.test.ts
  • test/sandbox-rlimit-hooks.test.ts
💤 Files with no reviewable changes (3)
  • test/sandbox-init.test.ts
  • test/sandbox-rlimit-hooks.test.ts
  • test/sandbox-provisioning.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • Dockerfile.base
  • Dockerfile

Comment thread agents/hermes/Dockerfile Outdated
Comment thread agents/hermes/Dockerfile
Comment thread scripts/lib/sandbox-rlimits.sh Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28140869678
Target ref: 2c14b1eeb618555a17fc74af214482f00cba6a09
Workflow ref: main
Requested jobs: hermes-root-entrypoint-smoke-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-root-entrypoint-smoke-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28141865261
Target ref: cefd894d02cbea02969d7e9cf365b44be7bf539b
Workflow ref: main
Requested jobs: hermes-root-entrypoint-smoke-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-root-entrypoint-smoke-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28144156211
Target ref: 065bb7f719bb3b80a7b4eb1e275578dd7561ced6
Workflow ref: main
Requested jobs: hermes-root-entrypoint-smoke-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-root-entrypoint-smoke-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ❌ Some jobs failed

Run: 28179278067
Workflow ref: fix/2173-sandbox-rlimits
Requested scenarios: (default — all supported)
Requested jobs: cloud-onboard-vitest,sandbox-rebuild-vitest,runtime-overrides-vitest,hermes-root-entrypoint-smoke-vitest,hermes-sandbox-secret-boundary-vitest,rebuild-hermes-vitest
Summary: 5 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
cloud-onboard-vitest ✅ success
hermes-root-entrypoint-smoke-vitest ✅ success
hermes-sandbox-secret-boundary-vitest ✅ success
rebuild-hermes-vitest ✅ success
runtime-overrides-vitest ✅ success
sandbox-rebuild-vitest ❌ failure

Failed jobs: sandbox-rebuild-vitest. Check run artifacts for logs.

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ❌ Some jobs failed

Run: 28190034111
Workflow ref: fix/2173-sandbox-rlimits
Requested scenarios: (default — all supported)
Requested jobs: cloud-onboard-vitest,sandbox-rebuild-vitest
Summary: 1 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
cloud-onboard-vitest ✅ success
sandbox-rebuild-vitest ❌ failure

Failed jobs: sandbox-rebuild-vitest. Check run artifacts for logs.

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28191467535
Target ref: 139580b2cbf4e8d5dda19e0e4f53e1781b942fa4
Workflow ref: main
Requested jobs: hermes-root-entrypoint-smoke-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-root-entrypoint-smoke-e2e ✅ success

@cv
cv merged commit 12ee22e into main Jun 25, 2026
41 checks passed
@cv
cv deleted the fix/2173-sandbox-rlimits branch June 25, 2026 18:44
@wscurran wscurran added NV QA Bugs found by the NVIDIA QA Team VDR Linked to VDR finding labels Jun 26, 2026
cv pushed a commit that referenced this pull request Jun 26, 2026
## Summary
Restore issue #5849 Package F parity for the migrated
`rebuild-openclaw-vitest` fixture.

The legacy bash test builds `Dockerfile.base` with the full repository
as Docker context after temporarily lowering
`nemoclaw-blueprint/blueprint.yaml`. The migrated Vitest kept the
checkout read-only by staging a minimal context, but after #5682
`Dockerfile.base` also copies `scripts/lib/sandbox-rlimits.sh`, so the
Vitest old-base build failed before reaching the rebuild assertions.

## Related Issues
Refs #5849
Refs #5800
Refs #5682

## Scope gate
- Package: `Package F — OpenClaw rebuild fixture parity`
- Included input: #5682 is the explicit Vitest-fixture exception
documented in #5849; it did not touch legacy bash, but exposed migrated
Vitest setup drift against the bash reference.
- Bash reference: `test/e2e/test-rebuild-openclaw.sh`
- Out of scope: shell lane retirement / PR #5756 cleanup; OpenClaw
version bump PR #5595; Hermes rebuild fixes.

## Parity map
| ID | Source / evidence | Contract | Vitest assertion / fix | Status |
| --- | --- | --- | --- | --- |
| F1 | #5682, run 28214953054 | Migrated OpenClaw rebuild Vitest must
build the old base with every direct `Dockerfile.base` context
dependency needed by the bash full-repo build. |
`createOldBaseBuildContext()` now stages
`nemoclaw-blueprint/blueprint.yaml` and `scripts/lib/sandbox-rlimits.sh`
before building `Dockerfile.base`. | covered |
| F2 | Future `Dockerfile.base` COPY drift | If `Dockerfile.base` gains
another direct `COPY`, the Package F fixture must fail fast before live
E2E runtime. | New support test
`test/e2e-scenario/support-tests/rebuild-openclaw-old-base-context.test.ts`
checks direct `Dockerfile.base` COPY sources are represented in the
old-base context list. | covered |

## Inference mode support
- Default mode for touched live target: existing `public-nvidia` /
hosted path for `rebuild-openclaw-vitest`; no inference mode behavior
changed.
- Real inference support preserved: yes; this PR only fixes pre-rebuild
Docker build fixture setup.
- Modes validated in this PR: local support/unit/build/typecheck. Live
Docker validation requires GitHub runner because local Docker daemon is
unavailable.

## Validation
- [x] `npx vitest run --project e2e-vitest-support
test/e2e-scenario/support-tests/rebuild-openclaw-old-base-context.test.ts`
- [x] `npm run build:cli`
- [x] `npm run typecheck:cli`
- [x] `git diff --check`
- [ ] Selective `rebuild-openclaw-vitest` workflow on PR branch

## Follow-ups / waivers
- Local live run not attempted because Docker daemon is unavailable on
this machine (`Cannot connect to the Docker daemon at
unix:///Users/jyaunches/.docker/run/docker.sock`).

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>


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

* **New Features**
* Added end-to-end helper utilities to generate a temporary legacy
Docker build context, stage required direct `COPY` sources, and rewrite
the blueprint’s minimum OpenClaw version.
* **Bug Fixes**
* Strengthened Dockerfile parsing to include only supported direct
`COPY` sources while excluding non-matching variants and secret-related
inputs.
* **Tests**
* Added e2e test coverage for legacy context creation, correct `COPY`
source selection, error handling for unsupported paths, and automatic
cleanup of temp directories.
* **Refactor**
* Reused the shared legacy build-context helper in the rebuild scenario.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
jyaunches added a commit that referenced this pull request Jun 26, 2026
## Summary
- keep connect/login shell rlimit hooks quiet and best-effort so startup
diagnostics do not pollute command, agent, or inference response streams
- preserve loud PID 1 entrypoint rlimit enforcement while shell hooks
use `verify_resource_limits --quiet || true`
- add regression coverage proving shell hooks remain silent when
verification fails

## Root cause
PR #5682 added `verify_resource_limits` to `/etc/profile.d` and
`/etc/bash.bashrc` hooks. When a shell cannot report/enforce a limit,
that non-quiet verification emits `[SECURITY] ...` diagnostics on stderr
before user commands run. Nightly E2E jobs then captured those
diagnostics in API/model probes and failed assertions expecting clean
responses.

## Test plan
- `./node_modules/.bin/vitest run test/sandbox-rlimit-hooks.test.ts
test/sandbox-provisioning.test.ts test/sandbox-build-context.test.ts
test/sandbox-init.test.ts`
- targeted nightly E2E dispatch pending for the
rlimit-output-contamination failures

Refs #5682 / #2173.

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

* **New Features**
* Added a new explicit test job for the rlimit connect scenario, making
it selectable on demand in CI.
* Improved shell startup behavior so resource-limit checks no longer
interrupt builds or login shells when verification fails.

* **Bug Fixes**
  * Reduced noisy security diagnostics during shell startup.
* Messaging channel detection now considers built-in channel
availability more consistently.

* **Tests**
* Expanded coverage for silent rlimit verification failures and the new
workflow/job selection path.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
cv pushed a commit that referenced this pull request Jun 29, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

## Changes
- Added a new `v0.0.69` section to `docs/about/release-notes.mdx`.
- Linked release-note themes to lifecycle, backup, troubleshooting, Deep
Agents Code, commands, workspace, messaging, Hermes, inference,
security, monitoring, and network-policy docs.

Source summary:
- #5455 -> `docs/about/release-notes.mdx`: Summarized persistent
workspace and state cleanup during sandbox destroy.
- #5738 -> `docs/about/release-notes.mdx`: Summarized nonzero exit
status preservation for failed hosted endpoint validation.
- #5786 -> `docs/about/release-notes.mdx`: Summarized live sandbox
rediscovery when local registry state is missing.
- #5881 -> `docs/about/release-notes.mdx`: Summarized the
`nemo-deepagents` alias command surface.
- #5594 -> `docs/about/release-notes.mdx`: Summarized the Hermes Agent
2026.6.19 update.
- #5777 -> `docs/about/release-notes.mdx`: Summarized manifest-derived
messaging channel support.
- #5825 -> `docs/about/release-notes.mdx`: Summarized DeepSeek V4 Flash
managed-vLLM defaults for DGX Station.
- #5877 -> `docs/about/release-notes.mdx`: Summarized provider switch
metadata preservation.
- #5932 -> `docs/about/release-notes.mdx`: Summarized transient
inference smoke retry behavior.
- #5934 -> `docs/about/release-notes.mdx`: Summarized constrained
inference smoke retry boundaries.
- #5681 -> `docs/about/release-notes.mdx`: Summarized Shields
config-hash sealing during auto-restore.
- #5682 -> `docs/about/release-notes.mdx`: Summarized sandbox connect
process-limit enforcement.
- #5683 -> `docs/about/release-notes.mdx`: Summarized JSON agent failure
provenance warnings.
- #5711 -> `docs/about/release-notes.mdx`: Summarized sparse-source log
breadcrumbs.
- #5838 -> `docs/about/release-notes.mdx`: Summarized host-authoritative
Shields status.
- #5880 -> `docs/about/release-notes.mdx`: Summarized policy round-trip
documentation updates.
- #5886 -> `docs/about/release-notes.mdx`: Summarized network request
approval-flow documentation updates.

## Type of Change

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

## Quality Gates
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: doc-only release-notes
prose; no runtime behavior changed.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [ ] Targeted tests pass for changed behavior
- [ ] Full `npm test` passes (broad runtime changes only)
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

`npm run docs` passed with 0 errors and the existing Fern light-mode
accent contrast warning.
`fern check --warnings` reported the same accent-color warning.

---
Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>

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

* **Documentation**
* Added release notes for **v0.0.69**, covering improved sandbox
lifecycle recovery (state preservation across
destroy/recreate/rebuild/recovery/validation failures), clearer Deep
Agents Code terminal/CLI behavior, and safer Hermes messaging/provider
switching with manifest-driven channels.
* Improved inference setup validation guidance, including handling of
local/compatible endpoints and redaction of sensitive validation errors.
* Refreshed release-gate documentation with clearer approval examples
and validation behavior for NVIDIA API keys vs hosted inference keys.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
- move sandbox nproc/nofile limits into a shared rlimit helper
- install system-wide shell hooks so `openshell sandbox connect` bash
sessions lower `nproc` to 512 and `nofile` to 65536
- replay the hook setup in the thin image so rebuilt sandboxes are fixed
before the base image catches up

Fixes NVIDIA#2173

## Test plan
- `./node_modules/.bin/vitest run test/sandbox-init.test.ts
test/sandbox-provisioning.test.ts test/sandbox-build-context.test.ts`
- `npm run build:cli`
- `npm run typecheck:cli`
- `shellcheck scripts/lib/sandbox-rlimits.sh`
- `git diff --check`

Local note: the broad `test-cli` hook was skipped for commit/push after
producing unrelated timeout fallout in the full local coverage sweep;
remote CI/advisors are the gate.

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

* **New Features**
* Added shared runtime library for sandbox RLIMIT hardening and
verification (covers `nproc`/`nofile`), applied at startup.
* Installed system-wide shell hooks to enforce limits for login and
interactive Bash sessions.
* Set new hook/library and shell startup configuration to read-only for
safer persistence.
* **Bug Fixes**
* Improved stale base image repair to correctly inject and order the
proxy and resource-limit snippets.
* **Tests**
* Expanded staging/provisioning and container integration coverage,
including fork denial enforcement and quiet/verification failure
behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Restore issue NVIDIA#5849 Package F parity for the migrated
`rebuild-openclaw-vitest` fixture.

The legacy bash test builds `Dockerfile.base` with the full repository
as Docker context after temporarily lowering
`nemoclaw-blueprint/blueprint.yaml`. The migrated Vitest kept the
checkout read-only by staging a minimal context, but after NVIDIA#5682
`Dockerfile.base` also copies `scripts/lib/sandbox-rlimits.sh`, so the
Vitest old-base build failed before reaching the rebuild assertions.

## Related Issues
Refs NVIDIA#5849
Refs NVIDIA#5800
Refs NVIDIA#5682

## Scope gate
- Package: `Package F — OpenClaw rebuild fixture parity`
- Included input: NVIDIA#5682 is the explicit Vitest-fixture exception
documented in NVIDIA#5849; it did not touch legacy bash, but exposed migrated
Vitest setup drift against the bash reference.
- Bash reference: `test/e2e/test-rebuild-openclaw.sh`
- Out of scope: shell lane retirement / PR NVIDIA#5756 cleanup; OpenClaw
version bump PR NVIDIA#5595; Hermes rebuild fixes.

## Parity map
| ID | Source / evidence | Contract | Vitest assertion / fix | Status |
| --- | --- | --- | --- | --- |
| F1 | NVIDIA#5682, run 28214953054 | Migrated OpenClaw rebuild Vitest must
build the old base with every direct `Dockerfile.base` context
dependency needed by the bash full-repo build. |
`createOldBaseBuildContext()` now stages
`nemoclaw-blueprint/blueprint.yaml` and `scripts/lib/sandbox-rlimits.sh`
before building `Dockerfile.base`. | covered |
| F2 | Future `Dockerfile.base` COPY drift | If `Dockerfile.base` gains
another direct `COPY`, the Package F fixture must fail fast before live
E2E runtime. | New support test
`test/e2e-scenario/support-tests/rebuild-openclaw-old-base-context.test.ts`
checks direct `Dockerfile.base` COPY sources are represented in the
old-base context list. | covered |

## Inference mode support
- Default mode for touched live target: existing `public-nvidia` /
hosted path for `rebuild-openclaw-vitest`; no inference mode behavior
changed.
- Real inference support preserved: yes; this PR only fixes pre-rebuild
Docker build fixture setup.
- Modes validated in this PR: local support/unit/build/typecheck. Live
Docker validation requires GitHub runner because local Docker daemon is
unavailable.

## Validation
- [x] `npx vitest run --project e2e-vitest-support
test/e2e-scenario/support-tests/rebuild-openclaw-old-base-context.test.ts`
- [x] `npm run build:cli`
- [x] `npm run typecheck:cli`
- [x] `git diff --check`
- [ ] Selective `rebuild-openclaw-vitest` workflow on PR branch

## Follow-ups / waivers
- Local live run not attempted because Docker daemon is unavailable on
this machine (`Cannot connect to the Docker daemon at
unix:///Users/jyaunches/.docker/run/docker.sock`).

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>


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

* **New Features**
* Added end-to-end helper utilities to generate a temporary legacy
Docker build context, stage required direct `COPY` sources, and rewrite
the blueprint’s minimum OpenClaw version.
* **Bug Fixes**
* Strengthened Dockerfile parsing to include only supported direct
`COPY` sources while excluding non-matching variants and secret-related
inputs.
* **Tests**
* Added e2e test coverage for legacy context creation, correct `COPY`
source selection, error handling for unsupported paths, and automatic
cleanup of temp directories.
* **Refactor**
* Reused the shared legacy build-context helper in the rebuild scenario.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
- keep connect/login shell rlimit hooks quiet and best-effort so startup
diagnostics do not pollute command, agent, or inference response streams
- preserve loud PID 1 entrypoint rlimit enforcement while shell hooks
use `verify_resource_limits --quiet || true`
- add regression coverage proving shell hooks remain silent when
verification fails

## Root cause
PR NVIDIA#5682 added `verify_resource_limits` to `/etc/profile.d` and
`/etc/bash.bashrc` hooks. When a shell cannot report/enforce a limit,
that non-quiet verification emits `[SECURITY] ...` diagnostics on stderr
before user commands run. Nightly E2E jobs then captured those
diagnostics in API/model probes and failed assertions expecting clean
responses.

## Test plan
- `./node_modules/.bin/vitest run test/sandbox-rlimit-hooks.test.ts
test/sandbox-provisioning.test.ts test/sandbox-build-context.test.ts
test/sandbox-init.test.ts`
- targeted nightly E2E dispatch pending for the
rlimit-output-contamination failures

Refs NVIDIA#5682 / NVIDIA#2173.

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

* **New Features**
* Added a new explicit test job for the rlimit connect scenario, making
it selectable on demand in CI.
* Improved shell startup behavior so resource-limit checks no longer
interrupt builds or login shells when verification fails.

* **Bug Fixes**
  * Reduced noisy security diagnostics during shell startup.
* Messaging channel detection now considers built-in channel
availability more consistently.

* **Tests**
* Expanded coverage for silent rlimit verification failures and the new
workflow/job selection path.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

## Changes
- Added a new `v0.0.69` section to `docs/about/release-notes.mdx`.
- Linked release-note themes to lifecycle, backup, troubleshooting, Deep
Agents Code, commands, workspace, messaging, Hermes, inference,
security, monitoring, and network-policy docs.

Source summary:
- NVIDIA#5455 -> `docs/about/release-notes.mdx`: Summarized persistent
workspace and state cleanup during sandbox destroy.
- NVIDIA#5738 -> `docs/about/release-notes.mdx`: Summarized nonzero exit
status preservation for failed hosted endpoint validation.
- NVIDIA#5786 -> `docs/about/release-notes.mdx`: Summarized live sandbox
rediscovery when local registry state is missing.
- NVIDIA#5881 -> `docs/about/release-notes.mdx`: Summarized the
`nemo-deepagents` alias command surface.
- NVIDIA#5594 -> `docs/about/release-notes.mdx`: Summarized the Hermes Agent
2026.6.19 update.
- NVIDIA#5777 -> `docs/about/release-notes.mdx`: Summarized manifest-derived
messaging channel support.
- NVIDIA#5825 -> `docs/about/release-notes.mdx`: Summarized DeepSeek V4 Flash
managed-vLLM defaults for DGX Station.
- NVIDIA#5877 -> `docs/about/release-notes.mdx`: Summarized provider switch
metadata preservation.
- NVIDIA#5932 -> `docs/about/release-notes.mdx`: Summarized transient
inference smoke retry behavior.
- NVIDIA#5934 -> `docs/about/release-notes.mdx`: Summarized constrained
inference smoke retry boundaries.
- NVIDIA#5681 -> `docs/about/release-notes.mdx`: Summarized Shields
config-hash sealing during auto-restore.
- NVIDIA#5682 -> `docs/about/release-notes.mdx`: Summarized sandbox connect
process-limit enforcement.
- NVIDIA#5683 -> `docs/about/release-notes.mdx`: Summarized JSON agent failure
provenance warnings.
- NVIDIA#5711 -> `docs/about/release-notes.mdx`: Summarized sparse-source log
breadcrumbs.
- NVIDIA#5838 -> `docs/about/release-notes.mdx`: Summarized host-authoritative
Shields status.
- NVIDIA#5880 -> `docs/about/release-notes.mdx`: Summarized policy round-trip
documentation updates.
- NVIDIA#5886 -> `docs/about/release-notes.mdx`: Summarized network request
approval-flow documentation updates.

## Type of Change

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

## Quality Gates
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: doc-only release-notes
prose; no runtime behavior changed.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [ ] Targeted tests pass for changed behavior
- [ ] Full `npm test` passes (broad runtime changes only)
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

`npm run docs` passed with 0 errors and the existing Fern light-mode
accent contrast warning.
`fern check --warnings` reported the same accent-color warning.

---
Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>

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

* **Documentation**
* Added release notes for **v0.0.69**, covering improved sandbox
lifecycle recovery (state preservation across
destroy/recreate/rebuild/recovery/validation failures), clearer Deep
Agents Code terminal/CLI behavior, and safer Hermes messaging/provider
switching with manifest-driven channels.
* Improved inference setup validation guidance, including handling of
local/compatible endpoints and redaction of sensitive validation errors.
* Refreshed release-gate documentation with clearer approval examples
and validation behavior for NVIDIA API keys vs hosted inference keys.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening bug-fix PR fixes a bug or regression NV QA Bugs found by the NVIDIA QA Team VDR Linked to VDR finding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[All Platform][Security] Sandbox does not enforce nproc / nofile rlimits — ulimit -u = unlimited, ulimit -n = 1048576 inside sandbox shell

5 participants