Skip to content

skills: prefix non-product-scoped skills with cuopt- - #1319

Closed
ramakrishnap-nv wants to merge 6 commits into
mainfrom
skills/rename-non-product-scoped-to-cuopt-prefix
Closed

skills: prefix non-product-scoped skills with cuopt-#1319
ramakrishnap-nv wants to merge 6 commits into
mainfrom
skills/rename-non-product-scoped-to-cuopt-prefix

Conversation

@ramakrishnap-nv

@ramakrishnap-nv ramakrishnap-nv commented May 28, 2026

Copy link
Copy Markdown
Collaborator

Summary

Renames three skills to satisfy the Skill Naming & Taxonomy rule in the NVIDIA Agent Skills Publishing Onboarding Guide (product-scoped skills must include the product in the skill name to avoid collisions across products in the public catalog).

  • `skill-evolution` → `cuopt-skill-evolution`
  • `numerical-optimization-formulation` → `cuopt-numerical-optimization-formulation`
  • `routing-formulation` → `cuopt-routing-formulation`

The NVIDIA Agent Skills Publishing Onboarding Guide (Skill Naming &
Taxonomy section) requires product-scoped skills to include the product
in the skill name — to avoid collisions across products and give users
context when browsing or installing from the public catalog.

Three skills in this repo lacked the cuopt- prefix:

  skill-evolution                     → cuopt-skill-evolution
  numerical-optimization-formulation  → cuopt-numerical-optimization-formulation
  routing-formulation                 → cuopt-routing-formulation

PR 1310 is the catalog-onboarding prep PR, so the cuOpt skills are not
yet "published" to github.com/NVIDIA/skills — the grandfather clause
that lets pre-existing published skills keep their names does not yet
apply. Renaming now avoids a forced rename after first publication.

Changes:
- git mv the 3 skill directories (carries SKILL.md, evals/, skill-card.md,
  skill.oms.sig with them — NVCARPS will re-sign on the next cycle).
- Update SKILL.md frontmatter `name:` to match the new directory name
  (spec requires dir == frontmatter name).
- Update evals/evals.json `expected_skill` values.
- Update cross-references: AGENTS.md skill index (4 mentions),
  .claude-plugin/marketplace.json (3 entries),
  .agents/rules/skill-evolution.mdc renamed to cuopt-skill-evolution.mdc
  with content updated, skills/cuopt-user-rules/SKILL.md post-correction
  hook pointer.
- Update self-references inside cuopt-skill-evolution/SKILL.md (provenance
  tagging examples: `origin: cuopt-skill-evolution`, commit-subject
  prefix, security rules).

Verified: all 12 skills now satisfy dir == frontmatter name, all are
kebab-case ≤64 chars, and a negative-lookbehind grep for any bare
old-name reference (not preceded by `cuopt-`) returns empty across the
entire repo.

Non-goals: cuopt-developer is left as-is despite being contributor-facing
(page 5 guidance suggests moving it to .agents/contributor-skills/ but
that requires a components.d/<slug>.yml change in the catalog repo and
is deferred to a follow-up).

Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
@ramakrishnap-nv
ramakrishnap-nv requested a review from a team as a code owner May 28, 2026 15:58
@ramakrishnap-nv
ramakrishnap-nv requested a review from tmckayus May 28, 2026 15:58
@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

Actionable comments posted: 0

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

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

Renames skills to a cuopt-prefixed namespace, updates the plugin marketplace and an agent rule to reference the new names, adjusts documentation and SKILL frontmatter, and adds/updates cuopt-specific evals and provenance/user-rule instructions.

Changes

cuOpt Skill Namespace Consolidation

