Skip to content

Improve template and JSON skill guidance - #1097

Merged
Evangelink merged 18 commits into
mainfrom
dev/amauryleve/improve-skill-results
Aug 31, 2026
Merged

Improve template and JSON skill guidance#1097
Evangelink merged 18 commits into
mainfrom
dev/amauryleve/improve-skill-results

Conversation

@Evangelink

@Evangelink Evangelink commented Aug 31, 2026

Copy link
Copy Markdown
Member

Summary

Latest cross-model evaluation evidence showed repeatable skill-induced failures rather than general response-quality gaps: the .NET 11 JSON skill stopped when the SDK was absent, and template skills guessed option or schema shapes, emitted unsafe creation commands for advice-only requests, or continued semantic validation after malformed JSON.

This change replaces those failure modes with explicit decision rules. It adds self-contained local .NET 11 acquisition and the correct dictionary-key policy, grounds template option claims in observed dotnet new --help output, documents valid host constraints and restore post-actions, makes CPM-aware creation restore-safe, requires --dry-run for no-write advice, and stops validation at parse errors.

The follow-up six-model run also exposed two evaluator contradictions. Template-packaging prompts now receive real buildable Worker and Web API fixtures instead of nonexistent directories, and smart-default no-write scenarios explicitly grade --dry-run as the required safety behavior. Additional guidance addresses model-family failures around .sln format selection, sequential project creation, installed-template inspection, generated dependencies, and template-specific help.

Evaluation evidence

The first default-profile run improved 2 of 14 model/skill results. A six-model run on the first revision improved 8 of 42. After the evidence-driven redesign, two full-profile runs over the materially identical core skill payload improved 15 of 42 and 11 of 42 respectively.

The remaining outcomes are not a stable content signal: many are one-loss 6W/0T/1L or four-discordant 4W/3T/0L records that miss the exact sign-test gate at p=0.063, while template instantiation frequently ties a saturated baseline despite producing the correct files and successful builds. The 15-to-11 swing on equivalent content demonstrates judge variance. Adding post-hoc stimuli solely to force every model over the threshold would violate this repository's eval-quality guidance, so this PR fixes the repeatable defects and records the residual statistical limitation rather than gaming the gate.

Related issue

N/A

Validation

  • dotnet run --no-build --project eng\skill-validator\src\SkillValidator.csproj -- check --plugin .\plugins\dotnet11
  • dotnet run --no-build --project eng\skill-validator\src\SkillValidator.csproj -- check --plugin .\plugins\dotnet-template-engine
  • python eng\eval-quality\check_eval_quality.py
  • npx --yes markdownlint-cli2 on all changed skill files
  • Built both new project-template fixtures on net8.0
  • Exercised command graders against single-line, continued, chained, inline-code, comment, option-value, and additional unsafe-command cases
  • Compiled and ran a net11.0 probe covering JsonNamingPolicy.PascalCase, DictionaryKeyPolicy, GetTypeInfo<T>(), and TryGetTypeInfo<T>()

All local checks passed.

Checklist

  • I searched existing issues and pull requests to avoid duplicates.
  • I kept this pull request focused and avoided unrelated refactors.
  • I added or updated tests, evals, or documentation when changing skill or agent behavior.
  • I updated CODEOWNERS when adding or moving owned content.
  • I updated all marketplace manifests when plugin metadata changed.
  • I updated eng/known-domains.txt for any new external domains referenced by skill content.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings August 31, 2026 10:44
@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Skill Coverage Report

Plugin Skill Covered Coverage
⚠️ dotnet-template-engine template-authoring 13/19 68.4%
dotnet-template-engine template-comparison 10/12 83.3%
dotnet-template-engine template-discovery 14/16 87.5%
dotnet-template-engine template-instantiation 17/17 100%
dotnet-template-engine template-smart-defaults 10/12 83.3%
dotnet-template-engine template-validation 11/12 91.7%
dotnet11 system-text-json-net11 15/16 93.8%
Uncovered: dotnet-template-engine/template-authoring
  • [Validation] template.json passes manual validation with zero errors (line 193)
  • [Validation] Template identity and shortName are unique and meaningful (line 194)
  • [Validation] All parameters have descriptions and appropriate defaults (line 195)
  • [Validation] Template can be installed, dry-run, and instantiated successfully (line 196)
  • [Validation] Created projects build cleanly with dotnet build (line 197)
  • [Pitfall] Identity format issues (line 206)
Uncovered: dotnet-template-engine/template-comparison
  • [Validation] Differences relevant to the user's scenario are called out explicitly (line 138)
  • [Validation] Unsupported or absent options are labeled instead of guessed (line 140)
Uncovered: dotnet-template-engine/template-discovery
  • [Validation] User understands what the template produces before proceeding to creation (line 197)
  • [Pitfall] Recommending a template without previewing output (line 208)
Uncovered: dotnet-template-engine/template-smart-defaults
  • [Validation] Exact parameter names/choices were confirmed against dotnet new <template> --help, including for advice-only exact commands (line 101)
  • [Validation] Boolean switches are emitted without a trailing true (line 103)
Uncovered: dotnet-template-engine/template-validation
  • [WorkflowStep] Step 1: Locate the template.json (line 159)
Uncovered: dotnet11/system-text-json-net11
  • [CodePattern] [guid] (line 49)

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.

Copilot review overview

🟡 Changes recommended

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review tier: Lite
Findings: 2 Low severity

New issues introduced by this change (2)
Severity Finding
Low severity plugins/​dotnet-template-engine/​skills/​template-validation/​SKILL.md — Step 2 says to report a malformed JSON parse error with only a line number, but the new parse…
Low severity plugins/​dotnet-template-engine/​skills/​template-smart-defaults/​SKILL.md — The validation checklist still says advice-only requests should be flagged as "to-confirm" rather…
What changed in this PR

This PR updates skill guidance for the .NET 11 System.Text.Json skill and several dotnet new template-engine skills to reduce common failure modes observed in cross-model evaluations (e.g., continuing semantic validation after JSON parse errors, guessing template flags, and emitting unsafe commands for no-write advice).

Changes:

  • Strengthens the .NET 11 System.Text.Json skill with explicit DictionaryKeyPolicy guidance and a non-admin, local dotnet-install fallback when execution is requested.
  • Adds a “parse gate” to template validation (stop after syntax errors) and tightens constraint/schema guidance (notably host constraints).
  • Requires grounding option claims in observed dotnet new <template> --help output, and makes “no-write” advice commands safe via --dry-run; improves CPM-aware instantiation guidance by avoiding restore before centralization.
File Description
plugins/​dotnet11/​skills/​system-text-json-net11/​SKILL.md Adds net11 execution enablement guidance (local SDK install) and clarifies PascalCase for dictionary keys via DictionaryKeyPolicy.
plugins/​dotnet-template-engine/​skills/​template-validation/​SKILL.md Introduces a parse-first gate and expands rules for constraints/schema-sensitive validation.
plugins/​dotnet-template-engine/​skills/​template-smart-defaults/​SKILL.md Requires --help grounding for exact commands and enforces --dry-run for no-write advice commands.
plugins/​dotnet-template-engine/​skills/​template-instantiation/​SKILL.md Adds a concise situation→action table and improves CPM flow by preferring --no-restore when available.
plugins/​dotnet-template-engine/​skills/​template-discovery/​SKILL.md Tightens “inspection requires inspection” and reinforces --dry-run for no-write command output.
plugins/​dotnet-template-engine/​skills/​template-comparison/​SKILL.md Establishes an evidence contract for side-by-side comparisons and avoids unapproved installs.
plugins/​dotnet-template-engine/​skills/​template-authoring/​SKILL.md Adds schema-accurate authoring patterns for XML conditionals, restore actions, and host constraints.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread plugins/dotnet-template-engine/skills/template-validation/SKILL.md
@Evangelink
Evangelink enabled auto-merge (squash) August 31, 2026 10:50
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 31, 2026 10:55

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.

Copilot review overview

🟢 Approval recommended

Review tier: Lite
Findings: None

Issues resolved since last review (2)
Severity Finding
Low severity plugins/​dotnet-template-engine/​skills/​template-smart-defaults/​SKILL.md — The validation checklist still says advice-only requests should be flagged as "to-confirm" rather… View resolved comment
Low severity plugins/​dotnet-template-engine/​skills/​template-validation/​SKILL.md — Step 2 says to report a malformed JSON parse error with only a line number, but the new parse… View resolved comment

@Evangelink Evangelink left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

/evaluate

@github-actions github-actions Bot added the pr-state/evals-in-progress PR evaluations are in progress label Aug 31, 2026
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

