Skip to content

Add .NET refactoring and breaking-change skills - #873

Open
AbhitejJohn wants to merge 10 commits into
mainfrom
add-dotnet-refactoring-skills
Open

Add .NET refactoring and breaking-change skills#873
AbhitejJohn wants to merge 10 commits into
mainfrom
add-dotnet-refactoring-skills

Conversation

@AbhitejJohn

Copy link
Copy Markdown
Collaborator

Summary

Refactoring is a common operation for .NET developers, and a dedicated skill can help agents make these changes in the way .NET teams expect: behavior-preserving, incremental, and validated with build/test gates.

This PR adds two related skills:

  • csharp-refactoring: guides safe C#/.NET refactoring work such as rename, move, extract, inline, split, consolidate/de-duplicate, and modernization while preserving behavior.
  • dotnet-breaking-changes: provides the compatibility guardrails needed when a refactor touches public API, multi-targeting, source-generated/partial code, or InternalsVisibleTo surfaces.

Why these skills

csharp-refactoring focuses on the refactoring workflow itself: establish a green baseline, choose one named operation, find true references, prefer semantics-aware edits, and re-gate after each step. Its reference file expands the operation catalog and maps common refactoring operations to the kinds of changes .NET teams regularly make.

dotnet-breaking-changes covers the .NET-specific surfaces where a change can compile and pass tests while still breaking downstream consumers. Its reference files explain how to inspect and handle:

  • public API gates (PublicAPI.*, ApiCompat, package validation)
  • multi-targeting and #if branches
  • source-generated and partial code
  • friend assemblies via InternalsVisibleTo

Together, the skills let an agent keep refactoring focused on behavior preservation while still checking the .NET compatibility surfaces that matter in real repos.

Validation

  • Added eval coverage for both skills.
  • Included fixture scenarios that exercise rename, extraction, consolidation, public API checks, multi-targeting, generated/partial code, and friend assembly hazards.
  • Ran the skill validator successfully.
  • Verified the eval fixtures build and test successfully in isolated copies.

AbhitejJohn and others added 2 commits July 7, 2026 13:56
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Skill Coverage Report

Plugin Skill Covered Coverage
dotnet setup-local-sdk 3/8 37.5%
Uncovered: dotnet/setup-local-sdk
  • [Pitfall] paths ignored (line 382)
  • [Pitfall] dotnet app.dll wrong runtime (line 386)
  • [CodePattern] [pscustomobject] (line 301)
  • [CodePattern] [ordered] (line 301)
  • [CodePattern] [guid] (line 104)

@AbhitejJohn

Copy link
Copy Markdown
Collaborator Author

/evaluate

github-actions Bot added a commit that referenced this pull request Jul 8, 2026
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
csharp-refactoring Rename a method across its declaration and every caller 3.0/5 → 1.7/5 🔴 ✅ csharp-refactoring; tools: skill, glob / ✅ csharp-refactoring; tools: skill, read_bash, glob ✅ 0.16 [1]
csharp-refactoring Extract a repeated calculation into a private helper 2.0/5 → 1.7/5 🔴 ✅ csharp-refactoring; tools: grep, skill / ⚠️ NOT ACTIVATED ✅ 0.16 [2]
csharp-refactoring Consolidate a duplicated block into a single shared helper 1.3/5 → 1.0/5 🔴 ✅ csharp-refactoring; tools: skill, glob / ⚠️ NOT ACTIVATED ✅ 0.16 [3]
csharp-refactoring Inline a pass-through wrapper and update callers 2.7/5 → 1.0/5 🔴 ✅ csharp-refactoring; tools: skill, bash / ⚠️ NOT ACTIVATED ✅ 0.16 [4]
csharp-refactoring Merge two near-identical types into one parameterized type 1.0/5 → 1.0/5 ⚠️ NOT ACTIVATED / ✅ csharp-refactoring; tools: bash, read_bash, glob, edit, skill ✅ 0.16 [5]
csharp-refactoring Decline a framework and package upgrade dressed up as a refactor 1.3/5 → 1.0/5 ⏰ 🔴 ℹ️ not activated (expected) ✅ 0.16 [6]
csharp-refactoring Decline a new-feature request dressed up as a refactor 4.7/5 → 3.0/5 ⏰ 🔴 ℹ️ not activated (expected) ✅ 0.16 [7]
csharp-refactoring Keep behavior-changing bug fixes out of a behavior-preserving refactor 3.7/5 ⏰ → 2.3/5 ⏰ 🔴 ℹ️ not activated (expected) ✅ 0.16 [8]
dotnet-breaking-changes Answer a public-API question before consolidating duplicated parsing 2.0/5 → 1.3/5 🔴 ✅ dotnet-breaking-changes; tools: skill, glob / ⚠️ NOT ACTIVATED ✅ 0.10 [9]
dotnet-breaking-changes Add behavior to a shipped public member without breaking the contract 3.3/5 → 2.3/5 🔴 ✅ dotnet-breaking-changes; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.10 [10]
dotnet-breaking-changes Rename a helper referenced from every #if branch of a multi-targeted type 3.0/5 → 3.0/5 ✅ dotnet-breaking-changes; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.10 [11]
dotnet-breaking-changes Rename a member of a partial type that a generated part references 3.0/5 → 2.0/5 🔴 ✅ dotnet-breaking-changes; tools: skill, glob / ⚠️ NOT ACTIVATED ✅ 0.10 [12]
dotnet-breaking-changes Add a new public method that must be correct on every target framework 2.0/5 → 1.0/5 🔴 ✅ dotnet-breaking-changes; tools: bash, glob, skill / ⚠️ NOT ACTIVATED ✅ 0.10 [13]
dotnet-breaking-changes Do not raise breaking-change concerns for a purely internal local rename 5.0/5 → 5.0/5 ℹ️ not activated (expected) ✅ 0.10 [14]

[1] ⚠️ High run-to-run variance (CV=82%) — 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=109%) — consider re-running with --runs 5
[4] ⚠️ High run-to-run variance (CV=58%) — consider re-running with --runs 5
[5] ⚠️ High run-to-run variance (CV=265%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -15.5% due to: judgment, quality
[6] ⚠️ High run-to-run variance (CV=71%) — consider re-running with --runs 5
[7] ⚠️ High run-to-run variance (CV=122%) — consider re-running with --runs 5. (Isolated) Quality dropped but weighted score is +4.0% due to: tokens (180608 → 105541), tool calls (19 → 11), time (211.0s → 136.3s)
[8] ⚠️ High run-to-run variance (CV=114%) — consider re-running with --runs 5
[9] ⚠️ High run-to-run variance (CV=159%) — consider re-running with --runs 5. (Isolated) Quality dropped but weighted score is +15.2% due to: completion (✗ → ✓), tokens (90688 → 78437)
[10] ⚠️ High run-to-run variance (CV=171%) — consider re-running with --runs 5
[11] ⚠️ High run-to-run variance (CV=105%) — consider re-running with --runs 5
[12] ⚠️ High run-to-run variance (CV=103%) — consider re-running with --runs 5
[13] ⚠️ High run-to-run variance (CV=56%) — consider re-running with --runs 5
[14] ⚠️ High run-to-run variance (CV=106%) — consider re-running with --runs 5

timeout — run(s) hit the (300s) 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 873 in dotnet/skills, download eval artifacts with gh run download 28962446218 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/1b3a5bd13db825237d579a4dd9d2c1dfc87d9953/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

@AbhitejJohn
AbhitejJohn marked this pull request as ready for review July 13, 2026 17:18
Copilot AI review requested due to automatic review settings July 13, 2026 17:18

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 adds two new .NET-focused skills to the plugins/dotnet plugin—one for behavior-preserving C# refactoring workflows and one for .NET-specific breaking-change/compatibility guardrails—along with eval coverage and fixtures that exercise the key hazards (public API baselines, multi-targeting #if, generated/partial code, and friend assemblies).

Changes:

  • Added csharp-refactoring skill guidance plus an operation catalog reference.
  • Added dotnet-breaking-changes skill guidance plus focused reference docs for the four “hidden surfaces”.
  • Added eval suites + identical lightweight Billing fixture solutions under tests/dotnet/ for both skills; updated CODEOWNERS and dotnet plugin README.
Show a summary per file
File Description
tests/dotnet/dotnet-breaking-changes/tests/Billing.Tests/BillingTests.cs Adds fixture tests used by the breaking-change eval scenarios.
tests/dotnet/dotnet-breaking-changes/tests/Billing.Tests/Billing.Tests.csproj Adds an xUnit test project targeting net10.0 for the breaking-change fixture solution.
tests/dotnet/dotnet-breaking-changes/src/Billing/PublicAPI.Shipped.txt Adds a public API baseline file used by eval prompts/assertions.
tests/dotnet/dotnet-breaking-changes/src/Billing/Pricing.cs Adds pricing/tax types used for refactor/breaking-change exercises.
tests/dotnet/dotnet-breaking-changes/src/Billing/PlatformInfo.cs Adds multi-targeting #if example surface for breaking-change checks.
tests/dotnet/dotnet-breaking-changes/src/Billing/OrderProcessor.cs Adds intentionally-refactorable implementation used by scenarios.
tests/dotnet/dotnet-breaking-changes/src/Billing/Coupons.g.cs.template Adds generator-input template to simulate generated/partial hazards.
tests/dotnet/dotnet-breaking-changes/src/Billing/Coupons.cs Adds hand-authored partial type paired with the generated template.
tests/dotnet/dotnet-breaking-changes/src/Billing/Billing.csproj Adds multi-targeted library project and build-time generation hook.
tests/dotnet/dotnet-breaking-changes/src/Billing/AppSettingsHelper.cs Adds duplicated parsing helpers for public-API consolidation scenarios.
tests/dotnet/dotnet-breaking-changes/Fixture.sln Adds the breaking-change fixture solution container.
tests/dotnet/dotnet-breaking-changes/eval.yaml Adds breaking-change eval scenarios and build/test gates.
tests/dotnet/csharp-refactoring/tests/Billing.Tests/BillingTests.cs Adds fixture tests used by the refactoring eval scenarios.
tests/dotnet/csharp-refactoring/tests/Billing.Tests/Billing.Tests.csproj Adds an xUnit test project targeting net10.0 for the refactoring fixture solution.
tests/dotnet/csharp-refactoring/src/Billing/PublicAPI.Shipped.txt Adds a public API baseline file used by refactoring prompts/assertions.
tests/dotnet/csharp-refactoring/src/Billing/Pricing.cs Adds pricing/tax types used for refactoring exercises.
tests/dotnet/csharp-refactoring/src/Billing/PlatformInfo.cs Adds multi-targeting #if example surface for refactoring checks.
tests/dotnet/csharp-refactoring/src/Billing/OrderProcessor.cs Adds intentionally-refactorable implementation used by scenarios.
tests/dotnet/csharp-refactoring/src/Billing/Coupons.g.cs.template Adds generator-input template to simulate generated/partial hazards.
tests/dotnet/csharp-refactoring/src/Billing/Coupons.cs Adds hand-authored partial type paired with the generated template.
tests/dotnet/csharp-refactoring/src/Billing/Billing.csproj Adds multi-targeted library project and build-time generation hook.
tests/dotnet/csharp-refactoring/src/Billing/AppSettingsHelper.cs Adds duplicated parsing helpers used in refactoring scenarios.
tests/dotnet/csharp-refactoring/Fixture.sln Adds the refactoring fixture solution container.
tests/dotnet/csharp-refactoring/eval.yaml Adds refactoring eval scenarios and build/test gates.
plugins/dotnet/skills/dotnet-breaking-changes/SKILL.md Introduces the breaking-change skill and when/when-not-to-use guidance.
plugins/dotnet/skills/dotnet-breaking-changes/references/source-generation.md Adds detailed guidance for generated/partial code hazards.
plugins/dotnet/skills/dotnet-breaking-changes/references/public-api.md Adds detailed guidance for public API gating and compatibility decisions.
plugins/dotnet/skills/dotnet-breaking-changes/references/multi-targeting.md Adds detailed guidance for multi-targeting and #if branch correctness.
plugins/dotnet/skills/dotnet-breaking-changes/references/internals-visible-to.md Adds detailed guidance for friend-assembly/internal-surface hazards.
plugins/dotnet/skills/csharp-refactoring/SKILL.md Introduces the refactoring skill and a stepwise safety contract.
plugins/dotnet/skills/csharp-refactoring/references/operation-catalog.md Adds a more detailed refactoring operation taxonomy reference.
plugins/dotnet/README.md Updates the dotnet plugin skill list to include the new skills.
eng/known-domains.txt Adds github.com/dotnet/skills to known domains.
.github/CODEOWNERS Adds ownership entries for the new skills and their tests.

Copilot's findings

Tip

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

  • Files reviewed: 34/34 changed files
  • Comments generated: 0

@AbhitejJohn

Copy link
Copy Markdown
Collaborator Author

/evaluate

contract unchanged. On a multi-targeted project, build/test **each** TFM — a green default build can
still be broken on another target.

```bash

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest removing lines 147-152. Models know how to build and test and should favor the repos instructions for doing it over this generic option.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Wendy — addressed in the v3 trim (df61fce). The section now leads with: "Use the repo's own build/test workflow when it documents one (\README/\CONTRIBUTING, \�uild., \�ng/, \global.json, .github/workflows); its instructions win over any generic command."* The generic \dotnet build/\dotnet test\ is kept only as an explicit \Otherwise:\ fallback for repos with no documented workflow, and trimmed to a few lines. Happy to drop the fallback entirely if you'd prefer zero generic commands.

@github-actions github-actions Bot added the waiting-on-author PR state label label Jul 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — 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

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
csharp-refactoring Rename a method across its declaration and every caller 3.0/5 → 1.0/5 🔴 ✅ csharp-refactoring; tools: skill, glob / ✅ csharp-refactoring; tools: skill, read_bash, glob, stop_bash ✅ 0.17
csharp-refactoring Extract a repeated calculation into a private helper 2.0/5 → 1.7/5 🔴 ✅ csharp-refactoring; tools: grep, skill / ✅ csharp-refactoring; tools: grep, read_bash, skill ✅ 0.17 [1]
csharp-refactoring Consolidate a duplicated block into a single shared helper 2.0/5 → 1.7/5 🔴 ✅ csharp-refactoring; tools: glob, skill, bash / ⚠️ NOT ACTIVATED ✅ 0.17 [2]
csharp-refactoring Inline a pass-through wrapper and update callers 2.3/5 → 1.0/5 🔴 ✅ csharp-refactoring; tools: skill, bash / ⚠️ NOT ACTIVATED ✅ 0.17
csharp-refactoring Merge two near-identical types into one parameterized type 1.3/5 → 1.0/5 🔴 ✅ csharp-refactoring; tools: skill, edit / ⚠️ NOT ACTIVATED ✅ 0.17 [3]
csharp-refactoring Decline a framework and package upgrade dressed up as a refactor 1.0/5 → 1.0/5 ℹ️ not activated (expected) ✅ 0.17 [4]
csharp-refactoring Decline a new-feature request dressed up as a refactor 4.0/5 → 5.0/5 🟢 ℹ️ not activated (expected) ✅ 0.17 [5]
csharp-refactoring Keep behavior-changing bug fixes out of a behavior-preserving refactor 2.3/5 ⏰ → 3.3/5 ⏰ 🟢 ℹ️ not activated (expected) ✅ 0.17 [6]
dotnet-breaking-changes Answer a public-API question before consolidating duplicated parsing 2.3/5 → 2.3/5 ✅ dotnet-breaking-changes; tools: glob, skill / ⚠️ NOT ACTIVATED ✅ 0.12 [7]
dotnet-breaking-changes Add behavior to a shipped public member without breaking the contract 2.7/5 → 2.3/5 🔴 ⚠️ NOT ACTIVATED ✅ 0.12 [8]
dotnet-breaking-changes Rename a helper referenced from every #if branch of a multi-targeted type 3.3/5 → 2.7/5 🔴 ✅ dotnet-breaking-changes; tools: skill / ⚠️ NOT ACTIVATED ✅ 0.12 [9]
dotnet-breaking-changes Rename a member of a partial type that a generated part references 1.7/5 → 1.7/5 ⚠️ NOT ACTIVATED ✅ 0.12 [10]
dotnet-breaking-changes Add a new public method that must be correct on every target framework 2.0/5 → 2.0/5 ⚠️ NOT ACTIVATED ✅ 0.12 [11]
dotnet-breaking-changes Do not raise breaking-change concerns for a purely internal local rename 4.7/5 → 5.0/5 🟢 ℹ️ not activated (expected) ✅ 0.12 [12]

[1] ⚠️ High run-to-run variance (CV=214%) — consider re-running with --runs 5. (Isolated) Quality dropped but weighted score is +1.7% due to: tokens (79654 → 66925), time (82.4s → 64.0s)
[2] ⚠️ High run-to-run variance (CV=177%) — consider re-running with --runs 5
[3] ⚠️ High run-to-run variance (CV=895%) — consider re-running with --runs 5
[4] ⚠️ High run-to-run variance (CV=98%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -17.3% due to: judgment, quality
[5] ⚠️ High run-to-run variance (CV=379%) — consider re-running with --runs 5. (Isolated) Quality improved but weighted score is -0.9% due to: tokens (151034 → 171934)
[6] ⚠️ High run-to-run variance (CV=404%) — consider re-running with --runs 5. (Plugin) Quality improved but weighted score is -71.1% due to: quality, judgment, tokens (212959 → 255721)
[7] ⚠️ High run-to-run variance (CV=337%) — consider re-running with --runs 5
[8] ⚠️ High run-to-run variance (CV=1202%) — consider re-running with --runs 5
[9] ⚠️ High run-to-run variance (CV=97%) — consider re-running with --runs 5
[10] ⚠️ High run-to-run variance (CV=339%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -48.4% due to: judgment, quality
[11] ⚠️ High run-to-run variance (CV=213%) — consider re-running with --runs 5. (Isolated) Quality unchanged but weighted score is -15.4% due to: judgment, quality
[12] ⚠️ High run-to-run variance (CV=215%) — consider re-running with --runs 5

timeout — run(s) hit the (300s, 600s) 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 873 in dotnet/skills, download eval artifacts with gh run download 29270232281 --repo dotnet/skills --pattern "skill-validator-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/a5265d860095cbd1b989dcaa451c1716de027d77/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

@JanKrivanek JanKrivanek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the skills have nontrivial size - the main concern now is overlap between the two skills + cross-loading cost. csharp-refactoring instructs the agent to also load dotnet-breaking-changes, and the two share material ("stop and escalate," public API, forwarders, partial/generated). The split is defensible (breaking-changes is meant to apply to features/fixes too, not just refactors), but loading two long skills for one refactor is a real context cost that the evals don't yet justify.

AbhitejJohn added a commit that referenced this pull request Jul 17, 2026
Trim study for PR #873: csharp-refactoring-trim is a ~30% shorter rewrite of csharp-refactoring (drops When-to-use/Inputs/Outputs boilerplate + verbose LSP launch prose, compresses the dbc-overlapping hazards section) while preserving every rubric-rewarded behavior. Adds a 'trimmed' experiment arm and bumps runs to 3 so CI generates baseline/skilled/trimmed trajectories for local cross-family re-judging. Eval-only scratch branch; not part of the PR.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
@github-actions

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — 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.)

AbhitejJohn added a commit that referenced this pull request Jul 17, 2026
Robustness probe for the csharp-refactoring trim: all prior CI trajectories
were executed by claude-opus-4.6. Flip executor to gpt-5.5 (GPT family) and
CI judge to claude-opus-4.8 so the (executor, judge) pair stays cross-family.
Tests whether trimmed-vs-current non-inferiority holds under a different model
family. Eval-branch only; not on PR #873.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
AbhitejJohn added a commit that referenced this pull request Jul 20, 2026
Closes the 'refactoring-only endpoint too narrow' risk flagged by the
cross-family rubber-duck. Adds two boundary stimuli never used in trim tuning:
  9. Separate a smuggled behavior change from a requested rename (rename +
     smuggled 10%->12% discount change) -> should separate/flag, not bundle.
 10. Recognize a behavior-changing simplification is not a refactor (remove
     free-shipping-over-\ rule under a 'cleanup' framing) -> should not
     silently change observable behavior.
Executor reverted to claude-opus-4.6 / judge gpt-5.5 (re-judge) to match the
stringent Confirm A family where boundary behavior looked weakest.
Eval-branch only; not on PR #873.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
Replaces the shipped skill body with the validated v3 variant: judgment-first,
rigor proportional to blast radius, redundant catalog/list scaffolding removed.
~53% smaller (12,811->6,039 chars) with equal or better cross-family eval quality
and no measured regression. Description (929 chars) and all safety rules retained.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
@github-actions

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — 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.)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
Copilot AI review requested due to automatic review settings July 22, 2026 06:10
Rely on the SDK-default language version per pinned TFMs (net8.0;net10.0) so fixture compile behavior does not drift with the installed SDK. Both fixtures build clean (0 warnings/errors) without it. Addresses reviewer feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
Copilot AI review requested due to automatic review settings July 23, 2026 07:10
@AbhitejJohn

Copy link
Copy Markdown
Collaborator 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: 34/34 changed files
  • Comments generated: 2


## Partial types span files

A `partial class`/`record`/`struct` (and, since C# 13, `partial` properties/methods) is one type split
Comment on lines +123 to +133
# Multi-target gate: the new method must compile on BOTH net8.0 and net10.0.
- type: run_command_and_assert
command_to_run: "dotnet"
command_arguments: "build Fixture.sln -v:q"
expected_exit_code: 0
command_timeout: 300
# Existing behavior stays green after the additive change.
- type: run_command_and_assert
command_to_run: "dotnet"
command_arguments: "test Fixture.sln -v:q"
expected_exit_code: 0
@github-actions

Copy link
Copy Markdown
Contributor

❌ Evaluation failed. View workflow run

AbhitejJohn and others added 2 commits July 23, 2026 10:43
Picks up the Vally-harness eval migration (#877) and related infra so
the /evaluate workflow can discover and run this PR's evals.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
…ally harness schema

Adapts both eval.yaml files from the legacy scenarios/assertions format to
the stimuli/graders/config schema introduced by #877 (Migrate LLM evals to
the Vally harness). Prompts and rubrics are preserved verbatim; assertions
map 1:1 to graders (file_contains->file-contains, run_command_and_assert->
run-command, output_matches->output-matches) and copy_test_files->
environment.files. Validated with `vally experiment run --dry-run`: both evals
now resolve and match the experiment filter (previously matched none).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
Copilot AI review requested due to automatic review settings July 23, 2026 18:01
@AbhitejJohn

Copy link
Copy Markdown
Collaborator 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

Comments suppressed due to low confidence (8)

tests/dotnet/csharp-refactoring/eval.yaml:62

  • file-contains graders use value: (not substring:). Using substring: here may cause the assertion to be ignored.
      - type: file-contains
        config:
          path: src/Billing/OrderProcessor.cs
          substring: private

tests/dotnet/csharp-refactoring/eval.yaml:92

  • file-contains graders use value: (not substring:). Using substring: here may cause the assertion to be ignored.
      - type: file-contains
        config:
          path: src/Billing/OrderProcessor.cs
          substring: private

tests/dotnet/csharp-refactoring/eval.yaml:157

  • file-not-contains graders use value: (not substring:). Using substring: here may cause the assertion to be ignored.
      - type: file-not-contains
        config:
          path: src/Billing/Pricing.cs
          substring: class GoldPricing
      - type: file-not-contains
        config:
          path: src/Billing/Pricing.cs
          substring: class SilverPricing

tests/dotnet/dotnet-breaking-changes/eval.yaml:50

  • file-contains graders use value: (not substring:). With substring: the grader may ignore the match and the scenario can pass/fail incorrectly.
      - type: file-contains
        config:
          path: src/Billing/PublicAPI.Shipped.txt
          substring: ParseIntSetting

tests/dotnet/dotnet-breaking-changes/eval.yaml:76

  • file-contains graders use value: (not substring:). With substring: the grader may ignore the match and the scenario can pass/fail incorrectly.
      - type: file-contains
        config:
          path: src/Billing/PlatformInfo.cs
          substring: FormatLabel

tests/dotnet/dotnet-breaking-changes/eval.yaml:118

  • file-contains graders use value: (not substring:). With substring: the grader may ignore the match and the scenario can pass/fail incorrectly.
      - type: file-contains
        config:
          path: src/Billing/Coupons.cs
          substring: Apply
      # Positive check that the fix went to the GENERATOR INPUT (the template),
      # which is where the generated part's reference to the renamed member lives.
      # Hand-editing the obj/ output would be overwritten on the next build.
      - type: file-contains
        config:
          path: src/Billing/Coupons.g.cs.template
          substring: Apply

tests/dotnet/dotnet-breaking-changes/eval.yaml:147

  • file-contains graders use value: (not substring:). With substring: the grader may ignore the match and the scenario can pass/fail incorrectly.
      - type: file-contains
        config:
          path: src/Billing/PlatformInfo.cs
          substring: Tag

tests/dotnet/dotnet-breaking-changes/eval.yaml:181

  • file-contains graders use value: (not substring:). With substring: the grader may ignore the match and the scenario can pass/fail incorrectly.
      - type: file-contains
        config:
          path: src/Billing/OrderProcessor.cs
          substring: runningTotal
  • Files reviewed: 34/34 changed files
  • Comments generated: 5

Comment thread tests/dotnet/csharp-refactoring/eval.yaml Outdated
Comment thread tests/dotnet/csharp-refactoring/eval.yaml Outdated
The #1 way a "rename" silently corrupts code is editing textual matches (comments, strings, unrelated
overloads) instead of real **bindings**. Find every binding reference first, then edit semantically. Use
the strongest tool available: an IDE/Roslyn workspace refactoring, then the C# LSP the
[`dotnet` plugin declares](https://github.com/dotnet/skills/blob/main/plugins/dotnet/lsp.json)
Comment thread tests/dotnet/dotnet-breaking-changes/eval.yaml Outdated
Comment on lines +1 to +8
name: dotnet-breaking-changes
description: Evaluates the dotnet/dotnet-breaking-changes skill
type: capability
config:
timeout: 15m
stimuli:
- name: Answer a public-API question before consolidating duplicated parsing
prompt: "Is `AppSettingsHelper` part of the public API anywhere? Its int/bool setting parsing looks duplicated with `ConfigReader`. If it's safe to do, consolidate the setting parsing into one place and update the callers, without changing behavior. The solution is at Fixture.sln."
@github-actions

Copy link
Copy Markdown
Contributor

❌ Evaluation failed. View workflow run

…ot 'substring'

The Vally file-contains and file-not-contains graders require the config key
'value' (per the schema and all main eval.yaml files); 'substring' is rejected
with [invalid-grader-config]. Verified with `vally lint --eval-spec`: both evals
now lint with 0 errors, matching main's passing evals (only the benign
scoring-defaults + config-deprecation warnings that main evals also emit).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c9f9823-7f2f-4f7d-9d1b-f2b9e7a20c60
Copilot AI review requested due to automatic review settings July 23, 2026 18:15
@AbhitejJohn

Copy link
Copy Markdown
Collaborator 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: 34/34 changed files
  • Comments generated: 0 new

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

2 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).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
csharp-refactoring +0.0% [+0.0%, +0.0%] 0/8/0 3.5/5 3.2/5
dotnet-breaking-changes +0.0% [+0.0%, +0.0%] 0/6/0 4.5/5 4.1/5

🔍 Full Results - additional metrics and failure investigation steps

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

For PR 873 in dotnet/skills, download eval artifacts with gh run download 30032912669 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/70fdd8c5ff5d3dd509a8be940c37f60cb7dad8ca/eng/vally-adapter/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

👋 @AbhitejJohn — this PR has 5 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

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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 Aug 2, 2026

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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 Aug 6, 2026

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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.)

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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

Copy link
Copy Markdown
Contributor

This PR has been automatically marked as stale because it has no activity for 30 days. It will be closed if no further activity occurs within another 7 days of this comment. If it is closed, you may reopen it anytime when you're ready again.

@github-actions

Copy link
Copy Markdown
Contributor

👋 @AbhitejJohn — this PR has 5 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.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-on-author PR state label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants