Skip to content

feat(policy): annotate policy-list with preset provenance - #5797

Merged
jyaunches merged 12 commits into
mainfrom
feat/policy-preset-provenance
Jun 30, 2026
Merged

feat(policy): annotate policy-list with preset provenance#5797
jyaunches merged 12 commits into
mainfrom
feat/policy-preset-provenance

Conversation

@laitingsheng

@laitingsheng laitingsheng commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Summary

policy-list now annotates each verified active preset with its inferred source, and the default Balanced tier no longer grants weather egress. A default Balanced OpenClaw onboarding therefore applies exactly brave, brew, huggingface, npm, openclaw-pricing, and pypi; operators add weather explicitly when needed.

Related Issue

Fixes #5774

Changes

  • Add [from <tier> tier], [from <agent> agent], [user-added], and trust-degraded [source unverified] annotations to policy-list.
  • Infer provenance only when local registry state and the live gateway agree; document that provenance is inferred from current tier/agent metadata rather than persisted per preset.
  • Remove weather from Balanced while preserving it in Open, and update onboarding suggestions, tier tests, command references, quickstart, and network-policy docs.
  • Keep OpenClaw-only and Hermes-only classifications agent-gated, normalize stored tier/agent names, and fail fast if the lightweight Hermes preset-name registry diverges from the rich manifest list.
  • Rebase via a signed merge of current main, preserving the newer DGX Station express-install default and source-test boundary.
  • Strengthen the live contract: Balanced must initially report exactly the six expected active presets with no wttr.in; the test then explicitly runs policy-add weather and verifies the landed GET/HEAD-only wttr.in path with independent proof.

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 — provenance is advisory-only, requires registry/gateway agreement, and emits source unverified on desync or gateway failure; exact-head advisors are being rerun.
  • 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) — Fern reports 0 errors and the same 2 existing warnings
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Focused evidence: 45 CLI provenance/policy-list assertions, 95 integration tier/onboarding/weather assertions, 2 Hermes gateway-registry assertions, full normal CLI/integration coverage hook, CLI/plugin/JS pre-push typechecks, and docs validation with 0 errors. Required policy E2E evidence: network-policy passed on run 28428118794 before the display-only follow-up; exact-head common-egress-agent passed on run 28430187478 attempt 2. Attempt 1 failed during OpenShell download with HTTP 500 before tests executed.

Maintainer Gate Resolution

  • Exact head b73f3a98b55b20c7b6a3c0bae75b5f02970211c9 is signed/GitHub-Verified, approved, conflict-free, and has green required CI.
  • E2E run 28430187478 attempt 2 passed the live Balanced six-preset set, provenance tags, explicit user-added weather, and agent turn. The first attempt never reached tests because the OpenShell download returned HTTP 500.
  • Nemotron PRA-9 describes the workflow secret handling as correct and says no fix is needed. The successful live run proves the repository secret is configured and exercised; no credential is hardcoded or emitted.
  • The Hermes preset-name leaf module and dual-source sync check were removed. HERMES_TOOL_GATEWAY_PRESET_NAMES now derives once from HERMES_TOOL_GATEWAY_PRESETS; the cited stringSetsEqual helper is pre-existing selection comparison code outside this PR diff.
  • Current-tier attribution for a same-named user preset is an explicit display-only limitation because application history is not persisted. It is documented in JSDoc/user docs and pinned by a direct regression test; changing it requires a provenance schema, not a registry mock invented in this display helper.
  • The compiled policy-channel test scaffold intentionally uses the existing CJS injection seam; converting it to a different mocking style would not add behavioral coverage. Live policy-list output now validates the runtime surface directly.
  • The required docs-writer audit found no additional gap after the follow-up.

No CI, advisor, signature, approval, or E2E gate is waived; this section supplies the requested rationale/evidence for the next exact-head advisor rerun.


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

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jun 25, 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 weather from balanced tier defaults, adds preset provenance classification and display tags, and updates policy-list output and documentation to match the revised preset behavior.

Changes

Policy preset provenance and balanced tier defaults

Layer / File(s) Summary
Balanced tier adjustment
nemoclaw-blueprint/policies/tiers.yaml, docs/get-started/quickstart.mdx, docs/reference/network-policies.mdx, test/policy-tiers.test.ts, test/policy-tiers-onboard.test.ts, test/onboard-policy-suggestions.test.ts, test/onboard-preset-diff.test.ts
Balanced tier now contains exactly five dev-tool presets and no longer includes weather; tier metadata, onboarding docs, and related tests are updated to match the new defaults and access expectations.
Shared preset-name sets
src/lib/onboard/hermes-tool-gateway-preset-names.ts, src/lib/onboard/openclaw-otel-policy-presets.ts, src/lib/onboard/agent-policy-presets.ts, src/lib/onboard/hermes-managed-tools.ts
OpenClaw and Hermes preset-name sets move into shared modules; Hermes managed tools now validates its preset list against the canonical allowlist.
Provenance helpers
src/lib/policy/preset-provenance.ts, src/lib/policy/preset-provenance.test.ts
PresetProvenance and helper functions classify presets as tier, agent, or user sourced, with tests covering tier membership, agent patterns, fallback behavior, and tag formatting.
Policy-list rendering with provenance tags
src/lib/actions/sandbox/policy-channel.ts, src/lib/actions/sandbox/policy-channel-policy.test.ts, docs/reference/commands.mdx, docs/reference/commands-nemohermes.mdx
policy-list now reads sandbox metadata, computes provenance for active presets, appends formatted provenance tags, and documents the new output format with matching tests.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~28 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#1753: Introduced the tier system and preset resolution paths that this PR updates for balanced-tier behavior.

Suggested labels

area: policy, documentation

Suggested reviewers

  • cv
  • sandl99

Poem

A rabbit hopped through preset trees,
With tags that twinkled in the breeze.
The weather cloud hopped out of sight,
While balanced paths now feel just right.

🚥 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 describes the main change: adding preset provenance to policy-list output.
Linked Issues check ✅ Passed Balanced onboarding now excludes weather and resolves to the expected preset set, while policy-list gains the requested provenance labeling.
Out of Scope Changes check ✅ Passed The changes stay aligned with the onboard fix and provenance UX, with docs, tests, and helper modules supporting those goals.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/policy-preset-provenance

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

@laitingsheng laitingsheng added area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow bug-fix PR fixes a bug or regression feature PR adds or expands user-visible functionality labels Jun 25, 2026
@github-code-quality

github-code-quality Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the feat/policy-preset-p... 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 feat/policy-preset-p... e43b089 +/-
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 feat/policy-preset-p... branch is 67%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main feat/policy-preset-p... e43b089 +/-
src/lib/actions...dbox/rebuild.ts 80%
src/lib/actions...all/run-plan.ts 80%
src/lib/state/o...oard-session.ts 79%
src/lib/state/sandbox.ts 72%
src/lib/onboard/preflight.ts 69%
src/lib/onboard...er-gpu-patch.ts 59%
src/lib/actions...licy-channel.ts 58%
src/lib/policy/index.ts 52%
src/lib/shields/index.ts 51%
src/lib/onboard.ts 20%

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

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Changes requested

Merge posture: Do not merge yet
Primary next action: Resolve or justify PRA-1: BRAVE_API_KEY is exposed to a checked-out-code E2E job.
Open items: 0 required · 1 warning · 0 suggestions · 1 test follow-up
Since last review: 0 prior items resolved · 0 still apply · 1 new item found

Action checklist

  • PRA-1 Resolve or justify: BRAVE_API_KEY is exposed to a checked-out-code E2E job in .github/workflows/e2e.yaml:2203
  • PRA-T1 Add or justify test follow-up: Acceptance clause

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify security .github/workflows/e2e.yaml:2203 Either avoid passing `BRAVE_API_KEY` to this job by validating the balanced preset set without configuring live Brave credentials, or document/enforce that this secret-bearing E2E job is only dispatched on trusted refs. If the secret is genuinely required for the runtime path, keep the existing redaction values and add a workflow-level guard or maintainer-facing note that explains the trusted-code boundary.
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 0 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-1 Resolve/justify — BRAVE_API_KEY is exposed to a checked-out-code E2E job

  • Location: .github/workflows/e2e.yaml:2203
  • Category: security
  • Problem: The common-egress-agent job now injects `${{ secrets.BRAVE_API_KEY }}` into a step that runs built CLI code and `npx vitest` from the checked-out repository. The workflow is schedule/workflow_dispatch-only, uses read-only repository permissions, and keeps checkout credentials unpersisted, so this is not a confirmed exploit. It does widen the secret-bearing trusted-code boundary beyond the existing inference key, and the added live assertion only needs Brave to appear in the balanced preset set rather than to call the Brave API directly.
  • Impact: If this workflow is manually dispatched against an untrusted or not-yet-reviewed ref, code in that ref can run in a process that receives an additional repository secret. That increases the blast radius of any workflow-dispatch misuse or compromised branch in a high-risk sandbox/policy E2E lane.
  • Recommended action: Either avoid passing `BRAVE_API_KEY` to this job by validating the balanced preset set without configuring live Brave credentials, or document/enforce that this secret-bearing E2E job is only dispatched on trusted refs. If the secret is genuinely required for the runtime path, keep the existing redaction values and add a workflow-level guard or maintainer-facing note that explains the trusted-code boundary.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read `.github/workflows/e2e.yaml` around the `on:` block and the `common-egress-agent` job's `Run common-egress agent live test` env, then read `test/e2e/live/common-egress-agent.test.ts` around the `secrets.required("BRAVE_API_KEY")` and balanced policy-list assertions to confirm whether the Brave API key is needed for this behavior.
  • Missing regression test: Existing tests cover redaction through `extraRedactionValues`; the missing guard is a workflow/policy check or documented invariant proving secret-bearing E2E dispatch only runs trusted refs, or a changed C1 test path that asserts balanced includes the `brave` preset without requiring a live Brave secret.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read `.github/workflows/e2e.yaml` around the `on:` block and the `common-egress-agent` job's `Run common-egress agent live test` env, then read `test/e2e/live/common-egress-agent.test.ts` around the `secrets.required("BRAVE_API_KEY")` and balanced policy-list assertions to confirm whether the Brave API key is needed for this behavior.
  • Evidence: The diff adds `BRAVE_API_KEY: ${{ secrets.BRAVE_API_KEY }}` to the common-egress-agent workflow step and adds `const braveApiKey = secrets.required("BRAVE_API_KEY")` plus `extraEnv: { BRAVE_API_KEY: braveApiKey }` in the live C1 test.

💡 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.

  • None.
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 Acceptance clause — 1. Install NemoClaw v0.0.65 on DGX Spark (aarch64) or Ubuntu 22.04/24.04 — add test evidence or identify existing coverage. The changed live E2E path performs real NemoClaw onboarding and OpenShell policy inspection for the common-egress target, but this review did not execute platform-specific DGX Spark or Ubuntu 22.04/24.04 installs.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — BRAVE_API_KEY is exposed to a checked-out-code E2E job

  • Location: .github/workflows/e2e.yaml:2203
  • Category: security
  • Problem: The common-egress-agent job now injects `${{ secrets.BRAVE_API_KEY }}` into a step that runs built CLI code and `npx vitest` from the checked-out repository. The workflow is schedule/workflow_dispatch-only, uses read-only repository permissions, and keeps checkout credentials unpersisted, so this is not a confirmed exploit. It does widen the secret-bearing trusted-code boundary beyond the existing inference key, and the added live assertion only needs Brave to appear in the balanced preset set rather than to call the Brave API directly.
  • Impact: If this workflow is manually dispatched against an untrusted or not-yet-reviewed ref, code in that ref can run in a process that receives an additional repository secret. That increases the blast radius of any workflow-dispatch misuse or compromised branch in a high-risk sandbox/policy E2E lane.
  • Recommended action: Either avoid passing `BRAVE_API_KEY` to this job by validating the balanced preset set without configuring live Brave credentials, or document/enforce that this secret-bearing E2E job is only dispatched on trusted refs. If the secret is genuinely required for the runtime path, keep the existing redaction values and add a workflow-level guard or maintainer-facing note that explains the trusted-code boundary.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read `.github/workflows/e2e.yaml` around the `on:` block and the `common-egress-agent` job's `Run common-egress agent live test` env, then read `test/e2e/live/common-egress-agent.test.ts` around the `secrets.required("BRAVE_API_KEY")` and balanced policy-list assertions to confirm whether the Brave API key is needed for this behavior.
  • Missing regression test: Existing tests cover redaction through `extraRedactionValues`; the missing guard is a workflow/policy check or documented invariant proving secret-bearing E2E dispatch only runs trusted refs, or a changed C1 test path that asserts balanced includes the `brave` preset without requiring a live Brave secret.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read `.github/workflows/e2e.yaml` around the `on:` block and the `common-egress-agent` job's `Run common-egress agent live test` env, then read `test/e2e/live/common-egress-agent.test.ts` around the `secrets.required("BRAVE_API_KEY")` and balanced policy-list assertions to confirm whether the Brave API key is needed for this behavior.
  • Evidence: The diff adds `BRAVE_API_KEY: ${{ secrets.BRAVE_API_KEY }}` to the common-egress-agent workflow step and adds `const braveApiKey = secrets.required("BRAVE_API_KEY")` plus `extraEnv: { BRAVE_API_KEY: braveApiKey }` in the live C1 test.

Workflow run details

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

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: common-egress-agent, network-policy, cloud-onboard
Optional E2E: channels-add-remove, double-onboard

Dispatch hint: common-egress-agent,network-policy,cloud-onboard

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • common-egress-agent (high): Directly covers the changed common-egress live contract: real onboard, OpenClaw balanced/open and Hermes open sandbox policy, policy-list provenance, Brave/web-search egress, and live hosted agent turns.
  • network-policy (high): Required because the PR changes policy tiers and policy-list/runtime policy behavior that can affect sandbox egress security boundaries. This job performs live allow/deny and policy probes against OpenShell.
  • cloud-onboard (high): Required because onboarding policy defaults and agent-specific presets are changed. This validates a full hosted onboarding path applies and records policy state correctly in a real sandbox.

Optional E2E

  • channels-add-remove (high): Useful adjacent coverage because messaging channel flows exercise policy-list and sandbox-scoped policy registry behavior after channel changes, but the PR does not directly change channel mutation logic.
  • double-onboard (high): Optional confidence for repeated onboarding with the updated tier defaults and agent policy preset filtering. Not merge-blocking because cloud-onboard and common-egress-agent cover the primary hosted policy paths.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: .github/workflows/e2e.yaml
  • jobs input: common-egress-agent,network-policy,cloud-onboard

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: ubuntu-repo-cloud-openclaw
Optional Vitest E2E scenarios: None

Dispatch required Vitest E2E scenarios:

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

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required Vitest E2E scenarios

  • ubuntu-repo-cloud-openclaw: The PR changes policy tier defaults, OpenClaw agent-only policy preset classification, and policy-list provenance behavior. The live-supported Ubuntu cloud OpenClaw scenario is the smallest typed Vitest scenario that exercises the default OpenClaw onboarding path, balanced policy preset application, and resulting sandbox readiness after those policy changes.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • nemoclaw-blueprint/policies/tiers.yaml
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/onboard/agent-policy-presets.ts
  • src/lib/onboard/hermes-managed-tools.ts
  • src/lib/onboard/hermes-tool-gateway-preset-names.ts
  • src/lib/onboard/openclaw-otel-policy-presets.ts
  • src/lib/policy/preset-provenance.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
docs/reference/commands.mdx (1)

1000-1004: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Passive voice in the provenance description.

The editorial style guide requires active voice. Each active preset is annotated..., pre-selected by the chosen policy tier, and added by NemoClaw are passive constructions. Consider rephrasing to active voice (for example, "NemoClaw annotates each active preset...", "the chosen policy tier pre-selects this preset").

As per path instructions: "Active voice required. Flag passive constructions."

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

In `@docs/reference/commands.mdx` around lines 1000 - 1004, Rephrase the
provenance description in active voice in the command docs: update the intro
sentence and each bullet so the subject performs the action instead of being
acted on. Use the existing provenance labels from the same section, but rewrite
phrasing around “policy tier,” “NemoClaw,” and the user-added case to avoid
passive constructions while preserving meaning.

Source: Path instructions

src/lib/policy/preset-provenance.ts (1)

18-37: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

context.agentName is accepted but never used in classification.

Agent provenance is decided purely by preset-name membership in OPENCLAW_ONLY_POLICY_PRESETS / HERMES_TOOL_GATEWAY_PRESET_NAMES, regardless of the sandbox's actual agent. A nous-* preset that a user manually applies to an OpenClaw sandbox would be labeled [from hermes agent] instead of [user-added], and the agentName value plumbed in from policy-channel.ts has no effect. Either scope the agent branches by context.agentName, or drop agentName from PresetProvenanceContext to avoid implying it is honored.

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

