microsoft/pr-readiness
> Verify that a pull request into microsoft/vscode-cmake-tools meets contribution requirements. Use when preparing, reviewing, or finalizing a PR to check for a descriptive title, a meaningful description, a properly formatted CHANGELOG entry, code correctness, regression risks, adherence to existing patterns, and whether documentation updates are needed.
npx skills add https://github.com/microsoft/vscode-cmake-tools --skill pr-readiness
The title must clearly and concisely describe the change from the user's perspective. It should:
Good examples:
Fix preset reloading loop when preset files are symlinksAdd "Delete Build Directory and Reconfigure" commandImprove CTest test ordering to match Test Explorer displayBad examples:
Fix bug (too vague)Update code (no useful information)WIP (not ready for review)The PR body must include:
Fixes #1234).Every PR must add an entry to CHANGELOG.md.
Insert the entry under the most recent (topmost) version heading in CHANGELOG.md. The first version heading looks like ## <version> (e.g., ## 1.23). Always add the new entry at the bottom of the appropriate section (i.e., after all existing entries in that section).
Place the entry in exactly one of these three sections, creating the section if it does not already exist under the current version:
| Section | Use when… |
|---|---|
| Features: | A new user-visible capability is added (new command, new setting, new UI element). |
| Improvements: | An existing feature is enhanced, optimized, or has better UX — but no new capability is introduced. |
| Bug Fixes: | A defect is corrected. |
The sections appear in this fixed order: Features:, then Improvements:, then Bug Fixes:.
Each entry follows this pattern:
- <Description>. [#<number>](<link>)
Where <Description> starts with a present-tense verb describing the user-visible change, and the link references either:
#<issue number>#<pr number>An entry may optionally credit an external contributor at the end: @user.
Examples:
Features:
- Add "Delete Build Directory and Reconfigure" command that removes the entire build directory before reconfiguring, ensuring a completely clean state. [#4826](https://github.com/microsoft/vscode-cmake-tools/pull/4826)
Improvements:
- Run tests sequentially in alphabetical order (matching the Test Explorer display order) when `cmake.ctest.allowParallelJobs` is disabled. [#4829](https://github.com/microsoft/vscode-cmake-tools/issues/4829)
Bug Fixes:
- Fix `cmake.revealLog` set to `"focus"` not revealing the output panel or stealing focus. [#4471](https://github.com/microsoft/vscode-cmake-tools/issues/4471)
- Fix garbled characters in the Output panel when MSVC outputs UTF-8 on non-UTF-8 Windows systems. [#4520](https://github.com/microsoft/vscode-cmake-tools/issues/4520) [@contributor](https://github.com/contributor)
Review the code changes for logical correctness:
useCMakePresets branching where appropriate.CMAKE_BUILD_TYPE at configure time) and multi-config generators (--config at build time).await on async calls, and unhandled promise rejections.rollbar.invokeAsync() / rollbar.invoke(). Empty catch blocks are a red flag./ or \\), case-sensitive env var assumptions, or platform-specific APIs used without guards. Paths must use path.join() / path.normalize().Identify areas where the change could break existing behavior:
src/expand.ts, src/proc.ts, src/shlex.ts, or src/util.ts affect many callers — verify all call sites still behave correctly.cmakeDriver.ts propagate to cmakeFileApiDriver.ts, cmakeLegacyDriver.ts, and cmakeServerDriver.ts. Check that subclass overrides are still compatible.presetsController.ts or presetsParser.ts can alter how presets resolve — verify with nested include chains and CMakeUserPresets.json overrides.package.json without updating src/config.ts (or vice versa) causes silent failures.cmakeTaskProvider.ts can break tasks.json definitions that users have already configured.src/api.ts or types in EXTENSIBILITY.md can break dependent extensions.src/drivers/, src/presets/, and src/kits/. See also section 7 (Test Coverage) for detailed test review guidance.Verify the change follows the project's established conventions:
@cmt/* path aliases (not relative paths from outside src/). Uses import * as nls from 'vscode-nls' for localization.logging.createLogger('module-name') — never console.log.localize('message.key', 'Message text') with the vscode-nls boilerplate at the top of the file.ConfigurationReader (src/config.ts) — never calls vscode.workspace.getConfiguration() directly.src/telemetry.ts — never calls the VS Code telemetry API directly.CMakeProject.targets for targets, CMakeDriver.cmakeCacheEntries for cache) — never parses CMake files or cache directly.async/await over .then() chains (exception: fire-and-forget UI calls)..github/copilot-instructions.md). New commands are registered in src/extension.ts.Verify that the PR includes adequate tests for the changes:
test/unit-tests/backend/ and run via yarn backendTests. Tests that require VS Code belong in test/unit-tests/ and run via yarn unitTests. Check that new tests are placed in the correct location.src/drivers/, src/presets/, or src/kits/ — these are critical and should have test coverage for any non-trivial changes.process.platform, each branch should ideally be covered.Check whether the change requires documentation updates:
package.json (contributes.configuration), src/config.ts (ConfigurationReader), and docs/cmake-settings.md.package.json (contributes.commands) and referenced in the relevant docs page under docs/.docs/ pages describing that feature need updating.src/api.ts or public types change, update EXTENSIBILITY.md.README.md should mention it.When reviewing or preparing a PR:
CHANGELOG.md — verify an entry exists under the current version in the correct section with the correct format. If missing, add one.Take microsoft/pr-readiness 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.