fix(sandbox): enforce connect shell rlimits - #5682
Conversation
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe 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. ChangesSandbox rlimits hardening
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in the Show a code coverage summary of the most covered files.
TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most covered files.
Updated |
PR Review Advisor — No blocking findingsMerge posture: No blocking advisor findings 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. |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Auto-dispatched E2E: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: None Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
There was a problem hiding this comment.
🧹 Nitpick comments (3)
Dockerfile.base (1)
135-180: 🩺 Stability & Availability | 🔵 TrivialRun 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.basechanges 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 | 🔵 TrivialRun 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 | 🔵 TrivialPlease 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,
Dockerfilechanges 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
📒 Files selected for processing (8)
DockerfileDockerfile.baseagents/hermes/Dockerfilescripts/lib/sandbox-init.shscripts/lib/sandbox-rlimits.shsrc/lib/sandbox/build-context.tstest/sandbox-build-context.test.tstest/sandbox-provisioning.test.ts
Selective E2E Results — ✅ All requested jobs passedRun: 28047572386
|
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Selective E2E Results — ✅ All requested jobs passedRun: 28048212302
|
Selective E2E Results — ✅ All requested jobs passedRun: 28100335158
|
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
There was a problem hiding this comment.
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
📒 Files selected for processing (7)
DockerfileDockerfile.baseagents/hermes/Dockerfilescripts/lib/sandbox-rlimits.shtest/sandbox-init.test.tstest/sandbox-provisioning.test.tstest/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
Selective E2E Results — ✅ All requested jobs passedRun: 28140869678
|
Selective E2E Results — ✅ All requested jobs passedRun: 28141865261
|
Selective E2E Results — ✅ All requested jobs passedRun: 28144156211
|
Vitest E2E Scenario Results — ❌ Some jobs failedRun: 28179278067
|
Vitest E2E Scenario Results — ❌ Some jobs failedRun: 28190034111
|
Selective E2E Results — ✅ All requested jobs passedRun: 28191467535
|
## 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>
## 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 -->
## 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 -->
## 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>
## 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>
## 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 -->
## 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 -->
Summary
openshell sandbox connectbash sessions lowernprocto 512 andnofileto 65536Fixes #2173
Test plan
./node_modules/.bin/vitest run test/sandbox-init.test.ts test/sandbox-provisioning.test.ts test/sandbox-build-context.test.tsnpm run build:clinpm run typecheck:clishellcheck scripts/lib/sandbox-rlimits.shgit diff --checkLocal note: the broad
test-clihook 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
nproc/nofile), applied at startup.