In `@src/lib/policy/preset-provenance.ts` around lines 18 - 37, The preset
provenance classification in classifyPresetProvenance ignores context.agentName,
so agent-specific presets are attributed only by name and can be misclassified.
Update the logic in classifyPresetProvenance to consult context.agentName before
returning the “agent” provenance, so OPENCLAW_ONLY_POLICY_PRESETS and
HERMES_TOOL_GATEWAY_PRESET_NAMES are only tagged when the active agent matches,
or remove agentName from PresetProvenanceContext if it is not intended to affect
classification.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/reference/network-policies.mdx`:
- Line 80: The MDX content in the referenced paragraph combines two sentences on
one source line, violating the one-sentence-per-line guideline. Split the text
in the affected paragraph so the OpenClaw onboarding sentence and the OpenClaw
OTEL diagnostics sentence each occupy their own line, preserving the existing
wording in the same section of the document.

In `@src/lib/policy/preset-provenance.test.ts`:
- Around line 17-45: The `vi.mock("./tiers", ...)` factory in
`preset-provenance.test.ts` is hoisted and should not close over the top-level
`TIER_FIXTURES` constant. Move `TIER_FIXTURES` into a `vi.hoisted(() => ...)`
initializer, or rename it to a `mock`-prefixed binding that is safe for hoisted
mock factories, and keep `getTier` reading from that hoisted fixture map.

---

Nitpick comments:
In `@docs/reference/commands.mdx`:
- Around line 1000-1004: Rephrase the provenance description in active voice in
the command docs: update the intro sentence and each bullet so the subject
performs the action instead of being acted on. Use the existing provenance
labels from the same section, but rewrite phrasing around “policy tier,”
“NemoClaw,” and the user-added case to avoid passive constructions while
preserving meaning.

In `@src/lib/policy/preset-provenance.ts`:
- Around line 18-37: The preset provenance classification in
classifyPresetProvenance ignores context.agentName, so agent-specific presets
are attributed only by name and can be misclassified. Update the logic in
classifyPresetProvenance to consult context.agentName before returning the
“agent” provenance, so OPENCLAW_ONLY_POLICY_PRESETS and
HERMES_TOOL_GATEWAY_PRESET_NAMES are only tagged when the active agent matches,
or remove agentName from PresetProvenanceContext if it is not intended to affect
classification.
🪄 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: efc352bf-9ca4-4ed3-8907-f46f7ed4b208

📥 Commits

Reviewing files that changed from the base of the PR and between e3b8325 and 8694ce1.

📒 Files selected for processing (12)
  • docs/get-started/quickstart.mdx
  • docs/reference/commands-nemohermes.mdx
  • docs/reference/commands.mdx
  • docs/reference/network-policies.mdx
  • src/lib/actions/sandbox/policy-channel-policy.test.ts
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/onboard/agent-policy-presets.ts
  • src/lib/onboard/hermes-managed-tools.ts
  • src/lib/onboard/hermes-tool-gateway-preset-names.ts
  • src/lib/onboard/openclaw-otel-policy-presets.ts
  • src/lib/policy/preset-provenance.test.ts
  • src/lib/policy/preset-provenance.ts

Comment thread docs/reference/network-policies.mdx Outdated
Comment thread src/lib/policy/preset-provenance.test.ts Outdated
@laitingsheng laitingsheng removed the bug-fix PR fixes a bug or regression label Jun 25, 2026
@wscurran wscurran added the NV QA Bugs found by the NVIDIA QA Team label Jun 26, 2026

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM after addressing comments

…ctive agent

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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
docs/reference/network-policies.mdx (1)

72-72: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Split the Balanced description into one sentence per source line.

Line 72 packs three sentences onto one MDX line, which breaks the docs source-formatting rule.

As per coding guidelines: "Keep one sentence per line in Markdown and MDX source files." As per path instructions: "One sentence per line in source."

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

In `@docs/reference/network-policies.mdx` at line 72, The Balanced preset
description is combining multiple sentences on one MDX source line, which
violates the one-sentence-per-line formatting rule. Update the table row in the
network policies docs so the description for Balanced is split into separate
source lines/sentences while keeping the same meaning, and make sure the text
remains associated with the Balanced row and its source list formatting.

Sources: Coding guidelines, Path instructions

nemoclaw-blueprint/policies/tiers.yaml (1)

22-32: 🔒 Security & Privacy | 🔵 Trivial

Run the network-policy-e2e workflow for this tier change.

Removing weather from balanced changes default sandbox egress, so it is worth re-running the deny-by-default, whitelist, hot-reload, and SSRF coverage before merge.

Based on path instructions: nemoclaw-blueprint/policies/** changes affect sandbox egress rules and SSRF filtering, with network-policy-e2e recommended.

🤖 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-blueprint/policies/tiers.yaml` around lines 22 - 32, The tier policy
update in the policies configuration changes default sandbox egress by removing
weather access from the balanced preset, so re-run the network-policy-e2e
workflow before merging to verify deny-by-default, whitelist behavior,
hot-reload handling, and SSRF coverage still pass for this tier change. Focus on
the tier definitions in the tiers policy and the network-policy-e2e validation
that exercises those sandbox egress rules.

Source: Path instructions

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

Nitpick comments:
In `@docs/reference/network-policies.mdx`:
- Line 72: The Balanced preset description is combining multiple sentences on
one MDX source line, which violates the one-sentence-per-line formatting rule.
Update the table row in the network policies docs so the description for
Balanced is split into separate source lines/sentences while keeping the same
meaning, and make sure the text remains associated with the Balanced row and its
source list formatting.

