Skip to content

Add 'run_command_and_assert' assertion - #401

Merged
JanKrivanek merged 10 commits into
mainfrom
dev/ygerges/command-assertion
Mar 20, 2026
Merged

Add 'run_command_and_assert' assertion#401
JanKrivanek merged 10 commits into
mainfrom
dev/ygerges/command-assertion

Conversation

@Youssef1313

@Youssef1313 Youssef1313 commented Mar 18, 2026

Copy link
Copy Markdown
Member

I find the current assertions very limiting, at least for my scenarios. I want to be able to run dotnet build and assert that it's building successfully, or run dotnet test and assert some output. This might even allow to run an arbitrary assertion script that can be very custom if a complex scenario needs that.

TODO:

  • This needs some unit tests, and some manual test as well. This needs to happen before merge.

@Youssef1313
Youssef1313 force-pushed the dev/ygerges/command-assertion branch from 3728c9d to 41a8e28 Compare March 18, 2026 11:16

@JanKrivanek JanKrivanek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the proposal!

Let's add tests. And possibly guard over runaway command (timeout). Then it should be good to take

Comment thread eng/skill-validator/src/Models/Models.cs Outdated
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
@JanKrivanek

Copy link
Copy Markdown
Member

Addressed all three review comments in e5bca1a:

  1. Extracted CommandAssertionArgs - Command-specific fields are now in a dedicated record type. Added ExpectedStdOutMatches/ExpectedStdErrorMatches for regex-based matching of stdout/stderr (matches type asserts).

  2. Configurable timeout - Added command_timeout field to assertion config. Falls back to the scenario timeout when not specified.

  3. Actual timeout in error message - The timeout error message now shows the actual timeout value used (e.g., Command timed out after 120s).

New tests added for regex matching and timeout configuration. All 412 tests pass.

@JanKrivanek
JanKrivanek marked this pull request as ready for review March 20, 2026 17:15
Copilot AI review requested due to automatic review settings March 20, 2026 17:15
@JanKrivanek
JanKrivanek enabled auto-merge (squash) March 20, 2026 17:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new run_command_and_assert assertion to skill-validator eval scenarios, enabling evaluation runs to execute a command in the scenario work directory and assert on exit code/stdout/stderr.

Changes:

  • Introduces AssertionType.RunCommandAndAssert plus CommandAssertionArgs to represent command-based assertions.
  • Extends EvalSchema YAML parsing/validation to recognize and populate run_command_and_assert.
  • Implements runtime evaluation in AssertionEvaluator and wires scenario timeouts through EvaluateCommand.
  • Adds unit tests covering the evaluator behavior for the new assertion type.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
eng/skill-validator/tests/AssertionsTests.cs Adds unit tests validating run_command_and_assert evaluation behavior (exit code, stdout/stderr contains/regex, timeout).
eng/skill-validator/src/Services/EvalSchema.cs Parses/validates run_command_and_assert and maps YAML fields into CommandAssertionArgs.
eng/skill-validator/src/Services/AssertionEvaluator.cs Executes the configured command and performs assertions against exit code/stdout/stderr, with timeouts.
eng/skill-validator/src/Models/Models.cs Adds the new assertion type and models for command execution arguments.
eng/skill-validator/src/Commands/EvaluateCommand.cs Passes scenario timeout into assertion evaluation so command assertions can inherit scenario timeout.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs
Comment thread eng/skill-validator/src/Services/EvalSchema.cs Outdated
Comment thread eng/skill-validator/src/Services/EvalSchema.cs
Comment thread eng/skill-validator/tests/AssertionsTests.cs Outdated
Copilot AI review requested due to automatic review settings March 20, 2026 17:24
@JanKrivanek
JanKrivanek force-pushed the dev/ygerges/command-assertion branch from 3acbfc5 to e5bca1a Compare March 20, 2026 17:24

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (5)

eng/skill-validator/src/Services/AssertionEvaluator.cs:263

  • Process.Start(processStartInfo) can throw (e.g., file not found) or return null. Right now this will crash the assertion evaluation via the null-forgiving process!. Consider wrapping Start + wiring in try/catch and returning a failed AssertionResult with the exception message, and ensure the Process is disposed (e.g., using).
        var process = Process.Start(processStartInfo);

        var outBuilder = new StringBuilder();
        var errBuilder = new StringBuilder();
        process!.OutputDataReceived += (_, e) =>
        {

eng/skill-validator/src/Services/AssertionEvaluator.cs:278

  • On timeout, process.Kill() only targets the parent process. For common patterns like cmd /c ... or /bin/sh -c ..., this can leave child processes (e.g., sleep, ping) running and leaking across test runs/CI. Consider killing the entire process tree (Kill(true)), handling race/exception cases, and waiting for exit after the kill.
        if (!process.WaitForExit(TimeSpan.FromSeconds(timeoutSeconds)))
        {
            process.Kill();
            return new AssertionResult(a, false, $"Command timed out after {timeoutSeconds}s");

eng/skill-validator/src/Services/AssertionEvaluator.cs:256

  • Child processes inherit the current environment by default. Since this assertion can run arbitrary commands, it should scrub sensitive env vars (tokens, Actions runtime vars, etc.) the same way setup commands do via AgentRunner.ScrubSensitiveEnvironment(ProcessStartInfo). Without this, a command can accidentally print/exfiltrate secrets from the evaluator environment.
        var processStartInfo = new ProcessStartInfo(command, cmd.CommandArguments ?? string.Empty)
        {
            WorkingDirectory = workDir,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
        };

eng/skill-validator/src/Services/AssertionEvaluator.cs:276

  • timeoutSeconds can be 0 or negative (from either the assertion or scenarioTimeoutSeconds). TimeSpan.FromSeconds(timeoutSeconds) + WaitForExit(TimeSpan) will throw for negative values. Add validation/clamping (e.g., require > 0, or treat non-positive as immediate timeout) to avoid crashing assertion evaluation on bad config.
        var timeoutSeconds = cmd.Timeout ?? scenarioTimeoutSeconds;

        var processStartInfo = new ProcessStartInfo(command, cmd.CommandArguments ?? string.Empty)
        {
            WorkingDirectory = workDir,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
        };

        var process = Process.Start(processStartInfo);

        var outBuilder = new StringBuilder();
        var errBuilder = new StringBuilder();
        process!.OutputDataReceived += (_, e) =>
        {
            if (e.Data is not null)
                outBuilder.AppendLine(e.Data);
        };
        process.ErrorDataReceived += (_, e) =>
        {
            if (e.Data is not null)
                errBuilder.AppendLine(e.Data);
        };
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();

        if (!process.WaitForExit(TimeSpan.FromSeconds(timeoutSeconds)))
        {

eng/skill-validator/src/Services/AssertionEvaluator.cs:298

  • These Contains checks are currently case-sensitive (StringComparison.Ordinal), while the existing output_contains assertion is case-insensitive (OrdinalIgnoreCase). Consider aligning semantics (or documenting the difference) so assertion behavior is consistent across output-based assertions.
        if (cmd.ExpectedStdOutContains is not null)
        {
            if (!actualStdOut.Contains(cmd.ExpectedStdOutContains, StringComparison.Ordinal))
            {
                return new AssertionResult(a, false, $"Command stdout did not contain expected value. Stdout: {actualStdOut}");
            }
        }

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/src/Services/EvalSchema.cs
Youssef1313 and others added 7 commits March 20, 2026 19:06
WaitForExit(TimeSpan) does not guarantee that async output event
handlers have completed. Add parameterless WaitForExit() call after
the timed wait to ensure stdout/stderr are fully captured before
checking their contents. Also handle the timeout case explicitly
by killing the process.
…configurable timeout

- Extract command-specific fields from Assertion into a dedicated
  CommandAssertionArgs record type for cleaner separation of concerns
- Add ExpectedStdOutMatches/ExpectedStdErrorMatches for regex-based
  stdout/stderr assertions (matches type asserts)
- Make command timeout configurable via assertion-level 'command_timeout'
  field, falling back to the scenario timeout when not specified
- Show actual timeout value in timeout error messages
- Update EvalSchema parsing, EvaluateCommand call sites, and all tests
- Add new tests for regex matching and timeout configuration
- Convert EvalRunCommandAndAssert to async using WaitForExitAsync
  with CancellationTokenSource for timeout instead of blocking thread
- Wrap Process.Start in try/catch, handle null return with clear
  failure message including command and args
- Dispose Process with 'using', use Kill(entireProcessTree: true) on
  timeout to avoid leaking child processes
- Truncate stdout/stderr in failure messages to 4KB to avoid log bloat
- Validate timeout > 0 before use, return clear error for bad config
- Fix validation error message to show correct YAML field names
  (expected_std_output_contains/expected_std_error_contains)
- Add EvalSchema parsing tests for run_command_and_assert (valid parse,
  missing command_to_run, missing expected checks)
- Use 'timeout /t' instead of 'ping' for Windows sleep in tests
Copilot AI review requested due to automatic review settings March 20, 2026 18:07
@JanKrivanek
JanKrivanek force-pushed the dev/ygerges/command-assertion branch from bca8a18 to 9f34b43 Compare March 20, 2026 18:07

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

eng/skill-validator/src/Services/AssertionEvaluator.cs:303

  • outBuilder/errBuilder are StringBuilders mutated from OutputDataReceived/ErrorDataReceived callbacks, which can run on background threads. Accessing StringBuilder concurrently (and then calling ToString() after WaitForExitAsync) is not thread-safe and can lead to corrupted output or intermittent exceptions, plus you don't currently wait for async output reads to fully drain after process exit. Prefer reading StandardOutput/StandardError via ReadToEndAsync tasks (or protect the builders with a lock + wait for stream completion) so capture is deterministic and thread-safe.
            var outBuilder = new StringBuilder();
            var errBuilder = new StringBuilder();
            process.OutputDataReceived += (_, e) =>
            {
                if (e.Data is not null)
                    outBuilder.AppendLine(e.Data);
            };
            process.ErrorDataReceived += (_, e) =>
            {
                if (e.Data is not null)
                    errBuilder.AppendLine(e.Data);
            };
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/src/Services/EvalSchema.cs
Treat null/whitespace expected_std_* values as 'not specified' when
building CommandAssertionArgs, preventing empty strings from becoming
accidental always-pass assertions (Contains('') and IsMatch('') always
succeed).
Copilot AI review requested due to automatic review settings March 20, 2026 18:19

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
Comment thread eng/skill-validator/tests/AssertionsTests.cs
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs
Comment thread eng/skill-validator/src/Services/AssertionEvaluator.cs Outdated
…ains

- Call AgentRunner.ScrubSensitiveEnvironment before Process.Start to
  prevent leaking CI/credential env vars to child processes
- Replace BeginOutputReadLine/BeginErrorReadLine with ReadToEndAsync
  to reliably drain stdout/stderr before evaluating assertions
- Change StringComparison.Ordinal to OrdinalIgnoreCase for contains
  checks, consistent with output_contains and regex assertions
@JanKrivanek

Copy link
Copy Markdown
Member

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality (Isolated) Quality (Plugin) Skills Loaded Overfit Verdict
csharp-scripts Test a C# language feature with a script 3.0/5 → 4.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ csharp-scripts; tools: skill, create / ✅ csharp-scripts; tools: skill, create 🟡 0.34
nuget-trusted-publishing Set up trusted publishing for a new NuGet library 2.0/5 ⏰ → 4.0/5 🟢 2.0/5 ⏰ → 5.0/5 🟢 ✅ nuget-trusted-publishing; tools: skill, glob / ✅ nuget-trusted-publishing; tools: skill, task, grep ✅ 0.12
nuget-trusted-publishing Set up NuGet publishing without mentioning trusted publishing 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ nuget-trusted-publishing; tools: report_intent, skill, glob, view, bash, create / ✅ nuget-trusted-publishing; tools: skill, report_intent, view, glob, bash, create ✅ 0.12
nuget-trusted-publishing Migrate existing workflow from API key to trusted publishing 3.0/5 → 4.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ nuget-trusted-publishing; tools: skill, task, view, bash / ✅ nuget-trusted-publishing; tools: skill ✅ 0.12
dotnet-pinvoke Generate LibraryImport declaration from C header (.NET 8+) 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ dotnet-pinvoke; tools: skill / ✅ dotnet-pinvoke; tools: skill ✅ 0.08 [1]
dotnet-pinvoke Generate LibraryImport declaration from C header (.NET Framework) 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ dotnet-pinvoke; tools: skill / ✅ dotnet-pinvoke; tools: skill ✅ 0.08
dotnet-trace-collect High CPU in Kubernetes on Linux (.NET 8) 3.0/5 → 3.0/5 3.0/5 → 3.0/5 ✅ dotnet-trace-collect; tools: report_intent, skill, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14
dotnet-trace-collect .NET Framework on Windows without admin privileges 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: skill / ✅ dotnet-trace-collect; tools: skill ✅ 0.14
dotnet-trace-collect .NET 10 on Linux with root access and native call stacks 1.0/5 → 4.0/5 🟢 1.0/5 → 4.0/5 🟢 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14
dotnet-trace-collect Memory leak on Linux (.NET 8) 3.0/5 → 3.0/5 3.0/5 → 3.0/5 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14 [2]
dotnet-trace-collect Slow requests on Windows with PerfView 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: skill ✅ 0.14
dotnet-trace-collect Excessive GC on Linux (.NET 8) 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ dotnet-trace-collect; tools: skill / ✅ dotnet-trace-collect; tools: skill ✅ 0.14 [3]
dotnet-trace-collect Hang or deadlock diagnosis on Linux 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: report_intent, skill ✅ 0.14
dotnet-trace-collect Windows container high CPU with PerfView 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: report_intent, skill, view / ✅ dotnet-trace-collect; tools: report_intent, skill, view ✅ 0.14
dotnet-trace-collect Long-running intermittent issue with PerfView triggers 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14
dotnet-trace-collect Linux pre-.NET 10 needing native call stacks 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: report_intent, skill, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14
dotnet-trace-collect Windows modern .NET with admin high CPU 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: report_intent, skill, view ✅ 0.14
dotnet-trace-collect Memory leak on .NET Framework Windows 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: report_intent, skill, view ✅ 0.14
dotnet-trace-collect Kubernetes with console access prefers console tools 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14 [4]
dotnet-trace-collect Container installation without .NET SDK 3.0/5 → 4.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ dotnet-trace-collect; tools: skill / ✅ dotnet-trace-collect; tools: skill ✅ 0.14
dotnet-trace-collect HTTP 500s from downstream service on Linux (.NET 8) 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: report_intent, skill, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14
dotnet-trace-collect Networking timeouts on Windows with admin (.NET 8) 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dotnet-trace-collect; tools: skill, report_intent, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14
dotnet-trace-collect Assembly loading failure on Linux (.NET 8) 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ dotnet-trace-collect; tools: report_intent, skill, view / ✅ dotnet-trace-collect; tools: skill, report_intent, view ✅ 0.14 [5]
microbenchmarking Investigate runtime upgrade performance impact 4.0/5 → 4.0/5 4.0/5 → 5.0/5 🟢 ✅ microbenchmarking; tools: skill / ✅ microbenchmarking; tools: skill, read_bash ✅ 0.10
clr-activation-debugging Diagnose unexpected FOD dialog from native build tool 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ clr-activation-debugging; tools: skill / ✅ clr-activation-debugging; tools: skill, bash ✅ 0.08 [6]
clr-activation-debugging Diagnose FOD suppressed but activation still failing 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ clr-activation-debugging; tools: skill / ✅ clr-activation-debugging; tools: skill ✅ 0.08
clr-activation-debugging Explain why same binary behaves differently under different launch methods 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ clr-activation-debugging; tools: skill / ✅ clr-activation-debugging; tools: skill ✅ 0.08
clr-activation-debugging Analyze healthy managed EXE activation 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ clr-activation-debugging; tools: skill / ✅ clr-activation-debugging; tools: skill ✅ 0.08 [7]
clr-activation-debugging Identify multiple activation sequences in a single log 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ clr-activation-debugging; tools: skill / ✅ clr-activation-debugging; tools: skill ✅ 0.08 [8]
clr-activation-debugging Explain useLegacyV2RuntimeActivationPolicy in activation log 1.0/5 ⏰ → 3.0/5 🟢 1.0/5 ⏰ → 3.0/5 🟢 ✅ clr-activation-debugging; tools: skill / ✅ clr-activation-debugging; tools: skill ✅ 0.08
clr-activation-debugging Decline non-CLR-activation issue 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ clr-activation-debugging; tools: skill, bash / ℹ️ not activated (expected) ✅ 0.08
analyzing-dotnet-performance Detects compiled regex startup budget and regex chain allocations 1.0/5 ⏰ → 4.0/5 ⏰ 🟢 1.0/5 ⏰ → 5.0/5 🟢 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19
analyzing-dotnet-performance Detects CurrentCulture comparer and compiled regex budget in inflection rules 5.0/5 → 5.0/5 5.0/5 → 1.0/5 ⏰ 🔴 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19
analyzing-dotnet-performance Finds per-call Dictionary allocation not hoisted to static 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19 [9]
analyzing-dotnet-performance Catches compound allocations in recursive number converter with ToLower 3.0/5 → 4.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19
analyzing-dotnet-performance Finds StringComparison.Ordinal missing and FrozenDictionary opportunities 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19 [10]
analyzing-dotnet-performance Detects Aggregate+Replace chain and struct missing IEquatable 2.0/5 ⏰ → 3.0/5 ⏰ 🟢 2.0/5 ⏰ → 4.0/5 ⏰ 🟢 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19
analyzing-dotnet-performance Finds branched Replace chain in format string manipulation 3.0/5 → 4.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ analyzing-dotnet-performance; tools: skill, bash, read_bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19
analyzing-dotnet-performance Catches LINQ on hot-path string processing and All(char.IsUpper) 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19 [11]
analyzing-dotnet-performance Detects LINQ pipeline in TimeSpan formatting and collection processing 5.0/5 → 5.0/5 5.0/5 → 3.0/5 🔴 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19
analyzing-dotnet-performance Flags Span inconsistencies and compound method chains in truncation library 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ analyzing-dotnet-performance; tools: skill, bash / ✅ analyzing-dotnet-performance; tools: skill, bash, read_bash, stop_bash ✅ 0.19
analyzing-dotnet-performance Identifies unsealed leaf classes and locale hierarchy patterns 4.0/5 → 5.0/5 🟢 4.0/5 → 3.0/5 ⏰ 🔴 ✅ analyzing-dotnet-performance; tools: skill, grep / ✅ analyzing-dotnet-performance; tools: skill, bash ✅ 0.19
android-tombstone-symbolication Symbolicate .NET frames in an Android tombstone 5.0/5 → 3.0/5 🔴 5.0/5 → 3.0/5 🔴 ✅ android-tombstone-symbolication; tools: skill, stop_bash / ✅ android-tombstone-symbolication; tools: skill ✅ 0.17
android-tombstone-symbolication Recognize tombstone with no .NET frames 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ android-tombstone-symbolication; tools: skill, bash / ✅ android-tombstone-symbolication; tools: skill ✅ 0.17 [12]
android-tombstone-symbolication Symbolicate CoreCLR frames in an Android tombstone 1.0/5 ⏰ → 4.0/5 🟢 1.0/5 ⏰ → 2.0/5 🟢 ✅ android-tombstone-symbolication; tools: skill / ✅ android-tombstone-symbolication; tools: skill, stop_bash ✅ 0.17
android-tombstone-symbolication Recognize NativeAOT tombstone with app binary and libSystem.Native.so 3.0/5 → 4.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ android-tombstone-symbolication; tools: skill, bash / ✅ android-tombstone-symbolication; tools: skill, bash ✅ 0.17
android-tombstone-symbolication Symbolicate multi-thread tombstone 4.0/5 → 4.0/5 4.0/5 → 4.0/5 ✅ android-tombstone-symbolication; tools: skill, stop_bash / ✅ android-tombstone-symbolication; tools: skill ✅ 0.17
android-tombstone-symbolication Handle .NET frames with no BuildId metadata 4.0/5 → 5.0/5 🟢 4.0/5 → 4.0/5 ✅ android-tombstone-symbolication; tools: skill, bash / ✅ android-tombstone-symbolication; tools: skill, bash ✅ 0.17
android-tombstone-symbolication Symbolicate tombstone with multiple .NET libraries and different BuildIds 4.0/5 → 4.0/5 4.0/5 → 1.0/5 ⏰ 🔴 ✅ android-tombstone-symbolication; tools: skill / ✅ android-tombstone-symbolication; tools: skill, read_bash ✅ 0.17
android-tombstone-symbolication Reject iOS crash log as wrong format 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ℹ️ not activated (expected) / ℹ️ not activated (expected) ✅ 0.17
dump-collect Configure automatic crash dumps for CoreCLR app on Linux 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ dump-collect; tools: report_intent, skill, view / ✅ dump-collect; tools: skill, report_intent, view ✅ 0.17 [13]
dump-collect Set up NativeAOT crash dumps with createdump in Kubernetes 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ dump-collect; tools: skill / ✅ dump-collect; tools: skill ✅ 0.17
dump-collect Recover crash dump from macOS NativeAOT without createdump 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ dump-collect; tools: skill, report_intent, view / ✅ dump-collect; tools: report_intent, skill, view ✅ 0.17
dump-collect Configure CoreCLR dump collection in Alpine Docker as non-root 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ dump-collect; tools: skill, report_intent, view / ✅ dump-collect; tools: report_intent, skill, view ✅ 0.17
dump-collect Advisory: macOS NativeAOT crash dump recovery steps 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dump-collect; tools: skill / ✅ dump-collect; tools: skill ✅ 0.17
dump-collect Advisory: CoreCLR Alpine Docker non-root configuration 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ dump-collect; tools: skill, report_intent, view / ✅ dump-collect; tools: skill, report_intent, view ✅ 0.17
dump-collect Advisory: NativeAOT Kubernetes dump collection setup 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dump-collect; tools: skill / ✅ dump-collect; tools: skill ✅ 0.17
dump-collect Detect runtime and configure crash dumps for unknown .NET app on Linux 3.0/5 → 4.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ dump-collect; tools: skill / ✅ dump-collect; tools: skill ✅ 0.17
dump-collect Decline dump analysis request 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ℹ️ not activated (expected) / ℹ️ not activated (expected) ✅ 0.17
optimizing-ef-core-queries Optimize bulk operations with EF Core 7+ ExecuteUpdate and ExecuteDelete 4.0/5 → 4.0/5 4.0/5 → 4.0/5 ✅ optimizing-ef-core-queries; tools: skill / ✅ optimizing-ef-core-queries; tools: skill 🟡 0.39 [14]
build-parallelism Analyze build parallelism bottlenecks 4.0/5 → 4.0/5 4.0/5 → 1.0/5 ⏰ 🔴 ✅ build-parallelism; tools: skill, task, read_agent, edit / ✅ build-parallelism; tools: skill, task, edit ✅ 0.16
including-generated-files Diagnose generated file inclusion failure 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ including-generated-files; tools: skill / ✅ including-generated-files; tools: skill 🟡 0.23
msbuild-antipatterns Review MSBuild files for anti-patterns and style issues 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ msbuild-antipatterns; tools: skill, glob / ✅ msbuild-antipatterns; tools: skill, glob ✅ 0.05 [15]
build-perf-baseline Establish build performance baseline and recommend optimizations 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ build-perf-baseline; tools: skill / ✅ build-perf-baseline; tools: skill 🟡 0.27
msbuild-modernization Modernize legacy project to SDK-style 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ msbuild-modernization; tools: skill / ✅ msbuild-modernization; tools: skill ✅ 0.06 [16]
directory-build-organization Organize build infrastructure for a multi-project repo 3.0/5 → 5.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ directory-build-organization; tools: skill, task / ✅ directory-build-organization; msbuild-antipatterns; tools: skill ✅ 0.20
check-bin-obj-clash Diagnose bin/obj output path clashes 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ check-bin-obj-clash; tools: skill / ✅ check-bin-obj-clash; tools: skill ✅ 0.14
incremental-build Analyze incremental build issues 3.0/5 → 5.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ incremental-build; tools: skill, bash / ✅ incremental-build; tools: skill, bash ✅ 0.12
eval-performance Analyze MSBuild evaluation performance issues 4.0/5 → 4.0/5 4.0/5 → 5.0/5 🟢 ✅ eval-performance; tools: skill, bash / ✅ eval-performance; tools: skill ✅ 0.19
resolve-project-references Explain misleading ResolveProjectReferences time 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ resolve-project-references; tools: skill / ✅ resolve-project-references; tools: skill ✅ 0.14
msbuild-server Recommend MSBuild Server for slow CLI incremental builds 3.0/5 → 5.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ msbuild-server; tools: skill / ✅ msbuild-server; tools: skill 🟡 0.41
build-perf-diagnostics Diagnose slow build for a small project 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ binlog-generation; build-perf-diagnostics; tools: skill 🟡 0.21
binlog-generation Build project with /bl flag 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ binlog-generation; tools: skill / ✅ binlog-generation; tools: skill, glob 🔴 0.51
binlog-generation Build with /bl in PowerShell 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ binlog-generation; tools: skill / ✅ binlog-generation; tools: skill 🔴 0.51
binlog-generation Build multiple configurations with unique binlogs 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ binlog-generation; tools: skill / ✅ binlog-generation; tools: skill 🔴 0.51 [17]
binlog-failure-analysis Diagnose build failures from binlog only (no source files) 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ binlog-failure-analysis; tools: skill / ✅ binlog-failure-analysis; tools: skill ✅ 0.04
dotnet-maui-doctor Plan macOS MAUI setup with Xcode 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill / ✅ dotnet-maui-doctor; tools: skill ✅ 0.20
dotnet-maui-doctor Plan Linux MAUI environment for Android 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: report_intent, skill, view, bash / ✅ dotnet-maui-doctor; tools: report_intent, skill, view, bash ✅ 0.20
dotnet-maui-doctor Guardrail against workload update and repair 1.0/5 → 3.0/5 🟢 1.0/5 → 4.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill / ✅ dotnet-maui-doctor; tools: report_intent, skill ✅ 0.20
dotnet-maui-doctor Diagnose non-Microsoft JDK causing build failure 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill / ✅ dotnet-maui-doctor; tools: skill ✅ 0.20
dotnet-maui-doctor Plan complete MAUI setup on Windows 4.0/5 → 4.0/5 4.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill / ✅ dotnet-maui-doctor; tools: skill ✅ 0.20
dotnet-maui-doctor Prevent incorrect JAVA_HOME configuration 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill / ✅ dotnet-maui-doctor; tools: skill ✅ 0.20
dotnet-maui-doctor Determine required Android SDK packages for specific .NET version 2.0/5 → 4.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: report_intent, skill, view, bash / ✅ dotnet-maui-doctor; tools: report_intent, skill, view, bash ✅ 0.20
dotnet-maui-doctor Fix stale MAUI workloads after SDK update 2.0/5 → 4.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill / ✅ dotnet-maui-doctor; tools: skill ✅ 0.20
technology-selection ML.NET classification on tabular data 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ technology-selection; tools: skill / ✅ technology-selection; tools: skill 🟡 0.39
technology-selection LLM integration with MEAI abstraction 1.0/5 → 1.0/5 1.0/5 → 3.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ technology-selection; tools: skill 🟡 0.39 [18]
technology-selection Reject LLM for tabular classification 2.0/5 → 5.0/5 🟢 2.0/5 → 4.0/5 🟢 ✅ technology-selection; tools: skill, create / ✅ technology-selection; tools: skill, create 🟡 0.39
technology-selection Agentic workflow with guardrails 1.0/5 ⏰ → 1.0/5 ⏰ 1.0/5 ⏰ → 1.0/5 ⏰ ✅ technology-selection; tools: skill / ✅ technology-selection; tools: skill 🟡 0.39 [19]
technology-selection Natural-language scenario decomposition — RAG chatbot 3.0/5 → 3.0/5 3.0/5 → 4.0/5 🟢 ✅ technology-selection; tools: skill, edit / ✅ technology-selection; tools: skill 🟡 0.39
technology-selection RAG pipeline with vector search 3.0/5 → 5.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ technology-selection; tools: skill / ✅ technology-selection; tools: skill 🟡 0.39
convert-to-cpm Decline CPM conversion for packages.config project 1.0/5 → 2.0/5 🟢 1.0/5 → 1.0/5 ℹ️ not activated (expected) / ℹ️ not activated (expected) 🟡 0.31
convert-to-cpm Recommend CPM when updating packages with version conflicts 2.0/5 → 3.0/5 🟢 2.0/5 → 3.0/5 🟢 ✅ convert-to-cpm; tools: skill, glob, bash, create / ✅ convert-to-cpm; tools: skill, glob, bash, create 🟡 0.31
convert-to-cpm Recommend CPM when updating packages in a complex repository 2.0/5 → 3.0/5 🟢 2.0/5 → 3.0/5 🟢 ✅ convert-to-cpm; tools: skill, read_agent / ✅ convert-to-cpm; tools: skill 🟡 0.31
convert-to-cpm Convert single project to CPM 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ convert-to-cpm; tools: skill, glob, bash / ✅ convert-to-cpm; tools: skill, glob, task, bash 🟡 0.31
convert-to-cpm Convert multi-project solution to CPM 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ convert-to-cpm; tools: skill / ✅ convert-to-cpm; tools: skill, read_agent 🟡 0.31
convert-to-cpm Convert solution with MSBuild property versions to CPM 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ convert-to-cpm; tools: skill, bash, grep / ✅ convert-to-cpm; tools: skill, glob, bash, grep 🟡 0.31
convert-to-cpm Convert solution with version conflicts to CPM 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ convert-to-cpm; tools: skill, bash / ✅ convert-to-cpm; tools: skill, task, bash, read_agent 🟡 0.31
convert-to-cpm Convert complex repository with multiple CPM challenges 3.0/5 → 4.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ convert-to-cpm; tools: skill / ✅ convert-to-cpm; tools: skill 🟡 0.31
migrate-dotnet9-to-dotnet10 Console app with System.Linq.Async, SIGTERM, and BufferedStream 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [20]
migrate-dotnet9-to-dotnet10 Expression tree code broken by C# 14 span overload resolution 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view, grep / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [21]
migrate-dotnet9-to-dotnet10 ASP.NET Core app with WebHostBuilder, OpenAPI, and forwarded headers 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: skill / ✅ migrate-dotnet9-to-dotnet10; tools: skill
migrate-dotnet9-to-dotnet10 ASP.NET Core app with OpenAPI transformers using Microsoft.OpenApi v1 APIs 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, bash / ✅ migrate-dotnet9-to-dotnet10; tools: skill, report_intent, view [22]
migrate-dotnet9-to-dotnet10 EF Core app with Azure SQL JSON columns and parameterized collections 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: skill, report_intent, view
migrate-dotnet9-to-dotnet10 EF Core app with dynamic ExecuteUpdate and complex types 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [23]
migrate-dotnet9-to-dotnet10 SQLite app with DateTimeOffset timezone handling 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, bash / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [24]
migrate-dotnet9-to-dotnet10 Worker service with config null array binding and ProviderAlias assembly change 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill / ✅ migrate-dotnet9-to-dotnet10; tools: skill
migrate-dotnet9-to-dotnet10 Cryptography app with OpenSSL, X.509, and Rfc2898DeriveBytes 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [25]
migrate-dotnet9-to-dotnet10 SDK and NuGet obscure tooling changes 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: skill / ✅ migrate-dotnet9-to-dotnet10; tools: skill
migrate-dotnet9-to-dotnet10 JSON polymorphism with conflicting property names and XmlSerializer 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [26]
migrate-dotnet9-to-dotnet10 WinForms and WPF desktop app with System.Drawing and DynamicResource 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: skill / ✅ migrate-dotnet9-to-dotnet10; tools: skill
migrate-dotnet9-to-dotnet10 Containerized single-file app with P/Invoke and IDispatchEx 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view
migrate-dotnet9-to-dotnet10 App using SslStream properties and SystemEvents 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view
migrate-dotnet9-to-dotnet10 Library with NuGet auditing, transitive deps, and InlineArray 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: skill, report_intent, view / ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view
migrate-dotnet9-to-dotnet10 C# 14 compiler breaking changes — field keyword, extension keyword, disposal 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view
migrate-dotnet9-to-dotnet10 Blazor WASM app with generic math shift masking and tar operations 5.0/5 → 4.0/5 🔴 5.0/5 → 4.0/5 🔴 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view
migrate-dotnet8-to-dotnet9 App with empty environment variables, ZIP encoding, and keyed DI services 2.0/5 → 4.0/5 🟢 2.0/5 → 4.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09
migrate-dotnet8-to-dotnet9 C# 13 compiler breaking changes — InlineArray on record, iterator safe context, collection expressions 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: report_intent, skill, view / ✅ migrate-dotnet8-to-dotnet9; tools: skill, report_intent, view ✅ 0.09
migrate-dotnet8-to-dotnet9 ASP.NET Core app with DI validation, forwarded headers, and HttpClientFactory casting 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill, create / ✅ migrate-dotnet8-to-dotnet9; tools: skill, create ✅ 0.09
migrate-dotnet8-to-dotnet9 EF Core app with migration patterns and Cosmos DB discriminator 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09
migrate-dotnet8-to-dotnet9 EF Core Cosmos DB app with existing documents and composite id format 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09
migrate-dotnet8-to-dotnet9 App with JsonDocument null deserialization and BinaryFormatter fallback 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet8-to-dotnet9; tools: skill / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09 [27]
migrate-dotnet8-to-dotnet9 CI pipeline with Terminal Logger parsing and version constraints 3.0/5 → 2.0/5 🔴 3.0/5 → 2.0/5 🔴 ℹ️ not activated (expected) / ℹ️ not activated (expected) ✅ 0.09
migrate-dotnet8-to-dotnet9 WinForms app with custom UserControls and PictureBox URL loading 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09
migrate-dotnet8-to-dotnet9 Containerized app with zlib dependency and runtime configuration 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09
migrate-dotnet8-to-dotnet9 EF Core Cosmos DB app with discriminator and sync I/O 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09
migrate-dotnet8-to-dotnet9 Library with String.Trim span overload, keyed services, and InlineArray 5.0/5 → 5.0/5 5.0/5 → 3.0/5 🔴 ✅ migrate-dotnet8-to-dotnet9; tools: skill, bash / ✅ migrate-dotnet8-to-dotnet9; tools: skill, grep, bash ✅ 0.09
migrate-dotnet8-to-dotnet9 Containerized app with env var precedence reversal and zlib removal 5.0/5 → 4.0/5 🔴 5.0/5 → 5.0/5 ℹ️ not activated (expected) / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.09
thread-abort-migration Worker thread with abort-based cancellation 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ thread-abort-migration; tools: report_intent, skill / ✅ thread-abort-migration; tools: skill ✅ 0.10 [28]
thread-abort-migration Timeout enforcement via Thread.Abort 3.0/5 → 4.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ thread-abort-migration; tools: skill / ✅ thread-abort-migration; tools: skill ✅ 0.10 [29]
thread-abort-migration Blocking WaitHandle with Thread.Interrupt 3.0/5 → 3.0/5 3.0/5 → 4.0/5 🟢 ✅ thread-abort-migration; tools: skill, report_intent, bash / ✅ thread-abort-migration; tools: skill ✅ 0.10
thread-abort-migration ASP.NET Response.End and Response.Redirect with Thread.Abort 4.0/5 → 5.0/5 🟢 4.0/5 → 4.0/5 ✅ thread-abort-migration; tools: skill, report_intent, bash / ✅ thread-abort-migration; tools: report_intent, skill ✅ 0.10
thread-abort-migration Thread.Join and Thread.Sleep only — should not migrate 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ thread-abort-migration; tools: report_intent, skill ✅ 0.10
migrate-nullable-references Enable NRT in a small library with mixed nullability 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-nullable-references; tools: skill / ✅ migrate-nullable-references; tools: skill ✅ 0.13 [30]
migrate-nullable-references File-by-file migration: only modify the targeted file 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED / ⚠️ NOT ACTIVATED ✅ 0.13
migrate-nullable-references Enable NRT in ASP.NET Core Web API with EF Core 4.0/5 → 3.0/5 🔴 4.0/5 → 3.0/5 🔴 ⚠️ NOT ACTIVATED / ⚠️ NOT ACTIVATED ✅ 0.13
dotnet-aot-compat Make Azure.ResourceManager AOT-compatible 1.0/5 ⏰ → 4.0/5 🟢 1.0/5 ⏰ → 2.0/5 ⏰ 🟢 ✅ dotnet-aot-compat; tools: skill / ✅ dotnet-aot-compat; tools: skill ✅ 0.13
migrate-dotnet10-to-dotnet11 Console app with compression and TAR operations 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ migrate-dotnet10-to-dotnet11; tools: skill / ✅ migrate-dotnet10-to-dotnet11; tools: skill ✅ 0.05 [31]
migrate-dotnet10-to-dotnet11 C# 15 compiler breaking changes — Span safe-context, nameof, with() 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: skill, report_intent, view / ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.05
migrate-dotnet10-to-dotnet11 EF Core app with Cosmos DB provider using sync APIs 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view / ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.05 [32]
migrate-dotnet10-to-dotnet11 Deployment to older hardware with minimum requirement changes 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view / ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.05
migrate-dotnet10-to-dotnet11 Cryptography app using DSA on macOS 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: skill, report_intent, view / ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.05 [33]
migrate-dotnet10-to-dotnet11 Basic TFM update with Docker and global.json 3.0/5 → 4.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: skill / ✅ migrate-dotnet10-to-dotnet11; tools: skill ✅ 0.05
migrate-dotnet10-to-dotnet11 C# 15 dynamic operator and ref readonly delegate issues 2.0/5 → 2.0/5 2.0/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.05 [34]
exp-test-anti-patterns Detect mixed severity anti-patterns in repository service tests 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ exp-test-anti-patterns; tools: report_intent, skill / ✅ exp-test-anti-patterns; tools: report_intent, skill ✅ 0.05 [35]
exp-test-anti-patterns Detect flakiness indicators and test coupling 3.0/5 → 4.0/5 🟢 3.0/5 → 3.0/5 ✅ exp-test-anti-patterns; tools: report_intent, skill / ✅ exp-test-anti-patterns; tools: report_intent, skill ✅ 0.05
exp-test-anti-patterns Detect duplicated tests and magic values 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ exp-test-anti-patterns; tools: report_intent, skill / ✅ exp-test-anti-patterns; tools: report_intent, skill ✅ 0.05
exp-test-anti-patterns Recognize well-written tests without inventing false positives 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ exp-test-anti-patterns; tools: report_intent, skill / ✅ exp-test-anti-patterns; tools: report_intent, skill ✅ 0.05
exp-test-tagging Tag an untagged MSTest test suite 4.0/5 → 4.0/5 4.0/5 → 5.0/5 🟢 ✅ exp-test-tagging; tools: skill, glob / ✅ exp-test-tagging; tools: skill, glob 🟡 0.40
exp-test-tagging Tag an untagged xUnit test suite 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ exp-test-tagging; tools: skill / ✅ exp-test-tagging; tools: skill 🟡 0.40
exp-test-tagging Tag an untagged NUnit test suite 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ exp-test-tagging; tools: skill / ✅ exp-test-tagging; tools: skill, glob 🟡 0.40
exp-test-tagging Audit test distribution without modifying files 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ exp-test-tagging; tools: skill / ✅ exp-test-tagging; tools: skill 🟡 0.40
exp-test-tagging Decline request to write new tests 4.0/5 → 4.0/5 4.0/5 → 4.0/5 ℹ️ not activated (expected) / ℹ️ not activated (expected) 🟡 0.40 [36]
exp-crap-score Calculate CRAP score for a single method with partial coverage 4.0/5 → 4.0/5 4.0/5 → 5.0/5 🟢 ✅ exp-crap-score; tools: skill / ✅ exp-crap-score; tools: skill ✅ 0.13
exp-crap-score Identify riskiest methods across a file 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ exp-crap-score; tools: skill, bash / ✅ exp-crap-score; tools: skill ✅ 0.13
exp-crap-score Generate coverage then compute CRAP score 4.0/5 → 4.0/5 4.0/5 → 4.0/5 ✅ exp-crap-score; tools: skill / ✅ exp-crap-score; tools: skill ✅ 0.13 [37]
migrate-mstest-v1v2-to-v3 Migrate MSTest v1 project with assembly reference 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-mstest-v1v2-to-v3; tools: skill / ✅ migrate-mstest-v1v2-to-v3; tools: skill, glob, bash ✅ 0.05
migrate-mstest-v1v2-to-v3 Migrate MSTest v2 NuGet project to v3 4.0/5 → 3.0/5 🔴 4.0/5 → 3.0/5 🔴 ✅ migrate-mstest-v1v2-to-v3; tools: skill / ✅ migrate-mstest-v1v2-to-v3; tools: skill ✅ 0.05
migrate-mstest-v1v2-to-v3 Fix Assert.AreEqual object overload errors after v3 upgrade 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-mstest-v1v2-to-v3; tools: skill, edit / ✅ migrate-mstest-v1v2-to-v3; tools: skill, edit ✅ 0.05
migrate-mstest-v1v2-to-v3 Migrate from .testsettings to .runsettings 3.0/5 → 4.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ migrate-mstest-v1v2-to-v3; tools: skill / ✅ migrate-mstest-v1v2-to-v3; tools: skill, bash ✅ 0.05
migrate-mstest-v1v2-to-v3 Fix DataRow type mismatch errors after v3 upgrade 3.0/5 → 3.0/5 3.0/5 → 3.0/5 ✅ migrate-mstest-v1v2-to-v3; tools: skill / ✅ migrate-mstest-v1v2-to-v3; tools: skill ✅ 0.05
migrate-mstest-v1v2-to-v3 Migrate to MSTest.Sdk project style 3.0/5 → 5.0/5 🟢 3.0/5 → 4.0/5 🟢 ✅ migrate-mstest-v1v2-to-v3; tools: skill, bash / ✅ migrate-mstest-v1v2-to-v3; tools: skill, bash ✅ 0.05
migrate-mstest-v1v2-to-v3 Handle dropped target framework during v3 migration 4.0/5 → 4.0/5 4.0/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ migrate-mstest-v1v2-to-v3; tools: skill ✅ 0.05 [38]
migrate-mstest-v1v2-to-v3 Migrate complex MSTest v2 project with testsettings, DataRow issues, and dropped TFM 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-mstest-v1v2-to-v3; tools: skill / ✅ migrate-mstest-v1v2-to-v3; tools: skill ✅ 0.05
migrate-mstest-v1v2-to-v3 Correctly identify MSTest v1 vs v2 and recommend different migration paths 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-mstest-v1v2-to-v3; tools: skill / ✅ migrate-mstest-v1v2-to-v3; tools: skill ✅ 0.05
writing-mstest-tests Write unit tests for a service class 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ⏰ ✅ writing-mstest-tests; tools: skill, task, glob / ✅ writing-mstest-tests; tools: skill, task, glob 🟡 0.27 [39]
writing-mstest-tests Write data-driven tests for a calculator 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ writing-mstest-tests; tools: skill, glob / ✅ writing-mstest-tests; tools: skill 🟡 0.27
writing-mstest-tests Write async tests with cancellation 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.27
writing-mstest-tests Fix swapped Assert.AreEqual arguments 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ writing-mstest-tests; tools: report_intent, skill / ⚠️ NOT ACTIVATED 🟡 0.27 [40]
writing-mstest-tests Modernize legacy test patterns 2.0/5 ⏰ → 5.0/5 🟢 2.0/5 ⏰ → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill 🟡 0.27
writing-mstest-tests Replace ExpectedException with Assert.Throws 3.0/5 → 4.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: report_intent, skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.27
writing-mstest-tests Use proper collection assertions 4.0/5 → 3.0/5 🔴 4.0/5 → 4.0/5 ✅ writing-mstest-tests; tools: report_intent, skill / ✅ writing-mstest-tests; tools: skill 🟡 0.27 [41]
writing-mstest-tests Use proper type assertions instead of casts 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill 🟡 0.27
writing-mstest-tests Set up test lifecycle correctly 2.0/5 → 4.0/5 🟢 2.0/5 → 4.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: skill 🟡 0.27
writing-mstest-tests Use DynamicData with ValueTuples over object arrays 1.0/5 → 3.0/5 🟢 1.0/5 → 3.0/5 🟢 ✅ writing-mstest-tests; tools: skill / ✅ writing-mstest-tests; tools: report_intent, skill 🟡 0.27
migrate-vstest-to-mtp Migrate MSTest project from VSTest to Microsoft.Testing.Platform 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: report_intent, skill / ✅ migrate-vstest-to-mtp; tools: report_intent, skill, view ✅ 0.10
migrate-vstest-to-mtp Migrate NUnit project from VSTest to Microsoft.Testing.Platform 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: report_intent, skill / ✅ migrate-vstest-to-mtp; tools: skill ✅ 0.10
migrate-vstest-to-mtp Migrate xUnit.net v2 project from VSTest to Microsoft.Testing.Platform 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: skill, report_intent, view / ✅ migrate-vstest-to-mtp; tools: skill, report_intent, view ✅ 0.10
migrate-vstest-to-mtp Update Azure DevOps pipeline from VSTest task to MTP 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: skill / ✅ migrate-vstest-to-mtp; tools: skill ✅ 0.10
migrate-vstest-to-mtp Migrate MSTest.Sdk project that explicitly uses VSTest 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: skill / ✅ migrate-vstest-to-mtp; tools: skill ✅ 0.10
migrate-vstest-to-mtp Translate dotnet test VSTest arguments to MTP equivalents 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: report_intent, skill / ✅ migrate-vstest-to-mtp; tools: report_intent, skill ✅ 0.10
migrate-vstest-to-mtp Handle exit code 8 when migrating from VSTest to MTP 4.0/5 → 5.0/5 🟢 4.0/5 → 3.0/5 🔴 ✅ migrate-vstest-to-mtp; tools: skill / ✅ migrate-vstest-to-mtp; tools: skill ✅ 0.10 [42]
migrate-vstest-to-mtp Configure dotnet test MTP mode on .NET 10 SDK 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: skill / ✅ migrate-vstest-to-mtp; tools: skill ✅ 0.10
migrate-vstest-to-mtp Migrate xUnit.net VSTest filter syntax to MTP 2.0/5 → 4.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: skill / ✅ migrate-vstest-to-mtp; tools: skill ✅ 0.10
migrate-vstest-to-mtp Full VSTest to MTP migration plan for MSTest solution 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ migrate-vstest-to-mtp; tools: skill / ✅ migrate-vstest-to-mtp; tools: skill, create ✅ 0.10
run-tests Run tests in a VSTest MSTest project 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ run-tests; tools: skill / ✅ run-tests; tools: skill 🟡 0.29 [43]
run-tests Run tests with trx reporting on MTP project (SDK 9) 2.0/5 ⏰ → 3.0/5 ⏰ 🟢 2.0/5 ⏰ → 3.0/5 ⏰ 🟢 ✅ run-tests; tools: skill / ✅ run-tests; tools: skill 🟡 0.29
run-tests Run tests with blame-hang on MTP project (SDK 10) 2.0/5 → 2.0/5 ⏰ 2.0/5 → 2.0/5 ✅ run-tests; tools: skill, bash, edit / ⚠️ NOT ACTIVATED 🟡 0.29 [44]
run-tests Run tests in a multi-TFM project targeting a specific framework 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash, glob / ✅ run-tests; tools: skill, bash 🟡 0.29
run-tests Filter MSTest tests by category on VSTest 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED / ⚠️ NOT ACTIVATED 🟡 0.29 [45]
run-tests Filter NUnit tests by class name on VSTest 4.0/5 → 5.0/5 🟢 4.0/5 → 4.0/5 ⚠️ NOT ACTIVATED / ⚠️ NOT ACTIVATED 🟡 0.29
run-tests Filter xUnit v3 tests by class on MTP 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, bash / ✅ run-tests; tools: skill 🟡 0.29
run-tests Filter xUnit v3 tests by trait on MTP 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ✅ run-tests; tools: view, skill 🟡 0.29
run-tests Filter TUnit tests by class using treenode-filter 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ⚠️ NOT ACTIVATED 🟡 0.29
run-tests Combine multiple filter criteria on VSTest MSTest 5.0/5 → 4.0/5 🔴 5.0/5 → 4.0/5 🔴 ⚠️ NOT ACTIVATED / ⚠️ NOT ACTIVATED 🟡 0.29
run-tests MTP project on SDK 9 must use -- separator for args 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ✅ run-tests; tools: skill 🟡 0.29
run-tests MTP project on SDK 10 passes args directly 1.0/5 ⏰ → 2.0/5 ⏰ 🟢 1.0/5 ⏰ → 3.0/5 🟢 ✅ run-tests; tools: skill / ✅ run-tests; tools: skill 🟡 0.29
run-tests Detect test platform from Directory.Build.props 1.0/5 → 5.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill / ✅ run-tests; tools: skill 🟡 0.29
run-tests Negative test: do not use MTP syntax for a VSTest project 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ run-tests; tools: skill, view / ✅ run-tests; tools: skill, view 🟡 0.29
mtp-hot-reload Suggest hot reload for failing test in MTP project (SDK 9) 1.0/5 → 5.0/5 🟢 1.0/5 → 2.0/5 ⏰ 🟢 ✅ mtp-hot-reload; tools: skill / ✅ mtp-hot-reload; tools: skill ✅ 0.11
mtp-hot-reload Suggest hot reload for failing test in MTP project (SDK 10) 1.0/5 → 3.0/5 🟢 1.0/5 → 4.0/5 🟢 ✅ mtp-hot-reload; tools: skill, bash, create / ✅ mtp-hot-reload; tools: skill, bash, create ✅ 0.11
mtp-hot-reload Enable hot reload when package already installed 2.0/5 → 5.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ mtp-hot-reload; tools: skill / ✅ mtp-hot-reload; tools: skill, glob ✅ 0.11
mtp-hot-reload Suggest launchSettings.json configuration for hot reload 1.0/5 → 4.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ mtp-hot-reload; tools: skill, bash, create / ✅ mtp-hot-reload; tools: skill, bash, create ✅ 0.11
mtp-hot-reload Use dotnet run not dotnet test for hot reload 1.0/5 → 3.0/5 🟢 1.0/5 → 3.0/5 🟢 ✅ mtp-hot-reload; tools: skill / ✅ mtp-hot-reload; tools: report_intent, skill ✅ 0.11
mtp-hot-reload Negative: VSTest project cannot use MTP hot reload 1.0/5 → 2.0/5 🟢 1.0/5 → 5.0/5 🟢 ✅ mtp-hot-reload; tools: skill, create / ✅ mtp-hot-reload; tools: skill, glob ✅ 0.11
mtp-hot-reload Run specific failing test with hot reload filter 1.0/5 → 3.0/5 🟢 1.0/5 → 3.0/5 🟢 ✅ mtp-hot-reload; tools: skill, view / ✅ mtp-hot-reload; tools: skill, view ✅ 0.11
migrate-mstest-v3-to-v4 Migrate custom TestMethodAttribute from Execute to ExecuteAsync 2.0/5 → 3.0/5 🟢 2.0/5 → 3.0/5 🟢 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
migrate-mstest-v3-to-v4 Replace ExpectedExceptionAttribute with Assert.ThrowsExactly 3.0/5 → 3.0/5 3.0/5 → 3.0/5 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06 [46]
migrate-mstest-v3-to-v4 Fix multiple v4 breaking changes: Assert, ClassCleanup, TestContext, Timeout 2.0/5 ⏰ → 5.0/5 🟢 2.0/5 ⏰ → 5.0/5 🟢 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
migrate-mstest-v3-to-v4 Handle net6.0 target framework dropped in MSTest v4 3.0/5 → 5.0/5 🟢 3.0/5 → 4.0/5 🟢 ⚠️ NOT ACTIVATED / ⚠️ NOT ACTIVATED ✅ 0.06
migrate-mstest-v3-to-v4 Fix TestMethodAttribute CallerInfo constructor breaking change 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
migrate-mstest-v3-to-v4 Understand behavioral changes after MSTest v4 upgrade 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
migrate-mstest-v3-to-v4 Handle MSTest.Sdk and MTP changes in v4 2.0/5 → 3.0/5 🟢 2.0/5 → 3.0/5 🟢 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
migrate-mstest-v3-to-v4 Full MSTest v3 to v4 migration with multiple breaking changes 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
migrate-mstest-v3-to-v4 Migrate MSTest.Sdk v3 project using ManagedType and TestTimeout 3.0/5 ⏰ → 4.0/5 🟢 3.0/5 ⏰ → 4.0/5 🟢 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
migrate-mstest-v3-to-v4 Correctly identify MSTest v3 project and recommend v4 migration 5.0/5 → 4.0/5 🔴 5.0/5 → 5.0/5 ✅ migrate-mstest-v3-to-v4; tools: skill / ✅ migrate-mstest-v3-to-v4; tools: skill ✅ 0.06
template-authoring Validate a template.json file 3.0/5 → 5.0/5 🟢 3.0/5 → 5.0/5 🟢 ✅ template-authoring; tools: skill / ✅ template-authoring; tools: skill ✅ 0.06
template-discovery Find template for web API project 2.0/5 → 4.0/5 🟢 2.0/5 → 5.0/5 🟢 ✅ template-discovery; tools: report_intent, skill, bash / ✅ template-discovery; tools: report_intent, skill, bash 🟡 0.29
template-discovery Inspect template parameters 4.0/5 → 4.0/5 4.0/5 → 5.0/5 🟢 ✅ template-discovery; tools: skill / ✅ template-discovery; tools: skill 🟡 0.29 [47]
template-instantiation Create a console application 4.0/5 → 5.0/5 🟢 4.0/5 → 5.0/5 🟢 ✅ template-instantiation; tools: skill / ✅ template-instantiation; tools: skill 🟡 0.41
template-instantiation Create project with specific framework 5.0/5 → 5.0/5 5.0/5 → 5.0/5 ✅ template-instantiation; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.41 [48]

[1] (Plugin) Quality unchanged but weighted score is -8.4% due to: tokens (23753 → 49906), time (12.1s → 22.4s), tool calls (2 → 3)
[2] (Isolated) Quality unchanged but weighted score is -6.0% due to: tokens (12050 → 51530), tool calls (0 → 3), time (16.4s → 27.8s)
[3] (Isolated) Quality unchanged but weighted score is -8.3% due to: judgment
[4] (Plugin) Quality unchanged but weighted score is -10.0% due to: tokens (11666 → 53766), tool calls (0 → 3), time (8.5s → 22.5s)
[5] (Isolated) Quality unchanged but weighted score is -15.8% due to: judgment, tokens (12046 → 51928), tool calls (0 → 4), time (17.8s → 29.2s)
[6] (Plugin) Quality unchanged but weighted score is -23.3% due to: completion (✓ → ✗), tokens (40578 → 95652), tool calls (5 → 9), time (33.8s → 51.5s)
[7] (Plugin) Quality unchanged but weighted score is -5.3% due to: tokens (36134 → 75119), tool calls (3 → 6), time (19.2s → 33.4s)
[8] (Plugin) Quality unchanged but weighted score is -9.1% due to: tokens (39030 → 71122), tool calls (3 → 7), time (39.5s → 113.5s)
[9] (Plugin) Quality unchanged but weighted score is -5.3% due to: time (59.6s → 110.6s), tokens (105756 → 149590), tool calls (7 → 10)
[10] (Plugin) Quality unchanged but weighted score is -10.0% due to: tokens (28743 → 116564), tool calls (2 → 9), time (40.8s → 98.9s)
[11] (Plugin) Quality unchanged but weighted score is -7.3% due to: tokens (28153 → 184927), tool calls (2 → 12), time (46.8s → 134.9s)
[12] (Plugin) Quality unchanged but weighted score is -8.3% due to: tokens (24408 → 45629), tool calls (2 → 4), time (11.5s → 18.2s)
[13] (Isolated) Quality unchanged but weighted score is -11.4% due to: tokens (11894 → 41024), quality, tool calls (0 → 3), time (12.6s → 16.3s)
[14] (Plugin) Quality unchanged but weighted score is -9.6% due to: tokens (11877 → 26408), tool calls (0 → 1), time (8.1s → 14.9s)
[15] (Plugin) Quality unchanged but weighted score is -2.9% due to: tokens (41250 → 89493), tool calls (11 → 15)
[16] (Plugin) Quality unchanged but weighted score is -27.1% due to: completion (✓ → ✗), quality, tokens (72063 → 182751), time (51.2s → 66.2s)
[17] (Plugin) Quality unchanged but weighted score is -9.5% due to: tokens (23554 → 64772), tool calls (2 → 4), time (15.0s → 26.8s)
[18] (Isolated) Quality unchanged but weighted score is -2.0% due to: time (69.7s → 110.1s), tokens (129510 → 144783)
[19] (Isolated) Quality unchanged but weighted score is -42.2% due to: judgment, quality
[20] (Isolated) Quality unchanged but weighted score is -0.1% due to: tokens (48534 → 53880)
[21] (Isolated) Quality unchanged but weighted score is -18.9% due to: judgment, quality, tool calls (4 → 5)
[22] (Isolated) Quality improved but weighted score is -20.1% due to: judgment, tokens (14582 → 53097), tool calls (0 → 4), quality
[23] (Isolated) Quality unchanged but weighted score is -5.8% due to: tokens (30227 → 53690), tool calls (2 → 3), time (21.2s → 26.9s)
[24] (Plugin) Quality unchanged but weighted score is -0.4% due to: tokens (49011 → 55583)
[25] (Isolated) Quality unchanged but weighted score is -14.0% due to: judgment, quality
[26] (Isolated) Quality unchanged but weighted score is -17.4% due to: judgment, quality
[27] (Plugin) Quality unchanged but weighted score is -7.6% due to: tokens (133322 → 285066), time (85.2s → 139.7s), tool calls (17 → 24)
[28] (Plugin) Quality unchanged but weighted score is -7.5% due to: tokens (12990 → 31799), tool calls (0 → 1)
[29] (Isolated) Quality improved but weighted score is -20.1% due to: completion (✓ → ✗), tokens (12549 → 29302), tool calls (0 → 1), time (20.7s → 26.9s)
[30] (Plugin) Quality unchanged but weighted score is -7.2% due to: tokens (126185 → 299005), time (69.1s → 114.4s), tool calls (24 → 29)
[31] (Isolated) Quality unchanged but weighted score is -22.8% due to: quality, judgment
[32] (Isolated) Quality improved but weighted score is -12.5% due to: quality, tokens (12439 → 45993), tool calls (0 → 4)
[33] (Isolated) Quality improved but weighted score is -1.0% due to: tokens (12913 → 45183), tool calls (0 → 3)
[34] (Isolated) Quality unchanged but weighted score is -2.9% due to: tokens (15355 → 71735), tool calls (0 → 17), time (76.3s → 98.3s)
[35] (Plugin) Quality unchanged but weighted score is -7.7% due to: tokens (13013 → 30735), tool calls (0 → 2), time (16.2s → 46.5s)
[36] (Plugin) Quality unchanged but weighted score is -10.0% due to: tokens (38609 → 213416), tool calls (4 → 16), time (31.0s → 104.5s)
[37] (Plugin) Quality unchanged but weighted score is -0.8% due to: efficiency metrics
[38] (Isolated) Quality unchanged but weighted score is -12.3% due to: judgment
[39] (Plugin) Quality unchanged but weighted score is -12.5% due to: errors (0 → 1), tokens (137049 → 230572), tool calls (14 → 31), time (75.2s → 121.7s)
[40] (Plugin) Quality unchanged but weighted score is -2.0% due to: time (4.9s → 7.0s), tokens (11618 → 13722)
[41] (Plugin) Quality unchanged but weighted score is -8.3% due to: tokens (12006 → 30823), tool calls (0 → 1), time (11.6s → 15.2s)
[42] (Plugin) Quality dropped but weighted score is +23.2% due to: tokens (387899 → 110623), time (142.8s → 33.4s), tool calls (25 → 8)
[43] (Plugin) Quality unchanged but weighted score is -3.8% due to: tokens (35791 → 65210), tool calls (4 → 8), time (12.6s → 26.0s)
[44] (Plugin) Quality unchanged but weighted score is -2.3% due to: time (13.3s → 39.9s), tool calls (4 → 5)
[45] (Isolated) Quality unchanged but weighted score is -4.1% due to: tokens (23952 → 37274), tool calls (3 → 4), time (8.7s → 10.5s)
[46] (Isolated) Quality unchanged but weighted score is -13.0% due to: judgment, quality
[47] (Isolated) Quality unchanged but weighted score is -1.6% due to: judgment, tokens (25217 → 40835), tool calls (2 → 3)
[48] (Plugin) Quality unchanged but weighted score is -0.9% due to: time (10.8s → 13.1s)

timeout — run hit the scenario timeout limit; scoring may be impacted by aborting model execution before it could produce its full output

Model: claude-opus-4.6 | Judge: claude-opus-4.6

Full results

@JanKrivanek
JanKrivanek merged commit c4937f8 into main Mar 20, 2026
26 checks passed
@JanKrivanek
JanKrivanek deleted the dev/ygerges/command-assertion branch March 20, 2026 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants