Stabilize and unify some test skills#501
Conversation
- Move platform-detection.md and filter-syntax.md to plugins/dotnet-test/shared/, removing 3 identical copies of each from run-tests, mtp-hot-reload, and migrate-vstest-to-mtp reference directories. - Move dotnet.md from exp-test-smell-detection/extensions/ to shared/ as dotnet-test-frameworks.md in both dotnet-test and dotnet-experimental plugins. Update exp-assertion-quality, exp-test-boilerplate-detection, exp-test-tagging, and test-anti-patterns to reference the shared file instead of inlining framework detection tables. - Differentiate test-anti-patterns (quick pragmatic review) from exp-test-smell-detection (deep formal audit with academic taxonomy) by updating descriptions and cross-referencing each other in When Not to Use sections. - Update skill-validator to allow ../../shared/ file references while still blocking other parent-directory traversals. Add tests for the new rule.
Replace the plugin-level shared/ directories with non-invocable reference skills (user-invocable: false) that other skills reference by name. - Create platform-detection, filter-syntax, and dotnet-test-frameworks as hidden skills under plugins/dotnet-test/skills/. These contain the detection tables and syntax references previously duplicated across run-tests, mtp-hot-reload, and migrate-vstest-to-mtp. - Create exp-dotnet-test-frameworks as a hidden skill under plugins/dotnet-experimental/skills/ for the experimental test analysis skills (exp-test-smell-detection, exp-assertion-quality, etc.). - Update all consuming skills to reference these by skill name in backtick notation instead of file links. - Revert the skill-validator ../../shared/ exception — no longer needed since all references now use the standard skill name mechanism.
exp-test-maintainability was only 6 calibration rules with no workflow. exp-test-boilerplate-detection had the full 5-category detection workflow, examples, calibration, and validation. Merge the boilerplate content into exp-test-maintainability (the broader, more user-facing name) and add the two unique maintainability rules (DisplayName guidance, DataRow vs DynamicData preference) to Category 3. - Replace exp-test-maintainability SKILL.md with the merged content - Move test fixtures from exp-test-boilerplate-detection to exp-test-maintainability - Merge eval.yaml scenarios (4 total: 2 from each original skill) - Delete exp-test-boilerplate-detection skill and tests - Update all cross-references in exp-test-smell-detection, dotnet-test-frameworks, exp-dotnet-test-frameworks, and CODEOWNERS
…ion analysis Point users to exp-mock-usage-analysis from the Over-mocking entry and to exp-test-maintainability from the Duplicate tests entry.
|
/evaluate |
Skill Validation Results
[1]
Model: claude-opus-4.6 | Judge: claude-opus-4.6 🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
Inline the critical SDK 10 detection signal (global.json test.runner) directly in Step 1 instead of deferring entirely to the platform-detection skill. This makes the distinction between SDK 10 (no -- separator) and SDK 8/9 (requires -- separator) more prominent. Add a quick detection summary table, strengthen the Common Pitfalls entry for SDK 10 with a blame-hang-timeout example, and keep the platform-detection skill reference for the full detection logic.
|
/evaluate |
Skill Validation Results
[1] (Plugin) Quality unchanged but weighted score is -3.2% due to: tokens (13312 → 17063), time (18.4s → 26.3s), quality
Model: claude-opus-4.6 | Judge: claude-opus-4.6 🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
- exp-test-maintainability: Add 'suggest a better test structure', 'consolidate similar test methods', 'convert copy-paste tests to data-driven parameterized tests' to match prompts like 'each new case needs a whole new method, suggest a better structure'. - test-anti-patterns: Add 'review tests', 'find test problems', 'check test quality', 'audit tests for common mistakes' to match review-style prompts that don't use the word 'anti-pattern'. - run-tests: Add 'hang timeout', 'blame-hang', 'blame-crash', 'TUnit' to match SDK 10 blame scenarios and TUnit filter scenarios that were intermittently not activating.
|
/evaluate |
There was a problem hiding this comment.
Pull request overview
This PR consolidates duplicated “test boilerplate detection” content into the existing exp-test-maintainability evaluation, and restructures .NET testing reference material by promoting platform/filter/framework references into dedicated (non-invocable) skills that other skills can link to.
Changes:
- Moved the heavy/minimal boilerplate evaluation scenarios into
tests/dotnet-experimental/exp-test-maintainability/eval.yamland removedexp-test-boilerplate-detectioneval/skill content. - Added new test fixture projects (
Calculator.Tests,OrderService.Tests) to support maintainability scenarios. - Refactored skill documentation to reference shared
platform-detection,filter-syntax, and test-framework reference skills, and updated CODEOWNERS accordingly.
Show a summary per file
| File | Description |
|---|---|
| tests/dotnet-experimental/exp-test-maintainability/fixtures/minimal-boilerplate/Calculator.Tests/CalculatorTests.cs | Adds “minimal boilerplate” MSTest sample tests used as an evaluation fixture. |
| tests/dotnet-experimental/exp-test-maintainability/fixtures/minimal-boilerplate/Calculator.Tests/Calculator.Tests.csproj | Adds MSTest fixture project metadata for the minimal-boilerplate scenario. |
| tests/dotnet-experimental/exp-test-maintainability/fixtures/heavy-boilerplate/OrderService.Tests/OrderService.Tests.csproj | Adds MSTest fixture project metadata for the heavy-boilerplate scenario. |
| tests/dotnet-experimental/exp-test-maintainability/fixtures/heavy-boilerplate/OrderService.Tests/OrderProcessorTests.cs | Adds “heavy boilerplate” test fixture to drive maintainability recommendations. |
| tests/dotnet-experimental/exp-test-maintainability/eval.yaml | Adds new scenarios for heavy/minimal boilerplate and related rubric/assertions. |
| tests/dotnet-experimental/exp-test-boilerplate-detection/eval.yaml | Removes now-redundant eval scenarios after consolidation. |
| plugins/dotnet-test/skills/test-anti-patterns/SKILL.md | Updates positioning and cross-links to related skills/framework reference skill. |
| plugins/dotnet-test/skills/run-tests/SKILL.md | Updates detection guidance and references platform-detection / filter-syntax skills. |
| plugins/dotnet-test/skills/run-tests/references/platform-detection.md | Deleted in favor of the platform-detection skill. |
| plugins/dotnet-test/skills/platform-detection/SKILL.md | Adds skill frontmatter to make platform detection a shared reference skill. |
| plugins/dotnet-test/skills/mtp-hot-reload/SKILL.md | Updates references to the centralized platform-detection / filter-syntax skills. |
| plugins/dotnet-test/skills/mtp-hot-reload/references/filter-syntax.md | Deleted in favor of the filter-syntax skill. |
| plugins/dotnet-test/skills/migrate-vstest-to-mtp/SKILL.md | Updates references to centralized platform/filter reference skills. |
| plugins/dotnet-test/skills/migrate-vstest-to-mtp/references/platform-detection.md | Deleted in favor of the platform-detection skill. |
| plugins/dotnet-test/skills/migrate-vstest-to-mtp/references/filter-syntax.md | Deleted in favor of the filter-syntax skill. |
| plugins/dotnet-test/skills/filter-syntax/SKILL.md | Adds skill frontmatter to make filter syntax a shared reference skill. |
| plugins/dotnet-test/skills/dotnet-test-frameworks/SKILL.md | Adds a centralized, non-invocable framework reference skill for non-experimental skills. |
| plugins/dotnet-experimental/skills/exp-test-tagging/SKILL.md | Switches framework detection guidance to reference exp-dotnet-test-frameworks. |
| plugins/dotnet-experimental/skills/exp-test-smell-detection/SKILL.md | Updates references from old boilerplate skill to exp-test-maintainability and framework reference skill. |
| plugins/dotnet-experimental/skills/exp-test-maintainability/SKILL.md | Expands/clarifies maintainability scope to include duplication/boilerplate detection. |
| plugins/dotnet-experimental/skills/exp-test-boilerplate-detection/SKILL.md | Removes redundant skill after consolidation into exp-test-maintainability. |
| plugins/dotnet-experimental/skills/exp-dotnet-test-frameworks/SKILL.md | Adds skill frontmatter to make it a shared reference skill for experimental skills. |
| plugins/dotnet-experimental/skills/exp-assertion-quality/SKILL.md | Updates scanning guidance to reference exp-dotnet-test-frameworks. |
| .github/CODEOWNERS | Updates ownership entries to reflect added/removed experimental skill paths. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 20/24 changed files
- Comments generated: 0
Skill Validation Results
[1]
Model: claude-opus-4.6 | Judge: claude-opus-4.6 🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
* Deduplicate test skill references and clarify skill boundaries - Move platform-detection.md and filter-syntax.md to plugins/dotnet-test/shared/, removing 3 identical copies of each from run-tests, mtp-hot-reload, and migrate-vstest-to-mtp reference directories. - Move dotnet.md from exp-test-smell-detection/extensions/ to shared/ as dotnet-test-frameworks.md in both dotnet-test and dotnet-experimental plugins. Update exp-assertion-quality, exp-test-boilerplate-detection, exp-test-tagging, and test-anti-patterns to reference the shared file instead of inlining framework detection tables. - Differentiate test-anti-patterns (quick pragmatic review) from exp-test-smell-detection (deep formal audit with academic taxonomy) by updating descriptions and cross-referencing each other in When Not to Use sections. - Update skill-validator to allow ../../shared/ file references while still blocking other parent-directory traversals. Add tests for the new rule. * Switch from shared/ directories to hidden reference skills Replace the plugin-level shared/ directories with non-invocable reference skills (user-invocable: false) that other skills reference by name. - Create platform-detection, filter-syntax, and dotnet-test-frameworks as hidden skills under plugins/dotnet-test/skills/. These contain the detection tables and syntax references previously duplicated across run-tests, mtp-hot-reload, and migrate-vstest-to-mtp. - Create exp-dotnet-test-frameworks as a hidden skill under plugins/dotnet-experimental/skills/ for the experimental test analysis skills (exp-test-smell-detection, exp-assertion-quality, etc.). - Update all consuming skills to reference these by skill name in backtick notation instead of file links. - Revert the skill-validator ../../shared/ exception — no longer needed since all references now use the standard skill name mechanism. * Merge exp-test-boilerplate-detection into exp-test-maintainability exp-test-maintainability was only 6 calibration rules with no workflow. exp-test-boilerplate-detection had the full 5-category detection workflow, examples, calibration, and validation. Merge the boilerplate content into exp-test-maintainability (the broader, more user-facing name) and add the two unique maintainability rules (DisplayName guidance, DataRow vs DynamicData preference) to Category 3. - Replace exp-test-maintainability SKILL.md with the merged content - Move test fixtures from exp-test-boilerplate-detection to exp-test-maintainability - Merge eval.yaml scenarios (4 total: 2 from each original skill) - Delete exp-test-boilerplate-detection skill and tests - Update all cross-references in exp-test-smell-detection, dotnet-test-frameworks, exp-dotnet-test-frameworks, and CODEOWNERS * Add cross-references to test-anti-patterns for deep mock and duplication analysis Point users to exp-mock-usage-analysis from the Over-mocking entry and to exp-test-maintainability from the Duplicate tests entry. * Add exp-dotnet-test-frameworks to CODEOWNERS * Improve run-tests SDK 10 MTP detection for blame-hang scenario Inline the critical SDK 10 detection signal (global.json test.runner) directly in Step 1 instead of deferring entirely to the platform-detection skill. This makes the distinction between SDK 10 (no -- separator) and SDK 8/9 (requires -- separator) more prominent. Add a quick detection summary table, strengthen the Common Pitfalls entry for SDK 10 with a blame-hang-timeout example, and keep the platform-detection skill reference for the full detection logic. * Improve skill activation keywords in descriptions - exp-test-maintainability: Add 'suggest a better test structure', 'consolidate similar test methods', 'convert copy-paste tests to data-driven parameterized tests' to match prompts like 'each new case needs a whole new method, suggest a better structure'. - test-anti-patterns: Add 'review tests', 'find test problems', 'check test quality', 'audit tests for common mistakes' to match review-style prompts that don't use the word 'anti-pattern'. - run-tests: Add 'hang timeout', 'blame-hang', 'blame-crash', 'TUnit' to match SDK 10 blame scenarios and TUnit filter scenarios that were intermittently not activating.
No description provided.