Environment Setup
Norman-bury/research-writing-skill
A skill your agent uses when Python environment setup is needed for data visualization or conda installation is required
Validate TestFx shipping paths and capable CI execution using packed consumers, package/cache provenance, exact exits and artifacts, and selected-versus-executed test evidence.
$ npx skills add microsoft/testfx --skill testfx-acceptance-validation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install microsoft/testfx testfx-acceptance-validation --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/microsoft/testfx.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/testfx-acceptance-validation .claude/skills/testfx-acceptance-validation && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "testfx-acceptance-validation" agent skill from https://github.com/microsoft/testfx/tree/main/.github/skills/testfx-acceptance-validation into .claude/skills/testfx-acceptance-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testfx-acceptance-validation", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/microsoft/testfx/tree/main/.github/skills/testfx-acceptance-validationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add microsoft/testfx --skill testfx-acceptance-validation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install microsoft/testfx testfx-acceptance-validation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/testfx.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/testfx-acceptance-validation .agents/skills/testfx-acceptance-validation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "testfx-acceptance-validation" agent skill from https://github.com/microsoft/testfx/tree/main/.github/skills/testfx-acceptance-validation into .agents/skills/testfx-acceptance-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testfx-acceptance-validation", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/testfx --skill testfx-acceptance-validation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install microsoft/testfx testfx-acceptance-validation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/testfx.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/testfx-acceptance-validation .cursor/skills/testfx-acceptance-validation && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "testfx-acceptance-validation" agent skill from https://github.com/microsoft/testfx/tree/main/.github/skills/testfx-acceptance-validation into .cursor/skills/testfx-acceptance-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testfx-acceptance-validation", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/microsoft/testfx.git --path .github/skills/testfx-acceptance-validation--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add microsoft/testfx --skill testfx-acceptance-validation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install microsoft/testfx testfx-acceptance-validation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/testfx.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/testfx-acceptance-validation .gemini/skills/testfx-acceptance-validation && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "testfx-acceptance-validation" agent skill from https://github.com/microsoft/testfx/tree/main/.github/skills/testfx-acceptance-validation into .gemini/skills/testfx-acceptance-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testfx-acceptance-validation", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install microsoft/testfx testfx-acceptance-validationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add microsoft/testfx --skill testfx-acceptance-validation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/microsoft/testfx.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/testfx-acceptance-validation .github/skills/testfx-acceptance-validation && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "testfx-acceptance-validation" agent skill from https://github.com/microsoft/testfx/tree/main/.github/skills/testfx-acceptance-validation into .github/skills/testfx-acceptance-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testfx-acceptance-validation", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/testfx --skill testfx-acceptance-validation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install microsoft/testfx testfx-acceptance-validation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/testfx.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/testfx-acceptance-validation .opencode/skills/testfx-acceptance-validation && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "testfx-acceptance-validation" agent skill from https://github.com/microsoft/testfx/tree/main/.github/skills/testfx-acceptance-validation into .opencode/skills/testfx-acceptance-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testfx-acceptance-validation", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
testfx-acceptance-validationValidate TestFx shipping paths and capable CI execution using packed consumers, package/cache provenance, exact exits and artifacts, and selected-versus-executed test evidence.
Testfx Acceptance Validation is an agent skill from microsoft/testfx, published by the product's own GitHub organization. Validate TestFx shipping paths and capable CI execution using packed consumers, package/cache provenance, exact exits and artifacts, and selected-versus-executed test evidence. Use for acceptance regressions, package/MSBuild/launcher/protocol changes, or skipped-only CI results; not for unrelated unit-only or documentation changes.
Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including scripts (for example `scripts/test_verify_execution.py` and `scripts/verify_execution.py`).
It works with Python and PowerShell. The repository describes itself as: This repository holds the source code of Microsoft.Testing.Platform (MTP), a lightweight alternative to VSTest, as well as MSTest adapter and framework. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 19d717a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythondotnetFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Testfx Acceptance Validation loads about 4.7k tokens when it runs. Until then it costs about 91 tokens; SKILL.md has 1,852 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from microsoft/testfx at commit 19d717a, republished under its MIT licence (© microsoft). 1,852 words, ~4,670 tokens.
.claude/skills/testfx-acceptance-validation/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Produce evidence that the changed product ships correctly and that the intended regressions execute. A successful build, discovered tests, published TRX, or green job alone is not proof. Keep the work bounded to the changed contract.
The Python execution gate is a measured exception to the repository's conditional PowerShell preference. A native PowerShell candidate did not meet the no-performance-regression condition for the documented standalone CLI path. On Windows with Python 3.12.10 and PowerShell 7.6.6, three warmups followed by 15 interleaved fresh-process samples per workload produced these medians, including process startup:
| Workload | Python median, ms | PowerShell candidate median, ms |
|---|---|---|
| Empty runtime startup | 76 | 528 |
| One passed case | 208 | 898 |
| 29 skipped cases | 200 | 819 |
| 1,000 passed cases | 222 | 1,330 |
| 10,000 passed cases | 222 | 3,882 |
| 10,000 failed cases | 305 | 3,983 |
Retain the existing gate and all 16 regression scenarios rather than accepting that slowdown or weakening validation. This feasibility assessment does not establish complete feature/security parity, compare a warmed persistent host, or prove that every PowerShell implementation or other OS is slower. A future port must preserve the same input-validation and failure contracts, demonstrate feature/security parity, and avoid a performance regression on the supported invocation paths, including startup where applicable.
Before implementation, record the following in the session or existing PR evidence, not a new repository planning file:
| Decision | Required detail |
|---|---|
| Producer and consumer | Owning projects, exact NuGet IDs/versions, shipping binaries/sidecars/extensions, TFM/RID/architecture, SDK, and release branch that must work together. |
| Lifecycle | Who launches, connects, cancels, disposes, and cleans up; required handshake and intentionally absent handshake; unsupported/undeclared versus explicitly disabled capability. |
| Observable result | Exact parent and child exits, selected test identities/counts, expected artifacts/content, and fallback rules. An outer acceptance test can pass while asserting an intentionally failing child. |
| Scope | One representative real consumer per changed boundary; additional scenarios only where the change can affect them. Explain material exclusions. |
| Delivery owner | One owner through dependency flow, downstream rollout, release-branch proof/backports, and removal of temporary flags/denylists. |
An assertion-only change can need just its focused unit test. A package layout, MSBuild launcher, process/protocol, SDK, or independently shipped component change needs a packed consumer, not just mocks or in-repo project references. For an SDK integration, a fake SDK is useful protocol coverage but cannot replace the real shipping SDK invocation.
Before enabling a downstream feature, validate the branch/packages that will ship and decide whether supported release branches need servicing/backports. A rollout flag does not replace compatibility or composed-product proof.
Use this risk table to choose cases, not to impose a full matrix on every change:
| Changed boundary | Representative proof |
|---|---|
| Package/targets | Inspect actual .nupkg entries and restore a generated consumer; assert resolved props/targets/runtime assets and aligned dependencies. |
| CLI/launcher/routing | Real execution plus discovery (--list-tests); help/info if changed; a named launch profile with distinctive arguments/environment if profile routing is affected. Assert the marker/filter reaches the actual packaged host/sidecar, not merely the outer command. |
| Handshake/capability | Normal handshake, intentionally suppressed/no-handshake path, and one old/incompatible consumer when relevant. A successful no-work child must not become a false parent failure; a missing required handshake must not become false success. |
| Failure/fallback | Nonzero child exit, zero-result selection, partial/missing input, and missing/stale/incompatible data where fallback is supported. Assert which work actually runs, not only a message saying fallback ran. |
| Orchestration | Cancellation with bounded teardown and one mixed-success multi-module/TFM run. Verify every module's artifacts and the aggregate parent exit; do not let one passed module conceal a missing or failed module. |
Run from the worktree root. Use .\build.cmd -pack -c Release -bl on Windows
(./build.sh -pack -c Release -bl on Linux/macOS). Capture the exit immediately and
stop on failure. Repack after every source change. Do not pack/build concurrently
against the same outputs. Do not run the full integration matrix solely to validate
this skill or another documentation-only change.
Inspect these current sources before adapting commands:
| Source | What it establishes |
|---|---|
global.json, eng\Versions.props, Directory.Packages.props | Pinned repository SDK/runtime and dependency versions. Do not substitute a globally installed SDK. |
test\Utilities\Microsoft.Testing.TestInfrastructure\Constants.cs | Configuration-matched artifacts\packages\<Configuration>\Shipping, NonShipping, and artifacts\tmp\<Configuration>\packages feeds. |
test\Utilities\Microsoft.Testing.TestInfrastructure\TestAsset.cs | Generated NuGet.config, local feeds, and public-feed/source-mapping behavior. A local feed in the config alone does not prove the resolved package came from it. |
test\IntegrationTests\Microsoft.Testing.Platform.Acceptance.IntegrationTests\Helpers\AcceptanceFixture.cs | A fresh random .packages cache for generated consumers each assembly run. The fixture also links into MSTest acceptance. |
test\Utilities\Microsoft.Testing.TestInfrastructure\TestAssetFixtureBase.cs, AcceptanceSourceGen.cs, TestHost.cs | Generated builds and separate reflection/source-generation outputs. Building a variant is not evidence that a test executed that variant. |
test\Directory.Build.targets | MTP diagnostics/reporting and UsingDotNetTest=true wiring for TRX/results directories. |
Record commit/dirty source state, pack configuration/exit, exact package filenames
and SHA-256 hashes, consumer restore/build command, generated obj\project.assets.json
and *.nuget.g.props/*.nuget.g.targets, and loaded/executed binary paths. Check
package IDs/versions, restore packageFolders, chosen TFM/RID assets, and physical
package/binary content. Compare relevant cached package payloads with the current
pack; same version does not imply same bits. Keep MSTest and MTP version families
distinct while checking alignment within each contract.
The outer acceptance runner may reference source projects; the inner generated
consumer must consume the shipping package for the boundary under test.
TestAsset.GenerateAssetAsync, DotnetCli.RunAsync, TestHost.LocateFrom, and
TestHost.ExecuteAsync are existing building/launching helpers. Prefer them over
new ad-hoc runners, but assert the real shipping layout when apphost versus DLL,
published output, controller, or package identity matters.
Useful existing examples are WindowsApplicationModelPackageTests (physical
package entries), PackagedAppIntegrationTests (real packed consumer targets,
custom/suppressed launchers, incompatible payloads, and multi-target exits), and
PackagedWinUITests (real activation, package identity, native shipping SDK, and
TRX). The first two are under MSTest acceptance; the last is under MTP acceptance.
For CLI descriptions, update the corresponding HelpInfoTests and
HelpInfoAllExtensionsTests expectations rather than testing only option parsing.
For an independently constructed consumer, use a unique run-owned NUGET_PACKAGES
cache and explicit feeds; do not clear shared/global caches. The existing acceptance
fixture already isolates generated-consumer restores. CI's outer runner uses
eng\pipelines\variables\test-env-vars.yml (DOTNET_ROOT=.dotnet,
NUGET_PACKAGES=.packages); distinguish that cache from the inner fixture's cache.
When a consumer uses a different SDK, invoke the outer acceptance project through
dotnet test, not only its apphost. The CLI exports MSBuildSDKsPath,
MSBuildExtensionsPath, and DOTNET_ROOT_X64 to the test host. A child global.json
and a successful dotnet --version do not prevent mixed-SDK targets/task loading.
Use AcceptanceTestBase.ConfigureDotnetSdkEnvironment for the isolated native
SDK, preserving shared cache/tooling settings. Verify actual build provenance
(NETCoreSdkVersion, MSBuildToolsPath, extensions and SDK paths) alongside the
real packaged-host results.
Keep CI's DOTNET_CLI_CONTEXT_VERBOSE=1 enabled during native CLI validation.
SDK tracing can name the sidecar executable even when help/discovery correctly
comes from the activated host, and ANSI color/reset-only lines can interrupt an
otherwise deterministic block. Normalize presentation only, preserve the
diagnostics, and assert host usage or the delimited JSON payload rather than
requiring the entire mixed CLI output to be a payload.
This Windows example runs one existing packed-package regression. It is a package layout check, not evidence of real UWP/WinUI activation. Adapt the project/filter and expected names for the changed contract. Use a unique results directory, retain logs/binlogs, and do not infer expectations from the report being verified.
# After the successful configuration-matched pack above.
$project = 'test\IntegrationTests\MSTest.Acceptance.IntegrationTests\MSTest.Acceptance.IntegrationTests.csproj'
$case = 'PackedMSTestTestAdapter_ContainsRequiredWindowsApplicationModelAssets'
$results = Join-Path (Get-Location).Path ('artifacts\TestResults\Release\acceptance-' + [Guid]::NewGuid().ToString('N'))
New-Item -ItemType Directory -Path $results | Out-Null
$packages = @(Get-ChildItem -LiteralPath artifacts\packages\Release\Shipping `
-Filter 'MSTest.TestAdapter.*.nupkg' -File)
if ($packages.Count -ne 1) { throw "Expected one current adapter package, found $($packages.Count)." }
$packages | Get-FileHash -Algorithm SHA256 | ConvertTo-Json |
Set-Content -LiteralPath "$results\package-provenance.json" -Encoding UTF8
& .\.dotnet\dotnet.exe build $project -c Release "-bl:$results\build.binlog"
if ($LASTEXITCODE -ne 0) { throw "Acceptance build failed: $LASTEXITCODE" }
$filter = "FullyQualifiedName~WindowsApplicationModelPackageTests.$case"
# Blank these global properties so discovery does not inherit execution-only reporters.
& .\.dotnet\dotnet.exe test --project $project -c Release --no-build `
--list-tests --filter $filter -p:UsingDotNetTest=true `
-p:TestingPlatformCommandLineArguments= -p:TestRunnerAdditionalArguments= `
"-bl:$results\discovery.binlog" 2>&1 | Tee-Object -FilePath "$results\discovery.log"
$discoveryExit = $LASTEXITCODE
if ($discoveryExit -ne 0) { throw "Acceptance discovery failed: $discoveryExit" }
# Reconcile discovery.log with the one source-declared case before executing.
# The plan comes from source/data rows and independent discovery, not this run's TRX.
$expectedPath = Join-Path $results 'expected-tests.json'
ConvertTo-Json -InputObject @($case) | Set-Content -LiteralPath $expectedPath -Encoding UTF8
$started = [DateTimeOffset]::UtcNow.ToString('o')
& .\.dotnet\dotnet.exe test --project $project -c Release --no-build `
--filter $filter `
-p:UsingDotNetTest=true "-p:ArtifactsTestResultsDir=$results" `
"-bl:$results\test.binlog" --show-test-results all `
2>&1 | Tee-Object -FilePath "$results\execution.log"
$testExit = $LASTEXITCODE
$reports = @(Get-ChildItem -LiteralPath $results -Filter '*.trx' -File)
if ($reports.Count -ne 1) { throw "Expected one outer acceptance TRX, found $($reports.Count). Exit: $testExit" }
python .github\skills\testfx-acceptance-validation\scripts\verify_execution.py `
--trx $reports[0].FullName --expected-tests $expectedPath `
--started-after $started --process-exit-code $testExit
if ($LASTEXITCODE -ne 0) { throw 'Acceptance execution proof failed.' }The verifier is standard-library Python and checks one outer acceptance TRX
per module/TFM. The JSON plan is a nonempty array of exact TRX testName strings,
including data-row display names and multiplicity. Establish them from source,
data expansion, and separate discovery; reconcile discovery with the plan before
execution. Neither --list-tests nor a list copied from a passing report proves
execution. Record discovery's own exit/output and use the same selector for the run.
The output distinguishes planned, reported-selected, executed, passed, failed, and
skipped counts. It requires all planned cases to be present and passed, consistent
counters, a fresh run start, unique execution IDs, and outer exit zero. Zero tests,
NotExecuted/inconclusive/skipped results, missing modules, stale artifacts, and a
nonzero exit fail the gate. Run it separately for each planned module with that
module's expected names; aggregate success only after every gate passes. Legitimate
unrelated skips belong in a separate selection/report, not a lowered proof bar.
For negative/discovery/help-only product commands, assert their contractual exits
and output inside passing acceptance cases; do not pass their child TRX to this gate.
Inspect azure-pipelines.yml and the actual referenced templates on the branch
that will ship. Trace change detection/job conditions, SkipTests, configuration,
project/module selection, filter/category, conditional attributes, and environment
all the way to each consuming test step. A category missing from a new test means
the dedicated filter will never select it.
For real Windows app-model changes:
WindowsAppModel job uses
eng\pipelines\steps\test-windows-app-model.yml, Release packs/builds, and
eng\pipelines\test-windows-app-model-preflight.ps1. Preflight requires an
interactive/elevated AppX-capable Windows session, appropriate VS/UWP tooling,
and installed SDKs. A Windows image label alone is insufficient.[TestCategory("WindowsApplicationModel")],
TESTFX_RUN_WINDOWS_APP_MODEL_TESTS=1, and relevant OS/member conditions.
WindowsApplicationModelPackageTests is instead selected by its own FQN filter;
package-content checks do not substitute for activation.TESTFX_DOTNET_10_PATH pointing to the isolated
installation from that template, including the required .NET 8 runtime.
Verify the variable on every consuming MSTest/MTP step, not just where the
installation happens. Copy current pinned versions from the template, not this
skill. The repository SDK and the isolated shipping SDK have different roles.TESTFX_RUN_WINAPP_CLI_INTEROP_TESTS=1, TESTFX_WINAPP_CLI_PATH, and the pinned,
hash-verified WinApp CLI. Do not enable it for unrelated changes.Compare local planned identities/counts with CI's actual selection and executed
outcomes. Read TRX/TestResults and the test-step log, not merely the job badge or
successful PublishTestResults. Reconcile retries per attempt/module; do not sum
duplicate retry reports. If the capable job is gated out or prerequisites are
missing, report CI execution unproven/blocked even if a different job is green.
Record build/job/attempt identity and diagnostic artifact location. Never fix that
by weakening conditions or treating skipped regressions as validated.
Historical failure modes motivating these gates: missing category in #11614, 29 NotExecuted cases and missing consuming SDK path in #11805, and packed-host launch-profile/discovery routing in #11804. These are examples, not instructions to modify those PRs.
Retain exact commands and component versions, working directory/environment overrides (no secrets), exits, expected/observed identities and counts, pack hashes, resolved/executed paths, and meaningful output/artifact assertions. Explain which contract cases and release branches were exercised and which remain blocked. Reuse existing PR evidence when publication is requested; do not publish by default. Read back and verify any published body.
Generated assets normally live under
artifacts\tmp\<Configuration>\testsuite\<random-id>. Setting
Microsoft_Testing_TestInfrastructure_TempDirectory_Cleanup=0 retains asset
directories for diagnostics, but AcceptanceFixture.AssemblyCleanup still removes
its cache. Capture provenance before fixture cleanup if the cache is needed.
Prefer finally cleanup and existing cancellation tokens/bounded command helpers.
Terminate only owned PIDs, unregister only exact run-owned package identities,
and restore modified environment/state. Never remove broad shared caches,
registrations, or workspace roots.
The app-model pipeline runs -Mode LeakCheck and publishes binlogs/TRX/layout/
manifest/resolved-assets/log diagnostics even on failure. On a shared local machine,
do not use -RemoveStaleTestPackages without verifying ownership: that pipeline
switch removes reserved-prefix packages for the current user. Preserve failures
and evidence first; successful cleanup must not overwrite the test failure.
For changes confined to this directory, validate the executable gate with:
python -m unittest discover -s .github\skills\testfx-acceptance-validation\scripts -p "test_*.py"Check referenced repository paths, command flags, and CI/helper behavior against the current branch. These self-tests validate the evidence gate, not the product. Do not claim a composed-product or CI run from documentation/script checks.
© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (scripts) in .github/skills/testfx-acceptance-validation of microsoft/testfx.
Open the folder on GitHubat commit 19d717a
Testfx Acceptance Validation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Testfx Acceptance Validation this skillmicrosoft/testfx | 1k | — | ~4.7k | Automated safety check: Pass | MIT | |
| Environment SetupNorman-bury/research-writing-skill | 3.4k | — | ~840 | Automated safety check: Pass | MIT | |
| Hf Cloud Sagemaker Iam Preflightwaybarrios/opencode-power-pack | 533 | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Remote Hostslibnativeapi/nativeapi | 162 | — | ~1.3k | Automated safety check: Pass | MIT | |
| UiPath Project Generatormarcelocruzrpa/uipath-ai-skills | 108 | — | ~6.9k | Automated safety check: Pass | MIT | |
| Local Asrysyecust/lecture-to-notes | 273 | — | ~1.6k | Automated safety check: Pass | Custom licence |
Norman-bury/research-writing-skill
A skill your agent uses when Python environment setup is needed for data visualization or conda installation is required
waybarrios/opencode-power-pack
Verify or select a SageMaker execution role before creating models, endpoints, or training jobs.
libnativeapi/nativeapi
Build, run, and GUI-test on another machine over SSH — the user's Windows laptop today, Linux or other macOS machines tomorrow — with one symmetric CLI for every OS: push scripts, run them either in…
marcelocruzrpa/uipath-ai-skills
Generates UiPath Studio projects, REFramework scaffolds, XAML workflows and expressions through 104 deterministic Python generators instead of hand-written XAML.
ysyecust/lecture-to-notes
把本地长视频/音频转写成文字稿 + 可选字幕,纯本地(不上传云端),用 sherpa-onnx X-ASR Zipformer transducer 模型(int8 量化、中英双语、自动标点)。已在 macOS Apple Silicon(int8 + AMX,~100× 实时)、Linux ARM64(CPU,~32× 实时)与 Windows(PowerShell…
microsoft/GitHub-Copilot-for-Azure
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant)…
microsoft/testfx
Guide for organizing MSBuild infrastructure with Directory.Build.props, Directory.Build.targets, Directory.Packages.props, and Directory.Build.rsp.
microsoft/testfx
Project-wide code coverage and CRAP (Change Risk Anti-Patterns) score analysis for .NET projects.
microsoft/testfx
Guide for optimizing MSBuild incremental builds. An agent skill from microsoft/testfx.
microsoft/testfx
Guide for modernizing and migrating MSBuild project files to SDK-style format.
microsoft/testfx
Guide for interpreting ResolveProjectReferences time in MSBuild performance summaries.
microsoft/testfx
Catalog of MSBuild anti-patterns with detection rules and fix recipes.
Works with
Validate TestFx shipping paths and capable CI execution using packed consumers, package/cache provenance, exact exits and artifacts, and selected-versus-executed test evidence. Testfx Acceptance Validation is an agent skill from microsoft/testfx, published by the product's own GitHub organization. Validate TestFx shipping paths and capable CI execution using packed consumers, package/cache provenance, exact exits and artifacts, and selected-versus-executed test evidence.
Testfx Acceptance Validation fits situations like: acceptance regressions; package/MSBuild/launcher/protocol changes; skipped-only CI results; not for unrelated unit-only.
Run `npx skills add microsoft/testfx --skill testfx-acceptance-validation -a claude-code`. Or copy the skill folder (.github/skills/testfx-acceptance-validation in microsoft/testfx) into .claude/skills/testfx-acceptance-validation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add microsoft/testfx --skill testfx-acceptance-validation -a codex`. Or copy the skill folder (.github/skills/testfx-acceptance-validation in microsoft/testfx) into .agents/skills/testfx-acceptance-validation in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft/testfx --skill testfx-acceptance-validation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/testfx-acceptance-validation, .gemini/skills/testfx-acceptance-validation, .github/skills/testfx-acceptance-validation and .opencode/skills/testfx-acceptance-validation in your project.
Going by SKILL.md and its folder, Testfx Acceptance Validation needs Python for the scripts in its folder and the command-line tools its instructions call (python and dotnet). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Testfx Acceptance Validation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Testfx Acceptance Validation: Environment Setup (Norman-bury/research-writing-skill, 3.4k stars), Hf Cloud Sagemaker Iam Preflight (waybarrios/opencode-power-pack, 533 stars), Remote Hosts (libnativeapi/nativeapi, 162 stars) and UiPath Project Generator (marcelocruzrpa/uipath-ai-skills, 108 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
microsoft (a GitHub organization, an official publisher) maintains it in microsoft/testfx, which has 1,047 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on October 9, 2026.
Source: microsoft/testfx on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.