Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Guides assessment of backward compatibility for MSBuild changes. Consult when modifying behavior, adding warnings or errors, changing defaults, altering target ordering, removing or deprecating features, deciding whether a change needs a ChangeWave, reviewing blast radius of behavioral changes, or when a PR introduces user-visible output differences.
.claude/skills/dotnet-assessing-breaking-changes/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -22% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-16 | ✗→✓ | ▲ Improved | -5% | 0% |
Backward compatibility is the default — any change that could alter existing build behavior must be explicitly justified.
This skill covers how to evaluate compatibility risk. For the mechanics of ChangeWave implementation, see the changewaves skill.
-WarnAsError or <TreatWarningsAsErrors>true</TreatWarningsAsErrors> will fail if you introduce a new warning. Always gate new warnings behind a ChangeWave or emit them as Message importance instead.Before merging any behavioral change, evaluate:
| Question | If Yes | |----------|--------| | Does this change what gets built or how? | ChangeWave required | | Does this add a new warning? | ChangeWave required (WarnAsError impact) | | Does this change a property default? | ChangeWave required (existing .csproj files depend on defaults) | | Does this alter target execution order? | Test with real-world solutions; likely ChangeWave | | Does this change console or binlog output format? | Consider downstream tool impact | | Does this affect only internal code paths with no user-visible effect? | No ChangeWave needed | | Is this a pure bug fix restoring documented behavior? | Usually no ChangeWave; use judgment on blast radius |
For detailed ChangeWave mechanics, see ChangeWaves-Dev.md and ChangeWaves.md.
This is the most commonly missed compatibility concern:
xml<!-- Many enterprise builds set this globally --> <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
Any new MSBxxxx warning you add will break these builds. Options:
MessageImportance.Low or Normal — for informational diagnosticsWhen testing backward compatibility, verify:
<TargetFrameworks>net472;net8.0</TargetFrameworks><TreatWarningsAsErrors>true</TreatWarningsAsErrors>Is the change user-visible?
├── No → Ship it (no ChangeWave needed)
└── Yes
├── Is it a new opt-in feature? → Ship it (no ChangeWave needed)
└── Does it change existing behavior?
├── Bug fix with low blast radius? → Ship it, add regression test
└── Behavioral change or new warning?
└── Gate behind ChangeWave, test opt-out pathDocument the compatibility decision in your PR description so reviewers can validate it.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 20,522 | 26,846 | +31% | 1 | 1 | 0% | 3,265 | 3,515 | +8% | 0 | 0 | — |
case-02 | fail→pass | 24,461 | 14,010 | -43% | 1 | 1 | 0% | 3,749 | 2,929 | -22% | 0 | 0 | — |
case-03 | pass→pass | 9,849 | 6,072 | -38% | 1 | 1 | 0% | 1,793 | 1,983 | +11% | 0 | 0 | — |
case-04 | pass→pass | 10,949 | 10,182 | -7% | 1 | 1 | 0% | 1,734 | 2,399 | +38% | 0 | 0 | — |
case-05 | pass→pass | 16,954 | 14,916 | -12% | 1 | 1 | 0% | 3,277 | 3,442 | +5% | 0 | 0 | — |
case-06 | fail→pass | 16,796 | 9,044 | -46% | 1 | 1 | 0% | 2,398 | 2,305 | -4% | 0 | 0 | — |
case-07 | fail→fail | 16,301 | 12,994 | -20% | 1 | 1 | 0% | 2,536 | 3,002 | +18% | 0 | 0 | — |
case-08 | pass→pass | 13,551 | 9,580 | -29% | 1 | 1 | 0% | 2,030 | 2,390 | +18% | 0 | 0 | — |
case-09 | fail→pass | 16,176 | 9,967 | -38% | 1 | 1 | 0% | 2,461 | 2,504 | +2% | 0 | 0 | — |
case-10 | pass→pass | 10,633 | 4,629 | -56% | 1 | 1 | 0% | 1,495 | 1,754 | +17% | 0 | 0 | — |
case-11 | pass→pass | 12,072 | 4,605 | -62% | 1 | 1 | 0% | 1,752 | 1,744 | -0% | 0 | 0 | — |
case-12 | pass→pass | 14,628 | 8,404 | -43% | 1 | 1 | 0% | 2,311 | 2,271 | -2% | 0 | 0 | — |
case-13 | pass→pass | 12,735 | 8,038 | -37% | 1 | 1 | 0% | 2,007 | 2,188 | +9% | 0 | 0 | — |
case-14 | pass→pass | 8,194 | 5,062 | -38% | 1 | 1 | 0% | 1,460 | 1,690 | +16% | 0 | 0 | — |
case-15 | pass→pass | 10,169 | 3,634 | -64% | 1 | 1 | 0% | 1,646 | 1,479 | -10% | 0 | 0 | — |
case-16 | fail→pass | 16,436 | 10,608 | -35% | 1 | 1 | 0% | 2,438 | 2,307 | -5% | 0 | 0 | — |
case-17 | fail→pass | 18,542 | 4,677 | -75% | 1 | 1 | 0% | 2,298 | 1,808 | -21% | 0 | 0 | — |
case-18 | fail→pass | 13,307 | 12,974 | -3% | 1 | 1 | 0% | 2,096 | 2,994 | +43% | 0 | 0 | — |
case-19 | pass→pass | 14,598 | 7,134 | -51% | 1 | 1 | 0% | 2,014 | 2,019 | +0% | 0 | 0 | — |
case-20 | pass→pass | 13,593 | 5,356 | -61% | 1 | 1 | 0% | 2,064 | 1,788 | -13% | 0 | 0 | — |
case-21 | fail→pass | 16,578 | 7,847 | -53% | 1 | 1 | 0% | 2,345 | 2,095 | -11% | 0 | 0 | — |
case-22 | pass→pass | 25,150 | 4,125 | -84% | 1 | 1 | 0% | 4,022 | 1,542 | -62% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.