Thanks for helping improve the WinUI plugin. This document describes the
contributor flow. For the maintainer-side release process see
RELEASING.md.
- Fork the repo (or branch if you have write access).
- Open a PR against
staging— never againstmain. - Don't bump version fields in your PR. Releases are batched.
- CI will tell you if you missed something.
your-feature ──PR──▶ staging ──promotion PR──▶ main ──auto-tag──▶ vX.Y.Z
hotfix/* ──PR──▶ main (must back-merge to staging)
mainis the released branch. Marketplace consumers install frommain, so it must always be in a shippable state.stagingis the integration branch and the default PR target. All feature work lands here first.hotfix/*branches are the only ones allowed to PR directly tomain, for genuine emergencies (security, broken-on-install). They must include the version bump + changelog entry themselves and be back-merged tostagingimmediately after.
-
Branch from the latest
staging:git fetch origin git checkout -b my-feature origin/staging
-
Make your changes. Run
./scripts/build-tools.ps1if you touched anything insrc/tools/so the committed binary payloads stay in sync (the provenance CI jobs will fail otherwise). -
Push and open a PR. Base branch must be
staging. The PR template is pre-filled for you. -
Address review feedback. We squash-merge into
stagingso PR title + description become the commit message — please write them with that in mind.
- ❌ Don't edit
plugins/winui/plugin.jsonversion. - ❌ Don't edit
.github/plugin/marketplace.jsonversionfields. - ❌ Don't edit
.claude-plugin/marketplace.jsonversionfields. - ❌ Don't add a
## [X.Y.Z]section toCHANGELOG.md— write your bullets under## [Unreleased]if your change is user-facing.
The version-sync CI check will fail your PR if any version field changed.
Versioning happens once per release in the promotion PR.
If your change is user-facing (a skill behaves differently, an analyzer rule
was added/removed, a CLI surface changed, a payload was rebuilt), add a bullet
under the matching subsection of ## [Unreleased]:
- Added — new skills, agents, tools, CLI subcommands, analyzer rules.
- Changed — behavior changes, refactors users will notice, payload rebuilds that change behavior.
- Fixed — bug fixes.
- Removed — anything users could rely on that's now gone.
- Deprecated — still works but scheduled for removal.
Pure-CI, pure-internal-refactor, and doc-only PRs do not need a changelog entry.
If something on main is broken in a way that can't wait for the next
release:
- Branch from
main:git checkout -b hotfix/short-description origin/main. - Fix the bug.
- Bump the patch version in all three manifests + add a
[X.Y.Z]section toCHANGELOG.md(yes, in the hotfix PR — this is the one exception). - PR against
main. CI will run the sameversion-bump+changelog-entrychecks the promotion PR runs. - Once merged, immediately open a back-merge PR
main → stagingto get the fix into the integration branch. Theback-merge-reminderworkflow opens a tracking issue if you forget.
| Check | When it runs | What it wants |
|---|---|---|
pr-target-policy |
PR targets main |
Your branch is staging, release/*, or hotfix/*, AND comes from this repo (not a fork). |
version-sync |
PR targets staging |
You did NOT change any version field. |
version-bump |
PR targets main |
All 5 version fields bumped, valid semver, strictly greater, identical. |
changelog-entry |
PR targets main |
Top-most ## [X.Y.Z] section matches the bumped version, has at least one bullet. |
staging-up-to-date-with-main |
PR targets staging |
staging contains every commit on main (so hotfixes aren't lost). |
build-tools + provenance |
Any PR | C# tools build, analyzer tests pass, committed payloads match source. |
validate-plugin-manifest + validate-skill-frontmatter |
Any PR | Manifests are well-formed, every SKILL.md has valid frontmatter. |
If a check fails, the failure message tells you exactly what to fix.
This project follows the Microsoft Open Source Code of Conduct. Be excellent to each other.
Contributions of non-trivial size require signing the Microsoft CLA. The CLA bot will prompt you on your first PR.