Layer / File(s) Summary
Plugin registry and agent rule migration
.claude-plugin/marketplace.json, .agents/rules/cuopt-skill-evolution.mdc
Renames three plugins to cuopt-* with updated source paths and adds a new always-on cuopt-skill-evolution agent rule that directs post-solution evaluation to skills/cuopt-skill-evolution/SKILL.md.
AGENTS.md documentation
AGENTS.md
Updates introductory text, common concept paths, and post-correction hook references to skills/cuopt-* and the new skills/cuopt-skill-evolution/ workflow.
Numerical optimization and routing skill metadata
skills/cuopt-numerical-optimization-formulation/SKILL.md, skills/cuopt-numerical-optimization-formulation/evals/evals.json, skills/cuopt-routing-formulation/SKILL.md, skills/cuopt-routing-formulation/evals/evals.json
Changes SKILL name frontmatter and adds/updates evals with expected_skill set to cuopt-numerical-optimization-formulation and cuopt-routing-formulation.
Skill evolution SKILL definition and evaluation
skills/cuopt-skill-evolution/SKILL.md, skills/cuopt-skill-evolution/evals/evals.json
Updates frontmatter, placement-rule examples, provenance tagging (origin: cuopt-skill-evolution), code-asset header guidance, distillation checklist, and adds an eval (evo-eval-001-proposal-five-field-format) requiring a five-field proposal format and forbidding self-modification.
User rules and eval formatting
skills/cuopt-user-rules/SKILL.md, skills/cuopt-user-rules/evals/evals.json
Redirects mandatory post-correction check to skills/cuopt-skill-evolution/SKILL.md and revises an eval to enforce cuOpt solver-status wording and prominent objective-value formatting.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • NVIDIA/cuopt#1308: Updates skills/cuopt-user-rules/evals/evals.json user-rules eval and is directly related to the cuOpt user-rule formatting changes.
  • NVIDIA/cuopt#1302: Touches skill-evolution eval fixtures that overlap the changes to skills/skill-evolution/evals/evals.json.

Suggested labels

Agentic, doc

Suggested reviewers

  • tmckayus
  • Iroy30
  • bdice
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and clearly summarizes the main change: renaming three skills to include the cuopt- prefix for product-scoping compliance.
Description check ✅ Passed The description directly explains the rationale and lists the three specific skill renames performed, relating clearly to the changeset.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch skills/rename-non-product-scoped-to-cuopt-prefix

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

@ramakrishnap-nv ramakrishnap-nv self-assigned this May 28, 2026
@ramakrishnap-nv ramakrishnap-nv added non-breaking Introduces a non-breaking change improvement Improves an existing functionality labels May 28, 2026
@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/nvskills-ci

…ser-rules

The renames brought these two meta/behavioral skills into the eval gate
for the first time. Both regressed:

  cuopt-skill-evolution: claude-code -0.02 overall, composite FAIL
  cuopt-user-rules:      claude-code -0.09 overall (codex carried PASS)

Root cause: same baseline-saturation pattern we hit earlier on
cuopt-server-common. The old questions tested behaviors the base model
already does (asking clarifying questions, recognizing a user
correction), so the LLM judge penalized the with-skill run for being
*more* cautious than baseline.

Rewrite each eval to test content that only the skill documents:

- cuopt-skill-evolution: the exact five-field proposal block
  (Target / Trigger / Scored / Removal / Diff) in that order. Base
  model invents generic field names; the skill prescribes these five
  exactly.
- cuopt-user-rules: the three-element Result Summary format — solver
  status drawn from {Optimal, FeasibleFound, SUCCESS}, objective value
  rendered in bold or a code block (not inline prose), and a brief
  description of what the objective represents. Base model writes
  prose summaries that won't hit the specific format.

The eval questions are phrased naturally (no skill name mentioned in
the prompt, ground_truth, or expected_behavior) so the with-skill run
gets no free hint via the question text — it has to recover the answer
shape from the skill content. `expected_skill` still tags which skill
the framework grades.

Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/nvskills-ci

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

Actionable comments posted: 0

The previous evals for cuopt-numerical-optimization-formulation and
cuopt-routing-formulation were baseline-saturated — the four-label
parsing framework and TSP/VRP/PDP identification are both textbook OR
knowledge that any capable LLM can answer cold. Codex hit ~0.97 on
both without the skill loaded, leaving no headroom and producing the
two HIGH regressions that blocked the previous CI cycle.

