From 42c32966e4aba7b154a22903ff51616733816288 Mon Sep 17 00:00:00 2001 From: Ananth Subramaniam Date: Thu, 28 May 2026 16:58:19 -0700 Subject: [PATCH 1/2] ci(nemo-gym-docs): migrate to skills/ for NVSkills CI ## Summary - Move `.claude/skills/nemo-gym-docs/` to top-level `skills/nemo-gym-docs/` so this PR touches files under the central `team-request.yml` trigger allowlist (`skills/`, `team-skills/`, `rules/team-rules/`, `plugins/`). - Replace `.claude/skills/nemo-gym-docs/` with a symlink to `../../skills/nemo-gym-docs` so Claude Code and Cursor continue to discover the skill via the conventional `.claude/skills//SKILL.md` path with no tool-side change. - Add `license: Apache-2.0` to `skills/nemo-gym-docs/SKILL.md` frontmatter. - Add `skills/nemo-gym-docs/evals/evals.json` with positive trigger cases (add/move doc page, redirects, preview/publish docs) and negative cases that delegate to sibling skills. ## Motivation Prepares the `nemo-gym-docs` skill for NVSkills CI signing. Per-skill scope keeps the diff small and lets NVSkills CI evaluate one skill at a time. Other skills remain at `.claude/skills//` until each has its own migration PR. ## Test plan - [ ] Comment `/nvskills-ci` on this PR. Expect the request workflow to dispatch (not skip) and `svc-nvskills-signing` to attach `skill-card.md` and `skill.oms.sig` under `skills/nemo-gym-docs/`. - [ ] Claude Code discovers `nemo-gym-docs` via `.claude/skills/nemo-gym-docs/SKILL.md` (follows symlink). Signed-off-by: Ananth Subramaniam --- .claude/skills/nemo-gym-docs | 1 + .../skills => skills}/nemo-gym-docs/SKILL.md | 1 + skills/nemo-gym-docs/evals/evals.json | 60 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 120000 .claude/skills/nemo-gym-docs rename {.claude/skills => skills}/nemo-gym-docs/SKILL.md (99%) create mode 100644 skills/nemo-gym-docs/evals/evals.json diff --git a/.claude/skills/nemo-gym-docs b/.claude/skills/nemo-gym-docs new file mode 120000 index 000000000..1013aad28 --- /dev/null +++ b/.claude/skills/nemo-gym-docs @@ -0,0 +1 @@ +../../skills/nemo-gym-docs \ No newline at end of file diff --git a/.claude/skills/nemo-gym-docs/SKILL.md b/skills/nemo-gym-docs/SKILL.md similarity index 99% rename from .claude/skills/nemo-gym-docs/SKILL.md rename to skills/nemo-gym-docs/SKILL.md index 4a19feb9a..ba9290beb 100644 --- a/.claude/skills/nemo-gym-docs/SKILL.md +++ b/skills/nemo-gym-docs/SKILL.md @@ -1,5 +1,6 @@ --- name: nemo-gym-docs +license: Apache-2.0 description: > Maintain the NeMo Gym Fern docs site — add, update, move, or remove pages under fern/. Use for any documentation change. Triggered by: "edit docs", diff --git a/skills/nemo-gym-docs/evals/evals.json b/skills/nemo-gym-docs/evals/evals.json new file mode 100644 index 000000000..2194d0a47 --- /dev/null +++ b/skills/nemo-gym-docs/evals/evals.json @@ -0,0 +1,60 @@ +[ + { + "id": "nemo-gym-docs-positive-001", + "question": "Add a how-to page for collecting rollouts under the Get Started section of the NeMo Gym docs.", + "expected_skill": "nemo-gym-docs", + "ground_truth": "The agent loads the nemo-gym-docs skill, creates fern/versions/latest/pages/get-started/rollout-collection.mdx with the required frontmatter (title, description, position), and confirms the folder uses title-source: frontmatter so no main.yml edit is needed.", + "expected_behavior": [ + "The agent read nemo-gym-docs/SKILL.md before acting", + "The agent created the new page under fern/versions/latest/pages/get-started/ (the bleeding-edge tree), not under v0.2.1/", + "The agent added the required frontmatter (title, description) to the MDX", + "The agent did not mirror the change into a frozen GA snapshot folder" + ] + }, + { + "id": "nemo-gym-docs-positive-002", + "question": "Rename /main/get-started/setup to /main/get-started/detailed-setup and make sure the old URL still works.", + "expected_skill": "nemo-gym-docs", + "ground_truth": "The agent loads the nemo-gym-docs skill, runs git mv on the MDX file under fern/versions/latest/pages/get-started/, adds a redirect entry in fern/docs.yml, and updates incoming links inside fern/versions/latest/.", + "expected_behavior": [ + "The agent read nemo-gym-docs/SKILL.md before acting", + "The agent used git mv on the MDX file under fern/versions/latest/pages/", + "The agent added a redirect entry to fern/docs.yml for the old URL", + "The agent searched for and updated incoming links" + ] + }, + { + "id": "nemo-gym-docs-positive-003", + "question": "Publish the Gym docs to docs.nvidia.com as a new versioned release. What tag do I push?", + "expected_skill": "nemo-gym-docs", + "ground_truth": "The agent loads the nemo-gym-docs skill and explains that a tag matching docs/v.. pushed to origin triggers publish-fern-docs.yml, and reminds the user not to push the tag without explicit user approval.", + "expected_behavior": [ + "The agent read nemo-gym-docs/SKILL.md before acting", + "The agent gave the docs/v.. tag format", + "The agent referenced publish-fern-docs.yml as the workflow that publishes", + "The agent did not push the tag without explicit user confirmation" + ] + }, + { + "id": "nemo-gym-docs-negative-001", + "question": "Implement the verify() function for a new code-generation benchmark resources server.", + "expected_skill": null, + "should_trigger": false, + "ground_truth": "The agent should not activate the nemo-gym-docs skill for benchmark implementation. It should use the add-benchmark skill instead.", + "expected_behavior": [ + "The agent did not read or activate nemo-gym-docs/SKILL.md", + "The agent recognized this as a benchmark integration task" + ] + }, + { + "id": "nemo-gym-docs-negative-002", + "question": "My Slurm job for ng_collect_rollouts is failing with OOM mid-run. Help me debug it.", + "expected_skill": null, + "should_trigger": false, + "ground_truth": "The agent should not activate the nemo-gym-docs skill for a job-debugging task. It should use the nemo-gym-debugging skill instead.", + "expected_behavior": [ + "The agent did not read or activate nemo-gym-docs/SKILL.md", + "The agent recognized this as a job-debugging task" + ] + } +] From 6a45e76483e3674f8d8ef0e954afcf5a27a25ebd Mon Sep 17 00:00:00 2001 From: Ananth Subramaniam Date: Fri, 29 May 2026 09:03:26 -0700 Subject: [PATCH 2/2] ci(nemo-gym-docs): address NVSkills CI content feedback Apply the same content fixes validated on add-benchmark: - Add metadata.author and metadata.tags. - Tighten the description and add a negative trigger (not for code or configuration changes outside fern/). - Add a Purpose section, rename Operations to Instructions, and promote the worked examples into an Examples section. - Replace the all-caps/bold emphasis with plain prose. - Note that DOCS_FERN_TOKEN is a CI secret that must not be committed or echoed in logs. Signed-off-by: Ananth Subramaniam --- skills/nemo-gym-docs/SKILL.md | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/skills/nemo-gym-docs/SKILL.md b/skills/nemo-gym-docs/SKILL.md index ba9290beb..3cb124adb 100644 --- a/skills/nemo-gym-docs/SKILL.md +++ b/skills/nemo-gym-docs/SKILL.md @@ -2,19 +2,30 @@ name: nemo-gym-docs license: Apache-2.0 description: > - Maintain the NeMo Gym Fern docs site — add, update, move, or remove pages - under fern/. Use for any documentation change. Triggered by: "edit docs", - "add doc page", "update docs", "rename page", "fix broken link", "add - redirect", "preview docs", "publish docs", any request that touches `fern/`. + Maintain the NeMo Gym Fern docs site: add, update, move, or remove pages under + fern/. Use for any documentation change. Not for code or configuration changes + outside fern/. Triggered by: edit docs, add doc page, update docs, rename page, + fix broken link, add redirect, preview docs, publish docs. +metadata: + author: NVIDIA + tags: + - documentation + - fern + - mdx + - docs-site --- # NeMo Gym Docs Maintenance -Unified skill for adding, updating, moving, and removing pages on the NeMo Gym Fern documentation site. +## Purpose + +Add, update, move, and remove pages on the NeMo Gym Fern documentation site, and +run the validation, preview, and publish workflows. All documentation content +lives under `fern/`. ## Scope Rule -**ALL docs edits happen under `fern/`.** All new pages — including release notes and migration guides — belong under `fern/`. +All documentation edits happen under `fern/`. All new pages, including release notes and migration guides, belong under `fern/`. **Bleeding-edge tree + GA snapshots.** Gym keeps one bleeding-edge content tree at `fern/versions/latest/` (the folder name is historical — it's mounted under the `main` slug via `main.yml`) and one frozen GA snapshot per shipped release (currently `fern/versions/v0.2.1/`). All new edits land in `fern/versions/latest/`. The `latest.yml` file is a GA *alias* — a symlink to the current GA's yml — so `/latest/...` and `//...` serve the same pages. Back-ports into a frozen GA snapshot are deliberate and rare; default to editing `fern/versions/latest/` only. @@ -45,7 +56,7 @@ fern/versions/v0.2.1/pages/get-started/quickstart.mdx docs.nvidia.com/nemo/gym/ docs.nvidia.com/nemo/gym/latest/get-started/quickstart (GA alias) ``` -## Operations +## Instructions ### Add a Page @@ -65,7 +76,7 @@ fern/versions/v0.2.1/pages/get-started/quickstart.mdx docs.nvidia.com/nemo/gym/ ``` 3. If the parent folder is mounted in `main.yml` with `title-source: frontmatter`, the page is auto-discovered — no nav edit needed. Otherwise add a `- page:` entry under the right `section:` in `fern/versions/main.yml`. -4. Do **not** mirror into the current GA snapshot folder (e.g., `v0.2.1/`) — frozen GA snapshots only get back-ports on explicit request. +4. Do not mirror into the current GA snapshot folder (e.g., `v0.2.1/`); frozen GA snapshots only get back-ports on explicit request. ### Update a Page @@ -87,6 +98,8 @@ fern/versions/v0.2.1/pages/get-started/quickstart.mdx docs.nvidia.com/nemo/gym/ Only back-port when the user explicitly asks ("back-port to v0.2.1"). Apply the same change inside the GA snapshot's `pages/` folder (e.g., `fern/versions/v0.2.1/pages/`) and update its yml if needed. `latest.yml` is a symlink to the current GA's yml, so nav changes propagate automatically. +## Examples + ### Worked Example: Adding a Page Request: *"Add a how-to for collecting rollouts under Get Started."* @@ -213,7 +226,7 @@ Tag push (docs/v*) → publish-fern-docs.yml → docs.nvi Manual dispatch → publish-fern-docs.yml → docs.nvidia.com/nemo/gym ``` -The preview-comment + publish jobs require the `DOCS_FERN_TOKEN` repository or organization secret (from `fern token`). +The preview-comment and publish jobs require the `DOCS_FERN_TOKEN` repository or organization secret (from `fern token`). It is managed as a CI secret and should not be committed to the repository or echoed in logs. ## Publishing to Production