Skip to content

fix(plugin): make shields status host-authoritative - #5838

Merged
cv merged 8 commits into
mainfrom
codex/fix-shields-slash-default-state
Jun 27, 2026
Merged

fix(plugin): make shields status host-authoritative#5838
cv merged 8 commits into
mainfrom
codex/fix-shields-slash-default-state

Conversation

@cv

@cv cv commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Stop the in-sandbox /nemoclaw shields command from asserting a shields posture that only the host can verify. Status requests now point to the authoritative host CLI, and the obsolete host-owned shields fields are removed from the plugin-local state model.

Related Issue

Fixes #5821

Changes

  • Return host-side status guidance for /nemoclaw shields [status] instead of reporting UP, DOWN, or NOT CONFIGURED from unrelated plugin-local state.
  • Remove the shields dependency and status-rendering branches from the OpenClaw plugin command.
  • Remove the dead shields fields, parser support, defaults, and fixture boilerplate from the plugin state model.
  • Replace state-mocking tests with a compact contract that forbids unverifiable posture claims and preserves host-only mutation guidance.
  • Update slash-command help and user documentation to identify nemoclaw <name> shields status as authoritative.

Type of Change

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

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • 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: CodeRabbit and both PR Review Advisor checks passed for final head 656150b83; required shields-config-vitest and full-e2e-vitest lanes passed in run 28283525871.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • PR description includes the DCO sign-off declaration and every commit appears as Verified in GitHub
  • Git hooks passed during commit and push, or npx prek run --from-ref main --to-ref HEAD passes
  • Targeted tests pass for changed behavior
  • Full npm test passes (broad runtime changes only)
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — completed with 0 errors and 2 pre-existing warnings.
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Carlos Villela cvillela@nvidia.com

@cv cv self-assigned this Jun 26, 2026
@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

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

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR removes shield fields from persisted state, changes /nemoclaw shields to return host-only guidance, and updates related tests, help text, and reference documentation.

Changes

Shield host-only status

Layer / File(s) Summary
Persisted state schema
nemoclaw/src/blueprint/state.ts, nemoclaw/src/blueprint/state.test.ts, nemoclaw/src/runtime-context.test.ts
NemoClawState, readStatePatch(), and blankState() no longer include shield-related fields, and the state helpers/tests were updated to match the reduced baseline shape.
/nemoclaw shields response
nemoclaw/src/commands/shields-status.ts, nemoclaw/src/commands/shields-status.test.ts
slashShieldsStatus now returns host-only availability text for status, up, and down, sanitizes unknown arguments, and the command tests cover the updated output rules.
Slash wiring and reference text
nemoclaw/src/commands/slash.ts, nemoclaw/src/commands/slash.test.ts, docs/reference/commands.mdx
handleSlashCommand wiring stays aligned with the shields command mocks, the /nemoclaw help text describes host-side shields checking, and the reference docs add the sandbox shields status guidance.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

area: docs, area: sandbox

Poem

A bunny hops where shields used to shine,
Now host-side truth is the clearer line.
Unknown args stay neat and tame,
While docs and tests all match the same.
🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the main change: making shields status host-authoritative.
Linked Issues check ✅ Passed The PR removes the sandbox's misleading UP claim and switches /nemoclaw shields to an unavailable/host-guidance message, satisfying the issue's minimum requirement.
Out of Scope Changes check ✅ Passed All code changes stay focused on shields status handling, docs, and tests, with no clearly unrelated scope added.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/fix-shields-slash-default-state

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

@github-actions

Copy link
Copy Markdown
Contributor

@github-code-quality

github-code-quality Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the codex/fix-shields-sl... branch is 96%. Coverage data for the main branch is not yet available.

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

TypeScript / code-coverage/cli

The overall coverage in the codex/fix-shields-sl... branch is 47%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main codex/fix-shields-sl... 656150b +/-
src/lib/state/o...oard-session.ts 91%
src/lib/actions...dbox/rebuild.ts 73%
src/lib/sandbox/config.ts 72%
src/lib/onboard/preflight.ts 62%
src/lib/shields/index.ts 62%
src/lib/actions...licy-channel.ts 60%
src/lib/state/sandbox.ts 56%
src/lib/policy/index.ts 48%
src/lib/onboard...er-gpu-patch.ts 47%
src/lib/onboard.ts 18%

Updated June 27, 2026 08:17 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: shields-config-vitest, full-e2e-vitest
Optional E2E: openclaw-tui-chat-correlation-vitest

Dispatch hint: shields-config-vitest,full-e2e-vitest

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • shields-config-vitest (medium (~45 min timeout)): Required because this PR changes shields behavior and the persisted shields-related state surface. This live scenario validates the real host-side shields up/down/status lifecycle, config locking, drift detection, and audit behavior against a sandbox.
  • full-e2e-vitest (high (~75 min timeout)): Required because the PR changes OpenClaw plugin slash-command behavior and help text used by the real assistant flow. The full live OpenClaw E2E validates install/onboard, sandbox health, hosted inference, and that the NemoClaw plugin slash surface remains registered in a real sandbox.

Optional E2E

  • openclaw-tui-chat-correlation-vitest (high (~75 min timeout)): Optional adjacent confidence for the real OpenClaw TUI/chat path after changing in-sandbox slash-command user-facing text. It does not specifically assert /nemoclaw shields, but it exercises the live assistant surface.

New E2E recommendations

  • in-sandbox shields slash command (high): Existing shields-config coverage validates authoritative host-side shields commands, and full-e2e validates plugin registration/help, but there does not appear to be focused live coverage that runs /nemoclaw shields, /nemoclaw shields status, /nemoclaw shields up, and /nemoclaw shields down inside a real OpenClaw sandbox and asserts the host-only guidance/non-authoritative-status invariant.
    • Suggested test: Add a focused live OpenClaw plugin slash scenario for /nemoclaw shields [status|up|down] that verifies in-sandbox output points to nemoclaw <name> shields status|up|down on the host and never reports Shields: UP/DOWN/NOT CONFIGURED from plugin-local state.

Dispatch hint

  • Workflow: .github/workflows/e2e-vitest-scenarios.yaml
  • jobs input: shields-config-vitest,full-e2e-vitest

@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: shields-config-vitest
Optional Vitest E2E scenarios: ubuntu-repo-cloud-openclaw

Dispatch required Vitest E2E scenarios:

  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=shields-config-vitest

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: medium

Required Vitest E2E scenarios

  • shields-config-vitest: The PR changes shields-related command behavior and removes shields fields from the persisted NemoClaw plugin state schema. The wired shields-config Vitest job is the smallest live E2E surface that validates the authoritative host-side shields status/up/down lifecycle still works against a real OpenClaw sandbox after these source changes.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=shields-config-vitest

Optional Vitest E2E scenarios

  • ubuntu-repo-cloud-openclaw: Optional baseline coverage for packaging/onboarding the changed OpenClaw plugin command and state code in a standard live OpenClaw sandbox. This is adjacent to the more specific shields-config job and does not directly assert the in-sandbox slash-command text.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw

Relevant changed files

  • nemoclaw/src/blueprint/state.ts
  • nemoclaw/src/commands/shields-status.ts
  • nemoclaw/src/commands/slash.ts

@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Add or justify PRA-T1 and any related test follow-ups.
Open items: 0 required · 0 warnings · 0 suggestions · 8 test follow-ups
Since last review: 1 prior item resolved · 0 still apply · 0 new items found

Action checklist

  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Acceptance clause
  • PRA-T5 Add or justify test follow-up: Acceptance clause
  • PRA-T6 Add or justify test follow-up: Acceptance clause
  • PRA-T7 Add or justify test follow-up: Acceptance clause
  • PRA-T8 Add or justify test follow-up: Acceptance clause
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Run or add targeted runtime validation where an installed OpenClaw TUI inside a Docker-driver sandbox executes `/nemoclaw shields` and `/nemoclaw shields status`, and the rendered text says status is unavailable/cannot verify host posture rather than `Shields: UP` or `normal security level`.. Unit coverage is strong for the changed TypeScript handlers and state schema, and it resolves the prior advisor test suggestion. Because the original bug was observed through a live OpenClaw TUI in a Docker-driver sandbox, targeted runtime validation would still improve confidence that packaging/runtime wiring invokes the updated handler.
  • PRA-T2 Runtime validation — Run or add targeted runtime validation where an installed OpenClaw TUI executes `/nemoclaw shields up`, `/nemoclaw shields down`, and `/nemoclaw shields abcxyz`, confirming the visible output matches the unit-tested host-only guidance and unknown-argument usage behavior.. Unit coverage is strong for the changed TypeScript handlers and state schema, and it resolves the prior advisor test suggestion. Because the original bug was observed through a live OpenClaw TUI in a Docker-driver sandbox, targeted runtime validation would still improve confidence that packaging/runtime wiring invokes the updated handler.
  • PRA-T3 Runtime validation — Before any future change attempts full host-state parity, add host/sandbox integration coverage for host `NOT CONFIGURED`, host `DOWN` with timeout/reason, and host `UP`, verifying the TUI reflects only authoritative host-provided state.. Unit coverage is strong for the changed TypeScript handlers and state schema, and it resolves the prior advisor test suggestion. Because the original bug was observed through a live OpenClaw TUI in a Docker-driver sandbox, targeted runtime validation would still improve confidence that packaging/runtime wiring invokes the updated handler.
  • PRA-T4 Acceptance clause — **NemoClaw:** v0.0.67 — add test evidence or identify existing coverage. Linked-issue environment context; the diff changes plugin source, docs, and unit tests but does not provide live installed-version evidence.
  • PRA-T5 Acceptance clause — **Agent:** OpenClaw TUI inside sandbox `test-sb` — add test evidence or identify existing coverage. `nemoclaw/src/commands/shields-status.test.ts` and `nemoclaw/src/commands/slash.test.ts` exercise the TypeScript command handlers and slash routing; the read-only diff does not show a live OpenClaw TUI run inside `test-sb`.
  • PRA-T6 Acceptance clause — **Host OS:** DGX Spark — add test evidence or identify existing coverage. Linked-issue environment context; no host OS runtime validation is present in the changed files.
  • PRA-T7 Acceptance clause — **Sandbox:** `test-sb` (Docker-driver sandbox with OpenClaw agent) — add test evidence or identify existing coverage. The changed handler is the OpenClaw plugin command path, but the diff does not include Docker-driver sandbox runtime validation for `test-sb`.
  • PRA-T8 Acceptance clause — **Inference:** nvidia/nemotron-3-nano-omni-30b-a3b-reasoning (per TUI footer) — add test evidence or identify existing coverage. The changed shields handler is independent of inference configuration; no inference runtime evidence is included in the diff.