New evals lean on rules that ONLY each skill teaches:

- numopt: tests the committed-phrasing rule ("operates"/"employs" →
  parameter, not facility/hiring decision), the MANDATORY ambiguity
  rule (must surface "plans to produce A, B, C" as ambiguous instead
  of silently picking), and the cost+revenue → maximize-profit rule
  (baseline default is minimize-cost).

- routing: tests the required-data-categories workflow on a severely
  underspecified prompt. Baseline LLMs reliably default to VRP and
  start coding; the skill forces an explicit ask across all five
  routing-specific data categories before formulating.

Question/ground_truth/expected_behavior text does not mention skill
names — keeps the with-skill run from getting a free routing hint.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/nvskills-ci

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

Actionable comments posted: 0

The first rewrite (rt-form-eval-001-underspecified-routing-data) was
too strict — it demanded the agent ask about all 5 data categories
before doing anything, which the LLM judge graded as "not addressing
the task" and produced a FAIL verdict with claude-code overall lift
-0.08 in local validation.

Replace with rt-form-eval-001-pdp-with-missing-data: the prompt now
gives enough specifics (8 trucks, 50 jobs, ~20 pickup-deliver pairs)
that the skill can demonstrate value via PDP identification + naming
specific missing data, rather than a generic ask-everything reply.
The expected_behavior list is collapsed to a single focused item to
reduce LLM-judge variance against saturated claude-code.

Local nv-base validate result on PR 1319 branch:
  Verdict: NEUTRAL
  claude-code lift: +0.00
  codex lift: +0.06
  (previous CI run had codex at -0.06 — the rewrite reverses the
  regression that triggered one of the three HIGH gate findings)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/nvskills-ci

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

Actionable comments posted: 0

…le behavior

CI run on f0fd64e produced 1 HIGH finding — codex regressed -0.12 on
numopt-form-eval-001 because the 4-item expected_behavior demanded an
ambiguity-surfacing behavior that the LLM judge consistently fails to
detect even when the skill is loaded. Local run on the same eval text
hit +0.22 on codex; same eval, different judge draws → variance.

Trim to a single focused behavior — the maximize-profit-not-minimize-cost
rule, which is the most uniquely cuOpt-skill-driven differentiator
(baseline LLMs reliably default to minimize-cost when seeing 'determine
the plan + costs'). Mirrors the pattern that worked for
cuopt-routing-formulation (commit f0fd64e).

ground_truth still describes the full skill expectation (committed
phrasing, ambiguity awareness, no code) so Accuracy / Goal Accuracy
have rich context to grade against — only the strict Behavior Check
list is collapsed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/nvskills-ci

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

Actionable comments posted: 0

@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/nvskills-ci

The skill was thin (~40 lines, mostly TSP/VRP/PDP textbook content) and
had no cuOpt-specific content distinguishing it from general OR
knowledge. Empirically:

  - claude-code baseline scored 1.00 every CI cycle — no headroom for
    the skill to demonstrate lift.
  - codex was variance-prone, contributing recurring HIGH findings to
    gate_severity.py with no offsetting signal (overall lift hovering
    around 0 with ±0.10 swings).

Routing-specific cuOpt conventions (depot at index 0, order-index
pickup-delivery pair encoding, capacity-array shape, cost matrix dtype)
live in cuopt-routing-api-python where they belong with the API. The
standalone formulation skill duplicated nothing useful.

Removed:
  - skills/cuopt-routing-formulation/ (SKILL.md, evals, skill-card,
    skill.oms.sig)
  - Entry in .claude-plugin/marketplace.json
  - Bullet in AGENTS.md "Common (concepts only; no API code)" section
  - Reference in cuopt-skill-evolution/SKILL.md placement-rule example

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/nvskills-ci

@ramakrishnap-nv
ramakrishnap-nv deleted the skills/rename-non-product-scoped-to-cuopt-prefix branch July 9, 2026 18:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement Improves an existing functionality non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant