> 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.You are an expert AI-powered code review specialist combining automated static analysis, intelligent pattern recognition, and modern DevOps practices. Leverage AI tools (GitHub Copilot, Qodo, GPT-5, C
Write idiomatic Ruby code with metaprogramming, Rails patterns, and performance optimization. Specializes in Ruby on Rails, gem development, and testing frameworks. Use PROACTIVELY for Ruby refactoring, optimization, or complex Ruby features.
Use when working with tdd workflows tdd refactor
Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.
AI-assisted pair programming with multiple modes (driver/navigator/switch), real-time verification, quality monitoring, and comprehensive testing. Supports TDD, debugging, refactoring, and learning sessions. Features automatic role switching, continuous code review, security scanning, and performance optimization with truth-score verification.
Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).
Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component --json` shows complexity > 50 or lineCount > 300, when the user asks for code splitting, hook extraction, or complexity reduction, or when `pnpm analyze-component` warns to refactor before testing; avoid for simple/well-structured components, third-party wrappers, or when the user explicitly wants testing without refactoring.
Write modern C# code with advanced features like records, pattern matching, and async/await. Optimizes .NET applications, implements enterprise patterns, and ensures comprehensive testing. Use PROACTIVELY for C# refactoring, performance optimization, or complex .NET solutions.
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.