Workflow run details

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

@cv cv added the v0.0.69 label Jun 26, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@nemoclaw/src/blueprint/state.test.ts`:
- Around line 158-181: The `loadState()` coverage in `state.test.ts` still
misses two `shieldsConfigured` inference branches in the parser logic. Add tests
alongside the existing `shieldsDown` and `fileHashes` cases to verify
`chattrApplied` and `shieldsPolicySnapshotPath` also cause `shieldsConfigured`
to be true, using the same persisted-state setup pattern so the behavior in
`loadState` is fully covered.

In `@nemoclaw/src/blueprint/state.ts`:
- Around line 51-52: The `hasStringMap()` check is too permissive for
`fileHashes`, since any string-valued object can currently be treated as valid
configuration evidence. Tighten the validation in `state.ts` so
`shieldsConfigured` only becomes true when the `fileHashes` values are real
SHA-256 digests, and update the `shieldsConfigured`/`fileHashes` handling to
reject malformed entries like short non-hex strings. Use the existing
`hasStringMap()` and `isRecord` flow to locate the change, and ensure the
persisted shields contract only accepts valid lock hashes as evidence.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a4627f04-0f2c-4975-9d87-1c96ff866bd9

📥 Commits

Reviewing files that changed from the base of the PR and between 0c2c31a and 00d764d.

📒 Files selected for processing (5)
  • docs/reference/commands.mdx
  • nemoclaw/src/blueprint/state.test.ts
  • nemoclaw/src/blueprint/state.ts
  • nemoclaw/src/commands/shields-status.test.ts
  • nemoclaw/src/commands/shields-status.ts

Comment thread nemoclaw/src/blueprint/state.test.ts Outdated
Comment on lines +158 to +181
it("marks shields configured when persisted state has lock evidence", () => {
store.set(
STATE_PATH,
JSON.stringify({
sandboxName: "sb",
shieldsDown: false,
fileHashes: { "/sandbox/.openclaw/openclaw.json": "abc123" },
updatedAt: "2026-03-01T12:00:00.000Z",
}),
);
expect(loadState().shieldsConfigured).toBe(true);
});

it("marks shields configured when persisted state is temporarily unlocked", () => {
store.set(
STATE_PATH,
JSON.stringify({
sandboxName: "sb",
shieldsDown: true,
updatedAt: "2026-03-01T12:00:00.000Z",
}),
);
expect(loadState().shieldsConfigured).toBe(true);
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Cover the remaining shieldsConfigured inference branches.

These regressions exercise fileHashes and shieldsDown, but the new parser logic also treats chattrApplied and shieldsPolicySnapshotPath as configuration evidence. Please add cases for those branches too, otherwise a future refactor can silently regress posture reporting in this security-sensitive path.

As per coding guidelines, nemoclaw/src/blueprint/**/*.test.ts: Security-sensitive code paths in nemoclaw/src/blueprint/ require extra test coverage.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@nemoclaw/src/blueprint/state.test.ts` around lines 158 - 181, The
`loadState()` coverage in `state.test.ts` still misses two `shieldsConfigured`
inference branches in the parser logic. Add tests alongside the existing
`shieldsDown` and `fileHashes` cases to verify `chattrApplied` and
`shieldsPolicySnapshotPath` also cause `shieldsConfigured` to be true, using the
same persisted-state setup pattern so the behavior in `loadState` is fully
covered.

Source: Coding guidelines

Comment thread nemoclaw/src/blueprint/state.ts Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ❌ Some jobs failed

Run: 28218164643
Workflow ref: codex/fix-shields-slash-default-state
Requested scenarios: (default — all supported)
Requested jobs: shields-config-vitest
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
shields-config-vitest ❌ failure

Failed jobs: shields-config-vitest. Check run artifacts for logs.

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 28218721599
Target ref: codex/fix-shields-slash-default-state
Workflow ref: main
Requested jobs: shields-config-e2e
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
shields-config-e2e ❌ failure

Failed jobs: shields-config-e2e. Check run artifacts for logs.

@cv

cv commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator Author

Follow-up on automated review for cba1f8356:

  • The stale CodeRabbit shieldsConfigured inline finding no longer applies because the follow-up commit removed plugin-local shieldsConfigured inference entirely; latest CodeRabbit review reports no actionable comments.
  • The PR Review Advisor now reports merge_as_is with no blocking findings. The remaining runtime items are acknowledged: this PR intentionally takes the conservative fallback path instead of wiring host-UP propagation into the sandbox plugin. /nemoclaw shields now refuses to claim UP from unverifiable plugin-local state and points to host nemoclaw <name> shields status for authoritative posture.
  • Required live validation has been dispatched for the new head: Vitest shields-config-vitest run https://github.com/NVIDIA/NemoClaw/actions/runs/28218713003 and nightly shields-config-e2e run https://github.com/NVIDIA/NemoClaw/actions/runs/28218721599.

A dedicated in-sandbox slash-command live E2E would be useful follow-up coverage once there is a reusable OpenClaw plugin/slash invocation harness, but it is not required for this conservative bug fix because the changed behavior is directly covered by plugin command tests and avoids the unsafe UP assertion.

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 28218760505
Target ref: codex/fix-shields-slash-default-state
Requested jobs: shields-config-e2e
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
shields-config-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ❌ Some jobs failed

Run: 28218713003
Workflow ref: codex/fix-shields-slash-default-state
Requested scenarios: (default — all supported)
Requested jobs: shields-config-vitest
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
shields-config-vitest ❌ failure

Failed jobs: shields-config-vitest. Check run artifacts for logs.

@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior labels Jun 26, 2026
@wscurran

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Fix PRA-1: Acceptance clause: avoid unverified shields up status (commit cba1f83) — SATISFIED; then add or justify PRA-T1.
Open items: 2 required · 1 warning · 2 suggestions · 1 test follow-up
Since last review: 2 prior items resolved · 1 still applies · 0 new items found

Action checklist

  • PRA-1 Fix: Acceptance clause: avoid unverified shields up status (commit cba1f83) — SATISFIED in nemoclaw/src/commands/shields-status.ts:58
  • PRA-2 Fix: Acceptance clause: report default mutable shields posture (commit 00d764d) — SATISFIED in nemoclaw/src/commands/shields-status.ts:58
  • PRA-3 Resolve or justify: E2E sandbox↔host shields parity tests (PRA-T1/T2/T3) remain as known follow-ups in nemoclaw/src/commands/shields-status.test.ts:43
  • PRA-T1 Add or justify test follow-up: E2E sandbox↔host shields parity tests (PRA-T1/T2/T3) remain as known follow-ups
  • PRA-4 In-scope improvement: Security posture improved: false UP status eliminated in nemoclaw/src/commands/shields-status.ts:1
  • PRA-5 In-scope improvement: Simplification: removed 6 shields fields, 2 helpers, migration tests, and mock infrastructure in nemoclaw/src/blueprint/state.ts:1

Findings index

ID Severity Category Location Required action
PRA-1 Required acceptance nemoclaw/src/commands/shields-status.ts:58 Clause met — no action needed.
PRA-2 Required acceptance nemoclaw/src/commands/shields-status.ts:58 Clause met — no action needed.
PRA-3 Resolve/justify tests nemoclaw/src/commands/shields-status.test.ts:43 Acknowledge as known follow-up. These require E2E infrastructure (real sandbox) and are tracked separately. No blocker for this PR — the security model explicitly makes host authoritative and plugin read-only.
PRA-4 Improvement security nemoclaw/src/commands/shields-status.ts:1 No action needed — this is the intended security improvement from commits cba1f83 and 00d764d.
PRA-5 Improvement scope nemoclaw/src/blueprint/state.ts:1 No action needed — cleanup complete in this PR.

🚨 Required before merge

Address these before merging unless a maintainer explicitly overrides the advisor with rationale.

PRA-1 Required — Acceptance clause: avoid unverified shields up status (commit cba1f83) — SATISFIED

  • Location: nemoclaw/src/commands/shields-status.ts:58
  • Category: acceptance
  • Problem: Commit cba1f83 'fix(plugin): avoid unverified shields up status' verified. The plugin no longer calls loadState() and returns 'Shields status unavailable inside the sandbox' with explicit guidance to run host CLI for authoritative status.
  • Impact: Acceptance clause from PR commits satisfied. The false positive UP reporting that misled users (issue [All Platforms][Agent&Skills][GitHub Issue #5821] /nemoclaw shields TUI shows "Shields: UP" while host shields status reports default mutable state #5821) is eliminated.
  • Required action: Clause met — no action needed.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Verify shields-status.ts:58-64 returns 'Shields status unavailable inside the sandbox' with explicit message about inability to verify host-side lockdown.
  • Missing regression test: Covered by shields-status.test.ts:11-28 (parameterized tests for undefined, empty, whitespace-only, and explicit 'status' arguments all returning host-unavailable message).
  • Done when: The required change is committed and verification passes: Verify shields-status.ts:58-64 returns 'Shields status unavailable inside the sandbox' with explicit message about inability to verify host-side lockdown.
  • Evidence: shields-status.ts no longer calls loadState(); returns host-only guidance for all status requests.

PRA-2 Required — Acceptance clause: report default mutable shields posture (commit 00d764d) — SATISFIED

  • Location: nemoclaw/src/commands/shields-status.ts:58
  • Category: acceptance
  • Problem: Commit 00d764d 'fix(plugin): report default mutable shields posture' verified. The plugin now reports that shields status is unavailable inside the sandbox and cannot verify host-side posture, correctly reflecting the default mutable state.
  • Impact: Acceptance clause from PR commits satisfied. Users see accurate guidance rather than false UP claim.
  • Required action: Clause met — no action needed.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check shields-status.ts:58-64 — returns explicit message 'This command cannot verify the host-side shields posture. Run nemoclaw <name> shields status from the host for authoritative status.'
  • Missing regression test: Covered by shields-status.test.ts:11-28 (parameterized tests for undefined/empty/whitespace/status arguments).
  • Done when: The required change is committed and verification passes: Check shields-status.ts:58-64 — returns explicit message 'This command cannot verify the host-side shields posture. Run nemoclaw <name> shields status from the host for authoritative status.'.
  • Evidence: shields-status.ts:58-64 returns 'Shields status unavailable inside the sandbox' with host CLI pointer.
Review findings by urgency: 2 required fixes, 1 item to resolve/justify, 2 in-scope improvements

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

PRA-3 Resolve/justify — E2E sandbox↔host shields parity tests (PRA-T1/T2/T3) remain as known follow-ups

  • Location: nemoclaw/src/commands/shields-status.test.ts:43
  • Category: tests
  • Problem: Previous advisor review items PRA-T1, PRA-T2, PRA-T3 (E2E runtime validation for sandbox↔host shields parity for all three postures: NOT CONFIGURED, DOWN, UP) remain unresolved. Unit/mock tests comprehensively cover plugin-local behavior (11 named test blocks), but real sandbox↔host state parity requires E2E infrastructure spawning real sandboxes.
  • Impact: Full end-to-end verification that /nemoclaw shields output appropriately directs to host CLI under all host shield states (default, down with timeout, up) requires spawning real sandboxes. This is a known gap tracked separately.
  • Recommended action: Acknowledge as known follow-up. These require E2E infrastructure (real sandbox) and are tracked separately. No blocker for this PR — the security model explicitly makes host authoritative and plugin read-only.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Previous advisor review body lists PRA-T1/T2/T3 as open test follow-ups needing test/e2e-scenario/ for shields-default-posture, shields-down-timeout, shields-up-posture.
  • Missing regression test: E2E tests in test/e2e-scenario/ that spawn real sandbox and verify /nemoclaw shields output matches host-side nemoclaw <name> shields status guidance for all three postures (NOT CONFIGURED, DOWN, UP).
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Previous advisor review body lists PRA-T1/T2/T3 as open test follow-ups needing test/e2e-scenario/ for shields-default-posture, shields-down-timeout, shields-up-posture.
  • Evidence: Previous advisor review comment shows PRA-T1/T2/T3 as open test follow-ups. Unit tests in shields-status.test.ts cover all plugin-local branches.

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

PRA-4 Improvement — Security posture improved: false UP status eliminated

  • Location: nemoclaw/src/commands/shields-status.ts:1
  • Category: security
  • Problem: The /nemoclaw shields slash command previously reported 'Shields: UP' when shieldsDown was false (default), implying verified lockdown. The plugin cannot verify host-side chattr, policy snapshots, or seal hashes. New behavior returns explicit 'Shields status unavailable inside the sandbox' with guidance to run 'nemoclaw <name> shields status' from the host for authoritative status.
  • Impact: Removes false sense of security for sandbox users who might believe the sandbox is locked down when it is actually in default mutable state. Users are now correctly directed to the host CLI which is the single source of truth for shields posture.
  • Suggested action: No action needed — this is the intended security improvement from commits cba1f83 and 00d764d.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Compare old behavior (returned 'Shields: UP' when !shieldsDown) vs new behavior (returns 'Shields status unavailable inside the sandbox' with explicit message about inability to verify host-side lockdown).
  • Missing regression test: Unit tests in shields-status.test.ts cover the new behavior (11 parameterized test cases covering undefined/empty/whitespace/status/up/down/unknown arguments, sanitization, truncation). E2E sandbox↔host parity tests (PRA-T1/T2/T3) remain as follow-ups requiring real sandbox infrastructure.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: shields-status.ts:58-64 returns explicit message 'This command cannot verify the host-side shields posture. Run nemoclaw <name> shields status from the host for authoritative status.' No loadState() call in function.

PRA-5 Improvement — Simplification: removed 6 shields fields, 2 helpers, migration tests, and mock infrastructure

  • Location: nemoclaw/src/blueprint/state.ts:1
  • Category: scope
  • Problem: Removed shieldsDown, shieldsDownAt, shieldsDownTimeout, shieldsDownReason, shieldsDownPolicy, shieldsPolicySnapshotPath fields from NemoClawState interface; removed readBoolean and readNullableNumber helpers; removed shields migration test and mock infrastructure. Net reduction: ~50 lines from state.ts, ~140 lines from shields-status.test.ts.
  • Impact: Dead code eliminated; attack surface reduced; plugin state schema simplified. No security boundary weakened — shields state was never verified by plugin.
  • Suggested action: No action needed — cleanup complete in this PR.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Verify state.ts no longer contains shieldsDown, shieldsDownAt, shieldsDownTimeout, shieldsDownReason, shieldsDownPolicy, shieldsPolicySnapshotPath fields or readBoolean/readNullableNumber helpers.
  • Missing regression test: N/A — simplification of dead code.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: state.ts and shields-status.test.ts diffs show removal of all shields-related fields, helpers, and test fixtures.
Simplification opportunities: 1 possible cut, net -190 lines possible

These are safe simplification checks only. Do not remove validation, security controls, data-loss prevention, or required tests.

  • PRA-5 delete (nemoclaw/src/blueprint/state.ts:1): 6 shields fields from NemoClawState, readBoolean/readNullableNumber helpers, shields migration test, shields mock infrastructure
    • Replacement: Host-authoritative model; plugin returns guidance to host CLI
    • Net: -190 lines
    • Safety boundary: Host CLI remains single source of truth for shields posture; plugin cannot mutate shields state
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 E2E sandbox↔host shields parity tests (PRA-T1/T2/T3) remain as known follow-ups — Acknowledge as known follow-up. These require E2E infrastructure (real sandbox) and are tracked separately. No blocker for this PR — the security model explicitly makes host authoritative and plugin read-only.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Required — Acceptance clause: avoid unverified shields up status (commit cba1f83) — SATISFIED

  • Location: nemoclaw/src/commands/shields-status.ts:58
  • Category: acceptance
  • Problem: Commit cba1f83 'fix(plugin): avoid unverified shields up status' verified. The plugin no longer calls loadState() and returns 'Shields status unavailable inside the sandbox' with explicit guidance to run host CLI for authoritative status.
  • Impact: Acceptance clause from PR commits satisfied. The false positive UP reporting that misled users (issue [All Platforms][Agent&Skills][GitHub Issue #5821] /nemoclaw shields TUI shows "Shields: UP" while host shields status reports default mutable state #5821) is eliminated.
  • Required action: Clause met — no action needed.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Verify shields-status.ts:58-64 returns 'Shields status unavailable inside the sandbox' with explicit message about inability to verify host-side lockdown.
  • Missing regression test: Covered by shields-status.test.ts:11-28 (parameterized tests for undefined, empty, whitespace-only, and explicit 'status' arguments all returning host-unavailable message).
  • Done when: The required change is committed and verification passes: Verify shields-status.ts:58-64 returns 'Shields status unavailable inside the sandbox' with explicit message about inability to verify host-side lockdown.
  • Evidence: shields-status.ts no longer calls loadState(); returns host-only guidance for all status requests.

PRA-2 Required — Acceptance clause: report default mutable shields posture (commit 00d764d) — SATISFIED

  • Location: nemoclaw/src/commands/shields-status.ts:58
  • Category: acceptance
  • Problem: Commit 00d764d 'fix(plugin): report default mutable shields posture' verified. The plugin now reports that shields status is unavailable inside the sandbox and cannot verify host-side posture, correctly reflecting the default mutable state.
  • Impact: Acceptance clause from PR commits satisfied. Users see accurate guidance rather than false UP claim.
  • Required action: Clause met — no action needed.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check shields-status.ts:58-64 — returns explicit message 'This command cannot verify the host-side shields posture. Run nemoclaw <name> shields status from the host for authoritative status.'
  • Missing regression test: Covered by shields-status.test.ts:11-28 (parameterized tests for undefined/empty/whitespace/status arguments).
  • Done when: The required change is committed and verification passes: Check shields-status.ts:58-64 — returns explicit message 'This command cannot verify the host-side shields posture. Run nemoclaw <name> shields status from the host for authoritative status.'.
  • Evidence: shields-status.ts:58-64 returns 'Shields status unavailable inside the sandbox' with host CLI pointer.

PRA-3 Resolve/justify — E2E sandbox↔host shields parity tests (PRA-T1/T2/T3) remain as known follow-ups

  • Location: nemoclaw/src/commands/shields-status.test.ts:43
  • Category: tests
  • Problem: Previous advisor review items PRA-T1, PRA-T2, PRA-T3 (E2E runtime validation for sandbox↔host shields parity for all three postures: NOT CONFIGURED, DOWN, UP) remain unresolved. Unit/mock tests comprehensively cover plugin-local behavior (11 named test blocks), but real sandbox↔host state parity requires E2E infrastructure spawning real sandboxes.
  • Impact: Full end-to-end verification that /nemoclaw shields output appropriately directs to host CLI under all host shield states (default, down with timeout, up) requires spawning real sandboxes. This is a known gap tracked separately.
  • Recommended action: Acknowledge as known follow-up. These require E2E infrastructure (real sandbox) and are tracked separately. No blocker for this PR — the security model explicitly makes host authoritative and plugin read-only.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Previous advisor review body lists PRA-T1/T2/T3 as open test follow-ups needing test/e2e-scenario/ for shields-default-posture, shields-down-timeout, shields-up-posture.
  • Missing regression test: E2E tests in test/e2e-scenario/ that spawn real sandbox and verify /nemoclaw shields output matches host-side nemoclaw <name> shields status guidance for all three postures (NOT CONFIGURED, DOWN, UP).
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Previous advisor review body lists PRA-T1/T2/T3 as open test follow-ups needing test/e2e-scenario/ for shields-default-posture, shields-down-timeout, shields-up-posture.
  • Evidence: Previous advisor review comment shows PRA-T1/T2/T3 as open test follow-ups. Unit tests in shields-status.test.ts cover all plugin-local branches.

PRA-4 Improvement — Security posture improved: false UP status eliminated

  • Location: nemoclaw/src/commands/shields-status.ts:1
  • Category: security
  • Problem: The /nemoclaw shields slash command previously reported 'Shields: UP' when shieldsDown was false (default), implying verified lockdown. The plugin cannot verify host-side chattr, policy snapshots, or seal hashes. New behavior returns explicit 'Shields status unavailable inside the sandbox' with guidance to run 'nemoclaw <name> shields status' from the host for authoritative status.
  • Impact: Removes false sense of security for sandbox users who might believe the sandbox is locked down when it is actually in default mutable state. Users are now correctly directed to the host CLI which is the single source of truth for shields posture.
  • Suggested action: No action needed — this is the intended security improvement from commits cba1f83 and 00d764d.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Compare old behavior (returned 'Shields: UP' when !shieldsDown) vs new behavior (returns 'Shields status unavailable inside the sandbox' with explicit message about inability to verify host-side lockdown).
  • Missing regression test: Unit tests in shields-status.test.ts cover the new behavior (11 parameterized test cases covering undefined/empty/whitespace/status/up/down/unknown arguments, sanitization, truncation). E2E sandbox↔host parity tests (PRA-T1/T2/T3) remain as follow-ups requiring real sandbox infrastructure.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: shields-status.ts:58-64 returns explicit message 'This command cannot verify the host-side shields posture. Run nemoclaw <name> shields status from the host for authoritative status.' No loadState() call in function.

PRA-5 Improvement — Simplification: removed 6 shields fields, 2 helpers, migration tests, and mock infrastructure

  • Location: nemoclaw/src/blueprint/state.ts:1
  • Category: scope
  • Problem: Removed shieldsDown, shieldsDownAt, shieldsDownTimeout, shieldsDownReason, shieldsDownPolicy, shieldsPolicySnapshotPath fields from NemoClawState interface; removed readBoolean and readNullableNumber helpers; removed shields migration test and mock infrastructure. Net reduction: ~50 lines from state.ts, ~140 lines from shields-status.test.ts.
  • Impact: Dead code eliminated; attack surface reduced; plugin state schema simplified. No security boundary weakened — shields state was never verified by plugin.
  • Suggested action: No action needed — cleanup complete in this PR.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Verify state.ts no longer contains shieldsDown, shieldsDownAt, shieldsDownTimeout, shieldsDownReason, shieldsDownPolicy, shieldsPolicySnapshotPath fields or readBoolean/readNullableNumber helpers.
  • Missing regression test: N/A — simplification of dead code.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: state.ts and shields-status.test.ts diffs show removal of all shields-related fields, helpers, and test fixtures.

Workflow run details

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

@cv cv changed the title fix(plugin): report default mutable shields posture fix(plugin): make shields status host-authoritative Jun 27, 2026
@cv

cv commented Jun 27, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 28283525871
Workflow ref: codex/fix-shields-slash-default-state
Requested scenarios: (default — all supported)
Requested jobs: shields-config-vitest,full-e2e-vitest
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
full-e2e-vitest ✅ success
shields-config-vitest ✅ success

@cv

cv commented Jun 27, 2026

Copy link
Copy Markdown
Collaborator Author

Final automated-review follow-up for head 656150b83:

  • Added the GPT advisor's exact positive/negative /nemoclaw help assertion in b25b0860d.
  • shields-config-vitest and full-e2e-vitest both passed in run 28283525871.
  • The advisors' proposed focused live /nemoclaw shields scenario does not exist today. That is not a parity blocker for this PR: the plugin no longer projects any host posture, and the pure command contract covers omitted, empty, whitespace, status, up, down, unknown, sanitized, and truncated inputs. A future live scenario can exercise the OpenClaw chat transport without reopening a duplicate state model.
  • CodeRabbit generated no actionable comments for the deletion-based final design; both PR Review Advisor checks report no blocking findings.

@cv
cv merged commit 8e4784e into main Jun 27, 2026
117 checks passed
@cv
cv deleted the codex/fix-shields-slash-default-state branch June 27, 2026 08:21
cv pushed a commit that referenced this pull request Jun 29, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

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

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

## Type of Change

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

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

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

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

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

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

* **Documentation**
* Added release notes for **v0.0.69**, covering improved sandbox
lifecycle recovery (state preservation across
destroy/recreate/rebuild/recovery/validation failures), clearer Deep
Agents Code terminal/CLI behavior, and safer Hermes messaging/provider
switching with manifest-driven channels.
* Improved inference setup validation guidance, including handling of
local/compatible endpoints and redaction of sensitive validation errors.
* Refreshed release-gate documentation with clearer approval examples
and validation behavior for NVIDIA API keys vs hosted inference keys.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary
<!-- 1-3 sentences: what this PR does and why. -->

Stop the in-sandbox `/nemoclaw shields` command from asserting a shields
posture that only the host can verify. Status requests now point to the
authoritative host CLI, and the obsolete host-owned shields fields are
removed from the plugin-local state model.

## Related Issue
<!-- Fixes #NNN or Closes #NNN. Remove this section if none. -->

Fixes NVIDIA#5821

## Changes
<!-- Bullet list of key changes. -->

- Return host-side status guidance for `/nemoclaw shields [status]`
instead of reporting `UP`, `DOWN`, or `NOT CONFIGURED` from unrelated
plugin-local state.
- Remove the shields dependency and status-rendering branches from the
OpenClaw plugin command.
- Remove the dead shields fields, parser support, defaults, and fixture
boilerplate from the plugin state model.
- Replace state-mocking tests with a compact contract that forbids
unverifiable posture claims and preserves host-only mutation guidance.
- Update slash-command help and user documentation to identify `nemoclaw
<name> shields status` as authoritative.

## 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 all that apply. For any "covered by existing tests", "not
applicable", or waiver entry, add a brief justification on the same line
or in the Changes section. -->
- [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: CodeRabbit and both PR
Review Advisor checks passed for final head `656150b83`; required
`shields-config-vitest` and `full-e2e-vitest` lanes passed in [run
28283525871](https://github.com/NVIDIA/NemoClaw/actions/runs/28283525871).
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification
<!-- Check each item you ran and confirmed. Leave unchecked items you
skipped. Doc-only changes do not require npm test unless you ran it. -->
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [x] Targeted tests pass for changed behavior
- [ ] Full `npm test` passes (broad runtime changes only)
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) —
completed with 0 errors and 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)

---
<!-- 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>

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Adds the v0.0.69 release notes to the published release-notes page so
users can see the shipped sandbox recovery, Deep Agents Code, Hermes,
inference, policy, and release-validation changes.
The section is based on the v0.0.69 announcement and links each
user-facing theme to the deeper docs pages that already cover the
behavior.

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

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

## Type of Change

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

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

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

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

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

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

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

Labels

area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[All Platforms][Agent&Skills][GitHub Issue #5821] /nemoclaw shields TUI shows "Shields: UP" while host shields status reports default mutable state

2 participants