一键导入
validate-changes
Run targeted Sampler test scopes to validate changes quickly and safely, then run the full test suite when needed for confidence before PRs.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Run targeted Sampler test scopes to validate changes quickly and safely, then run the full test suite when needed for confidence before PRs.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | validate-changes |
| description | Run targeted Sampler test scopes to validate changes quickly and safely, then run the full test suite when needed for confidence before PRs. |
| argument-hint | What files or areas did you change, and how much validation do you want? |
Run the right Sampler test scope for a change, fast first and broad only when needed.
Sampler/Public or Sampler/Private.Sampler/Classes or Sampler/Enum.Sampler/Templates..build/tasks or build.yaml.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.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.
./build.ps1 -ResolveDependency -Tasks noop
target_test is provided, run only that test file:./build.ps1 -Tasks test -PesterPath '<target_test>' -CodeCoverageThreshold 0
tests/Unit/**.Sampler/Templates/** changed: run template integration tests:./build.ps1 -Tasks test -PesterPath 'tests/Integration/PlasterTemplates' -CodeCoverageThreshold 0
.build/tasks/**, build.yaml, build.ps1): run default test workflow:./build.ps1 -Tasks test
./build.ps1 -Tasks test -PesterPath 'tests/Integration' -CodeCoverageThreshold 0
run_quality_gate is true, run:./build.ps1 -Tasks hqrmtest
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:
$null = New-Item -Path 'output\agentic' -ItemType Directory -Force
./build.ps1 -Tasks test -PesterPath '<paths>' -CodeCoverageThreshold 0 2>&1 |
Tee-Object -FilePath 'output\agentic\test.log'
# Then poll/inspect the log without re-running:
Get-Content output\agentic\test.log -Tail 20
Select-String -Path output\agentic\test.log -Pattern 'Build (FAILED|succeeded)'
Clean up when done: Remove output\agentic once investigation is complete:
Remove-Item -Path 'output\agentic' -Recurse -Force -ErrorAction 'Ignore'
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.
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.ps1 prints a final line like Build 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-Sample and New-SamplerPipeline write to $Error internally 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>:
$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 grep DisplayErrorMessage for the assertion text:
$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.
CHANGELOG.md has an Unreleased entry../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.Return a short summary with:
Sampler/Public/New-SampleModule.ps1 quickly."Sampler/Templates/Sampler/plasterManifest.xml; run the right tests."