gaelcolas/sampler/validate-changes
Claude Code and agent skill by gaelcolas/sampler
- community
Checking that the SKILL.md file is still in the repository.
Run targeted Sampler test scopes to validate changes quickly and safely, then run the full test suite when needed for confidence before PRs.
Install
npx vskill@latest install gaelcolas/sampler/validate-changesSKILL.md
Validate Changes with Sampler Tests
Purpose
Run the right Sampler test scope for a change, fast first and broad only when needed.
Use this skill when
- You changed PowerShell functions under
Sampler/PublicorSampler/Private. - You changed PowerShell classes and enums under
Sampler/ClassesorSampler/Enum. - You changed templates under
Sampler/Templates. - You changed build logic under
.build/tasksorbuild.yaml. - You need a confidence check before opening or updating a PR.
Inputs
changed_paths: list of changed files or folders.target_test: optional single test file path for focused validation.run_quality_gate: optional boolean to run HQRM checks.
Decision flow
Mandatory: every command in this skill must be invoked through./build.ps1. Do not runInvoke-Pesterdirectly, do not callBuild-Moduledirectly, and do not manually prepend anything toPSModulePath. Running./build.ps1 -ResolveDependency -Tasks noop(or any other-Tasksinvocation) is what bootstraps dependencies and wiresPSModulePathfor the current shell so the freshly built module is the one being tested. Direct test/build invocations bypass that setup and may report false results against a stale or incomplete artifact.
- Bootstrap dependencies if needed.
- Command:
- Pick the smallest useful test scope first.
- If
target_testis provided, run only that test file:
- Else if changes are only in a specific function area, run a focused unit test file in
tests/Unit/**.
- Expand based on change type.
- If any file under
Sampler/Templates/**changed: run template integration tests:
- If build/task wiring changed (
.build/tasks/**,build.yaml,build.ps1): run default test workflow:
- Run broad integration only when needed.
- For cross-template or workflow-impacting changes:
- Optional release-quality gate.
- If
run_quality_gateis true, run:
Running these commands without hanging
Always tee ./build.ps1 output to output\agentic\ — this subfolder is excluded from the Clean task so logs survive between builds. Create it first, then stream:
Clean up when done: Remove output\agentic once investigation is complete:
When invoked through the powershell tool, prefer mode="async" with Tee-Object and poll periodically — never tail with | Select -Last N against a still-running build.
Diagnosing failures from XML output
Test failures are recorded in machine-readable XML under output/testResults/. Always read those files instead of grepping the build log — they tell you which tests failed and why.
- The build summary's "N errors" count is not a reliable pass/fail signal.
./build.ps1prints a final line likeBuild completed with errors. 98 tasks, 8 errors, 3 warnings, but this count reflects everything written to the PowerShell error stream during the run — including caught/non-terminating errors that scripts intentionally handle (for example,Add-SampleandNew-SamplerPipelinewrite to$Errorinternally while probing dynamic parameters, even though they catch and continue). A non-zero error count here does not mean any test failed. Always confirm actual failures via the NUnit/HQRM result files below before reporting a failure to the user.
- Pester (`-Tasks test`) writes NUnit XML at
output/testResults/NUnitXml_<ProjectName>_<Version>.<OS>.PSv.<PSVersion>.xml. Each failing assertion is a<test-case result="Failure">node with the assertion message under<failure><message>:
``powershell $latest = Get-ChildItem output\testResults\NUnitXml_*.xml | Sort-Object LastWriteTime -Descending | Select-Object -First 1 [xml]$x = Get-Content $latest.FullName $x.SelectNodes('//test-case[@result="Failure"]') | ForEach-Object { "==FAIL==n$($_.name)n$($_.failure.message)n" } ```
- HQRM (`-Tasks hqrmtest`) writes a CliXml-serialized Pester run object at
output/testResults/DscTestObject_DscTest_<ProjectName>_<Version>.<OS>.PSv.<PSVersion>.xml. This is not NUnit XML — XPath against<test-case>returns nothing. Look for<S N="Result">Failed</S>and read surrounding context, or grepDisplayErrorMessagefor the assertion text:
``powershell $f = Get-ChildItem output\testResults\DscTestObject_DscTest_*.xml | Sort-Object LastWriteTime -Descending | Select-Object -First 1 $lines = Get-Content $f.FullName foreach ($h in Select-String -Path $f.FullName -Pattern '"Result">Failed') { "===line $($h.LineNumber)===" $lines[($h.LineNumber - 1)..($h.LineNumber + 20)] -join "n" } Select-String -Path $f.FullName -Pattern 'DisplayErrorMessage' ```
Skip aggregate Result=Failed nodes (run/container totals) — real test failures sit alongside an <S N="ItemType">Test</S>, an ErrorRecord, and a ScriptBlock.
- Always pick the latest result file (
Sort-Object LastWriteTime -Descending); each invocation rewrites these XML files. - When reporting a failure to the user, quote the XML's assertion message — do not paraphrase the build-log tail.
Completion checks
- All selected test commands exit successfully.
- For template changes: corresponding integration tests pass.
- For public/private function changes: relevant unit tests pass.
- If behavior is user-visible: ensure
CHANGELOG.mdhas anUnreleasedentry. - Before declaring work complete on any PR-bound change, run the full `./build.ps1 -Tasks test` suite (not just focused tests). Focused tests validate the changed scope; the full suite catches HQRM, ScriptAnalyzer, help quality, and test-coverage regressions that focused runs skip. A focused run passing is a necessary but not sufficient condition for readiness.
Report format
Return a short summary with:
- Commands run
- Pass/fail per scope
- Any failing test file paths
- Suggested next command (if failures occurred)
Example prompts
- "Validate my edits in
Sampler/Public/New-SampleModule.ps1quickly." - "I changed
Sampler/Templates/Sampler/plasterManifest.xml; run the right tests." - "Run full validation for my current branch, including HQRM."
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.github/skills/validate-changes/SKILL.md
Popularity
- Repository stars
- 239
- Repository forks
- 46
- 7-day trend score
- 27
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/gaelcolas/sampler/validate-changes)