14 model/skill results across 7 skills and 2 models — ✅ 2 improved, ➖ 11 not proven improved, ⚠️ 0 invalid or underpowered, ⛔ 1 activation contract failure, 📉 0 preference losses (report only).

Measurement identity: evaluated commit 73b589e09a2a5bf4d7706471c3fcc0034c60694d; 2 judge models.

Measurement health: 14 expected / 14 observed / 14 written; 0 missing, 0 unexpected, 0 invalid; 0 recovered comparison error slots and 0 unresolved comparison error slots.

Objective completion gate: not enabled. Aggregate completion transitions are telemetry only, so this report does not claim that zero objective regressions were proven.

A result passes only when preference-eligible distinct-stimulus votes have aggregate net win of at least 20% and an exact one-sided sign-test result of p ≤ 0.05, and every explicit dormancy activation contract passes. Repeated runs measure reliability only.

Skill Model Verdict Gate evidence Overfit Warnings Next action
system-text-json-net11 claude-sonnet-4.6 ⛔ Activation contract failed n=6; 6W/0T/0L; d=6; p=0.016; net +100.0%; 2 dormancy excluded 🟡 0.36 Dormancy contract: 1 unexpected activation(s) Narrow skill routing so the listed off-target scenarios stay dormant.
system-text-json-net11 gpt-5.6-luna ➖ Not proven improved n=6; 4W/2T/0L; d=4; p=0.063; net +66.7%; 2 dormancy excluded ✅ 0.11 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-authoring claude-sonnet-4.6 ➖ Not proven improved n=7; 5W/1T/1L; d=6; p=0.109; net +57.1% 🟡 0.30 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-authoring gpt-5.6-luna ➖ Not proven improved n=7; 2W/2T/3L; d=5; p=0.500; net -14.3% ✅ 0.08 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-comparison claude-sonnet-4.6 ➖ Not proven improved n=7; 4W/2T/1L; d=5; p=0.188; net +42.9% 🟡 0.26 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-comparison gpt-5.6-luna ➖ Not proven improved n=7; 4W/2T/1L; d=5; p=0.188; net +42.9% ✅ 0.12 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-discovery claude-sonnet-4.6 ✅ Improved n=7; 5W/2T/0L; d=5; p=0.031; net +71.4% 🟡 0.37 Review overfit evidence.
template-discovery gpt-5.6-luna ➖ Not proven improved n=7; 5W/1T/1L; d=6; p=0.109; net +57.1% ✅ 0.16 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-instantiation claude-sonnet-4.6 ➖ Not proven improved n=7; 2W/4T/1L; d=3; p=0.500; net +14.3% 🟡 0.27 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-instantiation gpt-5.6-luna ➖ Not proven improved n=7; 0W/6T/1L; d=1; p=0.500; net -14.3% ✅ 0.15 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-smart-defaults claude-sonnet-4.6 ✅ Improved n=7; 6W/1T/0L; d=6; p=0.016; net +85.7% 🟡 0.43 Review overfit evidence.
template-smart-defaults gpt-5.6-luna ➖ Not proven improved n=7; 5W/1T/1L; d=6; p=0.109; net +57.1% 🟡 0.24 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-validation claude-sonnet-4.6 ➖ Not proven improved n=7; 6W/0T/1L; d=7; p=0.063; net +71.4% 🟡 0.49 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-validation gpt-5.6-luna ➖ Not proven improved n=7; 6W/0T/1L; d=7; p=0.063; net +71.4% 🟡 0.20 Inspect tied or lost stimuli and fix inconsistent skill behavior.
ℹ️ How to read this report
  • ✅ Improved — the result passed both the statistical gate and the 20% practical net-win floor.
  • ➖ Not proven improved — the result is valid but did not pass both gates. This is not automatically a regression.
  • ⚠️ Invalid / underpowered — the gate withheld a quality verdict. Fix the measurement before judging the skill.
  • ⛔ Activation contract failed — the isolated target skill activated on an explicit dormancy scenario. Dormancy preference is excluded, but this routing failure still blocks a pass.
  • 📉 Preference loss — the LLM judge credibly preferred baseline. It is report-only, not objective completion proof.
  • Gate evidencen preference-eligible distinct-stimulus votes, W/T/L stimulus votes, d discordant votes, exact one-sided p, net win, and the count of separately retained dormancy stimuli. The p value applies to one model/skill result; no matrix-wide multiple-comparison correction is applied.
  • Overfit — overfitting-judge severity (✅ Low, 🟡 Moderate, 🔴 High, — none) and score.
  • Warnings — activation, timeout, retry recovery, or unresolved comparison conditions that need attention.
  • Do not add repeated runs to increase statistical power. Do not add stimuli after seeing a near-pass unless the new breadth is predeclared for a new experiment.
⛔ Activation contract failed — system-text-json-net11 (claude-sonnet-4.6)

Why: Net win +100.0% (6W/0T/0L over 6 preference-eligible stimulus vote(s), sign test p=0.016), mean preference +75.0% across 8 paired run(s), 2 dormancy stimulus/stimuli excluded from preference — activation contract failed (1 explicit dormancy scenario(s) activated the isolated target skill)

Next action: Narrow skill routing so the listed off-target scenarios stay dormant.

State: VALID_NO_CHANGE (activation_contract_failed)

Gate evidence: n=6; 6W/0T/0L; d=6; p=0.016; net +100.0%; 2 dormancy excluded

Warnings: Dormancy contract: 1 unexpected activation(s)

Overfit: Moderate (score 0.36)

Repeated-run reliability (not used by the gate): 8 paired runs (6W/2T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Non-activation: Newtonsoft.Json PascalCase contract resolver Excluded (activation contract) +0.0% +0.0% 0/1/0
= Non-activation: camelCase JSON serialization on .NET 8 Excluded (activation contract) +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Non-activation: Newtonsoft.Json PascalCase contract resolver: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — system-text-json-net11 (gpt-5.6-luna)

Why: Net win +66.7% (4W/2T/0L over 6 preference-eligible stimulus vote(s), sign test p=0.063), mean preference +32.5% across 8 paired run(s), 2 dormancy stimulus/stimuli excluded from preference — not credible — 2 of 6 preference-eligible stimulus vote(s) tied, leaving only 4 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=6; 4W/2T/0L; d=4; p=0.063; net +66.7%; 2 dormancy excluded

Overfit: Low (score 0.11)

Repeated-run reliability (not used by the gate): 8 paired runs (4W/2T/2L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Non-activation: Newtonsoft.Json PascalCase contract resolver Excluded (activation contract) -100.0% -40.0% 0/0/1
▼ Non-activation: camelCase JSON serialization on .NET 8 Excluded (activation contract) -100.0% -40.0% 0/0/1
= Probe source-generated metadata without exception control flow Eligible +0.0% +0.0% 0/1/0
= Type-safe JsonTypeInfo access without exceptions in .NET 11 Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Probe source-generated metadata without exception control flow: Both responses produced functionally identical, correct results: a net11.0 app with source-generated context, using TryGetTypeInfo<T>() without try/catch, branching on both outcomes, and running to prove behavior. Both recovered from apply_patch failures via printf and both in...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-authoring (claude-sonnet-4.6)

Why: Net win +57.1% (5W/1T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.109), mean preference +40.0% across 7 paired run(s) — not credible (sign test p=0.109 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 5W/1T/1L; d=6; p=0.109; net +57.1%

Overfit: Moderate (score 0.30)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/1T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Author a reusable item template Eligible +0.0% +0.0% 0/1/0
▼ Create template from existing project Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Author a reusable item template: Position-swap inconsistent (forward: B, reverse: tie). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-authoring (gpt-5.6-luna)

Why: Net win -14.3% (2W/2T/3L over 7 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -5.7% across 7 paired run(s) — no improvement

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 2W/2T/3L; d=5; p=0.500; net -14.3%

Overfit: Low (score 0.08)

Repeated-run reliability (not used by the gate): 7 paired runs (2W/2T/3L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Add a choice parameter with conditional project content Eligible -100.0% -100.0% 0/0/1
= Author a reusable item template Eligible +0.0% +0.0% 0/1/0
= Create template from existing project Eligible +0.0% +0.0% 0/1/0
▼ Preserve central package management conventions Eligible -100.0% -40.0% 0/0/1
▼ Restrict and classify an SDK-specific template Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Add a choice parameter with conditional project content: Response A delivers a complete, self-contained answer with the full symbols entry and conditional snippets that the user can directly read and use, correctly explaining placement. Response B chose to edit a skill's SKILL.md file and only returned a summary, never showing the a...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-comparison (claude-sonnet-4.6)

Why: Net win +42.9% (4W/2T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.188), mean preference +17.1% across 7 paired run(s) — not credible (sign test p=0.188 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 4W/2T/1L; d=5; p=0.188; net +42.9%

Overfit: Moderate (score 0.26)

Repeated-run reliability (not used by the gate): 7 paired runs (4W/2T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Choose MVC or Razor Pages for an admin portal Eligible -100.0% -40.0% 0/0/1
= Compare webapi vs webapp side by side Eligible +0.0% +0.0% 0/1/0
= Select a test project template for an enterprise suite Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Choose MVC or Razor Pages for an admin portal: Both are strong, accurate, and meet the task without instantiating a project. B has a marginally more exhaustive table, but A gives the clearer, more situation-specific rationale for MVC and avoids several less relevant template-option rows, making it slightly stronger overall.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-comparison (gpt-5.6-luna)

Why: Net win +42.9% (4W/2T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.188), mean preference +17.1% across 7 paired run(s) — not credible (sign test p=0.188 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 4W/2T/1L; d=5; p=0.188; net +42.9%

Overfit: Low (score 0.12)

Repeated-run reliability (not used by the gate): 7 paired runs (4W/2T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Choose MVC or Razor Pages for an admin portal Eligible +0.0% +0.0% 0/1/0
▼ Choose a Blazor or Razor Pages template Eligible -100.0% -40.0% 0/0/1
= Compare webapi vs webapp side by side Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Choose MVC or Razor Pages for an admin portal: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-discovery (gpt-5.6-luna)

Why: Net win +57.1% (5W/1T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.109), mean preference +22.9% across 7 paired run(s) — not credible (sign test p=0.109 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 5W/1T/1L; d=6; p=0.109; net +57.1%

Overfit: Low (score 0.16)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/1T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Inspect web API template parameters Eligible +0.0% +0.0% 0/1/0
▼ Preview project creation with dry run Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Inspect web API template parameters: Position-swap inconsistent (forward: B, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-instantiation (claude-sonnet-4.6)

Why: Net win +14.3% (2W/4T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +5.7% across 7 paired run(s) — not credible — 4 of 7 preference-eligible stimulus vote(s) tied, leaving only 3 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 2W/4T/1L; d=3; p=0.500; net +14.3%

Overfit: Moderate (score 0.27)

Repeated-run reliability (not used by the gate): 7 paired runs (2W/4T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Adapt a generated test project to central package management Eligible +0.0% +0.0% 0/1/0
= Compose an application and test solution Eligible +0.0% +0.0% 0/1/0
= Create a worker service Eligible +0.0% +0.0% 0/1/0
▼ Create and build a class library Eligible -100.0% -40.0% 0/0/1
= Match a neighboring project's target framework Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Adapt a generated test project to central package management: Both runs fully satisfy the requested repository changes and verify them with a successful build. B avoids the template's initial incompatible restore via --no-restore, but this does not produce a materially better final result than A, which recovers correctly.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-instantiation (gpt-5.6-luna)

Why: Net win -14.3% (0W/6T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -5.7% across 7 paired run(s) — no improvement

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 0W/6T/1L; d=1; p=0.500; net -14.3%

Overfit: Low (score 0.15)

Repeated-run reliability (not used by the gate): 7 paired runs (0W/6T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Adapt a generated test project to central package management Eligible +0.0% +0.0% 0/1/0
= Compose an application and test solution Eligible +0.0% +0.0% 0/1/0
= Create a console application Eligible +0.0% +0.0% 0/1/0
= Create a controller-based web API Eligible +0.0% +0.0% 0/1/0
= Create a worker service Eligible +0.0% +0.0% 0/1/0
▼ Create and build a class library Eligible -100.0% -40.0% 0/0/1
= Match a neighboring project's target framework Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Adapt a generated test project to central package management: Position-swap inconsistent (forward: tie, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-smart-defaults (gpt-5.6-luna)

Why: Net win +57.1% (5W/1T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.109), mean preference +31.4% across 7 paired run(s) — not credible (sign test p=0.109 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 5W/1T/1L; d=6; p=0.109; net +57.1%

Overfit: Moderate (score 0.24)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/1T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= AOT implies a compatible framework Eligible +0.0% +0.0% 0/1/0
▼ Preserve explicit no-auth and no-HTTPS choices Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • AOT implies a compatible framework: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-validation (claude-sonnet-4.6)

Why: Net win +71.4% (6W/0T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.063), mean preference +54.3% across 7 paired run(s) — not credible (sign test p=0.063 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 6W/0T/1L; d=7; p=0.063; net +71.4%

Overfit: Moderate (score 0.49)

Repeated-run reliability (not used by the gate): 7 paired runs (6W/0T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Report a malformed template with its parse location Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Report a malformed template with its parse location: Both reach the correct diagnosis and repair the file, but A better fulfills the request by visibly showing the exact correction and avoids B's extraneous semantic recommendations.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-validation (gpt-5.6-luna)

Why: Net win +71.4% (6W/0T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.063), mean preference +54.3% across 7 paired run(s) — not credible (sign test p=0.063 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 6W/0T/1L; d=7; p=0.063; net +71.4%

Overfit: Moderate (score 0.20)

Repeated-run reliability (not used by the gate): 7 paired runs (6W/0T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Find incomplete symbol definitions Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Find incomplete symbol definitions: Both responses correctly identify the two core issues (missing type on EnableCaching, empty choices on Color) with concrete fixes and no fabricated errors, tying all four rubric criteria. The tie-breaker is a subtle but important correctness point: the task premise assumes cus...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

✅ Improved — template-discovery (claude-sonnet-4.6)

Why: Net win +71.4% (5W/2T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.031), mean preference +45.7% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 5W/2T/0L; d=5; p=0.031; net +71.4%

Overfit: Moderate (score 0.37)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/2T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Inspect web API template parameters Eligible +0.0% +0.0% 0/1/0
= Preview project creation with dry run Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Inspect web API template parameters: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

✅ Improved — template-smart-defaults (claude-sonnet-4.6)

Why: Net win +85.7% (6W/1T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.016), mean preference +68.6% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 6W/1T/0L; d=6; p=0.016; net +85.7%

Overfit: Moderate (score 0.43)

Repeated-run reliability (not used by the gate): 7 paired runs (6W/1T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Preserve explicit no-auth and no-HTTPS choices Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Preserve explicit no-auth and no-HTTPS choices: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

🔍 Full Results - all metrics and investigation details

To investigate non-passing or warning results, paste this to your AI coding agent:

For PR 1097 in dotnet/skills, download eval artifacts with gh run download 33385546569 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/73b589e09a2a5bf4d7706471c3fcc0034c60694d/eng/vally-adapter/InvestigatingResults.md and follow it. Classify each result as measurement-invalid, underpowered, not-proven, preference-loss, or passing-with-warning. Use stateReason, result accounting, weak scenarios, and judge evidence to give the cause and exact next fix.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 31, 2026 12:00

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.

Copilot review overview

🟡 Changes recommended

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review tier: Lite
Findings: 2 Low severity

New issues introduced by this change (2)
Severity Finding
Low severity plugins/​dotnet11/​skills/​system-text-json-net11/​SKILL.md — Step 0 says to install the “current .NET 11 preview” when a net11-capable SDK is missing. For…
Low severity plugins/​dotnet-template-engine/​skills/​template-validation/​SKILL.md — The parse gate requires malformed-JSON responses to have exactly two parts (a one-line verdict + a…
Suppressed comments (2)

Previously missed (2) — in code that hasn't changed since the last review.

plugins/dotnet11/skills/system-text-json-net11/SKILL.md:51

  • The PowerShell example assumes ./dotnet-install.ps1 already exists in the working directory. That’s not a safe assumption; download the official script from dot.net before invoking it so the steps are runnable as written.
```powershell
./dotnet-install.ps1 -Channel 11.0 -Quality preview -InstallDir ./.dotnet
./.dotnet/dotnet run --project ./Sample
**plugins/dotnet11/skills/system-text-json-net11/SKILL.md:56**
* The bash example assumes `./dotnet-install.sh` already exists. Download the official script from dot.net (or otherwise explain where it comes from) so the instructions are self-contained and runnable.
./dotnet-install.sh --channel 11.0 --quality preview --install-dir ./.dotnet
./.dotnet/dotnet run --project ./Sample
</details>

Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md Outdated
Comment thread plugins/dotnet-template-engine/skills/template-validation/SKILL.md Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 31, 2026 12:12

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.

Copilot review overview

🟡 Changes recommended

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review tier: Lite
Findings: 1 Low severity

New issues introduced by this change (1)
Severity Finding
Low severity plugins/​dotnet11/​skills/​system-text-json-net11/​SKILL.md — The PowerShell snippet assumes dotnet-install.ps1 is already present in the working directory and…
Issues resolved since last review (2)
Severity Finding
Low severity plugins/​dotnet-template-engine/​skills/​template-validation/​SKILL.md — The parse gate requires malformed-JSON responses to have exactly two parts (a one-line verdict + a… View resolved comment
Low severity plugins/​dotnet11/​skills/​system-text-json-net11/​SKILL.md — Step 0 says to install the “current .NET 11 preview” when a net11-capable SDK is missing. For… View resolved comment
Suppressed comments (1)

plugins/dotnet11/skills/system-text-json-net11/SKILL.md:56

  • The bash snippet assumes dotnet-install.sh is already present and also references ./Sample without defining it anywhere in this skill. Download the script from the official URL and clarify the project path placeholder so the instructions are actually runnable.
./dotnet-install.sh --channel 11.0 --install-dir ./.dotnet
./.dotnet/dotnet run --project ./Sample

Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 31, 2026 14:57
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
github-actions Bot added a commit that referenced this pull request Aug 31, 2026

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.

Copilot review overview

🔵 Needs a closer look

Review tier: Lite
Findings: None

Issues resolved since last review (2)
Severity Finding
Medium severity tests/​dotnet-template-engine/​template-smart-defaults/​eval.yaml — This framework negative check is anchored to lines that start with dotnet new, but the same… View resolved comment
Medium severity tests/​dotnet-template-engine/​template-smart-defaults/​eval.yaml — The eval’s --dry-run matcher explicitly allows backtick-wrapped dotnet new commands, but this… View resolved comment
Suppressed comments (7)

Previously missed (3) — in code that hasn't changed since the last review.

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:19

  • The first stimulus asks for a worker service, but the graders don’t assert that the generated command uses the worker template. As written, an answer could emit a dotnet new command for a different template and still pass as long as it includes --dry-run and mentions AOT/framework.

This issue also appears in the following locations of the same file:

  • line 38
  • line 67
      - type: output-matches
        config:
          pattern: (?i)net(8|9|10|11)\.0
      - type: output-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s--dry-run\b|`dotnet\s+new\s+\S+[^`\r\n#]*\s--dry-run\b[^`\r\n#]*`)

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:22

  • The “no unsafe dotnet new command” negative regex only detects commands that start the line (or follow ;/&/|) and therefore can be bypassed by prefixing an unsafe command with common markdown/shell markers (e.g. - dotnet new ..., 1. dotnet new ..., $ dotnet new ...). That can allow a response to include an additional unsafe creation command without failing this grader.

This issue also appears in the following locations of the same file:

  • line 147
  • line 174
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?!(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s(?:--dry-run|--help)\b)(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*|`dotnet\s+new\s+\S+(?![^`\r\n#]*\s(?:--dry-run|--help)\b)[^`\r\n#]*`)

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:103

  • This negative grader is intended to reject commands that override the user’s explicit net8.0 choice, but it only matches when the command starts the line with dotnet new. If the command is formatted as a list item (e.g. - dotnet new ... --framework net9.0), it won’t be detected and the scenario could false-pass.
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*(?:--framework|-f)[ =]+net(9|10|11)\.0|`dotnet\s+new[^`\r\n#]*(?:--framework|-f)[ =]+net(9|10|11)\.0[^`\r\n#]*`)

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:51

  • The “Auth implies HTTPS stays enabled” stimulus asks for a webapi command, but the graders never assert the template short name. A response that produces a non-webapi command (still containing SingleOrg and --dry-run) could incorrectly pass this scenario.
    graders:
      - type: exit-success
      - type: output-matches
        config:
          pattern: (?i)SingleOrg
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*--no-https\b|`dotnet\s+new[^`\r\n#]*--no-https\b[^`\r\n#]*`)
      - type: output-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s--dry-run\b|`dotnet\s+new\s+\S+[^`\r\n#]*\s--dry-run\b[^`\r\n#]*`)
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?!(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s(?:--dry-run|--help)\b)(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*|`dotnet\s+new\s+\S+(?![^`\r\n#]*\s(?:--dry-run|--help)\b)[^`\r\n#]*`)

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:80

  • The “Controllers exclude the minimal-API flag” stimulus asks for a webapi command, but the graders don’t currently assert the template short name. Adding an explicit dotnet new webapi match would prevent false passes where the response discusses controllers but uses a different template.
    graders:
      - type: exit-success
      - type: output-matches
        config:
          pattern: (?i)(use-controllers|controllers)
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*--[a-z-]*minimal|`dotnet\s+new[^`\r\n#]*--[a-z-]*minimal[^`\r\n#]*`)
      - type: output-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s--dry-run\b|`dotnet\s+new\s+\S+[^`\r\n#]*\s--dry-run\b[^`\r\n#]*`)
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?!(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s(?:--dry-run|--help)\b)(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*|`dotnet\s+new\s+\S+(?![^`\r\n#]*\s(?:--dry-run|--help)\b)[^`\r\n#]*`)

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:185

  • In the minimal-API stimulus, both the --use-controllers negative check and the “no unsafe dotnet new without --dry-run/--help” check can be bypassed by prefixing the command with list/prompt markers (e.g. - dotnet new ...). That can allow forbidden flags or unsafe commands to slip through while still satisfying the other graders.
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*--use-controllers\b|`dotnet\s+new[^`\r\n#]*--use-controllers\b[^`\r\n#]*`)
      - type: output-matches
        config:
          pattern: (?i)\|.*(minimal|framework).*(user|explicit).*\|
      - type: output-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s--dry-run\b|`dotnet\s+new\s+\S+[^`\r\n#]*\s--dry-run\b[^`\r\n#]*`)
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?!(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s(?:--dry-run|--help)\b)(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*|`dotnet\s+new\s+\S+(?![^`\r\n#]*\s(?:--dry-run|--help)\b)[^`\r\n#]*`)

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:149

  • The workspace-framework stimulus has the same evasion gap as earlier: the “no unsafe dotnet new without --dry-run/--help” pattern only detects commands that start the line with dotnet new (or follow ;/&/|). Prefixing an unsafe command with - / 1. / $ can avoid detection.
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?!(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s(?:--dry-run|--help)\b)(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*|`dotnet\s+new\s+\S+(?![^`\r\n#]*\s(?:--dry-run|--help)\b)[^`\r\n#]*`)

Copilot AI review requested due to automatic review settings August 31, 2026 15:05
@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

14 model/skill results across 7 skills and 2 models — ✅ 5 improved, ➖ 8 not proven improved, ⚠️ 0 invalid or underpowered, ⛔ 1 activation contract failure, 📉 0 preference losses (report only).

Measurement identity: evaluated commit 6a195267be9f05a865a03e6a361de0b07617aa3a; 2 judge models.

Measurement health: 14 expected / 14 observed / 14 written; 0 missing, 0 unexpected, 0 invalid; 0 recovered comparison error slots and 0 unresolved comparison error slots.

Objective completion gate: not enabled. Aggregate completion transitions are telemetry only, so this report does not claim that zero objective regressions were proven.

A result passes only when preference-eligible distinct-stimulus votes have aggregate net win of at least 20% and an exact one-sided sign-test result of p ≤ 0.05, and every explicit dormancy activation contract passes. Repeated runs measure reliability only.

Skill Model Verdict Gate evidence Overfit Warnings Next action
system-text-json-net11 claude-sonnet-4.6 ⛔ Activation contract failed n=6; 6W/0T/0L; d=6; p=0.016; net +100.0%; 2 dormancy excluded 🟡 0.21 Dormancy contract: 1 unexpected activation(s) Narrow skill routing so the listed off-target scenarios stay dormant.
system-text-json-net11 gpt-5.6-luna ➖ Not proven improved n=6; 3W/2T/1L; d=4; p=0.312; net +33.3%; 2 dormancy excluded ✅ 0.14 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-authoring claude-sonnet-4.6 ✅ Improved n=7; 7W/0T/0L; d=7; p=0.008; net +100.0% ✅ 0.12 None.
template-authoring gpt-5.6-luna ✅ Improved n=7; 6W/1T/0L; d=6; p=0.016; net +85.7% ✅ 0.08 None.
template-comparison claude-sonnet-4.6 ✅ Improved n=7; 7W/0T/0L; d=7; p=0.008; net +100.0% 🟡 0.41 Review overfit evidence.
template-comparison gpt-5.6-luna ➖ Not proven improved n=7; 5W/1T/1L; d=6; p=0.109; net +57.1% ✅ 0.09 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-discovery claude-sonnet-4.6 ➖ Not proven improved n=7; 6W/0T/1L; d=7; p=0.063; net +71.4% 🟡 0.39 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-discovery gpt-5.6-luna ➖ Not proven improved n=7; 4W/3T/0L; d=4; p=0.063; net +57.1% ✅ 0.10 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-instantiation claude-sonnet-4.6 ➖ Not proven improved n=7; 3W/4T/0L; d=3; p=0.125; net +42.9% 🟡 0.37 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-instantiation gpt-5.6-luna ➖ Not proven improved n=7; 2W/4T/1L; d=3; p=0.500; net +14.3% ✅ 0.11 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-smart-defaults claude-sonnet-4.6 ✅ Improved n=7; 7W/0T/0L; d=7; p=0.008; net +100.0% 🟡 0.48 Review overfit evidence.
template-smart-defaults gpt-5.6-luna ✅ Improved n=7; 5W/2T/0L; d=5; p=0.031; net +71.4% 🟡 0.32 Review overfit evidence.
template-validation claude-sonnet-4.6 ➖ Not proven improved n=7; 5W/1T/1L; d=6; p=0.109; net +57.1% 🟡 0.45 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-validation gpt-5.6-luna ➖ Not proven improved n=7; 5W/0T/2L; d=7; p=0.227; net +42.9% 🟡 0.25 Inspect tied or lost stimuli and fix inconsistent skill behavior.
ℹ️ How to read this report
  • ✅ Improved — the result passed both the statistical gate and the 20% practical net-win floor.
  • ➖ Not proven improved — the result is valid but did not pass both gates. This is not automatically a regression.
  • ⚠️ Invalid / underpowered — the gate withheld a quality verdict. Fix the measurement before judging the skill.
  • ⛔ Activation contract failed — the isolated target skill activated on an explicit dormancy scenario. Dormancy preference is excluded, but this routing failure still blocks a pass.
  • 📉 Preference loss — the LLM judge credibly preferred baseline. It is report-only, not objective completion proof.
  • Gate evidencen preference-eligible distinct-stimulus votes, W/T/L stimulus votes, d discordant votes, exact one-sided p, net win, and the count of separately retained dormancy stimuli. The p value applies to one model/skill result; no matrix-wide multiple-comparison correction is applied.
  • Overfit — overfitting-judge severity (✅ Low, 🟡 Moderate, 🔴 High, — none) and score.
  • Warnings — activation, timeout, retry recovery, or unresolved comparison conditions that need attention.
  • Do not add repeated runs to increase statistical power. Do not add stimuli after seeing a near-pass unless the new breadth is predeclared for a new experiment.
⛔ Activation contract failed — system-text-json-net11 (claude-sonnet-4.6)

Why: Net win +100.0% (6W/0T/0L over 6 preference-eligible stimulus vote(s), sign test p=0.016), mean preference +70.0% across 8 paired run(s), 2 dormancy stimulus/stimuli excluded from preference — activation contract failed (1 explicit dormancy scenario(s) activated the isolated target skill)

Next action: Narrow skill routing so the listed off-target scenarios stay dormant.

State: VALID_NO_CHANGE (activation_contract_failed)

Gate evidence: n=6; 6W/0T/0L; d=6; p=0.016; net +100.0%; 2 dormancy excluded

Warnings: Dormancy contract: 1 unexpected activation(s)

Overfit: Moderate (score 0.21)

Repeated-run reliability (not used by the gate): 8 paired runs (6W/1T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Non-activation: Newtonsoft.Json PascalCase contract resolver Excluded (activation contract) -100.0% -40.0% 0/0/1
= Non-activation: camelCase JSON serialization on .NET 8 Excluded (activation contract) +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Non-activation: Newtonsoft.Json PascalCase contract resolver: A is the cleaner and more direct answer: DefaultContractResolver/DefaultNamingStrategy preserves normally PascalCase CLR names and it remains entirely on the requested library. B's custom resolver is broadly functional and remains Newtonsoft.Json-based, but is unnecessary for ...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — system-text-json-net11 (gpt-5.6-luna)

Why: Net win +33.3% (3W/2T/1L over 6 preference-eligible stimulus vote(s), sign test p=0.312), mean preference +25.0% across 8 paired run(s), 2 dormancy stimulus/stimuli excluded from preference — not credible — 2 of 6 preference-eligible stimulus vote(s) tied, leaving only 4 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=6; 3W/2T/1L; d=4; p=0.312; net +33.3%; 2 dormancy excluded

Overfit: Low (score 0.14)

Repeated-run reliability (not used by the gate): 8 paired runs (3W/4T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Non-activation: Newtonsoft.Json PascalCase contract resolver Excluded (activation contract) +0.0% +0.0% 0/1/0
= Non-activation: camelCase JSON serialization on .NET 8 Excluded (activation contract) +0.0% +0.0% 0/1/0
= Serialize JSON in .NET 11 with PascalCase property names Eligible +0.0% +0.0% 0/1/0
= Serialize with strongly typed metadata without casting Eligible +0.0% +0.0% 0/1/0
▼ Type-safe JsonTypeInfo access without exceptions in .NET 11 Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Serialize JSON in .NET 11 with PascalCase property names: Position-swap inconsistent (forward: tie, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-comparison (gpt-5.6-luna)

Why: Net win +57.1% (5W/1T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.109), mean preference +22.9% across 7 paired run(s) — not credible (sign test p=0.109 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 5W/1T/1L; d=6; p=0.109; net +57.1%

Overfit: Low (score 0.09)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/1T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Choose a Blazor or Razor Pages template Eligible -100.0% -40.0% 0/0/1
= Compare webapi vs webapp side by side Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Choose a Blazor or Razor Pages template: Both responses are accurate, well-structured side-by-side comparisons that correctly identify the template options and recommend blazor with server interactivity. Response A is slightly stronger: it provides more accurate detail (streaming/enhanced rendering, per-component int...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-discovery (claude-sonnet-4.6)

Why: Net win +71.4% (6W/0T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.063), mean preference +37.1% across 7 paired run(s) — not credible (sign test p=0.063 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 6W/0T/1L; d=7; p=0.063; net +71.4%

Overfit: Moderate (score 0.39)

Repeated-run reliability (not used by the gate): 7 paired runs (6W/0T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Preview project creation with dry run Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Preview project creation with dry run: Both safely used a dry run and gave a broadly correct preview, but neither completely satisfies the request for an exact file-by-file list because Bootstrap is summarized. A is marginally preferable because it gives a concrete full-file count rather than B’s approximate omitte...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-discovery (gpt-5.6-luna)

Why: Net win +57.1% (4W/3T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.063), mean preference +22.9% across 7 paired run(s) — not credible — 3 of 7 preference-eligible stimulus vote(s) tied, leaving only 4 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 4W/3T/0L; d=4; p=0.063; net +57.1%

Overfit: Low (score 0.10)

Repeated-run reliability (not used by the gate): 7 paired runs (4W/3T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Find installed test project template choices Eligible +0.0% +0.0% 0/1/0
= Inspect web API template parameters Eligible +0.0% +0.0% 0/1/0
= Resolve ambiguous project intent to multiple candidates Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Find installed test project template choices: Position-swap inconsistent (forward: B, reverse: tie). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-instantiation (claude-sonnet-4.6)

Why: Net win +42.9% (3W/4T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +17.1% across 7 paired run(s) — not credible — 4 of 7 preference-eligible stimulus vote(s) tied, leaving only 3 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 3W/4T/0L; d=3; p=0.125; net +42.9%

Overfit: Moderate (score 0.37)

Repeated-run reliability (not used by the gate): 7 paired runs (3W/4T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Adapt a generated test project to central package management Eligible +0.0% +0.0% 0/1/0
= Compose an application and test solution Eligible +0.0% +0.0% 0/1/0
= Create a controller-based web API Eligible +0.0% +0.0% 0/1/0
= Create a worker service Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Adapt a generated test project to central package management: Both completed every requested repository change correctly and verified it with a clean build. B's --no-restore avoids the expected initial CPM restore error, but this does not create a meaningful final-result quality advantage.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-instantiation (gpt-5.6-luna)

Why: Net win +14.3% (2W/4T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +5.7% across 7 paired run(s) — not credible — 4 of 7 preference-eligible stimulus vote(s) tied, leaving only 3 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 2W/4T/1L; d=3; p=0.500; net +14.3%

Overfit: Low (score 0.11)

Repeated-run reliability (not used by the gate): 7 paired runs (2W/4T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Adapt a generated test project to central package management Eligible +0.0% +0.0% 0/1/0
▼ Compose an application and test solution Eligible -100.0% -40.0% 0/0/1
= Create a controller-based web API Eligible +0.0% +0.0% 0/1/0
= Create a worker service Eligible +0.0% +0.0% 0/1/0
= Match a neighboring project's target framework Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Adapt a generated test project to central package management: Position-swap inconsistent (forward: B, reverse: tie). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-validation (claude-sonnet-4.6)

Why: Net win +57.1% (5W/1T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.109), mean preference +48.6% across 7 paired run(s) — not credible (sign test p=0.109 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 5W/1T/1L; d=6; p=0.109; net +57.1%

Overfit: Moderate (score 0.45)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/1T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Find incomplete symbol definitions Eligible -100.0% -40.0% 0/0/1
= Report a malformed template with its parse location Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Find incomplete symbol definitions: Both find the core omissions, and B usefully clarifies that per-template help is required. However, A supplies a usable choice-definition structure, whereas B's central replacement uses an invalid/nonstandard choices-object form, undermining the requested exact fix.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-validation (gpt-5.6-luna)

Why: Net win +42.9% (5W/0T/2L over 7 preference-eligible stimulus vote(s), sign test p=0.227), mean preference +25.7% across 7 paired run(s) — not credible (sign test p=0.227 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 5W/0T/2L; d=7; p=0.227; net +42.9%

Overfit: Moderate (score 0.25)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/0T/2L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Find incomplete symbol definitions Eligible -100.0% -40.0% 0/0/1
▼ Report a malformed template with its parse location Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Find incomplete symbol definitions: Both responses correctly diagnose the two real issues (missing type on EnableCaching, empty choices on Color) and propose concrete fixes without inventing unrelated errors. B provides a cleaner, more explicit validation report format directly answering the 'validate and give e...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

✅ Improved — template-comparison (claude-sonnet-4.6)

Why: Net win +100.0% (7W/0T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.008), mean preference +57.1% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 7W/0T/0L; d=7; p=0.008; net +100.0%

Overfit: Moderate (score 0.41)

Repeated-run reliability (not used by the gate): 7 paired runs (7W/0T/0L).

✅ Improved — template-smart-defaults (claude-sonnet-4.6)

Why: Net win +100.0% (7W/0T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.008), mean preference +91.4% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 7W/0T/0L; d=7; p=0.008; net +100.0%

Overfit: Moderate (score 0.48)

Repeated-run reliability (not used by the gate): 7 paired runs (7W/0T/0L).

✅ Improved — template-smart-defaults (gpt-5.6-luna)

Why: Net win +71.4% (5W/2T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.031), mean preference +37.1% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 5W/2T/0L; d=5; p=0.031; net +71.4%

Overfit: Moderate (score 0.32)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/2T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Preserve an explicit minimal API choice Eligible +0.0% +0.0% 0/1/0
= Treat the workspace framework as an explicit choice Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Preserve an explicit minimal API choice: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

Routine passing details for 2 results are in Full Results.

🔍 Full Results - all metrics and investigation details

To investigate non-passing or warning results, paste this to your AI coding agent:

For PR 1097 in dotnet/skills, download eval artifacts with gh run download 33403004119 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/6a195267be9f05a865a03e6a361de0b07617aa3a/eng/vally-adapter/InvestigatingResults.md and follow it. Classify each result as measurement-invalid, underpowered, not-proven, preference-loss, or passing-with-warning. Use stateReason, result accounting, weak scenarios, and judge evidence to give the cause and exact next fix.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

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.

Copilot review overview

🔵 Needs a closer look

Review tier: Lite
Findings: None

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

plugins/dotnet-template-engine/skills/template-instantiation/SKILL.md:40

  • The new guidance says to “let the template choose” the target framework when neither the user nor workspace specifies one, but this conflicts with the later pitfall guidance that recommends always passing --framework when a template supports multiple TFMs. This inconsistency can lead to contradictory instructions for agents.

Consider rewording this paragraph to emphasize verifying the framework rather than omitting --framework entirely (pick a supported default from dotnet new <template> --help / smart-defaults, pass it explicitly, then confirm by reading the generated .csproj).

Do not predict the generated target framework. If the user did not request one and the
workspace does not supply one, let the template choose, then read the generated project and
report the actual TFM. Never announce an intermediate framework guess that contradicts the
generated `.csproj`.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 31, 2026 15:11

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.

Copilot review overview

🔵 Needs a closer look

Review tier: Lite
Findings: None

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:148

  • In the “Treat the workspace framework as an explicit choice” stimulus, the net10/net11 negative grader is not scoped to the dotnet new command. It can fail the eval if the response mentions --framework net10.0/net11.0 in a parameter table or prose explanation (even when the actual command keeps net9.0). Other stimuli in this file use command-scoped patterns to avoid this kind of false negative; aligning this one will make the eval less flaky.
      - type: output-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new\s+\S+(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*\s--dry-run\b|`dotnet\s+new\s+\S+[^`\r\n#]*\s--dry-run\b[^`\r\n#]*`)
      - type: output-not-matches
        config:

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 31, 2026 15:18

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.

Copilot review overview

🔵 Needs a closer look

Review tier: Lite
Findings: None

Suppressed comments (2)

Previously missed (1) — in code that hasn't changed since the last review.

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:45

  • This stimulus claims to require an exact dotnet new command for SingleOrg auth, but the graders only look for the word SingleOrg anywhere in the output. That can false-pass when the command itself omits --auth SingleOrg (e.g., SingleOrg appears only in the parameter table or prose). Add a command-scoped matcher for --auth[ =]+SingleOrg similar to the existing --auth None check later in this file.

This issue also appears on line 69 of the same file.

      - type: output-matches
        config:
          pattern: (?i)SingleOrg
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*--no-https\b|`dotnet\s+new[^`\r\n#]*--no-https\b[^`\r\n#]*`)

tests/dotnet-template-engine/template-smart-defaults/eval.yaml:74

  • The rubric requires that the controllers option is actually passed, but the graders only check for the words controllers / use-controllers anywhere in the response. This can false-pass when the command omits the --use-controllers flag and only mentions controllers in prose/table. Add a command-scoped matcher that requires --use-controllers to appear in the dotnet new webapi ... command (while still keeping the existing minimal-API negative check).
      - type: output-matches
        config:
          pattern: (?i)(use-controllers|controllers)
      - type: output-not-matches
        config:
          pattern: (?im)(?:(?:^|[;&|])\s*dotnet\s+new(?:[^\r\n`;&|#]|\\\r?\n|`\r?\n|\^\r?\n)*--[a-z-]*minimal|`dotnet\s+new[^`\r\n#]*--[a-z-]*minimal[^`\r\n#]*`)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 31, 2026 15:25
@github-actions github-actions Bot removed pr-state/evals-in-progress PR evaluations are in progress pr-state/ready-for-eval PR is mergeable and awaiting evaluation labels Aug 31, 2026

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.

Copilot review overview

🔵 Needs a closer look

Review tier: Lite
Findings: None

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

plugins/dotnet-template-engine/skills/template-validation/SKILL.md:149

  • The host-constraint guidance says the engine matches argument keys case-insensitively and that hostName is valid. Per official template constraint docs, the key is hostname (lowercase). Keeping hostName here would cause the skill to recommend an invalid constraint shape.
- For `type: "host"`, missing `args` is an ERROR. `args` is a required array; each entry needs `hostname`. Supported
  built-in identifiers include `dotnetcli`, `vs`, `vs-mac`, `ide`, and
  `dotnetcli-preview`. An optional `version` uses NuGet version/range syntax such as
  `[10.0.100,)`. The engine matches argument keys case-insensitively, so the documented
  `hostName` spelling is also valid. Reject unrelated fields such as `pattern` and `value`.

github-actions Bot added a commit that referenced this pull request Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

14 model/skill results across 7 skills and 2 models — ✅ 5 improved, ➖ 8 not proven improved, ⚠️ 0 invalid or underpowered, ⛔ 1 activation contract failure, 📉 0 preference losses (report only).

Measurement identity: evaluated commit ad3d78303e32daf6bd4e23c7d005503a4bee1da2; 2 judge models.

Measurement health: 14 expected / 14 observed / 14 written; 0 missing, 0 unexpected, 0 invalid; 0 recovered comparison error slots and 0 unresolved comparison error slots.

Objective completion gate: not enabled. Aggregate completion transitions are telemetry only, so this report does not claim that zero objective regressions were proven.

A result passes only when preference-eligible distinct-stimulus votes have aggregate net win of at least 20% and an exact one-sided sign-test result of p ≤ 0.05, and every explicit dormancy activation contract passes. Repeated runs measure reliability only.

Skill Model Verdict Gate evidence Overfit Warnings Next action
system-text-json-net11 claude-sonnet-4.6 ⛔ Activation contract failed n=6; 6W/0T/0L; d=6; p=0.016; net +100.0%; 2 dormancy excluded 🟡 0.47 Dormancy contract: 1 unexpected activation(s) Narrow skill routing so the listed off-target scenarios stay dormant.
system-text-json-net11 gpt-5.6-luna ➖ Not proven improved n=6; 3W/1T/2L; d=5; p=0.500; net +16.7%; 2 dormancy excluded ✅ 0.11 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-authoring claude-sonnet-4.6 ✅ Improved n=7; 7W/0T/0L; d=7; p=0.008; net +100.0% 🟡 0.30 Review overfit evidence.
template-authoring gpt-5.6-luna ➖ Not proven improved n=7; 4W/3T/0L; d=4; p=0.063; net +57.1% ✅ 0.07 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-comparison claude-sonnet-4.6 ✅ Improved n=7; 5W/2T/0L; d=5; p=0.031; net +71.4% 🟡 0.45 Activation: isolated 7/7; plugin 6/7 Fix activation gaps; Review overfit evidence.
template-comparison gpt-5.6-luna ➖ Not proven improved n=7; 4W/2T/1L; d=5; p=0.188; net +42.9% ✅ 0.06 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-discovery claude-sonnet-4.6 ➖ Not proven improved n=7; 4W/1T/2L; d=6; p=0.344; net +28.6% 🟡 0.44 Inspect tied or lost stimuli and fix inconsistent skill behavior.
template-discovery gpt-5.6-luna ➖ Not proven improved n=7; 2W/4T/1L; d=3; p=0.500; net +14.3% ✅ 0.14 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-instantiation claude-sonnet-4.6 ➖ Not proven improved n=7; 2W/5T/0L; d=2; p=0.250; net +28.6% 🟡 0.27 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-instantiation gpt-5.6-luna ➖ Not proven improved n=7; 3W/3T/1L; d=4; p=0.312; net +28.6% ✅ 0.10 Inspect tied or lost stimuli; predeclare added breadth before a new experiment.
template-smart-defaults claude-sonnet-4.6 ✅ Improved n=7; 7W/0T/0L; d=7; p=0.008; net +100.0% 🟡 0.43 Review overfit evidence.
template-smart-defaults gpt-5.6-luna ✅ Improved n=7; 7W/0T/0L; d=7; p=0.008; net +100.0% 🟡 0.35 Review overfit evidence.
template-validation claude-sonnet-4.6 ✅ Improved n=7; 5W/2T/0L; d=5; p=0.031; net +71.4% 🟡 0.37 Review overfit evidence.
template-validation gpt-5.6-luna ➖ Not proven improved n=7; 5W/1T/1L; d=6; p=0.109; net +57.1% 🟡 0.21 Inspect tied or lost stimuli and fix inconsistent skill behavior.
ℹ️ How to read this report
  • ✅ Improved — the result passed both the statistical gate and the 20% practical net-win floor.
  • ➖ Not proven improved — the result is valid but did not pass both gates. This is not automatically a regression.
  • ⚠️ Invalid / underpowered — the gate withheld a quality verdict. Fix the measurement before judging the skill.
  • ⛔ Activation contract failed — the isolated target skill activated on an explicit dormancy scenario. Dormancy preference is excluded, but this routing failure still blocks a pass.
  • 📉 Preference loss — the LLM judge credibly preferred baseline. It is report-only, not objective completion proof.
  • Gate evidencen preference-eligible distinct-stimulus votes, W/T/L stimulus votes, d discordant votes, exact one-sided p, net win, and the count of separately retained dormancy stimuli. The p value applies to one model/skill result; no matrix-wide multiple-comparison correction is applied.
  • Overfit — overfitting-judge severity (✅ Low, 🟡 Moderate, 🔴 High, — none) and score.
  • Warnings — activation, timeout, retry recovery, or unresolved comparison conditions that need attention.
  • Do not add repeated runs to increase statistical power. Do not add stimuli after seeing a near-pass unless the new breadth is predeclared for a new experiment.
⛔ Activation contract failed — system-text-json-net11 (claude-sonnet-4.6)

Why: Net win +100.0% (6W/0T/0L over 6 preference-eligible stimulus vote(s), sign test p=0.016), mean preference +75.0% across 8 paired run(s), 2 dormancy stimulus/stimuli excluded from preference — activation contract failed (1 explicit dormancy scenario(s) activated the isolated target skill)

Next action: Narrow skill routing so the listed off-target scenarios stay dormant.

State: VALID_NO_CHANGE (activation_contract_failed)

Gate evidence: n=6; 6W/0T/0L; d=6; p=0.016; net +100.0%; 2 dormancy excluded

Warnings: Dormancy contract: 1 unexpected activation(s)

Overfit: Moderate (score 0.47)

Repeated-run reliability (not used by the gate): 8 paired runs (6W/2T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Non-activation: Newtonsoft.Json PascalCase contract resolver Excluded (activation contract) +0.0% +0.0% 0/1/0
= Non-activation: camelCase JSON serialization on .NET 8 Excluded (activation contract) +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Non-activation: Newtonsoft.Json PascalCase contract resolver: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — system-text-json-net11 (gpt-5.6-luna)

Why: Net win +16.7% (3W/1T/2L over 6 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +25.0% across 8 paired run(s), 2 dormancy stimulus/stimuli excluded from preference — not credible (sign test p=0.500 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=6; 3W/1T/2L; d=5; p=0.500; net +16.7%; 2 dormancy excluded

Overfit: Low (score 0.11)

Repeated-run reliability (not used by the gate): 8 paired runs (4W/2T/2L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Non-activation: camelCase JSON serialization on .NET 8 Excluded (activation contract) +0.0% +0.0% 0/1/0
▼ Serialize JSON in .NET 11 with PascalCase property names Eligible -100.0% -40.0% 0/0/1
= Serialize with strongly typed metadata without casting Eligible +0.0% +0.0% 0/1/0
▼ Type-safe JsonTypeInfo access without exceptions in .NET 11 Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Serialize JSON in .NET 11 with PascalCase property names: Both responses correctly achieve the task: use built-in JsonNamingPolicy.PascalCase, target net11.0, run, and show PascalCase JSON output. A provides a cleaner, minimal solution with a full csproj as requested, and its final code exactly matches what the user needs. B's final ...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-authoring (gpt-5.6-luna)

Why: Net win +57.1% (4W/3T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.063), mean preference +22.9% across 7 paired run(s) — not credible — 3 of 7 preference-eligible stimulus vote(s) tied, leaving only 4 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 4W/3T/0L; d=4; p=0.063; net +57.1%

Overfit: Low (score 0.07)

Repeated-run reliability (not used by the gate): 7 paired runs (4W/3T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Add a safe restore post-action Eligible +0.0% +0.0% 0/1/0
= Author a reusable item template Eligible +0.0% +0.0% 0/1/0
= Preserve central package management conventions Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Add a safe restore post-action: Position-swap inconsistent (forward: B, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-comparison (gpt-5.6-luna)

Why: Net win +42.9% (4W/2T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.188), mean preference +17.1% across 7 paired run(s) — not credible (sign test p=0.188 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 4W/2T/1L; d=5; p=0.188; net +42.9%

Overfit: Low (score 0.06)

Repeated-run reliability (not used by the gate): 7 paired runs (4W/2T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Choose MVC or Razor Pages for an admin portal Eligible +0.0% +0.0% 0/1/0
▼ Choose a Blazor or Razor Pages template Eligible -100.0% -40.0% 0/0/1
= Compare webapi vs webapp side by side Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Choose MVC or Razor Pages for an admin portal: Position-swap inconsistent (forward: tie, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-discovery (claude-sonnet-4.6)

Why: Net win +28.6% (4W/1T/2L over 7 preference-eligible stimulus vote(s), sign test p=0.344), mean preference +20.0% across 7 paired run(s) — not credible (sign test p=0.344 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 4W/1T/2L; d=6; p=0.344; net +28.6%

Overfit: Moderate (score 0.44)

Repeated-run reliability (not used by the gate): 7 paired runs (4W/1T/2L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Inspect web API template parameters Eligible -100.0% -40.0% 0/0/1
▼ Preview project creation with dry run Eligible -100.0% -40.0% 0/0/1
= Search NuGet for specialized template Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Inspect web API template parameters: A is more complete on authentication constraints and provides a valid dry-run example, while B's example is incomplete. However, both share the significant factual omission/error that the installed template's Native AOT option is not available.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-discovery (gpt-5.6-luna)

Why: Net win +14.3% (2W/4T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +5.7% across 7 paired run(s) — not credible — 4 of 7 preference-eligible stimulus vote(s) tied, leaving only 3 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 2W/4T/1L; d=3; p=0.500; net +14.3%

Overfit: Low (score 0.14)

Repeated-run reliability (not used by the gate): 7 paired runs (2W/4T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Find template for web API project Eligible +0.0% +0.0% 0/1/0
= Inspect a single worker template before creation Eligible +0.0% +0.0% 0/1/0
▼ Inspect web API template parameters Eligible -100.0% -40.0% 0/0/1
= Preview project creation with dry run Eligible +0.0% +0.0% 0/1/0
= Search NuGet for specialized template Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Find template for web API project: Position-swap inconsistent (forward: B, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-instantiation (claude-sonnet-4.6)

Why: Net win +28.6% (2W/5T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +11.4% across 7 paired run(s) — not credible — 5 of 7 preference-eligible stimulus vote(s) tied, leaving only 2 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 2W/5T/0L; d=2; p=0.250; net +28.6%

Overfit: Moderate (score 0.27)

Repeated-run reliability (not used by the gate): 7 paired runs (2W/5T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Adapt a generated test project to central package management Eligible +0.0% +0.0% 0/1/0
= Compose an application and test solution Eligible +0.0% +0.0% 0/1/0
= Create a worker service Eligible +0.0% +0.0% 0/1/0
= Create and build a class library Eligible +0.0% +0.0% 0/1/0
= Match a neighboring project's target framework Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Adapt a generated test project to central package management: Both runs produce the required CPM-adapted xUnit project and verify it builds cleanly. B's creation sequence is somewhat cleaner, but there is no meaningful difference in the final delivered result.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-instantiation (gpt-5.6-luna)

Why: Net win +28.6% (3W/3T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.312), mean preference +11.4% across 7 paired run(s) — not credible — 3 of 7 preference-eligible stimulus vote(s) tied, leaving only 4 discordant preference vote(s). The sign test conditions on non-tie stimulus votes and cannot reach 0.05 below 5, so no record could have passed here — this is not a measured null. Either the skill is inert on these scenarios (make them discriminate) or the eval needs more distinct stimuli to clear the ties

Next action: Inspect tied or lost stimuli; predeclare added breadth before a new experiment.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 3W/3T/1L; d=4; p=0.312; net +28.6%

Overfit: Low (score 0.10)

Repeated-run reliability (not used by the gate): 7 paired runs (3W/3T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
▼ Compose an application and test solution Eligible -100.0% -40.0% 0/0/1
= Create a controller-based web API Eligible +0.0% +0.0% 0/1/0
= Create and build a class library Eligible +0.0% +0.0% 0/1/0
= Match a neighboring project's target framework Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Compose an application and test solution: Both responses correctly completed all task requirements with successful builds. Response A hit a snag when the default sln template produced a .slnx file rather than the requested .sln, but it recovered cleanly by recreating with --format sln and then thoroughly verified the ...

This is one example, not the aggregate verdict. Open Full Results for every judgment.

➖ Not proven improved — template-validation (gpt-5.6-luna)

Why: Net win +57.1% (5W/1T/1L over 7 preference-eligible stimulus vote(s), sign test p=0.109), mean preference +40.0% across 7 paired run(s) — not credible (sign test p=0.109 > 0.05)

Next action: Inspect tied or lost stimuli and fix inconsistent skill behavior.

State: VALID_NO_CHANGE (no_credible_preference_change)

Gate evidence: n=7; 5W/1T/1L; d=6; p=0.109; net +57.1%

Overfit: Moderate (score 0.21)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/1T/1L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Find incomplete symbol definitions Eligible +0.0% +0.0% 0/1/0
▼ Report a malformed template with its parse location Eligible -100.0% -40.0% 0/0/1

Illustrative judge evidence:

  • Find incomplete symbol definitions: Position-swap inconsistent (forward: B, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

✅ Improved — template-authoring (claude-sonnet-4.6)

Why: Net win +100.0% (7W/0T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.008), mean preference +74.3% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 7W/0T/0L; d=7; p=0.008; net +100.0%

Overfit: Moderate (score 0.30)

Repeated-run reliability (not used by the gate): 7 paired runs (7W/0T/0L).

✅ Improved — template-comparison (claude-sonnet-4.6)

Why: Net win +71.4% (5W/2T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.031), mean preference +28.6% across 7 paired run(s) — credibly better

Next action: Fix activation gaps; Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 5W/2T/0L; d=5; p=0.031; net +71.4%

Warnings: Activation: isolated 7/7; plugin 6/7

Overfit: Moderate (score 0.45)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/2T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Compare webapi vs webapp side by side Eligible +0.0% +0.0% 0/1/0
= Select a test project template for an enterprise suite Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Compare webapi vs webapp side by side: Position-swap inconsistent (forward: B, reverse: A). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

✅ Improved — template-smart-defaults (claude-sonnet-4.6)

Why: Net win +100.0% (7W/0T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.008), mean preference +100.0% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 7W/0T/0L; d=7; p=0.008; net +100.0%

Overfit: Moderate (score 0.43)

Repeated-run reliability (not used by the gate): 7 paired runs (7W/0T/0L).

✅ Improved — template-smart-defaults (gpt-5.6-luna)

Why: Net win +100.0% (7W/0T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.008), mean preference +48.6% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 7W/0T/0L; d=7; p=0.008; net +100.0%

Overfit: Moderate (score 0.35)

Repeated-run reliability (not used by the gate): 7 paired runs (7W/0T/0L).

✅ Improved — template-validation (claude-sonnet-4.6)

Why: Net win +71.4% (5W/2T/0L over 7 preference-eligible stimulus vote(s), sign test p=0.031), mean preference +62.9% across 7 paired run(s) — credibly better

Next action: Review overfit evidence.

State: VALID_PASS (credible_preference_improvement)

Gate evidence: n=7; 5W/2T/0L; d=5; p=0.031; net +71.4%

Overfit: Moderate (score 0.37)

Repeated-run reliability (not used by the gate): 7 paired runs (5W/2T/0L).

Weak or warning scenarios:

Scenario Preference gate Net win Δ Pref Runs (W/T/L)
= Find incomplete symbol definitions Eligible +0.0% +0.0% 0/1/0
= Report a malformed template with its parse location Eligible +0.0% +0.0% 0/1/0

Illustrative judge evidence:

  • Find incomplete symbol definitions: Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie.

This is one example, not the aggregate verdict. Open Full Results for every judgment.

🔍 Full Results - all metrics and investigation details

To investigate non-passing or warning results, paste this to your AI coding agent:

For PR 1097 in dotnet/skills, download eval artifacts with gh run download 33408614196 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/ad3d78303e32daf6bd4e23c7d005503a4bee1da2/eng/vally-adapter/InvestigatingResults.md and follow it. Classify each result as measurement-invalid, underpowered, not-proven, preference-loss, or passing-with-warning. Use stateReason, result accounting, weak scenarios, and judge evidence to give the cause and exact next fix.

▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions

@github-actions github-actions Bot added the waiting-on-review PR state label label Aug 31, 2026

@AbhitejJohn AbhitejJohn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Any thoughts on the system-text-json-net11 skill activation issues? Not blocking this PR though.

@Evangelink
Evangelink merged commit a7a6170 into main Aug 31, 2026
46 checks passed
@Evangelink
Evangelink deleted the dev/amauryleve/improve-skill-results branch August 31, 2026 16:58
@Evangelink

Copy link
Copy Markdown
Member Author

Any thoughts on the system-text-json-net11 skill activation issues?

The remaining miss is isolated to Sonnet activating on the explicit non-System.Text.Json PascalCase scenario. I narrowed the description to USE ONLY for net11-specific System.Text.Json APIs and removed off-target library/naming-policy trigger terms, but the same model still weighted the positive net11.0 + PascalCase signals more heavily than the library exclusion.

Further narrowing risks suppressing legitimate prompts that ask for the framework-provided PascalCase policy without naming System.Text.Json explicitly. Since dormancy is independently fail-closed and repeated equivalent payloads also showed substantial judge variance, I kept the boundary test and documented the limitation rather than weakening the scenario. A useful follow-up would isolate description-only variants and repeat the same activation probe across model families.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-on-review PR state label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants