Skip to content

fix(skills): flatten catalog export and detect untracked files in refresh diff#4342

Merged
jyaunches merged 2 commits into
mainfrom
fix/4282-catalog-refresh-untracked-detection
May 27, 2026
Merged

fix(skills): flatten catalog export and detect untracked files in refresh diff#4342
jyaunches merged 2 commits into
mainfrom
fix/4282-catalog-refresh-untracked-detection

Conversation

@jyaunches

@jyaunches jyaunches commented May 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Two related fixes to the NemoClaw catalog skills export so the Skills / Catalog Refresh workflow actually opens a refresh PR on main:

  1. Detect untracked files in the change-detection diff. The workflow ran git diff --quiet which only inspects tracked paths, so a freshly-exported catalog against an empty tracked tree looked unchanged and the workflow short-circuited via "Catalog skill export is already current." without ever pushing the 43 generated files.
  2. Flatten the export from skills/nemoclaw/ to skills/. Every other onboarded NVSkills product repo (cuopt, nurec-skills, digital-health-skills, aiq) — and nvskills-ci itself, with skills/ci-smoke-test/SKILL.md — uses skills/<skill-name>/SKILL.md. The per-product namespace layer in NemoClaw was redundant and didn't match anyone else's layout.

Related Issue

Follow-up to #4282 / #4284 / #4334. Observed on post-merge runs 26526695773 and 26526772139: both completed success after exporting 11 skills, then exited via Stop after dry run without producing a PR because no diff was detected against the empty skills/ tree on main.

Changes

Diff fix (commit 1):

  • .github/workflows/catalog-skills-refresh.yaml: run git add --intent-to-add against the export paths before git diff --quiet so untracked files surface as additions.

Layout flattening (commit 2):

  • .agents/catalog-skills.yaml: export: skills/nemoclawexport: skills
  • scripts/export-catalog-skills.py: default target updated
  • .github/workflows/catalog-skills-refresh.yaml: every skills/nemoclaw reference (preserve-overlay, change-detection, commit-add) updated to skills
  • .pre-commit-config.yaml: hook regex now anchors to skills/.*
  • .github/catalog-skills-signing-flow.md, .github/pr-bodies/catalog-skills-refresh.md: prose updated
  • test/catalog-skills-export.test.ts: temp-fixture paths updated

Why dropping the nemoclaw/ subdir is safe

Verified directly against NVIDIA/nvskills-ci (cloned locally):

  • scripts/validate_request.py:21-26WATCHED_PATH_PREFIXES = (".agents/skills/", "skills/", "team-skills/", "rules/team-rules/", "plugins/") and is_watched_path = path.startswith(WATCHED_PATH_PREFIXES). Plain prefix match — no namespacing requirement.
  • .github/workflows/team-request.yml:114 mirrors the same startswith("skills/") filter.
  • docs/team-onboarding.md:27"Store NVSkills content under skills/, team-skills/, ..." — no per-product subdir mentioned.
  • nvskills-ci's own example skill is at skills/ci-smoke-test/SKILL.md.
  • Every other product repo follows the same pattern (verified via GitHub API on cuopt, nurec-skills, digital-health-skills, aiq).

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)

Verification

Reproduced and validated locally on a clean main checkout:

$ python3 scripts/export-catalog-skills.py
Exported 11 catalog skill(s) to skills

$ ls skills/
catalog-metadata.json
nemoclaw-skills-guide
nemoclaw-user-agent-skills
nemoclaw-user-configure-inference
... (11 skills, flat layout)

# Old change-detection (broken — misses untracked tree):
$ git diff --quiet -- .agents/catalog-skills.yaml skills && echo changed=false || echo changed=true
changed=false

# Fixed change-detection:
$ git add --intent-to-add -- .agents/catalog-skills.yaml skills
$ git diff --quiet -- .agents/catalog-skills.yaml skills && echo changed=false || echo changed=true
changed=true
$ git diff --stat -- .agents/catalog-skills.yaml skills | tail -1
 44 files changed, 8907 insertions(+), 1 deletion(-)

Vitest:

$ npx vitest run test/catalog-skills-export.test.ts --project cli
 ✓ |cli| test/catalog-skills-export.test.ts (4 tests) 1201ms
 Test Files  1 passed (1)
      Tests  4 passed (4)
  • npx prek run --all-files passes
  • npm test passes for the affected test file (4/4)
  • Tests updated for changed export path
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes — N/A (CI-internal)
  • npm run docs builds without warnings — N/A
  • Doc pages follow the style guide — N/A
  • New doc pages include SPDX header and frontmatter — N/A

Signed-off-by: Justin Yaunches jyaunches@nvidia.com

Summary by CodeRabbit

  • Chores
    • Refresh process updated to regenerate and preserve exports under the top-level skills/ directory, improving detection and staging of newly created files and signer artifacts.
    • Pre-commit checks widened to run against the broader skills/ export tree.
  • Documentation
    • Updated signing-flow and PR guidance to reference the skills/ export location.
  • Tests
    • Test fixtures aligned to the new skills/ export layout.

Review Change Stack

The catalog refresh workflow's change-detection step used
`git diff --quiet` against `.agents/catalog-skills.yaml` and
`skills/nemoclaw`, which only inspects tracked paths. Because
`skills/nemoclaw` is not yet committed on `main`, a freshly-exported
catalog looks identical to the empty tracked tree and the workflow
short-circuits with "No catalog skill export changes detected.",
silently dropping the 43 generated files and never opening the
refresh PR.

Mark the export targets as intent-to-add before running
`git diff --quiet` so untracked files surface as additions and the
workflow proceeds to create or update the refresh PR.

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

coderabbitai Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5dd17b3e-1ea8-43a3-9912-18223d67f509

📥 Commits

Reviewing files that changed from the base of the PR and between 7c02c7e and 509aadd.

📒 Files selected for processing (7)
  • .agents/catalog-skills.yaml
  • .github/catalog-skills-signing-flow.md
  • .github/pr-bodies/catalog-skills-refresh.md
  • .github/workflows/catalog-skills-refresh.yaml
  • .pre-commit-config.yaml
  • scripts/export-catalog-skills.py
  • test/catalog-skills-export.test.ts
✅ Files skipped from review due to trivial changes (2)
  • .github/pr-bodies/catalog-skills-refresh.md
  • .github/catalog-skills-signing-flow.md

📝 Walkthrough

Walkthrough

Change the catalog export root from skills/nemoclaw to skills/: update the allowlist config, export script default, pre-commit hook, docs, PR body, tests, and widen the refresh workflow to overlay skills/, stage .agents/catalog-skills.yaml and skills with git add --intent-to-add, and commit/create the refresh PR accordingly.

Changes

Catalog skills export root & refresh workflow

Layer / File(s) Summary
Export config and script defaults
.agents/catalog-skills.yaml, scripts/export-catalog-skills.py, .pre-commit-config.yaml, .github/pr-bodies/catalog-skills-refresh.md, .github/catalog-skills-signing-flow.md
Change export root and documentation from skills/nemoclaw to skills, and set the script default/config to write to skills/ when export is omitted.
Refresh workflow overlay and staging
.github/workflows/catalog-skills-refresh.yaml
Widen the "preserve signer artifacts" overlay to checkout skills/ from existing refresh branches; stage .agents/catalog-skills.yaml and the entire skills tree with git add --intent-to-add and update the git diff/commit staging to reference skills.
Tests
test/catalog-skills-export.test.ts
Update test fixtures and config fragments to expect and validate exports under skills/ instead of skills/nemoclaw, and adjust artifact-preservation test paths.

Sequence Diagram(s)

sequenceDiagram
  participant Actions as GitHub Actions
  participant Config as .agents/catalog-skills.yaml
  participant Script as export-catalog-skills.py
  participant Git as git CLI
  participant PR as GitHub Pull Request

  Actions->>Config: read export root (`skills/`)
  Actions->>Git: checkout refresh branch (if exists) and overlay `skills/`
  Actions->>Script: run regeneration -> write `skills/`
  Actions->>Git: git add --intent-to-add .agents/catalog-skills.yaml skills
  Git->>Git: git diff --quiet checks for changes
  Actions->>PR: create or update refresh pull request with staged changes
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Possibly related PRs

  • NVIDIA/NemoClaw#4334: Modifies similar refresh workflow overlay/staging behavior using skills/nemoclaw — related prior change set.
  • NVIDIA/NemoClaw#4284: Updates the catalog export machinery and config to change generated output paths from skills/nemoclaw to skills/.

Suggested labels

fix, CI/CD, v0.0.53

Suggested reviewers

  • miyoungc
  • cv

Poem

🐰 I hopped through branches, leaves of code so green,
I shifted roots where exports now convene—
From nemoclaw to skills, the garden spread,
With staged intent, no generated file unread. 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately summarizes the main changes: fixing catalog export detection by flattening the export directory structure and detecting untracked files in the refresh diff.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ 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 fix/4282-catalog-refresh-untracked-detection

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


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

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: None
Optional E2E: None

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • None. No existing E2E jobs are recommended. The PR updates catalog export automation, CI/pre-commit path matching, docs, and unit coverage for the exporter. It does not change installer/onboarding behavior, sandbox lifecycle, credentials, security runtime boundaries, network policy enforcement, inference routing, deployment logic, or real assistant user flows. The relevant validation should be the catalog exporter/unit and workflow checks rather than NemoClaw E2E scenarios.

Optional E2E

  • None.

New E2E recommendations

  • None.

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

E2E Scenario Advisor Recommendation

Required scenario E2E: None
Optional scenario E2E: None

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required scenario E2E

  • None. No scenario workflow, scenario metadata, scenario runtime, or validation-suite files changed.

Optional scenario E2E

  • None.

Relevant changed files

  • None.

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor

Findings: 0 needs attention, 4 worth checking, 0 nice ideas
Since last review: 0 prior items resolved, 2 still apply, 1 new item found

Review findings

🛠️ Needs attention

  • None.

🔎 Worth checking

  • Source-of-truth review needed: .github/workflows/catalog-skills-refresh.yaml change-detection step: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The workflow added git add --intent-to-add -- .agents/catalog-skills.yaml skills before git diff --quiet, and existing tests only exercise exporter behavior.
  • Source-of-truth review needed: Flattened catalog export ownership for top-level skills/: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The workflow uses rm -rf skills, git checkout origin/$BRANCH -- skills, git add --intent-to-add -- .agents/catalog-skills.yaml skills, and git add .agents/catalog-skills.yaml skills; the exporter replaces the configured export_root.
  • Constrain ownership of flattened skills/ export (.github/workflows/catalog-skills-refresh.yaml:69): Flattening the generated export from skills/nemoclaw to the top-level skills directory broadens the workflow and exporter ownership boundary. The workflow now removes, checks out, diffs, stages, and commits the whole skills tree, and the exporter replaces the configured export directory wholesale. That is safe only if top-level skills/ is permanently reserved for this generated catalog export; otherwise future unrelated NVSkills or repo-local content under skills/ could be deleted, preserved from the automation branch, or force-pushed unintentionally.
    • Recommendation: Either enforce/document that top-level skills/ is exclusively generated catalog output, or narrow the destructive/staging operations to the allowlisted skill directories plus catalog-metadata.json and README.md. Add a regression test or workflow-contract check showing unrelated skills/ content is intentionally rejected or preserved according to that ownership rule.
    • Evidence: The workflow now runs rm -rf skills and git checkout origin/$BRANCH -- skills, then later git add .agents/catalog-skills.yaml skills. The exporter default is export = Path(str(raw.get("export", "skills"))) and replace_directory removes the destination before moving the generated tree.
  • Add a regression test for untracked export detection (.github/workflows/catalog-skills-refresh.yaml:86): The fix for the observed refresh bug depends on a subtle Git behavior: git diff --quiet does not report fully untracked generated files until they are marked intent-to-add. The inline workflow comment explains the issue, but the committed tests still exercise only exporter behavior under the new path and do not cover the workflow's git diff contract.
    • Recommendation: Add a lightweight regression test or helper-script test that creates a temporary git repository with no tracked skills/ export, writes generated files under skills/, verifies plain git diff --quiet misses them, and verifies git add --intent-to-add -- .agents/catalog-skills.yaml skills makes git diff --quiet report changes.
    • Evidence: The changed workflow line is git add --intent-to-add -- .agents/catalog-skills.yaml skills before git diff --quiet. test/catalog-skills-export.test.ts updates fixture paths to skills but does not initialize a git repo or exercise the change-detection shell behavior.

🌱 Nice ideas

  • None.
Since last review details

Current findings:

  • Source-of-truth review needed: .github/workflows/catalog-skills-refresh.yaml change-detection step: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The workflow added git add --intent-to-add -- .agents/catalog-skills.yaml skills before git diff --quiet, and existing tests only exercise exporter behavior.
  • Source-of-truth review needed: Flattened catalog export ownership for top-level skills/: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The workflow uses rm -rf skills, git checkout origin/$BRANCH -- skills, git add --intent-to-add -- .agents/catalog-skills.yaml skills, and git add .agents/catalog-skills.yaml skills; the exporter replaces the configured export_root.
  • Constrain ownership of flattened skills/ export (.github/workflows/catalog-skills-refresh.yaml:69): Flattening the generated export from skills/nemoclaw to the top-level skills directory broadens the workflow and exporter ownership boundary. The workflow now removes, checks out, diffs, stages, and commits the whole skills tree, and the exporter replaces the configured export directory wholesale. That is safe only if top-level skills/ is permanently reserved for this generated catalog export; otherwise future unrelated NVSkills or repo-local content under skills/ could be deleted, preserved from the automation branch, or force-pushed unintentionally.
    • Recommendation: Either enforce/document that top-level skills/ is exclusively generated catalog output, or narrow the destructive/staging operations to the allowlisted skill directories plus catalog-metadata.json and README.md. Add a regression test or workflow-contract check showing unrelated skills/ content is intentionally rejected or preserved according to that ownership rule.
    • Evidence: The workflow now runs rm -rf skills and git checkout origin/$BRANCH -- skills, then later git add .agents/catalog-skills.yaml skills. The exporter default is export = Path(str(raw.get("export", "skills"))) and replace_directory removes the destination before moving the generated tree.
  • Add a regression test for untracked export detection (.github/workflows/catalog-skills-refresh.yaml:86): The fix for the observed refresh bug depends on a subtle Git behavior: git diff --quiet does not report fully untracked generated files until they are marked intent-to-add. The inline workflow comment explains the issue, but the committed tests still exercise only exporter behavior under the new path and do not cover the workflow's git diff contract.
    • Recommendation: Add a lightweight regression test or helper-script test that creates a temporary git repository with no tracked skills/ export, writes generated files under skills/, verifies plain git diff --quiet misses them, and verifies git add --intent-to-add -- .agents/catalog-skills.yaml skills makes git diff --quiet report changes.
    • Evidence: The changed workflow line is git add --intent-to-add -- .agents/catalog-skills.yaml skills before git diff --quiet. test/catalog-skills-export.test.ts updates fixture paths to skills but does not initialize a git repo or exercise the change-detection shell behavior.

Workflow run details

This is an automated advisory review. A human maintainer must make the final merge decision.

…ention

Every other onboarded NVSkills product repo (cuopt, nurec-skills,
digital-health-skills, aiq, and nvskills-ci itself with
skills/ci-smoke-test/) lays skills out at `skills/<skill-name>/SKILL.md`,
not `skills/<product>/<skill-name>/SKILL.md`. NVSkills CI's validator
(NVIDIA/nvskills-ci/scripts/validate_request.py:21-26) only checks
`path.startswith(("skills/", ...))`; the per-product subdir is not
required and is in fact unique to NemoClaw.

Drop the redundant `nemoclaw/` namespace layer so the export conforms
to the established convention:

- `.agents/catalog-skills.yaml`: `export: skills/nemoclaw` -> `skills`
- `scripts/export-catalog-skills.py`: default target updated
- `.github/workflows/catalog-skills-refresh.yaml`: all path refs updated
  (preserve-overlay, change-detection, commit-add)
- `.pre-commit-config.yaml`: regex anchored to `skills/.*`
- `.github/catalog-skills-signing-flow.md`,
  `.github/pr-bodies/catalog-skills-refresh.md`: prose updated
- `test/catalog-skills-export.test.ts`: fixtures updated

Verified locally: exporter writes 11 skills to flat `skills/<name>/`,
all 4 vitest cases pass, and the untracked-file diff fix from the
prior commit still flips `changed=true` against the new path.

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@jyaunches jyaunches changed the title fix(skills): detect untracked files in catalog refresh diff fix(skills): flatten catalog export and detect untracked files in refresh diff May 27, 2026
@jyaunches jyaunches added the v0.0.53 Release target label May 27, 2026
@jyaunches jyaunches enabled auto-merge (squash) May 27, 2026 19:18
@jyaunches jyaunches merged commit 312058b into main May 27, 2026
32 checks passed
jyaunches added a commit that referenced this pull request May 27, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Install the NVSkills CI request listener so `/nvskills-ci` comments on
catalog refresh PRs actually trigger NVSkills signing. Without this
listener, comments are no-ops and merged refresh PRs ship unsigned
(which downstream `NVIDIA/skills` then drops on sync).

## Related Issue

Follow-up to #4282 / #4342. Discovered while running the post-merge
signing flow on PR #4344: the `/nvskills-ci` comment posted on that PR
produced no workflow run because NemoClaw was missing the team-request
listener.

## Changes

- **`.github/workflows/request-nvskills-ci.yml`** (new): copied
byte-for-byte from
`NVIDIA/nvskills-ci/templates/team-request-workflow.yml@main`, with a
NemoClaw SPDX header. Forwards `/nvskills-ci` PR comments (and
`nv-skills-ci[bot]` signature pushes) to
`NVIDIA/skills/.github/workflows/team-request.yml@main` via
`secrets.NVSKILLS_CI_DISPATCH_TOKEN`.
- **`.github/CODEOWNERS`**: add an explicit nemoclaw-maintainer rule for
`/.github/workflows/request-nvskills-ci.yml` so onboarding step 4
(CODEOWNERS protection) is visibly enforced; also flatten the now-stale
`/skills/nemoclaw/` rule to `/skills/` to match the post-#4342 export
layout.

## Onboarding status

Per
[`NVIDIA/nvskills-ci/docs/team-onboarding.md`](https://github.com/NVIDIA/nvskills-ci/blob/main/docs/team-onboarding.md):

| Step | What | Status |
|---|---|---|
| 1 | Add NemoClaw to `config/onboarded-repositories.json` | ✅ already
done |
| 2 | Install `templates/team-request-workflow.yml` as
`.github/workflows/request-nvskills-ci.yml` | ✅ this PR |
| 3 | Set `NVSKILLS_CI_DISPATCH_TOKEN` repo secret | ⚠️ **manual
maintainer/admin action required after merge** |
| 4 | CODEOWNERS-protect the new workflow file | ✅ this PR |
| 5 | Test by commenting `/nvskills-ci` on a PR | 🟡 unblocked once step
3 lands |

## Type of Change

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

## Verification

- Workflow body verified byte-identical to upstream template:

  ```
  $ diff <(tail -n +13 .github/workflows/request-nvskills-ci.yml) \
         ~/Development/nvskills-ci/templates/team-request-workflow.yml
  (no output — identical)
  ```

- Listener is inert until the `NVSKILLS_CI_DISPATCH_TOKEN` secret is
set; until then `/nvskills-ci` comments will fail at the
secret-injection boundary, but they will at least produce a visible
failed workflow run instead of silently doing nothing.

- [x] No secrets, API keys, or credentials committed
- [x] Tests added or updated for new or changed behavior — N/A (single
workflow file mirrored from upstream template; behavior is exercised by
the next live `/nvskills-ci` comment)
- [ ] Docs updated for user-facing behavior changes — N/A (CI-internal)
- [ ] `npm run docs` builds without warnings — N/A
- [ ] Doc pages follow the style guide — N/A
- [ ] New doc pages include SPDX header and frontmatter — N/A

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


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

* **Chores**
* Updated repository ownership mappings to reorganize responsibility for
the skills subtree and simplify maintainer coverage.
* Added a workflow to request NVSkills validation/signature runs: can be
triggered by a specially formatted issue comment or by specific commit
pushes from the CI signature actor, and securely forwards the dispatch
token to the centralized validation workflow.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/4345?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

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

---------

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
cv pushed a commit that referenced this pull request May 27, 2026
## Summary
- Add the v0.0.53 release notes with the user-facing onboarding,
inference, policy, runtime, Hermes, and maintainer-tooling changes from
the release range.
- Refresh generated `nemoclaw-user-*` skills from the current Fern docs,
including already-merged policy, inference, troubleshooting, and
command-reference updates.
- Remove skipped experimental shield wording from generated-doc source
so the release-prep skip-term gate stays clean.

## Source summary
- #4197 -> `docs/about/release-notes.mdx`,
`docs/reference/commands.mdx`: Document pre-recreate workspace backup,
abort-on-partial-backup behavior, and
`NEMOCLAW_RECREATE_WITHOUT_BACKUP`.
- #4273 -> `docs/about/release-notes.mdx`,
`docs/reference/troubleshooting.mdx`: Document the under-provisioned
runtime prompt defaulting to abort in interactive onboarding.
- #4220 -> `docs/about/release-notes.mdx`,
`docs/network-policy/customize-network-policy.mdx`,
`docs/network-policy/integration-policy-examples.mdx`: Include the
`openclaw-pricing` preset and generated skill refresh.
- #4253 -> `docs/about/release-notes.mdx`,
`docs/inference/use-local-inference.mdx`,
`docs/inference/switch-inference-providers.mdx`: Carry the Ollama
runtime context-window docs into generated skills.
- #4298 -> `docs/about/release-notes.mdx`,
`docs/reference/troubleshooting.mdx`: Carry WSL Docker Desktop GPU
guidance into generated skills and release notes.
- #4297, #4210, #4221, #4225, #4288, #4306, #4311, #4319, #4342, #4284,
#3327 -> `docs/about/release-notes.mdx`: Summarize release-range fixes
and maintainer tooling changes that did not need new standalone docs
pages.

## Verification
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx`
- `rg "permissive mode|shields down|shields up|shields status|config
rotate-token|rotate-token" docs .agents/skills` returned no matches
outside `docs/.docs-skip`.
- `npm run docs` passes with full network access. Fern reports 0 errors
and one existing light-mode accent contrast warning.
- `FERN_VERSION=$(node -p "require('./fern/fern.config.json').version")
&& (cd fern && npx --yes "fern-api@${FERN_VERSION}" check --warnings)`
reports 0 errors and the same contrast warning.

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

## Summary by CodeRabbit

* **Documentation**
* Added v0.0.53 release notes with updates to onboarding, sandbox
recreation, and gateway handling
* Introduced `openclaw-pricing` preset for model pricing endpoint
management
* Clarified Ollama context window configuration and local model
validation behavior
* Updated sandbox recreation workflow documentation with backup/restore
details
* Enhanced interactive onboarding defaults for under-provisioned runtime
warnings
* Revised security guidance for configuration directory permissions and
immutability verification

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/4360?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@wscurran wscurran added the bug-fix PR fixes a bug or regression label Jun 8, 2026
@jyaunches jyaunches deleted the fix/4282-catalog-refresh-untracked-detection branch June 12, 2026 13:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug-fix PR fixes a bug or regression v0.0.53 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants