K8s autoscaling - #4
Merged
Merged
Conversation
…DIA#6749) <!-- markdownlint-disable MD041 --> ## Summary `snapshot restore --to <dst>` auto-creates the destination by spreading the source's registry entry, so the clone was registered with the source's `dashboardPort`. Because the host forward for that port is owned by the source, the clone's `dashboard-url` pointed at the source's dashboard and every rebuild of the clone was rejected by the rebuild preflight (`Dashboard port NNNNN belongs to sandbox '<src>'.`). The clone now gets its own dashboard port allocated at registration, so `dashboard-url` reports the clone's own port and rebuild proceeds. ## Related Issue Fixes NVIDIA#6746 ## Changes - `src/lib/actions/sandbox/snapshot.ts`: allocate a destination-owned dashboard port before any destructive `--force` action, then hold a host-wide reservation from selection through durable registration. Onboard and snapshot restore now share the same lock order: sandbox mutation → host dashboard reservation → gateway route mutation. - Clone startup explicitly sets `CHAT_UI_URL` and `NEMOCLAW_DASHBOARD_PORT` to the allocated port, so the in-sandbox listener, host forward, and registry all use the same destination port immediately after restore. - Enabled Hermes clones persist the allocated public port while preserving the source image's internal relay port and TUI setting. The internal port is excluded from public-port allocation, and the runtime Hermes environment is validated before destination deletion or creation. - Sources without a managed dashboard keep the clone dashboard field unset. Allocation or Hermes validation failures abort before destination deletion, and failed operations release the shared reservation for the next allocator. - Regression coverage exercises cross-gateway serialization, failure release, OpenClaw and Hermes create argv, Hermes rebuild consistency, port exhaustion before deletion, missing dashboard ports, lifecycle mock compatibility, and shuffled test order. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: internal registry-registration fix; no doc page documents snapshot-clone dashboard-port behavior. - [x] 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: pending — sensitive-path review requested from maintainers as part of this PR's review. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: focused lock/clone suite 36/36; shuffled clone suite 4/4; onboard handler suite 203/203; `npm run typecheck:cli` passed; full sandbox action suite 1,719 passed / 3 skipped with one unrelated timeout passing immediately in isolation; normal pre-commit, commit-msg, and pre-push hooks passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- Signed-off-by: Dongni Yang <dongniy@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Snapshot-restore clones now reserve and assign a destination-owned dashboard port, ensuring registration uses the correct port and Hermes dashboard settings propagate correctly. * If dashboard-port allocation fails during restore, the restore exits cleanly and avoids subsequent destructive or registration actions. * When the source sandbox has no dashboard port, the clone is registered with a null dashboard port and allocation is skipped. * **Tests** * Expanded snapshot-restore/clone coverage for dashboard-port, Hermes behavior, and failure scenarios. * Added/updated dashboard-port reservation locking tests to verify serialization across gateways and proper release on failure. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Dongni Yang <dongniy@nvidia.com> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary <!-- 1-3 plain sentences: what changes and why. Describe before-and-after behavior when it applies. Use existing repository terms; do not invent a label for this PR. --> This follow-up to NVIDIA#6745 and NVIDIA#6788 makes the combined PR Review Advisor disclose both model lanes without giving Nemotron authority over GPT's assessment, fixes contradictory confidence and E2E guidance, and ensures stale CI events close only the seeded in-progress E2E check. Missing or malformed Nemotron artifacts now degrade to an unavailable second opinion while a valid GPT review still publishes. ## Changes <!-- List concrete changes. If this adds an abstraction, configuration, fallback, migration, or compatibility path, name its current requirement and consumer, explain why a direct change is insufficient, and identify the test that protects it. --> - Download the exact same-run Nemotron artifact in the write-capable publisher, validate its raw status, final result, summary, size, path, and head SHA, and pass it to the comment renderer only through a trusted validation output. GPT remains fail-closed and authoritative; the nonblocking Nemotron lane reports only allowlisted status, confidence, severity counts, and opaque structural agreement or disagreement. - Render the actual normalized confidence for informational reviews, reconcile trusted E2E coverage and selector tiers through the existing target normalizer, and avoid “Why no…” text when optional guidance exists. - Delete only `github-actions[bot]` comments whose first line is one of the two retired E2E Advisor markers, after the combined sticky comment publishes. The bot-owner and exact-marker restrictions are covered by the security-boundary tests. - Recover an existing exact-diff check ID before stale workflow-run validation only when the check is still `in_progress`, allowing the existing cleanup step to terminalize abandoned checks without rewriting completed historical results. - Extend workflow-boundary, comment, normalization, GitHub API, and gate regression tests for complete, partial, failed, skipped, malformed, stale, and completed-check cases. ## Type of Change - [x] 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) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This changes internal maintainer automation and GitHub workflow behavior only; the required documentation-writer pass found no user-facing CLI, configuration, API, policy, or product documentation change. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent final reviews found no remaining findings after checking `pull_request_target` privilege separation, same-run artifact provenance, primary fail-closed behavior, nonblocking secondary validation, prose isolation, exact bot-owned legacy comment deletion, E2E selector trust, and stale/completed check races. The nine-category security checklist also found no secret, injection, authorization, dependency, logging, cryptography, configuration, test, or holistic posture regression. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect that behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — final advisor suites passed 120/120 tests, the compacted advisor regression passed 44/44, and all four PR E2E gate suites passed 69/69; CLI type-check passed in the normal pre-push hook. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * PR review comments now support an optional second-opinion analysis, including model-lane status and comparison details when compatible. * Comments show clearer confidence-aware model-lane information, with improved E2E “no coverage” messaging. * Legacy advisor sticky comments are cleaned up automatically during updates. * **Bug Fixes** * E2E recommendations/coverage handling is corrected when only optional coverage is selected. * E2E coverage/target reconciliation is more accurately aligned with available trusted capabilities. * PR gate handling is improved for stale, duplicate, and superseded checks—avoiding unnecessary check reopens and recording recovered check IDs. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- markdownlint-disable MD041 --> ## Summary Install the Docker CLI and binutils in the digest-pinned Ubuntu 26.04 contract job. The job now verifies the mounted Docker daemon and `strings` before running compatibility contracts, so missing runner tools fail at the environment boundary instead of cascading into installer assertion failures. ## Related Issue Refs NVIDIA#3245. ## Changes - install `docker.io` and `binutils` in the Ubuntu 26.04 job container - verify Docker daemon connectivity and the `strings` binary before running the contract suites - keep the existing compatibility suites as the behavior boundary that protects the job dependencies ## Type of Change - [x] 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) ## Quality Gates - [ ] Tests added or updated for changed behavior - [x] Existing tests cover changed behavior — justification: the Ubuntu 26.04 job runs the installer contracts that exposed the missing host tools, and the added preflight probes fail directly if those tools drift again. - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: this only repairs an internal CI job environment; NemoClaw user behavior and requirements are unchanged. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: the exact pinned Ubuntu 26.04 image with the mounted Docker socket passed `test/install-preflight.test.ts` (94/94); targeted CLI preflight tests passed (132/132), and `test/platform.test.ts` passed (25/25). - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: not applicable to this focused workflow dependency fix. - [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) - [ ] 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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Improved Ubuntu 26.04 environment validation by adding Docker and binary utility checks. * Expanded the test environment with additional system tools required for runtime verification. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Removes the main-only Intel macOS final-destroy job because OpenShell does not publish a macOS x86_64 standalone gateway asset and the installer correctly rejects that unsupported platform. The supported Apple Silicon job continues to run the deterministic gateway lifecycle regressions, and its workflow boundary now prevents the invalid Intel runner from being reintroduced. ## Changes - Remove the `macos-docker-final-destroy` job that could never reach its live E2E test. - Preserve the three gateway lifecycle regressions on the supported `macos-26` runner. - Replace the Intel-runner assertion with a compatibility guard and retain the surviving secret and artifact-publishing boundaries. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This corrects CI to match the existing platform matrix and documentation, which already mark Intel macOS unsupported. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent review confirmed the deleted job never reached E2E, while the surviving secret-bearing job retains trusted-main gating and immutable artifact publication coverage. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: `npx vitest run --project integration test/macos-e2e-workflow-boundary.test.ts` passed 3/3; `npm run source-shape:check`, focused Biome validation, and `git diff --check` passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Not run; the focused workflow-boundary test covers this CI-only change. - [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) - [ ] 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) --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **CI Improvements** * Streamlined macOS end-to-end testing by removing the Intel-based Docker final-destroy phase and retaining the supported Apple Silicon workflow. * Added stronger workflow validation to ensure gateway lifecycle coverage targets the intended macOS runner and avoids Intel job execution. * Strengthened diagnostics by securely pinning log upload behavior and tightening failure-only artifact collection conditions. * **Tests** * Updated macOS E2E workflow boundary contract tests to reflect the revised runner and log upload requirements. * **Bug Fixes** * Removed obsolete Intel-based macOS Docker cleanup testing and related Docker log handling. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary Replace the SHA-copying E2E no-secret exception workflow with a repository-native protected-environment approval on the exact `E2E / PR Gate` run. Maintainers can use GitHub's **Review deployments** button while the controller preserves the existing exact-diff, role, risk-plan, and stale-revision checks. ## Changes - Publish allowlisted exception mode, PR, head SHA, and base SHA outputs from the trusted coordinator, then wait on `e2e-no-secret-exception` with `deployment: false` and no secret references or PR-controlled execution. - Read the workflow run's approval history, require one approval for only that environment, derive the reviewer and optional bounded comment from GitHub, recheck `maintain`/`admin`, and reuse the existing exact-diff resolver. An absent or unprotected environment fails closed. - Bind approval to the trusted first workflow attempt, exact workflow SHA, current PR revision, matching failed check, recomputed risk plan, and a final live-PR read. Per-PR concurrency cancels stale waiting approvals. - Keep the typed `workflow_dispatch` resolver for rollout and rerun fallback because GitHub approval history is run-scoped rather than attempt-scoped. The controller exception and workflow contract tests protect both paths. - Update the E2E reference and maintainer merge-gate guidance, including the required repository environment configuration. This addresses the maintainer friction observed on NVIDIA#6732 without adding a GitHub App. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: No end-user product behavior changed; maintainer workflow and E2E reference documentation were updated. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Adversarial review covered approval provenance, first-attempt replay prevention, permissions, unconfigured-environment failure, stale revisions, and exact check identity; no actionable findings. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project integration test/pr-e2e-gate.test.ts test/pr-e2e-gate-lifecycle.test.ts test/pr-e2e-gate-exceptions.test.ts test/pr-e2e-gate-workflow.test.ts` (4 files, 88 tests passed) - [ ] Applicable broad gate passed — not applicable; this focused workflow/controller change is covered by the targeted suite and normal hooks. - [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) — not applicable; no `docs/` pages changed. - [ ] 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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added an approval-based “no-secret” workflow step to resolve eligible E2E gate exceptions. * Gate completions now include a linked run “details” URL and standardized exception outputs. * **Documentation** * Updated maintainer guidance for protected-environment approval setup and the typed manual fallback path. * **Tests** * Expanded end-to-end coverage for approval validation, strict trust/scoping checks, concurrency wiring, and improved gate output assertions (including rerun rejection and safe input handling). <!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary Separate trusted controller health from the exact-diff merge verdict so handled PR CI/E2E failures and superseded or closed revisions no longer masquerade as controller failures. Add self-explanatory diagnostics and exception links while preserving red controller status for real controller, correlation, and evidence-download faults. This follows the actual-run review of NVIDIA#6807 and NVIDIA#6810. ## Changes - Rename the workflow to `E2E / PR Gate Controller` while preserving the required custom check name `E2E / PR Gate`, and document which outcome controls merge authority. - Complete prerequisite-CI and selected-E2E failures as handled red PR verdicts with direct run, job, and failed-step links; paginate bounded workflow-job results and keep diagnostic lookup failures fail-closed at the PR check. - Cancel exact checks for superseded revisions and closed PRs, including deleted fork repositories, only after validating the trusted check identity. Bracket evidence parsing with live exact-diff reads so stale evidence cannot become a current result. - Keep infrastructure failures distinct: a successful child whose evidence download fails leaves both controller and custom check red, while classified missing, duplicate, skipped, pending, or reported-failing signals remain handled PR verdicts. - Make no-secret exceptions explicitly say that credentialed E2E did not run, embed the controller-run link needed for **Review deployments**, and clarify the exact manual evidence URL format. - Add lifecycle, pagination, workflow, command, exception, and race regression coverage; update the E2E reference and maintainer merge-gate guidance. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: No end-user product behavior changed; the internal E2E reference and maintainer merge-gate guidance were updated. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Adversarial fail-closed review covered GitHub App/external-ID correlation, stale and deleted-fork revisions, bounded diagnostics, evidence trust boundaries, download failures, and pre/post-parse race validation; no remaining blockers. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project integration test/pr-e2e-gate-command.test.ts test/pr-e2e-gate.test.ts test/pr-e2e-gate-lifecycle.test.ts test/pr-e2e-gate-exceptions.test.ts test/pr-e2e-gate-workflow.test.ts` (5 files, 107 tests passed) - [x] Applicable broad gate passed — `GIT_CONFIG_GLOBAL=/dev/null SSH_AUTH_SOCK=/tmp/ssh-qmH9wX3sr5/agent.4170011 npm test` (1,502 files and 17,062 tests passed; 3 files and 40 tests skipped) - [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) - [ ] 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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Improvements** * Renamed the E2E gate workflow to **E2E / PR Gate Controller** with stronger handling for superseded, closed, cancelled, and timeout scenarios. * Improved evidence verification and finalization reporting, including evidence outcome propagation and clearer fail-closed behavior. * Updated wait/completion behavior so terminal failures/timeouts are reported consistently without unexpected non-zero exits, and improved check conclusion/link messaging (including **cancelled**). * **Documentation** * Refined controller/manual dispatch guidance, evidence handling rules, and “no-secret exception” workflow instructions. * **Tests** * Updated and expanded E2E lifecycle, workflow contract, and CLI parsing/evidence outcome coverage to match the new behavior and messages. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Fix the main-branch platform Vitest watch that produced 83 WSL failures and canceled macOS at its 20-minute ceiling. The WSL suite now exercises ordinary behavior as a non-root user while retaining focused root-only contracts, and host-dependent tests explicitly select the platform behavior they verify. ## Changes - Provision a non-root WSL test user, install `python3-venv`, and run dependency installation, builds, and the full suite under that user. - Preserve all five UID-0-only security contracts in a focused root step with their required sandbox identity and trusted normalizer fixture. - Pass explicit WSL behavior through dashboard, forward-recovery, process-recovery, and inference probe tests so ordinary-Linux assertions do not inherit the host kernel. Child-process connect and recover tests use a preload because they execute the compiled CLI in a separate process; their tests protect that boundary. - Refresh inode-bound fake process identities after recreating fake `/proc` entries. - Raise the macOS and WSL full-suite ceilings to 60 minutes based on the observed 20-minute macOS cutoff and approximately 43-minute WSL runtime. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This changes internal CI execution and test determinism without changing supported user-facing behavior. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent diff review covered WSL privilege separation, preservation of root-only contracts, PowerShell/Bash quoting, and explicit platform overrides; the identified root-coverage gap was corrected before commit. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — 13 changed-behavior files, 137 tests passed together; the fake-process fixture also passed five consecutive focused runs. `npm run typecheck:cli`, project membership, source-shape checks, and all diff-scoped hooks passed. - [ ] Applicable broad gate passed — the real branch platform workflow is running at https://github.com/NVIDIA/NemoClaw/actions/runs/29299731938. Local `npm test` under unsupported Node 26/macOS completed 16,851 tests and reported 66 unrelated environment/order failures in untouched files; changed-set tests pass in isolation. - [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) - [ ] 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) --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved sandbox port-forward recovery/health checks to consistently respect explicit WSL mode overrides. * Refined WSL2 timeout/connection error messaging to reflect the intended execution environment. * **Tests** * Updated dashboard and sandbox lifecycle tests to pass explicit WSL mode flags. * Added/expanded test helpers to force non-WSL behavior and stabilize platform-dependent assertions. * **CI** * Increased CI timeouts for WSL and Ubuntu compatibility runs; adjusted WSL job execution user/permissions for reliable test setup. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
…ness stage (NVIDIA#6782) <!-- markdownlint-disable MD041 --> ## Summary The PR Review Advisor's correctness stage now performs purpose-driven adversarial reasoning when a PR states a correctness guarantee (fail-closed check, locality invariant, ordering constraint, capacity gate). Before this change the advisor applied a generic correctness checklist; it would not systematically enumerate bypass paths or verify external-system contract assumptions against upstream documentation. A review of NVIDIA#6771 showed three successive blocker rounds that CI and prior review missed — all traceable to this gap. ## Changes - Added one paragraph to the `correctness-state` stage prompt in `buildPromptTurns()` (`tools/pr-review-advisor/analyze.mts`): when the PR states a correctness guarantee, the advisor must identify the guarantee, enumerate specific bypass paths (alternate branches, combined input states, external-spec assumptions), verify each against the diff, and check external-system behavior against upstream documentation rather than internal code consistency alone. ## Type of Change - [x] 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) ## Quality Gates - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: the change is a prompt string; correctness is evaluated by running the advisor against real PRs, not unit tests - [x] Docs not applicable — justification: no user-facing behavior change; advisor prompt internals are not documented - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: change strengthens the advisor's security and correctness coverage; no weakening of trust boundaries ## Verification - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: prompt-only change; no executable test surface - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Enhanced review guidance for assessing correctness guarantees when changes affect correctness-critical paths, even if not explicitly labeled. * Added steps to identify the dependent/claimed guarantee and enumerate silent bypasses across alternate branches, input state/precedence differences, and external contract assumptions. * Clarified how to verify external behavior using repository evidence and upstream documentation, and to mark ambiguous documentation as **unverified** rather than confirmed. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
## Summary - replace the unsupported TypeScript constructor parameter property in the PR E2E gate - add a regression that launches the controller with the exact `node --experimental-strip-types` runtime used by Actions ## Why Current `main` crashes every PR E2E gate during initialization with `ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`, before it can evaluate the PR. This is visible on NVIDIA#6770, NVIDIA#6711, and NVIDIA#6672. ## Validation - `npx vitest run --project integration test/pr-e2e-gate-command.test.ts test/pr-e2e-gate-lifecycle.test.ts test/pr-e2e-gate-exceptions.test.ts test/pr-e2e-gate.test.ts test/pr-e2e-gate-workflow.test.ts` (108 passed) - `npm run build:cli` - pre-commit and pre-push hooks <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved validation for invalid end-to-end gate modes, including clearer error messaging and the correct failure status. * Prevented unsupported TypeScript syntax errors when running the gate command directly in Node’s experimental type-stripping mode. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary Stabilizes the main-branch Platform Vitest workflow after the previous WSL fix left three residual WSL failures and macOS still failed 216 tests. The workflow now provisions the runtime its cross-platform tests require, while genuine Darwin and WSL timing/path differences are handled explicitly. ## Changes - Provision Python 3.14 with hash-locked PyYAML and setuptools plus Homebrew Bash, GNU coreutils, gawk, and ripgrep for the macOS lane. - Fix Darwin PTY, canonical-path, Unix-socket-length, job-control, and Hermes direct-execution behavior; gate Linux-only memfd/fcntl and exact-rlimit contracts to Linux. - Install ripgrep in WSL and fix the remaining outside-repository fixture permission, resolver timeout, and `/proc` argv transition races. - Add workflow contracts and opaque-input watch triggers covering the macOS toolchain and unprivileged WSL boundary. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: CI portability and internal main-module path detection do not change supported user behavior. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: independent diff review found no credential or policy behavior change; action pins, Python wheel hashes, unprivileged WSL execution, and Linux-only boundaries were verified. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — focused CLI, integration, E2E-support, workflow/watch-trigger, Darwin PTY, gateway-control, Hermes/path, and platform-gating tests passed; `npm run test:changed` passed (31 passed, 15 Linux-only skipped on Darwin). - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: awaiting the branch-dispatched Platform Vitest workflow on real macOS and WSL runners. - [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) - [ ] 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) --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **CI Improvements** * Improved macOS and WSL test environment setup and diagnostics. * Added pinned Python and dependency configuration for macOS testing. * Ensured standard WSL tests run without elevated privileges. * **Bug Fixes** * Improved cross-platform path and socket handling. * Increased test reliability for process startup, signal output, and macOS shell behavior. * **Tests** * Added workflow validation coverage for runtime setup, dependency versions, permissions, and command configuration. * Expanded watch-trigger coverage for platform test workflow changes. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
## Summary Controller-only internal PRs now automatically dispatch the selected exact-SHA E2E jobs instead of requiring a no-run exception. Internal changes that alter PR-controlled E2E execution or evidence code require an explicit maintainer/admin `run-control-plane` authorization, then use the normal dispatch, wait, evidence, and finish path so only verified results can clear `E2E / PR Gate`. Fork handling remains a no-secret exception. ## Related Issue Part of NVIDIA#6145 ## Changes - Treat only `.github/workflows/pr-e2e-gate.yaml` and `tools/e2e/pr-e2e-gate.mts` as controller-only control-plane changes eligible for automatic internal dispatch. - Replace the internal `resolve-control-plane` no-run waiver with exact-head/base `run-control-plane` authorization that requires `maintain` or `admin` and dispatches the selected jobs. - Serialize automatic and manual coordination on the exact head SHA, preserve a retryable failure after authorized-start errors, and keep success exclusive to verified evidence. - Expand command, workflow, risk-plan, lifecycle, authorization, retry, origin, and NVIDIA#6821 regression coverage; update contributor and maintainer E2E guidance. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Maintainer-directed scope; an independent implementation audit found no success bypass, identified two lifecycle races, and both were fixed and retested before submission. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run test/pr-risk-plan.test.ts test/pr-e2e-gate-command.test.ts test/pr-e2e-gate-workflow.test.ts test/pr-e2e-gate-exceptions.test.ts test/pr-e2e-gate.test.ts` (154 passed) - [ ] Applicable broad gate passed — local `npm test` did not complete: after eight minutes it remained on one idle integration worker with an orphaned persistent-log `tail -F`; the process was terminated and GitHub CI is required for the broad verdict. - [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) - [ ] 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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added maintainer-authorized, exact-revision execution for control-plane E2E checks. * Added clearer fork exception resolution with validated evidence links and protected approvals. * Improved risk-based handling of E2E changes and credentialed test authorization. * **Bug Fixes** * Prevented unauthorized or outdated control-plane and fork workflows from dispatching E2E jobs. * Improved cancellation and supersession handling when pull requests change. * **Documentation** * Updated E2E gate guidance, authorization requirements, exception workflows, and manual recovery steps. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Release-prep documentation for v0.0.82 now summarizes user-facing changes merged since v0.0.81. It also closes stale wording in the stopped-sandbox backup, snapshot-clone, Ollama selection, and custom-policy authoring guidance. ## Changes - Add the `v0.0.82` section to `docs/about/release-notes.mdx` with links to the focused user guides. - Document that snapshot clones receive a destination-owned dashboard port before destructive replacement begins. - Align `backup-all` guidance with eligible stopped Docker-driver sandboxes that NemoClaw starts temporarily. - Describe the running and stopped Ollama menu states without claiming one fixed label. - Document runtime rejection of catch-all hosts in custom policy files. ### Source summary - [NVIDIA#6748](NVIDIA#6748) -> `docs/about/release-notes.mdx`, `docs/manage-sandboxes/lifecycle.mdx`, and `docs/reference/commands.mdx`: Summarize non-destructive sandbox `stop` and `start` commands. - [NVIDIA#6723](NVIDIA#6723) -> `docs/about/release-notes.mdx`, `docs/manage-sandboxes/backup-restore.mdx`, and `docs/reference/commands.mdx`: Record temporary startup and cleanup for eligible stopped-sandbox backups. - [NVIDIA#6749](NVIDIA#6749) -> `docs/about/release-notes.mdx` and `docs/manage-sandboxes/backup-restore.mdx`: Document destination-owned dashboard ports for snapshot clones. - [NVIDIA#6764](NVIDIA#6764) -> `docs/about/release-notes.mdx`: Summarize installer handling of route-only onboarding placeholders. - [NVIDIA#6771](NVIDIA#6771) -> `docs/about/release-notes.mdx`, `docs/inference/set-up-vllm.mdx`, `docs/inference/choose-inference-provider.mdx`, `docs/reference/commands.mdx`, and `docs/reference/platform-support.mdx`: Summarize managed-vLLM storage gates, immutable image digests, and the explicit override boundary. - [NVIDIA#6759](NVIDIA#6759) -> `docs/about/release-notes.mdx`: Record early, actionable OpenShell gateway-port conflict diagnostics. - [NVIDIA#6753](NVIDIA#6753) -> `docs/about/release-notes.mdx` and `docs/inference/set-up-ollama.mdx`: Document truthful running and stopped Ollama menu states. - [NVIDIA#6776](NVIDIA#6776) -> `docs/about/release-notes.mdx`: Summarize proxy-independent loopback readiness checks. - [NVIDIA#6769](NVIDIA#6769) -> `docs/about/release-notes.mdx`: Record compatible endpoint and agent guidance when Chat Completions is unavailable. - [NVIDIA#6730](NVIDIA#6730) -> `docs/about/release-notes.mdx`: Summarize bounded reuse of an eligible successful Chat Completions check. - [NVIDIA#6768](NVIDIA#6768) -> `docs/about/release-notes.mdx`: Record route-reservation repair during resumed onboarding. - [NVIDIA#6742](NVIDIA#6742) -> `docs/about/release-notes.mdx`: Summarize pre-mutation resolution of secret-free sandbox create intent. - [NVIDIA#6721](NVIDIA#6721) -> `docs/about/release-notes.mdx` and `docs/get-started/quickstart-langchain-deepagents-code.mdx`: Record bounded cleanup of completed managed Deep Agents headless sessions. - [NVIDIA#6731](NVIDIA#6731) -> `docs/about/release-notes.mdx` and `docs/network-policy/customize-network-policy.mdx`: Document runtime rejection of catch-all custom-policy destinations. - [NVIDIA#6729](NVIDIA#6729) -> `docs/about/release-notes.mdx` and `docs/get-started/prerequisites.mdx`: Record the Node.js 22.19 minimum. - [NVIDIA#6735](NVIDIA#6735) -> `docs/about/release-notes.mdx` and `docs/reference/platform-support.mdx`: Summarize the Ubuntu 26.04 userspace contract without claiming pending host or live validation. - [NVIDIA#6775](NVIDIA#6775) -> `docs/about/release-notes.mdx` and `docs/resources/community-contributions.mdx`: Route independent solutions outside canonical supported-product documentation. - [NVIDIA#6740](NVIDIA#6740) -> `docs/about/release-notes.mdx`: Summarize the semantic dependency-upgrade contributor workflow. - [NVIDIA#6777](NVIDIA#6777) -> `docs/about/release-notes.mdx` and `docs/CONTRIBUTING.md`: Summarize the route-safe documentation-refactor workflow. - [NVIDIA#6741](NVIDIA#6741) -> `docs/about/release-notes.mdx` and `docs/security/openclaw-2026.6.10-dependency-review.md`: Summarize reviewed npm archive verification and audit enforcement. - [NVIDIA#6739](NVIDIA#6739) -> `docs/about/release-notes.mdx` and `docs/security/openclaw-2026.6.10-dependency-review.md`: Record the locked offline dependency graph for the managed OpenClaw WeChat runtime. - [NVIDIA#6737](NVIDIA#6737) -> `docs/about/release-notes.mdx`: Record removal of the messaging build plan from final OpenClaw and Hermes image environments. - [NVIDIA#6733](NVIDIA#6733) -> `docs/about/release-notes.mdx`: Summarize cached plugin dependency layers for source and blueprint rebuilds. ### Skipped from docs-skip - None. No commit or changed path in `v0.0.81..origin/main` matched `openclaw-sandbox-permissive.yaml` or `config-show`, and the drafted content contains none of the configured skip terms. ## 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: This is a documentation-only release-prep update; behavior is protected by the merged source PRs, and the documentation build validates the changed routes and agent variants. - [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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — tests are not applicable for this documentation-only change. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: not run for this documentation-only change. - [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) — 0 errors; two pre-existing Fern warnings remain. - [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) — no new pages. --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated release notes with improvements to sandbox recovery, onboarding, session management, policy validation, storage checks, and system requirements. * Clarified Ollama setup instructions and status labels. * Documented safer snapshot restoration, including dedicated ports and protection against destructive failures. * Expanded `backup-all` coverage to include eligible stopped sandboxes. * Added guidance rejecting broad or catch-all network destinations in custom policies. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Addresses the five release/nightly E2E blockers according to the evidence each failure left behind. The OpenShell version-pin fixture now supports the installer's archive validation calls, the Shields target restores lockdown after its intentional failure assertion, MCP patch failures preserve their real sandbox phase, and the Hermes rebuild target emits secret-safe phase and host-resource heartbeats. The Hermes failure was not the fixture's 45-minute rebuild timeout. GitHub ended the job after about 50 minutes because the hosted runner lost communication; the rebuild command began later in the scenario and could not yet have reached its own timeout. No final logs or artifacts survived, so the underlying memory, disk, CPU, network, or runner-termination trigger cannot be recovered from that run. Follow-up to NVIDIA#6744 and NVIDIA#6724. The source nightly had seven red jobs. A same-SHA rerun cleared the two accepted flakes, `hermes-shields-config` and `gateway-guard-recovery`, leaving five release blockers: `openshell-version-pin`, `shields-config`, `mcp-bridge`, `rebuild-hermes`, and `channels-stop-start (hermes)`. This PR fixes the two reproducible fixture defects, repairs the MCP phase evidence, and instruments the Hermes rebuild runner loss. `mcp-bridge` failed when Docker `stop` exceeded its 30-second client timeout after a successful image build, while `channels-stop-start (hermes)` was externally canceled before any assertion or artifact; neither has evidence for a causal retry or timeout change, so both still require a fresh green candidate run or a reproducible product defect. ## Changes - Model `tar -tzf`, `tar -tvzf`, and extraction in the hermetic OpenShell version-pin fixture so the installer can validate fake release archives before extracting them. - Restore Shields lockdown after the duplicate-down rejection assertion and register a strict relock cleanup that reports a failed command or missing lockdown confirmation before continuing destruction. - Parse modern `NAME CREATED PHASE` OpenShell rows with the shared sandbox-list parser so MCP Docker-patch diagnostics report `Provisioning` instead of the creation date, while retaining the canonical terminal `Evicted` phase. - Emit a one-minute Hermes rebuild heartbeat from setup through cleanup with the active phase, child-output age, memory, process RSS, workspace disk, and load average. The output observer records timestamps only and never forwards command output or credentials. - Map the changed OpenShell and Hermes live targets to their fast PR coverage in the mock/live parity manifest. - Keep installer recovery behavior, the 30-second destructive Docker-operation timeout, Shields behavior, sandbox destruction, and Hermes rebuild behavior unchanged; the 90-minute workflow limit and 45-minute rebuild-command limit are unchanged. - Keep the underlying `mcp-bridge` Docker timeout and `channels-stop-start (hermes)` cancellation as explicit green-evidence blockers instead of masking them with retries. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: all changes are internal E2E fixture, diagnostic, and parity corrections; no user-facing CLI, policy, lifecycle, installer, or Hermes contract changes. - [x] 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: the Shields security E2E target and secret-safe Hermes diagnostics changed; review is pending on the current revision and no waiver is requested. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: no waiver is requested; required PR CI is pending. ## Verification - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — OpenShell version-pin live fixture (3/3); focused archive-safety installer tests (9/9); MCP Docker-patch and shared phase parsing (29/29); Hermes progress and cleanup tests (15/15); mock/live parity guard; Vitest project membership; source-shape check; CLI typecheck and build; Shields and Hermes live target collection. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: not applicable to narrow live-target fixture and diagnostic changes. An exploratory local E2E-support run passed 979 tests and hit 15 environment-specific failures (macOS Bash behavior, Node 26 warning output, and nested-run timeouts); required Linux CI remains authoritative. - [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) - [ ] 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) --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved sandbox status detection across modern list output formats, including evicted sandboxes. - Improved cleanup behavior so shield restoration failures are reported while subsequent cleanup continues. - Strengthened shield-state handling during test teardown. - **User Experience** - Added clearer progress and activity reporting during lengthy Hermes rebuild operations. - **Tests** - Expanded coverage for installer version pinning, sandbox lifecycle states, cleanup ordering, and rebuild progress reporting. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Broaden the live Shields cleanup assertion to accept the existing idempotent `Lockdown is already active.` success response. The cleanup still requires exit code 0, so real restore failures remain failures while a valid no-op restore is no longer misclassified. ## Changes - Accept both successful `shields up` responses in the `shields-config` cleanup callback. - Keep the existing exit-code assertion as the authoritative success boundary. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This changes only a live E2E assertion for two existing success messages; the documentation-writer review found no user-facing contract change. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: The assertion remains gated by exit code 0 and accepts only the two success messages already emitted by `shields up`; no production Shields behavior changes. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [ ] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Improved end-to-end test reliability by accepting both valid messages when restoring shield protection during cleanup. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary The PR advisor showed the same E2E jobs as recommended coverage and recommended selectors. Its output and maintainer guidance also used modifiers that did not change the meaning. This change shows each E2E job once and uses plain, consistent language across the advisor and skills. The fork maintainer path now states explicitly that approval records a credentialed-E2E skip: fork code does not run with repository secrets, and skipped jobs are never described as passing. ## Changes - Show one `Recommended E2E` list and one `Optional E2E` list in comments and summaries while keeping coverage and selector data separate in JSON. - Use `Blocker`, `Warning`, and `Suggestion` consistently, with shorter next-action, footer, prompt, and model-lane wording. - Remove redundant uses of `comprehensive`, `thorough`, `exact`, and `exactly` from skills, contributor guidance, and the advisor. - Rename the internal changed-test evidence field from `exactHeadCredentialFreeTests` to `changedCredentialFreeTests`; the evidence still binds each changed test to the analyzed head SHA. - Replace `exact-head` terminology with `head`, `PR head`, or `current head` where the sentence needs that distinction. - Update the advisor README, PR template, packaged skills, workflow fallback, schema, budgets, and focused tests. - Rename the protected environment and manual fallback to say they approve skipping credentialed E2E for a fork PR, and explain why **Review deployments** may be absent. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: The maintainer-facing README, runbook, and skills were updated. A documentation audit found no published user docs that expose these labels or need a docs/ change. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Advisor workflow-boundary, provenance, security-boundary, and E2E controller tests passed. The workflow edit changes names, messages, and controller identifiers only; it does not change permissions, secret exposure, or execution behavior. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — latest rerun: 106 E2E gate and maintainer-skill tests passed; earlier advisor and skill suites passed as recorded in prior commits. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * PR reviews now present consolidated Recommended and Optional E2E guidance, with duplicate recommendations removed and long lists summarized. * Fork pull requests can record approved credentialed E2E skips with clearer statuses and approval messaging; skipped checks are not reported as passed. * **Bug Fixes** * Improved validation and handling for stale, mismatched, or missing E2E skip approvals. * **Documentation** * Updated review, E2E skip, release, contributor, and maintainer guidance to reflect the revised workflows and terminology. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
…allback (NVIDIA#6099) (NVIDIA#6833) ## Summary `nemoclaw onboard` still deletes a healthy sandbox after "forward did not appear in list within 180000ms" in NemoClaw v0.0.81 even previous fix NVIDIA#6116 is merged. One reproducible case is when the host's ssh config applies `ControlMaster auto` to the sandbox host: the spawned ssh client delegates its `-L` forward to the ControlMaster mux daemon and exits, and openshell 0.0.72+ reports that exit as `ssh exited before local forward listener opened` — a diagnostic the untracked-forward fallback regex does not match (due to openshell's [recent code change in crates/openshell-cli/src/ssh.rs#419](NVIDIA/OpenShell@ffc102a#diff-167ac902da19cb5c4bb003b4fcb65fa70b8877fd8ae54d034d6baf070ea18ad1R419)), so the live-port probe never runs. After this change the fallback recognizes the untracked port-forward and confirms the forward via the existing live-port probe instead of rolling back. ## Related Issue Fixes NVIDIA#6099 ## Changes - Extend `looksLikeUntrackedForward()` in `src/lib/onboard/forward-start.ts` to also match the openshell 0.0.72 diagnostic variants (`ssh exited before local forward listener opened`, `local forward listener was not reachable`), and document the ControlMaster mux-delegation mechanism. Confirmation still requires the live-port probe, and the EADDRINUSE conflict check still runs first, so a genuinely failed ssh (no listener) keeps timing out exactly as before. - Add tests: regex unit coverage for the new diagnostic, an end-to-end helper test confirming `ok-port-live` for a mux-delegated forward with a live port, and a negative test proving the same diagnostic without a live port still times out. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: internal forward-confirmation fallback; no user-facing docs describe the openshell diagnostic text. - [x] 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: requesting maintainer sensitive-path review (onboarding forward confirmation). The change does not weaken the gate: the fallback still requires openshell's own failure notice AND a live local listener, and the port-conflict check retains precedence. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: `npx vitest run --project cli src/lib/onboard/forward-start.test.ts` → 27 passed (24 existing + 3 new) - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] Doc pages follow the style guide (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) ## Reproduction evidence A/B verified on a clean macOS 26.5 / Colima (aarch64) host with nemoclaw v0.0.81 + openshell 0.0.72: - Control (no ControlMaster): onboard succeeds first-try; both forwards tracked in `openshell forward list`. - With `Host *` / `ControlMaster auto` + `ControlPersist 600` in `~/.ssh/config`: onboard fails with the exact NVIDIA#6099 signature and deletes the sandbox. Captured mid-failure: the ControlMaster mux daemon (`ssh: ~/.ssh/sockets/<user>@sandbox-22 [mux]`, ppid 1) holds `127.0.0.1:18789 LISTEN`, the dashboard answers HTTP 200, while `openshell forward list` stays empty — the exact condition the extended fallback now confirms. - A manual foreground `openshell forward start -d 127.0.0.1:18999 <sandbox>` in the same state errors with `ssh exited before local forward listener opened on 127.0.0.1:18999` while the mux picks up the port anyway, confirming the diagnostic text this PR adds to the regex. A complementary root-cause option (out of scope here) is for openshell to spawn its forward ssh with `-o ControlMaster=no -o ControlPath=none`, which would also keep `forward list` tracking accurate under multiplexed ssh configs. --- 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: Tedy Yu <tedyy@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved SSH port-forward startup detection for ControlMaster and other delegated connection scenarios. * Forwarding now correctly succeeds when the local listener is active, even if the forward list is temporarily empty or SSH reports a listener diagnostic. * Improved handling of inactive listeners so the system continues waiting and reports a timeout appropriately. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Tedy Yu <tedyy@nvidia.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
<!-- markdownlint-disable MD041 --> ## Summary The corporate proxy CA baked by the onboard opt-in (NVIDIA#6210) was decoded only late in the sandbox image build — after the OpenClaw/mcporter reinstall path — and `NODE_EXTRA_CA_CERTS` was never set at build time. Behind a TLS-intercepting corporate proxy the `npm audit signatures` step then failed to fetch the sigstore TUF root and aborted the build with `SELF_SIGNED_CERT_IN_CHAIN`. This moves the CA decode ahead of the reinstall path and exports `NODE_EXTRA_CA_CERTS` for the whole final build stage, so build-time TLS traverses the operator proxy exactly as runtime already does. ## Related Issue Fixes NVIDIA#6839 ## Changes - `Dockerfile`: moved `ARG NEMOCLAW_CORPORATE_CA_B64` and the CA decode/validate `RUN` to the top of the final stage, so the decoded `corporate-ca.pem` exists before the OpenClaw/mcporter reinstall `RUN` (which runs `npm audit signatures`). The decode block text is unchanged, so the existing decode-guard contract still applies. - `Dockerfile`: added a final-stage `ENV NODE_EXTRA_CA_CERTS=/usr/local/share/nemoclaw/corporate-ca.pem`. Node ignores a missing file, so this is a no-op when no CA is baked; `scripts/nemoclaw-start.sh` still overrides it at runtime with the merged OpenShell + corporate bundle. Signature and integrity verification are unchanged — this only adds a transport trust anchor. - `test/corporate-ca-build-tls-anchor.test.ts`: new contract test pinning that the ARG, the decode `RUN`, and the anchor `ENV` all precede the reinstall `audit signatures` step, and that exactly one corporate CA build arg exists (the onboard patch's single replace target). The real failure only reproduces against a full image build behind a TLS-intercepting proxy, so this asserts the shipped build ordering rather than a runtime path — registered as two `security` source-shape contract exceptions in `ci/source-shape-test-budget.json`. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: restores the intended NVIDIA#6210 corporate-CA behavior on the image-build path; no new user-facing surface or option is introduced. - [x] 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: requesting maintainer review — change is confined to the sandbox image build trust path; it only makes the operator's own public CA (already baked for runtime) available to build-time TLS. Package signature and integrity checks still run end to end. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: `vitest run --project integration test/corporate-ca-build-tls-anchor.test.ts test/corporate-ca-dockerfile-decode.test.ts` → 16 passed; `vitest run --project cli src/lib/onboard/dockerfile-patch-corporate-ca.test.ts` → 6 passed; `npm run source-shape:check` → cases=0, invalid=0. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- Signed-off-by: Tinson Lai <tinsonl@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added optional corporate proxy CA support for secure TLS connections during image builds and runtime. * Corporate CA certificates are validated, securely stored, and automatically trusted when provided. * **Tests** * Added coverage to verify corporate CA configuration and TLS trust setup occur in the required order. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Tinson Lai <tinsonl@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Consolidates hermetic Vitest coverage into the existing CLI shard matrix so PR and `main` CI have fewer independent lanes to reason about. Retires the duplicate mock Ollama shell lane and standalone live-workflow alias while keeping the real `ollama-auth-proxy` target available through the canonical E2E workflow. ## Changes - Include the `e2e-support` Vitest project and changed-live-E2E mock-parity validation in the eight shared CLI coverage shards. - Preserve the base-trusted PR action boundary with a bootstrap in `.github/workflows/pr.yaml`: the current PR and PRs targeting older bases run `e2e-support` directly only when the trusted base action does not advertise that project. A direct action replacement is insufficient because PR-authored composite actions cannot be executed with the base workflow's trust. `test/pr-workflow-contract.test.ts` protects the capability probe, bootstrap conditions, full-history checkout, and steady-state shared action. - Retire `test/e2e-ollama-proxy.sh` in favor of the existing handler Vitest, adding the one missing unauthenticated `POST /api/tags` assertion. - Remove the standalone `ollama-proxy-e2e.yaml` alias; the live `ollama-auth-proxy` target remains selectable through `.github/workflows/e2e.yaml`. - Remove the duplicate direct skill-frontmatter Vitest invocation from static checks because the integration project is already collected by the CLI shards. - Update shard balancing/contracts and internal E2E contributor documentation. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: User-facing runtime behavior is unchanged; internal E2E contributor docs were updated for the new CI routing. - [x] 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: Pending maintainer review of the CI trust-boundary change; base-trusted action execution remains intact and is covered by a security-classified workflow contract. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: Not applicable. ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `38` integration contract/handler/shard tests and `4` E2E-support retirement tests passed. - [x] Applicable broad gate passed — `npm test`: 1,504 files / 17,105 tests passed; `npm run check`: all pre-commit/manual checks and coverage ratchets passed. - [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) — passed with 0 errors and 2 existing Fern warnings. - [ ] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) — not applicable to internal `test/e2e` contributor docs; markdownlint passed. - [ ] New doc pages include SPDX header and frontmatter (new pages only) — no new doc pages. --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **CI Improvements** * Integrated E2E support coverage and Ollama proxy checks into existing CLI test shards. * Improved coverage validation for pull requests and main-branch builds. * Removed redundant standalone E2E workflow jobs and legacy shell-based checks. * Added validation to detect mismatches in live E2E mocks. * **Bug Fixes** * Added coverage ensuring unauthenticated Ollama API requests are rejected. * **Documentation** * Updated E2E testing guidance and CI workflow documentation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Carlos Villela <cvillela@nvidia.com>
…DIA#6860) ## Summary The atomic DCode rebuild gate probes the sandbox's recorded OpenAI-compatible route before making changes. Its Chat Completions payload hard-coded `max_tokens`, so rebuilds configured with GPT-5 or o-series models could fail with HTTP 400 before rebuild processing began. This PR makes that rebuild-only probe use the shared model-aware token-field resolver. It does not change the managed gateway's ongoing route-health validation. ## Scope `preflightRebuildInferenceRoute` is called only by the DCode rebuild preflight. This PR intentionally does not change the managed gateway's ongoing route-health validation or claim broader runtime behavior. ## Changes - Resolve the Chat Completions reply-budget field with `resolveMaxTokensField(input.model)`. - Send `max_completion_tokens` for GPT-5 and o1/o3/o4 model families. - Preserve `max_tokens` for models that support the legacy field. - Cover GPT-5, o-series, and legacy-model behavior at the rebuild-preflight command boundary. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior - justification: - [ ] Tests not applicable - justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable - justification: internal rebuild inference preflight behavior; no user-facing contract changed. - [x] 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 `Signed-off-by:` lines and every commit is signed - [x] `npm run check:diff` - [x] `npm run build:cli` - [x] `npm run typecheck:cli` - [x] `npx vitest run --project cli src/lib/actions/sandbox/rebuild-inference-preflight.test.ts` - 7 passed - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed Signed-off-by: Tinson Lai <tinsonl@nvidia.com> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved inference preflight checks for newer GPT-5 and o-series models by using the correct completion token parameter. * Preserved compatibility with legacy models by continuing to use their supported token limit parameter. * Added coverage to verify request payloads use the appropriate field for each model type. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Tinson Lai <tinsonl@nvidia.com> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Jetson workflow mutation tests now validate the runner-dispatch boundary in memory instead of serializing a 249 KB workflow and running the full aggregate validator for every mutation. This keeps `e2e-support` in the combined CLI coverage shards while removing the operation that exceeded the five-second test budget under CI contention. ## Changes - Add `validateJetsonRunnerDispatchBoundary` as the shared consumer of the existing Jetson workflow input, selector, routing, and guard checks; the aggregate E2E workflow validator continues to invoke it. - Route focused Jetson mutations through that in-memory boundary instead of temporary YAML files and repeated whole-workflow validation. The current requirement is the combined coverage shard introduced in NVIDIA#6857, and `jetson-workflow-boundary.test.ts` protects the direct and aggregate validator paths. - Leave artifact-upload and Docker-auth cleanup contracts with their dedicated validators and tests rather than duplicating those cross-cutting assertions in the Jetson dispatch test. - Reduce the previously failing coverage-mode mutation from 1.35 seconds to 118 milliseconds locally. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: Internal test-harness optimization; no CLI behavior, workflow behavior, contributor command, or user-facing contract changes. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: No runtime runner path changed. The aggregate validator still invokes the same Jetson input, selector, routing, and dispatch-guard checks, and the complete E2E support suite passes. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project e2e-support`: 116 files and 1,000 tests passed; focused CI-style V8 coverage run: 3 tests passed and the mutation completed in 118 ms. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Updated end-to-end workflow validation to check Jetson GPU dispatch boundaries directly and consistently. * Refined expected validation results to focus on runner queue settings and dispatch guard ordering. * **Refactor** * Consolidated workflow boundary checks, reducing duplicate validation paths and improving test reliability. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary Adds a DGX Spark-specific warning when onboarding selects an already-running vLLM server that appears to serve a large unquantized model. This gives operators headroom guidance before agent/tool load can surface as `NVRM NV_ERR_NO_MEMORY`, SSH loss, or a hard host freeze. The warning is limited to bring-your-own vLLM servers and is suppressed for the managed Spark vLLM handoff, so NemoClaw's validated managed recipe does not warn on itself. ## Changes - Detect DGX Spark during existing vLLM onboarding and warn for large unquantized model IDs, including reported `max_model_len` when vLLM exposes it. - Thread a `managedInstall` option through the managed vLLM flow so the BYO-server warning is not emitted after `install-vllm` succeeds. - Document DGX Spark local vLLM headroom triage and the distinction between host freezes and agent tool-call hangs. - Add targeted CLI tests for the Spark warning, managed-path suppression, quantized model exclusion, numeric large-model threshold behavior, and managed vLLM option handoff. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: self-reviewed as a warning-only onboarding/inference guardrail; no credential, policy, sandbox, or vLLM launch behavior changes. Targeted tests cover warning, suppression, and quantized exclusion. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable — `npm run check:diff` passed on DGX Spark Linux after building the plugin/CLI artifacts required by CLI typecheck. - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project cli src/lib/onboard/setup-nim-vllm.test.ts src/lib/onboard/setup-nim-flow.test.ts` passed, 22 tests. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [x] `npm run docs` builds without warnings (doc changes only) — passed on DGX Spark Linux with 0 errors; Fern emitted only the existing upgrade notice. - [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) Additional validation: - `npx @biomejs/biome check src/lib/onboard/setup-nim-vllm.ts src/lib/onboard/setup-nim-vllm.test.ts src/lib/onboard/setup-nim-flow.ts src/lib/onboard/setup-nim-flow.test.ts src/lib/onboard.ts` passed. - `npm run typecheck:cli` passed locally after build artifacts were present. - `npm run docs:check-agent-variants` and `npm run docs:check-routes` passed locally; Fern check returned 0 errors. - DGX Spark runtime evidence: a manually operated vLLM serving `Qwen/Qwen3.6-35B-A3B` with a very long context and high memory utilization left minimal unified-memory headroom and had prior `NVRM NV_ERR_NO_MEMORY` logs. Restarting with a smaller envelope allowed a smoke request to complete without freezing, which matches the warning/troubleshooting scope. --- Signed-off-by: HwangJohn <angelic805@gmail.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added DGX Spark troubleshooting guidance for host freezes / `NVRM NV_ERR_NO_MEMORY` from risky local vLLM setups, with recovery steps and advice to prefer the managed Spark path. * Clarified managed vLLM labeling and behavior when port `8000` is already in use. * **New Features** * DGX Spark onboarding now warns about high-risk existing local vLLM instances and suppresses the warning for managed vLLM. * Managed vLLM onboarding is safer when a server is already running, including Spark-specific handling. * **Tests** * Expanded coverage for DGX Spark warnings, suppression, managed-vs-existing detection, and port-conflict flows. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: HwangJohn <angelic805@gmail.com> Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
…lure (NVIDIA#6867) <!-- markdownlint-disable MD041 --> ## Summary During `nemoclaw onboard`, choosing "Other OpenAI-compatible endpoint" and entering a DNS-unreachable base URL (`https://example.invalid/v1`) failed the SSRF preflight and **silently looped back to provider selection** — no probe guidance, no retry/back/exit prompt, no clean exit. This PR routes an unreachable endpoint through the existing transport-recovery path (DNS/VPN/URL hint + retry/back/exit + exit), matching the credential-failure path. The safety property is unchanged: no sandbox is created. Closes NVIDIA#6854. ## Reproduction Exercised the real compiled recovery path on our DGX Spark aarch64 test host (matching the reporter's DGX Spark aarch64), driving `validateCustomOpenAiLikeSelection` against a host that does not resolve and capturing the recovery classification handed to the prompt. **Environment** - Test machine: our DGX Spark aarch64 test host (GB10 GPU), Ubuntu 24.04 - NemoClaw `main` (v0.0.82) **Observed on `main` (before fix)** ``` recovery.kind = unknown # -> promptValidationRecovery falls through to the # silent "Please choose a provider/model again" # branch and loops back to provider selection ``` **Observed on `fix/...` (after fix)** ``` recovery.kind = transport # -> "Validation could not resolve the provider # hostname. Check DNS, VPN, or the endpoint URL." # + "Type 'retry', 'back', or 'exit'" ``` ## Analysis `preflightCustomEndpointOrFail` (`src/lib/onboard/inference-selection-validation.ts`) builds a synthetic probe failure for an SSRF-preflight failure with `curlStatus: 0` and `httpStatus: 0`. `classifyValidationFailure` has no status to key on, so it returns `kind: "unknown"` (retry: "selection"), and `promptValidationRecovery` takes its final else-branch — printing "Please choose a provider/model again" and returning to the menu with no guidance and no exit option. The credential path and every real transport failure (curl exit 6/7/28, HTTP 429/5xx) instead get `getTransportRecoveryMessage` + a retry/back/exit prompt. A DNS-unreachable endpoint is genuinely a transport failure, but the synthetic failure never carried that signal. ## Fix When the preflight reason is a host-resolution failure (`cannot resolve endpoint host …` / `did not resolve to any address`), mark the synthetic failure with curl's "could not resolve host" status (6). It then classifies as `transport` and routes through the existing transport recovery — which already emits the "Check DNS, VPN, or the endpoint URL" hint (curl 6 branch) and the retry/back/exit prompt with a clean exit. A private-IP SSRF block keeps status 0 (it resolved fine; the address is just refused), so that path is unchanged. No new recovery UI is added — the fix reuses the existing transport contract. ## Changes - `src/lib/onboard/inference-selection-validation.ts`: classify an unresolved-host SSRF-preflight failure as a transport failure. - `src/lib/onboard/inference-selection-validation.test.ts`: regression test that an unreachable endpoint yields a transport recovery. ## Type of Change - [x] Code change (feature, bug fix, or refactor) ## Verification - [x] `npm test` passes (touched files) - [x] Tests added or updated for new or changed behavior - [x] No secrets, API keys, or credentials committed ## AI Disclosure - [x] AI-assisted — tool: Claude Code Signed-off-by: Yanyun Liao <yanyunl@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved validation for custom OpenAI-compatible endpoints when DNS/host resolution fails. * Unreachable endpoints are now classified as transport failures, triggering the appropriate recovery flow instead of being treated as blocked/unsafe. * Continued to keep separate handling for endpoints that resolve to private or internal network addresses. * **Tests** * Added coverage to confirm DNS-style failures are detected as transport issues and follow the expected recovery path. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Yanyun Liao <yanyunl@nvidia.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
<!-- markdownlint-disable MD041 -->
## Summary
Repository checks now invoke Windows `.cmd` shims through `cmd.exe`
instead of spawning the shim directly. This keeps `npm run checks`
usable on Windows where direct `spawnSync('*.cmd')` returns `EINVAL`,
while leaving POSIX execution direct.
## Changes
- Split `scripts/checks/run.ts` into testable invocation helpers while
preserving the existing check list and script entry point.
- Route Windows check commands as `cmd.exe /d /s /c <shim> ...args` so
`tsx.cmd` can run under Node on Windows.
- Add integration coverage for Windows shim invocation, POSIX direct
invocation, and null-status failure handling.
## Type of Change
- [x] 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)
## Quality Gates
<!-- Check exactly one tests line and one docs line. Check other lines
when applicable. Add every requested justification or approval
reference. -->
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: contributor validation
tooling behavior changed, but no command syntax, documented workflow, or
user-facing CLI behavior changed.
- [ ] 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
<!-- Check each applicable item only when supported by the requested
evidence. Run targeted tests once per relevant change set and rerun
after later edits or hook autofixes that can affect the tested behavior.
Do not rerun hook-covered checks. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: DGX
Spark/Linux: `npx vitest run --project integration
test/checks-runner.test.ts` passed; Windows local mechanism check showed
direct `spawnSync('npm.cmd')` returns `EINVAL` while `cmd.exe /d /s /c
npm.cmd --version` exits 0.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: DGX Spark/Linux `npm run
checks`, `npm run typecheck:cli`, and `npm run check:diff` passed. `npm
run check` was attempted but the host lacks `hadolint`, and the separate
all-files manual coverage stage exceeded the 10-minute local timeout; no
broad-gate success is claimed.
- [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)
- [ ] 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)
---
<!-- DCO sign-off is required in this PR description, and every commit
must appear as Verified in GitHub. Run: git config user.name && git
config user.email -->
Signed-off-by: HwangJohn <angelic805@gmail.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved cross-platform execution of project checks, including
reliable Windows command handling via `ComSpec`/cmd.exe routing.
* Ensured failed or incomplete checks correctly trigger error exit
codes.
* **Refactor**
* Check execution was reworked into reusable, exported runner utilities
with injectable spawn/exit behavior while preserving CLI behavior.
* **Tests**
* Added coverage for Windows and POSIX invocation building, environment
handling, output forwarding, and failure-path exit behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Signed-off-by: HwangJohn <angelic805@gmail.com>
<!-- markdownlint-disable MD041 --> ## Summary Skill install upload failures now point users at the common shields-up cause instead of reporting only the failed filenames. The hint stays conditional, so unrelated upload failures are not reported as definitely caused by shields. ## Related Issue Fixes NVIDIA#6859 ## Changes - Print a recovery hint after `skill install` upload failures explaining that skill uploads write to a directory locked while shields are up. - Tell users to run `nemoclaw <sandbox> shields down` before installing skills when shields are up. - Add action-level regression coverage for the upload failure message and post-install short-circuit. ## Type of Change - [x] 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) ## Quality Gates <!-- Check one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: this is a narrow runtime error-message improvement for an existing command and does not change command usage, options, defaults, or documented workflows. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: self-review of sandbox action behavior; the change only adds guidance after an upload failure and does not alter upload, shields, permission, or sandbox mutation logic. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: DGX Spark/Linux: `npx vitest run --project cli src/lib/actions/sandbox/skill-install.test.ts` passed; `npm run check:diff` passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: HwangJohn <angelic805@gmail.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved error messages when skill uploads fail by providing guidance to lower shields before retrying. * Prevented post-install steps from running after an unsuccessful upload. * **Tests** * Added coverage for failed skill uploads, including error details and recovery guidance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: HwangJohn <angelic805@gmail.com>
<!-- markdownlint-disable MD041 --> ## Summary On macOS, `nemohermes connect` failed to write the managed Hermes light terminal skin: the skin helper passed a multi-line shell script as a `sh -c` argument, and OpenShell's macOS exec rejects command arguments containing a newline or carriage return. The write and remove helpers now stream the script over stdin via `sh -s`, so the skin is written as intended on macOS while Linux behaviour stays unchanged. ## Related Issue Fixes NVIDIA#6834 ## Changes - `writeHermesLightSkinFile` and `removeHermesLightSkinFile` now invoke `openshell sandbox exec ... -- sh -s` with the script supplied on stdin (`input`) and stdin piped, instead of `sh -c "<multi-line script>"`. This mirrors the existing stdin pattern already used in `tunnel/sandbox-gateway-stop.ts`. - Updated the `connect-hermes-light-theme` test harness helpers and mock arms to read the script from the exec stdin rather than the `-c` argv slot. - Added a regression test asserting the forwarded argv is exactly `sh -s`, no argv element carries a newline or carriage return, and the multi-line script travels over stdin. ## Type of Change - [x] 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) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: internal exec-transport fix; no user-facing behaviour, CLI surface, flags, or output change (the skin is written as originally intended). - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: transport-only change (exec argv `-c` → stdin `sh -s`); the executed script is byte-identical and still runs as the sandbox user, with no change to privileges, credentials, or network surface. Requesting maintainer sensitive-path review. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: `npx vitest run src/lib/actions/sandbox/connect-hermes-light-theme.test.ts` → 11/11 passed - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- Signed-off-by: Tinson Lai <tinsonl@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved the reliability and security of Hermes light-skin setup and cleanup operations. * Prevented multi-line shell scripts and sensitive values from appearing in command arguments or logs. * Strengthened failure handling when applying or removing the light skin, while preserving existing cleanup behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Tinson Lai <tinsonl@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Julie Yaunches <jyaunches@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Long-running Hermes rebuild probes currently retain every stdout and stderr byte until the child exits. If a Docker or OpenShell command wedges and becomes noisy, that lets the test process grow without bound on the hosted runner; runner loss then prevents the final log and artifact upload steps from running. Retain a redacted 4 MiB diagnostic tail per stream for only the five long Hermes rebuild commands. Other `ShellProbe` consumers keep their existing unlimited capture behavior. ## Changes - Add an opt-in per-stream byte limit to the E2E `ShellProbe` fixture. - Preserve the newest diagnostic output, report how many earlier bytes were omitted, and apply the existing redaction before returning or writing artifacts. - Apply the limit to Hermes install, old/current Docker builds, old sandbox creation, and `nemoclaw rebuild`. - Cover bounded stdout/stderr, diagnostic-tail preservation, artifact parity, and secret redaction in the E2E support suite. ## Failure evidence - The last successful normal rebuild was Actions run 29306093311 attempt 1 at `b85f5b29` (16m38s). - The next normal rebuild in run 29307095519 at `4f64b0ac` lost its hosted runner after 50 minutes. No Hermes rebuild code, Dockerfile, `ShellProbe`, pinned Hermes version, or E2E workflow changed between those revisions. - Run 29313003676 later lost both rebuild runners after 49 and 60 minutes. GitHub reported runner communication loss; neither failed job produced logs or an artifact. - Successful rebuild artifacts contain small normal-path output. This change fixes the concrete unbounded-memory amplifier without claiming that the unavailable failure evidence proves which host resource was exhausted. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: required documentation-writer review confirmed this is internal E2E capture behavior with no CLI, configuration, API, policy, or user-facing rebuild contract change. - [ ] 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] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project e2e-support test/e2e/support/e2e-redaction-entry.test.ts test/e2e/support/rebuild-hermes-progress.test.ts test/e2e/support/hermes-workflow-boundary.test.ts` (48 passed); Biome, exact Vitest project membership, and `npm run typecheck:cli` also passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: not applicable to this opt-in live-target fixture safeguard; required CI remains authoritative. - [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) - [ ] 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) --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added configurable stdout/stderr capture limits for shell-command probes, including persisted artifacts. - When output is truncated, an omission marker is shown while preserving a redacted tail. - **Bug Fixes** - Improved truncation-aware redaction, including safer diagnostics when a probe fails to spawn. - **Tests** - Added E2E coverage for high-volume output truncation, redacted tail preservation, and exact artifact contents. - Added E2E coverage for rejecting invalid capture limit values. - Capped capture sizes in the long-running Hermes rebuild flow for stability. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
…VIDIA#6856) ## Summary On the re-onboard **reuse** path, the Balanced-tier default preset `brave` (Brave Search API access) was silently dropped even when the policy tier (Balanced) and the web-search choice (No web search) were unchanged. The other four Balanced defaults (`npm`, `pypi`, `huggingface`, `brew`) persisted — only `brave` was narrowed out of the reapplied set, removing its egress (`api.search.brave.com`). Fixes NVIDIA#6844. ## Root cause `isStaleBuiltinWebSearchPolicyPreset` treats `brave`/`tavily` as a stale web-search leftover whenever no matching web-search provider is configured. It did not account for the fact that the same preset is *also* a default egress preset of the tier being applied. On reuse, `preparePolicyPresetResumeSelection` pruned `brave` under this rule, flipping `recordedPolicyPresetsNeedReconcile` and driving a reapply whose set omitted `brave`. ## Fix A preset that is a default of the **applied tier** is a tier egress default, not a stale web-search leftover. The exemption is expressed through the existing `classifyPresetProvenance` classifier (`source: "tier"`), so pruning and the `policy-list` display share a single notion of *why* a preset is present rather than a second, parallel one. It is threaded through both reuse/resume prune sites (`preparePolicyPresetResumeSelection` and `createUnavailablePolicyPresetPruner`). Scoped to the reuse/resume path. **Fresh-onboard suggestion behaviour is intentionally unchanged**: a fresh *suggested* onboard omits `brave` egress unless web-search is chosen (conservative egress by design — see `onboard-policy-suggestions.test.ts`), which is not part of this reuse regression. ### Design annotation - **invalidState**: on reuse, an already-applied tier-default egress preset (`brave`/`tavily` on Balanced/Open) is pruned as a stale web-search leftover and its egress narrowed, on an unchanged tier. - **sourceBoundary**: `isStaleBuiltinWebSearchPolicyPreset` — the single predicate all reuse/resume prune sites share. - **whyNotSourceFix**: preset provenance is intentionally *not* persisted (`preset-provenance.ts` is display-only by design); we reuse its classifier rather than reverse that decision with a persisted-state refactor. - **regressionTest**: `policy-resume-selection.test.ts` — preserve on Balanced, still-prune on Restricted, keep-with-switched-provider, prune-non-tier-default. - **removalCondition**: if preset provenance ever becomes persisted per-preset, replace the current-tier inference with the stored source. ### Behaviour preserved (boundaries) - **Restricted tier** lists no `brave`/`tavily` default → a genuinely stale preset there is still pruned. - A **non-tier-default** web-search preset (e.g. `tavily` on Balanced with no matching provider) is still pruned — the exemption is scoped to real tier defaults, not "any `brave`/`tavily`". - **Provider switch** (brave → tavily) still replaces the stale provider and adds the newly active one. - **Unknown / non-canonical recorded tier** fails safe (`getTier` → null → not `"tier"` → not exempt → prior behaviour), so the authoritative-rebuild-tier-pending case does not throw. ## Testing - `policy-resume-selection.test.ts` covers the full contract above; the broader onboard policy/tier/preset suites pass (213 tests across 15 files); `build:cli` + `typecheck` green. - **End-to-end on both arches**, on `main`, onboarding a local Ollama sandbox (loopback route, so onboarding is not blocked by the endpoint SSRF preflight): - **x86_64** (our Ubuntu 24.04 no-GPU test host) and **aarch64** (our DGX Spark GB10 GPU test host — matching the reporter's DGX Station architecture). - **Before the fix:** reuse reapply = `npm, pypi, huggingface, brew` → `Removed preset: brave` → brave inactive. - **After the fix:** reuse reapply = `npm, pypi, huggingface, brew, brave` → brave stays active (`[from balanced tier]`), no egress narrowing. Signed-off-by: Yanyun Liao <yanyunl@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Preserved built-in web-search and egress presets based on the recorded tier during policy resume and reconciliation. * Prevented tier-default presets from being incorrectly pruned when resuming, including when web search is disabled or uses a different provider. * Ensured reconciliation still removes unavailable, non-default presets that don’t match the active tier’s defaults. * **Tests** * Added coverage for tier-default preservation across resume selection and reapply behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Yanyun Liao <yanyunl@nvidia.com> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 -->
## Summary
DGX Station GB300 OEM systems now enter the DGX Station express-install
path. Managed vLLM storage preflight is also narrowed to the Docker
image pull: it blocks only for a verified shortage, recognizes both
default Linux socket spellings, and no longer aborts express onboarding
when capacity is inconclusive.
## Proof of test
### Happy case
```
[3/8] Configuring inference provider
──────────────────────────────────────────────────
[non-interactive] Provider: install-vllm
vLLM (DGX Station):
Image: nvcr.io/nvidia/vllm@sha256:9204569b17ee4c0eff75194b8e6e458479c8aee18953b5ab9cf359fcdac659e2
Model: deepseek-ai/DeepSeek-V4-Flash
Image download on first run, cached after
Model download on first run, cached after
Installing vLLM. Progress will print below.
==> Pulling vLLM image: nvcr.io/nvidia/vllm@sha256:9204569b17ee4c0eff75194b8e6e458479c8aee18953b5ab9cf359fcdac659e2
==> nvcr.io/nvidia/vllm@sha256:9204569b17ee4c0eff75194b8e6e458479c8aee18953b5ab9cf359fcdac659e2: Pulling from nvidia/vllm
```
### Shortage of space
```
Installing vLLM. Progress will print below.
Insufficient Docker storage for the managed vLLM image.
Image: nvcr.io/nvidia/vllm@sha256:9204569b17ee4c0eff75194b8e6e458479c8aee18953b5ab9cf359fcdac659e2
Available: 9.7 GiB
Required: approximately 29.8 GiB
Storage: Docker root directory (/mnt/nemoclaw-docker-10g/docker)
Free or expand Docker storage before continuing.
Useful diagnostics:
docker system df
docker info --format '{{.DockerRootDir}}'
Non-interactive setup stops before the guarded download. Set NEMOCLAW_IGNORE_VLLM_DISK_SPACE=1 to override.
[non-interactive] Aborting: vLLM install failed. See errors above.
```
## Related Issue
Closes NVIDIA#6757.
Closes NVIDIA#6858.
## Changes
- Detect product names containing both `Station` and `GB300` as DGX
Station for express install.
- Keep the managed image-size estimate and backend-aware
Docker/containerd capacity probe while removing Hugging Face model-cache
sizing and bind-identity probes.
- Prompt or stop only for a verified Docker image-storage shortage;
continue when capacity cannot be established, and retain the explicit
non-interactive override for known shortages.
- Recognize both `/run/docker.sock` and `/var/run/docker.sock`, and
honor Docker's documented `DOCKER_CONTEXT` precedence.
- Update focused installer/storage tests and user documentation.
## Type of Change
- [ ] Code change (feature, bug fix, or refactor)
- [x] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)
## Quality Gates
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: Full combined-diff
review found no secret, dependency, injection, authentication,
cryptography, privilege, or sandbox-policy issues; Docker context
precedence is covered in both directions.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:
## Verification
- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — installer integration: 7 passed, 1
skipped; focused CLI: 88 passed; focused integration: 38 passed; `npm
run typecheck:cli` passed.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [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) — build
passed with two pre-existing Fern warnings and no errors.
- [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)
---
Signed-off-by: San Dang <sdang@nvidia.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
## Summary by CodeRabbit
* **New Features**
* Added support for recognizing additional DGX Station hardware variants
during installation.
* Added image-focused managed vLLM disk preflight checks before pulling
vLLM images.
* **Bug Fixes**
* Improved Docker image-storage detection with clearer inconclusive
behavior across local configurations.
* Tightened non-interactive and `--yes` / disk-override handling so only
explicitly verified cases can proceed.
* **Documentation**
* Updated vLLM setup guidance and command reference to clarify that
Hugging Face model-cache space is not preflight-estimated.
* **Tests**
* Updated vLLM storage and capacity test coverage to match the new
probing scope.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Signed-off-by: San Dang <sdang@nvidia.com>
Co-authored-by: Julie Yaunches <jyaunches@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Reduce `e2e-support` runtime by removing real timer waits, repeated Vitest and shell subprocess startup, and repeated parsing of the E2E workflow. Under the same V8-coverage profile, the project wall time falls from 17.29 seconds to 11.78 seconds (about 32%) without changing tested behavior. ## Changes - Use fake timers for PID-stability sampling and batch related live-target collection checks into fewer Vitest subprocesses. - Exercise the exported workflow-plan helper directly instead of launching the workflow's shell/TSX wrapper four times. - Parse the E2E workflow once in the aggregate validator, pass the parsed document to focused validators, and validate host-dependency mutations in memory. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: test execution and internal workflow-validation behavior only; commands, selectors, workflow inputs, and user-facing behavior are unchanged. - [ ] 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 a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — full `e2e-support` V8-coverage profile: 253 suites and 997 tests passed; 17.29s before, 11.78s after - [x] Applicable broad gate passed — `npm test`: 1,506 files passed (3 skipped), 17,150 tests passed (40 skipped) - [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) - [ ] 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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Refactor** - Improved end-to-end workflow validation by adding workflow-value (in-memory) checks alongside the existing file-based validation. - Refactored Hermes GPU startup workflow validation to operate on already-parsed workflow content. - Updated workflow planning validation to assert against the shared workflow plan builder output. - **Tests** - Updated E2E host-dependency rules to validate by mutating in-memory workflows directly. - Enhanced live-test gating to support multi-file collection with per-file assertions. - Made PID stability checks deterministic by using mocked timers. - Simplified the E2E workflow test setup by switching to the shared workflow plan builder. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
) <!-- markdownlint-disable MD041 --> ## Summary Adds an independent, opt-in container E2E verifier for the historical OpenClaw security revision image produced by NVIDIA#7276. Normal CI validates the harness contracts; configured live execution checks supported state selectors, the reviewed Slack dependency remediation, transactional state and credential restoration, and fail-closed rejection of a state directory outside `HOME`. ## Related Issue Related to NVIDIA#7272. Validates NVIDIA#7276. PR NVIDIA#7276 must merge before this PR can merge. ## Changes - Add a hermetic-by-default integration contract with an explicitly enabled live Docker lane. - Resolve the configured candidate image to an immutable image ID and run it non-root, read-only, capability-dropped, resource-bounded, and without host mounts or Docker socket access. - Pack the exact integrity-pinned `@openclaw/slack@2026.6.10` archive and verify Axios, `https-proxy-agent`, and `agent-base` remediation across profile, development, and in-home custom-state selectors. - Prove failed post-install remediation restores prior state and credentials, and prove an outside-home state directory is rejected before the original installer runs. - Record structured image identity and assertion evidence for the live run. This PR covers the runtime wrapper and plugin-remediation boundary. The focused tests in NVIDIA#7276 remain responsible for its historical-version, tar-graph, workflow, and multi-architecture contracts. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: test-only verification; no command, flag, default, configuration, API, or policy behavior changes - [x] 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: pending maintainer review - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project integration test/historical-openclaw-security-revision-container-e2e.test.ts` (7 passed, live candidate lane explicitly skipped until configured) - [ ] Applicable broad gate passed — CI pending; local typecheck and repository structural gates passed - [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) - [ ] 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) ## Merge Dependencies Human review can proceed now, but NVIDIA#7294 must not merge until all items below are complete: - [ ] NVIDIA#7276 is merged into `main`. - [ ] Update or rebase NVIDIA#7294 on the resulting `main`. - [ ] Run the opt-in container E2E lane against the exact final image produced by NVIDIA#7276 and record the immutable image digest and passing evidence. --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Added an end-to-end test suite for the “historical security revision” Docker wrapper contract. * Validates reviewed plugin remediation outcomes, evidence output, and approved dependency versions. * Ensures hardened container execution settings and enforces safety checks that reject unsafe state directories. * Covers successful remediation, remediation failure behavior, and safeguards against running the installer in invalid contexts. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Make the coding-agent starter prompt construct non-interactive installs with explicit agent, provider, and release-tag variables. Add tool-neutral Docker approval guidance that keeps escalation command-scoped and preserves the execution-sandbox boundary. ## Related Issue Fixes NVIDIA#7311 ## Changes - Name `NEMOCLAW_AGENT` for every supported agent and pair it with `NEMOCLAW_PROVIDER` during non-interactive command construction. - Document `NEMOCLAW_INSTALL_TAG=vX.Y.Z` on the `bash` side of the installer pipeline and clear any inherited higher-priority `NEMOCLAW_INSTALL_REF`. - Align the environment-variable reference and explicit `lkg` upgrade example with the same install-ref precedence. - Tell a coding agent to use its command-scoped approval flow only for the exact Docker command blocked by its execution sandbox. - Prohibit Docker socket permission changes and broad host access as sandbox workarounds. - Add a regression contract for all three requested variables, release-tag precedence and placement, and the coding-agent Docker approval boundary. - Record the QA detection gap: existing tests protected prompt generation and Deep Agents selection but did not assert the complete install-variable or execution-sandbox contract. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent documentation review confirmed the guidance is coding-agent-neutral, narrowed escalation to Docker commands, required explicit denial behavior, and prohibited socket-permission and broad-host-access workarounds. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: `vitest run --project integration test/starter-prompt-docs.test.ts` passed 18 tests. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) — the command passed with 0 errors and one existing Fern light-mode accent contrast warning outside this diff. - [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) --- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Expanded non-interactive onboarding with explicit agent/provider environment variables and clearer installation version pinning guidance. * Updated precedence rules for install reference vs install tag, including how CLI flags override each. * Added execution-sandbox guidance for when Docker commands are blocked, including narrowly scoped re-approval and what to avoid. * **Tests** * Added a starter-prompt documentation test to verify required environment variables, sandbox approval language, and correct precedence/tag formatting rules. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Co-authored-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Physical validation on one DGX Station GB300 now covers generic Ubuntu 24.04 ARM64, stock DGX OS `7.5.0`, the April 2026 NVIDIA Colossus BaseOS profile, and the June 2026 NVIDIA AI Developer Tools profile, but the platform matrix still classified all Station configurations as Deferred. This change sets the platform status to Tested with limitations and states that dual-Station configurations and dedicated CI coverage remain pending. ## Related Issue Fixes NVIDIA#6951. ## Changes - Set the `DGX OS (Station)` matrix entry to `caveated` while keeping `ci_tested` false. - Record the four qualified single-Station profiles, distinguish clean-host end-to-end results from Station Express validation, and preserve the unvalidated dual-Station boundary in generated and hand-written guidance. - Update the installer disclosure and focused regression checks to use the same platform-status contract. - Repin the immutable DGX Station starter-prompt asset so copied installation guidance uses the same status. - Clarify that v0.0.83 restored the Station express-install path without changing the status that applied to that release. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [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: ## DGX Station Hardware Evidence - [x] Tested on DGX Station - Detailed DGX OS `7.5.0` run tested commit: `7a7414b3d80a9cb38257a276cd926fd48a93ec0e` - Station profiles/scenarios: Generic Ubuntu 24.04 ARM64, stock DGX OS `7.5.0`, April 2026 NVIDIA Colossus BaseOS, and June 2026 NVIDIA AI Developer Tools on one physical DGX Station GB300. - Result: Clean-host end-to-end validation passed on generic Ubuntu and Colossus BaseOS. Stock DGX OS and AI Developer Tools completed physical Station Express validation. The detailed DGX OS run exited `0` with released OpenShell `0.0.85`, local Nemotron Ultra, sandbox CUDA, bounded sysfs policy, and Hermes one-shot and TUI file-tool tasks. - Detailed DGX OS evidence: NVIDIA#7108 (comment) - Expanded validation record: NVIDIA#6951 (comment) - Initial maintainer scope decision: NVIDIA#6951 (comment) - Updated maintainer decision accepting the expanded profiles: NVIDIA#6951 (comment) ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — platform/installer suite: 95 passed, 1 skipped; immutable starter-prompt suite: 17 passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Not run; focused generator, installer-disclosure, and documentation-contract tests cover this change. - [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) — 0 errors and 1 Fern warning. - [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) --- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary The Hermes rebuild lanes now bootstrap their dependencies once, pull a digest-pinned historical fixture, and carry the exact validated current-base identity through the immutable rebuild handoff. Repeated `ubuntu-latest` samples reduced the normal median from 1000.5s to 618.5s (38.2%) and the stale-base median from 1068s to 614.5s (42.5%) without weakening state, readiness, replacement, or provenance assertions. This is incremental progress toward NVIDIA#7144. It does not implement or waive the issue's reusable cross-job BuildKit cache requirement, so NVIDIA#7144 remains open. ## Related Issue Part of NVIDIA#7144 ## Changes - Pull the historical Hermes fixture by immutable digest, verify its provenance before use, reuse the prepared current base across rebuild phases, and keep the stale-base refresh boundary intact. - Separate OpenShell/bootstrap setup from the timed rebuild contract and emit per-phase timing plus runner-resource evidence for comparable repeated samples. - Preserve state more defensively by failing closed on SQLite backup errors or missing state files and by cleaning temporary immutable base-image handoffs. - Carry validated base resolution metadata through recreate, managed Dockerfile preparation, and the final image labels so the rebuilt sandbox proves the exact phase-one base identity. - Reconcile the rebuild handoff with NVIDIA#6884's approved trust contract: locally built bases carry the signed per-operation provenance lease, pinned official bases retain the stricter immutable identity/ABI/runtime binder, and arbitrary local aliases remain rejected. Focused base-image and rebuild-preflight tests protect both paths. - Verify backup/restore, sandbox replacement, readiness, state schema, base layers, image labels, and current/stale lane behavior in focused and live E2E coverage. - Keep the existing Docker-engine cache security boundary. This PR does not add an external Buildx builder, registry cache, or reusable cross-job BuildKit cache; that requirement remains open in NVIDIA#7144 pending its security-design decision. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: this changes internal rebuild implementation and E2E coverage without adding a command, option, environment variable, migration, or user choice; the required docs review found existing rebuild and base-image validation documentation already accurate. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: provenance remains fail-closed for arbitrary aliases and is adopted only after exact immutable identity, platform, official digest, ABI, and Hermes runtime proof. Focused negative tests cover every rejected mismatch; earlier live samples exercised the normal and stale-base behaviors, and final exact-head E2E remains pending after branch convergence. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: the focused reconciliation suite passed 129 tests; `npm run build:cli` and `npm run typecheck:cli` passed; exact-head GitHub CI is running and protected E2E remains pending. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: not run; diff-scoped hooks and focused runtime/support tests cover the changed rebuild contract. - [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) - [ ] 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) --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved Hermes rebuilds by preserving and validating base-image identity/provenance across phases, including correct reuse handling and immutable temporary handoffs. * Added safer temporary base-image handoff cleanup with best-effort disposal and retry on cleanup failures. * Rebuilds now abort when required sandbox state files fail to back up, unless `--force` is enabled. * Improved SQLite backup/restore reliability via isolated Python execution and stricter empty-output failure handling. * **New Features** * Hermes rebuild flow now carries pre-resolved base-image provenance into target/image preflights. * Added trusted local override support and scoped base-image reuse tagging/cleanup. * **Tests** * Expanded Hermes end-to-end coverage (base identity evidence, reuse planning, stale-base classification, cleanup/disposal, and workflow boundary validation), including OpenShell binary install/version checks. * **Documentation** * Clarified `--force` behavior for manifest-declared state file backup failures and updated sandbox base-image override constraints. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Ho Lim <subhoya@gmail.com> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Co-authored-by: Ho Lim <subhoya@gmail.com> Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com>
…IA#7301) (NVIDIA#7306) ## Summary The license / third-party software acceptance prompt read "the NemoClaw license and and third-party software notice", repeating "and". The text is served from a single shared data field, so the doubled conjunction appeared in both the curl|bash installer and `nemoclaw onboard` on every platform. This removes the duplicate word. ## Related Issue Fixes NVIDIA#7301 ## Changes - Fixed `interactivePrompt` in `bin/lib/usage-notice.json`: "license and and third-party" → "license and third-party". This one field is consumed by `scripts/install.sh` (installer) and `src/lib/onboard/usage-notice.ts` (`loadUsageNoticeConfig` → the `nemoclaw onboard` prompt), so a single edit corrects every surface. - Added `src/lib/onboard/usage-notice.test.ts`, which reads the shipped prompt through `loadUsageNoticeConfig()` and asserts the exact grammatical form and the absence of any adjacent duplicated word. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: fixes a typo in a runtime prompt string; no documentation quotes this line. - [x] 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: Onboarding-adjacent, but the change is a single grammatical fix to prompt display text; acceptance logic, versioning, and gating are unchanged. Flagging for maintainer confirmation. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: `npx vitest run --project cli src/lib/onboard/usage-notice.test.ts` → 1/1 passed locally and on a fresh clone + `npm ci` on an Ubuntu x86_64 host (exit 0). - [ ] Applicable broad gate passed — justification: single-string data fix with a focused source-lane test; not a broad runtime/test-harness change. - [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) - [ ] Doc pages follow the style guide (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- Signed-off-by: Jason Ma <jama@nvidia.com> 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Corrected the license and third-party software acceptance prompt by removing duplicated wording. * **Tests** * Added coverage to verify the prompt’s grammar and prevent repeated adjacent words. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
## Summary Remediate CVE-2026-59873 / GHSA-23hp-3jrh-7fpw across the completed Node-based sandbox images targeted for v0.0.91. Before this change, NemoClaw's plugin lockfile and npm's private bundles shipped affected node-tar releases; after it, every discovered physical installation must resolve to tar 7.5.19 or newer before an image can be published. ## Changes - Require and lock NemoClaw's direct dependency to `tar@7.5.20`. - Replace affected npm-private node-tar trees in the pinned Node 22 and Node 24 image paths with the registry- and SRI-verified `tar@7.5.20` archive. - Patch both base and final OpenClaw, Hermes, and Deep Agents Code images so a stale published base cannot reintroduce the affected package. - Scan completed filesystems across local, global, npm-private, and symlinked installations; fail builds for invalid metadata, an empty inventory, or any version below `7.5.19`. - Scan completed OpenClaw and Hermes CI images in isolated containers and retain image-ID-keyed JSON inventories for 14 days. - Add source-fingerprint inputs and regression coverage for patching, physical-copy enumeration, Dockerfile ordering, workflow hardening, and evidence retention. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — this changes image dependency remediation and publication evidence without changing a user-facing contract; the required documentation review found no canonical page to update. - [x] 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: maintainer security review pending on this PR. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — 51 focused tests pass across source identity, npm bundle patching, image scanning, Dockerfile contracts, and workflow boundaries; plugin type-checking also passes. - [ ] Applicable broad gate passed — required CI pending. A completed OpenClaw production image built and passed both embedded and isolated scans; Node 22/npm 10 and Node 24/npm 11 patch/install/npx smoke tests pass. - [ ] 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) - [ ] 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) --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Security Improvements** * Updated bundled npm `tar` to a safer release and added automated in-image remediation. * Added build-time and production sandbox node-tar scans that generate read-only inventory evidence. * **Reliability** * Extended hardened node-tar scanning/inventory generation to production and arm64 variants. * Added tighter sandbox workflow contract validation to enforce required scan + evidence upload ordering. * **Bug Fixes** * Improved remediation safety with idempotency and rollback on failure. * **Chores** * Updated workflow triggers and sandbox build-context staging to include the new validation assets. * **Tests** * Added unit, contract, and end-to-end coverage for remediation/scanning and workflow boundaries. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com> Co-authored-by: Charan Jagwani <cjagwani@nvidia.com> Co-authored-by: Senthil Ravichandran <senthilr@nvidia.com>
…A#7212) ## Summary Documents the Hermes `API_SERVER_KEY` lifecycle so operators can tell ordinary restart stability apart from expected rebuild rotation, and adds a rebuild-time notice pointing at the supported retrieval command. Before this change the reference described what `gateway-token` prints but not when the value changes, and the headless quickstart told operators to read the token out of the generated Hermes environment — which contradicts the supported retrieval path. ## Related Issue Fixes NVIDIA#7175 ## Changes - Document the token lifecycle in the `gateway-token` Hermes reference section: generated once per sandbox home, distinct across sandbox homes, preserved across a gateway restart, a sandbox stop and start, and a host OpenShell gateway restart. - Document the two regeneration cases: rebuilding or replacing the sandbox, and a startup `API_SERVER_KEY` that is missing or is not exactly 64 lowercase hexadecimal characters. Ordinary restarts that change the token without replacing the sandbox stay a bug, and the page says what evidence to collect. - Document the retrieval contract: the sandbox must be running, the token is a password, and operators use `gateway-token --quiet` instead of reading or editing `.hermes/.env`. - Fix the contradiction in the headless quickstart, which pointed operators at the generated Hermes environment rather than the supported command. - Add the rebuild warning to the rebuild guide and the `rebuild` reference section. - Print a Hermes-only rebuild notice that the API bearer token changed and how to retrieve the replacement. The notice is worded to fire only as guidance for after recovery completes, so it does not read as a success signal on a rebuild that later bails. - Cover the docs contract with a test scoped to the `gateway-token` heading boundary rather than a whole-file match, so a correct phrase in the wrong section fails. - Cover the rebuild notice with a Hermes case, an OpenClaw negative case, and the two post-restore failure paths. - Extend the Hermes snapshot test to prove state restore does not overwrite a replacement home's `API_SERVER_KEY`, which is the structural guarantee behind rotation. - Rename the touched test titles to behavior-oriented phrasing with the issue reference as a suffix, per the repo test convention. Scope note: the issue also mentions a planned headless/server deployment guide. That page does not exist yet, so it is out of scope here. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] 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 a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: `npx vitest run src/lib/actions/sandbox/rebuild-post-restore-phase.test.ts test/hermes-api-key-lifecycle-docs.test.ts test/snapshot.test.ts` — 3 files, 57 tests passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [x] `npm run docs` builds without warnings (doc changes only) — 0 errors. The 2 reported warnings are pre-existing and unrelated to this change: an unauthenticated redirect check that is skipped without `FERN_TOKEN`, and the site-wide light-mode accent contrast ratio. - [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) ### Coverage limitation Rebuild rotation is proven structurally, not end to end. Two tests together establish it: state restore does not carry `.hermes/.env` into a replacement home, and separate sandbox homes mint distinct keys. No test drives a real rebuild and compares the token before and after. A live-E2E rotation and retrieval check in `test/e2e/live/rebuild-hermes.test.ts` is the natural follow-up; `e2e-live` is opt-in and outside the required gate for code-changing PRs, so it is not included here. Ordinary-restart preservation keeps its existing direct coverage in `test/hermes-runtime-api-key.test.ts`. --- Signed-off-by: harjoth <harjoth.khara@gmail.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Hermes “rebuild” now conditionally warns when the Hermes API bearer token changes, using the supported `gateway-token --quiet` command, and suppresses the notice on certain verification/restore failure paths. * Restores now preserve Hermes durable-state files while keeping credential-related behavior consistent with the intended semantics during restore. * **Documentation** * Updated Hermes quickstart and command reference to clarify correct bearer-token sourcing, lifecycle/regeneration rules after rebuilds, and proper `--quiet` usage (not environment/dashboard tokens). * **Tests** * Expanded unit and live E2E coverage for token-change notice behavior, documentation text consistency, restore credential/durable-state semantics, and token stability across repeated retrievals. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: harjoth <harjoth.khara@gmail.com> Signed-off-by: Aaron Erickson <aerickson@nvidia.com> Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Restore the deterministic image and upgrade coverage exposed by [E2E main run 29887082757](https://github.com/NVIDIA/NemoClaw/actions/runs/29887082757). Deep Agents Code now installs the verified archive downloader before node-tar remediation, legacy OpenClaw fixture images remediate their affected tar dependency before the completed-image scan, and frozen gateway-upgrade fixtures no longer fail only because the current advisory database changed. ## Changes - Move the Deep Agents Code npm-private node-tar remediation after the layer that installs `curl`, and extend the Dockerfile contract to enforce that prerequisite ordering. - Add an exact, E2E-only `openclaw@2026.3.11` remediation from `tar@7.5.11` to reviewed `tar@7.5.19`. The `rebuild-openclaw` and `upgrade-stale-sandbox` fixtures require this compatibility path; relaxing the completed-image scanner would weaken the production security boundary. The OpenClaw remediation and integrity contract tests protect the archive identity, dependency shape, metadata hash, install path, and scanned tree. - Extract the existing frozen-installer adapter and skip only the current advisory audit for an immutable historical mcporter lock while retaining `npm audit signatures`. The historical source cannot be changed without invalidating the upgrade fixture; the new E2E-support tests prove the exact replacement and ambiguous-boundary rejection. - Update the existing OpenClaw dependency review note with the fifth reviewed remediation identity and fixture-only audit boundary. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: No supported user-facing behavior changes; the existing security review note is updated only to keep reviewed fixture identities and boundaries aligned. - [x] 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: Maintainer security review is pending on this PR. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project integration test/node-tar-dockerfile-contract.test.ts test/openclaw-npm-remediation.test.ts test/openclaw-integrity-pin-contract.test.ts` (23 passed); `npx vitest run --project e2e-support test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts test/e2e/support/rebuild-openclaw-old-base-context.test.ts` (6 passed); `npm run test:changed` (3 passed); `npm run test:projects:check` and `npm run source-shape:check` passed. - [ ] Applicable broad gate passed — focused image and fixture changes use the targeted evidence above; required CI is pending. - [ ] Quality Gates section completed with required justifications or waivers — sensitive-path review is pending. - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — the build passed with two pre-existing Fern warnings. - [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) --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Added support for installing and upgrading OpenClaw **2026.3.11** with the correct legacy remediation behavior. - Improved npm archive remediation integrity checking and expanded post-install global package verification across supported OpenClaw versions. - Improved determinism and reliability of historical gateway upgrade flows while preserving archive signature verification and enforcing stricter audit boundaries. - **Documentation** - Updated security/dependency review guidance for the adjusted remediation rules and expected integrity artifacts. - **Tests** - Expanded e2e and contract tests for legacy upgrades, installer patching, archive integrity pinning, and step ordering verification. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- markdownlint-disable MD041 --> ## Summary Follow up on NVIDIA#7355 so the E2E-only `openclaw@2026.3.11` remediation cannot resolve its patched tar package from mutable registry state. The remediation now verifies and bundles the reviewed `tar@7.5.19` archive before the historical image install. ## Related Issue Follow-up to NVIDIA#7355 and Apurv's requested security fix on that PR. ## Changes - Fetch `tar@7.5.19` through `packReviewedNpmArchive`, verify its exact SRI and tarball URL, reject a pre-existing bundled tar directory, and copy the verified package into the remediated OpenClaw archive. - Declare tar as a bundled dependency and bind the OpenClaw identity, replacement declaration, bundle marker, and tar identity to the committed patched-metadata hash. - Make the legacy archive test succeed with the committed hash before exercising the mismatch path, and prove the extracted archive contains the reviewed bundled tar package. - Address the remaining NVIDIA#7355 review findings by strengthening the apt/curl ordering contract, sharing historical installer markers, proving audit-boundary failures do not partially rewrite the Dockerfile, and correcting the dependency review note. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This changes only legacy E2E fixture construction; the existing security dependency review note is updated to keep the reviewed boundary accurate. - [x] 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: Maintainer security review is pending on this PR. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — integration tests: 22 passed; E2E support tests: 7 passed; `npm run test:changed`: 8 passed; `npm run typecheck:cli`, `npm run source-shape:check`, `npm run test:projects:check`, and the test conditional scan passed. A real reviewed npm archive proof produced an OpenClaw archive with `bundledDependencies: ["tar"]` and `tar@7.5.19` under `node_modules/tar`. - [ ] Applicable broad gate passed — focused legacy fixture and contract changes use the targeted evidence above; required CI is pending. - [ ] Quality Gates section completed with required justifications or waivers — sensitive-path review is pending. - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — the build passed with two pre-existing Fern warnings. - [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) --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Security** * Strengthened validation and remediation of legacy OpenClaw packages, including verified bundled `tar` package metadata and integrity checks. * Updated the expected security integrity value for the affected OpenClaw release. * **Bug Fixes** * Improved installer patching for legacy upgrade paths and preserved Dockerfile contents when boundary validation fails. * **Tests** * Expanded coverage for bundled dependency contents, metadata integrity mismatches, package installation ordering, and installer failure scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary This PR moves the permanent NemoClaw writing policy from `CONTRIBUTING.md` to `WRITING.md` and removes the pilot terms. It updates contributor and maintainer guidance, and it makes the PR Review Advisor load the guide from its trusted workflow checkout. ## Changes - Add `WRITING.md` as the source for writing scope, terms, rules, examples, and review policy. - Point contributor docs, agent guidance, skills, and the PR template to the shared guide. - Embed the guide in the PR Review Advisor prompt and test that a PR worktree cannot replace it. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: No product behavior changes. This PR updates contributor and advisor guidance directly. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: The advisor resolves `WRITING.md` from the trusted script checkout. `test/pr-review-advisor-writing-guide.test.ts` proves that a file in the PR worktree cannot replace it. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable. `scripts/prepare-dgx-station-host.sh` is unchanged. - Station profile/scenario: Not applicable. - Result: Not applicable. - Supporting evidence: Not applicable. ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run test/pr-review-advisor.test.ts test/maintainer-skills-policy.test.ts test/skills-frontmatter.test.ts` passed 86 tests. After the review fix, `npx vitest run test/pr-review-advisor.test.ts test/pr-review-advisor-writing-guide.test.ts` passed 46 tests. `npm run test-size:check` passed. - [ ] Applicable broad gate passed — Not run. The focused tests cover the advisor and skill changes. - [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). The build passed with 0 errors and 2 existing Fern warnings. - [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). `WRITING.md` is a root repository guide and includes its SPDX header; Fern frontmatter does not apply. --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a centralized NemoClaw Writing Guide with required terminology, writing rules, and examples. * Updated contributor, maintainer, documentation, and PR template guidance to reference the new Writing Guide. * PR review assistance now incorporates the trusted Writing Guide when generating review guidance. * **Documentation** * Clarified which language findings block vs remain suggestions, and how to format rewrite suggestions. * Updated guidance for PR text, changelog/announcement posts, test titles, and procedural documentation. * **Tests** * Added/updated coverage to verify the trusted Writing Guide is loaded and used by review assistance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Repair the `rebuild-hermes` and `rebuild-hermes-stale-base` live fixtures after the historical sandbox began failing the API bearer-token lifecycle check before rebuild. The synthetic old sandbox now contains a valid per-run API server key, so the test can verify that rebuild rotates it and then keeps the new token stable. ## Related Issue Follow-up to NVIDIA#7144. ## Changes - Seed `API_SERVER_KEY` in the synthetic historical Hermes `.env` file. - Generate a valid 64-character per-run fixture key and include it in command redaction and backup leak scanning. - Assert the historical Dockerfile contains the key required by the token-lifecycle probe. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This only repairs a synthetic live-E2E fixture and does not change product behavior or user workflows. - [x] 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: Maintainer review is pending. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — focused E2E-support fixture test: 9/9; CLI build and typecheck passed. - [x] Applicable broad gate passed — `npm run check:diff` passed. - [ ] Quality Gates section completed with required justifications or waivers — sensitive-path review is pending. - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [ ] 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) --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved protection against sensitive API server keys appearing in rebuild artifacts, command output, and diagnostic scans. * Ensured rebuilt sandbox environments receive the required API server key configuration. * **Tests** * Added coverage verifying API server key injection and credential redaction during rebuild workflows. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Repair the historical gateway-upgrade adapter after [E2E main run 29890967158](https://github.com/NVIDIA/NemoClaw/actions/runs/29890967158) exposed four deterministic failures. The adapter now matches each pinned release's advisory-audit shape and stores the reviewed OpenClaw archive in the source subtree preserved by frozen optimized build contexts. ## Related Issue Follow-up to NVIDIA#7360. ## Changes - Bind the historical adapter to the three current gateway-upgrade consumers: `v0.0.36` and `v0.0.55` require zero advisory-audit statements, while `v0.0.74` requires one. A direct one-count rule cannot support the older frozen Dockerfiles because they predate the mcporter audit block. The E2E-support test covers every reviewed profile and rejects unknown profiles or mismatched counts. - Store the reviewed OpenClaw archive under `nemoclaw/src` and update the injected Dockerfile `COPY` path. Each frozen optimized-context builder copies that subtree, while none copies arbitrary source-root files. The E2E-support test stages the preserved subtree and verifies that the archive remains available. - Update the OpenClaw dependency review note with the exact staging path, per-release audit boundary, and `v0.0.74` signature-verification scope. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This changes only historical E2E fixture construction. The internal security review note is updated to keep the reviewed boundary accurate. - [x] 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: Maintainer security review is pending on this PR. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project e2e-support test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts` passed 11 tests. - [ ] Applicable broad gate passed — the full local E2E-support project exposed one unrelated `e2e-phase-lifecycle` missing-log failure after serial confirmation. The four other parallel timeout failures passed serially. - [ ] Quality Gates section completed with required justifications or waivers — sensitive-path review is pending. - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — the build passed with two existing Fern warnings. - [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) --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved legacy gateway upgrade fixture patching with deterministic, reviewed per-profile installer selection and stricter validation (including profile-specific advisory-audit occurrence handling and correct conditional “skip” behavior). * Updated historical archive wiring to use the documented installer archive context path, with runtime checks, while preserving installer/fixture contents when validation fails. * **Tests** * Expanded end-to-end coverage with pinned fixture identity, Dockerfile assertion of archive-context COPY wiring and install commands, and tighter negative cases for mismatched or unsupported profile inputs. * **Documentation** * Refined legacy fixture pins documentation for archive storage location, installation behavior, and per-version advisory-audit expectations. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Deep Agents rebuild preflight built a local base image, then rejected that same image because the rebuild did not carry its operation-scoped trust proof into managed image preparation. This change uses the existing validated base-image builder and leases its exact ref and provenance only for that preparation window. ## Changes - Build the DCode rebuild base through `ensureAgentBaseImage` so it has current provenance, compatibility validation, and a content-addressed ref. - Lease that exact local ref and provenance while the managed replacement image is prepared, then restore both trust and environment state. - Add a regression test that verifies the trust lease is installed and removed around DCode replacement preflight. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This restores the documented managed DCode rebuild path and does not change its command, configuration, or output contract. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: The lease requires the exact current-build ref and provenance. Existing negative resolver tests still reject arbitrary local overrides. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: `rebuild-dcode-preflight.test.ts` (16 passed); rebuild base-image helper tests (36 passed); base-image trust and resolution tests (43 passed). - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [ ] 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) --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved DCode sandbox rebuild reliability by using verified trusted base images during preflight. - Ensured temporary base-image settings are restored after rebuild operations, including when preparation fails. - Preserved the original error details when a rebuild preparation step encounters a failure. - Added safeguards to prevent rebuilds from continuing when trusted base-image verification is incomplete. - **Tests** - Added coverage for successful and failed rebuild scenarios, including cleanup and base-image setting restoration. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Prevent inner onboarding from taking a second state backup during a sandbox rebuild. A stale gateway listing can no longer abort recreation after the outer rebuild already captured the backup and deleted the sandbox, as seen in [E2E run 29890967158](https://github.com/NVIDIA/NemoClaw/actions/runs/29890967158/job/88831739932). ## Changes - Scope the existing `NEMOCLAW_RECREATE_WITHOUT_BACKUP=1` marker to the inner onboarding call after the rebuild backup and delete phases. - Restore the caller's marker value after successful and failed recreation. - Test marker forwarding and environment restoration on both paths. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This internal handoff restores the documented single-backup rebuild flow and does not change a CLI contract or user workflow. - [x] 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: Maintainer review is pending. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project cli src/lib/actions/sandbox/rebuild-recreate-observability.test.ts` (6 passed); `npm run test:changed` (57 passed); `npm run typecheck:cli` passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Not run; the change is limited to one rebuild phase and its focused tests. - [ ] Quality Gates section completed with required justifications or waivers — sensitive-path review is pending. - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [ ] 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) --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved sandbox rebuild/recreate reliability when stale gateway conditions are detected. * Prevented redundant backup attempts during the inner recreate step by temporarily enabling the “recreate without backup” behavior. * Ensured the recreate-without-backup setting is restored after success, and reverted to the caller’s original value when onboarding fails. * **Tests** * Expanded observability and rebuild lifecycle coverage to verify correct environment-variable behavior across inner and outer onboarding paths. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Make sandbox rebuild fail closed until OpenShell explicitly confirms that the deleted sandbox is absent. This prevents registry removal and replacement creation from racing an asynchronous delete, while preserving the original registry entry and state backup when confirmation is inconclusive. ## Changes - Poll `openshell sandbox get <name>` after an accepted delete until the gateway reports the sandbox missing. - Treat live, terminating, timeout, and transport-error results as unconfirmed and abort before registry removal or recreation. - Move the deletion callback behind confirmed absence so shield recovery still treats the old sandbox as potentially live on timeout. - Add focused convergence, transport-failure, provider-recreate, resume-snapshot, and shared rebuild-harness coverage. - Document the bounded wait and recovery guidance in the rebuild command reference. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent pre-publication security review found no remaining blocker after moving `onDeleted()` behind explicit absence confirmation; transport failures preserve registry/backup state and shield recovery remains fail-closed. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project cli src/lib/actions/sandbox/rebuild-destroy-phase.test.ts src/lib/actions/sandbox/rebuild-flow.test.ts src/lib/actions/sandbox/rebuild-local-provider-recreate.test.ts src/lib/actions/sandbox/rebuild-resume-snapshot.test.ts src/lib/actions/sandbox/rebuild-dcode-base-image-lease.test.ts --no-file-parallelism` (94 passed at exact final head). - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Full suite deferred to PR CI; the serialized changed-test sweep passed 202 tests before the clean main rebase, and the exact final head passed 94 focused tests plus `npm run check:diff`. - [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) — 0 errors; 2 pre-existing warnings. - [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) --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Rebuild now waits for explicit confirmation that a sandbox is absent before removing local registry state and creating a replacement. * If deletion can’t be confirmed within the timeout (including probe/transport issues), rebuild now exits non-zero and preserves local registry and state backup for recovery. * Improved behavior for resumed rebuild flows when the sandbox is already missing. * **Documentation** * Clarified `nemoclaw <name> rebuild` post-deletion confirmation, bounded wait behavior, failure handling, and recovery guidance. * **Tests** * Expanded teardown and resumed-path coverage with more realistic mock OpenShell behaviors and ordered-event assertions. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
…IA#7341) ## Summary Fixes a broken link that 404s for Deep Agents readers on the OpenShell 0.0.72 compatibility review page. The page renders in the openclaw, hermes, and deepagents variants and links to the OpenShell 0.0.71 gateway authentication review. That review page is intentionally scoped to openclaw and hermes only. Its content is specific to those agents (Hermes env-file secret boundaries and the OpenClaw gateway-runtime API) and it was deliberately left out of the deepagents nav when the variant was added. A later scoped PR (NVIDIA#6606) added only the 0.0.72 review to the deepagents nav and included a regression test asserting that scoping, so adding 0.0.71 to the deepagents nav would contradict a prior decision and break that test. Instead of forcing the 0.0.71 page into the deepagents nav, this scopes the link itself. The sentence is wrapped in AgentOnly variant="openclaw,hermes" so those readers keep the working link, and a parallel AgentOnly variant="deepagents" block carries the same sentence as plain text so Deep Agents readers still get the information without a dead link. This follows the existing convention in docs/manage-sandboxes/run-sandboxes.mdx. ## Test plan npx vitest run test/agent-variant-docs.test.ts passes (13 tests). npm run docs builds with 0 errors. Verified the generated output: openclaw and hermes keep the link, deepagents renders the plain-text sentence with no broken link. Signed-off-by: Atharv Kumaria <kumariaaatharv@gmail.com> Signed-off-by: Atharv Kumaria <kumariaaatharv@gmail.com>
<!-- markdownlint-disable MD041 --> ## Summary Updates the reviewed OpenClaw distribution from 2026.6.10 to 2026.7.1 and the sandbox Node image to 22.23.1. The image build fails closed while applying integrity-pinned remediations for vulnerable Axios copies in the Slack and Teams archives and the affected OpenTelemetry Jaeger pair in diagnostics. The separately locked `mcporter@0.7.3` graph now resolves exact `@hono/node-server@2.0.11` and `fast-uri@3.1.4` releases and passes the reviewed audit, signature, install, and CLI checks. The sandbox credential contract remains unchanged: generated `openclaw.json` contains the non-secret `apiKey: "unused"` sentinel, while `COMPATIBLE_API_KEY` remains an OpenShell provider-environment placeholder whose real value is resolved at the OpenShell boundary. No literal provider credential is persisted in OpenClaw configuration or state. OpenClaw 2026.7.1 changed loopback shared-token CLI calls to omit the signed CLI device identity. That prevented the paired-device scope comparison from reaching the canonical `scope-upgrade` pairing gate. The compatibility patch now retains the signed CLI identity only after a stored operator device credential exists. The shared token still authenticates the loopback call; the paired-device record remains authoritative for scopes, and an `operator.admin` request must still create and receive canonical pairing approval. The installed-base contract is covered explicitly. A pinned E2E row installs NemoClaw v0.0.89 with OpenClaw 2026.6.10 from a registry-SRI-bound frozen source archive, materializes the legacy per-agent SQLite, Memory Core, and update-check state, then upgrades in place to 2026.7.1. The current installer is deliberately not given the provider credential, so the post-upgrade turn proves reuse of the credential already held by OpenShell. The shared frozen-installer adapter also keeps the historical v0.0.36, v0.0.55, v0.0.74, and v0.0.89 matrix deterministic without weakening the current candidate. The merge from current `main` preserves its Node `tar@7.5.20` package fix and bundled-npm tar remediation, rebinding the affected-base guard to the upgraded Node 22.23.1 image digest. For the E2E-only OpenClaw 2026.3.11 stale-upgrade fixture, the exact reviewed source shape is verified, the replacement `tar@7.5.19` archive is registry-SRI-bound, and that reviewed package is bundled into the remediated OpenClaw archive before installation. There is no completed-image scanner exception: any remaining affected copy fails the strict scan, and both stale-upgrade E2Es require the rebuilt current image inventory to be completely clean. ## Changes - Pin OpenClaw and its first-party plugin archives to reviewed 2026.7.1 artifacts and update the Node 22.23.1 image digest. - Remediate only the reviewed Axios and diagnostics OTEL subtrees, with original-package identity checks, integrity pins, canonical tree digests, and archive-shape drift rejection. - Lock the mcporter runtime to `@hono/node-server@2.0.11` and `fast-uri@3.1.4`; verify the script-disabled production install, registry signatures, ESM transport construction/close path, and installed CLI version. - Retain stored CLI device identity on loopback shared-token calls so OpenClaw's paired-device scope gate remains authoritative without moving provider secrets into OpenClaw state. - Preserve private device, credential, and SQLite state across startup and installed-base migrations, including bounded repair of legacy update-check state. - Add the frozen v0.0.89/OpenClaw 2026.6.10 to 2026.7.1 installed-base E2E row and retain the broader historical migration matrix. - Preserve current-main node-tar remediation, run it only after curl is installed in the DeepAgents and Hermes bases, and verify both patch helpers in the sandbox build context. - Exact-shape remediate the E2E-only 2026.3.11 source archive from `tar@7.5.11` to a registry-SRI-bound, bundled `tar@7.5.19`, with the completed-image scan remaining strict and exception-free. - Set the authoritative local base-build allowance to 90 seconds for upgrade-head matrix runs that must build the exact local base. - Incorporate current main's historical Hermes fixture repair so rebuild coverage seeds, rotates, redacts, and leak-scans the required per-run API server key. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — exact head reviewed during maintainer follow-through; the implementation fails closed on package identity, archive shape, dependency graph, SRI drift, and device-scope enforcement. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification - [x] PR description includes `Signed-off-by:` lines and all new commits are SSH-signed and DCO-clean. - [x] `npm run checks`, `npm run typecheck`, `npm run typecheck:cli`, `npm run source-shape:check`, and `npm run test-size:check` passed on the current-main reconciliation. - [x] Focused combined suites passed: 258 tests with one expected skip; an independent combined run passed 61/61; the fresh real OpenClaw 2026.7.1 tarball harness passed 5/5. - [x] The real upstream 2026.7.1 compiled distribution audit passed all five required compatibility-shape checks. - [x] After merging current `main` through NVIDIA#7360, the focused remediation/integrity/scanner suites passed 34/34 and the installed-base migration/workflow suites passed 19/19. - [x] After reconciling current `main` through NVIDIA#7364, the exact affected Hermes historical fixture passed 9/9, the focused OpenClaw contract set passed 81 tests with one expected skip, and repository/source-shape checks passed. - [ ] Exact-head required GitHub CI and E2E gate are in flight. - [x] No secrets, API keys, or credentials committed. Evidence: - Prior upgrade-head historical evidence: [five migration rows passed](https://github.com/NVIDIA/NemoClaw/actions/runs/29862234216), including the dedicated v0.0.89/OpenClaw 2026.6.10 installed-base upgrade. Current-head coverage is also selected in the full matrix below. - Scope-upgrade proof on parent head 54b59af: [focused run 29888373497](https://github.com/NVIDIA/NemoClaw/actions/runs/29888373497) and the independent full-matrix cell both passed the formerly deterministic `operator.admin` cron path. - Prior-head focused rebuild coverage: [run 29889345896](https://github.com/NVIDIA/NemoClaw/actions/runs/29889345896), covering both stale OpenClaw upgrade fixtures, DeepAgents routing, and both Hermes rebuild paths. - Preserved prior-head full E2E evidence: [run 29889347151](https://github.com/NVIDIA/NemoClaw/actions/runs/29889347151) improved the original 66-failure/22-pass signal to 19 failures/68 passes. Every remaining red was a pre-existing DeepAgents trust-fixture failure, hosted inference capacity error, runner loss/cancellation, or transient load/SSH failure; every OpenClaw upgrade, rebuild, pairing, and installed-base migration path passed. The intermediate-head [replay 29888849758](https://github.com/NVIDIA/NemoClaw/actions/runs/29888849758) remains active append-only evidence. - Current exact-head append-only full matrix: [run 29893928454](https://github.com/NVIDIA/NemoClaw/actions/runs/29893928454), queued without canceling or replacing the active replay. - Current exact-head required CI: [run 29893824224](https://github.com/NVIDIA/NemoClaw/actions/runs/29893824224), [security CodeQL 29893824206](https://github.com/NVIDIA/NemoClaw/actions/runs/29893824206), and [E2E gate 29893823011](https://github.com/NVIDIA/NemoClaw/actions/runs/29893823011). --- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Signed-off-by: Aaron Erickson <aerickson@nvidia.com> --------- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Signed-off-by: Aaron Erickson <aerickson@nvidia.com> Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
## Summary - Keep the installer production contract unchanged: relative OpenShell overrides are resolved to an absolute physical path with `pwd -P`. - Make the focused test assert the actual contract: the watcher receives an absolute path resolving to the same executable. - Accept the standard macOS `/var` to `/private/var` canonicalization. ## Why The post-merge main platform watch failed only because the test compared path spellings lexically. The identical assertion failed on the immediately previous completed main-watch run and on the first completed run after the test was introduced, so this was not introduced by NVIDIA#7280. Evidence: https://github.com/NVIDIA/NemoClaw/actions/runs/29910675239/job/88892568917 and https://github.com/NVIDIA/NemoClaw/actions/runs/29897085188/job/88849484779 ## Verification - `CI=1 npx vitest run --project cli src/lib/actions/uninstall/hermes-forward-watcher-installer.test.ts --reporter=verbose` - `npx @biomejs/biome check src/lib/actions/uninstall/hermes-forward-watcher-installer.test.ts` - `npm run build:cli && npm run typecheck` - `git diff --check` Signed-off-by: Aaron Erickson <aerickson@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Updated coverage to verify that the Hermes forward watcher logs an absolute OpenShell path. * Confirmed the logged path resolves to the same filesystem target as the generated executable. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
## Summary - raise the Platform Vitest Main Watch WSL job limit from 60 to 90 minutes - capability-gate the one Docker-backed Hermes root-container contract when the platform has no Docker daemon - keep the concurrent `latest` safety test semantic across Git rejection-message variants ## Why The preserved current-main platform run [29914791092](https://github.com/NVIDIA/NemoClaw/actions/runs/29914791092) completed 19,226 WSL tests and exposed two platform assumptions after the earlier timeout was removed: - the fresh WSL distro intentionally installs no Docker CLI or daemon, while one Hermes test gated only on `process.platform === "linux"`; Node returned immediate Docker `ENOENT` with `status: null` - WSL Git correctly rejected the stale compare-and-swap with `incorrect old value provided` instead of the older `cannot lock ref` prose; the remote object invariants prove `latest` was not overwritten The job-level 90-minute allowance remains necessary because [29910675239](https://github.com/NVIDIA/NemoClaw/actions/runs/29910675239) previously reached the exact 60-minute cap while the suite was still passing and progressing. Production Hermes and release behavior are unchanged. ## Verification - focused concurrent-tag safety test passed at a 60-second budget - Hermes topology and platform workflow contracts: 5 passed, 2 intentional capability skips - Biome check passed - `git diff --check` passed Signed-off-by: Aaron Erickson <aerickson@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Increased the maximum runtime for the WSL test workflow from 60 to 90 minutes to reduce timeout risk during longer runs. * **Tests** * Improved Linux root-container integration tests to run only when the needed container runtime capability is available. * Made assertion failure reporting more reliable by using additional error context when available. * Relaxed a concurrent “latest tag” test to check failure behavior without requiring a specific error message, while still verifying the remote tag was not overwritten. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
## Summary - provision the established bounded 32 GiB swap before both hosted Hermes image exports - retain memory, disk, swap, and Docker usage diagnostics around the resource boundary - enforce the swap size, commands, and build ordering in the reusable-workflow contract ## Why Current main completed all 63 Hermes Dockerfile steps, then received runner shutdown during final layer export twice: [attempt 1](https://github.com/NVIDIA/NemoClaw/actions/runs/29914791304/job/88908049245) and [failed-only retry](https://github.com/NVIDIA/NemoClaw/actions/runs/29914791304/job/88911116741). The repository already documents and uses this 32 GiB swap mitigation for Hermes rebuild exports. This applies the same bounded mitigation to the only two reusable-workflow jobs that export Hermes images. It does not change the Dockerfile, image contents, or runtime behavior. ## Verification - `CI=1 npx vitest run --project e2e-support test/e2e/support/sandbox-images-workflow-boundary.test.ts test/e2e/support/hermes-secret-boundary-workflow.test.ts --reporter=verbose` (15 passed) - direct sandbox-image workflow validator returned no errors - Biome check passed - `git diff --check` passed Signed-off-by: Aaron Erickson <aerickson@nvidia.com> Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Live E2E jobs now report the semantic phase they are executing without repeating Vitest's test-level start, identity, elapsed time, or completion output. Every live test declares an individualized ordered plan, and each completed phase records its outcome and duration so a stalled or failed matrix job shows where time was spent. ## Related Issue Part of NVIDIA#7101 ## Changes - Instrument all 121 collected live E2E cases across 80 live entries (79 test implementations plus one bootstrap workflow forwarder) with ordered, test-specific semantic phases. - Extend the shared E2E fixture to print low-noise phase transitions with `passed`, `failed`, or `skipped` outcomes and per-phase durations, then append a harness-owned resource-release phase so cleanup hangs and failures are timed independently. - Preserve the originating phase for hard failures, soft assertions, and skips; persist the complete timeline, target, and shard identity in `test-progress.json`, including the dedicated `skill-agent` job upload. - Emit secret-safe stall evidence after five minutes and every ten minutes thereafter, including phase/output age, bounded command activity, process memory, free memory, disk, load, and the existing runner-pressure snapshot. - Add a collection-only checker and pre-commit gate that require every live test to use the shared fixture, declare a valid semantic plan, enter every later phase, and keep transitions scoped to their owning test, including siblings and repeated registrations that share one plan. The checker redirects the one compiled-artifact live import to source only while collecting, so it works in a clean checkout without running live bodies; fixture-backed negative coverage verifies missing metadata plus nonliteral, undeclared, and sibling-owned transitions are rejected. - Keep the historical runtime audit and matrix progress-summary upload from the earlier PR commits so maintainers can rank slow or unreliable targets and inspect phase artifacts across shards. - Document phase authoring, cleanup ownership, outcome/duration semantics, stall output, artifacts, and runtime-audit usage in the contributor and E2E guides. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [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 <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — 4 focused final-head E2E-support files, 28 tests passed; semantic collection audit passed for 121 tests across 80 live entries; mock/live parity, conditional-growth, `npm run typecheck:cli`, project membership, source-shape, file-size, changed-file Biome, and `git diff --check` passed - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: required CI is authoritative for the broad sharded suite - [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) — validation passed; Fern reported 2 existing warnings - [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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Live E2E runs now emit ordered phase markers with clear outcomes and durations, plus periodic stall diagnostics. * Each live E2E run produces a `test-progress.json` artifact (including target/shard metadata when available). * Added semantic phase-plan validation to prevent missing/invalid phase coverage before running. * Added runtime auditing to rank captured runs by median/p95/variability and identify the slowest phase. * **Documentation** * Expanded E2E fixture and workflow guidance for phase reporting, diagnostics, and runtime analysis. * **Tests** * Added automated checks for phase validity, progress outcomes, runtime auditing, and artifact upload requirements. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Add the canonical `v0.0.91` changelog entry that was missed before the release tag was cut. Correct the custom-image compatibility guidance because the tagged code still accepts the legacy inference route selector instead of removing it in v0.0.91. ## Changes - Add `docs/changelog/2026-07-22.mdx` with the release summary and detailed security, rebuild, Hermes, DGX Station, and historical-validation changes from the published v0.0.91 announcement. - Link shipped behavior to the most specific published OpenClaw and Hermes documentation routes. - Correct the v0.0.90 changelog and command reference so they match the compatibility fallback present in the tagged v0.0.91 code without inventing a new removal version. - Keep the immutable v0.0.91 release tag unchanged; this is the documented post-release recovery path. Source summary: - [NVIDIA#7332](NVIDIA#7332), [NVIDIA#7289](NVIDIA#7289), and [NVIDIA#7294](NVIDIA#7294) -> `docs/changelog/2026-07-22.mdx`: Summarize completed-image `node-tar` remediation and current and historical container verification. - [NVIDIA#7213](NVIDIA#7213), [NVIDIA#7363](NVIDIA#7363), [NVIDIA#7366](NVIDIA#7366), and [NVIDIA#7369](NVIDIA#7369) -> `docs/changelog/2026-07-22.mdx`: Summarize trusted base preparation, backup reuse, deletion convergence, and rebuild confidence. - [NVIDIA#7212](NVIDIA#7212) -> `docs/changelog/2026-07-22.mdx`: Summarize the Hermes API bearer-token lifecycle and supported retrieval command. - [NVIDIA#7327](NVIDIA#7327) and [NVIDIA#7328](NVIDIA#7328) -> `docs/changelog/2026-07-22.mdx`: Summarize qualified DGX Station guidance and reproducible coding-agent installation instructions. - [NVIDIA#7355](NVIDIA#7355), [NVIDIA#7360](NVIDIA#7360), [NVIDIA#7362](NVIDIA#7362), and [NVIDIA#7364](NVIDIA#7364) -> `docs/changelog/2026-07-22.mdx`: Summarize restored historical OpenClaw upgrade and Hermes rebuild validation. - [NVIDIA#7189](NVIDIA#7189) -> `docs/changelog/2026-07-20.mdx`, `docs/reference/commands.mdx`: Correct its forward-looking removal deadline after v0.0.91 shipped with the documented legacy fallback still present. - [NVIDIA#7282](NVIDIA#7282), [NVIDIA#7306](NVIDIA#7306), and [NVIDIA#7341](NVIDIA#7341) need no additional user-guide update because they already update their owned contributor or user-facing text directly. ## 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 - [x] Existing tests cover changed behavior — justification: `test/changelog-docs.test.ts` validates dated changelog structure, SPDX syntax, version ordering, and published routes. - [ ] Tests not applicable — justification: - [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: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable; this documentation-only PR does not change Station preparation or runtime behavior. - Station profile/scenario: Not applicable. - Result: Not applicable. - Supporting evidence: Not applicable. ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run test/changelog-docs.test.ts` (6 passed). - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not run; this is a focused documentation-only change. - [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) — completed with 0 errors and 2 existing site-wide warnings. - [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) — the native changelog entry uses the required parser-safe MDX SPDX comment and intentionally has no frontmatter. --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated v0.0.91 guidance for custom Dockerfiles, including continued legacy compatibility and recommended migration to `NEMOCLAW_INFERENCE_PROVIDER_ID`. * Added release notes covering image security scanning, safer rebuild behavior, token management, DGX Station guidance, and deterministic release validation. * Clarified that existing custom images may continue using the legacy selector temporarily, with fallback removal planned for a future release. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Allow the base-trusted installer verifier to accept either the current archive-only installer template with its exact eight-asset table or the reviewed formula installer template with those same eight assets plus `openshell.rb`. Each trusted template hash is bound to its exact asset set, so this prerequisite lets NVIDIA#7319 pass base-SHA verification without allowing a formula pin before its consumer or arbitrary release assets and templates. ## Related Issue Refs NVIDIA#6903 Prerequisite for NVIDIA#7319. ## Changes - Bind the current archive-only installer template to exactly the current eight installer assets. - Bind the reviewed formula installer template to exactly those same eight assets plus `openshell.rb` until NVIDIA#7319 lands and tightens the rule. - Download and verify the formula release asset directly, with regression coverage for both valid template/asset contracts, crossed contracts, duplicate pins, and digest mismatches. ## Type of Change - [x] 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) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This is a temporary internal CI trust boundary and does not change user-facing installation behavior. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: The trust-boundary review binds each accepted operational template hash to one exact asset set; the formula is fetched over HTTPS and checked against its pinned SHA-256. CodeRabbit follow-up added duplicate-pin and digest-mismatch coverage. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: `npx vitest run --project integration test/installer-hash-check.test.ts` (74 passed); the trusted checker also passed against this PR's archive-only installer, the actual NVIDIA#7319 formula-consuming installer, and the OpenShell v0.0.85 release assets. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: `npm run check` completed every pre-commit gate successfully, then reached the 20-minute local timeout during the manual coverage stage. - [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) - [ ] 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) --- Signed-off-by: San Dang <sdang@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved installer hash verification for OpenShell release assets, including the Homebrew formula (`openshell.rb`). - Updated installer pin-table validation to allow a transitional asset set and to use computed expectations instead of fixed totals. - Enhanced template hashing by verifying against an allowlist of trusted SHA-256 values. - **Tests** - Expanded installer-hash verification fixtures to cover formula hashing (success and mismatch), transitional template mappings, and duplicate-asset failure scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: cjagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Add one provider-neutral guide for running NemoClaw on a headless Linux server over SSH. Retire the outdated Brev deployment and web UI guides, and redirect their published URLs directly to the shared headless-server guide. ## Related Issue Fixes NVIDIA#7180 ## Changes - Add a variant-aware headless-server guide for OpenClaw, Hermes, and Deep Agents Code, including unattended installation, loopback-only access, readiness checks, credential boundaries, and manual recovery after a host reboot. - Clarify that Brev can provision one example of a headless server, while NemoClaw setup starts afterward and depends on neither Brev nor its web UI. - Remove the Brev web UI and remote GPU deployment pages from the docs and navigation. - Replace Brev deployment claims in the platform matrix with one caveated headless Linux server path. - Add direct redirects for the retired canonical and legacy URL forms, including HTML and Markdown routes. - Remove stale Brev troubleshooting and cross-references while retaining factual reference documentation for the still-present deprecated `nemoclaw deploy` compatibility command. - Add regression coverage for guide content, variant boundaries, retired routes, direct redirects, published links, and generated platform documentation. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [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: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed - [x] Targeted behavior tests pass — `npx vitest run test/headless-server-docs.test.ts test/check-docs-published-routes.test.ts test/check-docs-links.test.ts test/generate-platform-docs.test.ts src/lib/gateway-token-command.test.ts` (86 passed) - [x] Applicable broad gate passed — all 48 applicable PR checks passed, including CLI shards, CodeQL, image builds, platform E2Es, and automated reviews - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [x] `npm run docs` builds — 0 errors and one existing Fern warning - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) - [x] New doc pages include SPDX header and frontmatter - [x] Clean-Linux `cloud-onboard` E2E passed on the final commit — [workflow run](https://github.com/NVIDIA/NemoClaw/actions/runs/29892562701) --- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a new “Deploy to a Headless Server” guide for SSH-only setup, including unattended onboarding, readiness/probe checks, policy setup, updates, recovery, and troubleshooting. * Updated site navigation and multiple overview/reference pages to point to the new guide. * Removed Brev-specific deployment docs and added redirects so legacy links route to the shared headless guide. * **Tests** * Added/expanded contract tests to validate published routes and per-agent content, including recovery and dashboard/token behavior. * **Chores** * Refreshed platform support metadata and broadened redirect-route validation coverage. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com>
## Summary - raise the Hermes Python guard test-harness allowance from 5 seconds to 90 seconds - apply the shared allowance to the three runtime-config-guard helper paths only - correct the WSL root-only peer fixture to start from the production mutable topology, `sandbox:sandbox 03770` - assert sealing produces `root:sandbox 03770`, permits sandbox-group runtime-state creation, rejects unlink of root-owned sealed config, and restores the original ownership - let the existing config-reclaim peer write probe traverse Vitest's private temp root only for the duration of that probe, then restore its exact mode - leave production runtime behavior and non-guard command limits unchanged ## Evidence - main CI job 88920894839 returned `status: null` after the first guard child exceeded its 5-second `spawnSync` limit; the runner and later guard cases remained healthy - four prior main runs passed the same case in about 0.3 seconds, confirming a load-sensitive harness limit rather than a Hermes behavior regression - current-main Platform Vitest run 29919416442 passed the complete WSL suite (1,642 files / 19,227 tests) and then reproduced the isolated root-fixture failure - historical run 29307612216 reproduced that fixture failure before the OpenClaw upgrade and before NVIDIA#7379 - first exact-head WSL proof 29923652396 passed the complete WSL suite and both corrected Hermes root contracts; it then exposed the next root-only fixture defect - that config-reclaim test completed production normalization and all ownership/mode assertions; only its stepped-down write probe failed because PR NVIDIA#6690 made Vitest's shared temp ancestor private - current exact head `b7414d2f7f1bfd68028e9f43c11c1cc61033e266` includes current `main` at `f9924949922f8e554f94aeefdd23a993a801e7b4` - current exact-head platform proof: https://github.com/NVIDIA/NemoClaw/actions/runs/29929199550 - focused `nemoclaw-start-perms` suite: 16 passed, 3 Linux-root capability skips on macOS - `npm run build:cli` and `npm run check:diff`: passed - independent review of the narrow changes: no production findings Signed-off-by: Aaron Erickson <aerickson@nvidia.com> --------- Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary <!-- 1-3 plain sentences: what changes and why. Describe before-and-after behavior when it applies. Follow the NemoClaw Writing Guide: https://github.com/NVIDIA/NemoClaw/blob/main/WRITING.md. Do not add unrelated prose cleanup. --> Adds a real-artifact regression for the reviewed OpenClaw diagnostics remediation, proving malformed Jaeger trace and baggage headers cannot terminate the process. Product-scope verdict: NVIDIA#7337 requires this regression and owns removal after an upstream-safe SDK graph; this PR does not create a supported integration or recipe. GitHub merge status is separate: this task stops after exact-base CI and E2E pass but before human approval, so GitHub can report `BLOCKED` or `REVIEW_REQUIRED` without a product-scope rejection. ## Related Issue <!-- Fixes #NNN or Closes #NNN. Remove this section if none. --> Related to NVIDIA#7337. This PR delivers the independently reviewable regression portion; it does not close the issue because removing the archive remediation still depends on a reviewed upstream OpenClaw diagnostics release. ## Changes <!-- List concrete changes. If this adds an abstraction, configuration, fallback, migration, or compatibility path, name its current requirement and consumer, explain why a direct change is insufficient, and identify the test that protects it. --> - Add an opt-in child-process probe that materializes the integrity-pinned diagnostics archive, applies the production remediation, installs it with lifecycle scripts disabled, and resolves Jaeger through the SDK Node consumer. - Cover malformed `uber-trace-id` and `uberctx-*` values plus valid trace and baggage controls. - Run the probe in the trusted main-only real-distribution job and enforce that workflow boundary in the dependency-review contract test. - Record the regression evidence and mark the diagnostics remediation branch for removal under NVIDIA#7337 only after a reviewed upstream release is safe. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: No user-visible behavior changes; the internal dependency-review evidence documents the regression contract. - [x] 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: Pending independent human review; no waiver requested. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## DGX Station Hardware Evidence <!-- Required only when scripts/prepare-dgx-station-host.sh changes. Maintainers must review the linked evidence before approving or merging. This is human-reviewed evidence, not authenticated hardware provenance. Exceptional bypasses use existing repository governance and must be documented on the PR. --> - [ ] Tested on DGX Station - Tested commit: not applicable - Station profile/scenario: not applicable - Result: not applicable - Supporting evidence: not applicable ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable — the merge commit passed commit-msg and normal pre-push; the canonical `upstream/main...HEAD` diff passed the equivalent pre-commit and pre-push checks. - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — 10/10 dependency-review contract tests passed with the opt-in test skipped by default; `NEMOCLAW_REAL_OPENCLAW_JAEGER_HARNESS=1 npx --no-install vitest run --project integration test/openclaw-diagnostics-jaeger-runtime.test.ts --silent=false --reporter=default` passed 1/1 against the reviewed registry artifact. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not applicable because the new opt-in harness has focused real-artifact coverage and the repository diff checks passed. - [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) — passed with 0 errors and 2 existing Fern warnings. - [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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com> --------- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Signed-off-by: Aaron Erickson <aerickson@nvidia.com> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com> Co-authored-by: Julie Yaunches <jyaunches@nvidia.com> Co-authored-by: Aaron Erickson <aerickson@nvidia.com> Co-authored-by: Senthil Ravichandran <senthilr@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Adds the canonical `## v0.0.92` release entry to `docs/changelog/2026-07-22.mdx` before the release plan is generated. The entry summarizes all ten pull requests merged after v0.0.91, including the OpenClaw security update and Jaeger runtime regression coverage. ## Changes - Added the canonical v0.0.92 changelog entry. - Recorded the user-visible, security, documentation, CI, and test changes in the release range. - NVIDIA#7280 -> `docs/changelog/2026-07-22.mdx`: OpenClaw 2026.7.1 and Node.js 22.23.1 security/runtime update. - NVIDIA#7378 -> `docs/changelog/2026-07-22.mdx`: canonical macOS watcher path validation. - NVIDIA#7379 -> `docs/changelog/2026-07-22.mdx`: stabilized full WSL platform validation. - NVIDIA#7380 -> `docs/changelog/2026-07-22.mdx`: bounded swap for hosted Hermes image exports. - NVIDIA#7100 -> `docs/changelog/2026-07-22.mdx`: semantic progress phases for live E2E tests. - NVIDIA#7376 -> `docs/changelog/2026-07-22.mdx`: restored v0.0.91 changelog history and corrected tagged guidance. - NVIDIA#7374 -> `docs/changelog/2026-07-22.mdx`: reviewed Homebrew formula transition for installer integrity checks. - NVIDIA#7346 -> `docs/changelog/2026-07-22.mdx`: provider-neutral headless server deployment guidance. - NVIDIA#7381 -> `docs/changelog/2026-07-22.mdx`: stabilized Hermes guard timing and WSL ownership fixtures. - NVIDIA#7339 -> `docs/changelog/2026-07-22.mdx`: real-artifact Jaeger header remediation regression coverage. ## 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 - [x] Existing tests cover changed behavior — justification: `test/changelog-docs.test.ts` validates the canonical dated changelog and release heading contract. - [ ] Tests not applicable — justification: - [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: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable - Station profile/scenario: Not applicable - Result: Not applicable - Supporting evidence: Not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run test/changelog-docs.test.ts` passed 6/6 tests. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Not applicable to a changelog-only change. - [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) — passed with 0 errors and 2 pre-existing Fern warnings. - [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) --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added `v0.0.92` release notes covering sandboxing updates (OpenClaw/Node.js bumps, integrity pinning remediation, mcporter handling, and upgrade validation). * Updated deployment guidance for provider-neutral headless installs, and improved live E2E test reporting plus phase-plan validation. * Tightened installer integrity-check messaging during an OpenShell Homebrew transition and expanded platform/image validation (including macOS/WSL timing) and hosted image export behavior. * Restored the previously missed `v0.0.91` changelog entry and release validation guidance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary This draft completes the two unowned follow-ups from the v0.0.91 post-tag documentation audit. It documents the remaining rebuild data-loss and base-image override constraints, and preserves flat Markdown legacy routes for the Additional Setup migration. ## Changes - NVIDIA#7213 -> `docs/manage-sandboxes/recover-rebuild-sandboxes.mdx` and `docs/changelog/2026-07-22.mdx`: Document when `rebuild --force` can continue after a manifest-declared state-file backup failure, what state it restores, and which base-image overrides remain trusted. - NVIDIA#7261 -> `fern/docs.yml`, `scripts/check-docs-published-routes.mts`, and `test/station-doc-ownership.test.ts`: Add direct `.md` and `.mdx` redirects for the pre-variant DGX Station and Windows Prerequisites routes, reject duplicate mappings, and validate each destination against the published route index. - Existing Markdown clients require the redirect compatibility paths because Fern's generic redirects do not preserve these retired flat routes. ## 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 - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior, justification: - [ ] Tests not applicable, justification: - [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: ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable. This PR changes documentation routes only. - Station profile/scenario: Not applicable. - Result: Not applicable. - Supporting evidence: Not applicable. ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above, command/result: `npx vitest run test/station-doc-ownership.test.ts` passed 3 tests; `npx vitest run test/check-docs-published-routes.test.ts` passed 25 tests; `npx vitest run test/changelog-docs.test.ts` passed 6 tests. - [ ] Applicable broad gate passed, `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes, command/result: Not run. The focused docs tests and build cover this change. - [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). The build completed with 0 errors and the existing light-mode accent contrast warning. - [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) --- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Clarified “Rebuilds” behavior when manifest-declared state can’t be archived, including `--force`, and how partial/restored state works. * Tightened guidance for remote `base-image` overrides to immutable digests and clarified when local bases are accepted. * Updated prerequisite documentation redirects to include legacy `.md` and `.mdx` routes (versioned and unversioned). * **Tests** * Strengthened redirect validation by parsing `fern/docs.yml` and asserting exact `{ source, destination }` matches for `.md`/`.mdx`. * Added a test to reject an “Additional Setup” redirect to an unpublished destination. * **Chores** * Expanded published-route redirect checking to include “Additional Setup” paths. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
|
Important Review skippedToo many files! This PR contains 2682 files, which is 2582 over the limit of 100. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. Usage-priced reviews support at most 300 files. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (10)
📒 Files selected for processing (2990)
You can disable this status message by setting the ✨ Finishing Touches🧪 Generate unit tests (beta)
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Related Issue
Changes
Type of Change
Verification
npx prek run --all-filespassesnpm testpassesnpm run docsbuilds without warnings (doc changes only)Signed-off-by: Your Name your-email@example.com