Improve dotnet-test-migration skill signal - #929
Conversation
Trim unnecessary xUnit-to-MSTest workflow turns and make MSTest v1/v2 migration preserve the detected test platform. Add focused cost and activation-boundary eval coverage for issue #900. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 860bd5ec-3bee-44ec-8fad-1bdcc745b9e1
|
/evaluate |
There was a problem hiding this comment.
Pull request overview
This PR improves the evaluation signal and guidance for the dotnet-test-migration plugin, primarily by tightening tests/evals around runner preservation and adding boundary coverage for “already migrated” scenarios.
Changes:
- Adds a focused xUnit-to-MSTest exception-assertion mapping stimulus to better measure concise, behavior-preserving answers.
- Strengthens the MSTest v2→v3 eval to require VSTest runner preservation (avoid MSTest.Sdk/MTP flips) and adds an “already on v3” boundary scenario + fixture.
- Updates the
migrate-xunit-to-mstestandmigrate-mstest-v1v2-to-v3skill guidance to reduce redundant work (batch discovery, avoid unnecessary intermediate builds) and clarify runner expectations (VSTest vs MTP).
Show a summary per file
| File | Description |
|---|---|
| tests/dotnet-test-migration/migrate-xunit-to-mstest/eval.yaml | Adds a new focused stimulus to validate precise exception assertion mappings without full-migration narration. |
| tests/dotnet-test-migration/migrate-mstest-v1v2-to-v3/fixtures/already-v3/TestProject.csproj | Introduces an “already MSTest v3” fixture project to support boundary testing. |
| tests/dotnet-test-migration/migrate-mstest-v1v2-to-v3/fixtures/already-v3/global.json | Adds fixture runner metadata indicating VSTest. |
| tests/dotnet-test-migration/migrate-mstest-v1v2-to-v3/fixtures/already-v3/CurrentTests.cs | Adds a minimal MSTest test file for the new “already-v3” fixture. |
| tests/dotnet-test-migration/migrate-mstest-v1v2-to-v3/eval.yaml | Strengthens v2→v3 migration requirements and adds a new “stop when already v3” scenario using the new fixture. |
| plugins/dotnet-test-migration/skills/migrate-xunit-to-mstest/SKILL.md | Refines workflow guidance to batch discovery, avoid redundant builds, and limit reference reading to relevant sections. |
| plugins/dotnet-test-migration/skills/migrate-mstest-v1v2-to-v3/SKILL.md | Clarifies preserving the test platform (VSTest vs MTP) and updates verification steps to avoid redundant build/test passes. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 7/7 changed files
- Comments generated: 0
📊 Skill Evaluation Results2 skill(s) evaluated — 0 improved, 2 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).
🔍 Full Results - additional metrics and failure investigation steps
▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
|
✅ Evaluation passed for |
Use the first evaluation's per-trial evidence to remove an inert scenario, cover semantic assertion migration, broaden MSTest risk guidance, and make testsettings migration objective. Also fix the MSTest 4.1/Test SDK compatibility rule and add a fast path to reduce retry-heavy migrations. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 860bd5ec-3bee-44ec-8fad-1bdcc745b9e1
|
/evaluate |
📊 Skill Evaluation Results2 skill(s) evaluated — 2 improved, 0 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).
🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
|
👋 @Evangelink — this PR has 3 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 |
Move the sequence grader into its matching stimulus, positively require element-wise comparison, and make runsettings XML checks tolerant of casing and whitespace. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 860bd5ec-3bee-44ec-8fad-1bdcc745b9e1
Skill Coverage Report
Uncovered:
|
Convert weak advice-only scenarios into verified migrations, require test discovery and complete framework state, and correct misleading migration mappings found in eval replay. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 06f10e04-4c49-40c3-b663-69be4525e4cb
|
/evaluate |
Accept equivalent Workers formatting and require SequenceEqual results to be asserted. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 06f10e04-4c49-40c3-b663-69be4525e4cb
📊 Skill Evaluation Results2 skill(s) evaluated — 1 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).
🔍 Full Results - additional metrics and failure investigation steps
▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
Keep focused trials in their isolated workspace, require DataRow runtime validation, and prevent already-v3 package normalization. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 06f10e04-4c49-40c3-b663-69be4525e4cb
|
/evaluate |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
/evaluate |
📊 Skill Evaluation Results2 skill(s) evaluated — 2 improved, 0 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).
🔍 Full Results - additional metrics and failure investigation steps |
📊 Skill Evaluation Results2 skill(s) evaluated — 2 improved, 0 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).
🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
|
@Evangelink Thanks for this — it's a genuinely strong improvement to the migration skills, and the direction is exactly right. I ran it through several independent AI code reviews plus an automated skill-quality check, and a cross-family evaluation (five models doing the migrations, scored by a separate model). Since it's already merged, treat the below as follow-up polish rather than blockers. What stood out as great (all three reviewers agreed):
A few things worth a quick follow-up, grouped by severity (already merged, so none are merge blockers — the grouping reflects how I'd prioritize the follow-up). 🟡 Non-blocking
Cross-family evaluation results. Every one of the ten cells (both skills × five models) came back with a positive preference for the new version, and no model preferred the old version anywhere. Full run: https://github.com/dotnet/skills/actions/runs/30040414142
Overall: reviewers ranged from clean approve to approve-with-one-fix, the API/version claims that matter all verified correct, and the evaluation is uniformly positive. Nothing here blocks anything — the two version-detection/boundary items are the ones I'd tidy up first. Thanks again for the careful work here! |
Summary
migrate-xunit-to-mstestoverhead by batching discovery, avoiding redundant builds, and reading only relevant mapping-reference sectionsmigrate-mstest-v1v2-to-v3with evidence-based activation, explicit runner preservation, and consistentMSTest.Sdk/VSTest guidanceValidation
dotnet test/evaluateis requested below for the full harness runFixes #900