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.
78
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
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:
<!-- 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.
c88db8e
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.