Skip to content

Add --allow-repo-traversal and remove body line count checks - #524

Merged
JanKrivanek merged 4 commits into
mainfrom
dev/jankrivanek/add-validator-options
Apr 14, 2026
Merged

Add --allow-repo-traversal and remove body line count checks#524
JanKrivanek merged 4 commits into
mainfrom
dev/jankrivanek/add-validator-options

Conversation

@JanKrivanek

@JanKrivanek JanKrivanek commented Apr 14, 2026

Copy link
Copy Markdown
Member

Motivation

  • Adding --allow-repo-traversal option for checking repo-specific skills/agents. Plugin skills/agents should not traverse past their dirs (they can be distributed in isolation), but repo-specific agents/skills are placed in a folder structure and disallowing them to refer to precise locations of docs, configs, scripts etc. forces an extra discovery turn.
  • Removing body line count checks — the BPE token-based complexity classification already provides better size guidance, making the raw line count check redundant.

Changes

  • Introduces CheckOptions with AllowRepoTraversal and wires it into CheckConfig
  • Adds --allow-repo-traversal CLI flag, rejected in --plugin mode (plugins must be portable)
  • Updates SkillProfiler to respect the traversal option
  • Removes body line count validation from both SkillProfiler and AgentProfiler (superseded by BPE token warnings)
  • Adds unit tests for the traversal option

FYI @ViktorHofer, @danmoseley

Copilot AI review requested due to automatic review settings April 14, 2026 11:35
@JanKrivanek
JanKrivanek enabled auto-merge (squash) April 14, 2026 11:36
@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

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

This PR adds configurable validation options to the skill-validator “check” pipeline so users can relax certain spec constraints (line limits and .. path traversal) when validating repo-specific skills/agents, while keeping existing defaults unchanged.

Changes:

  • Introduces CheckOptions (max declaration/agent line limits, allow parent traversal) and wires it into CheckConfig.
  • Adds new CLI flags (--max-declaration-lines, --max-agent-lines, --allow-repo-traversal) and propagates options through CheckCommand.
  • Updates SkillProfiler and AgentProfiler to respect the configured limits and traversal behavior.
Show a summary per file
File Description
eng/skill-validator/src/Check/SkillProfiler.cs Adds CheckOptions support for max body lines and optional .. traversal allowance in file references.
eng/skill-validator/src/Check/Models.cs Introduces CheckOptions model and adds it to CheckConfig.
eng/skill-validator/src/Check/CheckCommand.cs Adds CLI options, builds CheckOptions, and plumbs it through validation calls.
eng/skill-validator/src/Check/AgentProfiler.cs Adds CheckOptions support for max agent body line overrides.

Copilot's findings

Tip

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

  • Files reviewed: 4/4 changed files
  • Comments generated: 4

Comment thread eng/skill-validator/src/Check/CheckCommand.cs Outdated
Comment thread eng/skill-validator/src/Check/CheckCommand.cs Outdated
Comment thread eng/skill-validator/src/Check/SkillProfiler.cs
Comment thread eng/skill-validator/src/Check/AgentProfiler.cs Outdated
@ViktorHofer

ViktorHofer commented Apr 14, 2026

Copy link
Copy Markdown
Member

As noted in the runtime PR, checking the number of lines isn't useful. Tokens is what we want. Should we remove the line check?

- Reject --allow-repo-traversal with --plugin mode (plugins must be portable)
- Validate --max-declaration-lines and --max-agent-lines are positive integers
- Add unit tests for MaxDeclarationLines override in SkillProfiler
- Add unit tests for AllowRepoTraversal suppression and depth check preservation
- Add unit tests for MaxAgentLines override and fallback to MaxDeclarationLines
…-lines options

Line count checks are redundant with BPE token-based complexity classification,
which already provides better guidance. Keep --allow-repo-traversal only.
Copilot AI review requested due to automatic review settings April 14, 2026 12: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

This PR introduces a CheckOptions plumbing path through the skill-validator and adds a CLI flag intended to relax SKILL.md file-reference traversal rules for repo-specific validation scenarios.

Changes:

  • Added CheckOptions (currently only AllowRepoTraversal) and threaded it through check execution paths.
  • Added --allow-repo-traversal CLI flag and rejected it in --plugin mode to preserve plugin portability constraints.
  • Removed the previous 500-line body line-limit validation (and associated unit tests) for both skills and agents; added tests around AllowRepoTraversal.
Show a summary per file
File Description
eng/skill-validator/src/Check/Models.cs Introduces CheckOptions and adds it to CheckConfig.
eng/skill-validator/src/Check/CheckCommand.cs Adds --allow-repo-traversal, maps it into config, and blocks it with --plugin.
eng/skill-validator/src/Check/SkillProfiler.cs Adds optional CheckOptions parameter and uses it to allow .. in references.
eng/skill-validator/src/Check/AgentProfiler.cs Adds optional CheckOptions parameter and removes body line-limit validation.
eng/skill-validator/tests/Check/SkillProfileTests.cs Removes body line-count tests; adds AllowRepoTraversal tests.
eng/skill-validator/tests/Check/AgentPluginTests.cs Removes agent body line-count tests.

Copilot's findings

Tip

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

Comments suppressed due to low confidence (1)

eng/skill-validator/src/Check/SkillProfiler.cs:126

  • AllowRepoTraversal skips the explicit .. rejection, but the subsequent depth check (immediately below this hunk) still uses segments.Length - 1, which will count .. as directory depth. That means ../other-skill/SKILL.md is still likely to fail with a "directories deep" error even though parent traversal is allowed. Consider normalizing/collapsing ./.. before computing depth, or skipping the depth rule for paths that traverse upward when AllowRepoTraversal is enabled.
            // Reject parent-directory traversals
            if (!allowRepoTraversal && segments.Any(s => s == ".."))
            {
                errors.Add($"File reference '{refMatch.Groups[1].Value}' uses parent-directory traversal — references must stay within the skill directory.");
                continue;
  • Files reviewed: 6/6 changed files
  • Comments generated: 4

Comment thread eng/skill-validator/src/Check/Models.cs
Comment thread eng/skill-validator/tests/Check/SkillProfileTests.cs Outdated
Comment thread eng/skill-validator/src/Check/SkillProfiler.cs
Comment thread eng/skill-validator/src/Check/AgentProfiler.cs Outdated
…aversal test

- Remove unused CheckOptions parameter from AgentProfiler.AnalyzeAgent and
  RunAgentsCheckCore since line checks were removed
- Fix AllowRepoTraversalSuppressesParentTraversalError test to use a non-deep
  path (../SKILL.md) and assert no file-ref errors at all
@JanKrivanek JanKrivanek changed the title Add validator options Add --allow-repo-traversal and remove body line count checks Apr 14, 2026
github-actions Bot added a commit that referenced this pull request Apr 14, 2026
github-actions Bot added a commit that referenced this pull request Apr 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
migrate-dotnet9-to-dotnet10 Console app with System.Linq.Async, SIGTERM, and BufferedStream 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view, grep / ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [1]
migrate-dotnet9-to-dotnet10 Expression tree code broken by C# 14 span overload resolution 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, bash / ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, grep, view [2]
migrate-dotnet9-to-dotnet10 ASP.NET Core app with WebHostBuilder, OpenAPI, and forwarded headers 4.0/5 → 4.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view [3]
migrate-dotnet9-to-dotnet10 ASP.NET Core app with OpenAPI transformers using Microsoft.OpenApi v1 APIs 3.0/5 → 4.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view [4]
migrate-dotnet9-to-dotnet10 EF Core app with Azure SQL JSON columns and parameterized collections 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: report_intent, skill, view
migrate-dotnet9-to-dotnet10 EF Core app with dynamic ExecuteUpdate and complex types 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [5]
migrate-dotnet9-to-dotnet10 SQLite app with DateTimeOffset timezone handling 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, grep, view [6]
migrate-dotnet9-to-dotnet10 Worker service with config null array binding and ProviderAlias assembly change 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view
migrate-dotnet9-to-dotnet10 Cryptography app with OpenSSL, X.509, and Rfc2898DeriveBytes 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [7]
migrate-dotnet9-to-dotnet10 SDK and NuGet obscure tooling changes 5.0/5 → 4.0/5 🔴 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view
migrate-dotnet9-to-dotnet10 JSON polymorphism with conflicting property names and XmlSerializer 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [8]
migrate-dotnet9-to-dotnet10 WinForms and WPF desktop app with System.Drawing and DynamicResource 5.0/5 → 4.0/5 🔴 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view
migrate-dotnet9-to-dotnet10 Containerized single-file app with P/Invoke and IDispatchEx 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [9]
migrate-dotnet9-to-dotnet10 App using SslStream properties and SystemEvents 5.0/5 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill
migrate-dotnet9-to-dotnet10 Library with NuGet auditing, transitive deps, and InlineArray 3.0/5 → 5.0/5 🟢 ✅ 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 🟢 ✅ 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 → 5.0/5 ✅ migrate-dotnet9-to-dotnet10; tools: skill, view [10]
dotnet-aot-compat Make Azure.ResourceManager AOT-compatible 3.0/5 → 3.0/5 ✅ dotnet-aot-compat; tools: skill ✅ 0.16
migrate-dotnet8-to-dotnet9 App with empty environment variables, ZIP encoding, and keyed DI services 2.0/5 → 4.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill, bash / ✅ migrate-dotnet8-to-dotnet9; tools: skill, bash, create ✅ 0.04
migrate-dotnet8-to-dotnet9 C# 13 compiler breaking changes — InlineArray on record, iterator safe context, collection expressions 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: report_intent, skill, view ✅ 0.04
migrate-dotnet8-to-dotnet9 ASP.NET Core app with DI validation, forwarded headers, and HttpClientFactory casting 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04
migrate-dotnet8-to-dotnet9 EF Core app with migration patterns and Cosmos DB discriminator 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04
migrate-dotnet8-to-dotnet9 EF Core Cosmos DB app with existing documents and composite id format 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04
migrate-dotnet8-to-dotnet9 App with JsonDocument null deserialization and BinaryFormatter fallback 5.0/5 → 5.0/5 ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04 [11]
migrate-dotnet8-to-dotnet9 CI pipeline with Terminal Logger parsing and version constraints 2.0/5 → 2.0/5 ℹ️ not activated (expected) / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04 [12]
migrate-dotnet8-to-dotnet9 WinForms app with custom UserControls and PictureBox URL loading 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04 [13]
migrate-dotnet8-to-dotnet9 Containerized app with zlib dependency and runtime configuration 5.0/5 → 5.0/5 ✅ migrate-dotnet8-to-dotnet9; tools: skill, bash / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04 [14]
migrate-dotnet8-to-dotnet9 EF Core Cosmos DB app with discriminator and sync I/O 5.0/5 → 5.0/5 ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04 [15]
migrate-dotnet8-to-dotnet9 Library with String.Trim span overload, keyed services, and InlineArray 5.0/5 → 5.0/5 ✅ migrate-dotnet8-to-dotnet9; tools: skill, bash / ✅ migrate-dotnet8-to-dotnet9; tools: skill, bash, grep ✅ 0.04
migrate-dotnet8-to-dotnet9 Containerized app with env var precedence reversal and zlib removal 5.0/5 → 5.0/5 ✅ migrate-dotnet8-to-dotnet9; tools: skill, bash / ✅ migrate-dotnet8-to-dotnet9; tools: skill ✅ 0.04 [16]
thread-abort-migration Worker thread with abort-based cancellation 5.0/5 → 5.0/5 ✅ thread-abort-migration; tools: skill ✅ 0.08 [17]
thread-abort-migration Timeout enforcement via Thread.Abort 5.0/5 → 4.0/5 🔴 ✅ thread-abort-migration; tools: skill / ✅ thread-abort-migration; tools: report_intent, skill ✅ 0.08
thread-abort-migration Blocking WaitHandle with Thread.Interrupt 4.0/5 → 4.0/5 ✅ thread-abort-migration; tools: skill ✅ 0.08 [18]
thread-abort-migration ASP.NET Response.End and Response.Redirect with Thread.Abort 4.0/5 → 5.0/5 🟢 ✅ thread-abort-migration; tools: skill, report_intent / ✅ thread-abort-migration; tools: report_intent, skill ✅ 0.08
thread-abort-migration Thread.Join and Thread.Sleep only — should not migrate 3.0/5 → 5.0/5 🟢 ⚠️ NOT ACTIVATED / ✅ thread-abort-migration; tools: skill ✅ 0.08
migrate-dotnet10-to-dotnet11 Console app with compression and TAR operations 5.0/5 → 4.0/5 🔴 ✅ migrate-dotnet10-to-dotnet11; tools: skill, view ✅ 0.04
migrate-dotnet10-to-dotnet11 C# 15 compiler breaking changes — Span safe-context, nameof, with() 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.04
migrate-dotnet10-to-dotnet11 EF Core app with Cosmos DB provider using sync APIs 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.04 [19]
migrate-dotnet10-to-dotnet11 Deployment to older hardware with minimum requirement changes 2.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.04
migrate-dotnet10-to-dotnet11 Cryptography app using DSA on macOS 4.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.04
migrate-dotnet10-to-dotnet11 Basic TFM update with Docker and global.json 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: skill ✅ 0.04
migrate-dotnet10-to-dotnet11 C# 15 dynamic operator and ref readonly delegate issues 3.0/5 → 5.0/5 🟢 ✅ migrate-dotnet10-to-dotnet11; tools: report_intent, skill, view ✅ 0.04
migrate-nullable-references Enable NRT in a small library with mixed nullability 4.0/5 → 5.0/5 🟢 ✅ migrate-nullable-references; tools: skill ✅ 0.11 [20]
migrate-nullable-references File-by-file migration: only modify the targeted file 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED ✅ 0.11 [21]
migrate-nullable-references Enable NRT in ASP.NET Core Web API with EF Core 3.0/5 → 4.0/5 🟢 ⚠️ NOT ACTIVATED ✅ 0.11
dotnet-pinvoke Generate LibraryImport declaration from C header (.NET 8+) 5.0/5 → 5.0/5 ✅ dotnet-pinvoke; tools: skill ✅ 0.06 [22]
dotnet-pinvoke Generate LibraryImport declaration from C header (.NET Framework) 5.0/5 → 5.0/5 ✅ dotnet-pinvoke; tools: skill ✅ 0.06
csharp-scripts Test a C# language feature with a script 3.0/5 → 4.0/5 🟢 ✅ csharp-scripts; tools: skill, create, edit / ✅ csharp-scripts; tools: skill, create 🟡 0.30
nuget-trusted-publishing Set up trusted publishing for a new NuGet library 3.0/5 → 3.0/5 ✅ nuget-trusted-publishing; tools: skill ✅ 0.18
nuget-trusted-publishing Set up NuGet publishing without mentioning trusted publishing 3.0/5 → 4.0/5 🟢 ✅ nuget-trusted-publishing; tools: report_intent, skill, glob, view, bash, create / ✅ nuget-trusted-publishing; tools: report_intent, skill, view, glob, bash, create ✅ 0.18
nuget-trusted-publishing Migrate existing workflow from API key to trusted publishing 3.0/5 → 4.0/5 🟢 ✅ nuget-trusted-publishing; tools: skill ✅ 0.18

[1] (Isolated) Quality unchanged but weighted score is -0.5% due to: tokens (53491 → 74813)
[2] (Isolated) Quality unchanged but weighted score is -5.7% due to: tokens (18279 → 73815), tool calls (0 → 5)
[3] (Isolated) Quality unchanged but weighted score is -12.1% due to: quality, tokens (16084 → 53919), tool calls (0 → 4)
[4] (Isolated) Quality improved but weighted score is -6.7% due to: tokens (14766 → 54713), tool calls (0 → 4)
[5] (Plugin) Quality unchanged but weighted score is -10.9% due to: tokens (31487 → 57957), quality, tool calls (2 → 4)
[6] (Plugin) Quality unchanged but weighted score is -6.5% due to: quality, tokens (53573 → 78133), tool calls (4 → 5)
[7] (Isolated) Quality unchanged but weighted score is -15.7% due to: judgment, quality
[8] (Isolated) Quality unchanged but weighted score is -22.0% due to: quality, judgment
[9] (Isolated) Quality unchanged but weighted score is -18.9% due to: judgment, quality
[10] (Isolated) Quality unchanged but weighted score is -13.9% due to: judgment, quality
[11] (Plugin) Quality unchanged but weighted score is -3.2% due to: tokens (181275 → 275860), tool calls (18 → 22)
[12] (Isolated) Quality unchanged but weighted score is -7.8% due to: quality, tokens (53087 → 66260), tool calls (8 → 10)
[13] (Isolated) Quality improved but weighted score is -11.0% due to: judgment
[14] (Plugin) Quality unchanged but weighted score is -2.8% due to: quality
[15] (Isolated) Quality unchanged but weighted score is -16.0% due to: judgment, quality, tokens (191577 → 237482), tool calls (16 → 20)
[16] (Plugin) Quality unchanged but weighted score is -1.7% due to: tokens (59892 → 118414), tool calls (11 → 17)
[17] (Plugin) Quality unchanged but weighted score is -2.0% due to: tokens (26272 → 32834), time (29.6s → 39.0s)
[18] (Plugin) Quality unchanged but weighted score is -5.7% due to: quality, tokens (26271 → 33116), time (27.0s → 39.9s)
[19] (Isolated) Quality improved but weighted score is -24.7% due to: judgment, quality, tokens (13165 → 46712), tool calls (0 → 3)
[20] (Isolated) Quality improved but weighted score is -2.3% due to: tokens (112307 → 200026), time (82.6s → 121.5s)
[21] (Plugin) Quality unchanged but weighted score is -2.3% due to: tokens (81364 → 106630)
[22] (Plugin) Quality unchanged but weighted score is -5.8% due to: tokens (37295 → 56943), tool calls (2 → 4), time (21.6s → 27.5s)

timeout — run(s) hit the (1050s) scenario timeout limit; scoring may be impacted by aborting model execution before it could produce its full output (increase via timeout in eval.yaml)

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

🔍 Full Results - additional metrics and failure investigation steps

▶ Sessions Visualisation -- interactive replay of all evaluation sessions

@JanKrivanek
JanKrivanek disabled auto-merge April 14, 2026 12:33
@JanKrivanek
JanKrivanek enabled auto-merge (squash) April 14, 2026 12:33
auto-merge was automatically disabled April 14, 2026 12:34

Pull request was closed

@JanKrivanek JanKrivanek reopened this Apr 14, 2026
@JanKrivanek
JanKrivanek enabled auto-merge (squash) April 14, 2026 12:35
@ViktorHofer

Copy link
Copy Markdown
Member

/evaluate

@JanKrivanek
JanKrivanek merged commit 292a4bc into main Apr 14, 2026
70 checks passed
@JanKrivanek
JanKrivanek deleted the dev/jankrivanek/add-validator-options branch April 14, 2026 13:14
github-actions Bot added a commit that referenced this pull request Apr 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

Skill Scenario Quality Skills Loaded Overfit Verdict
exp-mock-usage-analysis Detect unused and unreachable mock setups 3.0/5 → 4.0/5 🟢 ✅ exp-mock-usage-analysis; tools: skill ✅ 0.07
exp-mock-usage-analysis Detect redundant mock configurations duplicated across tests 3.0/5 → 3.0/5 ✅ exp-mock-usage-analysis; tools: skill ✅ 0.07 [1]
exp-mock-usage-analysis Detect mocking of stable framework types 3.0/5 → 5.0/5 🟢 ✅ exp-mock-usage-analysis; tools: skill ✅ 0.07
exp-mock-usage-analysis Analyze mock usage in NSubstitute tests 4.0/5 → 5.0/5 🟢 ✅ exp-mock-usage-analysis; tools: skill ✅ 0.07
exp-mock-usage-analysis Analyze mock usage in FakeItEasy tests 5.0/5 → 5.0/5 ✅ exp-mock-usage-analysis; tools: skill ✅ 0.07 [2]
exp-mock-usage-analysis Detect excessive mock configuration sprawl 3.0/5 → 4.0/5 🟢 ✅ exp-mock-usage-analysis; tools: skill ✅ 0.07
exp-test-tagging Tag an untagged MSTest test suite 3.0/5 → 4.0/5 🟢 ✅ exp-test-tagging; tools: skill 🟡 0.30
exp-test-tagging Tag an untagged xUnit test suite 3.0/5 → 5.0/5 🟢 ✅ exp-test-tagging; tools: skill, glob / ⚠️ NOT ACTIVATED 🟡 0.30
exp-test-tagging Tag an untagged NUnit test suite 3.0/5 → 5.0/5 🟢 ✅ exp-test-tagging; tools: skill 🟡 0.30
exp-test-tagging Audit test distribution without modifying files 5.0/5 → 5.0/5 ✅ exp-test-tagging; tools: skill 🟡 0.30 [3]
exp-test-tagging Decline request to write new tests 4.0/5 → 4.0/5 ℹ️ not activated (expected) 🟡 0.30
exp-test-smell-detection Detect multiple test smells in order processing test suite 5.0/5 → 5.0/5 ✅ exp-test-smell-detection; tools: skill ✅ 0.04 [4]
exp-test-smell-detection Recognize well-written tests with no significant smells 4.0/5 → 5.0/5 🟢 ✅ exp-test-smell-detection; tools: skill ✅ 0.04
exp-test-smell-detection Recognize integration tests and avoid false positives for external resources 5.0/5 → 5.0/5 ✅ exp-test-smell-detection; tools: skill ✅ 0.04 [5]
exp-test-smell-detection Decline request to write new tests from scratch 5.0/5 → 5.0/5 ℹ️ not activated (expected) ✅ 0.04
exp-test-gap-analysis Find boundary mutation gaps in tiered discount and shipping logic 5.0/5 → 5.0/5 ✅ exp-test-gap-analysis; tools: skill ✅ 0.06
exp-test-gap-analysis Find logic and null-check mutation gaps in access control code 4.0/5 → 5.0/5 🟢 ✅ exp-test-gap-analysis; tools: skill / ✅ exp-test-gap-analysis; tools: skill, edit ✅ 0.06
exp-test-gap-analysis Acknowledge well-tested code with few surviving mutations 4.0/5 → 4.0/5 ✅ exp-test-gap-analysis; tools: skill ✅ 0.06
exp-test-gap-analysis Decline request to write new tests from scratch 4.0/5 → 4.0/5 ℹ️ not activated (expected) ✅ 0.06 [6]
exp-assertion-quality Identify low assertion diversity in equality-dominated test suite 4.0/5 → 5.0/5 🟢 ✅ exp-assertion-quality; tools: skill, glob / ✅ exp-assertion-quality; tools: skill ✅ 0.14
exp-assertion-quality Flag assertion-free tests and trivial-only assertions 3.0/5 → 4.0/5 🟢 ✅ exp-assertion-quality; tools: skill ✅ 0.14 [7]
exp-assertion-quality Recognize well-diversified assertion usage 3.0/5 → 5.0/5 🟢 ✅ exp-assertion-quality; tools: skill ✅ 0.14
exp-assertion-quality Decline request to write new tests from scratch 2.0/5 ⏰ → 2.0/5 ⏰ ℹ️ not activated (expected) ✅ 0.14 [8]
exp-test-maintainability Recommend data-driven patterns with display names for unclear parameters 4.0/5 → 4.0/5 ⚠️ NOT ACTIVATED ✅ 0.10 [9]
exp-test-maintainability Recognize well-maintained tests that need minimal changes 4.0/5 → 5.0/5 🟢 ✅ exp-test-maintainability; tools: report_intent, skill ✅ 0.10
exp-test-maintainability Detect repeated object construction and setup across test methods 3.0/5 → 4.0/5 🟢 ✅ exp-test-maintainability; tools: skill ✅ 0.10
exp-test-maintainability Recognize tests with minimal boilerplate that need no refactoring 4.0/5 → 4.0/5 ✅ exp-test-maintainability; tools: skill ✅ 0.10
exp-simd-vectorization Optimize manual min/max with TensorPrimitives 1.0/5 ⏰ → 5.0/5 🟢 ✅ exp-simd-vectorization; tools: skill, glob, create, edit, bash 🟡 0.25
exp-simd-vectorization Optimize manual product with TensorPrimitives 1.0/5 → 5.0/5 🟢 ✅ exp-simd-vectorization; tools: skill, glob, create, bash 🟡 0.25
exp-simd-vectorization No optimization opportunity — dictionary-based lookup service 5.0/5 → 5.0/5 ⚠️ NOT ACTIVATED 🟡 0.25 [10]
exp-simd-vectorization Optimize int array conditional increment with SIMD 5.0/5 → 4.0/5 🔴 ✅ exp-simd-vectorization; tools: skill / ⚠️ NOT ACTIVATED 🟡 0.25
exp-simd-vectorization Optimize byte buffer bit reversal with SIMD 3.0/5 ⏰ → 2.0/5 ⏰ 🔴 ✅ exp-simd-vectorization; tools: skill / ✅ exp-simd-vectorization; tools: skill, glob 🟡 0.25
dotnet-maui-doctor Plan macOS MAUI setup with Xcode 3.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill, report_intent, view 🟡 0.23
dotnet-maui-doctor Plan Linux MAUI environment for Android 3.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill, view 🟡 0.23
dotnet-maui-doctor Guardrail against workload update and repair 1.0/5 → 3.0/5 🟢 ✅ dotnet-maui-doctor; tools: report_intent, skill / ✅ dotnet-maui-doctor; tools: skill 🟡 0.23
dotnet-maui-doctor Diagnose non-Microsoft JDK causing build failure 4.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: report_intent, skill, view 🟡 0.23
dotnet-maui-doctor Plan complete MAUI setup on Windows 4.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill, view 🟡 0.23 [11]
dotnet-maui-doctor Prevent incorrect JAVA_HOME configuration 3.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: report_intent, skill / ✅ dotnet-maui-doctor; tools: skill 🟡 0.23
dotnet-maui-doctor Determine required Android SDK packages for specific .NET version 3.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill, view, bash 🟡 0.23
dotnet-maui-doctor Fix stale MAUI workloads after SDK update 2.0/5 → 5.0/5 🟢 ✅ dotnet-maui-doctor; tools: skill 🟡 0.23
maui-data-binding Set up compiled bindings with x:DataType on a page 3.0/5 → 3.0/5 ✅ maui-data-binding; tools: skill ✅ 0.09
maui-data-binding Implement MVVM ViewModel with ObservableObject 5.0/5 → 5.0/5 ✅ maui-data-binding; tools: report_intent, skill / ✅ maui-data-binding; tools: skill ✅ 0.09 [12]
maui-data-binding Create and use an IValueConverter 5.0/5 → 5.0/5 ✅ maui-data-binding; tools: report_intent, skill / ✅ maui-data-binding; tools: skill ✅ 0.09 [13]
maui-data-binding Diagnose missing BindingContext and non-compiled bindings 3.0/5 → 4.0/5 🟢 ✅ maui-data-binding; tools: report_intent, skill ✅ 0.09
maui-app-lifecycle Save and restore state on background 2.0/5 → 5.0/5 🟢 ✅ maui-app-lifecycle; tools: skill ✅ 0.10
maui-app-lifecycle Window lifecycle event subscription 4.0/5 → 5.0/5 🟢 ✅ maui-app-lifecycle; tools: skill / ✅ maui-app-lifecycle; tools: report_intent, skill ✅ 0.10 [14]
maui-app-lifecycle Platform-specific lifecycle mapping 4.0/5 → 5.0/5 🟢 ✅ maui-app-lifecycle; tools: report_intent, skill ✅ 0.10
maui-app-lifecycle Avoid legacy Xamarin.Forms lifecycle methods 5.0/5 → 4.0/5 🔴 ✅ maui-app-lifecycle; tools: report_intent, skill / ✅ maui-app-lifecycle; tools: skill ✅ 0.10
maui-theming Add light/dark mode support using AppThemeBinding 5.0/5 → 5.0/5 ✅ maui-theming; tools: report_intent, skill ✅ 0.06 [15]
maui-theming Create custom themes with ResourceDictionary switching 4.0/5 → 5.0/5 🟢 ✅ maui-theming; tools: skill ✅ 0.06
maui-theming Detect and respond to system theme changes 5.0/5 → 5.0/5 ✅ maui-theming; tools: report_intent, skill ✅ 0.06 [16]
maui-theming Avoid common theming mistakes 5.0/5 → 5.0/5 ✅ maui-theming; tools: report_intent, skill / ✅ maui-theming; tools: skill ✅ 0.06 [17]
maui-dependency-injection Register services with correct lifetimes in MauiProgram.cs 5.0/5 → 5.0/5 ✅ maui-dependency-injection; tools: skill / ✅ maui-dependency-injection; tools: report_intent, skill ✅ 0.07 [18]
maui-dependency-injection Shell navigation auto-resolves DI-registered pages 5.0/5 → 5.0/5 ✅ maui-dependency-injection; tools: skill / ✅ maui-dependency-injection; tools: report_intent, skill ✅ 0.07 [19]
maui-dependency-injection Platform-specific service registration with fallback 3.0/5 → 5.0/5 🟢 ✅ maui-dependency-injection; tools: report_intent, skill / ✅ maui-dependency-injection; tools: skill ✅ 0.07
maui-dependency-injection Avoid AddScoped pitfall in MAUI 3.0/5 → 5.0/5 🟢 ✅ maui-dependency-injection; tools: report_intent, skill / ✅ maui-dependency-injection; tools: skill ✅ 0.07
maui-shell-navigation Set up Shell navigation with tabs and flyout 3.0/5 → 5.0/5 🟢 ✅ maui-shell-navigation; tools: skill ✅ 0.07
maui-shell-navigation Navigate with parameters using GoToAsync 5.0/5 → 5.0/5 ✅ maui-shell-navigation; tools: report_intent, skill ✅ 0.07
maui-shell-navigation Handle back navigation and unsaved changes guard 2.0/5 → 5.0/5 🟢 ✅ maui-shell-navigation; tools: report_intent, skill ✅ 0.07
maui-shell-navigation Diagnose common Shell navigation mistakes 5.0/5 → 5.0/5 ✅ maui-shell-navigation; tools: report_intent, skill / ✅ maui-shell-navigation; tools: skill ✅ 0.07 [20]
maui-safe-area Handle notch and status bar safe areas on iOS 1.0/5 ⏰ → 4.0/5 🟢 ✅ maui-safe-area; tools: skill ✅ 0.10
maui-safe-area Edge-to-edge layout with SafeAreaEdges 1.0/5 → 5.0/5 🟢 ✅ maui-safe-area; tools: skill ✅ 0.10
maui-safe-area Keyboard avoidance with safe area for chat UI 1.0/5 → 5.0/5 🟢 ✅ maui-safe-area; tools: report_intent, skill ✅ 0.10
maui-safe-area Avoid deprecated UseSafeArea in new .NET 10 project 1.0/5 → 5.0/5 🟢 ✅ maui-safe-area; tools: report_intent, skill ✅ 0.10
maui-collectionview Basic CollectionView with data binding and DataTemplate 5.0/5 → 5.0/5 ✅ maui-collectionview; tools: report_intent, skill / ✅ maui-collectionview; tools: skill ✅ 0.07 [21]
maui-collectionview Grid layout with CollectionView 5.0/5 → 5.0/5 ✅ maui-collectionview; tools: report_intent, skill ✅ 0.07 [22]
maui-collectionview Selection and pull-to-refresh with CollectionView 5.0/5 → 5.0/5 ✅ maui-collectionview; tools: report_intent, skill ✅ 0.07 [23]
maui-collectionview Avoid ListView and ViewCell mistakes 5.0/5 → 5.0/5 ✅ maui-collectionview; tools: report_intent, skill / ✅ maui-collectionview; tools: skill ✅ 0.07 [24]

[1] (Plugin) Quality unchanged but weighted score is -4.1% due to: tokens (48820 → 74743), time (62.4s → 86.7s), tool calls (5 → 6)
[2] (Plugin) Quality unchanged but weighted score is -1.5% due to: tokens (27922 → 48619), time (37.1s → 52.0s), tool calls (3 → 4)
[3] (Plugin) Quality unchanged but weighted score is -0.1% due to: tokens (45554 → 71176), tool calls (7 → 10)
[4] (Plugin) Quality unchanged but weighted score is -3.3% due to: tokens (52544 → 93208), time (40.7s → 84.7s), tool calls (5 → 8)
[5] (Plugin) Quality unchanged but weighted score is -7.4% due to: tokens (52433 → 92090), time (42.5s → 78.2s), tool calls (5 → 8)
[6] (Plugin) Quality unchanged but weighted score is -10.0% due to: tokens (39561 → 121657), tool calls (3 → 11), time (27.1s → 63.5s)
[7] (Isolated) Quality improved but weighted score is -8.4% due to: quality, tokens (38364 → 56975), time (18.4s → 34.3s), tool calls (4 → 5)
[8] (Isolated) Quality unchanged but weighted score is -0.8% due to: tokens (183070 → 210904)
[9] (Plugin) Quality unchanged but weighted score is -5.0% due to: quality, time (19.3s → 28.2s), tokens (13603 → 15342)
[10] (Isolated) Quality unchanged but weighted score is -1.1% due to: tokens (57573 → 70617), tool calls (5 → 6)
[11] (Isolated) Quality improved but weighted score is -5.0% due to: completion (✓ → ✗), tokens (32078 → 79815), tool calls (1 → 8), time (44.7s → 54.0s)
[12] (Plugin) Quality unchanged but weighted score is -4.5% due to: tokens (24676 → 51090), tool calls (0 → 1), time (19.0s → 26.4s)
[13] (Plugin) Quality unchanged but weighted score is -7.5% due to: tokens (24634 → 46885), tool calls (0 → 1)
[14] (Isolated) Quality improved but weighted score is -17.3% due to: completion (✓ → ✗), tokens (18344 → 42806), tool calls (0 → 1)
[15] (Isolated) Quality unchanged but weighted score is -22.5% due to: judgment, quality, tokens (18954 → 31986), tool calls (0 → 2)
[16] (Plugin) Quality unchanged but weighted score is -7.9% due to: tokens (18649 → 41576), tool calls (0 → 2)
[17] (Plugin) Quality unchanged but weighted score is -8.5% due to: tokens (18623 → 38030), tool calls (0 → 1), time (13.8s → 19.2s)
[18] (Plugin) Quality unchanged but weighted score is -7.4% due to: tokens (18567 → 35273), tool calls (0 → 2)
[19] (Isolated) Quality unchanged but weighted score is -17.4% due to: judgment, tokens (18585 → 31194), tool calls (0 → 1)
[20] (Plugin) Quality unchanged but weighted score is -4.9% due to: tokens (18595 → 42228), tool calls (0 → 1), time (15.1s → 23.8s)
[21] (Plugin) Quality unchanged but weighted score is -8.7% due to: tokens (18612 → 42547), tool calls (0 → 1), time (13.9s → 20.5s)
[22] (Plugin) Quality unchanged but weighted score is -8.6% due to: tokens (18414 → 36552), tool calls (0 → 2), time (9.5s → 14.0s)
[23] (Plugin) Quality unchanged but weighted score is -7.4% due to: tokens (18818 → 37143), tool calls (0 → 2)
[24] (Isolated) Quality unchanged but weighted score is -9.4% due to: tokens (18531 → 39228), tool calls (0 → 2), time (14.9s → 26.0s)

timeout — run(s) hit the (120s, 180s) scenario timeout limit; scoring may be impacted by aborting model execution before it could produce its full output (increase via timeout in eval.yaml)

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

🔍 Full Results - additional metrics and failure investigation steps

▶ Sessions Visualisation -- interactive replay of all evaluation sessions

sayedihashimi pushed a commit to sayedihashimi/skills that referenced this pull request Apr 20, 2026
)

* Add validator options

* Address PR review: validate options and add tests

- Reject --allow-repo-traversal with --plugin mode (plugins must be portable)
- Validate --max-declaration-lines and --max-agent-lines are positive integers
- Add unit tests for MaxDeclarationLines override in SkillProfiler
- Add unit tests for AllowRepoTraversal suppression and depth check preservation
- Add unit tests for MaxAgentLines override and fallback to MaxDeclarationLines

* Remove body line count checks and --max-declaration-lines/--max-agent-lines options

Line count checks are redundant with BPE token-based complexity classification,
which already provides better guidance. Keep --allow-repo-traversal only.

* Address review: remove unused CheckOptions from AgentProfiler, fix traversal test

- Remove unused CheckOptions parameter from AgentProfiler.AnalyzeAgent and
  RunAgentsCheckCore since line checks were removed
- Fix AllowRepoTraversalSuppressesParentTraversalError test to use a non-deep
  path (../SKILL.md) and assert no file-ref errors at all
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants