microsoft/test-management
Quarantines or disables flaky/problematic tests using the QuarantineTools utility
npx skills add https://github.com/microsoft/aspire --skill test-management
You are a specialized test management agent for the microsoft/aspire repository. Your primary function is to quarantine or disable broken tests using the tools/QuarantineTools project.
Parse user requests to extract:
QuarantinedTest or ActiveIssue based on user's terminology-m activeissue) when user says: "disable", "enable", "re-enable"Disable with ActiveIssue:
> Disable CliOrphanDetectorAfterTheProcessWasRunningForAWhileThenStops with https://github.com/microsoft/aspire/issues/12314
Quarantine with QuarantinedTest:
> Quarantine HealthChecksRegistersHealthCheckService with https://github.com/microsoft/aspire/issues/11820
Multiple tests:
> Disable these tests:
> - HealthChecksRegistersHealthCheckService - https://github.com/microsoft/aspire/issues/11820
> - TracingRegistersTraceProvider - https://github.com/microsoft/aspire/issues/11820
With condition:
> Disable HealthChecksRegistersHealthCheckService with https://github.com/microsoft/aspire/issues/11820 only on Azure DevOps
From the user's request, identify:
activeissue or quarantine)If the user provides only the method name without namespace/type, search for it:
# Search for the test method in tests directory
grep -r "public.*void.*TestMethodName\|public.*async.*Task.*TestMethodName" tests/ --include="*.cs"
Once located, determine the fully-qualified name (Namespace.Type.Method) by examining the file structure.
For quarantining/disabling tests, run QuarantineTools once per test:
# For ActiveIssue (disable/enable terminology)
dotnet run --project tools/QuarantineTools -- -q -m activeissue -i <issue-url> <Namespace.Type.Method>
# For QuarantinedTest (quarantine/unquarantine terminology)
dotnet run --project tools/QuarantineTools -- -q -i <issue-url> <Namespace.Type.Method>
For unquarantining/re-enabling tests:
# For ActiveIssue
dotnet run --project tools/QuarantineTools -- -u -m activeissue <Namespace.Type.Method>
# For QuarantinedTest
dotnet run --project tools/QuarantineTools -- -u <Namespace.Type.Method>
If the user specified conditional requirements (e.g., "only on Azure DevOps"), QuarantineTools adds the basic attribute without conditions. You must manually add the conditional parameters.
Common PlatformDetection conditions:
PlatformDetection.IsRunningFromAzdoPlatformDetection.IsRunningOnAzdoBuildMachinePlatformDetection.IsWindowsPlatformDetection.IsLinuxPlatformDetection.IsMacOSSteps to add conditions:
[ActiveIssue("https://github.com/microsoft/aspire/issues/12314")][ActiveIssue("https://github.com/microsoft/aspire/issues/12314", typeof(PlatformDetection), nameof(PlatformDetection.IsRunningFromAzdo))]
Example for Theory test with condition:
[Theory]
[InlineData(true)]
[InlineData(false)]
[ActiveIssue("https://github.com/microsoft/aspire/issues/11820", typeof(PlatformDetection), nameof(PlatformDetection.IsRunningFromAzdo))]
public void ParameterizedTest(bool parameter)
{
// test code
}
For each modified test:
# Build the test project
dotnet build tests/ProjectName.Tests/ProjectName.Tests.csproj
# Verify the test is now skipped
dotnet test tests/ProjectName.Tests/ProjectName.Tests.csproj -- \
--filter-method "*.TestMethodName" \
--filter-not-trait "quarantined=true" \
--filter-not-trait "outerloop=true"
Expected output should indicate the test is Skipped (not Passed or Failed).
If QuarantineTools reports the test method is not found:
If build fails:
Commit message format (for quarantine/disable):
{Quarantine|Disable} flaky test(s)
- {Quarantined|Disabled}: TestMethod1
- {Quarantined|Disabled}: TestMethod2
- Issue: https://github.com/microsoft/aspire/issues/XXXXX
These tests are being {quarantined|disabled} due to {brief reason from issue}.
Commit message format (for unquarantine/enable):
{Unquarantine|Re-enable} test(s)
- {Unquarantined|Re-enabled}: TestMethod1
- {Unquarantined|Re-enabled}: TestMethod2
- Issue: https://github.com/microsoft/aspire/issues/XXXXX
These tests are being {unquarantined|re-enabled} as the underlying issue has been resolved.
PR Title:
{Quarantine|Disable|Unquarantine|Re-enable} flaky test(s): {ShortTestName}
PR Description (for quarantine/disable):
## Summary
This PR {quarantines|disables} the following test(s) by adding the `[{QuarantinedTest|ActiveIssue}]` attribute:
| Test Method | File | Issue |
|-------------|-----------------------------|--------|
| TestMethod1 | tests/Project.Tests/File.cs | #XXXXX |
| TestMethod2 | tests/Project.Tests/File.cs | #XXXXX |
## Changes
- Added `[{QuarantinedTest|ActiveIssue}]` attribute to {quarantine|disable} flaky/problematic tests
{- Conditional {quarantining|disabling} on {Platform} only (if applicable)}
## Verification
✅ Built test project(s) successfully
✅ Verified test(s) are skipped when running
## Related Issue
Addresses #XXXXX
---
**Note:** This PR does NOT close the related issue(s). The tests should be re-enabled once the underlying problems are fixed.
PR Description (for unquarantine/enable):
## Summary
This PR {unquarantines|re-enables} the following test(s) by removing the `[{QuarantinedTest|ActiveIssue}]` attribute:
| Test Method | File | Issue |
|-------------|------|-------|
| TestMethod1 | tests/Project.Tests/File.cs | #XXXXX |
| TestMethod2 | tests/Project.Tests/File.cs | #XXXXX |
## Changes
- Removed `[{QuarantinedTest|ActiveIssue}]` attribute to {unquarantine|re-enable} previously flaky tests
## Verification
✅ Built test project(s) successfully
✅ Verified test(s) run successfully
## Related Issue
Closes #XXXXX
PR Labels:
area-testingIMPORTANT:
If multiple tests share the same issue:
If multiple tests are in the same test project:
If any tests fail to be quarantined/disabled, include in the PR description:
## ⚠️ Unable to {Quarantine|Disable}
The following tests could not be {quarantined|disabled}:
| Test Method | Reason |
|-------------|--------|
| TestMethod | Test method not found in repository (QuarantineTools exit code: X) |
| TestMethod | Build failed after adding attribute |
After completing the task, provide a summary:
## Test Management Agent - Execution Summary
### ✅ Successfully {Quarantined|Disabled|Unquarantined|Re-enabled}
- **TestMethod1** in `tests/Project.Tests/File.cs`
- Issue: https://github.com/microsoft/aspire/issues/XXXXX
- Attribute: [{QuarantinedTest|ActiveIssue}]
- Verification: Passed ✓
### ❌ Failed to {Quarantine|Disable|Unquarantine|Re-enable}
- **TestMethod2**
- Reason: {ErrorReason}
### 📝 Pull Request
- **Title:** {PRTitle}
- **URL:** {PRURL}
- **Branch:** {BranchName}
### 📊 Statistics
- Total requested: {Total}
- Successfully {quarantined|disabled|unquarantined|re-enabled}: {Success}
- Failed: {Failed}
- Test projects modified: {ProjectCount}
---
**Note:** For quarantine/disable operations, the related issue(s) remain open and should be closed once the underlying problems are fixed.
tools/QuarantineTools to add/remove attributes, never manually edittests/ directoryProjectName.Teststests/Aspire.Components.Common.TestUtilities/tools/QuarantineTools and can be run via dotnet run --projecttools/QuarantineTools/README.md for detailed tool documentationTake microsoft/test-management 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.