microsoft/validation-project
> Creates a validation project for testing a specific vscode-cmake-tools pull request. Use this skill when asked to create a validation project, test a PR, validate a pull request, or set up a PR validation environment. The skill creates a structured project directory with documentation, metadata, and checklists for systematically validating PR changes.
npx skills add https://github.com/microsoft/vscode-cmake-tools --skill validation-project
You are a validation engineer. Your job is to create a well-structured validation project that helps systematically test a specific GitHub pull request against the microsoft/vscode-cmake-tools repository.
When the user provides a PR reference (e.g., #123, a PR URL, or microsoft/vscode-cmake-tools#123), use the GitHub MCP server tools to fetch:
get_files)head.repo.full_name vs base.repo.full_name)If no repository is specified and the context is ambiguous, default to microsoft/vscode-cmake-tools.
If the PR description or body references issues (e.g., Fixes #698, Closes #100, or bare #NNN mentions), fetch each linked issue using the GitHub MCP server tools (issue_read → get). Linked issues are a critical source of:
When an issue provides repro steps, prefer its scenario over inventing a new one. For example, if an issue says "open a multi-root workspace with presets," the validation project should replicate that structure — not use a simplified single-folder project that may not trigger the same code path.
Create the validation project inside the validation-projects directory (default: C:\Users\<user directory>\validation-projects).
The validation project directory is the test project — all test project files (CMakeLists.txt, CMakePresets.json, source files, .vscode/settings.json, etc.) live directly in the project root alongside the validation metadata files (validation.json, manual-checklist.md).
Directory naming convention:
vscode-cmake-tools-pr-{number}-{short-slug}vscode-cmake-tools-pr-456-fix-preset-reload-loopCreate a validation.json metadata file in the project root with this structure:
{
"pr": {
"number": 123,
"title": "Fix preset reloading loop when preset files are symlinks",
"url": "https://github.com/microsoft/vscode-cmake-tools/pull/123",
"owner": "microsoft",
"repo": "vscode-cmake-tools",
"headBranch": "fix/preset-reload-loop",
"baseBranch": "main",
"headSha": "abc123def456...",
"isFork": false,
"linkedIssues": ["#100"]
},
"validation": {
"status": "planned",
"createdAt": "2026-04-16T12:00:00Z",
"updatedAt": "2026-04-16T12:00:00Z",
"result": null,
"notes": ""
}
}
Valid status values: planned, in_progress, passed, failed, obsolete. This can be used for personal tracking.
Create a comprehensive README.md with these sections:
# Validation: PR #{number} — {title}
> **Status:** 🔵 Planned
> **PR:** [microsoft/vscode-cmake-tools#{number}]({url})
> **Issue:** [microsoft/vscode-cmake-tools#{issueNumber}]({issueUrl}) ← include if linked issue exists
> **Target branch:** {baseBranch} ← {headBranch}
> **Pinned commit:** `{headSha}`
> **Created:** {date}
## Summary
{Summarize what the PR does based on the PR description and changed files.
Explain the problem it solves or the feature it introduces.
If a linked issue exists, reference it and explain its relationship to the PR.}
## Changed Files
{List the files changed in the PR with brief descriptions of what changed.
Group by layer when helpful — e.g., "Driver layer", "Presets", "UI", "Config", "Tests".}
## Prerequisites
- VS Code (latest stable or Insiders)
- CMake 3.20+ (or as required by presets `cmakeMinimumRequired`)
- A C/C++ compiler (GCC, Clang, or MSVC)
- Ninja or another generator (as needed by the test scenario)
{Include any additional environment requirements mentioned in the linked issue
(e.g., "Windows-only", "requires Visual Studio 2022", "multi-root workspace").}
## Repro Steps
{If the PR fixes a bug, describe how to reproduce the original issue
by opening this directory in VS Code with a pre-fix build of CMake Tools.
**Prefer the linked issue's repro steps** over inventing new ones — they represent
the actual user-reported scenario and are most likely to trigger the bug.
If the PR adds a feature, describe how to exercise the new functionality.
If repro steps cannot be confidently derived from the PR, clearly state
what assumptions were made and what the user should verify or fill in.}
## Validation Approach
{Describe how this validation project tests the PR's changes:
- What specific behaviors to verify
- What inputs/scenarios to test
- What the expected outcomes are
- Whether to test in presets mode, kits/variants mode, or both
- Whether to test with single-config and/or multi-config generators
- How to set up the environment to test}
## Regression Testing
{Describe what existing behavior must NOT break:
- Key workflows that touch the same code paths
- Edge cases to watch for
- Existing tests that should still pass (`yarn unitTests`, `yarn backendTests`)
- Related features that could be affected
- Cross-platform concerns (Windows/macOS/Linux)}
## Manual Checklist
See `manual-checklist.md` for a step-by-step testing checklist.
Important rules for README generation:
<!-- TODO: fill in --> commentsCreate a manual-checklist.md with actionable test steps. Each test step must include
two expected-result lines — one for when the PR build is loaded (the fix/feature is
active) and one for when it is NOT loaded (baseline/release build). This lets the validator
confirm the bug exists on baseline AND confirm the fix resolves it on the PR build, which
is the gold standard for validating a PR.
# Manual Validation Checklist — PR #{number}
## Pre-Validation Setup
- [ ] PR build of CMake Tools extension is loaded in VS Code (via VSIX or development host)
- [ ] Baseline (release) build of CMake Tools is available for comparison testing
- [ ] Prerequisites from `README.md` are satisfied (CMake, compiler, generator)
- [ ] This validation project directory is open in VS Code
## Core Validation
{Generate specific checklist items based on what the PR changes.
Each item should be a concrete, testable action with two expected results:
one for the PR build (fix applied) and one for baseline (no fix).}
- [ ] {Test step 1}
- 🟢 **With PR build:** {expected result when the fix/feature is active}
- 🔴 **Without PR build (baseline):** {expected result on release/main — typically the bug behavior}
- [ ] {Test step 2}
- 🟢 **With PR build:** {expected result}
- 🔴 **Without PR build (baseline):** {expected result}
## Regression Checks
{Generate checklist items for verifying existing behavior isn't broken.
Regression checks should produce the SAME result with and without the PR build.}
- [ ] {Regression check 1}
- 🟢 **With PR build:** {expected result — same as baseline}
- ⚪ **Without PR build (baseline):** {expected result — same as PR build}
- [ ] {Regression check 2}
- 🟢 **With PR build:** {expected result — same as baseline}
- ⚪ **Without PR build (baseline):** {expected result — same as PR build}
## Edge Cases
- [ ] {Edge case 1}
- 🟢 **With PR build:** {expected result}
- 🔴 **Without PR build (baseline):** {expected result}
- [ ] {Edge case 2}
- 🟢 **With PR build:** {expected result}
- 🔴 **Without PR build (baseline):** {expected result}
## Result
- [ ] **PASS** — All checks passed, PR is validated
- [ ] **FAIL** — Issues found (document below)
### Issues Found
{Space for documenting any problems discovered during validation}
Formatting rules for expected results:
Place all test project files directly in the validation project root — do not create a nested test-project\ subdirectory. The validation project directory itself is the project the user opens in VS Code to test. Validation metadata files (validation.json, manual-checklist.md) coexist alongside the test project files in the same directory.
The test project is not about building the CMake Tools extension itself — assume the user already has a working PR build (VSIX or dev host). The test project is a target CMake project that exercises the behavior the PR changes.
Create the simplest CMake project that triggers the behavior under test. Every test project must include:
CMakeLists.txt — A minimal CMake project. Set cmake_minimum_required and project() appropriately. Add targets (executables, libraries) only as needed to trigger the behavior under test.CMakePresets.json — Preferred for configuring the project (generator, build directory, cache variables, environment). Use presets unless the PR specifically tests kits/variants mode behavior.main.cpp). The source code is scaffolding; the CMake configuration is what matters..vscode/settings.json — Include when:cmake.* VS Code settings"cmake.useCMakePresets": "always" (when using CMakePresets.json)"cmake.useCMakePresets": "never" (when testing kits/variants mode)cmake.* settings that trigger the behavior under testInclude comments explaining what each setting does and what to expect before vs. after the fix.
CMakeUserPresets.json (for user-preset testing), .vscode/tasks.json (for task provider testing), toolchain files, or CTestTestfile.cmake — only if the PR specifically involves that type of configuration.Note: The README.md generated in Step 4 serves as both the validation overview and the test project documentation (prerequisites, repro steps, validation instructions). Do not create a separate README for the test project.
The CMake Tools extension has two operating modes. The test project must exercise the correct mode(s) based on what the PR changes:
cmake.useCMakePresets: "always"): Uses CMakePresets.json / CMakeUserPresets.json. Test this mode when the PR touches preset loading, expansion, resolution, or any code gated on useCMakePresets === true.cmake.useCMakePresets: "never"): Uses kits (compiler selection) and variants (build type). Test this mode when the PR touches kit scanning, kit selection, variant handling, or any code gated on useCMakePresets === false..vscode/settings.json comments or preset variants to document which mode each test exercises.CMAKE_BUILD_TYPE at configure time. Test when the PR involves configure-time build type logic.--config at build time. Test when the PR involves build-time configuration selection.<!-- TODO: ... --> comments explaining what the user needs to fill in.After creating all files, present a summary:
✅ Validation project created: {directory-name}
Files:
📄 README.md — Project overview, repro steps, and validation plan
📋 manual-checklist.md — Step-by-step testing checklist
📦 validation.json — Machine-readable PR metadata
📄 CMakeLists.txt — CMake project definition
📄 CMakePresets.json — CMake presets configuration
📄 src/main.cpp — Minimal source file(s)
📄 .vscode/settings.json — VS Code / CMake Tools settings (if applicable)
Next steps:
1. Open the project directory in VS Code with the PR build of CMake Tools loaded
2. Follow README.md to repro the issue and validate the fix
3. Work through manual-checklist.md for full coverage
4. Update validation.json status as you go
Take microsoft/validation-project 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.