Proposes a scoped version bump for a roosterjs hotfix. Given one or more commits provided by the user, determines which packages had files changed by those commits, bumps the version only for the affected version groups, and creates a draft PR. Use when asked to do a hotfix, a scoped/targeted version bump, or to release only specific commits.
npx skills add https://github.com/microsoft/roosterjs --skill hotfix
This skill performs a scoped version bump for a roosterjs hotfix. Unlike the full version-bump skill (which bumps everything merged into master since the last release), this skill bumps the version only for the packages whose files were changed by the specific commits the user provides.
The user supplies the commits to hotfix. Each changed file is mapped to its package, each package to a version group (main, legacyAdapter, react), and only the affected groups are bumped.
The user must provide the commits to include in the hotfix. Accept any of:
5142b51 e593ee8)abc123..def456)gh pr view <number> --json mergeCommit)If the user does not provide any commits, stop and ask which commits should be included in the hotfix before doing anything else.
The version groups live in versions.json and map to package sets defined in tools/buildTools/common.js (buildConfig). Use this mapping to translate changed files → group:
| Group | Packages |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| main | roosterjs, roosterjs-content-model-types, roosterjs-content-model-dom, roosterjs-content-model-core, roosterjs-content-model-api, roosterjs-content-model-plugins, roosterjs-color-utils, roosterjs-content-model-markdown |
| legacyAdapter | roosterjs-editor-adapter |
| react | roosterjs-react |
Notes:
packages/<package-name>/ identifies the package; look up which group lists that package.roosterjs-editor-*, except roosterjs-editor-adapter) are not in versions.json and are not versioned by this skill. If a commit only touches legacy packages or non-package files (e.g. tools/, demo/, root configs), see Step 4.tools/buildTools/common.js in case packages were added or moved.Confirm the commits the user provided (see Inputs). If none were provided, stop and ask. Resolve PR numbers to commit hashes if needed. Verify each commit exists:
git cat-file -t <commit>
If any commit is invalid/unknown, stop and report it.
Only tracked modifications (staged or unstaged edits to files git knows about) interfere with switching branches and cherry-picking. Untracked files (e.g. a new, not-yet-added skill folder or scratch files) do not interfere — do not block on them.
Check for blocking (tracked) changes only:
git status --porcelain --untracked-files=no
git status --porcelain (with untracked) shows untracked files, mention them in one line and continue — they will be carried along untouched and excluded from the bump commit (which stages only versions.json). Note that gh pr create may print a harmless "uncommitted change" warning because of them.The hotfix branch is based on release (that is what ships).
git checkout release
git pull origin release
If either command fails, stop and report the error.
Then check whether each provided commit is already on release — this is the common hotfix situation: the fix lives on master and must be cherry-picked onto release. Do not assume the commit is already there.
git merge-base --is-ancestor <commit> release && echo "on release" || echo "NOT on release"
release directly).AskUserQuestion covering cherry-pick + bump level works well).For each provided commit, list the files it changed. Combine across all commits (deduplicate):
git show --name-only --pretty=format: <commit>
For a range, use:
git diff --name-only <from>..<to>
Collect the full set of changed file paths.
Map files to groups:
packages/<package-name>/..., record <package-name>.tools/buildTools/common.js).Handle edge cases:
tools/, demo/, root configs, docs, etc.), stop and tell the user: "The provided commits do not change any versioned package files, so no version bump is needed." List the changed files so they can confirm.roosterjs-editor-* other than roosterjs-editor-adapter), tell the user those packages are not versioned via versions.json and ask how they want to proceed.Show the user a summary before continuing:
Affected packages and groups:
- roosterjs-content-model-plugins → main
- roosterjs-react → react
Affected groups to bump: main, react
Create a new branch from release. Use the naming convention u/<username>/hotfix-<N>, picking the next free N (check existing branches so you don't collide), or a name the user specifies:
git branch --list 'u/<username>/hotfix-*' # see which N are taken
git checkout -b <branch_name> release
For each commit identified in Step 3 as not on release (in the order the user provided), cherry-pick it onto the new branch:
git cherry-pick <commit>
git cherry-pick --abort).A hotfix is normally a patch bump (bug fixes, no public API changes). Determine the bump per affected group:
To check whether more than a patch is warranted, inspect the commits' changes to each affected package's lib/index.ts barrel files and exported types/interfaces:
git show <commit> -- 'packages/**/lib/index.ts'
If a minor or major bump appears needed, show the interface differences to the user and ask whether they want that bump or to keep it a patch. A hotfix is usually intended to stay a patch — confirm before doing anything larger.
Only bump the groups identified in Step 4. Leave all other groups untouched.
Read the current versions from versions.json and apply the bump computed in Step 6 to only the affected groups. Do not change groups that were not affected.
yarn build
yarn test:fast
If any errors occur, show the full error output and stop the flow. Do not proceed with a broken build.
git add versions.json
git commit -m "Hotfix version bump <group>: <old_version> → <new_version>"
List all changed groups/versions in the commit message.
git push origin <branch_name>
Create a draft PR targeting the release branch:
Title: Hotfix version bump <group>: <old_version> → <new_version> (list all affected groups)
Description: Include:
| Group | Old Version | New Version |
| ----- | ----------- | ----------- |
| main | x.y.z | x.y.z+1 |
| react | x.y.z | x.y.z+1 |
## Hotfix commits
- <short_hash> <commit_subject>
## Affected packages
- roosterjs-content-model-plugins → main
- roosterjs-react → react
Command:
gh pr create --draft --base release --title "<title>" --body "<description>"
✅ Hotfix version bump PR created successfully!
PR: https://github.com/microsoft/roosterjs/pull/<number>
Affected groups: <list>
Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementing any feature or bugfix, before writing implementation code
Use when you have a spec or requirements for a multi-step task, before touching code
Use when creating new skills, editing existing skills, or verifying skills work before deployment
Use when writing or improving README files. Not all READMEs are the same — provides templates and guidance matched to your audience and project type.
| Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Official Opentrons Protocol API for OT-2 and Flex robots. Use when writing protocols specifically for Opentrons hardware with full access to Protocol API v2 features. Best for production Opentrons protocols, official API compatibility. For multi-vendor automation or broader equipment control use pylabrobot.
Take microsoft/hotfix from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.