In `@nemoclaw-blueprint/policies/tiers.yaml`:
- Around line 22-32: The tier policy update in the policies configuration
changes default sandbox egress by removing weather access from the balanced
preset, so re-run the network-policy-e2e workflow before merging to verify
deny-by-default, whitelist behavior, hot-reload handling, and SSRF coverage
still pass for this tier change. Focus on the tier definitions in the tiers
policy and the network-policy-e2e validation that exercises those sandbox egress
rules.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1bb60567-10e4-4234-9015-1350a6ba921d

📥 Commits

Reviewing files that changed from the base of the PR and between 8694ce1 and 11a099a.

📒 Files selected for processing (12)
  • docs/get-started/quickstart.mdx
  • docs/reference/commands-nemohermes.mdx
  • docs/reference/commands.mdx
  • docs/reference/network-policies.mdx
  • nemoclaw-blueprint/policies/tiers.yaml
  • src/lib/actions/sandbox/policy-channel-policy.test.ts
  • src/lib/policy/preset-provenance.test.ts
  • src/lib/policy/preset-provenance.ts
  • test/onboard-policy-suggestions.test.ts
  • test/onboard-preset-diff.test.ts
  • test/policy-tiers-onboard.test.ts
  • test/policy-tiers.test.ts
💤 Files with no reviewable changes (1)
  • test/onboard-preset-diff.test.ts
✅ Files skipped from review due to trivial changes (3)
  • docs/get-started/quickstart.mdx
  • docs/reference/commands.mdx
  • docs/reference/commands-nemohermes.mdx
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/lib/policy/preset-provenance.test.ts
  • src/lib/policy/preset-provenance.ts

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…sted)

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

E2E Target Recommendation

Required E2E targets: common-egress-agent
Optional E2E targets: None

Dispatch required E2E targets:

  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=common-egress-agent

Workflow run

Full E2E target advisor summary

E2E Target Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E targets

  • common-egress-agent: Focused free-standing E2E job wired for changed live test test/e2e/live/common-egress-agent.test.ts.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=common-egress-agent

Optional E2E targets

  • None.

Relevant changed files

  • .github/workflows/e2e.yaml
  • nemoclaw-blueprint/policies/tiers.yaml
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/onboard/agent-policy-presets.ts
  • src/lib/onboard/openclaw-otel-policy-presets.ts
  • src/lib/policy/policy-list-display.ts
  • src/lib/policy/preset-provenance.ts
  • test/e2e/live/common-egress-agent.test.ts

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — Informational

Merge posture: Informational / low confidence
Primary next action: Resolve or justify PRA-1: PR review advisor unavailable.
Open items: 0 required · 1 warning · 0 suggestions · 1 test follow-up
Top item: PR review advisor unavailable

Action checklist

  • PRA-1 Resolve or justify: PR review advisor unavailable
  • PRA-T1 Add or justify test follow-up: Runtime validation

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify correctness Re-run the PR Review Advisor or perform a manual review.
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 0 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-1 Resolve/justify — PR review advisor unavailable

  • Location: not file-specific
  • Category: correctness
  • Problem: The automated advisor could not complete: Could not parse JSON from PR review advisor output; see /home/runner/work/NemoClaw/NemoClaw/artifacts/pr-review-advisor-nemotron-ultra/pr-review-advisor-retry-raw-output.txt
  • Impact: Automated review evidence is incomplete, so human review must cover the changed code manually.
  • Recommended action: Re-run the PR Review Advisor or perform a manual review.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Inspect the workflow logs and raw advisor artifact for the execution failure.
  • Missing regression test: No regression test recommendation is available because the advisor did not complete.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Inspect the workflow logs and raw advisor artifact for the execution failure.
  • Evidence: Could not parse JSON from PR review advisor output; see /home/runner/work/NemoClaw/NemoClaw/artifacts/pr-review-advisor-nemotron-ultra/pr-review-advisor-retry-raw-output.txt

💡 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.

  • None.
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 — Add or identify targeted runtime/integration validation for the changed behavior; do not report external E2E job pass/fail here.. Runtime/sandbox/infrastructure paths need behavioral runtime validation: .github/workflows/e2e.yaml, docs/get-started/quickstart.mdx, docs/network-policy/integration-policy-examples.mdx, docs/reference/commands-nemohermes.mdx, docs/reference/commands.mdx, docs/reference/network-policies.mdx, nemoclaw-blueprint/policies/tiers.yaml, src/lib/actions/sandbox/policy-channel.ts.

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.

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

cv commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Maintainer disposition for the final-head advisor findings at 50caee0: PRA-1 fixed by moving all listSandboxPolicies coverage into focused policy-channel-list.test.ts; the original file is back to exactly 333 lines and all 45 focused assertions pass. PRA-2 is now explicit in JSDoc and the command docs: provenance is display-only current-state inference, so a tier-name match intentionally takes precedence because application history is not persisted. PRA-3 fixed with the explicit [source unverified (gateway unreachable)] label and regression. PRA-4 is covered by the exact-head common-egress-agent run 28428118794 (queued behind the still-running prior diagnostic run); network-policy is included too. PRA-5 is not applicable: importing hermes-managed-tools would reintroduce its provider-auth/prompt import chain and defeat the leaf boundary; the leaf list now has a fail-fast exact-set synchronization assertion. Please review the new exact head.

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Target Results — ❌ Some jobs failed

Run: 28426978938
Workflow ref: feat/policy-preset-provenance
Requested targets: (default — all supported)
Requested jobs: common-egress-agent,network-policy
Summary: 1 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
common-egress-agent ❌ failure
network-policy ✅ success

Failed jobs: common-egress-agent. Check run artifacts for logs.

@cv

cv commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Maintainer resolution for exact head 50caee0 and the latest Nemotron advisor:

  • PRA-3 is a false-positive blocker in that advisor output: the finding itself says VERIFIED RESOLVED. The 13 extracted policy-list provenance tests pass, the original monolith is back to 333 lines, the focused file is 218 lines, and the repository size/growth gates are green.
  • Tier precedence is intentionally display-only inference. The registry does not persist per-preset application history, so representing a shadowing custom name as tier-derived is documented and tested; changing that requires a registry schema/provenance migration, not a release-local display patch.
  • The small canonical Hermes name module plus runtime equality assertion is deliberate drift prevention. It avoids tying generic policy classification to the interactive Hermes onboarding module while failing immediately if the two declarations diverge.
  • Gateway-unreachable output is covered at the command boundary with the real formatter and mocked unavailable gateway. Stopping the host Docker daemon inside CI would be destructive and adds no assertion beyond that boundary test.
  • Weather documentation was searched across docs: Balanced consistently requires explicit weather, Open includes weather, and unrelated references describe the skill or generic preset catalog.
  • The 20 production lines in policy-channel.ts are the actual feature display path; codebase growth guardrails pass. The compiled-module test scaffold is consistent with this CJS command boundary and all behavior is preserved.

Exact-head network-policy E2E is green. The requested common-egress-agent run is still in progress at https://github.com/NVIDIA/NemoClaw/actions/runs/28428118794; no merge will occur until it completes successfully. Please treat the already-resolved PRA-3 as resolved on the next advisor pass.

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Target Results — ❌ Some jobs failed

Run: 28428118794
Workflow ref: feat/policy-preset-provenance
Requested targets: (default — all supported)
Requested jobs: common-egress-agent,network-policy
Summary: 1 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
common-egress-agent ❌ failure
network-policy ✅ success

Failed jobs: common-egress-agent. Check run artifacts for logs.

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Target Results — ❌ Some jobs failed

Run: 28430187478
Workflow ref: feat/policy-preset-provenance
Requested targets: (default — all supported)
Requested jobs: common-egress-agent
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
common-egress-agent ❌ failure

Failed jobs: common-egress-agent. Check run artifacts for logs.

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Target Results — ✅ All requested jobs passed

Run: 28430187478
Workflow ref: feat/policy-preset-provenance
Requested targets: (default — all supported)
Requested jobs: common-egress-agent
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
common-egress-agent ✅ success

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Exact-head maintainer gate review for b73f3a9:

  • Required CI is green, the PR is approved/conflict-free, and all commits are GitHub-Verified with DCO.
  • Live run 28430187478 attempt 2 passed the exact Balanced six-preset set, runtime provenance tags, explicit user-added weather, policy enforcement, and agent turn. Attempt 1 failed on an OpenShell download HTTP 500 before tests.
  • Nemotron PRA-9 is internally marked “No fix needed — secret handling is correct.” The passing live run proves BRAVE_API_KEY is configured; the test explicitly redacts it and the workflow uses only the repository secret expression.
  • The alleged Hermes dual-source drift is stale: the leaf module was deleted and the exported name Set derives directly from HERMES_TOOL_GATEWAY_PRESETS. The cited stringSetsEqual helper is unrelated pre-existing selection comparison outside this PR diff.
  • Tier-name precedence is an intentional display-only inference where historical provenance is not persisted; docs, JSDoc, and a direct regression test state that limitation.
  • The policy-channel renderer was extracted from the monolith (now below the base line count), and the live test validates the new output rather than relying only on mocks.

No gate is waived. This review records the evidence/rationale requested by the automated review and requests a clean exact-head advisor reassessment after the currently serialized advisor run completes.

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Exact-head maintainer resolution for advisor run 28431472931 (b73f3a9): GPT-5.5 returned merge_as_is. Nemotron remaining items do not identify an unaddressed defect in this diff. The custom-shadowing behavior is explicitly documented and already covered by preset-provenance.test.ts (the test titled "documents current-tier attribution when a user-added preset shadows a tier name"). HERMES_TOOL_GATEWAY_PRESET_NAMES is not an independent source: it is derived directly from HERMES_TOOL_GATEWAY_PRESETS.map(...), so the alleged drift cannot occur. stringSetsEqual is pre-existing and untouched by this PR; its production call path already has handler coverage, and adding unrelated direct tests is not a release blocker. The BRAVE_API_KEY operational check is proven by successful exact-head common-egress E2E run 28430187478 attempt 2. The remaining scaffold/hotspot items are non-blocking maintenance suggestions. No advisor-requested code change is warranted; this is the explicit maintainer rationale contemplated by the advisor policy.

@jyaunches
jyaunches merged commit 1a826b4 into main Jun 30, 2026
43 checks passed
@jyaunches
jyaunches deleted the feat/policy-preset-provenance branch June 30, 2026 17:31
@jyaunches jyaunches mentioned this pull request Jun 30, 2026
21 tasks
jyaunches added a commit that referenced this pull request Jun 30, 2026
<!-- markdownlint-disable MD041 -->
## Summary
Refreshes the public documentation for NemoClaw v0.0.71 after scanning
commits since v0.0.70. Adds release notes and fills the remaining doc
gaps for Windows bootstrap diagnostics, OpenClaw agent auto-relock
warnings, auto-pair cadence tuning, and plugin-install recovery hints.

## Changes
- `docs/about/release-notes.mdx`: adds the v0.0.71 release-note section,
grouped by gateway recovery, OpenShell auth, policy provenance, day-two
maintenance, messaging/inference, and Windows setup.
- `docs/get-started/windows-preparation.mdx`: documents sanitized WSL
install output and reboot gating in the Windows bootstrap.
- `docs/reference/commands.mdx`: documents the host `agent` wrapper's
shields auto-relock warning and OpenClaw auto-pair watcher tuning
variables.
- `docs/reference/troubleshooting.mdx`: adds plugin-install network
failure recovery guidance and updates Windows WSL troubleshooting for
sanitized install logs and reboot-required handling.

Source summary:
- #6065 -> `docs/about/release-notes.mdx`: Notes explicit model override
preservation and gateway-log guard-chain recovery diagnostics.
- #5874 -> `docs/about/release-notes.mdx`: Summarizes host-mediated
`recover` and `gateway restart`, linking to lifecycle, command,
troubleshooting, and trusted-boundary docs already added by the source
PR.
- #5596 -> `docs/about/release-notes.mdx`: Summarizes OpenShell 0.0.71
gateway auth, loopback binding, and compatibility-container docs already
added by the source PR.
- #5797 and #5798 -> `docs/about/release-notes.mdx`: Summarizes
`policy-list` provenance, Restricted tier suppression, and Balanced tier
weather behavior already reflected in policy docs.
- #5784 -> `docs/about/release-notes.mdx`: Summarizes
`--destroy-user-data` and the safe `--yes` uninstall behavior already
documented in lifecycle and command docs.
- #6034 -> `docs/about/release-notes.mdx`: Summarizes custom Dockerfile
warm-build cache behavior already documented in the command reference.
- #5951 -> `docs/reference/commands.mdx`: Documents the stderr-only host
`agent` wrapper warning after recent shields auto-relock.
- #5387 -> `docs/reference/commands.mdx`: Documents OpenClaw auto-pair
watcher cadence and fast-reentry tuning variables.
- #5835 -> `docs/reference/troubleshooting.mdx`: Adds recovery guidance
for OpenClaw plugin-install network failures.
- #5995 and #5956 -> `docs/about/release-notes.mdx`: Summarizes
Microsoft Teams final-message delivery and runtime mention hints already
covered by messaging docs.
- #5716 -> `docs/about/release-notes.mdx`: Summarizes non-interactive
Ollama loopback safety already covered by local inference docs.
- #5505, #5527, and #5528 -> `docs/about/release-notes.mdx`: Summarizes
compatible local endpoint, model task-fit, and model capability audit
docs.
- #6009 -> `docs/get-started/windows-preparation.mdx`,
`docs/reference/troubleshooting.mdx`: Documents sanitized Windows
bootstrap WSL output and reboot-required gating.
- #6055 -> no additional source doc page change needed beyond the
already-merged quickstart update; release notes did not duplicate
routine quickstart cleanup.

No matching v0.0.71 GitHub announcement discussion was found in the
latest 20 discussions, so this refresh is based on the commit scan and
existing source PR docs.

## 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
<!-- 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. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: docs-only refresh with no
runtime behavior changes.
- [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 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
- [ ] 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) — ran
`npm run docs`; Fern reported 0 errors and 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: Julie Yaunches <jyaunches@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Added a new release-notes entry covering gateway recovery,
authentication, network policy/provenance output, uninstall safety,
Windows bootstrap diagnostics, messaging defaults, and inference setup
guidance.
* Clarified Windows preparation steps around reboot behavior and
redacting troubleshooting transcripts.
* Expanded command reference details for OpenClaw wrapper behavior and
new auto-pair tuning options.
* Improved troubleshooting guidance for plugin installation issues, WSL
repair/reboot cases, and install timing problems.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary

`policy-list` now annotates each verified active preset with its
inferred source, and the default Balanced tier no longer grants weather
egress. A default Balanced OpenClaw onboarding therefore applies exactly
`brave`, `brew`, `huggingface`, `npm`, `openclaw-pricing`, and `pypi`;
operators add `weather` explicitly when needed.

## Related Issue

Fixes NVIDIA#5774

## Changes

- Add `[from <tier> tier]`, `[from <agent> agent]`, `[user-added]`, and
trust-degraded `[source unverified]` annotations to `policy-list`.
- Infer provenance only when local registry state and the live gateway
agree; document that provenance is inferred from current tier/agent
metadata rather than persisted per preset.
- Remove `weather` from Balanced while preserving it in Open, and update
onboarding suggestions, tier tests, command references, quickstart, and
network-policy docs.
- Keep OpenClaw-only and Hermes-only classifications agent-gated,
normalize stored tier/agent names, and fail fast if the lightweight
Hermes preset-name registry diverges from the rich manifest list.
- Rebase via a signed merge of current `main`, preserving the newer DGX
Station express-install default and source-test boundary.
- Strengthen the live contract: Balanced must initially report exactly
the six expected active presets with no `wttr.in`; the test then
explicitly runs `policy-add weather` and verifies the landed
GET/HEAD-only wttr.in path with independent proof.

## 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 — provenance is advisory-only, requires registry/gateway
agreement, and emits `source unverified` on desync or gateway failure;
exact-head advisors are being rerun.
- [ ] 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
- [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) — Fern
reports 0 errors and the same 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)

Focused evidence: 45 CLI provenance/policy-list assertions, 95
integration tier/onboarding/weather assertions, 2 Hermes
gateway-registry assertions, full normal CLI/integration coverage hook,
CLI/plugin/JS pre-push typechecks, and docs validation with 0 errors.
Required policy E2E evidence: `network-policy` passed on run 28428118794
before the display-only follow-up; exact-head `common-egress-agent`
passed on run 28430187478 attempt 2. Attempt 1 failed during OpenShell
download with HTTP 500 before tests executed.


## Maintainer Gate Resolution

- Exact head `b73f3a98b55b20c7b6a3c0bae75b5f02970211c9` is
signed/GitHub-Verified, approved, conflict-free, and has green required
CI.
- E2E run 28430187478 attempt 2 passed the live Balanced six-preset set,
provenance tags, explicit user-added weather, and agent turn. The first
attempt never reached tests because the OpenShell download returned HTTP
500.
- Nemotron `PRA-9` describes the workflow secret handling as correct and
says no fix is needed. The successful live run proves the repository
secret is configured and exercised; no credential is hardcoded or
emitted.
- The Hermes preset-name leaf module and dual-source sync check were
removed. `HERMES_TOOL_GATEWAY_PRESET_NAMES` now derives once from
`HERMES_TOOL_GATEWAY_PRESETS`; the cited `stringSetsEqual` helper is
pre-existing selection comparison code outside this PR diff.
- Current-tier attribution for a same-named user preset is an explicit
display-only limitation because application history is not persisted. It
is documented in JSDoc/user docs and pinned by a direct regression test;
changing it requires a provenance schema, not a registry mock invented
in this display helper.
- The compiled `policy-channel` test scaffold intentionally uses the
existing CJS injection seam; converting it to a different mocking style
would not add behavioral coverage. Live policy-list output now validates
the runtime surface directly.
- The required docs-writer audit found no additional gap after the
follow-up.

No CI, advisor, signature, approval, or E2E gate is waived; this section
supplies the requested rationale/evidence for the next exact-head
advisor rerun.

---
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

---------

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary
Refreshes the public documentation for NemoClaw v0.0.71 after scanning
commits since v0.0.70. Adds release notes and fills the remaining doc
gaps for Windows bootstrap diagnostics, OpenClaw agent auto-relock
warnings, auto-pair cadence tuning, and plugin-install recovery hints.

## Changes
- `docs/about/release-notes.mdx`: adds the v0.0.71 release-note section,
grouped by gateway recovery, OpenShell auth, policy provenance, day-two
maintenance, messaging/inference, and Windows setup.
- `docs/get-started/windows-preparation.mdx`: documents sanitized WSL
install output and reboot gating in the Windows bootstrap.
- `docs/reference/commands.mdx`: documents the host `agent` wrapper's
shields auto-relock warning and OpenClaw auto-pair watcher tuning
variables.
- `docs/reference/troubleshooting.mdx`: adds plugin-install network
failure recovery guidance and updates Windows WSL troubleshooting for
sanitized install logs and reboot-required handling.

Source summary:
- NVIDIA#6065 -> `docs/about/release-notes.mdx`: Notes explicit model override
preservation and gateway-log guard-chain recovery diagnostics.
- NVIDIA#5874 -> `docs/about/release-notes.mdx`: Summarizes host-mediated
`recover` and `gateway restart`, linking to lifecycle, command,
troubleshooting, and trusted-boundary docs already added by the source
PR.
- NVIDIA#5596 -> `docs/about/release-notes.mdx`: Summarizes OpenShell 0.0.71
gateway auth, loopback binding, and compatibility-container docs already
added by the source PR.
- NVIDIA#5797 and NVIDIA#5798 -> `docs/about/release-notes.mdx`: Summarizes
`policy-list` provenance, Restricted tier suppression, and Balanced tier
weather behavior already reflected in policy docs.
- NVIDIA#5784 -> `docs/about/release-notes.mdx`: Summarizes
`--destroy-user-data` and the safe `--yes` uninstall behavior already
documented in lifecycle and command docs.
- NVIDIA#6034 -> `docs/about/release-notes.mdx`: Summarizes custom Dockerfile
warm-build cache behavior already documented in the command reference.
- NVIDIA#5951 -> `docs/reference/commands.mdx`: Documents the stderr-only host
`agent` wrapper warning after recent shields auto-relock.
- NVIDIA#5387 -> `docs/reference/commands.mdx`: Documents OpenClaw auto-pair
watcher cadence and fast-reentry tuning variables.
- NVIDIA#5835 -> `docs/reference/troubleshooting.mdx`: Adds recovery guidance
for OpenClaw plugin-install network failures.
- NVIDIA#5995 and NVIDIA#5956 -> `docs/about/release-notes.mdx`: Summarizes
Microsoft Teams final-message delivery and runtime mention hints already
covered by messaging docs.
- NVIDIA#5716 -> `docs/about/release-notes.mdx`: Summarizes non-interactive
Ollama loopback safety already covered by local inference docs.
- NVIDIA#5505, NVIDIA#5527, and NVIDIA#5528 -> `docs/about/release-notes.mdx`: Summarizes
compatible local endpoint, model task-fit, and model capability audit
docs.
- NVIDIA#6009 -> `docs/get-started/windows-preparation.mdx`,
`docs/reference/troubleshooting.mdx`: Documents sanitized Windows
bootstrap WSL output and reboot-required gating.
- NVIDIA#6055 -> no additional source doc page change needed beyond the
already-merged quickstart update; release notes did not duplicate
routine quickstart cleanup.

No matching v0.0.71 GitHub announcement discussion was found in the
latest 20 discussions, so this refresh is based on the commit scan and
existing source PR docs.

## 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
<!-- 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. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: docs-only refresh with no
runtime behavior changes.
- [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 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
- [ ] 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) — ran
`npm run docs`; Fern reported 0 errors and 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: Julie Yaunches <jyaunches@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Added a new release-notes entry covering gateway recovery,
authentication, network policy/provenance output, uninstall safety,
Windows bootstrap diagnostics, messaging defaults, and inference setup
guidance.
* Clarified Windows preparation steps around reboot behavior and
redacting troubleshooting transcripts.
* Expanded command reference details for OpenClaw wrapper behavior and
new auto-pair tuning options.
* Improved troubleshooting guidance for plugin installation issues, WSL
repair/reboot cases, and install timing problems.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow feature PR adds or expands user-visible functionality NV QA Bugs found by the NVIDIA QA Team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DGX Spark][Onboard] Balanced-tier onboard applies unexpected "weather" preset — 7 presets instead of expected 6

4 participants