update-library-template
Skill469 starsChanged 4 months agoMITView on GitHub
Merges the latest Library.Template into this repo (at position of HEAD) and resolves conflicts.
We split this skill into the rules it gives an agent
19 rules. About 0 are common, 8 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 9
Run ./tools/MergeFrom-Template.ps1 from the repo root.
- Distinctive: line 17
Always refer to that file before proceeding.
- Distinctive: line 22
When resolving merge conflicts, consider whether it looks like the relevant code file is older than it should be given the changes the …
- Distinctive: line 23
Ask the user when in doubt as to whether the conflict should be resolved in favor of 'catching up' with the template or keeping the current …
- Distinctive: line 25
Use #runSubagent to analyze and resolve merge conflicts across files in parallel.
- Distinctive: line 40
Prefer the template only where the consumer's prior content was equivalent.
- Very specific: line 41
Keep framework-specific AGENTS.md (and similar agent/contributor docs): filter syntax (--filter-method / --filter-not-trait vs …
- Very specific: line 42
Keep bespoke tools/dotnet-test-cloud.ps1 logic when it is not equivalent to the template (per-project loops, NonTUnit vs TUnit splits, …
- Very specific: line 43
Do not add unused template PackageVersion entries (TUnit.Engine, xunit.v3.assert.aot, etc.) to Directory.Packages.props unless a project in …
- Very specific: line 51
After the merge, search CONTRIBUTING.md, AGENTS.md, and source headers for template placeholders such as …
- Very specific: line 66
After the merge, always check global.json for MSBuild Sdks with names starting with Microsoft.VisualStudio.Internal.MicroBuild.
- Very specific: line 68
Always take the latest of the versions you see among these SDKs and the MicroBuildVersion property.
- Distinctive: line 73
Use #runSubagent for each step.
- Very specific: line 75
Verify that dotnet restore succeeds.
- Very specific: line 76
Verify that dotnet build succeeds.
- Very specific: line 77
Verify that tests succeed by running tools/dotnet-test-cloud.ps1.
- Distinctive: line 83
If validation fails for reasons that seem unrelated to the changes brought in by the merge, advise the user and ask how they'd like you to …
- Distinctive: line 89
If you have to make any changes for validations to pass, consider whether they qualify as a bad merge conflict resolution or more of a …
- Very specific: line 92
Always author your commits using git commit --author "🤖 Copilot <no-reply@github.com>" (and possibly other parameters).
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Instructions
- Run
./tools/MergeFrom-Template.ps1from the repo root. - Resolve merge conflicts, taking into account conflict resolution policy below.
- Validate the changes, as described in the validation section below.
- Committing your changes (if applicable).
Conflict resolution policy
There may be special notes that describe special considerations for certain files or scenarios to help you resolve conflicts appropriately. Always refer to that file before proceeding. In particular, focus on the incoming part of the file, since it represents the changes from the Library.Template that you are merging into your repo.
Also consider that some repos choose to reject certain Library.Template patterns. For example the template uses MTPv2 for test projects, but a repo might have chosen not to adopt that. When resolving merge conflicts, consider whether it looks like the relevant code file is older than it should be given the changes the template is bringing in. Ask the user when in doubt as to whether the conflict should be resolved in favor of 'catching up' with the template or keeping the current changes.
Use #runSubagent to analyze and resolve merge conflicts across files in parallel.
Keep Current files
Conflicts in the following files should always be resolved by keeping the current version (i.e. discard incoming changes):
- README.md
Test framework docs, scripts, and packages
Library.Template's AGENTS.md, test docs, and tools/dotnet-test-cloud.ps1 assume TUnit on Microsoft.Testing.Platform.
Many consumers still use xunit v3 + MTP, classic VSTest xunit, or hybrid setups (including xunit extension libraries such as Xunit.StaFact / Xunit.SkippableFact / Xunit.Combinatorial, whose own tests must stay on xunit).
When merging:
- Prefer the template only where the consumer's prior content was equivalent. Do not overwrite repo-specific behavior with template placeholders or TUnit-only defaults.
- Keep framework-specific AGENTS.md (and similar agent/contributor docs): filter syntax (
--filter-method/--filter-not-traitvs--treenode-filter), FailsInCloudTest / FailureExpected exclusions, real test project paths, and--frameworkTFMs that match the repo's test projects. - Keep bespoke
tools/dotnet-test-cloud.ps1logic when it is not equivalent to the template (per-project loops, NonTUnit vs TUnit splits, MultiRID/NativeAOT discovery, hang/blame timeouts, coverage naming, custom filters). Graft genuine template improvements (for exampleIncludeNativeAOT+Get-NativeAOTTestProjects.ps1) onto the repo script only when they fit. - Do not add unused template PackageVersion entries (
TUnit.Engine,xunit.v3.assert.aot, etc.) toDirectory.Packages.propsunless a project in the repo actually references them (or Central Package Management truly requires them). - Preserve repo-specific Azure Pipelines / GitHub Actions build steps that the template lacks equivalents for (for example full MSBuild@1 on Windows for
net35,IncompleteBuildaswarnNotAsError).
Traversal coverage, placeholders, and non-test projects
GitVersionBaseDirectoryin the template'sDirectory.Build.propsassumes the repo has exactly oneversion.json. If the repo has nestedversion.jsonfiles (typically for analyzer or source generator projects that needassemblyVersionprecisionrevision), the repo has deliberately removed or must not have that property. Never re-add it during a merge; keep the repo's first-parent state.init.ps1and CI restore and build onlytools/dirs.proj. If the solution contains projects outsidesrcandtest(for examplesamples/orbenchmark/), add them totools/dirs.proj(withPack="false"and/orPublish="false"as appropriate) so they are still restored and compiled. Otherwisedotnet format --no-restoreand sample regressions go unnoticed.test/Directory.Build.propsmarks every project undertestas a test project. Set<IsTestProject>false</IsTestProject>on non-test executables there (for example BenchmarkDotNet projects) so they are not run bydotnet testor picked up by NativeAOT test discovery.- After the merge, search
CONTRIBUTING.md,AGENTS.md, and source headers for template placeholders such astest/Library.Tests/Library.Tests.csproj, the company-name placeholder token thatExpand-Template.ps1replaces with the author, and the template'snet8.0examples, and replace them with the repo's real project paths, metadata, and NativeAOT-enabled frameworks. - If the repo already publishes NativeAOT tests through its own mechanism (for example
MultiRIDProjectReferenceitems intest/dirs.proj), either keep that mechanism and disable the template's discovery (PublishNativeAOTTests=false, and drop or don't wire upGet-NativeAOTTestProjects.ps1), or replace it fully. Don't leave both half-wired, and updateCONTRIBUTING.mdto describe whichever one the repo actually uses.
Deleted files
Very typically, when the incoming change is to a file that was deleted locally, the correct resolution is to re-delete the file.
In some cases however, the deleted file may have incoming changes that should be applied to other files.
The test/Library.Tests/Library.Tests.csproj file is very typical of this.
Changes to this file should very typically be applied to any and all test projects in the repo.
You are responsible for doing this in addition to re-deleting this template file.
Updating package and SDK versions
After the merge, always check global.json for MSBuild Sdks with names starting with Microsoft.VisualStudio.Internal.MicroBuild.
These SDK versions should match the value of the MicroBuildVersion property found in Directory.Packages.props.
Always take the latest of the versions you see among these SDKs and the MicroBuildVersion property.
Validation
Validate the merge result (after resolving any conflicts, if applicable). Use #runSubagent for each step.
- Verify that
dotnet restoresucceeds. Fix any issues that come up. - Verify that
dotnet buildsucceeds. - Verify that tests succeed by running
tools/dotnet-test-cloud.ps1.
While these validations are described using dotnet CLI commands, some repos require using full msbuild.exe.
You can detect this by checking the azure-pipelines/dotnet.yml or .github/workflows/build.yml files for use of one or the other tool.
You are not responsible for fixing issues that the merge did not cause. If validation fails for reasons that seem unrelated to the changes brought in by the merge, advise the user and ask how they'd like you to proceed. That said, sometimes merges will bring in SDK or dependency updates that can cause breaks in seemingly unrelated areas. In such cases, you should investigate and solve the issues as needed.
Committing your changes
If you have to make any changes for validations to pass, consider whether they qualify as a bad merge conflict resolution or more of a novel change that you're making to work with the Library.Template update. Merge conflict resolution fixes ideally get amended into the merge commit, while novel changes would go into a novel commit after the merge commit.
Always author your commits using git commit --author "🤖 Copilot <no-reply@github.com>" (and possibly other parameters).
Describe the nature of the merge conflicts you encountered and how you resolved them in your commit message.
Later, if asked to review pull request validation breaks, always author a fresh commit with each fix that you push, unless the user directs you to do otherwise.
Trending
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Other versions8 projects use a version of this.
Word for word · 7
- microsoft/vs-threading★ 1k100% same
- microsoft/vs-streamjsonrpc★ 942100% same
- microsoft/slow-cheetah★ 353100% same
- microsoft/vs-validation★ 143100% same
- microsoft/json-document-transforms★ 117100% same
- microsoft/vs-servicehub★ 32100% same
- microsoft/vssdktestfx★ 23100% same
Edited · 1
- microsoft/vs-solutionpersistence★ 21481% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository3 other files it gives its agents.
- AGENTS.mdAGENTS.md
- bundle-dependency-prsSkill
- testingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

