Files
Moshe Abramovitch 99772d9192 fix(benchmarks): capture v3 provenance and block silent field loss
SkillEvaluator's report format changed in July 2026. It stopped emitting
`NVSkills-Eval profile` and `Pass threshold`, both of which the aggregator
reads, so those columns in benchmarks.json have been emptying one skill at a
time as each is re-evaluated: 0% null through June, 57% in July, 100% for
every skill evaluated in August. Nothing failed. The regeneration succeeded,
the schema stayed valid, --check passed, and the data quietly degraded for
six weeks before anyone noticed.

Neither field is recoverable from a v3 report. `profile` is gone entirely.
The only "50%" left is a glossary sentence that is byte-identical across
skills with 4, 5 and 18 tasks, so it is template prose rather than a
measurement — scraping it would stamp an unverified pass threshold on every
skill in the file whose purpose is recording provenance. Both stay null until
SkillEvaluator emits them as real fields; a NO_FABRICATION note records why.

What v3 does add is stronger provenance the parser was discarding:

  - evaluator_version   which build produced the score
  - dataset_digest      sha256 of the exact task set, unique per skill
  - validation_status   pipeline outcome for the run

Capturing these follows the existing multi-pattern idiom already used for
`tasks`, so v1/v2 reports are unaffected and simply leave them null.

The generic fix is null_rate_regressions(), which compares a regeneration
against the committed benchmarks.json and refuses to write when any field
lost values, counting only skills present in both so new additions cannot
false-fire. --allow-null-regressions lands a deliberate retirement without
requiring a code edit under pressure. Verified against the real catalog: it
does not fire today, it does fire when the July drift is replayed over 20
reports, and it flags the exact fields lost in PR #466.

Adds the first tests for .github/scripts (16 cases, two real BENCHMARK.md
fixtures, one per format). Confirmed no regression: every pre-existing field
is byte-identical across all 341 skills.

Also adds the SPDX header aggregate_benchmarks.py was missing; it was the
only .py in .github/scripts/ without one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Moshe Abramovitch <moshea@nvidia.com>
2026-08-20 15:00:15 -05:00

3.9 KiB

Evaluation Report

Evaluation of the cuopt-developer skill before publication through NVSkills-Eval.

This benchmark summarizes 3-Tier Evaluation from NVSkills-Eval results for the skill. The goal is to document whether the skill is safe, discoverable, effective, and useful for agents before it is published for broader workflow use.

Evaluation Summary

  • Skill: cuopt-developer
  • Evaluation date: 2026-06-26
  • NVSkills-Eval profile: external
  • Environment: astra-sandbox
  • Dataset: 3 evaluation tasks
  • Attempts per task: 1
  • Pass threshold: 50%
  • Overall verdict: PASS

Agents Used

  • claude-code
  • codex

Metrics Used

Reported benchmark dimensions:

  • Security: checks whether skill-assisted execution avoids unsafe behavior such as secret leakage, destructive commands, or unauthorized access.
  • Correctness: checks whether the agent follows the expected workflow and produces the correct final output.
  • Discoverability: checks whether the agent loads the skill when relevant and avoids using it when irrelevant.
  • Effectiveness: checks whether the agent performs measurably better with the skill than without it.
  • Efficiency: checks whether the agent uses fewer tokens and avoids redundant work.

Underlying evaluation signals used in this run:

  • security (Security): checks for unsafe operations, secret leakage, and unauthorized access.
  • skill_execution (Skill Execution): verifies that the agent loaded the expected skill and workflow.
  • skill_efficiency (Efficiency): checks routing quality, decoy avoidance, and redundant tool usage.
  • accuracy (Accuracy): grades final-answer correctness against the reference answer.
  • goal_accuracy (Goal Accuracy): checks whether the overall user task completed successfully.
  • behavior_check (Behavior Check): verifies expected behavior steps, including safety expectations.
  • token_efficiency (Token Efficiency): compares token usage with and without the skill.

Test Tasks

The benchmark dataset contained 3 evaluation tasks:

  • Positive tasks: 3 tasks where the skill was expected to activate.
  • Negative tasks: 0 tasks where no skill was expected.
  • Unlabeled tasks: 0 tasks where positive/negative intent could not be inferred.

Task composition is derived from the evaluation dataset when possible. Entries with expected_skill set are treated as positive skill-activation cases, while entries with expected_skill: null are treated as negative activation cases.

Results

Dimension Num claude-code codex
Security 3 100% (+0%) 100% (+0%)
Correctness 3 75% (+20%) 89% (+26%)
Discoverability 3 42% (+25%) 72% (+41%)
Effectiveness 3 95% (+40%) 90% (+29%)
Efficiency 3 48% (+22%) 69% (+34%)

Score values show skill-assisted performance. Values in parentheses show uplift versus the no-skill baseline when baseline data is available.

Tier 1: Static Validation Summary

Tier 1 validation passed with observations. NVSkills-Eval ran 1 checks and found 5 total findings.

Top findings:

  • MEDIUM SCHEMA/body_recommended_section: Missing recommended section: '## Instructions' (skills/cuopt-developer/SKILL.md)
  • MEDIUM SCHEMA/body_recommended_section: Missing recommended section: '## Examples' (skills/cuopt-developer/SKILL.md)
  • LOW SCHEMA/unexpected_file: Unexpected 'resources' in skill root (skills/cuopt-developer/resources)
  • LOW SCHEMA/unexpected_file: Unexpected 'benchmark' in skill root (skills/cuopt-developer/benchmark)
  • LOW SCHEMA/author_format: Author must be of the form 'Name email@host' (skills/cuopt-developer/SKILL.md)

Tier 2: Deduplication Summary

This tier was not run or did not produce findings in this report.

Publication Recommendation

The skill is suitable to proceed toward NVSkills-Eval publication based on this benchmark. Skill owners should keep this file with the skill and refresh it when the evaluation dataset, skill behavior, or target agents materially change.