Skip to content

Rewrite system-text-json-net11 skill as imperative, decisive guidance - #926

Merged
JanKrivanek merged 9 commits into
mainfrom
jankrivanek-fix-system-text-json-net11-decisiveness
Jul 24, 2026
Merged

Rewrite system-text-json-net11 skill as imperative, decisive guidance#926
JanKrivanek merged 9 commits into
mainfrom
jankrivanek-fix-system-text-json-net11-decisiveness

Conversation

@JanKrivanek

Copy link
Copy Markdown
Member

Summary

Fixes #902. The dotnet11/system-text-json-net11 skill scored 0% pass across all five model families in the cross-family evaluation (action bucket ADD-DECISIVENESS, 🟠 P1). The judge saw no behavior change vs. baseline (7 tie-trials, ~67% invocation) because the skill read as reference prose — API signatures the model already reproduces on its own — rather than imperative behavioral guidance.

What changed

Rewrote plugins/dotnet11/skills/system-text-json-net11/SKILL.md following the CTA guidance (convert "here's what X is" into "when you see A, do B, verify with C", add a worked example, add a verification step):

  • Sharper frontmatter with USE FOR / DO NOT USE FOR and trigger keywords (PascalCase property names, GetTypeInfo<T>, TryGetTypeInfo<T>) to improve discovery — invocation was only ~67%.
  • Decision table mapping each user request to the exact API to use and the anti-pattern to avoid.
  • Explicit DO/DON'T rules that target the eval's own failure modes:
    • PascalCase → JsonNamingPolicy.PascalCase; never a custom JsonNamingPolicy subclass or per-member [JsonPropertyName].
    • Typed metadata → generic GetTypeInfo<T>(); never cast the non-generic overload.
    • Probing → TryGetTypeInfo<T>(out …); never try/catch around GetTypeInfo.
  • net11.0 run instructions (file-based app via dotnet run app.cs + #:property TargetFramework=net11.0, and a project variant) so the program is actually executed and prints output — the graders require exit-success and matching JSON.
  • Validation checklist and a common-pitfalls table.

The three .NET 11 APIs were confirmed against Microsoft Learn. The existing tests/dotnet11/system-text-json-net11/eval.yaml is unchanged and still aligns with the rewritten guidance.

Validation

  • skill-validator check --plugin ./plugins/dotnet11 → ✅ all checks passed (frontmatter, references, links).
  • Full cross-family evaluation to be triggered via /evaluate on this PR.

The dotnet11/system-text-json-net11 skill scored 0%% pass across all five model families (issue #902, ADD-DECISIVENESS): it read as reference prose and the judge saw no behavior change vs baseline (7 ties, 67%% invocation).

Rewrite it into imperative when-A-do-B-verify-C guidance:
- Sharper frontmatter USE FOR / DO NOT USE FOR with trigger keywords to improve discovery.
- Decision table mapping each request to the exact API and the anti-pattern to avoid.
- Explicit DO/DON'T that target the eval's failure modes: no custom JsonNamingPolicy subclass, no cast of non-generic JsonTypeInfo, no try/catch to probe metadata.
- net11.0 run instructions (file-based app + project) so the program is actually executed.
- Verification checklist and common-pitfalls table.

Validated with skill-validator check (all checks passed).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 1 improved, 0 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
system-text-json-net11 +40.0% [+40.0%, +40.0%] 3/0/0 4.5/5 3.5/5

🔍 Full Results - additional metrics and failure investigation steps

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

@JanKrivanek
JanKrivanek marked this pull request as ready for review July 22, 2026 09:17
Copilot AI review requested due to automatic review settings July 22, 2026 09:17
@JanKrivanek
JanKrivanek requested a review from a team as a code owner July 22, 2026 09:17
@JanKrivanek
JanKrivanek enabled auto-merge (squash) July 22, 2026 09: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.

Pull request overview

This PR rewrites the dotnet11/system-text-json-net11 skill to be more imperative and behavior-shaping (vs. reference prose), aiming to improve cross-family eval outcomes by increasing decisiveness and verifiable execution.

Changes:

  • Replaces descriptive prose with an imperative “decision table” + explicit DO/DON’T rules for the three .NET 11 System.Text.Json APIs.
  • Adds runnable net11.0 execution instructions (file-based and project-based) plus a worked example.
  • Adds a validation checklist and “common pitfalls” table to enforce verification and avoid known anti-patterns.
Show a summary per file
File Description
plugins/dotnet11/skills/system-text-json-net11/SKILL.md Rewrites the skill into decisive, imperative guidance with runnable instructions, a decision table, and validation/pitfalls sections.

Copilot's findings

Tip

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

Comments suppressed due to low confidence (2)

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

  • The worked example claims to demonstrate “typed metadata + PascalCase”, but Person’s properties are already PascalCase (Name, Age), so the naming policy doesn’t visibly change the output. Use non-PascalCase member names so the example actually proves JsonNamingPolicy.PascalCase is applied.
string json = JsonSerializer.Serialize(new Person("Jane", 30), typeInfo);
Console.WriteLine(json);
// {"Name":"Jane","Age":30}

record Person(string Name, int Age);

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

  • In the TryGetTypeInfo example, info is declared as nullable (JsonTypeInfo<Person>?) but the sample uses the null-forgiving operator (info!). This teaches an unsafe pattern; prefer a guard that makes the non-null assumption explicit and use braces for readability.
if (options.TryGetTypeInfo<Person>(out JsonTypeInfo<Person>? info))
    Console.WriteLine($"Resolved: {info!.Type.Name}");
else
    Console.WriteLine("Type info not available");
  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md
@github-actions github-actions Bot added the waiting-on-author PR state label label Jul 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

👋 @JanKrivanek — this PR has 1 unresolved review thread(s). When you're ready, please address the feedback and push an update; the triage bot will pick up the next state automatically. (Add the no-stale label to silence further pings.)

Address PR review feedback and fix runtime gotchas found by actually running every snippet on the net11.0 SDK:

- Make the Rule 2, Rule 3, and worked-example snippets self-contained (imports, options, and Person defined) so they compile and run if copy/pasted.
- The worked example now uses lowercase record members (name/age) so JsonNamingPolicy.PascalCase visibly rewrites them to Name/Age in the output.
- Replace the null-forgiving info! with an explicit 'is not null' guard and braces in the TryGetTypeInfo example.
- Document that GetTypeInfo<T>()/TryGetTypeInfo<T>() require a TypeInfoResolver (they throw NoMetadataForType otherwise) — verified against the .NET 11 SDK.
- Recommend a console project as the primary runnable host and warn that file-based apps (dotnet run app.cs) disable System.Text.Json reflection, so plain serialization throws unless you set DefaultJsonTypeInfoResolver.
- Add matching decision-table note, checklist items, and pitfalls.

Every snippet was executed on 11.0.100-preview.5 and produces the documented output.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 22, 2026 17:32
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Skill Coverage Report

Plugin Skill Covered Coverage
dotnet11 system-text-json-net11 0/14 0%
Uncovered: dotnet11/system-text-json-net11
  • [Validation] The project or file-based app targets net11.0 (visible in the .csproj or the (line 234)
  • [Validation] PascalCase requests use JsonNamingPolicy.PascalCase — no custom JsonNamingPolicy (line 236)
  • [Validation] Typed-metadata requests use the generic GetTypeInfo<T>() — no cast of a (line 238)
  • [Validation] Probing requests use TryGetTypeInfo<T>(out …) — no try/catch around (line 241)
  • [Validation] The program was actually run (dotnet run …), exited 0, and its printed JSON shows (line 243)
  • [Validation] If a file-based app (dotnet run app.cs) is used, every JsonSerializerOptions (line 245)
  • [Pitfall] Hand-rolling a class … : JsonNamingPolicy for PascalCase (line 253)
  • [Pitfall] Adding [JsonPropertyName("Name")] to every member to force casing (line 254)
  • [Pitfall] Casting (JsonTypeInfo)options.GetTypeInfo(typeof(T)) (line 255)
  • [Pitfall] try { options.GetTypeInfo(); } catch (…) { … } to test availability (line 256)
  • [Pitfall] NotSupportedException / NoMetadataForType from GetTypeInfo() (line 257)
  • [Pitfall] NoMetadataForType even for a plain Serialize in a dotnet run app.cs file-based app (line 258)
  • [Pitfall] Leaving the app on the SDK's default TFM (line 259)
  • [Pitfall] Claiming success without running (line 260)

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's findings

Comments suppressed due to low confidence (2)

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

  • Same issue as above: this snippet includes the file-based-app-only #:property directive, but the surrounding section reads like general guidance. Add a short note so readers don’t paste it into a .csproj and get a compile error.
#:property TargetFramework=net11.0

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

  • The worked example starts with the file-based-app #:property directive, but this section isn’t explicitly limited to file-based apps. Add a note so the snippet can be safely copied into a .csproj project (where #: directives won’t compile).
#:property TargetFramework=net11.0

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

Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md
@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

Add an inline note above each file-based #:property directive explaining
that it only applies to file-based apps (dotnet run app.cs) and must be
replaced with <TargetFramework>net11.0</TargetFramework> in a .csproj
project, addressing PR review feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 22, 2026 17:39
@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 0 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
system-text-json-net11 +13.3% [-101.4%, +128.1%] 2/0/1 4.5/5 3.8/5

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 926 in dotnet/skills, download eval artifacts with gh run download 29943056484 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/25f255c83b4f41ac246b5fc029e4873a9156335a/eng/vally-adapter/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

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's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 2

Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md
Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md Outdated
- Wrap generic API signatures (GetTypeInfo<T>(), JsonTypeInfo<T>, etc.) in
  backticks in the frontmatter description so Markdown/HTML renderers don't
  drop the <T> as a stray tag in skill catalogs.
- Add 'using System.Text.Json;' and 'Console.WriteLine(json);' to the Rule 1
  snippet so it is self-contained and prints its output. Verified it emits the
  documented PascalCase JSON on a net11.0 project host.

Addresses PR review feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 22, 2026 17:47
@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

❌ Evaluation failed. View workflow run

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's findings

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

Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md Outdated
Match the canonical form used in the API-replacement table
(JsonSerializerOptions.TryGetTypeInfo<T>(out JsonTypeInfo<T>? info)) so the
frontmatter is consistent and keyword matching is clearer.

Addresses PR review feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 0 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
system-text-json-net11 +26.7% [-30.7%, +84.0%] 2/1/0 4.5/5 3.5/5

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 926 in dotnet/skills, download eval artifacts with gh run download 29944216157 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/9ac0e78a02681f7d9eef755c8bd16a3d9de8cb64/eng/vally-adapter/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

The decision-table verify cell and the three PascalCase snippets (Rule 1,
Option A, Option B) used FirstName/LastName output, while the canonical
worked example uses Person(string name, int age) => "Name"/"Age". Switch
them to serialize { name, age } so every PascalCase example consistently
produces {"Name":"Jane","Age":30}. Verified both the project-host and
file-based snippets emit that output on net11.0.

Addresses PR review feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 22, 2026 18:02
@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 0 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
system-text-json-net11 +26.7% [-30.7%, +84.0%] 2/1/0 4.5/5 2.5/5

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 926 in dotnet/skills, download eval artifacts with gh run download 29944525434 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/a3347341c01b93c6b8d0263c3277346652cc0c2d/eng/vally-adapter/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

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's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0 new

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 0 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
system-text-json-net11 +66.7% [-76.8%, +210.1%] 2/1/0 4.6/5 3.0/5

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 926 in dotnet/skills, download eval artifacts with gh run download 29944999322 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/148ff59eda80653974709df1157534db12e1ccb5/eng/vally-adapter/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

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

@github-actions github-actions Bot added waiting-on-review PR state label and removed waiting-on-author PR state label labels Jul 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Evaluation passed for 148ff59. cc @dotnet/skills-csharp-language-reviewers — please review.

@AbhitejJohn

AbhitejJohn commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

@JanKrivanek Thanks for the rewrite — turning the old prose into a decisive "symptom → do this → never do this → verify" table makes this much more actionable, and the frontmatter triggers now line up cleanly with what the evaluation checks. One reviewer verified the .NET 11 APIs you lean on (JsonNamingPolicy.PascalCase, GetTypeInfo<T>(), TryGetTypeInfo<T>(out …)) against the shipped API surface and runtime behavior — all correct, and requiring a resolver for GetTypeInfo<T>() is a real fix over the old version, whose example would have thrown.

I ran the change through several independent AI code reviews plus an automated skill-quality check, and a cross-family evaluation (five models doing the task, scored by a separate model). Sharing the feedback.

The evaluation came back mixed — worth knowing before merge. The rewrite helped three models, was roughly neutral on Opus, and regressed on GPT, where the current version was clearly preferred. Full run: https://github.com/dotnet/skills/actions/runs/29988426362

Executor model Judge Result Win rate (W/T/L) Mean preference [95% CI]
Opus GPT neutral / no credible improvement 22.2% (2/2/5) −6.7% [−44.3, +31.0]
GPT Opus ❌ baseline preferred 11.1% (1/3/5) −51.1% [−96.7, −5.6]
Sonnet 4.6 Opus ✅ credibly better 66.7% (6/2/1) +42.2% [+3.4, +81.0]
Haiku Opus positive, inconclusive (unmatched) 75.0% (6/1/1) +40.0% [+1.0, +79.0]
MAI Flash Opus ✅ credibly better 55.6% (5/3/1) +51.1% [+5.6, +96.7]

Findings, grouped by severity.

🔴 Blocking — evaluation environment (not a skill-quality problem)

  • I dug into the run logs to find the actual cause. The failures in the skill-on runs come almost entirely from one thing: the evaluation environment has no .NET 11 SDK installed (the agents report "found only up to .NET 10"), and both net11 scenarios require targeting net11.0 and running the program to show output. With the skill on, the agent reliably picks the correct .NET 11 API — and then, finding no .NET 11 SDK, gives up rather than building/running, which fails the "run it and show output" rubric. The baseline arm often fails for the opposite reason (wrong or missing API) but sometimes still runs on an available SDK and passes. On three trials per cell, that asymmetry is what produced GPT's apparent regression. In other words the skill is doing its job on the knowledge task; the scores are being distorted by a missing-SDK + must-execute rubric. Two fixes worth considering: make sure the eval runner actually has the .NET 11 SDK, and/or relax the "must run and print output" requirement for scenarios that legitimately can't execute in the environment.

🟡 Non-blocking

  • A low-cost cleanup worth doing regardless: a few "never do this" snippets use the exact patterns the evaluation's own negative checks look for. The eval fails a run if the agent's answer matches class <name> : JsonNamingPolicy or a catch {, and the skill spells those out literally — line 253 (class Xyz : JsonNamingPolicy) and lines 51 and 256 (… catch { … }). To be clear, I checked the run and this did not actually fire — across all five models and both arms those negative checks passed every time, so it did not contribute to the GPT result. But it's a latent trap: if a model ever echoes a "never do this" row back into its answer it would fail the very test the skill is meant to help pass. Line 49 already sidesteps this with an ellipsis (class … : JsonNamingPolicy); doing the same for the other three (and writing try { … } catch { … } without the catch { adjacency) removes the risk for free.

⚪ Minor

  • The decision table unconditionally says to set TypeInfoResolver = new DefaultJsonTypeInfoResolver(). Under Native AOT that defeats source generation and triggers trim warnings. Rule 2 has the caveat, but the table cell itself reads as absolute — worth a "use a source-generated context under AOT" nudge right there.
  • The claim that reflection is off by default in file-based apps (dotnet run app.cs) is stated as certainty and repeated a few times. It drives an emphatic checklist item, and I couldn't find an authoritative .NET 11 doc confirming it (community reports only). It's functionally harmless since setting the resolver works either way, but a doc link would let it stand as stated.
  • On line 133, the extra && info is not null is dead code — the try-get already guarantees non-null in the success branch.
  • From the automated quality check: calling JsonNamingPolicy.PascalCase "the single correct answer" is a little strong — leaving the policy unset is fine when the CLR names are already PascalCase, and [JsonPropertyName] still has its place for explicit per-member exceptions.

Verdicts ranged from "approve as-is" to "small changes first." Net: the mixed evaluation result is an environment/rubric artifact rather than a regression in the skill, and the one change I'd genuinely make is the small grader-pattern cleanup above. Thanks again!

The evaluation's negative checks fail a run whose answer matches
'class <name> : JsonNamingPolicy' or 'catch {'. The decision table and
Common pitfalls spelled those out literally (lines 51, 253, 256). Follow the
approach already used on line 49: use an ellipsis for the class name and
break the 'catch {' adjacency ('catch (…) { … }') so a model that echoes a
"never do this" row can't trip the very test the skill helps pass. Wording
only; guidance is unchanged.

Addresses maintainer review feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 24, 2026 06:05
@JanKrivanek

Copy link
Copy Markdown
Member Author

the one change I'd genuinely make is the small grader-pattern cleanup above

Done in babd885 — the decision table and Common pitfalls no longer spell out the literal grader-trap patterns. Followed the line-49 approach: class … : JsonNamingPolicy (ellipsis instead of a concrete name) and catch (…) { … } to break the catch { adjacency. Wording only; the guidance is unchanged and the validator still passes.

On the 🔴 environment finding — thanks for digging through the run logs. Agreed it's an eval-runner/rubric artifact (no .NET 11 SDK in the environment + a "must build and run" rubric), not a skill regression, so there's nothing to change in the skill file for it. Flagging for whoever owns the eval runner: installing the .NET 11 SDK and/or relaxing the must-execute requirement for scenarios that legitimately can't run would remove the asymmetry.

On the ⚪ minor items — I've deliberately kept this diff minimal and scoped to the grader cleanup you called out, rather than folding in unrelated edits unreviewed. Happy to add any of these to this PR if you'd like them here:

  • AOT nudge in the decision-table resolver cell (Rule 2 already carries the caveat).
  • Doc link for "reflection off in file-based apps" — I also only found community reports, no authoritative .NET 11 doc; can soften the wording to match the evidence.
  • Drop the dead && info is not null on the try-get success branch.
  • Soften calling PascalCase "the single correct answer".

Just say the word. Thanks for the thorough review!

@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot's findings

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

Comment thread plugins/dotnet11/skills/system-text-json-net11/SKILL.md
The Rule 1 PascalCase snippet relies on reflection-based serialization, which
is enabled in a console project but disabled in a file-based app
(dotnet run app.cs), where it would throw NoMetadataForType. Add a short
leading comment marking it as a console-project snippet and pointing readers
to set TypeInfoResolver = new DefaultJsonTypeInfoResolver() (per the existing
"Producing runnable output" section) if they run it file-based. Comment only;
code unchanged.

Addresses PR review feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 24, 2026 06:09
@JanKrivanek

Copy link
Copy Markdown
Member Author

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 0 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
system-text-json-net11 +66.7% [-76.8%, +210.1%] 2/1/0 4.8/5 3.5/5

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 926 in dotnet/skills, download eval artifacts with gh run download 30071282412 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/babd885411824d6d189a094c263b5b123eb02adc/eng/vally-adapter/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

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's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0 new

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 0 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
system-text-json-net11 +26.7% [-30.7%, +84.0%] 2/1/0 4.5/5 3.2/5

🔍 Full Results - additional metrics and failure investigation steps

To investigate failures, paste this to your AI coding agent:

For PR 926 in dotnet/skills, download eval artifacts with gh run download 30071490957 --repo dotnet/skills --pattern "vally-results-*" --dir ./eval-results, then fetch https://raw.githubusercontent.com/dotnet/skills/befdd30647e2f46a682c566fc6db29cdfa00099f/eng/vally-adapter/InvestigatingResults.md and follow it to analyze the results.json files. Diagnose each failure, suggest fixes to the eval.yaml and skill content, and tell me what to fix first.

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

@JanKrivanek

Copy link
Copy Markdown
Member Author

@jaredpar, @jasonmalinowski - please have a look (you are the codeowners of the area)

@JanKrivanek
JanKrivanek merged commit 9b27066 into main Jul 24, 2026
32 of 34 checks passed
@JanKrivanek
JanKrivanek deleted the jankrivanek-fix-system-text-json-net11-decisiveness branch July 24, 2026 22:38
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.

[skills-eval] dotnet11: 1 skill, 0% pass — 1 P1

3 participants