Skip to content

Fix dotnet-test plugin timeout + skill activation issues - #875

Merged
Evangelink merged 9 commits into
mainfrom
dev/amauryleve/literate-disco
Jul 14, 2026
Merged

Fix dotnet-test plugin timeout + skill activation issues#875
Evangelink merged 9 commits into
mainfrom
dev/amauryleve/literate-disco

Conversation

@Evangelink

@Evangelink Evangelink commented Jul 9, 2026

Copy link
Copy Markdown
Member

Summary

Fixes dotnet-test eval activation/quality issues, verified with artifact-level /evaluate analysis across multiple runs.

Changes

  1. run-tests — activation fix (SKILL.md description + scenario prompts): run-tests systemically failed the skill_not_activated gate because "show me the exact dotnet test command" prompts let the model answer from its own knowledge without invoking the skill — even in the isolated arm, and often wrong on the SDK 8/9 ---separator vs SDK 10+ rule. Fix raises per-run activation probability:

    • Description now leads with an imperative trigger ("ALWAYS use when the user asks … wants the precise command, flags, or argument order") and names the model's blind spot ("the right syntax depends on the platform and SDK version and is easy to get wrong from memory"). Kept under the 1024-char description limit and 15000-char plugin skill-menu budget.
    • Prompts for the flaking scenarios now state the user needs the command correct for this project's specific platform/SDK — a natural framing that raises the stakes without naming the skill or leaking the answer.
    • Result: isolated-arm activation is now 100% (was ~12/15 failing); run-tests scenarios that previously never activated now pass. Residual misses are all iso=True / plug=False — plugin-arm menu competition at RUNS=3, not a description gap.
  2. run-tests — "Negative test" (two fixes): after activation was fixed it still failed, first on a brittle output_not_contains: "--report-trx" assertion that penalized the better skilled answer (which correctly educates "use --logger trx, not --report-trx") — narrowed to output_not_matches: "dotnet test[^\r\n]*--report-trx" so only an actual wrong command is rejected; then on a pure efficiency penalty from expect_tools: ["bash"] forcing execution against an already-perfect baseline — dropped, since this is a command-recommendation test whose assertions validate text, not execution.

  3. writing-mstest-tests — "Fix swapped Assert.AreEqual": removed the expect_activation: false waiver (per review) and made the scenario skill-dependent — prompt now asks which analyzer catches this and how to enable it, with a MSTEST0017 assertion + rubric items (SKILL.md Step 8). Restores activation validation and adds a real quality edge over baseline.

  4. filter-syntax/eval.yaml — removed: disable-model-invocation/user-invocable:false reference skill that can never activate or show a delta; peer reference skills have no eval and its coverage lives in run-tests.

Residual (structural, RUNS=3)

Remaining reds are uniformly iso=True / plug=False plugin-arm menu-competition variance (footnote CVs up to ~1900%, harness advises --runs 5) plus efficiency penalties on runs where the baseline is already strong. The isolated-arm activation problem is fully solved; the plugin-arm residual needs a maintainer-level lever (PR-eval --runs 5, or reduced plugin-menu competition) that's out of scope for eval-file edits. All review threads addressed and resolved.

Activation:
- filter-syntax eval: both scenarios set expect_activation: false. The skill
  is a reference skill (disable-model-invocation/user-invocable false) loaded
  by run-tests/mtp-hot-reload; it can never self-activate — this was an eval
  mis-spec, not a skill bug.
- writing-mstest-tests 'Fix swapped Assert.AreEqual arguments': expect_activation
  false. The rubric requires diagnosing the root cause unaided, so no invocation
  is expected (notActivated 11/11 both arms).
- test-smell-detection: relax the over-restrictive 'INVOKE ONLY when explicitly
  asked for the testsmells.org catalog' guidance so nuanced named-smell reviews
  with justified severity also activate (both-arm notActivated gap). Funded
  within the 15k skill-menu budget by compressing redundant framework
  parentheticals to the compact style already used by sibling skills.

Timeout:
- run-tests 'Filter xUnit v3 tests by class pattern and trait using query filter
  language': raise 240 -> 360 (observed peak ~178s, closest to its cap).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 9, 2026 12:52
@Evangelink

Copy link
Copy Markdown
Member Author

/evaluate

Copilot AI 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.

Pull request overview

This PR updates dotnet-test plugin evaluation specs and one skill description to address persistent eval timeout and skill-activation failures, aligning expectations with skills that cannot (or should not) self-activate and increasing a scenario timeout headroom.

Changes:

  • Mark filter-syntax scenarios as expect_activation: false because the skill is non-invocable/reference-only.
  • Raise the run-tests timeout for the xUnit v3 query-filter scenario from 240s to 360s.
  • Broaden test-smell-detection’s invocation description to include suite audits that require named smell classification with research-backed severity.
Show a summary per file
File Description
tests/dotnet-test/writing-mstest-tests/eval.yaml Adds an expect_activation override for one scenario (currently risks masking a real activation regression).
tests/dotnet-test/run-tests/eval.yaml Increases timeout for a long-running query-filter scenario.
tests/dotnet-test/filter-syntax/eval.yaml Updates scenarios to not expect activation for a reference/non-invocable skill.
plugins/dotnet-test/skills/test-smell-detection/SKILL.md Adjusts description to allow activation for named-smell audit requests while keeping boundaries vs. pragmatic audits.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 4/4 changed files
  • Comments generated: 1

Comment thread tests/dotnet-test/writing-mstest-tests/eval.yaml Outdated
@github-actions github-actions Bot added the waiting-on-author PR state label label Jul 9, 2026
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

