PR

pr-readiness

Validates PRs meet contribution standards for VS Code CMake Tools.

Install

mkdir -p .claude/skills/pr-readiness && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/10421" && unzip -o skill.zip -d .claude/skills/pr-readiness && rm skill.zip

Installs to .claude/skills/pr-readiness

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

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.
355 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Beginner

Key capabilities

  • Verify PR title format
  • Validate PR description content
  • Check CHANGELOG entry format
  • Review code correctness
  • Identify regression risks

How it works

It audits the PR against a checklist covering title, description, CHANGELOG, correctness, regression risks, and documentation.

Inputs & outputs

You give it
Pull request
You get back
Readiness checklist report

When to use pr-readiness

  • Preparing PRs for submission
  • Reviewing PR standards
  • Validating contribution requirements

About this skill

PR Readiness

PR Requirements Checklist

1. PR Title

The title must clearly and concisely describe the change from the user's perspective. It should:

  • Start with a verb (e.g., "Fix", "Add", "Improve", "Remove", "Update").
  • Mention the affected feature or area (e.g., presets, kits, CTest, build tasks, Project Outline).
  • Be specific enough that a reader understands the change without opening the PR.

Good examples:

  • Fix preset reloading loop when preset files are symlinks
  • Add "Delete Build Directory and Reconfigure" command
  • Improve CTest test ordering to match Test Explorer display

Bad examples:

  • Fix bug (too vague)
  • Update code (no useful information)
  • WIP (not ready for review)

2. PR Description

The PR body must include:

  • What changed: A short summary of the user-visible behavior change.
  • Why: The motivation — link to a GitHub issue if one exists (e.g., Fixes #1234).
  • How (if non-obvious): A brief explanation of the implementation approach when the change is complex.

3. CHANGELOG Entry

Every PR must add an entry to CHANGELOG.md.

Where to insert

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).

Which section

Place the entry in exactly one of these three sections, creating the section if it does not already exist under the current version:

SectionUse 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:.

Entry format

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:

  • The GitHub issue it solves: [#<issue number>](https://github.com/microsoft/vscode-cmake-tools/issues/<issue number>)
  • Or the PR itself: [#<pr number>](https://github.com/microsoft/vscode-cmake-tools/pull/<pr number>)

An entry may optionally credit an external contributor at the end: [@user](https://github.com/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)

What NOT to do

  • Do not add a new version heading — use the existing topmost one.
  • Do not place the entry under an older version.
  • Do not use past tense (write "Fix …", not "Fixed …").
  • Do not omit the issue or PR link.

4. Correctness

Review the code changes for logical correctness:

  • Both operating modes: If the change touches shared logic (configure, build, test, targets, environment), verify it handles both presets mode and kits/variants mode. Check for useCMakePresets branching where appropriate.
  • Both generator types: If the change involves build-type logic, verify it handles both single-config generators (CMAKE_BUILD_TYPE at configure time) and multi-config generators (--config at build time).
  • Edge cases: Look for off-by-one errors, null/undefined access, missing await on async calls, and unhandled promise rejections.
  • Error handling: Verify errors are not silently swallowed. Top-level event handlers should use rollbar.invokeAsync() / rollbar.invoke(). Empty catch blocks are a red flag.
  • Cross-platform: Check for hardcoded path separators (/ or \\), case-sensitive env var assumptions, or platform-specific APIs used without guards. Paths must use path.join() / path.normalize().

5. Regression Risks

Identify areas where the change could break existing behavior:

  • Shared utilities: Changes to src/expand.ts, src/proc.ts, src/shlex.ts, or src/util.ts affect many callers — verify all call sites still behave correctly.
  • Driver base class: Changes to cmakeDriver.ts propagate to cmakeFileApiDriver.ts, cmakeLegacyDriver.ts, and cmakeServerDriver.ts. Check that subclass overrides are still compatible.
  • Preset merging: Changes to presetsController.ts or presetsParser.ts can alter how presets resolve — verify with nested include chains and CMakeUserPresets.json overrides.
  • Settings: Adding or renaming a setting in package.json without updating src/config.ts (or vice versa) causes silent failures.
  • Task provider: Changes to cmakeTaskProvider.ts can break tasks.json definitions that users have already configured.
  • Public API / extensibility: Changes to exports in src/api.ts or types in EXTENSIBILITY.md can break dependent extensions.
  • Test coverage: Flag changes to critical paths that lack corresponding test updates, especially in src/drivers/, src/presets/, and src/kits/. See also section 7 (Test Coverage) for detailed test review guidance.

6. Adherence to Existing Patterns

Verify the change follows the project's established conventions:

  • Import style: Uses @cmt/* path aliases (not relative paths from outside src/). Uses import * as nls from 'vscode-nls' for localization.
  • Logging: Uses logging.createLogger('module-name') — never console.log.
  • Localization: All user-visible strings use localize('message.key', 'Message text') with the vscode-nls boilerplate at the top of the file.
  • Settings access: Reads settings through ConfigurationReader (src/config.ts) — never calls vscode.workspace.getConfiguration() directly.
  • Telemetry: Uses helpers from src/telemetry.ts — never calls the VS Code telemetry API directly.
  • Data access: Uses canonical data paths (e.g., CMakeProject.targets for targets, CMakeDriver.cmakeCacheEntries for cache) — never parses CMake files or cache directly.
  • Async patterns: Prefers async/await over .then() chains (exception: fire-and-forget UI calls).
  • Naming and structure: New files are placed in the correct layer directory (see architecture table in .github/copilot-instructions.md). New commands are registered in src/extension.ts.

7. Test Coverage

Verify that the PR includes adequate tests for the changes:

  • New functionality: Any new function, command, setting, or behavior branch should have corresponding tests. If the change adds a new helper or utility, check that it has unit tests covering its inputs and edge cases.
  • Bug fixes: A bug fix should include at least one test that would have caught the original bug — i.e., a test that fails on the base branch and passes with the fix applied.
  • Changed behavior: If existing behavior is modified, check that existing tests are updated to reflect the new behavior and that no tests are silently broken or deleted without justification.
  • Test location: Unit tests that don't require VS Code APIs belong in 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.
  • Test quality: Tests should be specific and descriptive:
    • Test names should clearly state what is being tested and the expected outcome.
    • Tests should assert specific values, not just "no error thrown".
    • Tests should cover both positive cases (expected input → expected output) and negative/edge cases (invalid input, boundary conditions, fallback paths).
    • Comments in tests should be accurate and not misleading about what the test actually exercises.
  • Coverage gaps to flag: Pay special attention to:
    • Code paths that touch src/drivers/, src/presets/, or src/kits/ — these are critical and should have test coverage for any non-trivial changes.
    • Fallback/error paths — if the PR adds a fallback (e.g., "if X fails, try Y"), both the success and fallback paths should be tested.
    • Platform-specific branches — if the code branches on process.platform, each branch should ideally be covered.
  • When tests are not feasible: Some changes (e.g., pure UI wiring, VS Code API integration) are difficult to unit test. In these cases, verify that the manual-checklist or PR description explains how to manually verify the change, and flag the gap rather than ignoring it.

8. Documentation Updates

Check whether the change requires documentation updates:

  • New or changed settings: Must be reflected in all three locations — package.json (contributes.configuration), src/config.ts (ConfigurationReader), and docs/cmake-settings.md.
  • New commands: Must be documented in package.json (contributes.commands) and referenced in the relevant docs page under docs/.
  • User-visible behavior changes: If the change alters how a feature works (not just fixes a bug), check whether docs/ pages describing that feature need updating.
  • Extensibility changes: If src/api.ts or public types change, update `EXTENSIBI

Content truncated.

When not to use it

  • Editing build tooling

Limitations

  • Requires manual verification of some edge cases
  • Does not automate documentation generation

How it compares

This provides a complete, project-specific readiness gate compared to generic PR checklists.

Compared to similar skills

pr-readiness side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
pr-readiness (this skill)03moNo flagsBeginner
deepwiki-rs259moReviewIntermediate
python-code-style96moReviewIntermediate
code-review-excellence195moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by microsoft

View all by microsoft

You might also like

deepwiki-rs

sopaco

AI-powered Rust documentation generation engine for comprehensive codebase analysis, C4 architecture diagrams, and automated technical documentation. Use when Claude needs to analyze source code, understand software architecture, generate technical specs, or create professional documentation from any programming language.

25170

python-code-style

wshobson

Python code style, linting, formatting, naming conventions, and documentation standards. Use when writing new code, reviewing style, configuring linters, writing docstrings, or establishing project standards.

971

code-review-excellence

wshobson

Master effective code review practices to provide constructive feedback, catch bugs early, and foster knowledge sharing while maintaining team morale. Use when reviewing pull requests, establishing review standards, or mentoring developers.

1958

code-walk-thru

pchalasani

Use this when user wants you to walk through (code or text) files in a EDITOR to either explain how some code works, or to show the user what changes you made, etc. You would typically use this repeatedly to show the user your changes or code files one by one, sometimes with specific line-numbers. This way the user is easily able to follow along in their favorite EDITOR as you point at various files possibly at specific line numbers within those files.

670

cookbook-audit

anthropics

Audit an Anthropic Cookbook notebook based on a rubric. Use whenever a notebook review or audit is requested.

568

schema-markup

davila7

When the user wants to add, fix, or optimize schema markup and structured data on their site. Also use when the user mentions "schema markup," "structured data," "JSON-LD," "rich snippets," "schema.org," "FAQ schema," "product schema," "review schema," or "breadcrumb schema." For broader SEO issues, see seo-audit.

1042

Search skills

Search the agent skills registry