👋 @Evangelink — this PR has 1 unresolved review thread(s). When you're ready, please address the feedback and push an update; the triage bot will pick up the next state automatically. (Add the no-stale label to silence further pings.)

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
filter-syntax Filter xUnit v3 tests by trait and show how to tag them 2.0/5 → 2.0/5 ℹ️ not activated (expected) 🟡 0.20 [1]
filter-syntax Combine an xUnit v3 class pattern and a trait in one query filter 1.0/5 → 1.0/5 ℹ️ not activated (expected) 🟡 0.20 [2]
run-tests Run tests in a VSTest MSTest project 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash / ⚠️ NOT ACTIVATED ✅ 0.17 [3]
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.17
run-tests Run tests with blame-hang on MTP project (SDK 10) 2.0/5 → 4.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill ✅ 0.17
run-tests Run tests on a specific TFM with TRX in a multi-TFM MTP project (SDK 9) 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill ✅ 0.17 [4]
run-tests Filter MSTest tests by category on VSTest 4.7/5 → 4.7/5 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill, glob, bash ✅ 0.17 [5]
run-tests Filter NUnit tests by class name on VSTest 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view, bash / ⚠️ NOT ACTIVATED ✅ 0.17
run-tests Filter xUnit v3 tests by class on MTP 1.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view ✅ 0.17 [6]
run-tests Filter xUnit v3 tests by trait on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ⚠️ NOT ACTIVATED ✅ 0.17 [7]
run-tests Filter xUnit v3 tests by class pattern and trait using query filter language 1.0/5 → 1.0/5 ⚠️ NOT ACTIVATED ✅ 0.17 [8]
run-tests Filter TUnit tests by class using treenode-filter 2.3/5 → 4.3/5 🟢 ⚠️ NOT ACTIVATED ✅ 0.17 [9]
run-tests Combine multiple filter criteria on VSTest MSTest 4.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, report_intent, view ✅ 0.17 [10]
run-tests MTP project on SDK 9 must use -- separator for args 1.0/5 → 3.0/5 🟢 ⚠️ NOT ACTIVATED ✅ 0.17 [11]
run-tests MTP project on SDK 10 passes args directly 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.17 [12]
run-tests Detect test platform from Directory.Build.props 1.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.17 [13]
run-tests Negative test: do not use MTP syntax for a VSTest project 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ⚠️ NOT ACTIVATED ✅ 0.17 [14]
test-smell-detection Detect multiple test smells in order processing test suite 3.3/5 → 5.0/5 🟢 ✅ test-smell-detection; tools: skill 🟡 0.42
test-smell-detection Recognize well-written tests with no significant smells 4.3/5 → 5.0/5 🟢 ✅ test-smell-detection; tools: skill 🟡 0.42 [15]
test-smell-detection Recognize integration tests and avoid false positives for external resources 5.0/5 → 5.0/5 ✅ test-smell-detection; tools: skill 🟡 0.42 [16]
test-smell-detection Decline request to write new tests from scratch 5.0/5 → 4.3/5 🔴 ℹ️ not activated (expected) 🟡 0.42
test-smell-detection Polyglot: detect canonical test smells in a JUnit/Java Catalog suite 5.0/5 → 5.0/5 ✅ test-smell-detection; tools: skill 🟡 0.42 [17]
test-smell-detection Distinguish reasoned skips, spare obvious numbers, justify severity 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED 🟡 0.42 [18]
writing-mstest-tests Write unit tests for a service class 4.3/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill, glob / ✅ writing-mstest-tests; tools: skill 🟡 0.31 [19]
writing-mstest-tests Write data-driven tests for a calculator 3.3/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill, view, glob 🟡 0.31 [20]
writing-mstest-tests Write async tests with cancellation 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.31
writing-mstest-tests Fix swapped Assert.AreEqual arguments 5.0/5 → 5.0/5 ℹ️ not activated (expected) 🟡 0.31 [21]
writing-mstest-tests Modernize legacy test patterns 4.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.31 [22]
writing-mstest-tests Replace ExpectedException with Assert.Throws 3.3/5 → 3.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.31 [23]
writing-mstest-tests Use proper collection assertions 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.31
writing-mstest-tests Use proper type assertions instead of casts 3.7/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.31 [24]
writing-mstest-tests Set up test lifecycle correctly 2.7/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.31 [25]
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.31 [26]
writing-mstest-tests Use string assertions for format validation 4.0/5 → 4.0/5 ✅ writing-mstest-tests; tools: skill, view, glob, bash, edit / ✅ writing-mstest-tests; tools: skill, bash, edit, view, glob 🟡 0.31 [27]
writing-mstest-tests Use comparison assertions for boundary testing 2.7/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.31
writing-mstest-tests Write tests with collection, null, and reference assertions 3.3/5 → 3.3/5 ✅ writing-mstest-tests; tools: glob, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.31 [28]
writing-mstest-tests Configure conditional execution, retry, and cleanup 2.3/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.31
writing-mstest-tests Configure test parallelization and MSTest.Sdk project 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.31

[1] ⚠️ High run-to-run variance (CV=129%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -12.1% due to: judgment
[2] ⚠️ High run-to-run variance (CV=386%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -0.1% due to: efficiency metrics
[3] (Plugin) Quality unchanged but weighted score is -2.1% due to: tokens (25234 → 34656)
[4] (Plugin) Quality unchanged but weighted score is -8.3% due to: tokens (25466 → 62941), tool calls (2 → 4), time (13.0s → 17.2s)
[5] ⚠️ High run-to-run variance (CV=93%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -0.4% due to: efficiency metrics
[6] ⚠️ High run-to-run variance (CV=92%) — consider re-running with --runs 5
[7] ⚠️ High run-to-run variance (CV=695%) — consider re-running with --runs 5
[8] ⚠️ High run-to-run variance (CV=60%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -1.8% due to: tokens (12664 → 17319)
[9] ⚠️ High run-to-run variance (CV=174%) — consider re-running with --runs 5. (Isolated) Quality improved but weighted score is -13.7% due to: judgment, tool calls (2 → 3)
[10] ⚠️ High run-to-run variance (CV=257%) — consider re-running with --runs 5
[11] ⚠️ High run-to-run variance (CV=103%) — consider re-running with --runs 5. (Plugin) Quality improved but weighted score is -4.7% due to: tokens (25149 → 40653), tool calls (2 → 3)
[12] ⚠️ High run-to-run variance (CV=91%) — consider re-running with --runs 5
[13] ⚠️ High run-to-run variance (CV=3000%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -1.7% due to: tokens (49339 → 66989)
[14] ⚠️ High run-to-run variance (CV=326%) — consider re-running with --runs 5. (Plugin) Quality improved but weighted score is -1.9% due to: tokens (25545 → 35067)
[15] ⚠️ High run-to-run variance (CV=88%) — consider re-running with --runs 5
[16] (Plugin) Quality unchanged but weighted score is -7.0% due to: tokens (40878 → 101569), tool calls (4 → 7), time (35.1s → 50.7s)
[17] ⚠️ High run-to-run variance (CV=112%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -5.0% due to: tokens (28078 → 47497), quality
[18] ⚠️ High run-to-run variance (CV=114%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -12.1% due to: judgment
[19] ⚠️ High run-to-run variance (CV=523%) — consider re-running with --runs 5
[20] ⚠️ High run-to-run variance (CV=152%) — consider re-running with --runs 5
[21] ⚠️ High run-to-run variance (CV=79%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -0.8% due to: tokens (12881 → 17565)
[22] ⚠️ High run-to-run variance (CV=308%) — consider re-running with --runs 5. (Isolated) Quality improved but weighted score is -0.6% due to: tokens (158448 → 218432)
[23] ⚠️ High run-to-run variance (CV=336%) — consider re-running with --runs 5
[24] ⚠️ High run-to-run variance (CV=87%) — consider re-running with --runs 5
[25] ⚠️ High run-to-run variance (CV=57%) — consider re-running with --runs 5
[26] ⚠️ High run-to-run variance (CV=610%) — consider re-running with --runs 5
[27] ⚠️ High run-to-run variance (CV=155%) — consider re-running with --runs 5
[28] ⚠️ High run-to-run variance (CV=179%) — consider re-running with --runs 5

Model: claude-opus-4.6 | Judge: claude-opus-4.6

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 875 in dotnet/skills, download eval artifacts with gh run download 29019511076 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/02b876f825d212b6dcdfe3f69107b31584435234/eng/skill-validator/src/docs/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

…lter-syntax eval

Log-driven iteration on the eval results (run 29019511076):

Priority 1 - regression fix: revert the test-smell-detection description
broadening. results.json shows it reliably regressed 'Decline request to
write new tests from scratch' (perRunScores [-0.19,-0.10,-0.22]; plugin
overallJudgment -0.28, quality 5.0 baseline -> 4.3 skilled) while NOT fixing
its target 'Distinguish reasoned skips' (isolated 5.0 vs 5.0 tie failing on
judge position-bias, CV=114% - not description-fixable). Net-negative, so
restore the pristine description.

Priority 3 - remove the structurally-untestable filter-syntax eval. filter-syntax
is disable-model-invocation/user-invocable:false, so it can never activate and
can never show a skilled-vs-baseline delta - both scenarios fail by construction
regardless of expect_activation. Peer reference skills (platform-detection,
code-testing-extensions) have NO eval.yaml; filter-syntax was the lone exception.
Its filter functionality is already covered by run-tests scenarios (which load
filter-syntax as an additional_required_skill). Following precedent, remove the
eval rather than leave two permanently-red cases.

Kept from the prior commit: run-tests query-filter timeout 240->360 (harmless
hard-cap headroom) and writing-mstest 'Fix swapped Assert.AreEqual'
expect_activation:false (documents the unaided-by-design scenario and prevents
a spurious hard activation failure).

Not done - plugin-arm sibling deflections: results.json shows every failing
plugin-arm scenario has detectedSkills=[] (NO sibling captured the turn), the
rendered menu is under the 15k budget (descriptions are shown), and the verdict
failures are dominated by high-variance efficiency noise (CV 60-3000%, several
with quality improved). Per docs/InvestigatingResults.md there is no captor to
deflect and description edits would not help; with zero budget headroom, adding
speculative deflections is unjustified.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 9, 2026 16:30
@Evangelink

Copy link
Copy Markdown
Member Author

/evaluate

Copilot AI 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.

Copilot's findings

  • Files reviewed: 3/3 changed files
  • Comments generated: 0 new

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
run-tests Run tests in a VSTest MSTest project 3.3/5 → 4.7/5 🟢 ✅ run-tests; tools: skill, bash, glob / ⚠️ NOT ACTIVATED 🟡 0.27
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill 🟡 0.27
run-tests Run tests with blame-hang on MTP project (SDK 10) 2.0/5 → 4.7/5 🟢 ✅ run-tests; tools: skill, report_intent, view 🟡 0.27 [1]
run-tests Run tests on a specific TFM with TRX in a multi-TFM MTP project (SDK 9) 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view 🟡 0.27
run-tests Filter MSTest tests by category on VSTest 3.0/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: report_intent, skill, view, glob 🟡 0.27 [2]
run-tests Filter NUnit tests by class name on VSTest 3.0/5 → 4.7/5 🟢 ✅ run-tests; tools: report_intent, skill, view, bash, glob / ⚠️ NOT ACTIVATED 🟡 0.27
run-tests Filter xUnit v3 tests by class on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view, bash / ✅ run-tests; tools: report_intent, skill, view 🟡 0.27 [3]
run-tests Filter xUnit v3 tests by trait on MTP 2.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill 🟡 0.27 [4]
run-tests Filter xUnit v3 tests by class pattern and trait using query filter language 1.0/5 → 4.3/5 🟢 ✅ run-tests; tools: skill, bash, stop_bash, report_intent, view, web_fetch / ⚠️ NOT ACTIVATED 🟡 0.27 [5]
run-tests Filter TUnit tests by class using treenode-filter 2.3/5 → 4.7/5 🟢 ✅ run-tests; tools: skill, bash / ✅ run-tests; tools: skill 🟡 0.27
run-tests Combine multiple filter criteria on VSTest MSTest 4.0/5 → 4.7/5 🟢 ✅ run-tests; tools: skill, bash, glob / ⚠️ NOT ACTIVATED 🟡 0.27 [6]
run-tests MTP project on SDK 9 must use -- separator for args 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill 🟡 0.27
run-tests MTP project on SDK 10 passes args directly 1.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash / ⚠️ NOT ACTIVATED 🟡 0.27
run-tests Detect test platform from Directory.Build.props 2.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill 🟡 0.27
run-tests Negative test: do not use MTP syntax for a VSTest project 4.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view, glob 🟡 0.27 [7]
writing-mstest-tests Write unit tests for a service class 3.0/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill, edit, glob / ✅ writing-mstest-tests; tools: glob, skill, edit 🟡 0.37 [8]
writing-mstest-tests Write data-driven tests for a calculator 3.3/5 → 3.3/5 ✅ writing-mstest-tests; tools: skill 🟡 0.37 [9]
writing-mstest-tests Write async tests with cancellation 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.37 [10]
writing-mstest-tests Fix swapped Assert.AreEqual arguments 4.3/5 → 5.0/5 🟢 ℹ️ not activated (expected) 🟡 0.37 [11]
writing-mstest-tests Modernize legacy test patterns 3.7/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.37 [12]
writing-mstest-tests Replace ExpectedException with Assert.Throws 2.7/5 → 3.0/5 🟢 ⚠️ NOT ACTIVATED 🟡 0.37 [13]
writing-mstest-tests Use proper collection assertions 2.7/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.37
writing-mstest-tests Use proper type assertions instead of casts 3.3/5 → 3.0/5 🔴 ✅ writing-mstest-tests; tools: report_intent, skill / ⚠️ NOT ACTIVATED 🟡 0.37 [14]
writing-mstest-tests Set up test lifecycle correctly 2.0/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.37
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.37 [15]
writing-mstest-tests Use string assertions for format validation 3.3/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill, create, view, glob, bash, edit / ✅ writing-mstest-tests; tools: skill, create, view, bash, edit 🟡 0.37 [16]
writing-mstest-tests Use comparison assertions for boundary testing 3.0/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.37
writing-mstest-tests Write tests with collection, null, and reference assertions 3.3/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: glob, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.37
writing-mstest-tests Configure conditional execution, retry, and cleanup 2.3/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill, report_intent / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.37
writing-mstest-tests Configure test parallelization and MSTest.Sdk project 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.37

[1] ⚠️ High run-to-run variance (CV=58%) — consider re-running with --runs 5
[2] ⚠️ High run-to-run variance (CV=65%) — consider re-running with --runs 5
[3] ⚠️ High run-to-run variance (CV=195%) — consider re-running with --runs 5. (Plugin) Quality improved but weighted score is -9.3% due to: tokens (12453 → 32406), tool calls (0 → 1), time (4.5s → 7.7s)
[4] ⚠️ High run-to-run variance (CV=56%) — consider re-running with --runs 5
[5] ⚠️ High run-to-run variance (CV=184%) — consider re-running with --runs 5
[6] ⚠️ High run-to-run variance (CV=3813%) — consider re-running with --runs 5
[7] ⚠️ High run-to-run variance (CV=61%) — consider re-running with --runs 5
[8] ⚠️ High run-to-run variance (CV=131%) — consider re-running with --runs 5
[9] ⚠️ High run-to-run variance (CV=143%) — consider re-running with --runs 5
[10] ⚠️ High run-to-run variance (CV=61%) — consider re-running with --runs 5
[11] (Plugin) Quality unchanged but weighted score is -1.7% due to: tokens (12705 → 17440)
[12] ⚠️ High run-to-run variance (CV=259%) — consider re-running with --runs 5
[13] ⚠️ High run-to-run variance (CV=60%) — consider re-running with --runs 5
[14] ⚠️ High run-to-run variance (CV=116%) — consider re-running with --runs 5
[15] ⚠️ High run-to-run variance (CV=6361%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -13.6% due to: judgment, tokens (12807 → 17434)
[16] ⚠️ High run-to-run variance (CV=56%) — consider re-running with --runs 5

Model: claude-opus-4.6 | Judge: claude-opus-4.6

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 875 in dotnet/skills, download eval artifacts with gh run download 29033692175 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/3b1cf9897353f458a2f4b34802e2cbfc14e92e4b/eng/skill-validator/src/docs/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

Copilot AI review requested due to automatic review settings July 13, 2026 13:17
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Skill Coverage Report

Plugin Skill Covered Coverage
dotnet-test run-tests 16/16 100%
dotnet-test filter-syntax 0/1 0%
dotnet-test writing-mstest-tests 45/45 100%
Uncovered: dotnet-test/filter-syntax
  • [CodePattern] [trait] (line 114)

Copilot AI 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.

Copilot's findings

  • Files reviewed: 3/3 changed files
  • Comments generated: 0 new

@Evangelink

Copy link
Copy Markdown
Member Author

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
run-tests Run tests in a VSTest MSTest project 3.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash / ⚠️ NOT ACTIVATED ✅ 0.12 [1]
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.12
run-tests Run tests with blame-hang on MTP project (SDK 10) 3.0/5 → 3.0/5 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill ✅ 0.12 [2]
run-tests Run tests on a specific TFM with TRX in a multi-TFM MTP project (SDK 9) 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill ✅ 0.12 [3]
run-tests Filter MSTest tests by category on VSTest 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill, glob, report_intent, view ✅ 0.12 [4]
run-tests Filter NUnit tests by class name on VSTest 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view, bash / ⚠️ NOT ACTIVATED ✅ 0.12 [5]
run-tests Filter xUnit v3 tests by class on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view ✅ 0.12 [6]
run-tests Filter xUnit v3 tests by trait on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ⚠️ NOT ACTIVATED ✅ 0.12 [7]
run-tests Filter xUnit v3 tests by class pattern and trait using query filter language 1.0/5 → 2.3/5 ⏰ 🟢 ✅ run-tests; tools: report_intent, skill, view, bash, web_fetch / ⚠️ NOT ACTIVATED ✅ 0.12 [8]
run-tests Filter TUnit tests by class using treenode-filter 2.3/5 → 3.3/5 🟢 ⚠️ NOT ACTIVATED ✅ 0.12 [9]
run-tests Combine multiple filter criteria on VSTest MSTest 4.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash / ✅ run-tests; tools: skill ✅ 0.12 [10]
run-tests MTP project on SDK 9 must use -- separator for args 1.0/5 → 3.0/5 🟢 ⚠️ NOT ACTIVATED ✅ 0.12 [11]
run-tests MTP project on SDK 10 passes args directly 2.0/5 → 4.7/5 🟢 ✅ run-tests; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.12 [12]
run-tests Detect test platform from Directory.Build.props 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.12
run-tests Negative test: do not use MTP syntax for a VSTest project 4.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view, glob / ⚠️ NOT ACTIVATED ✅ 0.12 [13]
writing-mstest-tests Write unit tests for a service class 3.7/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill, glob 🟡 0.36 [14]
writing-mstest-tests Write data-driven tests for a calculator 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill, glob, view / ✅ writing-mstest-tests; tools: report_intent, skill, view, glob 🟡 0.36
writing-mstest-tests Write async tests with cancellation 3.3/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.36
writing-mstest-tests Fix swapped Assert.AreEqual arguments 5.0/5 → 5.0/5 ℹ️ not activated (expected) 🟡 0.36 [15]
writing-mstest-tests Modernize legacy test patterns 2.0/5 → 2.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.36 [16]
writing-mstest-tests Replace ExpectedException with Assert.Throws 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.36 [17]
writing-mstest-tests Use proper collection assertions 2.7/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.36 [18]
writing-mstest-tests Use proper type assertions instead of casts 4.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.36 [19]
writing-mstest-tests Set up test lifecycle correctly 2.0/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill, view / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.36
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.36 [20]
writing-mstest-tests Use string assertions for format validation 3.7/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill, create / ✅ writing-mstest-tests; tools: skill, create, edit, view, glob, bash 🟡 0.36 [21]
writing-mstest-tests Use comparison assertions for boundary testing 2.7/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.36
writing-mstest-tests Write tests with collection, null, and reference assertions 3.7/5 → 3.7/5 ✅ writing-mstest-tests; tools: glob, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.36
writing-mstest-tests Configure conditional execution, retry, and cleanup 2.7/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.36
writing-mstest-tests Configure test parallelization and MSTest.Sdk project 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.36

[1] ⚠️ High run-to-run variance (CV=114%) — consider re-running with --runs 5
[2] ⚠️ High run-to-run variance (CV=531%) — consider re-running with --runs 5
[3] (Plugin) Quality unchanged but weighted score is -6.4% due to: tokens (25481 → 55337), tool calls (2 → 3)
[4] (Plugin) Quality unchanged but weighted score is -9.5% due to: tokens (21275 → 63352), tool calls (2 → 5), time (12.1s → 21.6s)
[5] ⚠️ High run-to-run variance (CV=98%) — consider re-running with --runs 5
[6] ⚠️ High run-to-run variance (CV=66%) — consider re-running with --runs 5
[7] (Plugin) Quality unchanged but weighted score is -4.4% due to: tokens (31972 → 49297), tool calls (2 → 3)
[8] ⚠️ High run-to-run variance (CV=217%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -11.8% due to: judgment, quality
[9] ⚠️ High run-to-run variance (CV=766%) — consider re-running with --runs 5
[10] (Plugin) Quality improved but weighted score is -4.0% due to: tokens (25568 → 63254), tool calls (2 → 4), time (10.6s → 15.9s)
[11] ⚠️ High run-to-run variance (CV=73%) — consider re-running with --runs 5
[12] ⚠️ High run-to-run variance (CV=90%) — consider re-running with --runs 5
[13] ⚠️ High run-to-run variance (CV=155%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -1.9% due to: tokens (25575 → 35066)
[14] ⚠️ High run-to-run variance (CV=562%) — consider re-running with --runs 5
[15] (Plugin) Quality unchanged but weighted score is -1.7% due to: tokens (12850 → 17638)
[16] ⚠️ High run-to-run variance (CV=730%) — consider re-running with --runs 5
[17] ⚠️ High run-to-run variance (CV=126%) — consider re-running with --runs 5
[18] ⚠️ High run-to-run variance (CV=266%) — consider re-running with --runs 5
[19] ⚠️ High run-to-run variance (CV=65%) — consider re-running with --runs 5
[20] ⚠️ High run-to-run variance (CV=336%) — consider re-running with --runs 5. (Plugin) Quality improved but weighted score is -24.2% due to: judgment, tokens (12817 → 32443), quality, tool calls (0 → 1), time (8.0s → 10.2s)
[21] ⚠️ High run-to-run variance (CV=291%) — consider re-running with --runs 5. (Isolated) Quality improved but weighted score is -33.5% due to: judgment, quality

timeout — run(s) hit the (360s) scenario timeout limit; scoring may be impacted by aborting model execution before it could produce its full output (increase via timeout in eval.yaml)

Model: claude-opus-4.6 | Judge: claude-opus-4.6

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 875 in dotnet/skills, download eval artifacts with gh run download 29253857976 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/3d6f7a9bffc0b73672edf35c9bd7b1f183194a63/eng/skill-validator/src/docs/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

@github-actions

Copy link
Copy Markdown
Contributor

👋 @Evangelink — this PR has 1 unresolved review thread(s). When you're ready, please address the feedback and push an update; the triage bot will pick up the next state automatically. (Add the no-stale label to silence further pings.)

…vation

Root cause of run-tests plugin+isolated non-activation (skill_not_activated gate):
every run-tests scenario is a 'show me the exact command' knowledge question, yet
each carried expect_tools: [bash] — which is an ASSERTION that bash was used. That
actively forced the model into empirical exploration (dotnet test --help, trial
runs, web_fetch) instead of consulting the run-tests skill, and a clean
knowledge-only answer would FAIL the assertion. Evidence from run 29253857976:
run-tests failed to activate even in the ISOLATED arm (where it is the only skill
loaded) on scenarios as easy as base=1.0 — proof the model was bypassing the skill
via bash rather than not needing it. The forced bash use also drove the token/tool/
time overhead that produced the negative efficiency scores, and one scenario hit
the 360s timeout doing web exploration.

Fix: convert all 15 run-tests scenarios from expect_tools: [bash] to
reject_tools: [bash, edit, create]. These scenarios only assert on the recommended
command text (output_matches) — none run tests (no run_command_and_assert, no file
assertions) — and the model can still inspect fixtures via view/glob. Forbidding
bash makes them pure-knowledge comparisons, so the model must reason from
knowledge and reaches for the run-tests skill (improving activation in both arms),
while removing the tool-induced overhead and timeout risk. This is stricter, not
weaker, gating and matches docs/InvestigatingResults.md sec.8.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 13, 2026 14:11
@Evangelink

Copy link
Copy Markdown
Member Author

/evaluate

Copilot AI 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.

Copilot's findings

  • Files reviewed: 3/3 changed files
  • Comments generated: 1

Comment thread tests/dotnet-test/run-tests/eval.yaml
@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
run-tests Run tests in a VSTest MSTest project 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ⚠️ NOT ACTIVATED ✅ 0.12 [1]
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.12
run-tests Run tests with blame-hang on MTP project (SDK 10) 2.3/5 → 3.7/5 🟢 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill ✅ 0.12 [2]
run-tests Run tests on a specific TFM with TRX in a multi-TFM MTP project (SDK 9) 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill ✅ 0.12 [3]
run-tests Filter MSTest tests by category on VSTest 4.3/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: report_intent, skill, view, glob, bash ✅ 0.12 [4]
run-tests Filter NUnit tests by class name on VSTest 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view, bash / ⚠️ NOT ACTIVATED ✅ 0.12
run-tests Filter xUnit v3 tests by class on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view ✅ 0.12
run-tests Filter xUnit v3 tests by trait on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ⚠️ NOT ACTIVATED ✅ 0.12 [5]
run-tests Filter xUnit v3 tests by class pattern and trait using query filter language 1.0/5 → 4.3/5 🟢 ✅ run-tests; tools: report_intent, view, skill, bash, web_fetch / ⚠️ NOT ACTIVATED ✅ 0.12 [6]
run-tests Filter TUnit tests by class using treenode-filter 3.0/5 → 4.0/5 🟢 ⚠️ NOT ACTIVATED ✅ 0.12 [7]
run-tests Combine multiple filter criteria on VSTest MSTest 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, report_intent, view, bash / ✅ run-tests; tools: report_intent, skill, view ✅ 0.12 [8]
run-tests MTP project on SDK 9 must use -- separator for args 1.7/5 → 3.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ run-tests; tools: skill ✅ 0.12 [9]
run-tests MTP project on SDK 10 passes args directly 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.12
run-tests Detect test platform from Directory.Build.props 1.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.12 [10]
run-tests Negative test: do not use MTP syntax for a VSTest project 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ⚠️ NOT ACTIVATED ✅ 0.12 [11]
writing-mstest-tests Write unit tests for a service class 4.3/5 → 4.0/5 🔴 ✅ writing-mstest-tests; tools: skill, glob 🟡 0.34 [12]
writing-mstest-tests Write data-driven tests for a calculator 3.7/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.34 [13]
writing-mstest-tests Write async tests with cancellation 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.34
writing-mstest-tests Fix swapped Assert.AreEqual arguments 4.7/5 → 5.0/5 🟢 ℹ️ not activated (expected) 🟡 0.34 [14]
writing-mstest-tests Modernize legacy test patterns 4.3/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.34 [15]
writing-mstest-tests Replace ExpectedException with Assert.Throws 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.34
writing-mstest-tests Use proper collection assertions 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.34 [16]
writing-mstest-tests Use proper type assertions instead of casts 4.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.34
writing-mstest-tests Set up test lifecycle correctly 2.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.34
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill, report_intent / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.34 [17]
writing-mstest-tests Use string assertions for format validation 4.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill, edit / ✅ writing-mstest-tests; tools: skill, view, edit, glob, bash 🟡 0.34 [18]
writing-mstest-tests Use comparison assertions for boundary testing 2.3/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.34
writing-mstest-tests Write tests with collection, null, and reference assertions 4.0/5 → 4.0/5 ✅ writing-mstest-tests; tools: skill, glob / ✅ writing-mstest-tests; tools: glob, skill 🟡 0.34 [19]
writing-mstest-tests Configure conditional execution, retry, and cleanup 3.0/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.34
writing-mstest-tests Configure test parallelization and MSTest.Sdk project 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.34

[1] (Plugin) Quality unchanged but weighted score is -8.0% due to: quality, tokens (25248 → 34688), time (10.9s → 14.4s)
[2] ⚠️ High run-to-run variance (CV=137%) — consider re-running with --runs 5
[3] (Plugin) Quality unchanged but weighted score is -8.4% due to: tokens (25484 → 62967), tool calls (2 → 4), time (14.5s → 19.5s)
[4] ⚠️ High run-to-run variance (CV=962%) — consider re-running with --runs 5
[5] ⚠️ High run-to-run variance (CV=164%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -1.7% due to: tokens (39150 → 52105)
[6] ⚠️ High run-to-run variance (CV=138%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -16.4% due to: judgment, quality, tokens (12646 → 17330)
[7] ⚠️ High run-to-run variance (CV=384%) — consider re-running with --runs 5
[8] ⚠️ High run-to-run variance (CV=548%) — consider re-running with --runs 5
[9] ⚠️ High run-to-run variance (CV=128%) — consider re-running with --runs 5
[10] ⚠️ High run-to-run variance (CV=440%) — consider re-running with --runs 5
[11] ⚠️ High run-to-run variance (CV=111%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -1.9% due to: tokens (25584 → 35059)
[12] ⚠️ High run-to-run variance (CV=320%) — consider re-running with --runs 5
[13] ⚠️ High run-to-run variance (CV=77%) — consider re-running with --runs 5
[14] ⚠️ High run-to-run variance (CV=36252%) — consider re-running with --runs 5
[15] ⚠️ High run-to-run variance (CV=310%) — consider re-running with --runs 5. (Plugin) Quality dropped but weighted score is +12.5% due to: efficiency metrics
[16] ⚠️ High run-to-run variance (CV=1675%) — consider re-running with --runs 5. (Plugin) Quality dropped but weighted score is +17.2% due to: time (12.3s → 9.3s)
[17] ⚠️ High run-to-run variance (CV=3687%) — consider re-running with --runs 5
[18] ⚠️ High run-to-run variance (CV=54%) — consider re-running with --runs 5
[19] (Plugin) Quality dropped but weighted score is +4.8% due to: completion (✗ → ✓)

Model: claude-opus-4.6 | Judge: claude-opus-4.6

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 875 in dotnet/skills, download eval artifacts with gh run download 29256920057 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/d1b5a0d9ff0d44504899b80f58da8bc1ef3e2f87/eng/skill-validator/src/docs/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

The expect_tools->reject_tools flip was based on a wrong assumption: reject_tools
is a POST-HOC scoring assertion only (AssertionEvaluator/BaselineStore), it does
NOT remove bash from the agent toolset, so the agent kept using bash and skill
activation was unchanged (12 activation-fail arms before AND after, runs
29253857976 vs 29256920057). Reverting to keep the PR minimal and avoid adding
failing assertions that don't serve the activation goal.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 13, 2026 14:50
Copilot AI review requested due to automatic review settings July 14, 2026 07:42

Copilot AI 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.

Copilot's findings

  • Files reviewed: 2/2 changed files
  • Comments generated: 2

Comment thread tests/dotnet-test/writing-mstest-tests/eval.yaml
Comment thread tests/dotnet-test/writing-mstest-tests/eval.yaml
Radical fix for run-tests' systemic activation-gate failures. Root cause from
artifact analysis: these are 'show me the exact dotnet test command' prompts, so
the model answers directly from its own knowledge without invoking run-tests —
even in the ISOLATED arm where run-tests is the only skill loaded (proving it is
prompt/description-trigger driven, not just plugin-menu competition). It often
answers WRONG on the subtle SDK 8/9 '--' separator vs SDK 10+ direct-args rule
(baseline 1.0-1.7) yet still does not reach for the skill. At ~70% per-run
activation the strict '.Any(3 runs) in BOTH arms' gate flakes red.

Two-pronged fix to raise per-run activation probability:
1. run-tests description: lead with an imperative trigger ('ALWAYS use when the
   user asks ... wants the precise command, flags, or argument order') and name
   the model's blind spot ('the right syntax depends on the platform and SDK
   version and is easy to get wrong from memory'). This signals the model should
   consult rather than guess, and is more trigger-matched for the plugin arm.
   Kept under the 1024-char description limit and the 15000-char plugin skill-menu
   budget (verified: skill-validator check passes).
2. The four currently-flaking scenario prompts now state the user needs the
   command to be correct for THIS project's specific test platform and SDK
   version (a natural need that raises the stakes) without naming the skill or
   leaking the answer — the model must still detect the platform and know the
   version-specific syntax.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 14, 2026 07:52
@Evangelink

Copy link
Copy Markdown
Member Author

/evaluate

Copilot AI 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.

Copilot's findings

  • Files reviewed: 4/4 changed files
  • Comments generated: 0 new

@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
run-tests Run tests in a VSTest MSTest project 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob ✅ 0.13
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.13
run-tests Run tests with blame-hang on MTP project (SDK 10) 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.13
run-tests Run tests on a specific TFM with TRX in a multi-TFM MTP project (SDK 9) 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.13
run-tests Filter MSTest tests by category on VSTest 4.7/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view, glob / ✅ run-tests; tools: report_intent, skill, view, glob, bash ✅ 0.13 [1]
run-tests Filter NUnit tests by class name on VSTest 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view, bash, glob / ✅ run-tests; tools: report_intent, skill, view, bash ✅ 0.13
run-tests Filter xUnit v3 tests by class on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.13
run-tests Filter xUnit v3 tests by trait on MTP 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.13
run-tests Filter xUnit v3 tests by class pattern and trait using query filter language 1.0/5 → 4.7/5 🟢 ✅ run-tests; tools: report_intent, view, skill, bash, web_fetch / ✅ run-tests; tools: report_intent, skill, view, bash ✅ 0.13
run-tests Filter TUnit tests by class using treenode-filter 2.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash ✅ 0.13
run-tests Combine multiple filter criteria on VSTest MSTest 4.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill, bash ✅ 0.13 [2]
run-tests MTP project on SDK 9 must use -- separator for args 2.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill ✅ 0.13
run-tests MTP project on SDK 10 passes args directly 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill, bash ✅ 0.13 [3]
run-tests Detect test platform from Directory.Build.props 3.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.13 [4]
run-tests Negative test: do not use MTP syntax for a VSTest project 5.0/5 → 5.0/5 ✅ run-tests; tools: skill, glob ✅ 0.13
writing-mstest-tests Write unit tests for a service class 3.0/5 → 3.0/5 ✅ writing-mstest-tests; tools: skill, glob / ✅ writing-mstest-tests; tools: skill 🟡 0.40 [5]
writing-mstest-tests Write data-driven tests for a calculator 2.3/5 → 3.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.40 [6]
writing-mstest-tests Write async tests with cancellation 2.7/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.40
writing-mstest-tests Fix swapped Assert.AreEqual arguments 3.3/5 → 3.3/5 ✅ writing-mstest-tests; tools: report_intent, skill / ⚠️ NOT ACTIVATED 🟡 0.40 [7]
writing-mstest-tests Modernize legacy test patterns 3.0/5 → 3.3/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.40 [8]
writing-mstest-tests Replace ExpectedException with Assert.Throws 3.3/5 → 3.0/5 🔴 ⚠️ NOT ACTIVATED 🟡 0.40 [9]
writing-mstest-tests Use proper collection assertions 2.7/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.40
writing-mstest-tests Use proper type assertions instead of casts 1.0/5 → 1.7/5 🟢 ⚠️ NOT ACTIVATED 🟡 0.40 [10]
writing-mstest-tests Set up test lifecycle correctly 2.0/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.40
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 2.3/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.40 [11]
writing-mstest-tests Use string assertions for format validation 4.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill, create / ✅ writing-mstest-tests; tools: skill, create, web_fetch 🟡 0.40 [12]
writing-mstest-tests Use comparison assertions for boundary testing 2.3/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.40 [13]
writing-mstest-tests Write tests with collection, null, and reference assertions 4.0/5 → 4.0/5 ✅ writing-mstest-tests; tools: glob, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.40 [14]
writing-mstest-tests Configure conditional execution, retry, and cleanup 2.3/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.40
writing-mstest-tests Configure test parallelization and MSTest.Sdk project 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.40

[1] ⚠️ High run-to-run variance (CV=2689%) — consider re-running with --runs 5
[2] ⚠️ High run-to-run variance (CV=87%) — consider re-running with --runs 5
[3] ⚠️ High run-to-run variance (CV=59%) — consider re-running with --runs 5
[4] ⚠️ High run-to-run variance (CV=113%) — consider re-running with --runs 5
[5] ⚠️ High run-to-run variance (CV=794%) — consider re-running with --runs 5
[6] ⚠️ High run-to-run variance (CV=326%) — consider re-running with --runs 5. (Isolated) Quality improved but weighted score is -3.2% due to: judgment, tokens (183109 → 286748), quality, tool calls (15 → 18)
[7] ⚠️ High run-to-run variance (CV=168%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -17.3% due to: judgment, quality
[8] ⚠️ High run-to-run variance (CV=2110%) — consider re-running with --runs 5. (Isolated) Quality improved but weighted score is -48.7% due to: judgment, quality, tokens (127882 → 188794)
[9] ⚠️ High run-to-run variance (CV=817%) — consider re-running with --runs 5
[10] ⚠️ High run-to-run variance (CV=404%) — consider re-running with --runs 5
[11] ⚠️ High run-to-run variance (CV=194%) — consider re-running with --runs 5. (Plugin) Quality improved but weighted score is -13.3% due to: judgment, tokens (12812 → 17482)
[12] ⚠️ High run-to-run variance (CV=333%) — consider re-running with --runs 5
[13] ⚠️ High run-to-run variance (CV=66%) — consider re-running with --runs 5
[14] (Plugin) Quality dropped but weighted score is +6.4% due to: completion (✗ → ✓)

Model: claude-opus-4.6 | Judge: claude-opus-4.6

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 875 in dotnet/skills, download eval artifacts with gh run download 29316062200 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/d79c23e380673505933244ec81d9766d1de97c55/eng/skill-validator/src/docs/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

…skilled answer

After the activation fix, run-tests activates on the Negative VSTest scenario in
both arms (activation solved), but it still failed with completion_regression.
Root cause: the assertion output_not_contains '--report-trx' is too naive. The
skill-informed answer is strictly better — it recommends 'dotnet test --logger trx'
AND educates 'use --logger trx, not --report-trx (which is MTP-only)'. That
correct, more helpful contrast trips the substring ban, marking the better answer
as a task-completion regression versus a bare baseline command.

Fix: forbid --report-trx only when it appears as an actual dotnet test command
(output_not_matches 'dotnet test[^\r\n]*--report-trx'), not when the answer names
it to warn against it. Verified against the real failing outputs: both skilled
runs' --report-trx mentions are in explanatory prose and now pass, while an actual
'dotnet test ... --report-trx' recommendation is still rejected. Stricter-but-correct.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 14, 2026 08:19
@Evangelink

Copy link
Copy Markdown
Member Author

/evaluate

Copilot AI 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.

Copilot's findings

  • Files reviewed: 4/4 changed files
  • Comments generated: 0 new

@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
run-tests Run tests in a VSTest MSTest project 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill, glob, bash ✅ 0.14
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.14
run-tests Run tests with blame-hang on MTP project (SDK 10) 1.3/5 → 4.7/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.14
run-tests Run tests on a specific TFM with TRX in a multi-TFM MTP project (SDK 9) 2.3/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.14 [1]
run-tests Filter MSTest tests by category on VSTest 3.3/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view, glob / ✅ run-tests; tools: report_intent, skill, view, glob, bash ✅ 0.14 [2]
run-tests Filter NUnit tests by class name on VSTest 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view, bash / ✅ run-tests; tools: report_intent, skill, view, bash, glob ✅ 0.14
run-tests Filter xUnit v3 tests by class on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.14
run-tests Filter xUnit v3 tests by trait on MTP 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.14
run-tests Filter xUnit v3 tests by class pattern and trait using query filter language 1.0/5 → 4.7/5 🟢 ✅ run-tests; tools: report_intent, view, skill, bash, web_fetch / ✅ run-tests; tools: report_intent, skill, view, bash ✅ 0.14
run-tests Filter TUnit tests by class using treenode-filter 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash ✅ 0.14
run-tests Combine multiple filter criteria on VSTest MSTest 4.7/5 → 4.7/5 ✅ run-tests; tools: skill, glob, bash ✅ 0.14 [3]
run-tests MTP project on SDK 9 must use -- separator for args 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill ✅ 0.14
run-tests MTP project on SDK 10 passes args directly 3.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill, bash ✅ 0.14
run-tests Detect test platform from Directory.Build.props 3.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ✅ run-tests; tools: skill, bash ✅ 0.14 [4]
run-tests Negative test: do not use MTP syntax for a VSTest project 5.0/5 → 5.0/5 ✅ run-tests; tools: skill, glob ✅ 0.14 [5]
writing-mstest-tests Write unit tests for a service class 4.7/5 → 4.3/5 🔴 ✅ writing-mstest-tests; tools: skill, grep, glob / ✅ writing-mstest-tests; tools: skill 🟡 0.38 [6]
writing-mstest-tests Write data-driven tests for a calculator 3.3/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.38 [7]
writing-mstest-tests Write async tests with cancellation 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.38
writing-mstest-tests Fix swapped Assert.AreEqual arguments 3.0/5 → 3.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.38 [8]
writing-mstest-tests Modernize legacy test patterns 4.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.38 [9]
writing-mstest-tests Replace ExpectedException with Assert.Throws 2.7/5 → 3.0/5 🟢 ⚠️ NOT ACTIVATED 🟡 0.38 [10]
writing-mstest-tests Use proper collection assertions 2.7/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.38
writing-mstest-tests Use proper type assertions instead of casts 3.3/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill / ⚠️ NOT ACTIVATED 🟡 0.38 [11]
writing-mstest-tests Set up test lifecycle correctly 2.0/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill, view / ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.38
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 3.0/5 → 3.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.38 [12]
writing-mstest-tests Use string assertions for format validation 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill, edit, view, glob, bash / ✅ writing-mstest-tests; tools: skill, view, edit, bash 🟡 0.38 [13]
writing-mstest-tests Use comparison assertions for boundary testing 2.3/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill, report_intent, create / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.38 [14]
writing-mstest-tests Write tests with collection, null, and reference assertions 3.7/5 → 2.7/5 🔴 ✅ writing-mstest-tests; tools: skill, glob / ✅ writing-mstest-tests; tools: skill 🟡 0.38 [15]
writing-mstest-tests Configure conditional execution, retry, and cleanup 2.7/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.38
writing-mstest-tests Configure test parallelization and MSTest.Sdk project 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.38

[1] ⚠️ High run-to-run variance (CV=109%) — consider re-running with --runs 5
[2] ⚠️ High run-to-run variance (CV=51%) — consider re-running with --runs 5
[3] ⚠️ High run-to-run variance (CV=147%) — consider re-running with --runs 5
[4] ⚠️ High run-to-run variance (CV=116%) — consider re-running with --runs 5
[5] (Plugin) Quality unchanged but weighted score is -2.8% due to: tokens (40169 → 87881), tool calls (5 → 8)
[6] ⚠️ High run-to-run variance (CV=258%) — consider re-running with --runs 5
[7] ⚠️ High run-to-run variance (CV=1429%) — consider re-running with --runs 5
[8] ⚠️ High run-to-run variance (CV=71%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -3.6% due to: tokens (12922 → 17732), quality
[9] ⚠️ High run-to-run variance (CV=229%) — consider re-running with --runs 5
[10] ⚠️ High run-to-run variance (CV=96%) — consider re-running with --runs 5
[11] ⚠️ High run-to-run variance (CV=1139%) — consider re-running with --runs 5
[12] ⚠️ High run-to-run variance (CV=103%) — consider re-running with --runs 5. (Isolated) Quality improved but weighted score is -7.6% due to: tokens (12925 → 30996), tool calls (0 → 1)
[13] ⚠️ High run-to-run variance (CV=73%) — consider re-running with --runs 5
[14] ⚠️ High run-to-run variance (CV=65%) — consider re-running with --runs 5
[15] ⚠️ High run-to-run variance (CV=897%) — consider re-running with --runs 5

Model: claude-opus-4.6 | Judge: claude-opus-4.6

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 875 in dotnet/skills, download eval artifacts with gh run download 29317720438 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/2f973d79272e913460faa8f19f2441e660548adb/eng/skill-validator/src/docs/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

…y-only failure

After the activation + assertion fixes, the Negative VSTest scenario activates in
both arms and passes all assertions, but still failed on a -2.8% weighted score:
the baseline is already perfect (5.0/5, correctly uses --logger trx), so the skill
can add no quality — and expect_tools:[bash] forced the skilled arm to actually run
the tests, inflating tokens (40k->88k) and tool calls (5->8) versus a leaner
baseline. That efficiency delta was the entire failure (docs sec.8 baseline-already-good).

This is a 'recommend the exact command' negative test: exit_success only checks the
agent produced output, and the other assertions validate the recommended command
text, so requiring bash execution over-specified the scenario. Dropping expect_tools
lets both arms answer from knowledge, removing the forced-execution token/tool
overhead while still fully validating that the answer uses --logger trx and never a
'dotnet test ... --report-trx' command.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 14, 2026 08:52
@Evangelink

Copy link
Copy Markdown
Member Author

/evaluate

Copilot AI 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.

Copilot's findings

  • Files reviewed: 4/4 changed files
  • Comments generated: 0 new

@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
run-tests Run tests in a VSTest MSTest project 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash / ✅ run-tests; tools: skill ✅ 0.15
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.15
run-tests Run tests with blame-hang on MTP project (SDK 10) 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.15
run-tests Run tests on a specific TFM with TRX in a multi-TFM MTP project (SDK 9) 5.0/5 → 5.0/5 ✅ run-tests; tools: skill ✅ 0.15 [1]
run-tests Filter MSTest tests by category on VSTest 5.0/5 → 5.0/5 ✅ run-tests; tools: skill, bash / ✅ run-tests; tools: skill, glob ✅ 0.15 [2]
run-tests Filter NUnit tests by class name on VSTest 3.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view, bash / ✅ run-tests; tools: skill, view ✅ 0.15 [3]
run-tests Filter xUnit v3 tests by class on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view ✅ 0.15
run-tests Filter xUnit v3 tests by trait on MTP 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ⚠️ NOT ACTIVATED ✅ 0.15 [4]
run-tests Filter xUnit v3 tests by class pattern and trait using query filter language 1.0/5 → 4.3/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.15 [5]
run-tests Filter TUnit tests by class using treenode-filter 3.0/5 → 4.0/5 🟢 ✅ run-tests; tools: skill, bash ✅ 0.15 [6]
run-tests Combine multiple filter criteria on VSTest MSTest 3.3/5 → 5.0/5 🟢 ✅ run-tests; tools: report_intent, skill, view ✅ 0.15 [7]
run-tests MTP project on SDK 9 must use -- separator for args 2.7/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.15
run-tests MTP project on SDK 10 passes args directly 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill ✅ 0.15
run-tests Detect test platform from Directory.Build.props 3.0/5 → 4.7/5 🟢 ✅ run-tests; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.15
run-tests Negative test: do not use MTP syntax for a VSTest project 4.3/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill, bash ✅ 0.15 [8]
writing-mstest-tests Write unit tests for a service class 4.0/5 → 4.7/5 🟢 ✅ writing-mstest-tests; tools: skill, glob 🟡 0.32 [9]
writing-mstest-tests Write data-driven tests for a calculator 3.7/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill, glob 🟡 0.32
writing-mstest-tests Write async tests with cancellation 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.32
writing-mstest-tests Fix swapped Assert.AreEqual arguments 3.7/5 → 3.7/5 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.32 [10]
writing-mstest-tests Modernize legacy test patterns 4.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.32 [11]
writing-mstest-tests Replace ExpectedException with Assert.Throws 3.0/5 → 3.7/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.32 [12]
writing-mstest-tests Use proper collection assertions 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.32 [13]
writing-mstest-tests Use proper type assertions instead of casts 4.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.32 [14]
writing-mstest-tests Set up test lifecycle correctly 2.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill / ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.32
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 3.0/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill, report_intent 🟡 0.32 [15]
writing-mstest-tests Use string assertions for format validation 4.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill, view, bash, edit, glob / ✅ writing-mstest-tests; tools: skill, bash, edit, view 🟡 0.32
writing-mstest-tests Use comparison assertions for boundary testing 2.7/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.32
writing-mstest-tests Write tests with collection, null, and reference assertions 3.7/5 → 3.7/5 ✅ writing-mstest-tests; tools: glob, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.32 [16]
writing-mstest-tests Configure conditional execution, retry, and cleanup 2.7/5 → 4.3/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.32
writing-mstest-tests Configure test parallelization and MSTest.Sdk project 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill 🟡 0.32

[1] (Plugin) Quality unchanged but weighted score is -9.0% due to: tokens (25470 → 63190), tool calls (2 → 4), time (14.0s → 22.3s)
[2] (Plugin) Quality unchanged but weighted score is -7.7% due to: tokens (29974 → 59990), tool calls (3 → 5), time (15.1s → 21.1s)
[3] ⚠️ High run-to-run variance (CV=53%) — consider re-running with --runs 5
[4] ⚠️ High run-to-run variance (CV=221%) — consider re-running with --runs 5. (Plugin) Quality unchanged but weighted score is -1.1% due to: tokens (40431 → 49378)
[5] ⚠️ High run-to-run variance (CV=300%) — consider re-running with --runs 5. (Plugin) Quality improved but weighted score is -23.1% due to: judgment, tokens (12684 → 32689), quality, tool calls (0 → 1)
[6] ⚠️ High run-to-run variance (CV=57%) — consider re-running with --runs 5
[7] ⚠️ High run-to-run variance (CV=69%) — consider re-running with --runs 5
[8] ⚠️ High run-to-run variance (CV=502%) — consider re-running with --runs 5
[9] ⚠️ High run-to-run variance (CV=1922%) — consider re-running with --runs 5
[10] ⚠️ High run-to-run variance (CV=50%) — consider re-running with --runs 5
[11] ⚠️ High run-to-run variance (CV=216%) — consider re-running with --runs 5
[12] ⚠️ High run-to-run variance (CV=510%) — consider re-running with --runs 5
[13] ⚠️ High run-to-run variance (CV=444%) — consider re-running with --runs 5
[14] ⚠️ High run-to-run variance (CV=1455%) — consider re-running with --runs 5
[15] ⚠️ High run-to-run variance (CV=163%) — consider re-running with --runs 5
[16] ⚠️ High run-to-run variance (CV=202%) — consider re-running with --runs 5. (Plugin) Quality dropped but weighted score is +0.4% due to: completion (✗ → ✓)

Model: claude-opus-4.6 | Judge: claude-opus-4.6

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 875 in dotnet/skills, download eval artifacts with gh run download 29319630445 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/3956d4cec0e4f7b1bfcbc72c094b58fa06932b3d/eng/skill-validator/src/docs/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

@Evangelink
Evangelink enabled auto-merge (squash) July 14, 2026 09:15
@github-actions github-actions Bot added waiting-on-review PR state label and removed waiting-on-author PR state label labels Jul 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Evaluation passed for 3956d4c. cc @dotnet/dotnet-testing — please review.

@Evangelink
Evangelink merged commit 79a2ada into main Jul 14, 2026
36 of 38 checks passed
@Evangelink
Evangelink deleted the dev/amauryleve/literate-disco branch July 14, 2026 10:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-on-review PR state label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants