Files
dotnet__skills/data/dotnet-aspnetcore.json
github-actions[bot] 8cf7afa2b4 Update benchmark data
2026-09-19 16:56:14 +00:00

31869 lines
1.3 MiB

{
"repoUrl": "",
"entries": {
"Efficiency": [
{
"benches": [
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 14.1,
"unit": "seconds",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 30804.0,
"unit": "tokens",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 17.5,
"unit": "seconds",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 31629.0,
"unit": "tokens",
"overfittingScore": 0.5
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 12.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 13951.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 16.9,
"unit": "seconds",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 31109.0,
"unit": "tokens",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 20.1,
"unit": "seconds",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 31937.0,
"unit": "tokens",
"overfittingScore": 0.5
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 17.3,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 14355.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 20.5,
"unit": "seconds",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 31627.0,
"unit": "tokens",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 18.7,
"unit": "seconds",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 32236.0,
"unit": "tokens",
"overfittingScore": 0.5
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 15.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 14267.0,
"unit": "tokens"
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 17.4,
"unit": "seconds",
"overfittingScore": 0.25
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 34031.0,
"unit": "tokens",
"overfittingScore": 0.25
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 22.8,
"unit": "seconds",
"overfittingScore": 0.25
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 35223.0,
"unit": "tokens",
"overfittingScore": 0.25
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 21.7,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 31360.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 21.3,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 135641.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 68.7,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 450837.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 39.5,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 157259.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 53.3,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 300362.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 16.4,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 74178.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 94.2,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 379729.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 183.3,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 1212671.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 171.6,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 827642.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 196.6,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 1210001.0,
"unit": "tokens"
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 15.8,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 30892.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 57.0,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 153449.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 76.5,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 221291.0,
"unit": "tokens"
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 18.4,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 31104.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 58.2,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 136688.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 63.4,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 208062.0,
"unit": "tokens"
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 17.1,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 30911.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 14.8,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 31690.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 10.6,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 14138.0,
"unit": "tokens"
}
],
"date": 1788627832294,
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"tool": "customSmallerIsBetter",
"model": "claude-haiku-4.5"
},
{
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 4.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26434.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 5.6,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 27179.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 6.9,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 12415.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 5.6,
"unit": "seconds"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 12316.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 6.2,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 12771.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 6.5,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12309.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 7.8,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 26735.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 5.9,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 12944.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 7.2,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12514.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 5.2,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 29065.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 5.6,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 29591.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 5.1,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 12911.0,
"unit": "tokens"
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 4.2,
"unit": "seconds",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 45810.0,
"unit": "tokens",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 3.7,
"unit": "seconds",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 12714.0,
"unit": "tokens",
"overfittingScore": 0.38
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 3.1,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 12168.0,
"unit": "tokens"
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 4.9,
"unit": "seconds",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 29065.0,
"unit": "tokens",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 5.4,
"unit": "seconds",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 12877.0,
"unit": "tokens",
"overfittingScore": 0.38
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 4.8,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 12351.0,
"unit": "tokens"
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 14.1,
"unit": "seconds",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 97491.0,
"unit": "tokens",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 2.0,
"unit": "seconds",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 12317.0,
"unit": "tokens",
"overfittingScore": 0.38
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 1.9,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 11858.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 6.1,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 26725.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 6.3,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 27610.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 4.7,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 12284.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 5.4,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 26535.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 5.4,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 12785.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 5.7,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 12371.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 6.1,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 26688.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 4.6,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 12744.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 4.0,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12191.0,
"unit": "tokens"
}
],
"date": 1788627832436,
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"tool": "customSmallerIsBetter",
"model": "gpt-5.3-codex"
},
{
"benches": [
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "seconds",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 24.0
},
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "tokens",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 13632.0
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 30.4,
"unit": "seconds",
"overfittingScore": 0.4
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 14998.0,
"unit": "tokens",
"overfittingScore": 0.4
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 22.2,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 13265.0,
"unit": "tokens"
},
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "seconds",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 21.8
},
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "tokens",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 13189.0
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 21.9,
"unit": "seconds",
"overfittingScore": 0.4
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 13836.0,
"unit": "tokens",
"overfittingScore": 0.4
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 23.8,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 13590.0,
"unit": "tokens"
},
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "seconds",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 16.7
},
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "tokens",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 12860.0
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 19.5,
"unit": "seconds",
"overfittingScore": 0.4
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 13996.0,
"unit": "tokens",
"overfittingScore": 0.4
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 23.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 13075.0,
"unit": "tokens"
},
{
"overfittingScore": 0.48,
"notActivated": true,
"unit": "seconds",
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 81.9
},
{
"overfittingScore": 0.48,
"notActivated": true,
"unit": "tokens",
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 279985.0
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 111.8,
"unit": "seconds",
"overfittingScore": 0.48
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 291944.0,
"unit": "tokens",
"overfittingScore": 0.48
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 51.0,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 30257.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 121.5,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 562910.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 76.1,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 319375.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 137.9,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 553895.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 128.4,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 499043.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 23.1,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 40669.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 162.6,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 550441.0,
"unit": "tokens"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 160.3,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 756382.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 174.5,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 788574.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 195.9,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 854434.0,
"unit": "tokens"
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "seconds",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 50.0
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "tokens",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 85362.0
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 26.2,
"unit": "seconds",
"overfittingScore": 0.35
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 28009.0,
"unit": "tokens",
"overfittingScore": 0.35
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 157.2,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 748916.0,
"unit": "tokens"
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "seconds",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 18.1
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "tokens",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 13277.0
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 20.3,
"unit": "seconds",
"overfittingScore": 0.35
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 13882.0,
"unit": "tokens",
"overfittingScore": 0.35
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 18.1,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 13389.0,
"unit": "tokens"
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "seconds",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 18.2
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "tokens",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 13164.0
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 18.5,
"unit": "seconds",
"overfittingScore": 0.35
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 13790.0,
"unit": "tokens",
"overfittingScore": 0.35
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 17.5,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 13184.0,
"unit": "tokens"
}
],
"date": 1788627832580,
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"tool": "customSmallerIsBetter",
"model": "mai-code-1-flash-picker"
},
{
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"model": "claude-opus-5",
"date": 1788715663936,
"benches": [
{
"value": 13.3,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time"
},
{
"value": 41615.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In"
},
{
"value": 14.5,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time"
},
{
"value": 42930.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In"
},
{
"value": 11.8,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"value": 18668.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"value": 16.7,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time"
},
{
"value": 41807.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In"
},
{
"value": 20.8,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time"
},
{
"value": 43303.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In"
},
{
"value": 15.0,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"value": 18812.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"value": 20.3,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time"
},
{
"value": 42683.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In"
},
{
"value": 19.6,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time"
},
{
"value": 43878.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In"
},
{
"value": 31.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"value": 20737.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"value": 14.6,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"value": 45546.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"value": 15.2,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"value": 46481.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"value": 25.5,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"value": 21136.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"value": 174.1,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time"
},
{
"value": 801443.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In"
},
{
"value": 47.2,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time"
},
{
"value": 223116.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In"
},
{
"value": 13.1,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"value": 37211.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"value": 19.1,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time"
},
{
"value": 72391.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In"
},
{
"value": 20.4,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time"
},
{
"value": 74316.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In"
},
{
"value": 87.8,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"value": 295860.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"value": 120.6,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time"
},
{
"value": 661452.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In"
},
{
"value": 144.7,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time"
},
{
"value": 662206.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In"
},
{
"value": 96.3,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"value": 394304.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"value": 23.4,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time"
},
{
"value": 64443.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In"
},
{
"value": 18.9,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time"
},
{
"value": 43127.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In"
},
{
"value": 20.6,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"value": 19596.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"value": 151.4,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time"
},
{
"value": 530345.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In"
},
{
"value": 18.7,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time"
},
{
"value": 43022.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In"
},
{
"value": 15.7,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"value": 18935.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"value": 20.4,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time"
},
{
"value": 41760.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In"
},
{
"value": 14.2,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time"
},
{
"value": 42680.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In"
},
{
"value": 16.1,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"value": 19084.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"tool": "customSmallerIsBetter"
},
{
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"model": "claude-sonnet-5",
"date": 1788715664025,
"benches": [
{
"value": 9.9,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time"
},
{
"value": 41445.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In"
},
{
"value": 10.5,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time"
},
{
"value": 42613.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In"
},
{
"value": 15.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"value": 37555.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"value": 11.6,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time"
},
{
"value": 41685.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In"
},
{
"value": 13.1,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time"
},
{
"value": 42798.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In"
},
{
"value": 17.0,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"value": 19369.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"value": 14.4,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time"
},
{
"value": 42203.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In"
},
{
"value": 17.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time"
},
{
"value": 67041.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In"
},
{
"value": 18.4,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"value": 37718.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"value": 12.6,
"overfitting": "moderate",
"overfittingScore": 0.36,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"value": 45478.0,
"overfitting": "moderate",
"overfittingScore": 0.36,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"value": 12.0,
"overfitting": "moderate",
"overfittingScore": 0.36,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"value": 46336.0,
"overfitting": "moderate",
"overfittingScore": 0.36,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"value": 14.0,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"value": 20373.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"value": 46.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time"
},
{
"value": 387392.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In"
},
{
"value": 21.6,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time"
},
{
"value": 102925.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In"
},
{
"value": 59.4,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"value": 74401.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"value": 43.8,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time"
},
{
"value": 276266.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In"
},
{
"value": 26.2,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time"
},
{
"value": 160310.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In"
},
{
"value": 20.3,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"value": 37848.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"value": 101.7,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time"
},
{
"value": 821637.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In"
},
{
"value": 154.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time"
},
{
"value": 1046933.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In"
},
{
"value": 170.3,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"value": 1389562.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"value": 16.5,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time"
},
{
"value": 64254.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In"
},
{
"value": 30.8,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time"
},
{
"value": 117571.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In"
},
{
"value": 164.7,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"value": 807956.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"value": 10.7,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time"
},
{
"value": 41101.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In"
},
{
"value": 10.1,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time"
},
{
"value": 42471.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In"
},
{
"value": 21.1,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"value": 19818.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"value": 14.8,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time"
},
{
"value": 63860.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In"
},
{
"value": 16.2,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time"
},
{
"value": 66144.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In"
},
{
"value": 14.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"value": 37072.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"tool": "customSmallerIsBetter"
},
{
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"model": "gpt-5.6-sol",
"date": 1788715664103,
"benches": [
{
"value": 9.2,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time"
},
{
"value": 27013.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In"
},
{
"value": 10.2,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time"
},
{
"value": 27749.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In"
},
{
"value": 12.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"value": 12766.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"value": 13.9,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time"
},
{
"value": 27512.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In"
},
{
"value": 12.9,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time"
},
{
"value": 28082.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In"
},
{
"value": 11.4,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"value": 12686.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"value": 14.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time"
},
{
"value": 27536.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In"
},
{
"value": 16.3,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time"
},
{
"value": 28339.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In"
},
{
"value": 9.2,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"value": 12518.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"value": 12.6,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"value": 29834.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"value": 16.5,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"value": 30384.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"value": 11.8,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"value": 13347.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"value": 139.2,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time"
},
{
"value": 542889.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In"
},
{
"value": 29.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time"
},
{
"value": 82902.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In"
},
{
"value": 11.2,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"value": 36928.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"value": 7.7,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time"
},
{
"value": 46405.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In"
},
{
"value": 27.5,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time"
},
{
"value": 83019.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In"
},
{
"value": 13.3,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"value": 13050.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"value": 143.8,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time"
},
{
"value": 550729.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In"
},
{
"value": 96.9,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time"
},
{
"value": 422089.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In"
},
{
"value": 89.1,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"value": 364887.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"value": 14.7,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time"
},
{
"value": 27463.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In"
},
{
"value": 19.6,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time"
},
{
"value": 28430.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In"
},
{
"value": 37.1,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"value": 13735.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"value": 20.5,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time"
},
{
"value": 27793.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In"
},
{
"value": 17.0,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time"
},
{
"value": 28309.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In"
},
{
"value": 14.0,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"value": 12899.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"value": 13.7,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time"
},
{
"value": 27413.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In"
},
{
"value": 18.1,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time"
},
{
"value": 28428.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In"
},
{
"value": 16.5,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"value": 13310.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"tool": "customSmallerIsBetter"
},
{
"commit": {
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"author": {
"username": "AbhitejJohn",
"name": "Amaury Levé"
},
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
},
"tool": "customSmallerIsBetter",
"benches": [
{
"value": 11.5,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 30303.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 11.1,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 31181.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 13.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"value": 31802.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"value": 14.5,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 30731.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 14.5,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 31456.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 15.4,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"value": 14283.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"value": 13.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 30868.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 13.5,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 31836.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 17.5,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"value": 27822.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"value": 12.4,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"value": 33436.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"value": 12.7,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"value": 34117.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"value": 7.2,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"value": 14597.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"value": 43.7,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 185428.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 20.0,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 54856.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 35.0,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"value": 138249.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"value": 66.6,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 309966.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 20.5,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 73321.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 78.3,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"value": 277476.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"value": 83.0,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 375978.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 91.6,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 515816.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 163.5,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"value": 820947.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"value": 12.0,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 30452.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 14.0,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 31479.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 13.8,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"value": 31895.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"value": 17.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 30717.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 15.5,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 31489.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 14.6,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"value": 14212.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"value": 13.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 30371.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 14.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 31389.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 13.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"value": 27243.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"date": 1788790039242,
"model": "claude-sonnet-4.6"
},
{
"commit": {
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"author": {
"username": "AbhitejJohn",
"name": "Amaury Levé"
},
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
},
"tool": "customSmallerIsBetter",
"benches": [
{
"value": 9.3,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time"
},
{
"value": 26859.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In"
},
{
"value": 9.5,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time"
},
{
"value": 27649.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In"
},
{
"value": 14.9,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"value": 12780.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"value": 11.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time"
},
{
"value": 27083.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In"
},
{
"value": 12.9,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time"
},
{
"value": 27861.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In"
},
{
"value": 18.1,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"value": 13042.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"value": 11.9,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time"
},
{
"value": 27198.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In"
},
{
"value": 10.7,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time"
},
{
"value": 28109.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In"
},
{
"value": 12.3,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"value": 12856.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"value": 18.7,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"value": 46516.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"value": 15.7,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"value": 66264.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"value": 28.0,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"value": 39732.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"value": 39.5,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 244303.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 7.7,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 64876.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 11.9,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"value": 49094.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"value": 21.3,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 64211.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 13.5,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 47922.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 17.7,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"value": 37579.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"value": 121.0,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 734050.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 103.0,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 284008.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 68.7,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"value": 295172.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"value": 15.1,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time"
},
{
"value": 27296.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In"
},
{
"value": 18.6,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time"
},
{
"value": 28102.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In"
},
{
"value": 19.8,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"value": 37521.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"value": 16.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time"
},
{
"value": 27315.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In"
},
{
"value": 21.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time"
},
{
"value": 28622.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In"
},
{
"value": 13.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"value": 24850.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"value": 11.6,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time"
},
{
"value": 27157.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In"
},
{
"value": 13.9,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time"
},
{
"value": 27782.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In"
},
{
"value": 8.1,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"value": 12551.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"date": 1788790039358,
"model": "gpt-5.6-luna"
},
{
"model": "claude-haiku-4.5",
"tool": "customSmallerIsBetter",
"date": 1788885915461,
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
},
"benches": [
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 11.9
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 30538.0
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 12.5
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 31394.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 9.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 13945.0
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 20.1
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 31516.0
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 19.6
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 32195.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 15.6
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 14502.0
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 22.5
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 31816.0
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 18.7
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 32278.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 21.1
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 15221.0
},
{
"unit": "seconds",
"overfittingScore": 0.25,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 22.7
},
{
"unit": "tokens",
"overfittingScore": 0.25,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 34614.0
},
{
"unit": "seconds",
"overfittingScore": 0.25,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 22.8
},
{
"unit": "tokens",
"overfittingScore": 0.25,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 35281.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 16.6
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 15493.0
},
{
"unit": "seconds",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 84.9
},
{
"unit": "tokens",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 510812.0
},
{
"unit": "seconds",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 68.2
},
{
"unit": "tokens",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 507914.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 33.4
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 139697.0
},
{
"unit": "seconds",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 87.7
},
{
"unit": "tokens",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 460734.0
},
{
"unit": "seconds",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 98.0
},
{
"unit": "tokens",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 676725.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 96.2
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 333608.0
},
{
"unit": "seconds",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 227.4
},
{
"unit": "tokens",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 1293464.0
},
{
"unit": "seconds",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 212.3
},
{
"unit": "tokens",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 1215313.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 286.0
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 1504779.0
},
{
"unit": "seconds",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 20.0
},
{
"unit": "tokens",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 47762.0
},
{
"unit": "seconds",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 14.7
},
{
"unit": "tokens",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 31785.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 96.4
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 329701.0
},
{
"unit": "seconds",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 15.3
},
{
"unit": "tokens",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 30821.0
},
{
"unit": "seconds",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 15.6
},
{
"unit": "tokens",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 31833.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 72.9
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 187058.0
},
{
"unit": "seconds",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 13.7
},
{
"unit": "tokens",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 30571.0
},
{
"unit": "seconds",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 16.2
},
{
"unit": "tokens",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 31881.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 11.7
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 14263.0
}
]
},
{
"model": "gpt-5.3-codex",
"tool": "customSmallerIsBetter",
"date": 1788885915581,
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
},
"benches": [
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 5.2
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26441.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 8.3
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 27165.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 9.0
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 12437.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 6.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 26483.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 8.3
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 12810.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 8.0
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12269.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 15.7
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 26785.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 6.1
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 12826.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 7.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12309.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 6.2
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 29062.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 6.7
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 29577.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 4.7
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 12703.0
},
{
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 5.5
},
{
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 45777.0
},
{
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 6.6
},
{
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 29885.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 3.8
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 12179.0
},
{
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 5.9
},
{
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 29019.0
},
{
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 5.2
},
{
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 12699.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 5.3
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 12175.0
},
{
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 3.8
},
{
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 28740.0
},
{
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 8.5
},
{
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 13037.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 25.2
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 74372.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 7.3
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 26714.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 7.8
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 27612.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 5.7
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 12246.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 8.1
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 26611.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 6.2
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 12719.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 7.0
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 12383.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 6.2
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 26580.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 5.3
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 12674.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 5.1
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12199.0
}
]
},
{
"model": "mai-code-1-flash-picker",
"tool": "customSmallerIsBetter",
"date": 1788885915746,
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
},
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"overfitting": "high",
"notActivated": true,
"value": 24.8,
"unit": "seconds",
"overfittingScore": 0.55
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"overfitting": "high",
"notActivated": true,
"value": 14427.0,
"unit": "tokens",
"overfittingScore": 0.55
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 22.8
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 26704.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 55.1
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 119025.0
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"overfitting": "high",
"notActivated": true,
"value": 24.1,
"unit": "seconds",
"overfittingScore": 0.55
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"overfitting": "high",
"notActivated": true,
"value": 14125.0,
"unit": "tokens",
"overfittingScore": 0.55
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 21.5
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 13577.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 19.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12683.0
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"overfitting": "high",
"notActivated": true,
"value": 15.2,
"unit": "seconds",
"overfittingScore": 0.55
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"overfitting": "high",
"notActivated": true,
"value": 12386.0,
"unit": "tokens",
"overfittingScore": 0.55
},
{
"unit": "seconds",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 26.4
},
{
"unit": "tokens",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 27404.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 28.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 14385.0
},
{
"unit": "seconds",
"overfittingScore": 0.26,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 69.5
},
{
"unit": "tokens",
"overfittingScore": 0.26,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 254837.0
},
{
"unit": "seconds",
"overfittingScore": 0.26,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 68.2
},
{
"unit": "tokens",
"overfittingScore": 0.26,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 266618.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 114.9
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 343965.0
},
{
"unit": "seconds",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 194.0
},
{
"unit": "tokens",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 1045954.0
},
{
"unit": "seconds",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 137.4
},
{
"unit": "tokens",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 737937.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 239.6
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 971488.0
},
{
"unit": "seconds",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 132.4
},
{
"unit": "tokens",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 645009.0
},
{
"unit": "seconds",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 59.3
},
{
"unit": "tokens",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 162176.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 127.9
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 403222.0
},
{
"unit": "seconds",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 137.4
},
{
"unit": "tokens",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 469042.0
},
{
"unit": "seconds",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 142.4
},
{
"unit": "tokens",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 616733.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 184.6
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 643195.0
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"overfitting": "moderate",
"notActivated": true,
"value": 77.1,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"overfitting": "moderate",
"notActivated": true,
"value": 243068.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 24.5
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 27749.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 62.0
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 139215.0
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"overfitting": "moderate",
"notActivated": true,
"value": 19.6,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"overfitting": "moderate",
"notActivated": true,
"value": 13872.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 21.9
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 14419.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 22.6
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 13882.0
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"overfitting": "moderate",
"notActivated": true,
"value": 88.5,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"overfitting": "moderate",
"notActivated": true,
"value": 13988.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 14.0
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 13055.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 20.1
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 13629.0
}
]
},
{
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1149 from dotnet/abhitejjohn-vally-014-ci-proof",
"url": "https://github.com/dotnet/skills/commit/a8fece0fce5f8b0737754a332a1a7c6487e8f927",
"timestamp": "2026-09-09T17:53:08+00:00",
"id": "a8fece0fce5f8b0737754a332a1a7c6487e8f927"
},
"model": "claude-opus-4.8",
"benches": [],
"date": 1789036360813,
"tool": "customSmallerIsBetter"
},
{
"tool": "customSmallerIsBetter",
"model": "gpt-5.6-luna",
"benches": [
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 8.7
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26645.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 9.7
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 27357.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 17.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 27994.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 15.1
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 27113.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 12.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 27758.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 13.5
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12779.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 12.3
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 26897.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 10.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 27863.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 13.9
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12713.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 15.4
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 45871.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 14.8
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 46493.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 24.7
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 39519.0
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 10.9
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 80425.0
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 9.7
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 64587.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 11.3
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 48574.0
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 16.0
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 46705.0
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 10.7
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 30053.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 33.5
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 38284.0
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 100.5
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 586886.0
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 130.6
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 615432.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 121.3
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 358646.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 11.9
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 27131.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 13.3
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 27951.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 15.3
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 12772.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 13.9
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 26976.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 20.1
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 28089.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 17.8
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 12994.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 12.9
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 26993.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 13.6
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 27781.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 9.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12459.0
}
],
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "8a5a42d3e392b402768fc29416831643b79e402b",
"message": "Merge pull request #1153 from dotnet/abhitejjohn-vally-lock-concurrency-proof",
"timestamp": "2026-09-10T21:01:20+00:00",
"url": "https://github.com/dotnet/skills/commit/8a5a42d3e392b402768fc29416831643b79e402b"
},
"date": 1789129571434
},
{
"benches": [
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 13.0,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 30439.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 13.1,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 31210.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In"
},
{
"value": 9.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"value": 13744.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 15.5,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 30730.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 20.1,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 31895.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In"
},
{
"value": 12.3,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"value": 13951.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 21.4,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 31533.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 20.1,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 32292.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In"
},
{
"value": 16.9,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"value": 14549.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"overfittingScore": 0.3,
"overfitting": "moderate",
"value": 22.6,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"overfittingScore": 0.3,
"overfitting": "moderate",
"value": 34420.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"overfittingScore": 0.3,
"overfitting": "moderate",
"value": 20.2,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"overfittingScore": 0.3,
"overfitting": "moderate",
"value": 34679.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"value": 18.4,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"value": 29883.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 65.3,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 463477.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 128.7,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 649256.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In"
},
{
"value": 12.5,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"value": 41735.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 60.8,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 346581.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 77.6,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 385101.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In"
},
{
"value": 42.9,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"value": 161561.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 377.6,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 3022954.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 202.1,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 1349521.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In"
},
{
"value": 220.5,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"value": 1208071.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 20.7,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 47441.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 55.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 178635.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In"
},
{
"value": 70.0,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"value": 197106.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 12.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 30256.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 47.8,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 134083.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In"
},
{
"value": 10.8,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"value": 13965.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 15.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 30529.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 16.9,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 31648.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In"
},
{
"value": 11.0,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"value": 14100.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"date": 1789218680753,
"model": "claude-haiku-4.5",
"tool": "customSmallerIsBetter",
"commit": {
"timestamp": "2026-09-12T00:01:18+00:00",
"id": "4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"message": "Merge pull request #1154 from dotnet/abhitejjohn-agentic-workflow-repair",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
}
},
{
"benches": [
{
"value": 4.1,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time"
},
{
"value": 26204.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In"
},
{
"value": 5.4,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time"
},
{
"value": 26930.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In"
},
{
"value": 6.6,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"value": 12168.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"notActivated": true,
"value": 4.2,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time"
},
{
"notActivated": true,
"value": 12125.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In"
},
{
"value": 6.1,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time"
},
{
"value": 12589.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In"
},
{
"value": 7.2,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"value": 12155.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"notActivated": true,
"value": 4.8,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time"
},
{
"notActivated": true,
"value": 12334.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In"
},
{
"value": 5.4,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time"
},
{
"value": 27223.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In"
},
{
"value": 8.2,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"value": 12389.0,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"value": 6.1,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"value": 28846.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"value": 5.3,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"value": 29439.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"value": 3.6,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"value": 12631.0,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 4.3,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 28900.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 3.3,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 12501.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In"
},
{
"value": 2.9,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"value": 12037.0,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 4.7,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 28829.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 4.6,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 12630.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In"
},
{
"value": 4.3,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"value": 12123.0,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 10.9,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 131087.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 7.9,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 13257.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In"
},
{
"value": 26.1,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"value": 110322.0,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"value": 5.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time"
},
{
"value": 26461.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In"
},
{
"value": 5.8,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time"
},
{
"value": 27348.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In"
},
{
"value": 4.5,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"value": 12180.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"value": 5.2,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time"
},
{
"value": 26294.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In"
},
{
"value": 5.0,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time"
},
{
"value": 12638.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In"
},
{
"value": 6.2,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"value": 12339.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"value": 5.7,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time"
},
{
"value": 26503.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In"
},
{
"value": 4.3,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time"
},
{
"value": 12613.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In"
},
{
"value": 4.8,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"value": 12136.0,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"date": 1789218680862,
"model": "gpt-5.3-codex",
"tool": "customSmallerIsBetter",
"commit": {
"timestamp": "2026-09-12T00:01:18+00:00",
"id": "4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"message": "Merge pull request #1154 from dotnet/abhitejjohn-agentic-workflow-repair",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
}
},
{
"tool": "customSmallerIsBetter",
"model": "claude-opus-5",
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"overfitting": "high",
"value": 13.1,
"unit": "seconds",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"overfitting": "high",
"value": 41265.0,
"unit": "tokens",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"overfitting": "high",
"value": 16.5,
"unit": "seconds",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"overfitting": "high",
"value": 42628.0,
"unit": "tokens",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 12.6,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 18650.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"overfitting": "high",
"value": 22.2,
"unit": "seconds",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"overfitting": "high",
"value": 41871.0,
"unit": "tokens",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"overfitting": "high",
"value": 17.2,
"unit": "seconds",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"overfitting": "high",
"value": 42668.0,
"unit": "tokens",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 15.0,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 18624.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"overfitting": "high",
"value": 19.3,
"unit": "seconds",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"overfitting": "high",
"value": 42066.0,
"unit": "tokens",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"overfitting": "high",
"value": 22.9,
"unit": "seconds",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"overfitting": "high",
"value": 43865.0,
"unit": "tokens",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 24.9,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 20007.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 15.4,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 45246.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 14.7,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 46139.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 17.4,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 20346.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "high",
"value": 75.7,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "high",
"value": 407235.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "high",
"value": 41.4,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "high",
"value": 216176.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 13.3,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 36915.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "high",
"value": 17.5,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "high",
"value": 71926.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "high",
"value": 18.0,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "high",
"value": 73410.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 153.6,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 465703.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "high",
"value": 122.3,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "high",
"value": 618012.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "high",
"value": 121.6,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "high",
"value": 593043.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 203.4,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 682666.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"overfitting": "moderate",
"value": 19.1,
"unit": "seconds",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"overfitting": "moderate",
"value": 41420.0,
"unit": "tokens",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"overfitting": "moderate",
"value": 20.5,
"unit": "seconds",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 43083.0,
"unit": "tokens",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 24.9,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 37317.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"overfitting": "moderate",
"value": 20.5,
"unit": "seconds",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"overfitting": "moderate",
"value": 41421.0,
"unit": "tokens",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"overfitting": "moderate",
"value": 16.5,
"unit": "seconds",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"overfitting": "moderate",
"value": 42430.0,
"unit": "tokens",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 26.5,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 37329.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"overfitting": "moderate",
"value": 16.7,
"unit": "seconds",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"overfitting": "moderate",
"value": 41206.0,
"unit": "tokens",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"overfitting": "moderate",
"value": 20.8,
"unit": "seconds",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 42926.0,
"unit": "tokens",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 16.8,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 19044.0,
"unit": "tokens"
}
],
"date": 1789318508422,
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
},
{
"tool": "customSmallerIsBetter",
"model": "claude-sonnet-5",
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"overfitting": "moderate",
"value": 10.3,
"unit": "seconds",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"overfitting": "moderate",
"value": 41249.0,
"unit": "tokens",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"overfitting": "moderate",
"value": 10.1,
"unit": "seconds",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"overfitting": "moderate",
"value": 42396.0,
"unit": "tokens",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 12.5,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 18962.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"overfitting": "moderate",
"value": 10.4,
"unit": "seconds",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"overfitting": "moderate",
"value": 41249.0,
"unit": "tokens",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"overfitting": "moderate",
"value": 14.6,
"unit": "seconds",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"overfitting": "moderate",
"value": 42821.0,
"unit": "tokens",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 15.2,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 19110.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"overfitting": "moderate",
"value": 12.8,
"unit": "seconds",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"overfitting": "moderate",
"value": 41818.0,
"unit": "tokens",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"overfitting": "moderate",
"value": 15.4,
"unit": "seconds",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"overfitting": "moderate",
"value": 66427.0,
"unit": "tokens",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 15.3,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 19382.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"overfitting": "moderate",
"value": 12.3,
"unit": "seconds",
"overfittingScore": 0.26
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"overfitting": "moderate",
"value": 45254.0,
"unit": "tokens",
"overfittingScore": 0.26
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"overfitting": "moderate",
"value": 13.6,
"unit": "seconds",
"overfittingScore": 0.26
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"overfitting": "moderate",
"value": 71881.0,
"unit": "tokens",
"overfittingScore": 0.26
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 12.2,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 20117.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "high",
"value": 19.6,
"unit": "seconds",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "high",
"value": 99915.0,
"unit": "tokens",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "high",
"value": 42.0,
"unit": "seconds",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "high",
"value": 363270.0,
"unit": "tokens",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 13.1,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 55429.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "high",
"value": 41.5,
"unit": "seconds",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "high",
"value": 274742.0,
"unit": "tokens",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "high",
"value": 16.8,
"unit": "seconds",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "high",
"value": 100914.0,
"unit": "tokens",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 16.7,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 37249.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "high",
"value": 95.5,
"unit": "seconds",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "high",
"value": 813327.0,
"unit": "tokens",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "high",
"value": 100.8,
"unit": "seconds",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "high",
"value": 838130.0,
"unit": "tokens",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 139.3,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 905440.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"overfitting": "moderate",
"value": 15.8,
"unit": "seconds",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"overfitting": "moderate",
"value": 63728.0,
"unit": "tokens",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"overfitting": "moderate",
"value": 17.3,
"unit": "seconds",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 66069.0,
"unit": "tokens",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 20.9,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 37769.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"overfitting": "moderate",
"value": 10.7,
"unit": "seconds",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"overfitting": "moderate",
"value": 40820.0,
"unit": "tokens",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"overfitting": "moderate",
"value": 12.2,
"unit": "seconds",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"overfitting": "moderate",
"value": 42403.0,
"unit": "tokens",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 21.1,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 19733.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"overfitting": "moderate",
"value": 15.0,
"unit": "seconds",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"overfitting": "moderate",
"value": 63596.0,
"unit": "tokens",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"overfitting": "moderate",
"value": 15.0,
"unit": "seconds",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 65646.0,
"unit": "tokens",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 11.5,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 36526.0,
"unit": "tokens"
}
],
"date": 1789318508544,
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
},
{
"tool": "customSmallerIsBetter",
"model": "gpt-5.6-sol",
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 10.0,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26741.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 13.1,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 27686.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 27.1,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 41442.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 11.8,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 26993.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 14.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 27741.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 26.9,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 13681.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 14.1,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 27232.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 15.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 28082.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 15.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12866.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 18.8,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 29619.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 13.4,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 30076.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 18.2,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 13790.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "moderate",
"value": 24.9,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "moderate",
"value": 64145.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "moderate",
"value": 41.2,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "moderate",
"value": 83244.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 14.7,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 36730.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "moderate",
"value": 19.1,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "moderate",
"value": 46849.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "moderate",
"value": 19.7,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "moderate",
"value": 82670.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 7.7,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 24202.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "moderate",
"value": 141.5,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "moderate",
"value": 616687.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "moderate",
"value": 119.7,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "moderate",
"value": 502655.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 131.7,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 331134.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 15.7,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 27488.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 20.4,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 28677.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 13.3,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 12935.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 15.3,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 27236.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 21.7,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 28503.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 13.5,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 12722.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 15.4,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 27239.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 13.0,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 27858.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 10.4,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12615.0,
"unit": "tokens"
}
],
"date": 1789318508668,
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
},
{
"date": 1789397101299,
"model": "claude-sonnet-5",
"commit": {
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"timestamp": "2026-09-12T07:43:41+00:00",
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"benches": [
{
"unit": "seconds",
"overfittingScore": 0.57,
"value": 8.8,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.57,
"value": 41076.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"overfittingScore": 0.57,
"value": 10.4,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.57,
"value": 42372.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"value": 12.3,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"unit": "tokens",
"value": 18948.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.57,
"value": 13.2,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.57,
"value": 41516.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"overfittingScore": 0.57,
"value": 13.4,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.57,
"value": 42652.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"value": 15.2,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"unit": "tokens",
"value": 19082.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.57,
"value": 13.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.57,
"value": 41819.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"overfittingScore": 0.57,
"value": 15.7,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.57,
"value": 66371.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"value": 18.7,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"unit": "tokens",
"value": 19837.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"unit": "seconds",
"value": 12.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"unit": "tokens",
"value": 45249.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 12.4,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"unit": "tokens",
"value": 46146.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 45.9,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"unit": "tokens",
"value": 207011.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.69,
"value": 19.7,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.69,
"value": 99699.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"overfittingScore": 0.69,
"value": 36.7,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.69,
"value": 334226.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"value": 45.7,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"unit": "tokens",
"value": 73907.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.69,
"value": 16.7,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.69,
"value": 72147.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"overfittingScore": 0.69,
"value": 36.2,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.69,
"value": 221040.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"value": 52.2,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"unit": "tokens",
"value": 188438.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.69,
"value": 96.9,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.69,
"value": 880981.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"overfittingScore": 0.69,
"value": 130.5,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "high"
},
{
"unit": "tokens",
"overfittingScore": 0.69,
"value": 995307.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "high"
},
{
"unit": "seconds",
"value": 142.8,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"unit": "tokens",
"value": 899974.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"value": 15.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"value": 63639.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"value": 42.3,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"value": 171427.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"value": 18.6,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"unit": "tokens",
"value": 37347.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"value": 9.4,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"value": 40711.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"value": 10.8,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"value": 42189.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"value": 13.6,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"unit": "tokens",
"value": 18845.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"value": 15.9,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"value": 63618.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"overfittingScore": 0.32,
"value": 14.1,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.32,
"value": 42789.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"value": 13.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"unit": "tokens",
"value": 36707.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"tool": "customSmallerIsBetter"
},
{
"date": 1789397101422,
"model": "gpt-5.6-luna",
"commit": {
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"timestamp": "2026-09-12T07:43:41+00:00",
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"benches": [
{
"unit": "seconds",
"value": 9.3,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time"
},
{
"unit": "tokens",
"value": 26635.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 8.5,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time"
},
{
"unit": "tokens",
"value": 27227.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 16.3,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time"
},
{
"unit": "tokens",
"value": 24851.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In"
},
{
"unit": "seconds",
"value": 12.7,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time"
},
{
"unit": "tokens",
"value": 26797.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 14.7,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time"
},
{
"unit": "tokens",
"value": 27789.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 12.3,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time"
},
{
"unit": "tokens",
"value": 12605.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In"
},
{
"unit": "seconds",
"value": 12.6,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time"
},
{
"unit": "tokens",
"value": 27147.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 10.2,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time"
},
{
"unit": "tokens",
"value": 27698.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 10.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time"
},
{
"unit": "tokens",
"value": 12545.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In"
},
{
"unit": "seconds",
"value": 16.3,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time"
},
{
"unit": "tokens",
"value": 46869.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 14.9,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time"
},
{
"unit": "tokens",
"value": 47497.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 36.4,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time"
},
{
"unit": "tokens",
"value": 125457.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"value": 11.7,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"value": 63038.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"value": 9.4,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"value": 64397.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"value": 10.6,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time"
},
{
"unit": "tokens",
"value": 36325.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"value": 14.6,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"value": 46510.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"value": 19.4,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"value": 65163.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"value": 21.9,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time"
},
{
"unit": "tokens",
"value": 37305.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In"
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"value": 88.1,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"value": 541274.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"overfittingScore": 0.34,
"value": 154.5,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "moderate"
},
{
"unit": "tokens",
"overfittingScore": 0.34,
"value": 627866.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "moderate"
},
{
"unit": "seconds",
"value": 112.3,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time"
},
{
"unit": "tokens",
"value": 512241.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In"
},
{
"unit": "seconds",
"value": 12.2,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time"
},
{
"unit": "tokens",
"value": 27084.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 12.3,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time"
},
{
"unit": "tokens",
"value": 42712.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 22.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time"
},
{
"unit": "tokens",
"value": 37310.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In"
},
{
"unit": "seconds",
"value": 18.3,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time"
},
{
"unit": "tokens",
"value": 27175.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 17.3,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time"
},
{
"unit": "tokens",
"value": 28087.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 11.9,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time"
},
{
"unit": "tokens",
"value": 12698.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In"
},
{
"unit": "seconds",
"value": 11.2,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time"
},
{
"unit": "tokens",
"value": 26891.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In"
},
{
"unit": "seconds",
"value": 10.6,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time"
},
{
"unit": "tokens",
"value": 27700.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In"
},
{
"unit": "seconds",
"value": 7.6,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time"
},
{
"unit": "tokens",
"value": 12461.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In"
}
],
"tool": "customSmallerIsBetter"
},
{
"tool": "customSmallerIsBetter",
"model": "claude-haiku-4.5",
"date": 1789478285540,
"commit": {
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-14T15:27:40+00:00",
"id": "24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"message": "Surface activation-only evaluation failures (#1163)"
},
"benches": [
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 12.1
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 30441.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 13.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 31225.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 9.2
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 13777.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 17.8
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 31032.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 21.1
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 32101.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 16.5
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 14412.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 19.5
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 31343.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 21.3
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 32383.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 23.9
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 15535.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 23.8
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 34391.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 24.3
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 35176.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 17.9
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 15792.0
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 55.0
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 436062.0
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 37.3
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 136510.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 30.7
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 210144.0
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 38.2
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 156523.0
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 155.5
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 1021228.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 32.8
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 77179.0
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 245.7
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 2235908.0
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 328.1
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 2803509.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 198.5
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 1227003.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 13.2
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 30413.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 48.4
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 174082.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 50.6
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 119302.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 12.4
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 30266.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 15.7
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 49076.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 80.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 212633.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 13.5
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 30346.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 16.7
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 31664.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 10.1
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 14006.0
}
]
},
{
"tool": "customSmallerIsBetter",
"model": "gpt-5.3-codex",
"date": 1789478285696,
"commit": {
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-14T15:27:40+00:00",
"id": "24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"message": "Surface activation-only evaluation failures (#1163)"
},
"benches": [
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 5.1
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26238.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 7.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 26899.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 7.2
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 12274.0
},
{
"notActivated": true,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 6.3
},
{
"notActivated": true,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 12259.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 6.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 12584.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 8.1
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12273.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 6.6
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 26478.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 6.9
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 27255.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 6.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12233.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 7.4
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 28886.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 6.0
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 29380.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 4.9
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 12633.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 5.7
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 29031.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 3.8
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 12602.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 3.1
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 12013.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 6.4
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 28895.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 5.2
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 12566.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 4.2
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 12048.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 10.9
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 29736.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 7.9
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 13074.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 17.5
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 48443.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 7.7
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 26556.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 6.8
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 27344.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 5.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 12192.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 8.2
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 26507.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 6.7
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 12759.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 6.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 12242.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 5.7
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 26290.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 5.3
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 12661.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 4.8
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12096.0
}
]
},
{
"date": 1789574378852,
"commit": {
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-15T22:05:10+00:00",
"message": "Merge pull request #873 from dotnet/add-dotnet-refactoring-skills",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f",
"id": "26323a52990d0cbfc838117109b40e115aac891f"
},
"benches": [
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 9.1
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 41141.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 9.9
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 42357.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 12.2
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 18979.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 11.7
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 41406.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 11.5
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 42503.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 15.5
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 19035.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 13.9
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 41890.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 15.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 43393.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 17.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 37599.0
},
{
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 14.0
},
{
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 45496.0
},
{
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 11.7
},
{
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 46120.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 23.4
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 79264.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 16.7
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 99272.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 38.1
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 332980.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 10.4
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 38131.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 35.7
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 215177.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 23.2
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 130936.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 27.2
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 94942.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 87.6
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 682664.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 95.7
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 929418.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 147.9
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 991000.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 14.9
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 63741.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 14.8
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 65821.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 16.3
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 19495.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 10.4
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 40833.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 9.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 42072.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 16.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 19115.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 12.6
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 41154.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 13.3
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 42744.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 10.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 18794.0
}
],
"model": "claude-sonnet-5",
"tool": "customSmallerIsBetter"
},
{
"date": 1789574378990,
"commit": {
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-15T22:05:10+00:00",
"message": "Merge pull request #873 from dotnet/add-dotnet-refactoring-skills",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f",
"id": "26323a52990d0cbfc838117109b40e115aac891f"
},
"benches": [
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 10.2
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26666.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 9.3
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 27195.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 12.7
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 12621.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 12.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 27015.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 12.3
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 27784.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 13.3
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12697.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 11.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 27037.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 19.2
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 27748.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 8.9
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12371.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 11.4
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 46813.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 15.8
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 47597.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 24.9
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 39642.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 11.7
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 63407.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 9.5
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 64610.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 49.1
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 205636.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 16.9
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 63578.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 14.2
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 47492.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 40.4
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 36590.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 123.4
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 795762.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 113.3
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 597211.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 139.8
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 611000.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 9.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 27136.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 14.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 27986.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 11.2
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 12820.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 15.4
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 27166.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 15.1
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 27905.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 12.9
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 12898.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 11.2
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 26882.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 10.4
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 27842.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 8.9
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12491.0
}
],
"model": "gpt-5.6-luna",
"tool": "customSmallerIsBetter"
},
{
"benches": [
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 13.8,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 41292.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 14.1,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 42462.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 21.6,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"unit": "seconds"
},
{
"value": 72727.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 22.9,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 42071.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 29.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 43909.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 20.4,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"unit": "seconds"
},
{
"value": 19245.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 23.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 42401.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 23.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 43661.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 23.2,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"unit": "seconds"
},
{
"value": 19617.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.24,
"overfitting": "moderate",
"value": 16.4,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.24,
"overfitting": "moderate",
"value": 45403.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.24,
"overfitting": "moderate",
"value": 16.7,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.24,
"overfitting": "moderate",
"value": 46322.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 19.7,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"unit": "seconds"
},
{
"value": 20425.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 83.8,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 374930.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 116.4,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 630511.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 37.5,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"unit": "seconds"
},
{
"value": 138354.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 24.5,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 99046.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 23.9,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 101076.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 21.5,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"unit": "seconds"
},
{
"value": 55095.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 89.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 505930.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 102.4,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 525395.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 114.3,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"unit": "seconds"
},
{
"value": 444146.0,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 19.2,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 41536.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 19.8,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 42955.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 23.4,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"unit": "seconds"
},
{
"value": 37371.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 17.4,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 41092.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 19.4,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 42710.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 23.7,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"unit": "seconds"
},
{
"value": 37164.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 19.1,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"unit": "seconds"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 41390.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"unit": "tokens"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 18.5,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"unit": "seconds"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 42758.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"unit": "tokens"
},
{
"value": 16.4,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"unit": "seconds"
},
{
"value": 18901.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"unit": "tokens"
}
],
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"date": 1789642372197,
"tool": "customSmallerIsBetter",
"model": "claude-opus-4.8"
},
{
"tool": "customSmallerIsBetter",
"model": "claude-sonnet-5",
"benches": [
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 9.7,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 41085.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 10.5,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 42330.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 13.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 19120.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 10.4,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 41159.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 14.1,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 42674.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 16.6
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 19110.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 15.7,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 64625.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 13.5,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 43116.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 15.6
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 19459.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 10.8
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 45128.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 11.8
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 46124.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 12.4
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 20106.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 38.9,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 358155.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 65.2,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 184848.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 7.0
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 18682.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 40.2,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 244595.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 33.9,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 220906.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 17.7
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 55228.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 75.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 634909.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 165.5,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 1304678.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 219.3
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 1168792.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 14.5,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 63690.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 15.4,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 65875.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 18.6
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 37465.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 13.6,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 41094.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 10.7,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 42278.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 13.2
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 18793.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 14.7,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 63417.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 12.3,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 42608.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 10.9
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 18833.0
}
],
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"date": 1789745909366
},
{
"tool": "customSmallerIsBetter",
"model": "gpt-5.6-luna",
"benches": [
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 5.8
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26732.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 7.4
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 27492.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 21.0
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 12952.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 6.6
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 26743.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 10.1
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 27609.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 9.9
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12669.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 7.6
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 26948.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 7.7
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 27639.0
},
{
"unit": "seconds",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 8.0
},
{
"unit": "tokens",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12728.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 8.2
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 46627.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 8.5
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 47505.0
},
{
"unit": "seconds",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 13.7
},
{
"unit": "tokens",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 39177.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 5.3,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 63050.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"value": 7.2,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"value": 64406.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 7.3
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 36449.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 11.8,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 63805.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"value": 8.5,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"value": 64650.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "seconds",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 15.6
},
{
"unit": "tokens",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 37161.0
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"value": 70.3,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"value": 593090.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"value": 76.8,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"value": 429246.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "seconds",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 85.3
},
{
"unit": "tokens",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 523565.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 8.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 27227.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 12.6
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 42989.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 8.1
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 36638.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 9.0
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 27206.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 17.0
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 28007.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 9.4
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 13393.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 7.0
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 26894.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 6.4
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 27549.0
},
{
"unit": "seconds",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 6.5
},
{
"unit": "tokens",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12444.0
}
],
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"date": 1789745909486
},
{
"date": 1789836946353,
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"overfitting": "high",
"value": 11.9,
"unit": "seconds",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"overfitting": "high",
"value": 30281.0,
"unit": "tokens",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"overfitting": "high",
"value": 12.3,
"unit": "seconds",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"overfitting": "high",
"value": 31108.0,
"unit": "tokens",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 9.9,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 13780.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"overfitting": "high",
"value": 19.0,
"unit": "seconds",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"overfitting": "high",
"value": 31118.0,
"unit": "tokens",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"overfitting": "high",
"value": 19.4,
"unit": "seconds",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"overfitting": "high",
"value": 31874.0,
"unit": "tokens",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 18.6,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 14741.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"overfitting": "high",
"value": 26.7,
"unit": "seconds",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"overfitting": "high",
"value": 32123.0,
"unit": "tokens",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"overfitting": "high",
"value": 22.0,
"unit": "seconds",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"overfitting": "high",
"value": 32294.0,
"unit": "tokens",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 21.8,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 31041.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 20.3,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 34127.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 21.0,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 34765.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 28.1,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 62859.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"overfitting": "high",
"value": 60.1,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"overfitting": "high",
"value": 436302.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "high",
"value": 59.9,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "high",
"value": 382795.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 59.9,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 180766.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"overfitting": "high",
"value": 78.5,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"overfitting": "high",
"value": 403775.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "high",
"value": 22.6,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "high",
"value": 115539.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 78.8,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 268763.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "high",
"value": 201.5,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "high",
"value": 1232302.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "high",
"value": 281.7,
"unit": "seconds",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "high",
"value": 1934967.0,
"unit": "tokens",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 252.9,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 1041631.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"overfitting": "moderate",
"value": 52.9,
"unit": "seconds",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"overfitting": "moderate",
"value": 151436.0,
"unit": "tokens",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"overfitting": "moderate",
"value": 110.8,
"unit": "seconds",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 321491.0,
"unit": "tokens",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 13.7,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 14305.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"overfitting": "moderate",
"value": 55.4,
"unit": "seconds",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"overfitting": "moderate",
"value": 171973.0,
"unit": "tokens",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"overfitting": "moderate",
"value": 78.2,
"unit": "seconds",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"overfitting": "moderate",
"value": 254443.0,
"unit": "tokens",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 47.6,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 98981.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"overfitting": "moderate",
"value": 15.7,
"unit": "seconds",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"overfitting": "moderate",
"value": 30541.0,
"unit": "tokens",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"overfitting": "moderate",
"value": 16.1,
"unit": "seconds",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 31621.0,
"unit": "tokens",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 44.9,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 96873.0,
"unit": "tokens"
}
],
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"tool": "customSmallerIsBetter",
"model": "claude-haiku-4.5"
},
{
"date": 1789836946473,
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 5.6,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 26453.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"value": 6.3,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"value": 12758.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 7.2,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 12437.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 5.9,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 26513.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"value": 6.6,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"value": 12677.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 7.4,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 12381.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 4.7,
"unit": "seconds",
"notActivated": true
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 12417.0,
"unit": "tokens",
"notActivated": true
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"value": 5.6,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"value": 12925.0,
"unit": "tokens"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 6.7,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 12310.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 5.0,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 29023.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"value": 5.2,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"value": 29527.0,
"unit": "tokens"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 4.1,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 12822.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Time",
"value": 2.9,
"unit": "seconds",
"overfittingScore": 0.32,
"overfitting": "moderate"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Tokens In",
"value": 12279.0,
"unit": "tokens",
"overfittingScore": 0.32,
"overfitting": "moderate"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Time",
"overfitting": "moderate",
"value": 5.3,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Tokens In",
"overfitting": "moderate",
"value": 65207.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 2.6,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 12061.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 3.8,
"unit": "seconds",
"overfittingScore": 0.32,
"overfitting": "moderate"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 12292.0,
"unit": "tokens",
"overfittingScore": 0.32,
"overfitting": "moderate"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "moderate",
"value": 4.3,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "moderate",
"value": 12794.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 3.8,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 12156.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "moderate",
"value": 9.0,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "moderate",
"value": 97016.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "moderate",
"value": 20.4,
"unit": "seconds",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "moderate",
"value": 134386.0,
"unit": "tokens",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 1.4,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 11736.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 5.9,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 26719.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"value": 5.9,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"value": 27515.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 4.7,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 12327.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 5.5,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 26545.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"value": 5.9,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"value": 12785.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 11.3,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 12408.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 5.1,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 26595.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"value": 4.4,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"value": 12704.0,
"unit": "tokens"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 3.6,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 12158.0,
"unit": "tokens"
}
],
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"tool": "customSmallerIsBetter",
"model": "gpt-5.3-codex"
},
{
"date": 1789836946581,
"benches": [
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Time",
"value": 11.0,
"unit": "seconds",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Tokens In",
"value": 12884.0,
"unit": "tokens",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Time",
"overfitting": "high",
"value": 9.5,
"unit": "seconds",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Tokens In",
"overfitting": "high",
"value": 12407.0,
"unit": "tokens",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Time",
"value": 11.5,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Tokens In",
"value": 12167.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Time",
"value": 15.2,
"unit": "seconds",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Tokens In",
"value": 12164.0,
"unit": "tokens",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Time",
"overfitting": "high",
"value": 14.6,
"unit": "seconds",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Tokens In",
"overfitting": "high",
"value": 13523.0,
"unit": "tokens",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Time",
"value": 10.4,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Tokens In",
"value": 11865.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Time",
"value": 7.3,
"unit": "seconds",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Tokens In",
"value": 11801.0,
"unit": "tokens",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Time",
"overfitting": "high",
"value": 7.8,
"unit": "seconds",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Tokens In",
"overfitting": "high",
"value": 12717.0,
"unit": "tokens",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Time",
"value": 8.3,
"unit": "seconds"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Tokens In",
"value": 11556.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Time",
"value": 17.7,
"unit": "seconds",
"overfittingScore": 0.31,
"overfitting": "moderate"
},
{
"notActivated": true,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Tokens In",
"value": 14778.0,
"unit": "tokens",
"overfittingScore": 0.31,
"overfitting": "moderate"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Time",
"overfitting": "moderate",
"value": 10.1,
"unit": "seconds",
"overfittingScore": 0.31
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Tokens In",
"overfitting": "moderate",
"value": 14001.0,
"unit": "tokens",
"overfittingScore": 0.31
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Time",
"value": 15.0,
"unit": "seconds"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Tokens In",
"value": 13723.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Time",
"value": 52.6,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Tokens In",
"value": 221039.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Time",
"value": 19.7,
"unit": "seconds",
"overfittingScore": 0.69,
"overfitting": "high"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Tokens In",
"value": 101749.0,
"unit": "tokens",
"overfittingScore": 0.69,
"overfitting": "high"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Time",
"overfitting": "high",
"value": 6.2,
"unit": "seconds",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Tokens In",
"overfitting": "high",
"value": 12150.0,
"unit": "tokens",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Time",
"value": 7.8,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Tokens In",
"value": 12352.0,
"unit": "tokens"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Time",
"overfitting": "high",
"value": 108.3,
"unit": "seconds",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Tokens In",
"overfitting": "high",
"value": 752743.0,
"unit": "tokens",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Time",
"overfitting": "high",
"value": 102.3,
"unit": "seconds",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Tokens In",
"overfitting": "high",
"value": 545560.0,
"unit": "tokens",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Time",
"value": 134.8,
"unit": "seconds"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Tokens In",
"value": 494924.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Time",
"value": 11.1,
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Tokens In",
"value": 13323.0,
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Time",
"overfitting": "moderate",
"value": 19.7,
"unit": "seconds",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 14072.0,
"unit": "tokens",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Time",
"value": 13.7,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Tokens In",
"value": 13730.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Time",
"value": 7.0,
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Tokens In",
"value": 11835.0,
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Time",
"overfitting": "moderate",
"value": 7.5,
"unit": "seconds",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Tokens In",
"overfitting": "moderate",
"value": 12174.0,
"unit": "tokens",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Time",
"value": 7.2,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Tokens In",
"value": 11686.0,
"unit": "tokens"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Time",
"value": 9.6,
"unit": "seconds",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Tokens In",
"value": 12160.0,
"unit": "tokens",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Time",
"overfitting": "moderate",
"value": 19.1,
"unit": "seconds",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Tokens In",
"overfitting": "moderate",
"value": 12447.0,
"unit": "tokens",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Time",
"value": 6.6,
"unit": "seconds"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Tokens In",
"value": 11737.0,
"unit": "tokens"
}
],
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"tool": "customSmallerIsBetter",
"model": "mai-code-1.1-flash"
}
],
"Quality": [
{
"date": 1788627832294,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +66.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B directly fulfills the three-signal OTLP request with one exporter configuration, a shared service resource, and a package list consistent with the active code. A has a generally recognizable setup but repeats exporter configuration, lacks explicit shared service identity, and would not build with the supplied package list because two used metric instrumentation packages are absent."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "B directly and correctly answers the requested TextMapPropagator-based injection/extraction flow and starts the consumer span with the extracted parent context. A has a partially workable manual concept but contains questionable API guidance and brittle header handling."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: B, reverse: tie). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B performs the essential .NET 8 hosting conversion, including a document-root App.razor, Routes.razor, blazor.web.js, service-based cascading authentication, and correct antiforgery ordering. A's App.razor is not a complete valid .NET 8 root host and also retains the deprecated wrapper and incorrect middleware order."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +33.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "A actually implements the requested controller-oriented Orders API and status/model support, including the essential GET and 201 POST behavior, although it misses several specified quality requirements. B only asks for a project path and does not answer or implement the task."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B directly follows the rubric's modern .NET 8 IExceptionHandler design, including sealed handler and AddExceptionHandler/AddProblemDetails registration, while retaining all requested mappings and safe responses. A appears functional but uses the disfavored custom-middleware approach and its final answer only summarizes rather than presenting implementation code."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produce a functional API with an interface-backed in-memory service, but B aligns closely with every specified modern .NET minimal-API/OpenAPI convention: TypedResults, sealed-record DTOs, cancellation, DateTimeOffset, string enums, built-in OpenAPI, and fluent metadata. A is functional but substantially misses these rubric-specific requirements."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B satisfies the critical size-limit, safe-filename, and actual-content-validation requirements. A is explicit about antiforgery but misses Kestrel-level enforcement and has substantial security weaknesses in filename and file-type validation."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "B is substantially more useful because it provides an end-to-end streaming implementation, multipart parsing, safe filenames, and relevant configuration. It has important correctness gaps for a true 2GB upload (notably MultipartReader.BodyLengthLimit and request overhead), plus a likely invalid Results.StatusCode overload, but A's final response is only a summary of files it claims to have created rather than an answer the user can use."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B better satisfies the central 50 MB configuration requirement and directly shows multipart parameter binding, while safely generating server-side filenames. The missing likely MVC namespace import and unnecessary extra material prevent a larger margin; A's manual binding is viable but omits the Kestrel limit."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"tool": "customBiggerIsBetter",
"benches": [
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.5
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 8.5,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.5
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 4.166666507720947,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.5
},
{
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.5
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 7.142857074737549,
"unit": "Score (0-10)",
"overfittingScore": 0.25
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 7.142857074737549,
"unit": "Score (0-10)",
"overfittingScore": 0.25
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 6.0714287757873535,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 1.4285714626312256,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 5.714285850524902,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 1.7857142686843872,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 1.0,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 4.42307710647583,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 1.923076868057251,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.7307692766189575,
"unit": "Score (0-10)"
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 6.666666507720947,
"unit": "Score (0-10)"
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 7.5,
"unit": "Score (0-10)"
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 7.5,
"unit": "Score (0-10)"
}
],
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"model": "claude-haiku-4.5"
},
{
"date": 1788627832436,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +0.0% (1W/1T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.750), mean preference +0.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 1,
"losses": 1,
"discordant": 2,
"direction": "none",
"pValue": 0.75,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct and complete. B is better aligned with the rubric: it uses the unified .UseOtlpExporter() for all signals (rather than repeating exporter setup), the modern integrated .WithLogging() API, and a single ConfigureResource that ensures consistent service identity across all signals including logs. A works but repeats OTLP exporter config three times and duplicates resource setup for logs. A's extra instrumentation packages are a minor bonus but don't outweigh B's cleaner, more idiomatic and rubric-aligned configuration."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: tie, reverse: A). Defaulting to tie."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "worse",
"rationale": "Both responses are functional and correct in core setup. B's key advantage is using IMeterFactory via DI (the recommended modern pattern), which is a real quality win. However, A wins on including the required NuGet packages (B omits packages entirely), avoiding gratuitous extras (B adds Swagger, logging, extra tags), and using a concrete appropriate service name. On balance A satisfies more rubric criteria, giving it a slight edge overall despite B's better metric instantiation pattern."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Response B correctly implements the canonical .NET 8 migration: removes the CascadingAuthenticationState wrapper in favor of the service, orders UseAntiforgery after auth middleware, preserves interactive server rendering via @rendermode, and provides a clean single set of files. Response A retains the CascadingAuthenticationState wrapper (inconsistent with using the service), places UseAntiforgery in the wrong pipeline position, and offers confusing duplicate/alternative App.razor versions without applying rendermode to components. B is substantially more correct and coherent."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "The task provided the existing controller inline, so the code could be written without filesystem access. A delivered a working, usable OrdersController with correct HTTP semantics (CreatedAtAction), the enum, and DTOs. B incorrectly refused because it couldn't find project files, producing nothing usable. Although B's description promised DateTimeOffset, it delivered no actual code, making A vastly more valuable to the user despite missing some rubric refinements (records, DateTimeOffset, CancellationToken, XML docs)."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both responses correctly implement Problem Details and the exception-to-status mapping without per-endpoint try/catch. However, B matches the modern .NET 8+ IExceptionHandler approach, uses AddExceptionHandler<T>(), a sealed class in a Middleware/ folder, and adds logging—hitting nearly every rubric criterion. A uses the older convention-based inline middleware and misses several structural criteria. B is much better overall."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Response A refused the task entirely, falsely claiming the .NET SDK was unavailable—Response B proved otherwise by running `dotnet --version` (10.0.400) and successfully scaffolding a net10 webapi project. However, B's timeline shows it only ran `dotnet new webapi` and never actually wrote the Product model, in-memory service, interface, endpoints, or OpenAPI metadata; its confident final summary claiming all these features is largely fabricated. So B delivered only a default template scaffold (which does satisfy a couple rubric items like minimal APIs and built-in OpenAPI), while A delivered nothing at all. B is better because it at least produced a working project baseline and verified the environment, but both fall far short of the requested implementation."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "Response B satisfies all four rubric criteria: it configures both Kestrel and FormOptions size limits, correctly disables antiforgery for the API endpoint, generates safe filenames, and validates magic bytes. Response A fails three of four: it omits the Kestrel limit, uses .DisableAntiforgery(false) which leaves antiforgery active (causing 400 rejections on the API upload), and relies solely on spoofable Content-Type/extension checks. Response A also includes an unexplained .RequireRateLimiting() that would break without configured rate limiting. B is substantially more correct and secure."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses are correct, well-structured, and satisfy the core requirements with essentially identical streaming approaches. B is marginally safer on filename handling (fully discarding the user-provided name) and includes RequestAborted cancellation tokens and antiforgery guidance. A retains more of the original filename (sanitized) which is a nice usability touch but slightly weaker on security. The difference is minor.\""
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both produce working, safe code that avoids original filenames. However, Response B satisfies more rubric criteria: it configures both size limits and demonstrates correct [FromForm] binding, plus adds magic-byte content validation. Response A only sets one size limit and uses manual form reading rather than [FromForm]. B is clearly better on two of three criteria. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"tool": "customBiggerIsBetter",
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.285714149475098,
"unit": "Score (0-10)"
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 2.857142925262451,
"unit": "Score (0-10)",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 6.0714287757873535,
"unit": "Score (0-10)",
"overfittingScore": 0.38
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 4.642857074737549,
"unit": "Score (0-10)"
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.38
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 8.5,
"unit": "Score (0-10)"
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 2.307692289352417,
"unit": "Score (0-10)",
"overfittingScore": 0.38
},
{
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 1.5384615659713745,
"unit": "Score (0-10)",
"overfittingScore": 0.38
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.5384615659713745,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 7.5,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)"
}
],
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"model": "gpt-5.3-codex"
},
{
"date": 1788627832580,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +0.0% (1W/1T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.750), mean preference -20.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 1,
"losses": 1,
"discordant": 2,
"direction": "none",
"pValue": 0.75,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "worse",
"rationale": "A supplies a substantially more usable complete Program.cs: all three signals are configured with the conventional supported APIs and required namespaces. B has comparable package advice but its logging chaining and missing metrics namespace undermine the core requested configuration."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses directly and correctly solve the propagation problem without creating files. B is marginally more complete and practical in showing byte[] RabbitMQ header injection, a publish call, and baggage restoration; A remains a sound solution."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B provides a coherent .NET 8 Blazor Web App conversion with App.razor as the HTML host, Routes.razor for authenticated routing, interactive-server render modes, and the new boot script. A has some correct service/endpoint substitutions but retains the deprecated cascading wrapper and, more importantly, omits the replacement hosting shell needed after removing _Host.cshtml."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: B, reverse: tie). Defaulting to tie."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B satisfies the requested modern .NET 8+ handler architecture and all associated organization/registration criteria, while retaining correct exception mappings and safe 500s. A is stronger on explicitly preserving application/problem+json, whereas B has a real media-type flaw from WriteAsJsonAsync, so B's overall advantage is only slight."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both deliver a functioning .NET 10 minimal product API with in-memory storage and built-in OpenAPI. B is materially more polished in API architecture and semantics: dedicated service and DTO layers, typed results, problem details/validation, and stronger endpoint metadata evidence. A is functional but comparatively thin and lacks evidence for several quality-focused rubric requirements."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win -33.3% (1W/0T/2L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +6.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 0,
"losses": 2,
"discordant": 3,
"direction": "worse",
"pValue": 0.5,
"alpha": 0.05,
"netWin": -0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B satisfies the two key security/configuration gaps: it applies both required size-limit layers and validates file signatures. Both otherwise provide usable safe-name upload endpoints and comparable antiforgery setup."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "worse",
"rationale": "Both provide a fundamentally correct streaming multipart solution. A is more robust: it validates the multipart media type, supports cancellation, uses asynchronous/sequential file options, writes to a unique .part file before moving it into place, and calls out proxy limits. Its final-name overwrite policy remains a caveat, but it is still modestly better than B's direct write to a client-named destination."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "worse",
"rationale": "Both provide usable minimal upload endpoints with form binding, image checks, and generated storage names. A is better because it satisfies the explicit requirement to configure both relevant 50 MB limits; B's extra aggregate-file check is useful but does not replace the missing FormOptions configuration."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"tool": "customBiggerIsBetter",
"benches": [
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "Score (0-10)",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 9.0
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 9.0,
"unit": "Score (0-10)",
"overfittingScore": 0.4
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "Score (0-10)",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.4
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.4,
"notActivated": true,
"unit": "Score (0-10)",
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.5
},
{
"overfitting": "moderate",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.4
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.48,
"notActivated": true,
"unit": "Score (0-10)",
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.48
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 6.4285712242126465,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 1.7857142686843872,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 1.7857142686843872,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 2.142857074737549,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 2.115384578704834,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 1.923076868057251,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 2.115384578704834,
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "Score (0-10)",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 9.166666984558105
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.35
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 7.5,
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "Score (0-10)",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 9.166666984558105
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.35
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.35,
"notActivated": true,
"unit": "Score (0-10)",
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 9.166666984558105
},
{
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 5.0,
"unit": "Score (0-10)",
"overfittingScore": 0.35
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
}
],
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"model": "mai-code-1-flash-picker"
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both are largely correct, concise solutions using the modern unified OTLP exporter. B is slightly stronger because logging is explicitly included in the same OpenTelemetry builder, reducing ambiguity about its integrated configuration and shared resource/exporter behavior."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both answers are correct, practical, and directly satisfy all three requirements. B is modestly stronger overall because it includes matching ActivitySource registration and a safer publisher context fallback while retaining equally correct extraction and parent linkage."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "B satisfies the important requested IMeterFactory design and otherwise provides the required tracing, OTLP exporting, custom source, and counter setup. It is unnecessarily elaborate and references surrounding domain/helper types not shown, but A directly violates the Meter-factory criterion and also adds extra telemetry."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +0.0% (0W/1T/0L over 1 preference-eligible stimulus vote(s), sign test p=1.000), mean preference +0.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 0,
"ties": 1,
"losses": 0,
"discordant": 0,
"direction": "none",
"pValue": 1,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +33.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies every specified quality criterion, including cancellation support, sealed record DTOs, documentation, and a valid CreatedAtAction target. A provides a usable basic controller and models but misses several explicit requirements and has an inadequate creation-location target."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "worse",
"rationale": "A is stronger on the central functional requirement because it uses IProblemDetailsService to produce proper Problem Details responses, including correct problem media type, and explicitly handles a safe generic 500. B has better folder placement and stricter message suppression, but its manual JSON serialization weakens its RFC 7807 compliance for the mapped exceptions."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both deliver functioning, verified minimal .NET 10 product APIs with the required routes, in-memory interface service, and OpenAPI. B more clearly satisfies the higher-quality implementation requirements—typed result unions, sealed record DTOs, DateTimeOffset, and comprehensive endpoint/DTO documentation—whereas A's final report leaves those points unsubstantiated."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -6.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B is the more usable complete implementation: it should compile as shown and handles multipart overhead sensibly while enforcing the file-size limit. A has somewhat stronger signature handling, but its shown code is missing the KestrelServerOptions namespace import and thus is not fully copy-paste compilable."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "worse",
"rationale": "A is directly usable and substantially satisfies the requested implementation with a streaming disk write, request-limit configuration, cancellation, and filename handling. B has useful ancillary discussion but omits the actual working implementation it claims to have, so it is not an adequate standalone answer."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both substantially satisfy the requested endpoint. B has a more directly usable Kestrel configuration and stronger image validation, including checking JPEG/PNG signatures and deriving the stored extension from detected content. A is also solid, but the missing Kestrel namespace in the presented code is a minor compile issue."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"tool": "customBiggerIsBetter",
"benches": [
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"value": 9.5,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality"
},
{
"value": 9.5,
"overfitting": "high",
"overfittingScore": 0.58,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality"
},
{
"value": 7.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"value": 5.714285850524902,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality"
},
{
"value": 5.714285850524902,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality"
},
{
"value": 6.4285712242126465,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"value": 4.615384578704834,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality"
},
{
"value": 6.92307710647583,
"overfitting": "high",
"overfittingScore": 0.67,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality"
},
{
"value": 2.115384578704834,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality"
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.49,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"date": 1788715663936,
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"model": "claude-opus-5"
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both are viable complete ASP.NET Core examples, but B more directly satisfies the request for all signals exported through a unified OTLP configuration and keeps resource identity consistently centralized. A is correct but more repetitive and has minor resource-version inconsistency."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "none",
"rationale": "The two responses are substantively equivalent and correctly answer the request with usable publisher and consumer code plus source-registration guidance. Both share the minor imprecision of describing the resulting parent-child connection as a span link, but neither is materially better overall."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "B is better overall because it satisfies the important IMeterFactory dependency-injection requirement. A is otherwise more self-contained and has a more directly wired configuration endpoint; B's appsettings environment-variable example is misleading because that JSON setting does not itself establish an environment variable. Both also omit AddControllers despite mapping controllers, so neither is fully turnkey."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B performs the authentication-specific .NET 8 migration required by the rubric, including DI cascading authentication state and antiforgery middleware, while retaining interactive server rendering. A handles the basic hosting conversion but misses all three key authentication/middleware changes."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies every listed requirement, while A misses CancellationToken support, sealed record DTOs, and XML documentation. Both use the right controller architecture, DateTimeOffset, and 201 creation semantics."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "worse",
"rationale": "A is a complete, directly usable .NET 8 solution covering mapping, RFC 7807 serialization, registration, logging, and safe 500 details. B's final response omits the essential ApiExceptionHandler.cs implementation, so its core behavior cannot be copied or assessed despite correct wiring guidance."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both deliver a built, live-verified .NET 10 products API meeting the core task. B supplies stronger evidence and a more complete implementation for the rubric's strict engineering requirements, notably Location verification, explicit typed results, DTO documentation/design, DateTimeOffset, and likely cancellation support."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +0.0% (1W/1T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.750), mean preference +0.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 1,
"losses": 1,
"discordant": 2,
"direction": "none",
"pValue": 0.75,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "Both are solid complete implementations. A is marginally stronger because its limits account for multipart overhead while retaining a true 10 MiB per-file cap, and its PNG signature check is more complete. Its manual antiforgery approach is more complex but correctly implemented."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both are usable code samples and enforce the core size limits. B better matches the requested mixed-form minimal API binding pattern and has materially safer image validation and save-name extension handling; A's manual binding remains valid but is less aligned with the stated rubric."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"tool": "customBiggerIsBetter",
"benches": [
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality"
},
{
"value": 9.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality"
},
{
"value": 9.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.36,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.36,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"value": 6.0714287757873535,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"value": 2.857142925262451,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality"
},
{
"value": 6.4285712242126465,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"value": 4.42307710647583,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality"
},
{
"value": 5.961538314819336,
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality"
},
{
"value": 2.115384578704834,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"value": 9.166666984558105,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality"
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.3,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality"
},
{
"value": 5.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"date": 1788715664025,
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"model": "claude-sonnet-5"
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B better satisfies the rubric's emphasis on a unified OTLP exporter (UseOtlpExporter) and shared service identity across all signals, using the modern integrated WithLogging API. A repeats exporter configuration per signal and creates a separate resource builder for logs, which the rubric explicitly discourages. Both are correct and complete on packages, but B is meaningfully better aligned with best practices and the rubric. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses are correct and cover all three rubric criteria essentially identically. Response B adds slightly more value: semantic convention tags (messaging.system, messaging.destination.name), error status handling on the consumer, message acking, and explicit notes about matching the source name and injecting after the producer span starts. Response A uses the (potentially deprecated) synchronous BasicPublish while B uses the async API, though both are acceptable. The additions in B make it marginally more complete and production-ready, so B is slightly better.\""
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses are strong, correct, and complete. The decisive differentiator is the IMeterFactory criterion, which is the modern best practice for ASP.NET Core 8 — B implements it correctly via DI while A uses a static Meter, which the rubric explicitly disfavors. A has minor edges on avoiding gratuitous additions and cleaner naming, but these are small. B's alignment with the more heavily-weighted best-practice criterion makes it slightly better overall."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses are largely correct and nearly equivalent on most criteria. The key differentiator is middleware ordering: B correctly places UseAntiforgery after UseAuthentication/UseAuthorization, while A places it before, which the rubric explicitly penalizes. B also retained MapRazorPages and provided the target framework change and environment-aware error UI. This gives B a modest edge overall."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both responses correctly used controllers. Response A stopped at providing code without applying it, since no project existed. Response B took the more thorough approach: it created a complete, buildable project, ran it, and verified endpoints (201 on POST, 200 on GET list and by-id, validation on invalid input). This gives real confidence the solution works, including DateTimeOffset serialization. Response A does have explicit sealed record DTOs visible, which is a plus, but B delivered a working, verified deliverable. Neither clearly satisfies CancellationToken or XML doc comment criteria from visible evidence. On balance, B's fully implemented and verified solution edges out A's code-only answer, though not by a large margin given A's cleaner visible DTOs."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both provide correct modern IExceptionHandler implementations. B satisfies the Middleware/ folder criterion and inspected the project first. A uses the proper IProblemDetailsService for correct RFC 7807 content-type, which is technically superior for the Problem Details criterion. On balance, B wins on two rubric items (Middleware folder much-better) while A wins one slightly, giving B a slight overall edge."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produced working, validated .NET 10 APIs with 201/Location, string enums, service interfaces, and built-in OpenAPI. However the rubric strongly favors minimal APIs with TypedResults and the WithName/WithSummary/WithDescription chaining pattern. Response A deliberately chose controllers (--use-controllers), which fails criteria 1, 3, and 12 by design. Response B used the dotnet-webapi skill and minimal APIs, aligning with these best-practice criteria. Several criteria are ties, but B satisfies the distinguishing rubric items that A structurally cannot, making B substantially better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "Both responses satisfy all four rubric criteria at a high level and are well-structured. Response A is slightly better on two dimensions: it preserves antiforgery protection (which the user explicitly noted is in their pipeline) by supplying a token endpoint and client usage, and its streaming logic is more robust — it writes the already-consumed signature bytes then copies the rest, avoiding B's reliance on input.Position = 0, which can throw on non-seekable multipart streams. B is more concise and its DisableAntiforgery() is a legitimate documented approach with a caveat, but it introduces a potential seek bug. Overall A is slightly better."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Response B directly matches the rubric's intended approach using MultipartReader with incremental section streaming, per-file size enforcement during streaming, ArrayPool buffers, and proper cleanup. Response A's raw-body approach is a valid and clean solution for octet-stream uploads and is arguably simpler and correct, but it doesn't handle multipart/form-data (the standard browser upload format) in its main code and doesn't use MultipartReader. Since the rubric specifically calls for MultipartReader, B is the better fit. Both handle size limits and filename safety comparably well. B wins slightly overall given the additional real-world completeness, though A is a strong response too."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both responses meet all three rubric criteria correctly. B goes further with genuine content validation via magic-byte header sniffing (rather than trusting the client-supplied ContentType, which A does), returns richer metadata, and adds a helpful comment about antiforgery. A's ContentType.StartsWith('image/') check is trivially spoofable. B is slightly better due to more robust and security-conscious image validation, though A is cleaner and includes UseAntiforgery which B disables (with an explanatory note). Both are high quality; B edges it."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"tool": "customBiggerIsBetter",
"benches": [
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"value": 9.642857551574707,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"value": 2.5,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality"
},
{
"value": 1.4285714626312256,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality"
},
{
"value": 6.4285712242126465,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality"
},
{
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"value": 2.115384578704834,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality"
},
{
"value": 2.115384578704834,
"overfitting": "moderate",
"overfittingScore": 0.35,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality"
},
{
"value": 1.7307692766189575,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality"
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"date": 1788715664103,
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"model": "gpt-5.6-sol"
},
{
"benches": [
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"overfitting": "high",
"overfittingScore": 0.56
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"value": 7.142857074737549,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"value": 7.142857074737549,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"value": 4.642857074737549,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"value": 5.714285850524902,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 9.642857551574707,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 1.7857142686843872,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"value": 6.153846263885498,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 5.961538314819336,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "high",
"overfittingScore": 0.63
},
{
"value": 1.923076868057251,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 8.333333015441895,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"overfitting": "moderate",
"overfittingScore": 0.39
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"commit": {
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"author": {
"username": "AbhitejJohn",
"name": "Amaury Levé"
},
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
},
"date": 1788790039242,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both are substantially correct and usable, but B directly satisfies the requested unified OTLP-exporter approach while retaining common resource configuration for all signals. A is slightly more explicit and includes runtime metrics, but its per-signal exporter setup misses the stated unification criterion."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both answers directly and accurately solve the propagation problem with practical publisher/consumer code. B is marginally more robust around absent headers/current activity and provides a coherent, matching ActivitySource configuration."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B follows the .NET 8 Blazor Web App hosting and authentication migration pattern, including service-based cascading authentication, a Routes component, and explicit interactive server rendering. A makes several hosting-shell changes correctly but misses essential authentication and interactivity migration details."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both meet the fundamental controller and 201-create requirements, but B satisfies all of the requested API-design details that A misses: cancellation propagation, sealed record DTOs, DateTimeOffset, and XML documentation. B also adds validation and useful test/serialization guidance."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both are materially incomplete as final answers because neither actually shows the promised exception-handler class source code. B is slightly stronger in project organization and in covering bare status-code responses, while retaining a sound built-in fallback for generic 500 ProblemDetails. A is clearer about example payloads and its explicit generic-error behavior."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both runs produce a built .NET 10 API with the required three routes, interface-backed in-memory storage, string enums, and OpenAPI. B substantially better matches the stated modern minimal-API, TypedResults, sealed-record, DateTimeOffset, and endpoint-metadata expectations, while A is a conventional controller implementation that misses several rubric-specific requirements."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B satisfies the important actual-content-validation requirement that A entirely misses, while also meeting the size, antiforgery opt-out, and safe-name requirements. A's antiforgery explanation is better and it includes app.Run whereas B omits it despite calling the snippet complete, so the overall advantage is limited rather than large."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "B better meets the streaming and safe-filename requirements and supplies useful validation. Both have minor presentation/compilability caveats (notably B omits the namespace for DisableRequestSizeLimit, and exact 2-GB request limits omit multipart overhead), but B is the stronger final answer."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"model": "claude-sonnet-4.6",
"tool": "customBiggerIsBetter"
},
{
"benches": [
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"value": 9.642857551574707,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"value": 1.4285714626312256,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 1.4285714626312256,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 8.214285850524902,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"value": 2.115384578704834,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 2.884615421295166,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "moderate",
"overfittingScore": 0.35
},
{
"value": 1.7307692766189575,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality"
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality"
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"commit": {
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"author": {
"username": "AbhitejJohn",
"name": "Amaury Levé"
},
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
},
"date": 1788790039358,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct and complete, covering all three signals with OTLP export. B is better aligned with the rubric's emphasis on a unified OTLP exporter (`.UseOtlpExporter()`) and shared service identity via a single pipeline, reflecting the current modern OpenTelemetry .NET idiom. A repeats the OTLP exporter per signal and duplicates resource/service configuration, which works but is more verbose and error-prone. A's only edge is a slightly richer NuGet package list. On balance, B is slightly better because it more directly satisfies the two exporter/identity criteria that A misses."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: B, reverse: A). Defaulting to tie."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses are strong and functionally correct. The most significant rubric differentiator is IMeterFactory usage, where B follows the recommended DI-based pattern and A uses the discouraged static Meter constructor. B also explicitly notes that source/meter names must match. A is slightly leaner and uses a marginally better service name, but the IMeterFactory best-practice advantage tips the overall verdict to B by a slight margin."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses correctly convert to the .NET 8 Blazor Web App model with RazorComponents, InteractiveServer, UseAntiforgery, and blazor.web.js. The key differentiator is CascadingAuthenticationState handling: since both add AddCascadingAuthenticationState() to Program.cs, the component wrapper should be removed. Response B correctly removes it, while Response A leaves the wrapper in place, creating a redundant/conflicting double registration. Response B also notes the _Imports.razor and target framework updates. Response B is slightly better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "Both agents faced an empty workspace with no actual project. Response A pragmatically provided a complete, high-quality code answer that satisfies nearly all rubric criteria (controller pattern, CancellationToken, CreatedAtAction/201, sealed record DTOs, DateTimeOffset), missing only XML doc comments. Response B repeatedly failed at apply_patch, gave up, and delivered zero code—satisfying none of the substantive criteria. Response A is far more useful and correct despite the ambiguous environment."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both responses are technically correct and near-identical in the core implementation (IExceptionHandler, ProblemDetails, status mapping, sealed class, service registration). B additionally organizes the handler into a Middleware/ folder with proper namespace and separate file, satisfying rubric criterion 7 which A fails. B also shows an explicit generic Detail for 500 and a sample JSON response. A's HasStatusStarted guard is a small plus but not rubric-covered. Overall B edges ahead by satisfying one more rubric criterion."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produced building, tested .NET 10 product APIs. However, the rubric strongly favors minimal APIs, TypedResults, 201 Created with Location, built-in OpenAPI with chained metadata extension methods. Response A chose the controllers approach (--use-controllers), which directly violates the minimal-API, WithName/WithSummary chaining, and TypedResults criteria, and shows no evidence of proper 201 Created. Response B used minimal APIs, verified 201 Created with Location header, confirmed the built-in OpenAPI endpoint, and chained metadata extensions—aligning with the majority of the rubric. B is clearly better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "Both responses are strong and cover size limits, antiforgery, and safe filenames well. The decisive differentiator is magic-byte content verification: B fully satisfies this security-critical criterion while A only checks the spoofable Content-Type header. A has a slight edge on the explicit RequireAntiforgery attribute, but this is outweighed by B meeting the content-verification requirement, making B better overall.\""
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses are technically correct, avoid OOM by streaming, configure size limits, and avoid using client filenames. Response B aligns more precisely with the rubric's intended MultipartReader approach and provides a complete working implementation of it, including boundary parsing and section handling. Response A's raw PUT approach is also excellent and arguably cleaner for the video-upload use case, but it only mentions MultipartReader without demonstrating it, and the rubric explicitly targets MultipartReader. The gap is small since both fully answer the user's actual need."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both are solid, correct answers. B is slightly better overall: it uses the safer long literal, includes .DisableAntiforgery() which is genuinely required in .NET 8 for minimal API form endpoints (A's code would throw an antiforgery error), validates file content via magic-byte signatures (more robust than A's ContentType prefix check), and checks for empty files. A's advantage is that it explicitly demonstrates saving with random filenames (satisfying criterion 3 directly), whereas B only shows validation without persistence. A's .RequireRequestSizeLimit is potentially misleading. On balance B is a more robust and secure implementation, though A better illustrates the safe-filename practice."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/ac8f41264bdd557e58924a3110eea8e0917dcf4d/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
}
]
}
],
"model": "gpt-5.6-luna",
"tool": "customBiggerIsBetter"
},
{
"tool": "customBiggerIsBetter",
"benches": [
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 3.3333332538604736
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.25,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 7.142857074737549
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.25,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 7.142857074737549
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 4.642857074737549
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 2.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 8.571428298950195
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 1.7857142686843872
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 0.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 2.884615421295166
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.64,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 1.7307692766189575
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.7307692766189575
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 9.166666984558105
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 5.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 5.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.38,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.0
}
],
"date": 1788885915461,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B more directly satisfies the requested all-signal OTLP configuration with a unified exporter, explicit shared service identity, and a cleaner package list. A is close but misses explicit resource configuration, repeats exporters, and has a package/configuration mismatch for runtime/process metrics."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "B provides the standard OpenTelemetry .NET propagation pattern and correctly parents the consumer activity, producing a connected trace. A's manual approach has serious API and context-parsing errors, plus misleading configuration, so it would not reliably compile or propagate traces."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "B has the more idiomatic metric construction via DI and clearer source-name matching guidance, while still fulfilling OTLP tracing and metrics. A's explicit package list is a meaningful advantage, but its static Meter pattern is inferior; both include unnecessary extras."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B is a substantially correct .NET 8 Blazor Web App migration and meets all listed requirements. A has major functional/compilation issues: no interactive render-mode assignment, missing antiforgery, invalid-looking literal typeof attributes, and a placeholder AddScoped registration that is not a usable complete service registration."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +100.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies the controller task while meeting the key API-quality requirements: cancellable endpoints, sealed record DTOs, offset-aware time, documentation, validation, and a usable service implementation. A gets the controller pattern and CreatedAtAction right, but its DTO design misses several explicit requirements and its response DTO shown in the timeline also appears to lack the necessary import for OrderStatus."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B directly satisfies the requested modern .NET 8 exception-handler architecture and the explicit registration, sealed-class, and folder-organization criteria, while retaining the required mappings and safe RFC 7807 responses. A is a plausible older middleware solution but misses several stated rubric requirements."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "B is a tested, purpose-built .NET 10 minimal API and directly satisfies nearly all of the rubric's modern API design requirements, including sealed record DTOs, DateTimeOffset, string enums, typed results, and endpoint metadata. A appears functional but is controller-based and misses or fails to substantiate several required implementation choices."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B supplies a largely usable implementation with both requested limits, safe storage, and signature checks. It still has an antiforgery integration gap, but A's final response wholly omits the promised code, making it inadequate for a request for a complete implementation."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "B is a directly actionable streaming solution with endpoint code, multipart parsing, safe storage naming, and size-limit handling. A's final response is only a summary of alleged generated files, so it does not give the user code they can use or verify."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B addresses all three requested implementation concerns and has stronger image validation. However, its snippet contains a significant compile-time typo: WebApplicationBuilder.CreateBuilder should be WebApplication.CreateBuilder. A is closer to directly compilable, but it fails the effective 50 MB requirement under default Kestrel by omitting the Kestrel limit."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
}
],
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
},
"model": "claude-haiku-4.5"
},
{
"tool": "customBiggerIsBetter",
"benches": [
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 7.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 3.2142856121063232
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.4285712242126465
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 1.5384615659713745
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 5.769230842590332
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.5384615659713745
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.0
}
],
"date": 1788885915581,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct and complete answers. B is better on the two most important rubric points: it uses the unified UseOtlpExporter() (single exporter config for all signals) and a single resource definition shared across all three signals including logs. A repeats the OTLP exporter three times and defines the resource twice, and lists a nonexistent 'OpenTelemetry.Logs' package. A does provide more instrumentation breadth, but the rubric explicitly rewards the unified approach that B took. Overall B is slightly better."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "worse",
"rationale": "Both responses correctly cover all three rubric criteria with nearly identical, high-quality solutions. Response A additionally includes the W3C default ID format setup and injects into props.Headers with a cleaner, correctly-typed setter, whereas Response B's inject setter operates on IBasicProperties directly (accessing p.Headers) which is marginally less robust. The differences are minor, so A is only slightly better."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses are correct, complete, and compile-worthy. B better satisfies the modern best-practice IMeterFactory-via-DI criterion (a notable technical quality point), while A wins on minimalism (avoiding gratuitous additions like Swagger, logging, and commented histograms) and a concrete service name. Given the rubric weights IMeterFactory usage as a key modern pattern and B activated the relevant skill to align with best practices, B edges ahead slightly overall despite A's cleaner scope adherence."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Response B produces a correct, complete .NET 8 Blazor Web App migration: it adds AddCascadingAuthenticationState() and removes the component wrapper, provides a proper App.razor host document (replacing _Host.cshtml), a new Routes.razor with AuthorizeRouteView, correct middleware ordering (UseAntiforgery after auth), blazor.web.js, and render modes. Response A misses several key items: it keeps the deprecated CascadingAuthenticationState wrapper without adding the service, misorders UseAntiforgery, and provides no host document replacement for _Host.cshtml, leaving the app non-functional. B is substantially more correct."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win -33.3% (1W/0T/2L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 0,
"losses": 2,
"discordant": 3,
"direction": "worse",
"pValue": 0.5,
"alpha": 0.05,
"netWin": -0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "The task provided the controller code inline and asked to add a new OrdersController. A delivered a correct, complete controller matching the existing style with CreatedAtAction/201 and DateTimeOffset. B refused, incorrectly treating the task as requiring workspace files that don't exist, producing no usable output. Although neither hits every rubric detail (CancellationToken, records, XML docs), A satisfies the core requirements while B delivers nothing."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both correctly implement RFC 7807 mapping, but B satisfies nearly every rubric criterion (IExceptionHandler, AddExceptionHandler<T>, sealed class, Middleware/ folder, logging), while A uses the older convention-based middleware approach and misses several criteria. B is the modern, better-structured answer."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "worse",
"rationale": "Both responses failed to deliver a working project or any code, so all rubric criteria are ties. However, Response A successfully scaffolded a real .NET 10 Web API project via `dotnet new webapi` (the SDK was available at 10.0.400 and the project was created and restored), leaving actual project files on disk, before hitting file-editing tool failures. Response B incorrectly claimed the .NET SDK wasn't available and produced nothing at all, not even a scaffolded project. Response A made real progress toward the goal and correctly assessed the environment, making it slightly better overall despite neither producing final code."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B satisfies all four rubric criteria: both size limits, antiforgery handling, safe filename, and magic-byte content validation. A misses two important criteria (Kestrel body limit and magic-byte verification). Both are otherwise correct and clean, but B is substantially more secure and complete."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both answers are correct, complete, and satisfy all rubric criteria with proper MultipartReader streaming, 2GB limits, and filename sanitization. B is marginally stronger: it discards the user filename entirely (Guid+extension) which is safer, includes video content-type validation appropriate to the use case, and adds DisableAntiforgery for API scenarios. A has a minor flaw with a leftover RequireRateLimiting(null) line that would fail without a rate limiter configured. These are small differences; both are high quality."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both produce working, reasonable code and use safe filenames. However B satisfies two rubric criteria that A misses: it configures the Kestrel request body limit (essential for actually reaching 50MB) and uses [FromForm] binding correctly. A's manual form-reading approach works but omits the Kestrel limit, meaning uploads near 50MB would fail. B also maps extensions safely rather than trusting the original extension. B is clearly better.\""
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
}
],
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
},
"model": "gpt-5.3-codex"
},
{
"tool": "customBiggerIsBetter",
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"overfitting": "high",
"notActivated": true,
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.55
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.0
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"overfitting": "high",
"notActivated": true,
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.55
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 9.166666984558105
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"overfitting": "high",
"notActivated": true,
"value": 9.0,
"unit": "Score (0-10)",
"overfittingScore": 0.55
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.55,
"overfitting": "high",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.26,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.26,
"overfitting": "moderate",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 4.642857074737549
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 2.142857074737549
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 2.142857074737549
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 2.142857074737549
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 2.884615421295166
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.71,
"overfitting": "high",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 2.115384578704834
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.7307692766189575
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"overfitting": "moderate",
"notActivated": true,
"value": 5.0,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 8.333333015441895
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"overfitting": "moderate",
"notActivated": true,
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 9.166666984558105
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"overfitting": "moderate",
"notActivated": true,
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"overfitting": "moderate",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 4.166666507720947
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.0
}
],
"date": 1788885915746,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win -33.3% (0W/2T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 0,
"ties": 2,
"losses": 1,
"discordant": 1,
"direction": "worse",
"pValue": 0.5,
"alpha": 0.05,
"netWin": -0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "worse",
"rationale": "A is more complete and directly usable: it supplies the requested package prerequisites, separates the service code cleanly, and avoids B's unnecessary log. Both miss the IMeterFactory requirement, so A's advantage is meaningful but not overwhelming."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B implements the expected .NET 8 Blazor Web App structure: App as the document shell, Routes as routing, service-based cascading authentication state, antiforgery middleware, and interactive server rendering. A mixes MapRazorComponents with the legacy _Host/fallback model, keeps the wrapper that should be removed, and lacks antiforgery, so its migration is materially incomplete and likely not correctly hosted."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both deliver functioning controller-based list/create APIs and validate them. B is materially more complete for HTTP creation semantics, adding and using a resource GET action so POST can return a proper CreatedAtAction location, and it more clearly supports the full placedAt contract. Several code-style rubric items are not directly visible in the summaries, so the overall margin is slight rather than decisive."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B directly follows the requested modern .NET 8+ architecture: a sealed IExceptionHandler in Middleware, registered with AddExceptionHandler<T>(), with safe generic messages and correct mappings. A is functionally close but misses several explicit architectural requirements and exposes mapped exception messages."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produced and live-tested working .NET 10 product APIs with the required routes, 201 creation behavior, service abstraction, and OpenAPI. B is better evidenced on several quality-specific requirements—especially DateTimeOffset, XML-documented DTOs, and string enum serialization—and it detected, corrected, and revalidated an in-memory-service lifetime defect. Some implementation-level rubric details remain unverified from either final output, so the overall gap is moderate rather than overwhelming."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "A meets the configuration and safe-storage requirements and, critically, performs antiforgery validation. Both omit content-signature validation, but B additionally fails to ensure antiforgery validation and keeps part of the original filename. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both provide a sound streaming MultipartReader solution. B is modestly better because its actual code uses a unique server-generated filename, whereas A only advises that as a production follow-up."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both provide functional minimal multipart upload code and correctly set the two relevant 50MB limits. B is materially safer in generated storage names and also validates that uploaded files are nonempty, but neither uses [FromForm] binding as requested by that rubric."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
]
}
],
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
},
"model": "mai-code-1-flash-picker"
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "comparison_invocation_failed",
"phase": "comparison_judge"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "dotnet-aspnetcore/configuring-opentelemetry-dotnet: vally compare failed (Command failed: vally compare --baseline /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__configuring-opentelemetry-dotnet__baseline.jsonl --treatment /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__configuring-opentelemetry-dotnet__skilled.jsonl --judge-model gpt-5.6-terra --output /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__configuring-opentelemetry-dotnet__compare.jsonl)",
"gateEvidence": {
"stimulusVoteCount": 0,
"wins": 0,
"ties": 0,
"losses": 0,
"discordant": 0,
"direction": "none",
"pValue": 1,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": null,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": false,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "No activation contract could be evaluated",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": null,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [],
"judgeRationales": [],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/a8fece0fce5f8b0737754a332a1a7c6487e8f927"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "comparison_invocation_failed",
"phase": "comparison_judge"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "dotnet-aspnetcore/convert-blazor-server-to-webapp: vally compare failed (Command failed: vally compare --baseline /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__convert-blazor-server-to-webapp__baseline.jsonl --treatment /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__convert-blazor-server-to-webapp__skilled.jsonl --judge-model gpt-5.6-terra --output /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__convert-blazor-server-to-webapp__compare.jsonl)",
"gateEvidence": {
"stimulusVoteCount": 0,
"wins": 0,
"ties": 0,
"losses": 0,
"discordant": 0,
"direction": "none",
"pValue": 1,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": null,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": false,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "No activation contract could be evaluated",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": null,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [],
"judgeRationales": [],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/a8fece0fce5f8b0737754a332a1a7c6487e8f927"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "comparison_invocation_failed",
"phase": "comparison_judge"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "dotnet-aspnetcore/dotnet-webapi: vally compare failed (Command failed: vally compare --baseline /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__dotnet-webapi__baseline.jsonl --treatment /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__dotnet-webapi__skilled.jsonl --judge-model gpt-5.6-terra --output /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__dotnet-webapi__compare.jsonl)",
"gateEvidence": {
"stimulusVoteCount": 0,
"wins": 0,
"ties": 0,
"losses": 0,
"discordant": 0,
"direction": "none",
"pValue": 1,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": null,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": false,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "No activation contract could be evaluated",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": null,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [],
"judgeRationales": [],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/a8fece0fce5f8b0737754a332a1a7c6487e8f927"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "comparison_invocation_failed",
"phase": "comparison_judge"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "dotnet-aspnetcore/minimal-api-file-upload: vally compare failed (Command failed: vally compare --baseline /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__minimal-api-file-upload__baseline.jsonl --treatment /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__minimal-api-file-upload__skilled.jsonl --judge-model gpt-5.6-terra --output /tmp/vally-adapt-wW5eEw/dotnet-aspnetcore__minimal-api-file-upload__compare.jsonl)",
"gateEvidence": {
"stimulusVoteCount": 0,
"wins": 0,
"ties": 0,
"losses": 0,
"discordant": 0,
"direction": "none",
"pValue": 1,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": null,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": false,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "No activation contract could be evaluated",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": null,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [],
"judgeRationales": [],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/a8fece0fce5f8b0737754a332a1a7c6487e8f927/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/a8fece0fce5f8b0737754a332a1a7c6487e8f927"
}
]
}
],
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1149 from dotnet/abhitejjohn-vally-014-ci-proof",
"url": "https://github.com/dotnet/skills/commit/a8fece0fce5f8b0737754a332a1a7c6487e8f927",
"timestamp": "2026-09-09T17:53:08+00:00",
"id": "a8fece0fce5f8b0737754a332a1a7c6487e8f927"
},
"model": "claude-opus-4.8",
"tool": "customBiggerIsBetter",
"date": 1789036360813,
"benches": []
},
{
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "8a5a42d3e392b402768fc29416831643b79e402b",
"message": "Merge pull request #1153 from dotnet/abhitejjohn-vally-lock-concurrency-proof",
"timestamp": "2026-09-10T21:01:20+00:00",
"url": "https://github.com/dotnet/skills/commit/8a5a42d3e392b402768fc29416831643b79e402b"
},
"benches": [
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.642857551574707
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 1.4285714626312256
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 1.4285714626312256
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.4285712242126465
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 2.884615421295166
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"overfitting": "moderate",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 2.115384578704834
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.7307692766189575
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 5.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.0
}
],
"date": 1789129571434,
"tool": "customBiggerIsBetter",
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct and complete. B is better primarily because it uses the unified UseOtlpExporter() approach, which is exactly what the rubric emphasizes (single exporter config rather than per-signal repetition), and integrates logging into the same AddOpenTelemetry builder ensuring shared resource identity. A repeats the OTLP exporter three times and configures logging separately with a duplicated resource builder. A's answer is still fully functional and adds Runtime instrumentation, but B's approach is more idiomatic and directly satisfies the unified-exporter criterion."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "worse",
"rationale": "Both responses are correct, complete, and near-identical in quality, covering all three rubric criteria well. Response A additionally shows how to set the default propagator explicitly (Sdk.SetDefaultTextMapPropagator with TraceContext + Baggage), which directly addresses the requirement that both services use the same W3C format — a subtle but important completeness point, since Propagators.DefaultTextMapPropagator must actually be configured. Response A also adds error status handling on the consumer activity. Response B relies on the default being correct without showing configuration. These make A marginally more complete, though the difference is small."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both are solid, complete, and correct. B wins the heavily-weighted rubric points: it uses the recommended IMeterFactory DI pattern (a specific rubric requirement A misses) and explicitly notes the name-matching requirement. A is cleaner with less scope creep (no gratuitous logging) and a more concrete service name, but B's alignment with the .NET 8 best-practice IMeterFactory pattern gives it the overall edge."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8a5a42d3e392b402768fc29416831643b79e402b"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses are largely correct migrations that satisfy most criteria equally. The key differentiator is criterion 1: Response A retains the CascadingAuthenticationState component wrapper while ALSO calling AddCascadingAuthenticationState(), which is redundant/incorrect for the new model. Response B correctly removes the wrapper. B also preserves the blazor-error-ui and mentions _Imports and target framework. This makes B slightly better overall, though A includes MapRazorPages and FocusOnNavigate details which are fine too."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8a5a42d3e392b402768fc29416831643b79e402b"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +33.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "Both faced an empty workspace with no project files. B gave up entirely and asked for files, producing zero code. A also recognized the empty workspace but productively provided a complete, well-structured controller implementation with DTOs, enum, service interface, and correct CreatedAtAction usage. A satisfies most rubric criteria while B satisfies none. A is far more useful and directly addresses the user's request. Both miss CancellationToken and XML doc comments, but A's substantial correct output makes it much better overall."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both responses correctly satisfy the core functional requirements (RFC 7807, status mapping, no sensitive details). However, B closely matches the preferred modern architecture: a sealed IExceptionHandler class in a Middleware/ folder, registered with AddExceptionHandler<T>() and AddProblemDetails(). A uses the older convention-based delegate approach and misses several rubric-specific structural criteria. B is much better overall."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Response B aligns much better with the modern minimal-API rubric. It used the default template (minimal APIs) with a well-structured project (Contracts, Endpoints, Models, Services), confirmed 201 Created with Location header, DateTimeOffset timestamps, and string-serialized enums via its smoke tests and stated features. Response A chose a controller-based approach (--use-controllers), which contradicts many rubric criteria (minimal APIs, WithName/WithSummary/WithDescription chaining, TypedResults), and did not confirm 201/Location or DateTimeOffset. Both satisfied the service-layer, in-memory storage, and built-in OpenAPI requirements. B is the clearly stronger match for the intended design."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8a5a42d3e392b402768fc29416831643b79e402b"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "Both responses correctly configure size limits, handle antiforgery, and use safe generated filenames. The key differentiator is content verification: B validates magic bytes/file signatures and cross-checks against the declared Content-Type, satisfying the fourth criterion, while A relies only on extension and spoofable Content-Type. B also correctly resets stream position before saving. A's spurious RequireAuthorization() is a minor negative. B is better overall, driven by the content-verification criterion."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses are technically sound and secure, correctly setting size limits and avoiding client filenames. However, the rubric specifically emphasizes MultipartReader to stream multipart sections to disk. Response B fully implements this with correct boundary parsing, section reading, in-loop size enforcement, cleanup on error, and antiforgery handling—matching the typical real-world multipart upload scenario. Response A instead pivots to raw request-body streaming, which changes the client contract and only briefly mentions MultipartReader without code. A's approach is valid and even elegant, but B better satisfies the stated rubric and the common expectation of accepting multipart form uploads. B is slightly better overall."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B properly configures both the Kestrel body size limit and the FormOptions multipart limit — a key part of the 50MB requirement that A misses. B also adds content-type and magic-byte validation. A's advantage is actually saving files with GUID names, whereas B only returns metadata. Since B correctly handles the more critical size-limit requirement and both handle [FromForm], B edges out overall, though A's file-saving demonstration is a genuine plus."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8a5a42d3e392b402768fc29416831643b79e402b/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8a5a42d3e392b402768fc29416831643b79e402b"
}
]
}
],
"model": "gpt-5.6-luna"
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B provides the requested complete configuration with a shared resource identity and a genuinely unified OTLP exporter for all three signals. A is close, but is less clean, duplicates exporter configuration, and lacks explicit service resource configuration."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "B gives a complete, technically sound publisher/consumer propagation path that creates a consumer span with the extracted parent. A identifies the general pattern but its consumer code likely does not compile and, critically, fails to make the extracted context the parent."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "B fulfills the essential custom-instrumentation wiring: its ActivitySource is registered and its Meter is created through DI. A's missing AddSource is a substantive tracing failure. B is overly expansive and omits package guidance, but its core setup is materially more correct."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B satisfies every listed migration requirement, including service-based auth cascading, correct middleware order, and explicit interactive server rendering. A fails three core requirements: it keeps the auth wrapper, misorders antiforgery, and does not activate interactivity for the component tree. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +100.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both provide a controller-based GET/POST solution with CreatedAtAction, but B meets the modern DTO, timestamp, cancellation, and documentation requirements across the stated rubric. A misses four of the six criteria and also has a questionable CreatedAtAction target because it supplies an id route value to its collection GET action."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B follows the requested modern .NET 8 exception-handler pattern and the rubric-specific registration, structure, and placement requirements. A describes a viable older middleware approach and correct mappings, but omits the actual implementation from its final answer and misses the central modern-handler requirements."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both deliver a functional .NET 10 product API with service abstraction and creation semantics, but B closely follows the requested modern minimal-API quality requirements: typed results, sealed record DTOs, cancellation propagation, DateTimeOffset, string enums, built-in OpenAPI, and endpoint metadata. A is a conventional controller implementation and visibly misses several explicit rubric requirements."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B delivers a largely complete, directly usable minimal-API implementation covering all requested elements and the rubric's security requirements. A's final output is only a high-level description of purported files and features, not the requested complete code, so it cannot be implemented from the response."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "B supplies a substantially correct, safe MultipartReader streaming implementation with proper boundary parsing and generated filenames. A's central multipart code has a fatal boundary error and unsafe filename handling, while its direct-body fallback produces an invalid file for multipart submissions."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B is substantially more aligned with the requested upload limits, form binding, and safe storage behavior, with stronger content validation as well. However, its shown code has a notable compile typo (WebApplicationBuilder.CreateBuilder rather than WebApplication.CreateBuilder) and likely lacks the FromForm namespace import, reducing the gap because A's basic manual form-reading handler is closer to immediately usable."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
}
],
"commit": {
"timestamp": "2026-09-12T00:01:18+00:00",
"id": "4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"message": "Merge pull request #1154 from dotnet/abhitejjohn-agentic-workflow-repair",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"date": 1789218680753,
"model": "claude-haiku-4.5",
"benches": [
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality"
},
{
"value": 9.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality"
},
{
"value": 4.166666507720947,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 9.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality"
},
{
"overfittingScore": 0.59,
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality"
},
{
"value": 8.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"overfittingScore": 0.3,
"overfitting": "moderate",
"value": 6.785714149475098,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"overfittingScore": 0.3,
"overfitting": "moderate",
"value": 7.142857074737549,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"value": 6.4285712242126465,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 5.714285850524902,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 5.714285850524902,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality"
},
{
"value": 4.642857074737549,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 6.0,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality"
},
{
"value": 0.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 4.615384578704834,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality"
},
{
"overfittingScore": 0.68,
"overfitting": "high",
"value": 1.7307692766189575,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality"
},
{
"value": 1.7307692766189575,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality"
},
{
"value": 0.8333333134651184,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality"
},
{
"value": 7.5,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality"
},
{
"value": 4.166666507720947,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"tool": "customBiggerIsBetter"
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct, functional, and complete. The rubric specifically rewards a unified OTLP exporter configuration (rather than per-signal repetition) and shared service identity. B nails both by using .UseOtlpExporter() and .WithLogging() within a single AddOpenTelemetry() builder, which is the modern idiomatic pattern that inherits the shared resource. A repeats AddOtlpExporter three times and re-creates the resource for logging — valid but exactly the pattern the rubric discourages. A does add useful extras (Runtime/Process/SqlClient instrumentation, console logging, HTTP/gRPC guidance), making it richer in some ways, but it misses the core unified-configuration intent. Overall B aligns better with the rubric, though the gap is moderate since A is also fully functional."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses correctly solve the core problem and use the extracted context as parent. However, the rubric specifically asks for using a TextMapPropagator, which Response B does idiomatically with Propagators.DefaultTextMapPropagator on both inject and extract, and also correctly propagates/restores baggage. Response A uses manual header manipulation and an incorrect baggage encoding scheme. B is more aligned with the rubric and more robust, though both are fundamentally correct."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses produce correct, functional OpenTelemetry setups and neither fully satisfies the NuGet package or IMeterFactory criteria. B edges ahead by using DI-injected Meter/ActivitySource (closer to the intended DI approach than A's static constructors) and by staying leaner without gratuitous extras like runtime instrumentation, extra logging, and Swagger. A has a slight edge on the shared-constant AddSource matching. Overall B is slightly better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Response B correctly modernizes the auth approach by removing the CascadingAuthenticationState component wrapper and adding AddCascadingAuthenticationState(), and correctly orders UseAntiforgery after auth middleware. Response A retains the legacy component wrapper, fails to add the service, and misorders UseAntiforgery. B is materially more correct on three key criteria while tying on the other two."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both produce correct, working controllers with proper HTTP semantics and DateTimeOffset. B additionally satisfies CancellationToken usage and sealed record DTOs, and provides the service contract and DI registration, making it more complete. Neither includes XML doc comments. B wins on two extra criteria without regressing on others.\""
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B satisfies far more rubric criteria: uses the modern IExceptionHandler approach, registers with AddExceptionHandler<T>() and AddProblemDetails(), uses a sealed class, logs internally without leaking details. A uses the older convention-based middleware and leaks ex.Message for non-500 errors. Both meet ProblemDetails and status mapping, and neither uses a Middleware/ folder. B is clearly better.\""
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "worse",
"rationale": "Both agents were blocked by the same false 'path does not exist' tool error. However, Response A recovered gracefully by delivering the complete, correct code inline in its output — covering minimal APIs, service interface, 201 Created, DateTimeOffset, AddOpenApi/MapOpenApi, and full OpenAPI metadata chaining — providing a usable deliverable. Response B simply gave up with a plan and no actual code. While A misses a few rubric details (sealed records vs classes, XML docs, JsonStringEnumConverter, Results<T1,T2> unions, CancellationToken), it satisfies the majority of criteria, whereas B satisfies essentially none in practice. A is substantially more useful and complete.\""
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +66.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-no-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B satisfies three of four rubric criteria strongly (dual size limits, safe generated name, magic-byte verification), which are the core security/correctness concerns. A only wins slightly on explicit antiforgery via RequireAntiforgery, but misses Kestrel limit and content verification entirely. B is substantially better overall, though A's explicit RequireAntiforgery is a nice touch B could have included.\""
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B satisfies all three rubric criteria correctly, including the critical Kestrel body size limit that A omits (A would fail on actual 50MB uploads), and demonstrates proper [FromForm] binding with mixed file/text fields. B also adds magic-byte validation. A is a clean solution but misses the Kestrel limit and doesn't demonstrate [FromForm] binding."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7"
}
]
}
],
"commit": {
"timestamp": "2026-09-12T00:01:18+00:00",
"id": "4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"message": "Merge pull request #1154 from dotnet/abhitejjohn-agentic-workflow-repair",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"date": 1789218680862,
"model": "gpt-5.3-codex",
"benches": [
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality"
},
{
"value": 9.5,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"notActivated": true,
"value": 10.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality"
},
{
"value": 9.166666984558105,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality"
},
{
"value": 8.333333015441895,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"notActivated": true,
"value": 9.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality"
},
{
"value": 9.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality"
},
{
"value": 9.0,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"value": 7.5,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 8.214285850524902,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 6.4285712242126465,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality"
},
{
"value": 6.4285712242126465,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 8.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality"
},
{
"value": 8.5,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 4.615384578704834,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality"
},
{
"overfittingScore": 0.33,
"overfitting": "moderate",
"value": 4.807692527770996,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality"
},
{
"value": 7.115384578704834,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality"
},
{
"value": 8.333333015441895,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"value": 10.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality"
},
{
"value": 8.333333015441895,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality"
},
{
"value": 5.0,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"tool": "customBiggerIsBetter"
},
{
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.57
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.642857551574707,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "high",
"value": 5.714285850524902,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "high",
"value": 5.714285850524902,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.4285712242126465,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "high",
"value": 6.153846263885498,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "high",
"value": 5.384615421295166,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 2.884615421295166,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.47
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
}
],
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
},
"date": 1789318508422,
"model": "claude-opus-5",
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both are largely correct, modern unified-OTLP configurations. B is marginally stronger because it explicitly configures logging in the unified pipeline and its package list precisely matches its sample code; A's runtime-package optionality is internally inconsistent."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both answers identify manual header propagation and provide useful RabbitMQ byte[] decoding. B is more correct and idiomatic for OpenTelemetry .NET, uses the requested TextMapPropagator API, propagates baggage, and explicitly starts the consumer from the extracted ActivityContext. A is largely viable but less complete."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both provide largely workable OTLP tracing, custom-span, and counter setup, but B satisfies the important IMeterFactory DI requirement and more explicitly documents source-name matching. Its extra histogram and both responses' unnecessary logging prevent a larger gap."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses largely perform the intended .NET 8 hosting conversion and preserve auth-aware interactive routing. B is preferable because it satisfies the explicitly required antiforgery middleware ordering, whereas A has a material pipeline-order defect. A is otherwise more comprehensive about namespaces and authorization registration, so the overall gap is limited."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +33.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies every stated rubric item, including cancellation support, sealed-record DTOs, XML documentation, and a correct CreatedAtAction target. A has the basic endpoints and data shape but misses several explicit requirements and its POST Location target is flawed."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "worse",
"rationale": "A is the more robust implementation of the core requirement because it uses IProblemDetailsService to produce properly negotiated RFC 7807 responses, including application/problem+json, and explicitly handles all requested and fallback exception paths. B is well structured and safer about mapped exception text, but its direct WriteAsJsonAsync output undermines the Problem Details media type requirement. B only wins the requested folder organization."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produce apparently functional, verified .NET 10 minimal APIs with correct storage abstraction, HTTP semantics, JSON enums, and built-in OpenAPI. B better matches several explicit code-quality requirements: sealed record DTOs, XML summaries, and cancellation-token propagation. A is still a solid functional implementation, so the overall gap is moderate rather than overwhelming."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win -33.3% (1W/0T/2L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 0,
"losses": 2,
"discordant": 3,
"direction": "worse",
"pValue": 0.5,
"alpha": 0.05,
"netWin": -0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "Both are strong, complete implementations that satisfy all core requirements. A is marginally stronger in signature validation and adds endpoint-level request-size metadata; B is also sound and has slightly more MIME-tolerant validation, so the difference is small."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "worse",
"rationale": "A more completely configures the manual MultipartReader path for the requested 2 GB uploads and provides stronger operational cautions. B has a more self-contained path setup and safer filename parsing, but its omission of MultipartReader.BodyLengthLimit can cause the central large-upload example to fail at the default section limit. A's undefined uploadRoot is a minor example omission rather than a flaw in its proposed approach."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both fulfill the central upload, limits, form-binding, and safe-filename requirements. B is marginally stronger through fully explicit form annotations and JPEG/PNG magic-byte validation, while A is also sound and concise."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
}
],
"tool": "customBiggerIsBetter"
},
{
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"overfitting": "moderate",
"value": 8.0,
"unit": "Score (0-10)",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"overfitting": "moderate",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"overfitting": "moderate",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.48
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.26
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.26
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 7.5,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "high",
"value": 4.285714149475098,
"unit": "Score (0-10)",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.0714287757873535,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "high",
"value": 4.42307710647583,
"unit": "Score (0-10)",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "high",
"value": 5.192307472229004,
"unit": "Score (0-10)",
"overfittingScore": 0.72
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.923076868057251,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.46
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)"
}
],
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
},
"date": 1789318508544,
"model": "claude-sonnet-5",
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +0.0% (1W/1T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.750), mean preference +0.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 1,
"losses": 1,
"discordant": 2,
"direction": "none",
"pValue": 0.75,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: B, reverse: A). Defaulting to tie."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "worse",
"rationale": "Both are strong, directly usable answers that satisfy the requested propagation flow. A is marginally more robust and complete because its send-side byte encoding and receive-side decoding are explicitly consistent, and it includes a concrete source-registration example plus a BCL alternative."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both substantially satisfy the tracing, OTLP export, custom span, and counter requirements. B is slightly better overall because it follows the requested modern IMeterFactory DI pattern; A is otherwise more self-contained and explicit, so the gap is not large."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B follows the essential .NET 8 authentication migration and correct middleware order while retaining interactive server rendering. A misses the required authentication service, leaves the obsolete wrapper, and has incorrect antiforgery ordering."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +46.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies the additional API-quality requirements for cancellation, sealed record DTOs, and DTO XML documentation while preserving the controller pattern and 201 creation response. A does include PlacedAt directly in its create request whereas B server-generates it, and both use an imperfect CreatedAtAction target, so B's overall advantage is meaningful but not overwhelming."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "B closely follows the requested modern .NET minimal-API architecture, TypedResults, DTO separation, and fluent OpenAPI metadata while still implementing and testing all required behavior. A is functional and documented, but its controller-based design misses several explicit rubric requirements."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +46.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both answers correctly demonstrate streaming multipart uploads to disk and safe generated names. B is more focused and its endpoint-level unlimited request-size treatment is less likely to fail on multipart overhead for a nominal 2 GB file. A remains a strong answer, but its exact 2 GiB global limit is a small practical edge-case flaw."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B satisfies all stated rubric requirements, provides explicit mixed multipart binding, and has more robust file validation and safe extension handling. A is generally workable but misses the required FormOptions multipart limit configuration."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
}
],
"tool": "customBiggerIsBetter"
},
{
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.642857551574707,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "moderate",
"value": 1.7857142686843872,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.0714287757873535,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "moderate",
"value": 2.115384578704834,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "moderate",
"value": 2.307692289352417,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 2.115384578704834,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 6.666666507720947,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
}
],
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
},
"date": 1789318508668,
"model": "gpt-5.6-sol",
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct and complete, listing proper packages and all three signals. B is superior because it uses the modern unified UseOtlpExporter() approach that configures all three signals with a single call and applies one shared resource across the entire pipeline including logs — directly matching two rubric criteria that emphasize unified exporter config and consistent service identity. A works but repeats exporter setup per signal and duplicates resource configuration for logging. B is cleaner and more idiomatic, though A adds optional runtime instrumentation. Overall B is slightly better."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: tie, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses are strong and correct on most criteria. The decisive differentiator is IMeterFactory usage (criterion 4), which is the recommended .NET 8 pattern and explicitly rewarded by the rubric; B does this correctly while A uses a static Meter. B loses slightly on criterion 5 for adding gratuitous logging and extra types. On balance, the IMeterFactory advantage—a more significant correctness/best-practice point—outweighs A's leanness, making B slightly better overall. Note B changed the method name to ProcessOrderAsync, but the activity span name remains correct."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses are largely correct and functionally similar. The key differentiator is criterion 1: Response B correctly removes the CascadingAuthenticationState component wrapper (relying on the added service), while Response A redundantly keeps both the wrapper AND the service, which is the incorrect pattern the conversion is meant to avoid. Response B also preserves the original error UI environment logic and mentions package updates. Response A references typeof(App).Assembly which is fine, but its wrapper retention is the notable flaw. Overall B is slightly better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -6.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "Both faced an empty workspace, but A still delivered a usable OrdersController with correct DTOs, enum, DateTimeOffset, and 201 responses that satisfy several rubric criteria. B refused entirely and provided no code, satisfying nothing. A is clearly much better despite missing CancellationToken, XML docs, and CreatedAtAction specifics.\""
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both are correct, modern IExceptionHandler solutions. B edges ahead by placing the handler in a Middleware/ folder (a rubric item), using fixed safe messages that avoid leaking exception details on 4xx, and adding UseStatusCodePages. A leaks exception.Message on 4xx responses. The gap is meaningful but not enormous."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produced working .NET 10 minimal APIs with in-memory services, string enums, and built-in OpenAPI, and both built and tested successfully. B is somewhat stronger: it explicitly verified correct HTTP semantics (201 Created with Location header, 404, 400 validation, RFC 7807 problem details, OpenAPI endpoint 200) through comprehensive status-code testing, indicating more careful attention to the rubric's emphasis on proper HTTP semantics and TypedResults. B also organized code into more structured contracts/endpoints/models and cleaned up the duplicate scaffold. A worked well and was more efficient, but its POST verification did not clearly demonstrate a 201/Location response. The gap is modest."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "Both responses are strong, correct implementations that configure both size limits, generate safe filenames, and verify magic bytes. B edges ahead on two fronts: it directly makes the endpoint functional given the existing UseAntiforgery() pipeline via .DisableAntiforgery() (with an appropriate caveat), whereas A leaves antiforgery required and would likely 400 without extra client work; and B adds a Content-Type/signature cross-check for stronger validation. A's more careful antiforgery stance is defensible security-wise, but the task explicitly noted the existing UseAntiforgery() and asked for a working endpoint. Differences are modest, so B is slightly better overall."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses are correct, secure, and solve the problem well. B directly implements the MultipartReader-based streaming approach the rubric emphasizes, including proper section validation, temp-file/rename pattern, and ffprobe validation advice. A is also excellent and arguably simpler with a raw body approach (which is actually more memory-efficient), but it deviates from the multipart approach the rubric prioritizes, only mentioning it briefly. B edges ahead on rubric alignment; the gap is small since both are high quality and correct."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both responses satisfy all three rubric criteria correctly and produce clean, working code. B is slightly better: it explicitly annotates both form parameters with [FromForm], validates content via magic-byte signatures (more secure), uses CreateNew to avoid overwrite, and uses async streaming. A is also fully correct and slightly more concise, but B is a bit more thorough and robust on the mixed-form binding and validation. The difference is modest."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
}
],
"tool": "customBiggerIsBetter"
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both are viable complete ASP.NET Core configurations, but B directly fulfills the requested unified OTLP-exporter approach with cleaner shared setup and resource configuration. A is otherwise solid but redundantly configures each exporter."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses directly and correctly solve the propagation problem with usable publisher/consumer code and source registration. B is marginally more internally consistent and robust about RabbitMQ's byte[] header representation; the core tracing solution is otherwise equivalent."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both are solid, complete OTLP tracing/metrics setups with matching source and meter registration. B is preferable because it fulfills the explicit IMeterFactory dependency-injection requirement, whereas A directly constructs a Meter despite otherwise managing it through DI."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B correctly adopts service-based cascading authentication state and the required middleware order while preserving the interactive server architecture. A's retained wrapper and missing service registration are substantive authentication correctness issues in this .NET 8 render-mode conversion."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies every specified rubric requirement and has a correctly routable 201 Created response by adding GetById. A follows the basic controller shape but misses cancellation support, sealed record DTOs, DateTimeOffset, and XML documentation, and its CreatedAtAction target is flawed."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B is a self-contained, directly usable implementation with the requested handler code, mappings, safe 500 response, and conventional folder placement. A provides only Program.cs wiring and an unverified claim that handler code was written elsewhere, so the user cannot implement the core solution from its final answer. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "B closely follows the requested modern .NET minimal-API conventions and explicitly delivers typed results, DTO separation, DateTimeOffset, Location-bearing 201 responses, and fluent OpenAPI metadata. A is functional and documented, but its controller-based implementation misses several rubric-specific architectural requirements."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B better satisfies the explicitly requested complete size-limit configuration by setting both request-level Kestrel and multipart parsing limits. A has somewhat more stringent PNG signature validation and a more nuanced antiforgery note, but its missing Kestrel limit is a material omission under the stated rubric."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both answers satisfy the core requirements. B has a more directly usable multipart-boundary implementation and also mentions content validation, while A has some distracting/inaccurate framing around IFormFile buffering and an unnecessary IFormFile metadata declaration. The difference is modest."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B is more complete for the stated ASP.NET Core 8 upload scenario: it correctly establishes both relevant 50 MB limits, clearly binds the mixed form fields, and includes stronger content validation and safe extension handling. A is still broadly workable, but omits the multipart limit and relies on manual form parsing."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
}
],
"benches": [
{
"unit": "Score (0-10)",
"overfittingScore": 0.57,
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.57,
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"value": 9.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.57,
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.57,
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.57,
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.57,
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"value": 9.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 7.5,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.69,
"value": 10.0,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.69,
"value": 5.357142925262451,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"value": 4.642857074737549,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.69,
"value": 10.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.69,
"value": 9.5,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"value": 9.5,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.69,
"value": 5.192307472229004,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.69,
"value": 4.42307710647583,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "high"
},
{
"unit": "Score (0-10)",
"value": 2.692307710647583,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"value": 10.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"value": 6.666666507720947,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"value": 8.333333015441895,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"value": 10.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"value": 10.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"value": 8.333333015441895,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"model": "claude-sonnet-5",
"date": 1789397101299,
"tool": "customBiggerIsBetter",
"commit": {
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"timestamp": "2026-09-12T07:43:41+00:00",
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
}
},
{
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both answers are technically functional and list appropriate packages. However, B better satisfies two key rubric criteria: it uses a unified UseOtlpExporter() rather than repeating exporter config per signal, and it configures logging within the same AddOpenTelemetry builder so logs share the service resource identity. A's separate builder.Logging configuration lacks the shared resource, so logs won't carry the same service name. These are exactly the distinctions the rubric targets, making B clearly better. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses correctly explain W3C trace context propagation through RabbitMQ headers with inject/extract and parenting the consumer Activity. B is slightly better: it encodes header values as UTF-8 bytes (matching RabbitMQ's byte-array header transport), handles string/null cases on extract, restores baggage, includes OpenTelemetry registration code, and notes the ordering detail. A's inject writes raw string values which may not match how RabbitMQ transmits headers, though it correctly decodes bytes on extract. Both are high quality and largely equivalent."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses produce correct, complete, and compilable setups meeting the core requirements. B wins the most heavily weighted quality distinction by using IMeterFactory via DI (the recommended modern pattern) rather than a static Meter, and explicitly notes name matching. A is slightly more focused (avoids gratuitous logging) and uses a cleaner service name. On balance, the IMeterFactory best-practice advantage gives B a slight edge overall."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses produce correct .NET 8 Blazor Web App conversions with proper service registration, middleware ordering, AuthorizeRouteView retention, and interactive server rendering. The key differentiator is that Response A leaves the redundant <CascadingAuthenticationState> component wrapper in Routes.razor, which contradicts the intended pattern of using AddCascadingAuthenticationState(). Response B correctly removes the wrapper. Both are otherwise high quality; B is slightly better due to correctly handling the primary rubric point."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "Both faced an empty workspace, but A provided a helpful, correct controller implementation matching the existing pattern with proper DTOs, CreatedAtAction, and DateTimeOffset, while B simply refused. A delivers far more value; it only misses CancellationToken and XML docs, which B also fails to provide.\""
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both responses are functionally excellent and nearly identical in correctness. They tie on nearly every criterion. The only differentiator is that B places the handler in a Middleware/ folder with a proper namespace (matching a rubric criterion), while A does not. A has a slightly nicer 'type' field with actual URLs, but B still satisfies RFC 7807. Given the explicit rubric item favoring B, B is slightly better overall."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produced working APIs with the 3 endpoints, in-memory service behind an interface, string enums, and built-in OpenAPI. However the rubric heavily emphasizes modern minimal-API best practices. Response A chose a controller-based project (--use-controllers), which fundamentally fails multiple criteria: minimal APIs, TypedResults/Results<T>, and the WithName/WithSummary/WithDescription chaining—all controller-incompatible. Response B, aided by the dotnet-webapi skill, used minimal APIs and demonstrably returned 201 Created with a Location header. While A did a more thorough smoke test of all three endpoints and OpenAPI metadata, its architectural choice conflicts with the core rubric expectations. B better satisfies the specific quality bar defined by the rubric."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"plugin": "plugin-activity-observed"
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "Both responses are high quality, meeting nearly all rubric criteria: dual size limits, safe filenames, and magic-byte content verification. The key differentiator is antiforgery handling — Response A explicitly adds .RequireAntiforgery() on the endpoint, which is the recommended and reliable way to enforce token validation in minimal APIs, whereas Response B only relies on UseAntiforgery() middleware (which in minimal APIs does not automatically validate for endpoints unless explicitly required, especially since B's form binding relies on default behavior). A is slightly better overall."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses fully satisfy all three rubric criteria with correct, working code. B is slightly better due to added robustness: it enforces the 2GB byte limit during streaming (preventing unbounded writes), cleans up the partial file on error (try/catch with delete), rejects multiple files, adds a Content-Length pre-check, includes a curl example and antiforgery guidance. A's response is also excellent and slightly cleaner, but omits the application-level byte enforcement (it only mentions it in prose) and partial-file cleanup. These are meaningful reliability/security improvements, giving B a slight edge."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Response B is better overall primarily because it correctly satisfies the most technically important criterion: configuring BOTH the Kestrel request body size limit and the FormOptions multipart body length limit for the 50MB requirement. Response A misses the multipart body length limit, a genuine and common pitfall. B also adds meaningful content-type/magic-byte validation. Response A does better demonstrate safe filename handling (Guid storage) and actually persists files, whereas B only returns metadata. Both handle [FromForm] correctly. On balance, B's correct handling of the core 50MB configuration requirement gives it a slight edge."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
]
}
],
"benches": [
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 9.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"value": 9.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 9.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 6.785714149475098,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"value": 1.4285714626312256,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"value": 1.4285714626312256,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"value": 6.4285712242126465,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"value": 10.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"value": 10.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"value": 2.115384578704834,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"overfittingScore": 0.34,
"value": 2.115384578704834,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "moderate"
},
{
"unit": "Score (0-10)",
"value": 1.7307692766189575,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality"
},
{
"unit": "Score (0-10)",
"value": 10.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality"
},
{
"unit": "Score (0-10)",
"value": 5.833333492279053,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality"
}
],
"model": "gpt-5.6-luna",
"date": 1789397101422,
"tool": "customBiggerIsBetter",
"commit": {
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"timestamp": "2026-09-12T07:43:41+00:00",
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
}
},
{
"tool": "customBiggerIsBetter",
"commit": {
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-14T15:27:40+00:00",
"id": "24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"message": "Surface activation-only evaluation failures (#1163)"
},
"date": 1789478285540,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +100.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B directly satisfies the requested three-signal setup with a shared resource and a single OTLP exporter configuration. A is broadly plausible but duplicates exporter setup, omits explicit cross-signal service identity, and has package omissions for APIs used in its code."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "B provides a coherent end-to-end OpenTelemetry propagation implementation: standard injection, extraction, and an explicitly parented consumer activity, plus source registration. A has useful conceptual guidance but its main consumer code has header-type and Activity parent-construction defects, while its propagator example is only partial."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "B correctly wires the custom ActivitySource and Meter into the OpenTelemetry providers and uses DI-backed IMeterFactory, so the requested custom span and counter can actually be exported. A's otherwise detailed implementation omits both AddSource and AddMeter and uses a static meter, a major functional failure for the core custom telemetry requirements."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 1,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 1
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B follows the required .NET 8 authentication migration and interactive Blazor Web App pattern, including a Routes component, cascading-authentication service registration, antiforgery, and explicit interactive rendering. A misses several required migration elements and likely fails to preserve interactive behavior."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +100.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both meet the basic controller requirement, but B satisfies the requested modern API details—cancellation support, properly named immutable DTOs, documented contracts, and correct date/time representation—whereas A misses several explicit rubric requirements."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B is a usable modern .NET 8+ implementation with concrete handler and registration code covering the requested mappings and safe fallback. A's final answer is only a high-level summary and lacks the promised implementation."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produce working .NET 10 product APIs with interface-backed in-memory storage and OpenAPI, but B closely satisfies the requested modern minimal-API quality rubric: typed results, sealed DTO records, cancellation, DateTimeOffset, string enums, validation, and explicit endpoint metadata. A is functional but is an older controller/mutable-model design and misses many explicit criteria."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +66.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B provides a substantively complete endpoint with limits, size/type/signature checks, and safe storage, whereas A fails to provide the requested implementation at all. B does have a significant compile typo (WebApplicationBuilder.CreateBuilder should be WebApplication.CreateBuilder) and does not adequately resolve antiforgery behavior, but it is still far more useful than A."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "B is materially more useful because it contains a near-complete, directly usable streaming endpoint with size-limit and safe-name handling. It has minor issues (notably the 2GB FormOptions expression should use a long literal and its section validation is minimal), but A's final answer omits the promised code entirely and therefore does not actually answer the implementation request."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
}
],
"benches": [
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 8.5
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 5.0
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.5
},
{
"overfitting": "high",
"overfittingScore": 0.55,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 7.142857074737549
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 7.142857074737549
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 2.857142925262451
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 4.285714149475098
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 1.7857142686843872
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 1.7857142686843872
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 9.5
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 4.5
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 4.42307710647583
},
{
"overfitting": "high",
"overfittingScore": 0.65,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 1.7307692766189575
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.923076868057251
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 8.333333015441895
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 2.5
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 0.8333333134651184
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 7.5
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 9.166666984558105
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 7.5
}
],
"model": "claude-haiku-4.5"
},
{
"tool": "customBiggerIsBetter",
"commit": {
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-14T15:27:40+00:00",
"id": "24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"message": "Surface activation-only evaluation failures (#1163)"
},
"date": 1789478285696,
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct and complete. However, the rubric specifically rewards a unified OTLP exporter configuration and logs sharing the same service identity. Response B achieves both cleanly via .UseOtlpExporter() and .WithLogging() within a single AddOpenTelemetry pipeline sharing one ConfigureResource. Response A repeats AddOtlpExporter per signal and defines the resource separately for logs, which is exactly what the rubric discourages. A is slightly more thorough on package/instrumentation breadth, but B better matches the core rubric intent. B wins slightly overall."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses correctly explain the core solution and connect the consumer span as a child of the publisher context. However, B explicitly uses the OpenTelemetry TextMapPropagator for both inject and extract, which is the idiomatic, correct, and robust approach the rubric specifically calls for, and also handles baggage and current-context propagation more reliably. A's manual header approach works but is less robust and doesn't use a propagator. B also adds useful messaging semantic tags. Overall B is slightly better."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses produce solid, working OpenTelemetry setups. B wins the two most technically substantive criteria: it lists the required NuGet packages (which A omits entirely) and uses IMeterFactory via DI (the recommended pattern) rather than A's static Meter. A is cleaner and more minimal, winning on avoiding gratuitous extras and using a concrete service name. On balance, B's adherence to the recommended DI pattern and inclusion of package requirements make it slightly better overall, despite some added scope creep."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Response B correctly implements the modern .NET 8 auth pattern: removes the CascadingAuthenticationState wrapper, adds AddCascadingAuthenticationState() service, and includes UseAntiforgery in the correct position. Response A misses all three of these, retaining the legacy wrapper and omitting antiforgery middleware. Both keep AuthorizeRouteView and preserve interactive rendering. B is substantially more correct."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +100.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies all six rubric criteria (controllers, CancellationToken, CreatedAtAction/201, sealed record DTOs, DateTimeOffset, XML docs), plus adds validation, ProducesResponseType, and a GetById endpoint that makes CreatedAtAction correct. A misses CancellationToken, sealed records, and XML docs, and uses a slightly incorrect CreatedAtAction reference. B is clearly better."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B satisfies nearly all rubric criteria: modern IExceptionHandler, sealed class, Middleware/ folder, proper registration, safe error messages with logging. A works functionally but uses the older inline delegate approach and misses most of the specific rubric requirements. Both map status codes correctly, but B is clearly the superior implementation per the rubric."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Response A gave up entirely after a filesystem hiccup and produced no code. Response B, despite the missing SDK, still delivered complete, high-quality code satisfying every rubric criterion with correct instructions. B is dramatically better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B satisfies all four rubric criteria: both size limits (Kestrel + FormOptions), antiforgery handling, safe filename, and magic-byte content verification. A misses two important criteria — it lacks the Kestrel body size limit and only validates Content-Type/extension without inspecting actual file signatures. Both are otherwise correct and well-structured, but B is meaningfully more complete and secure."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses are high quality, correct, and cover all three rubric points. B is slightly better because it fully avoids user-supplied filenames (safest approach), adds an inline size-limit guard, and includes DisableAntiforgery and optional MIME validation notes relevant to API uploads. A preserves the original filename (sanitized) which is a nice UX feature but marginally less safe. The differences are small."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Response B satisfies all three rubric criteria correctly, including the critical Kestrel body size limit that Response A omits (which would break the 50MB requirement), proper [FromForm] binding, and fully avoiding original filenames. Response A is functional but misses the Kestrel limit and only partially addresses the filename concern."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/24f7cfbd42ad7bf52bcd67372816b982c38c64c6/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6"
}
]
}
],
"benches": [
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5
},
{
"notActivated": true,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 5.833333492279053
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 6.0714287757873535
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 6.4285712242126465
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.4285712242126465
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 8.5
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 8.5
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 9.807692527770996
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 6.538461685180664
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.5384615659713745
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.0
}
],
"model": "gpt-5.3-codex"
},
{
"benches": [
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.5
},
{
"overfitting": "high",
"overfittingScore": 0.64,
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0
},
{
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 7.142857074737549
},
{
"overfitting": "high",
"overfittingScore": 0.54,
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.285714149475098
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 10.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 4.285714149475098
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 4.642857074737549
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 5.961538314819336
},
{
"overfitting": "high",
"overfittingScore": 0.7,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 6.730769157409668
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 2.884615421295166
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 8.333333015441895
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.4,
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 9.166666984558105
}
],
"model": "claude-sonnet-5",
"commit": {
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-15T22:05:10+00:00",
"message": "Merge pull request #873 from dotnet/add-dotnet-refactoring-skills",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f",
"id": "26323a52990d0cbfc838117109b40e115aac891f"
},
"tool": "customBiggerIsBetter",
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both are viable complete ASP.NET Core configurations for all three signals, but B better satisfies the requested unified exporter approach and has a cleaner required-package list. A is otherwise technically sound, including its explicit shared resource handling."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both provide broadly workable ASP.NET Core OpenTelemetry tracing, OTLP export, a ProcessOrder span, and an orders counter. B is stronger because it explicitly supplies package setup and, importantly, uses DI-provided IMeterFactory. A remains functional but adds unnecessary child spans and uses a static Meter."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 1,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B satisfies all listed conversion requirements, including the authentication-state migration and required antiforgery order. A has two material rubric failures: it retains the obsolete component wrapper and orders antiforgery before auth/authorization."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +33.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B satisfies every specified convention, while A only matches the controller pattern and 201 creation behavior and misses cancellation tokens, sealed record DTOs, DateTimeOffset, and XML summaries."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "worse",
"rationale": "A is a complete, self-contained, directly usable solution with the actual exception-handler implementation, mappings, safe 500 behavior, and registration. B has the preferred Middleware folder placement but its final response omits the handler source and therefore is materially less actionable and verifiable."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both deliver a working minimal API with interface-backed in-memory storage and OpenAPI, but B demonstrably satisfies the stricter implementation-quality requirements: Created/Location semantics, typed results, sealed record DTOs, cancellation propagation, XML docs, and the full metadata convention. A is plausible and functional, but its report leaves several of these required details unsupported. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B better satisfies the explicitly required complete size-limit configuration and provides a directly usable, self-contained Program.cs implementation. A has stronger antiforgery and PNG-signature handling, but its omission of FormOptions.MultipartBodyLengthLimit misses a stated core requirement."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both are largely workable and meet the size-limit requirement. B more directly demonstrates mixed form binding and has stronger image validation and safer extension selection. A's manual form approach and client-derived extension are less idiomatic/robust, though it does explicitly check aggregate file size."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
}
],
"date": 1789574378852
},
{
"benches": [
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 9.166666984558105
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.642857551574707
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 1.4285714626312256
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 1.4285714626312256
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 1.7857142686843872
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 2.884615421295166
},
{
"overfitting": "moderate",
"overfittingScore": 0.34,
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 2.884615421295166
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.923076868057251
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.833333492279053
}
],
"model": "gpt-5.6-luna",
"commit": {
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-15T22:05:10+00:00",
"message": "Merge pull request #873 from dotnet/add-dotnet-refactoring-skills",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f",
"id": "26323a52990d0cbfc838117109b40e115aac891f"
},
"tool": "customBiggerIsBetter",
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B uses the modern unified UseOtlpExporter() and WithLogging() approach that satisfies the key rubric points: single unified exporter config and shared service identity across all three signals. A repeats exporter setup per signal and configures logs separately without a resource/service, so its logs lack the shared service identity. Both are otherwise correct and complete, but B is materially better on the two discriminating criteria."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses correctly cover injection, extraction, and parent linking with W3C propagation and byte[] header handling. The key differentiator is code correctness: Response A contains an actual syntax error in the registration snippet (`.WithTracing tracing => tracing` is missing the opening parenthesis) and uses `Propagators.CreateDefaultPropagator()` which is not a real API, plus mixes the RabbitMQ 7.x BasicProperties constructor with the classic BasicPublish signature. Response B's code is internally consistent and compilable, and its guidance points are accurate. Both are strong, but B is cleaner and free of A's errors."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both responses are correct and complete. The decisive rubric criterion is the use of IMeterFactory via DI, which B does correctly (the modern recommended .NET pattern) while A uses a static Meter, an important best-practice difference. A is slightly cleaner (less gratuitous extra code and a more explicit service name), but B's adherence to the IMeterFactory best practice and clearer name-matching guidance make it slightly better overall."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses correctly migrate the hosting model to the .NET 8 Blazor Web App style (AddRazorComponents/MapRazorComponents, blazor.web.js, App.razor as root, Routes.razor, antiforgery, cascading auth service). The key differentiator is the CascadingAuthenticationState wrapper: A leaves the redundant component wrapping the Router in Routes.razor even though it added AddCascadingAuthenticationState(), whereas B correctly removes it, which is the intended pattern. B also preserves the blazor-error-ui markup which A dropped. B is slightly better overall due to correctly handling the cascading auth wrapper removal."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -6.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "The workspace was empty in both cases (only a scaffold/skill doc present). Response A reasonably interpreted the task, created a self-contained OrdersController, OrderStatus enum, DTOs (CreateOrderRequest/OrderResponse), and IOrderService that fulfill the user's actual request. Despite struggling with apply_patch (recovering via bash), it delivered a working, on-point result. Response B refused entirely, providing no code and demanding the user supply files—less helpful given the user clearly described the pattern and requirements sufficient to produce code. While neither response can be fully verified against every finer rubric detail (CancellationToken, DateTimeOffset, sealed records, XML docs), Response A at least delivers usable output matching the controller pattern and naming, whereas Response B delivers nothing. Response A is much better overall."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both responses are high quality and correct, satisfying the modern IExceptionHandler pattern, RFC 7807 ProblemDetails, correct status mapping, sealed class, and proper registration. B additionally satisfies the Middleware/ folder placement criterion, giving it the edge. A is marginally more conservative on detail exposure by omitting Detail, but B's static generic details are also safe. On balance B wins due to the folder organization criterion, making it slightly better overall."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both responses produced a building .NET 10 minimal API with the required endpoints, enum, in-memory service behind an interface, and OpenAPI. However, Response B provides stronger verified evidence: it explicitly confirmed the POST returns 201 Created with a Location header, verified the built-in OpenAPI document (/openapi/v1.json) returns 200 with the correct paths, and leveraged the dotnet-webapi skill prescribing the exact best practices in the rubric (TypedResults, DateTimeOffset, rich metadata). Response A's POST test showed only the body with no status/header, leaving the 201/Location requirement unverified and possibly returning 200, and it never validated the OpenAPI document. B is methodically more aligned with the rubric's best-practice criteria."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +0.0% (1W/1T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.750), mean preference +20.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 1,
"losses": 1,
"discordant": 2,
"direction": "none",
"pValue": 0.75,
"alpha": 0.05,
"netWin": 0,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "Both responses are high quality and satisfy all four rubric criteria: dual size limits, antiforgery handling, safe filename generation, and magic-byte content verification. A is slightly better because it accounts for multipart overhead in the transport limits (avoiding rejecting legitimate ~10MB files before the endpoint check) and explicitly applies .RequireAntiforgery(). B sets both limits to exactly 10MB which could pre-reject valid files. The differences are minor; both are correct and complete."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both produce working, well-structured code that avoids original filenames. However, Response B is meaningfully more correct: it configures both the Kestrel body size limit and the form multipart limit (Response A misses the Kestrel limit, which would cause 50MB uploads to fail by default), and it directly demonstrates the [FromForm] binding pattern for mixing files and text fields as asked. B also adds magic-byte content validation. Response A is cleaner and simpler but has the notable correctness gap on the 50MB requirement, so B wins overall."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/26323a52990d0cbfc838117109b40e115aac891f/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f"
}
]
}
],
"date": 1789574378990
},
{
"model": "claude-opus-4.8",
"tool": "customBiggerIsBetter",
"date": 1789642372197,
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B directly provides the intended modern unified all-signal OTLP setup with a shared resource and package list matching its code. A is mostly sound conceptually but repeats exporter configuration and contains a package/code mismatch that prevents the advertised complete configuration from compiling unchanged."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses are substantively correct and directly answer the task without creating files. B is marginally stronger because its sender explicitly writes byte[] header values and its source-registration guidance is clear; A's string assignment will commonly serialize suitably but is less explicit."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both provide viable, complete OpenTelemetry tracing/OTLP/metric setups with matching source and meter registration. B is modestly stronger because it follows the requested IMeterFactory DI pattern and counts only successfully completed orders, although its extra logging setup is unnecessary for the task."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 1,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 1,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B fulfills all listed migration and authentication requirements, whereas A misses the two central CascadingAuthenticationState migration changes despite otherwise correctly converting the hosting and rendering model."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +46.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both fulfill the fundamental controller-based endpoint direction, but B meets nearly all specified implementation-quality requirements: cancellation support, sealed record DTOs, XML docs, and a proper CreatedAtAction flow backed by GET-by-id. A is a simpler scaffold and misses several explicit rubric requirements."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both are clean, built, and endpoint-verified implementations satisfying the core task. B is stronger on the rubric's modern API-quality details—typed result unions, sealed record DTOs, DateTimeOffset, and XML documentation—while A is also a solid functional implementation with verified OpenAPI metadata."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +46.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B better satisfies the explicitly requested complete size-limit configuration by actually setting both Kestrel and multipart limits. A is stronger on default endpoint usability with existing antiforgery middleware and somewhat stronger signature validation, but omitting Kestrel from its actual code is a substantive gap."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B satisfies all listed requirements and additionally validates aggregate file size and image signatures. A is broadly sensible but its missing Kestrel limit means its advertised 50 MB uploads will commonly fail under the default server limit."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
}
],
"benches": [
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 9.0,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 10.0,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 9.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.6,
"overfitting": "high",
"value": 9.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 9.5,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.24,
"overfitting": "moderate",
"value": 8.571428298950195,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.24,
"overfitting": "moderate",
"value": 7.142857074737549,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 6.4285712242126465,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 5.714285850524902,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 7.142857074737549,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 2.142857074737549,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 9.5,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 10.0,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 9.5,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 4.615384578704834,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.66,
"overfitting": "high",
"value": 6.153846263885498,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 4.42307710647583,
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 9.166666984558105,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 9.166666984558105,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 9.166666984558105,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 10.0,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 10.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"unit": "Score (0-10)"
},
{
"overfittingScore": 0.45,
"overfitting": "moderate",
"value": 10.0,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"unit": "Score (0-10)"
},
{
"value": 8.333333015441895,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"unit": "Score (0-10)"
}
]
},
{
"benches": [
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.62
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 6.0714287757873535
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 4.285714149475098,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.4285712242126465
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 9.5,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 3.653846263885498,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 4.42307710647583,
"overfitting": "high",
"overfittingScore": 0.69
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 2.884615421295166
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 9.166666984558105,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 8.333333015441895
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.37
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.833333492279053
}
],
"date": 1789745909366,
"tool": "customBiggerIsBetter",
"model": "claude-sonnet-5",
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both are broadly usable all-signal ASP.NET Core configurations, but B more directly meets the requested unified exporter setup and has a self-consistent package list. A's explicit per-signal resource assignment is solid, but its repeated exporter blocks and runtime-package inconsistency make it modestly weaker."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both answers satisfy all requested propagation steps with usable code. B is marginally more precise about TextMapPropagator and more robust when no producer Activity is created, while A adds useful registration context but includes a small terminology inconsistency."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both provide largely complete, workable ASP.NET Core OpenTelemetry setups with OTLP export, a matching manual ActivitySource, and a counter. B is better because it follows the preferred DI/IMeterFactory Meter lifecycle and uses the standard OTLP environment-variable configuration. A's direct Meter construction misses that important implementation requirement."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B satisfies every authentication-specific migration requirement, including service-based cascading authentication state and antiforgery middleware, while preserving interactive server rendering. A has the core hosting conversion but misses the required authentication migration details and leaves a wrapper that is unsuitable across the render-mode boundary."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +46.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "B meets the specified controller/API design requirements more completely, including cancellation support, sealed record DTOs, XML docs, and a valid CreatedAtAction destination. A is a usable basic controller but misses several explicit requirements and its creation Location target is incorrect."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "The implementations are substantively equally correct and complete; B has the small structural advantage of explicitly placing the handler in the requested Middleware/ folder."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: B, reverse: tie). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B best satisfies the explicit complete size-limit requirement by configuring both required limit layers, while retaining safe filenames and signature checks. A's antiforgery approach is more security-preserving, but its omission of the Kestrel limit is a material gap against the requested configuration."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both answer the central question correctly with streaming MultipartReader code and safe generated filenames. B's boundary handling, file-disposition parsing, and extension validation make its example more likely to work securely with typical multipart clients. A is stronger on surrounding limit/proxy guidance, so the overall gap is small."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "B is the more cohesive and robust minimal API example: it correctly combines typed form binding, both size limits in the main setup, generated safe names, and content validation. A is broadly functional but its Kestrel configuration is presented in an unusable position and it is less precise about safe file type/extension handling."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
}
]
},
{
"benches": [
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.642857551574707
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 1.7857142686843872,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"value": 1.4285714626312256,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.785714149475098
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"value": 10.0,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"value": 2.115384578704834,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"value": 2.115384578704834,
"overfitting": "moderate",
"overfittingScore": 0.36
},
{
"unit": "Score (0-10)",
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.923076868057251
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 9.166666984558105
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 10.0
},
{
"unit": "Score (0-10)",
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 4.166666507720947
}
],
"date": 1789745909486,
"tool": "customBiggerIsBetter",
"model": "gpt-5.6-luna",
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both answers are correct and complete. B better matches the intent of the rubric by using the unified UseOtlpExporter() call and a single shared resource across all three signals, which is the modern recommended approach. A works but repeats exporter setup and duplicates the resource for logs. A does add Runtime instrumentation as a minor bonus. Overall B is slightly better due to the unified exporter and shared service identity."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses are correct, complete, and well-structured, satisfying all three rubric criteria. B is slightly better because it properly restores Baggage on the consumer side and includes the concrete OpenTelemetry registration (.AddSource/.UseOtlpExporter) tying spans to a shared backend, along with a helpful null-activity troubleshooting note. A includes good W3C format flags and a solid checklist, so the gap is small."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "Both are high-quality, correct answers. B satisfies the important IMeterFactory-via-DI criterion (the recommended modern pattern), which A misses by using a static Meter. A is more minimal and avoids the extra logging/error handling that B adds gratuitously. The IMeterFactory criterion is a significant technical distinction favoring B, while A's advantages on minimalism and service naming are minor. On balance B is slightly better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both responses are largely correct and cover most criteria equally. The key differentiator is criterion 1: Response B correctly removes the CascadingAuthenticationState component wrapper and relies on the registered service (the intended .NET 8 pattern), while Response A both registers the service AND keeps the wrapper, which is redundant/contradictory. Response A additionally lost the blazor-error-ui div and dropped explicit UseRouting (though that is acceptable in .NET 8). B also added a useful _Imports note. B is slightly better overall."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference -6.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "Both correctly noted no project files exist, but A still delivered a complete, well-structured controller with proper DTOs, CreatedAtAction, DateTimeOffset, and validation that the user can adapt. B refused entirely and provided nothing useful. A satisfies most rubric criteria while B satisfies almost none.\""
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "Both implementations are correct and modern. B satisfies two additional rubric criteria: it places the handler in a Middleware/ folder as a separate file, and it avoids exposing internal exception messages for all exception types (A echoes exception.Message for the mapped exceptions). B also includes a sample JSON output. A is slightly cleaner in inspecting the repo but the differences favor B on rubric adherence."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both produced working .NET 10 minimal-API projects with in-memory services, OpenAPI docs, and validated endpoints via smoke tests. B benefited from the dotnet-webapi skill guidance, explicitly using DateTimeOffset, string enum conversion, RFC 7807 error handling, and documentation generation—aligning more closely with the rubric's modern-best-practice criteria. A also worked but relied on DateTime (UTC) and didn't mention enum string conversion or validation. Differences are modest since much of both final code isn't visible, but B edges ahead on the confirmable criteria."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +40.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "Both responses produce complete, working implementations meeting most requirements. B is superior because it actually implements magic-byte file signature validation (a rubric criterion A only mentions but doesn't implement) and handles multipart overhead in the size limits. A is solid and clean but leaves the content-verification requirement as prose advice rather than code."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses are correct, complete, and satisfy all three rubric criteria essentially equally. B edges ahead by implementing an actual per-file size counter in the copy loop (rather than just mentioning it), including atomic temp-file handling with cleanup on failure, adding DisableAntiforgery guidance relevant to minimal API uploads, and content-type validation. A is also excellent and includes broader deployment notes (nginx/IIS). The gap is small."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Response B correctly addresses all key technical requirements: it configures both the Kestrel body size limit and the multipart form limit, uses [FromForm] model binding correctly (with DisableAntiforgery), and includes robust validation. Response A misses the critical size-limit configuration and doesn't demonstrate proper [FromForm] binding. B is clearly better on the two most important criteria while tying on the third. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
}
]
},
{
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 8.5,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"overfitting": "high",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.59
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 4.5,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 7.142857074737549,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 7.142857074737549,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 6.0714287757873535,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"overfitting": "high",
"value": 3.9285714626312256,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "high",
"value": 5.714285850524902,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 1.7857142686843872,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"overfitting": "high",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "high",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "high",
"value": 4.42307710647583,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "high",
"value": 3.076923131942749,
"unit": "Score (0-10)",
"overfittingScore": 0.66
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.7307692766189575,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"overfitting": "moderate",
"value": 7.5,
"unit": "Score (0-10)",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 0.8333333134651184,
"unit": "Score (0-10)",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 4.166666507720947,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"overfitting": "moderate",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 4.166666507720947,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.39
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.833333492279053,
"unit": "Score (0-10)"
}
],
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "B better satisfies the requested unified all-signal OTLP design and explicitly establishes a shared service resource, with a more appropriate package list. However, its otherwise unnecessary `UseOpenTelemetryPrometheusScrap()` call appears misspelled/nonexistent and would prevent the shown Program.cs from compiling; this materially limits the margin. A also has a package/code mismatch for runtime and process instrumentation."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "B best matches the requested OpenTelemetry approach: standard propagator-based injection and extraction, baggage restoration, and an explicit consumer parent context. A has the core idea correct but manually implements W3C formatting/parsing rather than using TextMapPropagator."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "better",
"rationale": "B substantially fulfills the request with concrete Program.cs, service, OTLP setup, matching ActivitySource registration, and a DI-created counter metric. A only returns a high-level summary and package list rather than the complete code explicitly requested."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 1,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 1,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B provides the correct .NET 8 Blazor Web App architecture: an HTML App root, a separate Routes component, service-based cascading authentication state, and interactive server render modes, while deleting _Host. A incorrectly preserves the old router wrapper and _Host-based hosting structure despite mapping Razor components, making the result internally inconsistent and likely nonfunctional as a proper Web App migration."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +80.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "better",
"rationale": "Both provide a controller-based orders solution, but B aligns with every specified API-design requirement: cancellation support, CreatedAtAction semantics, sealed record DTOs, DateTimeOffset, and XML documentation. A misses several of these explicitly."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B better matches the requested .NET 8 structure, explicitly shows the registrations, covers status-code error responses, and satisfies the sealed/Middleware organization criteria. Both final outputs are overly summary-oriented and omit the actual handler source; B's shown Program.cs also appears to contain a likely WebApplicationBuilder typo, so its advantage is not large."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both deliver the core CRUD subset and service abstraction, but B aligns closely with every specified modern .NET minimal-API, typed-result, immutable DTO, cancellation, DateTimeOffset, string-enum, and built-in OpenAPI requirement. A is a functional but materially mismatched controller/Swashbuckle implementation."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +33.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "A supplies a largely complete, usable Program.cs endpoint with multipart handling, size checking, safe storage, and an explicit antiforgery decision. It misses Kestrel configuration and signature validation. B correctly calls out those missing protections, but its final answer contains no actual endpoint implementation or magic-byte code despite claiming it is complete, so it does not satisfy the central request. [Magnitude reduced to \"slightly-better\": the position-swapped pass judged this \"slightly-better\", so the more confident \"much-better\" was downgraded.]"
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "B gives the correct essential architecture—MultipartReader direct section streaming—and calls out safe generated names and limits. A's central claim is materially false: ReadFormAsync plus IFormFile is precisely the form-buffering route the user needs to avoid. B is incomplete because its final output lacks the promised implementation, but it remains substantially more correct."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both provide broadly usable upload code with the required 50MB limits and safe generated filenames. B is better aligned with minimal-API form binding and adds stronger image-content validation. A remains functional, but uses manual form parsing and includes an unnecessary 50MB in-memory buffer threshold; both also provide prose beyond the user's code-only preference."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
}
],
"date": 1789836946353,
"model": "claude-haiku-4.5",
"tool": "customBiggerIsBetter"
},
{
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"benches": [
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 5.833333492279053,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.0,
"unit": "Score (0-10)",
"notActivated": true
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 9.285714149475098,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Skilled Quality",
"value": 4.642857074737549,
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"overfitting": "moderate"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Plugin Quality",
"overfitting": "moderate",
"value": 1.4285714626312256,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 6.4285712242126465,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 8.5,
"unit": "Score (0-10)",
"overfittingScore": 0.32,
"overfitting": "moderate"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "moderate",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 8.5,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "moderate",
"value": 1.5384615659713745,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "moderate",
"value": 3.846153736114502,
"unit": "Score (0-10)",
"overfittingScore": 0.32
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.5384615659713745,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 8.333333015441895,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 5.0,
"unit": "Score (0-10)"
}
],
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +66.7% (2W/1T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +26.7% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 1,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 0.6666666666666666,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "better",
"rationale": "Both responses are correct and functional. B better satisfies the core rubric intent: it uses the unified .UseOtlpExporter() (single exporter config for all three signals) and the integrated .WithLogging() builder, ensuring logs share the same service identity automatically. A repeats OTLP exporter setup three times and duplicates resource configuration, which is exactly what the rubric discourages. A does provide a more comprehensive package/instrumentation list, but that is a minor advantage. Overall B is slightly better due to the unified, more idiomatic configuration."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "Both responses are technically correct and would produce end-to-end traces. However, Response B uses the OpenTelemetry TextMapPropagator (Inject/Extract) which is the idiomatic and rubric-specified approach, handles baggage cleanly, and includes the AddSource registration note. Response A's manual header approach is valid but doesn't leverage the propagator abstraction and its baggage handling is more ad hoc. B better matches the rubric; the gap is modest since both are functional."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: tie). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +100.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "B produces a clean, correct .NET 8 conversion: removes the CascadingAuthenticationState wrapper in favor of the service, correctly orders UseAntiforgery after auth middleware, provides Routes.razor, _Imports guidance, and instructs to delete _Host. A gets several core rubric items wrong: it keeps the CascadingAuthenticationState wrapper in its new App.razor, misorders UseAntiforgery (placed before auth), and confusingly includes two conflicting App.razor versions plus a redundant Routes component. B is clearly the higher quality response."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (2W/0T/1L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +13.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 2,
"ties": 0,
"losses": 1,
"discordant": 3,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"direction": "worse",
"rationale": "Both are very similar and miss several rubric points (CancellationToken, XML docs). A edges ahead by using records and DateTimeOffset, matching two more rubric criteria than B. B provides the extra IOrderService interface but uses classes and DateTime."
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "The responses are extremely similar. B is marginally better because it uses IProblemDetailsService.WriteAsync (proper RFC 7807 integration) rather than WriteAsJsonAsync, and explicitly references AddExceptionHandler<YourHandler>() as the modern alternative. Both fall short on providing an actual sealed IExceptionHandler class in a Middleware/ folder."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Neither response fulfilled any of the rubric criteria — both failed to produce actual project files. Response A merely claimed it would scaffold the project but did nothing (0 tool calls) and made a false statement of progress. Response B actually attempted the work: it loaded a relevant skill, verified the .NET 10 SDK, created the project with dotnet new, and then hit a genuine environment blocker (invalid workspace path where view/create operations failed). It honestly reported being blocked and asked for a valid directory. While neither delivered the final code, B was methodical, transparent, and made real progress before an environment failure, whereas A produced a misleading no-op. B is slightly better because on the requested deliverable (working code) both effectively delivered nothing."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (3W/0T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference +60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 3,
"ties": 0,
"losses": 0,
"discordant": 3,
"direction": "better",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "better",
"rationale": "B satisfies all four rubric criteria including both size-limit layers and magic-byte content validation, whereas A misses the Kestrel limit and only validates Content-Type/extension. Both handle antiforgery and safe filenames equally. B is clearly more complete and secure.\""
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "better",
"rationale": "Both responses are high quality and correct. B is slightly better because it addresses the FormOptions.MultipartBodyLengthLimit which is a common gotcha that still causes exceptions on large multipart uploads, and adds content-type validation for video files matching the use case. A's advantage is enforcing per-file max size during streaming, but B covers the request limits more completely."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "better",
"rationale": "Both responses are correct, secure (GUID filenames), and well-structured. Response B better satisfies the rubric: it configures both the Kestrel body size limit and the multipart limit (A misses Kestrel, which would cause failures at 50MB), and it uses [FromForm] as the criterion specifies. B also adds magic-byte validation. A's manual ReadFormAsync approach is valid but A only restricts JPEG/PNG in B while allowing more types in A — a minor tradeoff. Overall B aligns more closely with the rubric, making it slightly better."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
}
],
"date": 1789836946473,
"model": "gpt-5.3-codex",
"tool": "customBiggerIsBetter"
},
{
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"benches": [
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Skilled Quality",
"value": 9.0,
"unit": "Score (0-10)",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Plugin Quality",
"overfitting": "high",
"value": 9.0,
"unit": "Score (0-10)",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Configure all three OpenTelemetry signals with correct OTLP export - Vanilla Quality",
"value": 9.5,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Skilled Quality",
"value": 10.0,
"unit": "Score (0-10)",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Plugin Quality",
"overfitting": "high",
"value": 1.6666666269302368,
"unit": "Score (0-10)",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Propagate trace context across a message queue - Vanilla Quality",
"value": 5.0,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Skilled Quality",
"value": 9.0,
"unit": "Score (0-10)",
"overfittingScore": 0.61,
"overfitting": "high"
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Plugin Quality",
"overfitting": "high",
"value": 9.0,
"unit": "Score (0-10)",
"overfittingScore": 0.61
},
{
"name": "configuring-opentelemetry-dotnet/Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core - Vanilla Quality",
"value": 9.0,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Skilled Quality",
"value": 6.4285712242126465,
"unit": "Score (0-10)",
"overfittingScore": 0.31,
"overfitting": "moderate"
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Plugin Quality",
"overfitting": "moderate",
"value": 6.0714287757873535,
"unit": "Score (0-10)",
"overfittingScore": 0.31
},
{
"name": "convert-blazor-server-to-webapp/Blazor Server app with CascadingAuthenticationState - Vanilla Quality",
"value": 6.0714287757873535,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Add a new API endpoint to an existing controller-based project - Vanilla Quality",
"value": 1.7857142686843872,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Skilled Quality",
"value": 9.5,
"unit": "Score (0-10)",
"overfittingScore": 0.69,
"overfitting": "high"
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Plugin Quality",
"overfitting": "high",
"value": 8.5,
"unit": "Score (0-10)",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Add error handling with ProblemDetails and IExceptionHandler - Vanilla Quality",
"value": 8.5,
"unit": "Score (0-10)"
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Skilled Quality",
"overfitting": "high",
"value": 2.115384578704834,
"unit": "Score (0-10)",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Plugin Quality",
"overfitting": "high",
"value": 1.923076868057251,
"unit": "Score (0-10)",
"overfittingScore": 0.69
},
{
"name": "dotnet-webapi/Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics - Vanilla Quality",
"value": 1.923076868057251,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Skilled Quality",
"value": 5.0,
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Implement secure file upload in ASP.NET Core 8 minimal API - Vanilla Quality",
"value": 5.0,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Skilled Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Plugin Quality",
"overfitting": "moderate",
"value": 8.333333015441895,
"unit": "Score (0-10)",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Stream very large file uploads without buffering - Vanilla Quality",
"value": 9.166666984558105,
"unit": "Score (0-10)"
},
{
"notActivated": true,
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Skilled Quality",
"value": 4.166666507720947,
"unit": "Score (0-10)",
"overfittingScore": 0.33,
"overfitting": "moderate"
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Plugin Quality",
"overfitting": "moderate",
"value": 5.833333492279053,
"unit": "Score (0-10)",
"overfittingScore": 0.33
},
{
"name": "minimal-api-file-upload/Upload multiple files with metadata in minimal API - Vanilla Quality",
"value": 10.0,
"unit": "Score (0-10)"
}
],
"verdictEvidence": [
{
"skillName": "configuring-opentelemetry-dotnet",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +33.3% (1W/2T/0L over 3 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +33.3% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 1,
"ties": 2,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 0.3333333333333333,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Propagate trace context across a message queue",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Configure all three OpenTelemetry signals with correct OTLP export",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
},
{
"scenarioName": "Propagate trace context across a message queue",
"direction": "better",
"rationale": "B follows the recommended inject/extract propagation pattern and explicitly parents the consumer span from extracted context. It has minor presentation/compile-completeness issues (such as an undefined tracer and arguably unnecessary carrier interface), but it is substantially more correct and directly addresses every rubric item than A's manual and fragile implementation."
},
{
"scenarioName": "Set up OpenTelemetry tracing and metrics with custom spans in ASP.NET Core",
"direction": "none",
"rationale": "Position-swap inconsistent (forward: A, reverse: B). Defaulting to tie."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/configuring-opentelemetry-dotnet/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/configuring-opentelemetry-dotnet/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "convert-blazor-server-to-webapp",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (1W/0T/0L over 1 preference-eligible stimulus vote(s), sign test p=0.500), mean preference +40.0% across 1 paired run(s) — underpowered (1 preference-eligible stimulus vote(s); a credible verdict needs at least 5, and this eval won every one of them) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 1,
"wins": 1,
"ties": 0,
"losses": 0,
"discordant": 1,
"direction": "better",
"pValue": 0.5,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Blazor Server app with CascadingAuthenticationState",
"direction": "better",
"rationale": "Both miss key conversion requirements: the wrapper removal, antiforgery middleware, proper .NET 8 App/Routes host structure, and an applied interactive render mode. B is marginally less destructive to the supplied application because it preserves the existing MapControllers endpoint and does not impose an unrequested cookie-authentication handler; its retained AddRazorPages call is unnecessary but generally less harmful. Neither is a complete correct conversion."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/convert-blazor-server-to-webapp/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/convert-blazor-server-to-webapp/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "dotnet-webapi",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "unmatched_trajectories",
"phase": "comparison_pairing"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win +100.0% (2W/0T/0L over 2 preference-eligible stimulus vote(s), sign test p=0.250), mean preference +70.0% across 2 paired run(s), 1 unmatched — inconclusive (unmatched trajectories)",
"gateEvidence": {
"stimulusVoteCount": 2,
"wins": 2,
"ties": 0,
"losses": 0,
"discordant": 2,
"direction": "better",
"pValue": 0.25,
"alpha": 0.05,
"netWin": 1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Add a new API endpoint to an existing controller-based project",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "activated",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Add error handling with ProblemDetails and IExceptionHandler",
"direction": "better",
"rationale": "B directly follows the requested modern .NET 8+ IExceptionHandler pattern and supplies a sealed, registered global handler while preserving correct RFC 7807 mappings and safe generic 500 output. A is functionally reasonable but misses the key modern handler architecture and associated registration/class requirements."
},
{
"scenarioName": "Create a CRUD Web API with minimal APIs, OpenAPI, and proper HTTP semantics",
"direction": "better",
"rationale": "Both fulfill the core requested API and validate it, but B provides substantially stronger evidence of the rubric-specific modern minimal-API practices, especially string enum serialization, robust HTTP/error semantics, and built-in OpenAPI without the apparent Swagger-package concern in A."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/dotnet-webapi/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/dotnet-webapi/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
},
{
"skillName": "minimal-api-file-upload",
"skillKind": "invocable",
"state": "INVALID_INCONCLUSIVE",
"stateReason": {
"code": "underpowered",
"phase": "eval_design"
},
"passed": false,
"regressed": false,
"preferenceRegressed": false,
"reason": "Net win -100.0% (0W/0T/3L over 3 preference-eligible stimulus vote(s), sign test p=0.125), mean preference -60.0% across 3 paired run(s) — underpowered (3 preference-eligible stimulus vote(s); a credible verdict needs at least 5) — add distinct, discriminating stimuli; repeated runs do not increase task breadth",
"gateEvidence": {
"stimulusVoteCount": 3,
"wins": 0,
"ties": 0,
"losses": 3,
"discordant": 3,
"direction": "worse",
"pValue": 0.12500000000000003,
"alpha": 0.05,
"netWin": -1,
"minimumNetWin": 0.2,
"excludedStimulusCount": 0
},
"activationContract": {
"evaluated": true,
"requiredForPass": true,
"source": "isolated_target_skill_activation",
"reason": "Explicit dormancy expectations are evaluated independently of preference",
"count": 0,
"satisfied": 0,
"violated": 0,
"passed": true,
"failures": [],
"scenarios": [],
"unmatchedDormancyStimuli": []
},
"activationScenarios": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Stream very large file uploads without buffering",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"expectation": "active",
"preferenceGateEligible": true,
"isolated": "missing-activation",
"isolatedActivationOnlyFailedRuns": 0,
"plugin": "plugin-no-activity-observed",
"pluginActivationOnlyFailedRuns": 0,
"invokedAgents": [],
"delegatedAgents": [],
"invokedSkills": [],
"isolatedTools": [],
"pluginTools": [],
"isolatedCompleted": null,
"pluginCompleted": null
}
],
"judgeRationales": [
{
"scenarioName": "Implement secure file upload in ASP.NET Core 8 minimal API",
"direction": "worse",
"rationale": "A is stronger because it explicitly and correctly enforces antiforgery for the upload endpoint, while both otherwise satisfy the size and safe-name basics and both omit required magic-byte/content validation."
},
{
"scenarioName": "Stream very large file uploads without buffering",
"direction": "worse",
"rationale": "Both answers give the correct streaming design and meet all three requested requirements. A is marginally stronger because its multipart parsing code is more self-contained and based on clearly standard APIs, while B references helpers/extensions whose availability is uncertain without additional code."
},
{
"scenarioName": "Upload multiple files with metadata in minimal API",
"direction": "worse",
"rationale": "A satisfies all three specified requirements and provides a working multipart form example. B omits the multipart limit, avoids the requested [FromForm] approach, and incorporates original client filenames into persisted names."
}
],
"links": [
{
"label": "Skill source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/plugins/dotnet-aspnetcore/skills/minimal-api-file-upload/SKILL.md"
},
{
"label": "Eval source",
"url": "https://github.com/dotnet/skills/blob/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3/tests/dotnet-aspnetcore/minimal-api-file-upload/eval.yaml"
},
{
"label": "Commit",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
}
]
}
],
"date": 1789836946581,
"model": "mai-code-1.1-flash",
"tool": "customBiggerIsBetter"
}
],
"SkillValue": [
{
"judgeModel": "gpt-5.6-terra",
"date": 1788627832294,
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"skills": [
{
"timedOut": false,
"pairedN": 3,
"activationFired": 3,
"treatment": {
"timeMs": 17166.666666666668,
"tokensOut": 1583.0,
"cacheRead": 21505.666666666668,
"cacheWrite": 8071.333333333333,
"tokens": 31180.0,
"n": 3,
"tokensIn": 29597.0
},
"baseAvailable": 3,
"baseline": {
"timeMs": 15229.333333333334,
"tokensOut": 1067.3333333333333,
"cacheRead": 8288.0,
"cacheWrite": 4825.666666666667,
"tokens": 14191.0,
"n": 3,
"tokensIn": 13123.666666666666
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 2,
"passTotal": 3,
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet"
},
{
"timedOut": false,
"pairedN": 1,
"activationFired": 1,
"treatment": {
"timeMs": 17422.0,
"tokensOut": 1588.0,
"cacheRead": 22334.0,
"cacheWrite": 10089.0,
"tokens": 34031.0,
"n": 1,
"tokensIn": 32443.0
},
"baseAvailable": 1,
"baseline": {
"timeMs": 21704.0,
"tokensOut": 2207.0,
"cacheRead": 22093.0,
"cacheWrite": 7045.0,
"tokens": 31360.0,
"n": 1,
"tokensIn": 29153.0
},
"activationExpected": 1,
"hasPassData": true,
"treatmentFail": 1,
"baselineFail": 1,
"passTotal": 1,
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp"
},
{
"timedOut": false,
"pairedN": 3,
"activationFired": 3,
"treatment": {
"timeMs": 85958.0,
"tokensOut": 6301.666666666667,
"cacheRead": 522504.0,
"cacheWrite": 20637.333333333332,
"tokens": 549558.0,
"n": 3,
"tokensIn": 543256.3333333334
},
"baseAvailable": 3,
"baseline": {
"timeMs": 110089.0,
"tokensOut": 8686.333333333334,
"cacheRead": 542073.3333333334,
"cacheWrite": 31432.0,
"tokens": 582329.6666666666,
"n": 3,
"tokensIn": 573643.3333333334
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 2,
"baselineFail": 3,
"passTotal": 3,
"treatAvailable": 3,
"skill": "dotnet-webapi"
},
{
"timedOut": false,
"pairedN": 3,
"activationFired": 3,
"treatment": {
"timeMs": 17092.666666666668,
"tokensOut": 1594.3333333333333,
"cacheRead": 21450.0,
"cacheWrite": 7904.666666666667,
"tokens": 30969.0,
"n": 3,
"tokensIn": 29374.666666666668
},
"baseAvailable": 3,
"baseline": {
"timeMs": 50163.0,
"tokensOut": 4873.666666666667,
"cacheRead": 132850.0,
"cacheWrite": 10060.0,
"tokens": 147830.33333333334,
"n": 3,
"tokensIn": 142956.66666666666
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 3,
"passTotal": 3,
"treatAvailable": 3,
"skill": "minimal-api-file-upload"
}
],
"model": "claude-haiku-4.5"
},
{
"judgeModel": "claude-opus-4.8",
"date": 1788627832436,
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"skills": [
{
"timedOut": false,
"pairedN": 3,
"activationFired": 2,
"treatment": {
"timeMs": 6041.666666666667,
"tokensOut": 539.0,
"cacheRead": 11776.0,
"cacheWrite": 0.0,
"tokens": 21828.333333333332,
"n": 3,
"tokensIn": 21289.333333333332
},
"baseAvailable": 3,
"baseline": {
"timeMs": 6846.333333333333,
"tokensOut": 706.6666666666666,
"cacheRead": 4608.0,
"cacheWrite": 0.0,
"tokens": 12412.666666666666,
"n": 3,
"tokensIn": 11706.0
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 0,
"passTotal": 3,
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet"
},
{
"timedOut": false,
"pairedN": 1,
"activationFired": 1,
"treatment": {
"timeMs": 5160.0,
"tokensOut": 608.0,
"cacheRead": 16384.0,
"cacheWrite": 0.0,
"tokens": 29065.0,
"n": 1,
"tokensIn": 28457.0
},
"baseAvailable": 1,
"baseline": {
"timeMs": 5120.0,
"tokensOut": 682.0,
"cacheRead": 4608.0,
"cacheWrite": 0.0,
"tokens": 12911.0,
"n": 1,
"tokensIn": 12229.0
},
"activationExpected": 1,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 0,
"passTotal": 1,
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp"
},
{
"timedOut": false,
"pairedN": 3,
"activationFired": 3,
"treatment": {
"timeMs": 7718.333333333333,
"tokensOut": 375.3333333333333,
"cacheRead": 43520.0,
"cacheWrite": 0.0,
"tokens": 57455.333333333336,
"n": 3,
"tokensIn": 57080.0
},
"baseAvailable": 3,
"baseline": {
"timeMs": 3262.0,
"tokensOut": 361.0,
"cacheRead": 4608.0,
"cacheWrite": 0.0,
"tokens": 12125.666666666666,
"n": 3,
"tokensIn": 11764.666666666666
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 2,
"baselineFail": 3,
"passTotal": 3,
"treatAvailable": 3,
"skill": "dotnet-webapi"
},
{
"timedOut": false,
"pairedN": 3,
"activationFired": 3,
"treatment": {
"timeMs": 5886.0,
"tokensOut": 643.0,
"cacheRead": 15360.0,
"cacheWrite": 0.0,
"tokens": 26649.333333333332,
"n": 3,
"tokensIn": 26006.333333333332
},
"baseAvailable": 3,
"baseline": {
"timeMs": 4800.0,
"tokensOut": 575.0,
"cacheRead": 4608.0,
"cacheWrite": 0.0,
"tokens": 12282.0,
"n": 3,
"tokensIn": 11707.0
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 1,
"passTotal": 3,
"treatAvailable": 3,
"skill": "minimal-api-file-upload"
}
],
"model": "gpt-5.3-codex"
},
{
"judgeModel": "gpt-5.6-terra",
"date": 1788627832580,
"commit": {
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00"
},
"skills": [
{
"timedOut": false,
"pairedN": 3,
"activationFired": 0,
"treatment": {
"timeMs": 20826.333333333332,
"tokensOut": 2975.3333333333335,
"cacheRead": 6400.0,
"cacheWrite": 0.0,
"tokens": 13227.0,
"n": 3,
"tokensIn": 10251.666666666666
},
"baseAvailable": 3,
"baseline": {
"timeMs": 23236.333333333332,
"tokensOut": 3139.6666666666665,
"cacheRead": 6400.0,
"cacheWrite": 0.0,
"tokens": 13310.0,
"n": 3,
"tokensIn": 10170.333333333334
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 0,
"passTotal": 3,
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet"
},
{
"timedOut": false,
"pairedN": 1,
"activationFired": 0,
"treatment": {
"timeMs": 81868.0,
"tokensOut": 9611.0,
"cacheRead": 233728.0,
"cacheWrite": 0.0,
"tokens": 279985.0,
"n": 1,
"tokensIn": 270374.0
},
"baseAvailable": 1,
"baseline": {
"timeMs": 50987.0,
"tokensOut": 8665.0,
"cacheRead": 7936.0,
"cacheWrite": 0.0,
"tokens": 30257.0,
"n": 1,
"tokensIn": 21592.0
},
"activationExpected": 1,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 1,
"passTotal": 1,
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp"
},
{
"timedOut": false,
"pairedN": 3,
"activationFired": 3,
"treatment": {
"timeMs": 136750.0,
"tokensOut": 10569.0,
"cacheRead": 547968.0,
"cacheWrite": 0.0,
"tokens": 606111.6666666666,
"n": 3,
"tokensIn": 595542.6666666666
},
"baseAvailable": 3,
"baseline": {
"timeMs": 165440.33333333334,
"tokensOut": 10910.0,
"cacheRead": 591914.6666666666,
"cacheWrite": 0.0,
"tokens": 652923.3333333334,
"n": 3,
"tokensIn": 642013.3333333334
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 2,
"baselineFail": 2,
"passTotal": 3,
"treatAvailable": 3,
"skill": "dotnet-webapi"
},
{
"timedOut": false,
"pairedN": 3,
"activationFired": 0,
"treatment": {
"timeMs": 28761.0,
"tokensOut": 4184.0,
"cacheRead": 26624.0,
"cacheWrite": 0.0,
"tokens": 37267.666666666664,
"n": 3,
"tokensIn": 33083.666666666664
},
"baseAvailable": 3,
"baseline": {
"timeMs": 64285.333333333336,
"tokensOut": 6484.666666666667,
"cacheRead": 233216.0,
"cacheWrite": 0.0,
"tokens": 258496.33333333334,
"n": 3,
"tokensIn": 252011.66666666666
},
"activationExpected": 3,
"hasPassData": true,
"treatmentFail": 0,
"baselineFail": 1,
"passTotal": 3,
"treatAvailable": 3,
"skill": "minimal-api-file-upload"
}
],
"model": "mai-code-1-flash-picker"
},
{
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"skills": [
{
"skill": "configuring-opentelemetry-dotnet",
"activationExpected": 3,
"baseline": {
"timeMs": 19471.333333333332,
"tokens": 19405.666666666668,
"cacheRead": 11293.0,
"n": 3,
"tokensOut": 1615.0,
"cacheWrite": 6495.666666666667,
"tokensIn": 17790.666666666668
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 1,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 16785.333333333332,
"tokens": 42035.0,
"cacheRead": 29229.666666666668,
"n": 3,
"tokensOut": 1598.6666666666667,
"cacheWrite": 11202.666666666666,
"tokensIn": 40436.333333333336
},
"treatAvailable": 3,
"passTotal": 3
},
{
"skill": "convert-blazor-server-to-webapp",
"activationExpected": 1,
"baseline": {
"timeMs": 25510.0,
"tokens": 21136.0,
"cacheRead": 11293.0,
"n": 1,
"tokensOut": 2388.0,
"cacheWrite": 7453.0,
"tokensIn": 18748.0
},
"activationFired": 1,
"timedOut": false,
"baseAvailable": 1,
"baselineFail": 0,
"treatmentFail": 0,
"pairedN": 1,
"hasPassData": true,
"treatment": {
"timeMs": 14623.0,
"tokens": 45546.0,
"cacheRead": 30381.0,
"n": 1,
"tokensOut": 1340.0,
"cacheWrite": 13821.0,
"tokensIn": 44206.0
},
"treatAvailable": 1,
"passTotal": 1
},
{
"skill": "dotnet-webapi",
"activationExpected": 3,
"baseline": {
"timeMs": 65722.66666666667,
"tokens": 242458.33333333334,
"cacheRead": 226657.0,
"n": 3,
"tokensOut": 4484.666666666667,
"cacheWrite": 11294.0,
"tokensIn": 237973.66666666666
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 2,
"treatmentFail": 2,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 104568.66666666667,
"tokens": 511762.0,
"cacheRead": 480579.0,
"n": 3,
"tokensOut": 6971.333333333333,
"cacheWrite": 24179.666666666668,
"tokensIn": 504790.6666666667
},
"treatAvailable": 3,
"passTotal": 3
},
{
"skill": "minimal-api-file-upload",
"activationExpected": 3,
"baseline": {
"timeMs": 17493.333333333332,
"tokens": 19205.0,
"cacheRead": 11293.0,
"n": 3,
"tokensOut": 1419.6666666666667,
"cacheWrite": 6490.333333333333,
"tokensIn": 17785.333333333332
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 0,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 65094.333333333336,
"tokens": 212182.66666666666,
"cacheRead": 193350.66666666666,
"n": 3,
"tokensOut": 4267.0,
"cacheWrite": 14549.0,
"tokensIn": 207915.66666666666
},
"treatAvailable": 3,
"passTotal": 3
}
],
"date": 1788715663936,
"judgeModel": "gpt-5.6-terra",
"model": "claude-opus-5"
},
{
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"skills": [
{
"skill": "configuring-opentelemetry-dotnet",
"activationExpected": 3,
"baseline": {
"timeMs": 16982.666666666668,
"tokens": 31547.333333333332,
"cacheRead": 23229.0,
"n": 3,
"tokensOut": 1688.6666666666667,
"cacheWrite": 6626.333333333333,
"tokensIn": 29858.666666666668
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 0,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 11968.0,
"tokens": 41777.666666666664,
"cacheRead": 29311.666666666668,
"n": 3,
"tokensOut": 1321.3333333333333,
"cacheWrite": 11140.666666666666,
"tokensIn": 40456.333333333336
},
"treatAvailable": 3,
"passTotal": 3
},
{
"skill": "convert-blazor-server-to-webapp",
"activationExpected": 1,
"baseline": {
"timeMs": 13959.0,
"tokens": 20373.0,
"cacheRead": 11361.0,
"n": 1,
"tokensOut": 1610.0,
"cacheWrite": 7400.0,
"tokensIn": 18763.0
},
"activationFired": 1,
"timedOut": false,
"baseAvailable": 1,
"baselineFail": 1,
"treatmentFail": 0,
"pairedN": 1,
"hasPassData": true,
"treatment": {
"timeMs": 12626.0,
"tokens": 45478.0,
"cacheRead": 30463.0,
"n": 1,
"tokensOut": 1268.0,
"cacheWrite": 13743.0,
"tokensIn": 44210.0
},
"treatAvailable": 1,
"passTotal": 1
},
{
"skill": "dotnet-webapi",
"activationExpected": 3,
"baseline": {
"timeMs": 83323.33333333333,
"tokens": 500603.6666666667,
"cacheRead": 479922.6666666667,
"n": 3,
"tokensOut": 4969.0,
"cacheWrite": 15676.666666666666,
"tokensIn": 495634.6666666667
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 2,
"treatmentFail": 2,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 63832.333333333336,
"tokens": 495098.3333333333,
"cacheRead": 467338.3333333333,
"n": 3,
"tokensOut": 5567.333333333333,
"cacheWrite": 22160.0,
"tokensIn": 489531.0
},
"treatAvailable": 3,
"passTotal": 3
},
{
"skill": "minimal-api-file-upload",
"activationExpected": 3,
"baseline": {
"timeMs": 66732.66666666667,
"tokens": 288282.0,
"cacheRead": 270618.6666666667,
"n": 3,
"tokensOut": 5861.333333333333,
"cacheWrite": 11779.333333333334,
"tokensIn": 282420.6666666667
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 1,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 14019.666666666666,
"tokens": 56405.0,
"cacheRead": 44034.0,
"n": 3,
"tokensOut": 1450.6666666666667,
"cacheWrite": 10915.0,
"tokensIn": 54954.333333333336
},
"treatAvailable": 3,
"passTotal": 3
}
],
"date": 1788715664025,
"judgeModel": "gpt-5.6-terra",
"model": "claude-sonnet-5"
},
{
"commit": {
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
}
},
"skills": [
{
"skill": "configuring-opentelemetry-dotnet",
"activationExpected": 3,
"baseline": {
"timeMs": 11076.666666666666,
"tokens": 12656.666666666666,
"cacheRead": 3413.3333333333335,
"n": 3,
"tokensOut": 859.0,
"cacheWrite": 3932.6666666666665,
"tokensIn": 11797.666666666666
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 0,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 12548.0,
"tokens": 27353.666666666668,
"cacheRead": 16896.0,
"n": 3,
"tokensOut": 1124.0,
"cacheWrite": 0.0,
"tokensIn": 26229.666666666668
},
"treatAvailable": 3,
"passTotal": 3
},
{
"skill": "convert-blazor-server-to-webapp",
"activationExpected": 1,
"baseline": {
"timeMs": 11802.0,
"tokens": 13347.0,
"cacheRead": 5120.0,
"n": 1,
"tokensOut": 1029.0,
"cacheWrite": 0.0,
"tokensIn": 12318.0
},
"activationFired": 1,
"timedOut": false,
"baseAvailable": 1,
"baselineFail": 0,
"treatmentFail": 0,
"pairedN": 1,
"hasPassData": true,
"treatment": {
"timeMs": 12635.0,
"tokens": 29834.0,
"cacheRead": 17408.0,
"n": 1,
"tokensOut": 1181.0,
"cacheWrite": 0.0,
"tokensIn": 28653.0
},
"treatAvailable": 1,
"passTotal": 1
},
{
"skill": "dotnet-webapi",
"activationExpected": 3,
"baseline": {
"timeMs": 37870.333333333336,
"tokens": 138288.33333333334,
"cacheRead": 116736.0,
"n": 3,
"tokensOut": 2853.0,
"cacheWrite": 0.0,
"tokensIn": 135435.33333333334
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 2,
"treatmentFail": 2,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 96897.33333333333,
"tokens": 380007.6666666667,
"cacheRead": 344852.3333333333,
"n": 3,
"tokensOut": 7686.666666666667,
"cacheWrite": 21046.0,
"tokensIn": 372321.0
},
"treatAvailable": 3,
"passTotal": 3
},
{
"skill": "minimal-api-file-upload",
"activationExpected": 3,
"baseline": {
"timeMs": 22501.666666666668,
"tokens": 13314.666666666666,
"cacheRead": 1706.6666666666667,
"n": 3,
"tokensOut": 1517.6666666666667,
"cacheWrite": 7863.333333333333,
"tokensIn": 11797.0
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"baselineFail": 0,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"treatment": {
"timeMs": 16306.333333333334,
"tokens": 27556.333333333332,
"cacheRead": 14872.666666666666,
"n": 3,
"tokensOut": 1360.6666666666667,
"cacheWrite": 4788.333333333333,
"tokensIn": 26195.666666666668
},
"treatAvailable": 3,
"passTotal": 3
}
],
"date": 1788715664103,
"judgeModel": "claude-opus-4.8",
"model": "gpt-5.6-sol"
},
{
"commit": {
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"author": {
"username": "AbhitejJohn",
"name": "Amaury Levé"
},
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
},
"skills": [
{
"baseline": {
"timeMs": 15495.333333333334,
"tokensOut": 1169.0,
"cacheRead": 8743.333333333334,
"cacheWrite": 14719.0,
"n": 3,
"tokensIn": 23466.666666666668,
"tokens": 24635.666666666668
},
"treatAvailable": 3,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"activationFired": 3,
"timedOut": false,
"treatment": {
"timeMs": 13187.0,
"tokensOut": 1049.0,
"cacheRead": 21532.0,
"cacheWrite": 8047.0,
"n": 3,
"tokensIn": 29585.0,
"tokens": 30634.0
},
"baselineFail": 0,
"skill": "configuring-opentelemetry-dotnet"
},
{
"baseline": {
"timeMs": 7175.0,
"tokensOut": 784.0,
"cacheRead": 8313.0,
"cacheWrite": 5497.0,
"n": 1,
"tokensIn": 13813.0,
"tokens": 14597.0
},
"treatAvailable": 1,
"passTotal": 1,
"hasPassData": true,
"activationExpected": 1,
"pairedN": 1,
"baseAvailable": 1,
"treatmentFail": 1,
"activationFired": 1,
"timedOut": false,
"treatment": {
"timeMs": 12412.0,
"tokensOut": 1000.0,
"cacheRead": 22362.0,
"cacheWrite": 10068.0,
"n": 1,
"tokensIn": 32436.0,
"tokens": 33436.0
},
"baselineFail": 1,
"skill": "convert-blazor-server-to-webapp"
},
{
"baseline": {
"timeMs": 92259.33333333333,
"tokensOut": 5585.333333333333,
"cacheRead": 391128.3333333333,
"cacheWrite": 15487.666666666666,
"n": 3,
"tokensIn": 406638.6666666667,
"tokens": 412224.0
},
"treatAvailable": 3,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 2,
"activationFired": 3,
"timedOut": false,
"treatment": {
"timeMs": 64420.666666666664,
"tokensOut": 4659.666666666667,
"cacheRead": 269378.6666666667,
"cacheWrite": 16360.333333333334,
"n": 3,
"tokensIn": 285797.6666666667,
"tokens": 290457.3333333333
},
"baselineFail": 2,
"skill": "dotnet-webapi"
},
{
"baseline": {
"timeMs": 13898.333333333334,
"tokensOut": 1007.6666666666666,
"cacheRead": 17054.666666666668,
"cacheWrite": 6383.333333333333,
"n": 3,
"tokensIn": 23442.333333333332,
"tokens": 24450.0
},
"treatAvailable": 3,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"activationFired": 3,
"timedOut": false,
"treatment": {
"timeMs": 14241.0,
"tokensOut": 1149.6666666666667,
"cacheRead": 21476.666666666668,
"cacheWrite": 7881.0,
"n": 3,
"tokensIn": 29363.666666666668,
"tokens": 30513.333333333332
},
"baselineFail": 0,
"skill": "minimal-api-file-upload"
}
],
"date": 1788790039242,
"model": "claude-sonnet-4.6",
"judgeModel": "gpt-5.6-terra"
},
{
"commit": {
"message": "Improve non-passing dotnet-test scenarios (#1114)",
"id": "ac8f41264bdd557e58924a3110eea8e0917dcf4d",
"timestamp": "2026-09-04T10:21:25+00:00",
"author": {
"username": "AbhitejJohn",
"name": "Amaury Levé"
},
"url": "https://github.com/dotnet/skills/commit/ac8f41264bdd557e58924a3110eea8e0917dcf4d"
},
"skills": [
{
"baseline": {
"timeMs": 15110.333333333334,
"tokensOut": 1156.3333333333333,
"cacheRead": 0.0,
"cacheWrite": 11733.333333333334,
"n": 3,
"tokensIn": 11736.333333333334,
"tokens": 12892.666666666666
},
"treatAvailable": 3,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"activationFired": 3,
"timedOut": false,
"treatment": {
"timeMs": 10949.666666666666,
"tokensOut": 921.6666666666666,
"cacheRead": 11814.666666666666,
"cacheWrite": 14304.333333333334,
"n": 3,
"tokensIn": 26125.0,
"tokens": 27046.666666666668
},
"baselineFail": 0,
"skill": "configuring-opentelemetry-dotnet"
},
{
"baseline": {
"timeMs": 27963.0,
"tokensOut": 2419.0,
"cacheRead": 24734.0,
"cacheWrite": 12570.0,
"n": 1,
"tokensIn": 37313.0,
"tokens": 39732.0
},
"treatAvailable": 1,
"passTotal": 1,
"hasPassData": true,
"activationExpected": 1,
"pairedN": 1,
"baseAvailable": 1,
"treatmentFail": 0,
"activationFired": 1,
"timedOut": false,
"treatment": {
"timeMs": 18711.0,
"tokensOut": 1676.0,
"cacheRead": 28532.0,
"cacheWrite": 16299.0,
"n": 1,
"tokensIn": 44840.0,
"tokens": 46516.0
},
"baselineFail": 0,
"skill": "convert-blazor-server-to-webapp"
},
{
"baseline": {
"timeMs": 32755.333333333332,
"tokensOut": 2203.0,
"cacheRead": 110617.66666666667,
"cacheWrite": 14435.0,
"n": 3,
"tokensIn": 125078.66666666667,
"tokens": 127281.66666666667
},
"treatAvailable": 3,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 2,
"activationFired": 3,
"timedOut": false,
"treatment": {
"timeMs": 60614.333333333336,
"tokensOut": 5676.0,
"cacheRead": 311777.6666666667,
"cacheWrite": 30022.666666666668,
"n": 3,
"tokensIn": 341845.3333333333,
"tokens": 347521.3333333333
},
"baselineFail": 2,
"skill": "dotnet-webapi"
},
{
"baseline": {
"timeMs": 13729.0,
"tokensOut": 1268.6666666666667,
"cacheRead": 11807.666666666666,
"cacheWrite": 11891.666666666666,
"n": 3,
"tokensIn": 23705.333333333332,
"tokens": 24974.0
},
"treatAvailable": 3,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"activationFired": 3,
"timedOut": false,
"treatment": {
"timeMs": 14321.0,
"tokensOut": 1175.6666666666667,
"cacheRead": 11778.333333333334,
"cacheWrite": 14296.0,
"n": 3,
"tokensIn": 26080.333333333332,
"tokens": 27256.0
},
"baselineFail": 0,
"skill": "minimal-api-file-upload"
}
],
"date": 1788790039358,
"model": "gpt-5.6-luna",
"judgeModel": "claude-opus-4.8"
},
{
"model": "claude-haiku-4.5",
"judgeModel": "gpt-5.6-terra",
"skills": [
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 21505.666666666668,
"tokensOut": 1693.0,
"tokensIn": 29597.0,
"cacheWrite": 8071.333333333333,
"timeMs": 18155.666666666668,
"n": 3,
"tokens": 31290.0
},
"timedOut": false,
"baseline": {
"cacheRead": 8288.0,
"tokensOut": 1431.0,
"tokensIn": 13125.0,
"cacheWrite": 4827.0,
"timeMs": 15514.666666666666,
"n": 3,
"tokens": 14556.0
},
"treatmentFail": 0,
"skill": "configuring-opentelemetry-dotnet",
"passTotal": 3,
"baselineFail": 2,
"treatAvailable": 3,
"activationFired": 3,
"hasPassData": true
},
{
"activationExpected": 1,
"pairedN": 1,
"baseAvailable": 1,
"treatment": {
"cacheRead": 22335.0,
"tokensOut": 2139.0,
"tokensIn": 32475.0,
"cacheWrite": 10120.0,
"timeMs": 22668.0,
"n": 1,
"tokens": 34614.0
},
"timedOut": false,
"baseline": {
"cacheRead": 8288.0,
"tokensOut": 1676.0,
"tokensIn": 13817.0,
"cacheWrite": 5519.0,
"timeMs": 16565.0,
"n": 1,
"tokens": 15493.0
},
"treatmentFail": 1,
"skill": "convert-blazor-server-to-webapp",
"passTotal": 1,
"baselineFail": 1,
"treatAvailable": 1,
"activationFired": 1,
"hasPassData": true
},
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 712067.3333333334,
"tokensOut": 10732.666666666666,
"tokensIn": 744270.6666666666,
"cacheWrite": 32047.333333333332,
"timeMs": 133356.33333333334,
"n": 3,
"tokens": 755003.3333333334
},
"timedOut": false,
"baseline": {
"cacheRead": 623393.3333333334,
"tokensOut": 11662.666666666666,
"tokensIn": 647698.6666666666,
"cacheWrite": 24164.666666666668,
"timeMs": 138554.66666666666,
"n": 3,
"tokens": 659361.3333333334
},
"treatmentFail": 2,
"skill": "dotnet-webapi",
"passTotal": 3,
"baselineFail": 3,
"treatAvailable": 3,
"activationFired": 3,
"hasPassData": true
},
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 26850.333333333332,
"tokensOut": 1501.0,
"tokensIn": 34883.666666666664,
"cacheWrite": 8011.666666666667,
"timeMs": 16339.333333333334,
"n": 3,
"tokens": 36384.666666666664
},
"timedOut": false,
"baseline": {
"cacheRead": 158303.0,
"tokensOut": 5844.333333333333,
"tokensIn": 171163.0,
"cacheWrite": 12810.0,
"timeMs": 60337.0,
"n": 3,
"tokens": 177007.33333333334
},
"treatmentFail": 0,
"skill": "minimal-api-file-upload",
"passTotal": 3,
"baselineFail": 3,
"treatAvailable": 3,
"activationFired": 3,
"hasPassData": true
}
],
"date": 1788885915461,
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
},
{
"model": "gpt-5.3-codex",
"judgeModel": "claude-opus-4.8",
"skills": [
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 15360.0,
"tokensOut": 529.3333333333334,
"tokensIn": 26040.333333333332,
"cacheWrite": 0.0,
"timeMs": 9118.666666666666,
"n": 3,
"tokens": 26569.666666666668
},
"timedOut": false,
"baseline": {
"cacheRead": 4608.0,
"tokensOut": 631.0,
"tokensIn": 11707.333333333334,
"cacheWrite": 0.0,
"timeMs": 8248.333333333334,
"n": 3,
"tokens": 12338.333333333334
},
"treatmentFail": 0,
"skill": "configuring-opentelemetry-dotnet",
"passTotal": 3,
"baselineFail": 0,
"treatAvailable": 3,
"activationFired": 3,
"hasPassData": true
},
{
"activationExpected": 1,
"pairedN": 1,
"baseAvailable": 1,
"treatment": {
"cacheRead": 16384.0,
"tokensOut": 602.0,
"tokensIn": 28460.0,
"cacheWrite": 0.0,
"timeMs": 6209.0,
"n": 1,
"tokens": 29062.0
},
"timedOut": false,
"baseline": {
"cacheRead": 4608.0,
"tokensOut": 474.0,
"tokensIn": 12229.0,
"cacheWrite": 0.0,
"timeMs": 4725.0,
"n": 1,
"tokens": 12703.0
},
"treatmentFail": 0,
"skill": "convert-blazor-server-to-webapp",
"passTotal": 1,
"baselineFail": 1,
"treatAvailable": 1,
"activationFired": 1,
"hasPassData": true
},
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 21674.666666666668,
"tokensOut": 273.3333333333333,
"tokensIn": 34238.666666666664,
"cacheWrite": 0.0,
"timeMs": 5085.0,
"n": 3,
"tokens": 34512.0
},
"timedOut": false,
"baseline": {
"cacheRead": 23893.333333333332,
"tokensOut": 456.3333333333333,
"tokensIn": 32452.333333333332,
"cacheWrite": 0.0,
"timeMs": 11444.333333333334,
"n": 3,
"tokens": 32908.666666666664
},
"treatmentFail": 2,
"skill": "dotnet-webapi",
"passTotal": 3,
"baselineFail": 3,
"treatAvailable": 3,
"activationFired": 3,
"hasPassData": true
},
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 15360.0,
"tokensOut": 627.6666666666666,
"tokensIn": 26007.333333333332,
"cacheWrite": 0.0,
"timeMs": 7234.333333333333,
"n": 3,
"tokens": 26635.0
},
"timedOut": false,
"baseline": {
"cacheRead": 4608.0,
"tokensOut": 569.0,
"tokensIn": 11707.0,
"cacheWrite": 0.0,
"timeMs": 5935.666666666667,
"n": 3,
"tokens": 12276.0
},
"treatmentFail": 0,
"skill": "minimal-api-file-upload",
"passTotal": 3,
"baselineFail": 1,
"treatAvailable": 3,
"activationFired": 3,
"hasPassData": true
}
],
"date": 1788885915581,
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
},
{
"model": "mai-code-1-flash-picker",
"judgeModel": "gpt-5.6-terra",
"skills": [
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 6400.0,
"tokensOut": 3395.0,
"tokensIn": 10251.0,
"cacheWrite": 0.0,
"timeMs": 21393.666666666668,
"n": 3,
"tokens": 13646.0
},
"timedOut": false,
"baseline": {
"cacheRead": 33834.666666666664,
"tokensOut": 3837.0,
"tokensIn": 44860.666666666664,
"cacheWrite": 0.0,
"timeMs": 34303.333333333336,
"n": 3,
"tokens": 48697.666666666664
},
"treatmentFail": 0,
"skill": "configuring-opentelemetry-dotnet",
"passTotal": 3,
"baselineFail": 0,
"treatAvailable": 3,
"activationFired": 0,
"hasPassData": true
},
{
"activationExpected": 1,
"pairedN": 1,
"baseAvailable": 1,
"treatment": {
"cacheRead": 211584.0,
"tokensOut": 7132.0,
"tokensIn": 247705.0,
"cacheWrite": 0.0,
"timeMs": 69459.0,
"n": 1,
"tokens": 254837.0
},
"timedOut": false,
"baseline": {
"cacheRead": 298624.0,
"tokensOut": 12893.0,
"tokensIn": 331072.0,
"cacheWrite": 0.0,
"timeMs": 114875.0,
"n": 1,
"tokens": 343965.0
},
"treatmentFail": 0,
"skill": "convert-blazor-server-to-webapp",
"passTotal": 1,
"baselineFail": 1,
"treatAvailable": 1,
"activationFired": 1,
"hasPassData": true
},
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 651477.3333333334,
"tokensOut": 11657.333333333334,
"tokensIn": 708344.3333333334,
"cacheWrite": 0.0,
"timeMs": 154630.66666666666,
"n": 3,
"tokens": 720001.6666666666
},
"timedOut": false,
"baseline": {
"cacheRead": 620586.6666666666,
"tokensOut": 11013.333333333334,
"tokensIn": 661621.6666666666,
"cacheWrite": 0.0,
"timeMs": 184028.66666666666,
"n": 3,
"tokens": 672635.0
},
"treatmentFail": 2,
"skill": "dotnet-webapi",
"passTotal": 3,
"baselineFail": 3,
"treatAvailable": 3,
"activationFired": 3,
"hasPassData": true
},
{
"activationExpected": 3,
"pairedN": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 76928.0,
"tokensOut": 5427.666666666667,
"tokensIn": 84881.66666666667,
"cacheWrite": 0.0,
"timeMs": 61755.333333333336,
"n": 3,
"tokens": 90309.33333333333
},
"timedOut": false,
"baseline": {
"cacheRead": 42965.333333333336,
"tokensOut": 4752.666666666667,
"tokensIn": 50822.666666666664,
"cacheWrite": 0.0,
"timeMs": 34898.0,
"n": 3,
"tokens": 55575.333333333336
},
"treatmentFail": 1,
"skill": "minimal-api-file-upload",
"passTotal": 3,
"baselineFail": 1,
"treatAvailable": 3,
"activationFired": 0,
"hasPassData": true
}
],
"date": 1788885915746,
"commit": {
"id": "fbeeafe261b0fe704b9a95c58fd9fdbe34e96964",
"author": {
"username": "AbhitejJohn",
"name": "Viktor Hofer"
},
"message": "Delete msbuild-server skill (#1123)",
"timestamp": "2026-09-07T09:11:54+00:00",
"url": "https://github.com/dotnet/skills/commit/fbeeafe261b0fe704b9a95c58fd9fdbe34e96964"
}
},
{
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1149 from dotnet/abhitejjohn-vally-014-ci-proof",
"url": "https://github.com/dotnet/skills/commit/a8fece0fce5f8b0737754a332a1a7c6487e8f927",
"timestamp": "2026-09-09T17:53:08+00:00",
"id": "a8fece0fce5f8b0737754a332a1a7c6487e8f927"
},
"model": "claude-opus-4.8",
"skills": [
{
"treatmentFail": 0,
"skill": "configuring-opentelemetry-dotnet",
"hasPassData": false,
"baseAvailable": 0,
"baselineFail": 0,
"activationFired": 0,
"timedOut": false,
"treatAvailable": 0,
"passTotal": 0,
"baseline": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"treatment": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"pairedN": 0,
"activationExpected": 0
},
{
"treatmentFail": 0,
"skill": "convert-blazor-server-to-webapp",
"hasPassData": false,
"baseAvailable": 0,
"baselineFail": 0,
"activationFired": 0,
"timedOut": false,
"treatAvailable": 0,
"passTotal": 0,
"baseline": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"treatment": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"pairedN": 0,
"activationExpected": 0
},
{
"treatmentFail": 0,
"skill": "dotnet-webapi",
"hasPassData": false,
"baseAvailable": 0,
"baselineFail": 0,
"activationFired": 0,
"timedOut": false,
"treatAvailable": 0,
"passTotal": 0,
"baseline": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"treatment": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"pairedN": 0,
"activationExpected": 0
},
{
"treatmentFail": 0,
"skill": "minimal-api-file-upload",
"hasPassData": false,
"baseAvailable": 0,
"baselineFail": 0,
"activationFired": 0,
"timedOut": false,
"treatAvailable": 0,
"passTotal": 0,
"baseline": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"treatment": {
"cacheWrite": null,
"timeMs": null,
"n": 0,
"tokens": null,
"cacheRead": null,
"tokensOut": null,
"tokensIn": null
},
"pairedN": 0,
"activationExpected": 0
}
],
"date": 1789036360813,
"judgeModel": "gpt-5.6-terra"
},
{
"model": "gpt-5.6-luna",
"skills": [
{
"treatAvailable": 3,
"pairedN": 3,
"skill": "configuring-opentelemetry-dotnet",
"baseAvailable": 3,
"baselineFail": 0,
"activationExpected": 3,
"treatment": {
"cacheWrite": 14185.666666666666,
"tokensIn": 25889.0,
"timeMs": 12029.666666666666,
"tokens": 26885.0,
"tokensOut": 996.0,
"cacheRead": 11697.333333333334,
"n": 3
},
"timedOut": false,
"hasPassData": true,
"treatmentFail": 0,
"baseline": {
"cacheWrite": 12704.0,
"tokensIn": 16579.0,
"timeMs": 14945.333333333334,
"tokens": 17828.666666666668,
"tokensOut": 1249.6666666666667,
"cacheRead": 3871.0,
"n": 3
},
"activationFired": 3,
"passTotal": 3
},
{
"treatAvailable": 1,
"pairedN": 1,
"skill": "convert-blazor-server-to-webapp",
"baseAvailable": 1,
"baselineFail": 0,
"activationExpected": 1,
"treatment": {
"cacheWrite": 16196.0,
"tokensIn": 44503.0,
"timeMs": 15418.0,
"tokens": 45871.0,
"tokensOut": 1368.0,
"cacheRead": 28298.0,
"n": 1
},
"timedOut": false,
"hasPassData": true,
"treatmentFail": 0,
"baseline": {
"cacheWrite": 12446.0,
"tokensIn": 36943.0,
"timeMs": 24687.0,
"tokens": 39519.0,
"tokensOut": 2576.0,
"cacheRead": 24488.0,
"n": 1
},
"activationFired": 1,
"passTotal": 1
},
{
"treatAvailable": 3,
"pairedN": 3,
"skill": "dotnet-webapi",
"baseAvailable": 3,
"baselineFail": 3,
"activationExpected": 3,
"treatment": {
"cacheWrite": 22544.333333333332,
"tokensIn": 234310.0,
"timeMs": 42465.666666666664,
"tokens": 238005.33333333334,
"tokensOut": 3695.3333333333335,
"cacheRead": 211733.66666666666,
"n": 3
},
"timedOut": false,
"hasPassData": true,
"treatmentFail": 2,
"baseline": {
"cacheWrite": 18325.666666666668,
"tokensIn": 145041.33333333334,
"timeMs": 55379.0,
"tokens": 148501.33333333334,
"tokensOut": 3460.0,
"cacheRead": 126688.66666666667,
"n": 3
},
"activationFired": 3,
"passTotal": 3
},
{
"treatAvailable": 3,
"pairedN": 3,
"skill": "minimal-api-file-upload",
"baseAvailable": 3,
"baselineFail": 2,
"activationExpected": 3,
"treatment": {
"cacheWrite": 14182.333333333334,
"tokensIn": 25849.666666666668,
"timeMs": 12902.666666666666,
"tokens": 27033.333333333332,
"tokensOut": 1183.6666666666667,
"cacheRead": 11661.333333333334,
"n": 3
},
"timedOut": false,
"hasPassData": true,
"treatmentFail": 0,
"baseline": {
"cacheWrite": 11616.333333333334,
"tokensIn": 11619.333333333334,
"timeMs": 14212.0,
"tokens": 12741.666666666666,
"tokensOut": 1122.3333333333333,
"cacheRead": 0.0,
"n": 3
},
"activationFired": 3,
"passTotal": 3
}
],
"judgeModel": "claude-opus-4.8",
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "8a5a42d3e392b402768fc29416831643b79e402b",
"message": "Merge pull request #1153 from dotnet/abhitejjohn-vally-lock-concurrency-proof",
"timestamp": "2026-09-10T21:01:20+00:00",
"url": "https://github.com/dotnet/skills/commit/8a5a42d3e392b402768fc29416831643b79e402b"
},
"date": 1789129571434
},
{
"judgeModel": "gpt-5.6-terra",
"skills": [
{
"baselineFail": 2,
"pairedN": 3,
"baseAvailable": 3,
"activationFired": 3,
"skill": "configuring-opentelemetry-dotnet",
"treatment": {
"cacheRead": 21249.333333333332,
"tokensIn": 29340.0,
"tokens": 30900.666666666668,
"timeMs": 16628.0,
"cacheWrite": 8070.666666666667,
"n": 3,
"tokensOut": 1560.6666666666667
},
"activationExpected": 3,
"timedOut": false,
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"baseline": {
"cacheRead": 8160.0,
"tokensIn": 12996.666666666666,
"tokens": 14081.333333333334,
"timeMs": 12935.666666666666,
"cacheWrite": 4826.666666666667,
"n": 3,
"tokensOut": 1084.6666666666667
}
},
{
"baselineFail": 1,
"pairedN": 1,
"baseAvailable": 1,
"activationFired": 1,
"skill": "convert-blazor-server-to-webapp",
"treatment": {
"cacheRead": 22079.0,
"tokensIn": 32190.0,
"tokens": 34420.0,
"timeMs": 22562.0,
"cacheWrite": 10091.0,
"n": 1,
"tokensOut": 2230.0
},
"activationExpected": 1,
"timedOut": false,
"treatAvailable": 1,
"treatmentFail": 1,
"passTotal": 1,
"hasPassData": true,
"baseline": {
"cacheRead": 21839.0,
"tokensIn": 28083.0,
"tokens": 29883.0,
"timeMs": 18386.0,
"cacheWrite": 6229.0,
"n": 1,
"tokensOut": 1800.0
}
},
{
"baselineFail": 3,
"pairedN": 3,
"baseAvailable": 3,
"activationFired": 3,
"skill": "dotnet-webapi",
"treatment": {
"cacheRead": 1234537.0,
"tokensIn": 1265272.0,
"tokens": 1277670.6666666667,
"timeMs": 167915.0,
"cacheWrite": 30536.666666666668,
"n": 3,
"tokensOut": 12398.666666666666
},
"activationExpected": 3,
"timedOut": false,
"treatAvailable": 3,
"treatmentFail": 2,
"passTotal": 3,
"hasPassData": true,
"baseline": {
"cacheRead": 446249.0,
"tokensIn": 463543.6666666667,
"tokens": 470455.6666666667,
"timeMs": 91981.66666666667,
"cacheWrite": 17191.333333333332,
"n": 3,
"tokensOut": 6912.0
}
},
{
"baselineFail": 3,
"pairedN": 3,
"baseAvailable": 3,
"activationFired": 3,
"skill": "minimal-api-file-upload",
"treatment": {
"cacheRead": 26552.333333333332,
"tokensIn": 34589.666666666664,
"tokens": 36075.333333333336,
"timeMs": 16187.333333333334,
"cacheWrite": 8015.666666666667,
"n": 3,
"tokensOut": 1485.6666666666667
},
"activationExpected": 3,
"timedOut": false,
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"baseline": {
"cacheRead": 63747.0,
"tokensIn": 71901.66666666667,
"tokens": 75057.0,
"timeMs": 30592.0,
"cacheWrite": 8128.0,
"n": 3,
"tokensOut": 3155.3333333333335
}
}
],
"date": 1789218680753,
"model": "claude-haiku-4.5",
"commit": {
"timestamp": "2026-09-12T00:01:18+00:00",
"id": "4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"message": "Merge pull request #1154 from dotnet/abhitejjohn-agentic-workflow-repair",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
}
},
{
"judgeModel": "claude-opus-4.8",
"skills": [
{
"baselineFail": 0,
"pairedN": 3,
"baseAvailable": 3,
"activationFired": 1,
"skill": "configuring-opentelemetry-dotnet",
"treatment": {
"cacheRead": 8192.0,
"tokensIn": 16381.333333333334,
"tokens": 16887.666666666668,
"timeMs": 4359.333333333333,
"cacheWrite": 0.0,
"n": 3,
"tokensOut": 506.3333333333333
},
"activationExpected": 3,
"timedOut": false,
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"baseline": {
"cacheRead": 4608.0,
"tokensIn": 11590.0,
"tokens": 12237.333333333334,
"timeMs": 7349.333333333333,
"cacheWrite": 0.0,
"n": 3,
"tokensOut": 647.3333333333334
}
},
{
"baselineFail": 1,
"pairedN": 1,
"baseAvailable": 1,
"activationFired": 1,
"skill": "convert-blazor-server-to-webapp",
"treatment": {
"cacheRead": 16384.0,
"tokensIn": 28223.0,
"tokens": 28846.0,
"timeMs": 6130.0,
"cacheWrite": 0.0,
"n": 1,
"tokensOut": 623.0
},
"activationExpected": 1,
"timedOut": false,
"treatAvailable": 1,
"treatmentFail": 0,
"passTotal": 1,
"hasPassData": true,
"baseline": {
"cacheRead": 4608.0,
"tokensIn": 12112.0,
"tokens": 12631.0,
"timeMs": 3646.0,
"cacheWrite": 0.0,
"n": 1,
"tokensOut": 519.0
}
},
{
"baselineFail": 3,
"pairedN": 3,
"baseAvailable": 3,
"activationFired": 3,
"skill": "dotnet-webapi",
"treatment": {
"cacheRead": 44032.0,
"tokensIn": 62464.0,
"tokens": 62938.666666666664,
"timeMs": 6649.333333333333,
"cacheWrite": 0.0,
"n": 3,
"tokensOut": 474.6666666666667
},
"activationExpected": 3,
"timedOut": false,
"treatAvailable": 3,
"treatmentFail": 2,
"passTotal": 3,
"hasPassData": true,
"baseline": {
"cacheRead": 35328.0,
"tokensIn": 44102.0,
"tokens": 44827.333333333336,
"timeMs": 11072.333333333334,
"cacheWrite": 0.0,
"n": 3,
"tokensOut": 725.3333333333334
}
},
{
"baselineFail": 1,
"pairedN": 3,
"baseAvailable": 3,
"activationFired": 3,
"skill": "minimal-api-file-upload",
"treatment": {
"cacheRead": 15360.0,
"tokensIn": 25771.333333333332,
"tokens": 26419.333333333332,
"timeMs": 5400.0,
"cacheWrite": 0.0,
"n": 3,
"tokensOut": 648.0
},
"activationExpected": 3,
"timedOut": false,
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"baseline": {
"cacheRead": 4608.0,
"tokensIn": 11590.666666666666,
"tokens": 12218.333333333334,
"timeMs": 5165.0,
"cacheWrite": 0.0,
"n": 3,
"tokensOut": 627.6666666666666
}
}
],
"date": 1789218680862,
"model": "gpt-5.3-codex",
"commit": {
"timestamp": "2026-09-12T00:01:18+00:00",
"id": "4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"message": "Merge pull request #1154 from dotnet/abhitejjohn-agentic-workflow-repair",
"url": "https://github.com/dotnet/skills/commit/4c72b17fa2c2aaa307d8f1e337ec75cab45ac5c7",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
}
},
{
"model": "claude-opus-5",
"judgeModel": "gpt-5.6-terra",
"skills": [
{
"baseAvailable": 3,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"skill": "configuring-opentelemetry-dotnet",
"treatment": {
"tokensIn": 40132.0,
"cacheRead": 24491.666666666668,
"timeMs": 18209.666666666668,
"tokens": 41734.0,
"n": 3,
"tokensOut": 1602.0,
"cacheWrite": 15636.333333333334
},
"activationExpected": 3,
"baseline": {
"tokensIn": 17633.666666666668,
"cacheRead": 0.0,
"timeMs": 17540.666666666668,
"tokens": 19093.666666666668,
"n": 3,
"tokensOut": 1460.0,
"cacheWrite": 17631.666666666668
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
},
{
"baseAvailable": 1,
"treatmentFail": 0,
"pairedN": 1,
"hasPassData": true,
"skill": "convert-blazor-server-to-webapp",
"treatment": {
"tokensIn": 43894.0,
"cacheRead": 11137.0,
"timeMs": 15425.0,
"tokens": 45246.0,
"n": 1,
"tokensOut": 1352.0,
"cacheWrite": 32753.0
},
"activationExpected": 1,
"baseline": {
"tokensIn": 18592.0,
"cacheRead": 11137.0,
"timeMs": 17377.0,
"tokens": 20346.0,
"n": 1,
"tokensOut": 1754.0,
"cacheWrite": 7453.0
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 1,
"treatAvailable": 1,
"activationFired": 1
},
{
"baseAvailable": 3,
"treatmentFail": 2,
"pairedN": 3,
"hasPassData": true,
"skill": "dotnet-webapi",
"treatment": {
"tokensIn": 360574.6666666667,
"cacheRead": 324462.6666666667,
"timeMs": 71819.33333333333,
"tokens": 365724.3333333333,
"n": 3,
"tokensOut": 5149.666666666667,
"cacheWrite": 36087.333333333336
},
"activationExpected": 3,
"baseline": {
"tokensIn": 387164.3333333333,
"cacheRead": 344241.3333333333,
"timeMs": 123413.33333333333,
"tokens": 395094.6666666667,
"n": 3,
"tokensOut": 7930.333333333333,
"cacheWrite": 42892.333333333336
},
"baselineFail": 2,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
},
{
"baseAvailable": 3,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"skill": "minimal-api-file-upload",
"treatment": {
"tokensIn": 39747.666666666664,
"cacheRead": 26654.0,
"timeMs": 18756.0,
"tokens": 41349.0,
"n": 3,
"tokensOut": 1601.3333333333333,
"cacheWrite": 13089.666666666666
},
"activationExpected": 3,
"baseline": {
"tokensIn": 29464.0,
"cacheRead": 20733.0,
"timeMs": 22718.0,
"tokens": 31230.0,
"n": 3,
"tokensOut": 1766.0,
"cacheWrite": 8727.666666666666
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
}
],
"date": 1789318508422,
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
},
{
"model": "claude-sonnet-5",
"judgeModel": "gpt-5.6-terra",
"skills": [
{
"baseAvailable": 3,
"treatmentFail": 1,
"pairedN": 3,
"hasPassData": true,
"skill": "configuring-opentelemetry-dotnet",
"treatment": {
"tokensIn": 40143.333333333336,
"cacheRead": 28999.333333333332,
"timeMs": 11161.333333333334,
"tokens": 41438.666666666664,
"n": 3,
"tokensOut": 1295.3333333333333,
"cacheWrite": 11140.0
},
"activationExpected": 3,
"baseline": {
"tokensIn": 17648.666666666668,
"cacheRead": 11205.0,
"timeMs": 14326.333333333334,
"tokens": 19151.333333333332,
"n": 3,
"tokensOut": 1502.6666666666667,
"cacheWrite": 6441.666666666667
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
},
{
"baseAvailable": 1,
"treatmentFail": 0,
"pairedN": 1,
"hasPassData": true,
"skill": "convert-blazor-server-to-webapp",
"treatment": {
"tokensIn": 43898.0,
"cacheRead": 30151.0,
"timeMs": 12259.0,
"tokens": 45254.0,
"n": 1,
"tokensOut": 1356.0,
"cacheWrite": 13743.0
},
"activationExpected": 1,
"baseline": {
"tokensIn": 18606.0,
"cacheRead": 11205.0,
"timeMs": 12248.0,
"tokens": 20117.0,
"n": 1,
"tokensOut": 1511.0,
"cacheWrite": 7399.0
},
"baselineFail": 1,
"timedOut": false,
"passTotal": 1,
"treatAvailable": 1,
"activationFired": 1
},
{
"baseAvailable": 3,
"treatmentFail": 1,
"pairedN": 3,
"hasPassData": true,
"skill": "dotnet-webapi",
"treatment": {
"tokensIn": 390889.3333333333,
"cacheRead": 370112.6666666667,
"timeMs": 52190.666666666664,
"tokens": 395994.6666666667,
"n": 3,
"tokensOut": 5105.333333333333,
"cacheWrite": 20750.666666666668
},
"activationExpected": 3,
"baseline": {
"tokensIn": 328128.0,
"cacheRead": 315340.0,
"timeMs": 56373.333333333336,
"tokens": 332706.0,
"n": 3,
"tokensOut": 4578.0,
"cacheWrite": 12762.0
},
"baselineFail": 2,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
},
{
"baseAvailable": 3,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"skill": "minimal-api-file-upload",
"treatment": {
"tokensIn": 54550.333333333336,
"cacheRead": 43615.666666666664,
"timeMs": 13865.666666666666,
"tokens": 56048.0,
"n": 3,
"tokensOut": 1497.6666666666667,
"cacheWrite": 10929.333333333334
},
"activationExpected": 3,
"baseline": {
"tokensIn": 29490.0,
"cacheRead": 22967.666666666668,
"timeMs": 17814.666666666668,
"tokens": 31342.666666666668,
"n": 3,
"tokensOut": 1852.6666666666667,
"cacheWrite": 6519.0
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
}
],
"date": 1789318508544,
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
},
{
"model": "gpt-5.6-sol",
"judgeModel": "claude-opus-4.8",
"skills": [
{
"baseAvailable": 3,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"skill": "configuring-opentelemetry-dotnet",
"treatment": {
"tokensIn": 26002.333333333332,
"cacheRead": 12288.0,
"timeMs": 11978.333333333334,
"tokens": 26988.666666666668,
"n": 3,
"tokensOut": 986.3333333333334,
"cacheWrite": 0.0
},
"activationExpected": 3,
"baseline": {
"tokensIn": 20944.0,
"cacheRead": 10581.333333333334,
"timeMs": 23225.333333333332,
"tokens": 22663.0,
"n": 3,
"tokensOut": 1719.0,
"cacheWrite": 0.0
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
},
{
"baseAvailable": 1,
"treatmentFail": 0,
"pairedN": 1,
"hasPassData": true,
"skill": "convert-blazor-server-to-webapp",
"treatment": {
"tokensIn": 28425.0,
"cacheRead": 10240.0,
"timeMs": 18778.0,
"tokens": 29619.0,
"n": 1,
"tokensOut": 1194.0,
"cacheWrite": 0.0
},
"activationExpected": 1,
"baseline": {
"tokensIn": 12202.0,
"cacheRead": 5120.0,
"timeMs": 18205.0,
"tokens": 13790.0,
"n": 1,
"tokensOut": 1588.0,
"cacheWrite": 0.0
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 1,
"treatAvailable": 1,
"activationFired": 1
},
{
"baseAvailable": 3,
"treatmentFail": 2,
"pairedN": 3,
"hasPassData": true,
"skill": "dotnet-webapi",
"treatment": {
"tokensIn": 237127.33333333334,
"cacheRead": 188074.66666666666,
"timeMs": 61839.0,
"tokens": 242560.33333333334,
"n": 3,
"tokensOut": 5433.0,
"cacheWrite": 0.0
},
"activationExpected": 3,
"baseline": {
"tokensIn": 128045.66666666667,
"cacheRead": 109397.33333333333,
"timeMs": 51354.666666666664,
"tokens": 130688.66666666667,
"n": 3,
"tokensOut": 2643.0,
"cacheWrite": 0.0
},
"baselineFail": 2,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
},
{
"baseAvailable": 3,
"treatmentFail": 0,
"pairedN": 3,
"hasPassData": true,
"skill": "minimal-api-file-upload",
"treatment": {
"tokensIn": 25965.0,
"cacheRead": 10581.333333333334,
"timeMs": 15459.0,
"tokens": 27321.0,
"n": 3,
"tokensOut": 1356.0,
"cacheWrite": 0.0
},
"activationExpected": 3,
"baseline": {
"tokensIn": 11680.0,
"cacheRead": 5120.0,
"timeMs": 12395.666666666666,
"tokens": 12757.333333333334,
"n": 3,
"tokensOut": 1077.3333333333333,
"cacheWrite": 0.0
},
"baselineFail": 0,
"timedOut": false,
"passTotal": 3,
"treatAvailable": 3,
"activationFired": 3
}
],
"date": 1789318508668,
"commit": {
"timestamp": "2026-09-12T07:43:41+00:00",
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3"
}
},
{
"date": 1789397101299,
"model": "claude-sonnet-5",
"commit": {
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"timestamp": "2026-09-12T07:43:41+00:00",
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"judgeModel": "gpt-5.6-terra",
"skills": [
{
"hasPassData": true,
"baselineFail": 0,
"activationFired": 3,
"treatment": {
"tokensOut": 1325.0,
"n": 3,
"timeMs": 11857.333333333334,
"tokens": 41470.333333333336,
"cacheWrite": 11141.333333333334,
"cacheRead": 29000.0,
"tokensIn": 40145.333333333336
},
"activationExpected": 3,
"baseline": {
"tokensOut": 1641.0,
"n": 3,
"timeMs": 15374.666666666666,
"tokens": 19289.0,
"cacheWrite": 6441.0,
"cacheRead": 11205.0,
"tokensIn": 17648.0
},
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"timedOut": false,
"skill": "configuring-opentelemetry-dotnet",
"treatAvailable": 3,
"passTotal": 3
},
{
"hasPassData": true,
"baselineFail": 1,
"activationFired": 1,
"treatment": {
"tokensOut": 1348.0,
"n": 1,
"timeMs": 12042.0,
"tokens": 45249.0,
"cacheWrite": 13745.0,
"cacheRead": 30152.0,
"tokensIn": 43901.0
},
"activationExpected": 1,
"baseline": {
"tokensOut": 5071.0,
"n": 1,
"timeMs": 45904.0,
"tokens": 207011.0,
"cacheWrite": 11222.0,
"cacheRead": 190698.0,
"tokensIn": 201940.0
},
"pairedN": 1,
"baseAvailable": 1,
"treatmentFail": 0,
"timedOut": false,
"skill": "convert-blazor-server-to-webapp",
"treatAvailable": 1,
"passTotal": 1
},
{
"hasPassData": true,
"baselineFail": 2,
"activationFired": 3,
"treatment": {
"tokensOut": 3956.6666666666665,
"n": 3,
"timeMs": 44412.666666666664,
"tokens": 350942.3333333333,
"cacheWrite": 18589.0,
"cacheRead": 328373.3333333333,
"tokensIn": 346985.6666666667
},
"activationExpected": 3,
"baseline": {
"tokensOut": 5902.333333333333,
"n": 3,
"timeMs": 80231.66666666667,
"tokens": 387439.6666666667,
"cacheWrite": 14427.333333333334,
"cacheRead": 367078.6666666667,
"tokensIn": 381537.3333333333
},
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 1,
"timedOut": false,
"skill": "dotnet-webapi",
"treatAvailable": 3,
"passTotal": 3
},
{
"hasPassData": true,
"baselineFail": 0,
"activationFired": 3,
"treatment": {
"tokensOut": 1445.3333333333333,
"n": 3,
"timeMs": 13445.666666666666,
"tokens": 55989.333333333336,
"cacheWrite": 10921.0,
"cacheRead": 43617.666666666664,
"tokensIn": 54544.0
},
"activationExpected": 3,
"baseline": {
"tokensOut": 1473.3333333333333,
"n": 3,
"timeMs": 15079.333333333334,
"tokens": 30966.333333333332,
"cacheWrite": 6520.666666666667,
"cacheRead": 22969.0,
"tokensIn": 29493.0
},
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"timedOut": false,
"skill": "minimal-api-file-upload",
"treatAvailable": 3,
"passTotal": 3
}
]
},
{
"date": 1789397101422,
"model": "gpt-5.6-luna",
"commit": {
"url": "https://github.com/dotnet/skills/commit/4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"timestamp": "2026-09-12T07:43:41+00:00",
"id": "4ecd7d9c76fa458807684771c2bfc7acf1e00ad3",
"message": "Merge pull request #1134 from dotnet/bot/weekly-version-sync",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"judgeModel": "claude-opus-4.8",
"skills": [
{
"hasPassData": true,
"baselineFail": 0,
"activationFired": 3,
"treatment": {
"tokensOut": 972.6666666666666,
"n": 3,
"timeMs": 11549.333333333334,
"tokens": 26859.666666666668,
"cacheWrite": 14183.666666666666,
"cacheRead": 11697.333333333334,
"tokensIn": 25887.0
},
"activationExpected": 3,
"baseline": {
"tokensOut": 1055.6666666666667,
"n": 3,
"timeMs": 13055.0,
"tokens": 16667.0,
"cacheWrite": 11737.333333333334,
"cacheRead": 3870.0,
"tokensIn": 15611.333333333334
},
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"timedOut": false,
"skill": "configuring-opentelemetry-dotnet",
"treatAvailable": 3,
"passTotal": 3
},
{
"hasPassData": true,
"baselineFail": 1,
"activationFired": 1,
"treatment": {
"tokensOut": 1323.0,
"n": 1,
"timeMs": 16273.0,
"tokens": 46869.0,
"cacheWrite": 17237.0,
"cacheRead": 28300.0,
"tokensIn": 45546.0
},
"activationExpected": 1,
"baseline": {
"tokensOut": 2930.0,
"n": 1,
"timeMs": 36383.0,
"tokens": 125457.0,
"cacheWrite": 22828.0,
"cacheRead": 99678.0,
"tokensIn": 122527.0
},
"pairedN": 1,
"baseAvailable": 1,
"treatmentFail": 0,
"timedOut": false,
"skill": "convert-blazor-server-to-webapp",
"treatAvailable": 1,
"passTotal": 1
},
{
"hasPassData": true,
"baselineFail": 2,
"activationFired": 3,
"treatment": {
"tokensOut": 2856.6666666666665,
"n": 3,
"timeMs": 38161.333333333336,
"tokens": 216940.66666666666,
"cacheWrite": 25375.666666666668,
"cacheRead": 188679.33333333334,
"tokensIn": 214084.0
},
"activationExpected": 3,
"baseline": {
"tokensOut": 3481.0,
"n": 3,
"timeMs": 48248.333333333336,
"tokens": 195290.33333333334,
"cacheWrite": 17114.0,
"cacheRead": 174663.33333333334,
"tokensIn": 191809.33333333334
},
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 2,
"timedOut": false,
"skill": "dotnet-webapi",
"treatAvailable": 3,
"passTotal": 3
},
{
"hasPassData": true,
"baselineFail": 1,
"activationFired": 3,
"treatment": {
"tokensOut": 1202.3333333333333,
"n": 3,
"timeMs": 13893.333333333334,
"tokens": 27050.0,
"cacheWrite": 14180.0,
"cacheRead": 11661.666666666666,
"tokensIn": 25847.666666666668
},
"activationExpected": 3,
"baseline": {
"tokensOut": 1295.0,
"n": 3,
"timeMs": 13841.333333333334,
"tokens": 20823.0,
"cacheWrite": 11716.666666666666,
"cacheRead": 7806.333333333333,
"tokensIn": 19528.0
},
"pairedN": 3,
"baseAvailable": 3,
"treatmentFail": 0,
"timedOut": false,
"skill": "minimal-api-file-upload",
"treatAvailable": 3,
"passTotal": 3
}
]
},
{
"judgeModel": "gpt-5.6-terra",
"model": "claude-haiku-4.5",
"date": 1789478285540,
"commit": {
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-14T15:27:40+00:00",
"id": "24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"message": "Surface activation-only evaluation failures (#1163)"
},
"skills": [
{
"pairedN": 3,
"treatment": {
"tokens": 30938.666666666668,
"cacheWrite": 8070.666666666667,
"n": 3,
"timeMs": 16468.666666666668,
"tokensIn": 29340.0,
"cacheRead": 21249.333333333332,
"tokensOut": 1598.6666666666667
},
"baseAvailable": 3,
"baselineFail": 3,
"baseline": {
"tokens": 14574.666666666666,
"cacheWrite": 4825.0,
"n": 3,
"timeMs": 16546.0,
"tokensIn": 12995.0,
"cacheRead": 8160.0,
"tokensOut": 1579.6666666666667
},
"activationExpected": 3,
"activationFired": 3,
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"treatmentFail": 0,
"timedOut": false,
"hasPassData": true,
"passTotal": 3
},
{
"pairedN": 1,
"treatment": {
"tokens": 34391.0,
"cacheWrite": 10087.0,
"n": 1,
"timeMs": 23765.0,
"tokensIn": 32184.0,
"cacheRead": 22077.0,
"tokensOut": 2207.0
},
"baseAvailable": 1,
"baselineFail": 1,
"baseline": {
"tokens": 15792.0,
"cacheWrite": 5520.0,
"n": 1,
"timeMs": 17888.0,
"tokensIn": 13690.0,
"cacheRead": 8160.0,
"tokensOut": 2102.0
},
"activationExpected": 1,
"activationFired": 1,
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"treatmentFail": 1,
"timedOut": false,
"hasPassData": true,
"passTotal": 1
},
{
"pairedN": 3,
"treatment": {
"tokens": 942831.0,
"cacheWrite": 45315.0,
"n": 3,
"timeMs": 112962.0,
"tokensIn": 933919.6666666666,
"cacheRead": 888429.3333333334,
"tokensOut": 8911.333333333334
},
"baseAvailable": 3,
"baselineFail": 3,
"baseline": {
"tokens": 504775.3333333333,
"cacheWrite": 17024.333333333332,
"n": 3,
"timeMs": 87321.33333333333,
"tokensIn": 498134.0,
"cacheRead": 480993.3333333333,
"tokensOut": 6641.333333333333
},
"activationExpected": 3,
"activationFired": 3,
"treatAvailable": 3,
"skill": "dotnet-webapi",
"treatmentFail": 2,
"timedOut": false,
"hasPassData": true,
"passTotal": 3
},
{
"pairedN": 3,
"treatment": {
"tokens": 30341.666666666668,
"cacheWrite": 7904.666666666667,
"n": 3,
"timeMs": 13029.333333333334,
"tokensIn": 29118.666666666668,
"cacheRead": 21194.0,
"tokensOut": 1223.0
},
"baseAvailable": 3,
"baselineFail": 2,
"baseline": {
"tokens": 115313.66666666667,
"cacheWrite": 11351.666666666666,
"n": 3,
"timeMs": 47072.666666666664,
"tokensIn": 110421.33333333333,
"cacheRead": 99033.0,
"tokensOut": 4892.333333333333
},
"activationExpected": 3,
"activationFired": 3,
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"treatmentFail": 0,
"timedOut": false,
"hasPassData": true,
"passTotal": 3
}
]
},
{
"judgeModel": "claude-opus-4.8",
"model": "gpt-5.3-codex",
"date": 1789478285696,
"commit": {
"url": "https://github.com/dotnet/skills/commit/24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"author": {
"name": "Amaury Levé",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-14T15:27:40+00:00",
"id": "24f7cfbd42ad7bf52bcd67372816b982c38c64c6",
"message": "Surface activation-only evaluation failures (#1163)"
},
"skills": [
{
"pairedN": 3,
"treatment": {
"tokens": 21658.333333333332,
"cacheWrite": 0.0,
"n": 3,
"timeMs": 6033.666666666667,
"tokensIn": 21095.333333333332,
"cacheRead": 9728.0,
"tokensOut": 563.0
},
"baseAvailable": 3,
"baselineFail": 1,
"baseline": {
"tokens": 12260.0,
"cacheWrite": 0.0,
"n": 3,
"timeMs": 7344.333333333333,
"tokensIn": 11591.0,
"cacheRead": 4608.0,
"tokensOut": 669.0
},
"activationExpected": 3,
"activationFired": 2,
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"treatmentFail": 0,
"timedOut": false,
"hasPassData": true,
"passTotal": 3
},
{
"pairedN": 1,
"treatment": {
"tokens": 28886.0,
"cacheWrite": 0.0,
"n": 1,
"timeMs": 7394.0,
"tokensIn": 28229.0,
"cacheRead": 16384.0,
"tokensOut": 657.0
},
"baseAvailable": 1,
"baselineFail": 1,
"baseline": {
"tokens": 12633.0,
"cacheWrite": 0.0,
"n": 1,
"timeMs": 4922.0,
"tokensIn": 12112.0,
"cacheRead": 4608.0,
"tokensOut": 521.0
},
"activationExpected": 1,
"activationFired": 1,
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"treatmentFail": 0,
"timedOut": false,
"hasPassData": true,
"passTotal": 1
},
{
"pairedN": 3,
"treatment": {
"tokens": 29220.666666666668,
"cacheWrite": 0.0,
"n": 3,
"timeMs": 7681.333333333333,
"tokensIn": 28384.333333333332,
"cacheRead": 13312.0,
"tokensOut": 836.3333333333334
},
"baseAvailable": 3,
"baselineFail": 3,
"baseline": {
"tokens": 24168.0,
"cacheWrite": 0.0,
"n": 3,
"timeMs": 8259.0,
"tokensIn": 23786.0,
"cacheRead": 16042.666666666666,
"tokensOut": 382.0
},
"activationExpected": 3,
"activationFired": 3,
"treatAvailable": 3,
"skill": "dotnet-webapi",
"treatmentFail": 0,
"timedOut": false,
"hasPassData": true,
"passTotal": 3
},
{
"pairedN": 3,
"treatment": {
"tokens": 26451.0,
"cacheWrite": 0.0,
"n": 3,
"timeMs": 7225.333333333333,
"tokensIn": 25771.333333333332,
"cacheRead": 15360.0,
"tokensOut": 679.6666666666666
},
"baseAvailable": 3,
"baselineFail": 1,
"baseline": {
"tokens": 12176.666666666666,
"cacheWrite": 0.0,
"n": 3,
"timeMs": 5587.0,
"tokensIn": 11590.0,
"cacheRead": 4608.0,
"tokensOut": 586.6666666666666
},
"activationExpected": 3,
"activationFired": 3,
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"treatmentFail": 0,
"timedOut": false,
"hasPassData": true,
"passTotal": 3
}
]
},
{
"date": 1789574378852,
"skills": [
{
"activationExpected": 3,
"skill": "configuring-opentelemetry-dotnet",
"baseline": {
"timeMs": 15067.666666666666,
"tokensIn": 23655.666666666668,
"tokens": 25204.333333333332,
"cacheRead": 17090.666666666668,
"n": 3,
"cacheWrite": 6562.333333333333,
"tokensOut": 1548.6666666666667
},
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"timedOut": false,
"pairedN": 3,
"treatment": {
"timeMs": 11583.666666666666,
"tokensIn": 40143.333333333336,
"tokens": 41479.0,
"cacheRead": 28999.333333333332,
"n": 3,
"cacheWrite": 11140.0,
"tokensOut": 1335.6666666666667
},
"baselineFail": 0,
"baseAvailable": 3,
"activationFired": 3
},
{
"activationExpected": 1,
"skill": "convert-blazor-server-to-webapp",
"baseline": {
"timeMs": 23427.0,
"tokensIn": 76830.0,
"tokens": 79264.0,
"cacheRead": 68454.0,
"n": 1,
"cacheWrite": 8368.0,
"tokensOut": 2434.0
},
"treatAvailable": 1,
"treatmentFail": 1,
"passTotal": 1,
"hasPassData": true,
"timedOut": false,
"pairedN": 1,
"treatment": {
"timeMs": 14046.0,
"tokensIn": 43898.0,
"tokens": 45496.0,
"cacheRead": 30151.0,
"n": 1,
"cacheWrite": 13743.0,
"tokensOut": 1598.0
},
"baselineFail": 0,
"baseAvailable": 1,
"activationFired": 1
},
{
"activationExpected": 3,
"skill": "dotnet-webapi",
"baseline": {
"timeMs": 61835.666666666664,
"tokensIn": 369750.3333333333,
"tokens": 374691.0,
"cacheRead": 354184.0,
"n": 3,
"cacheWrite": 15538.333333333334,
"tokensOut": 4940.666666666667
},
"treatAvailable": 3,
"treatmentFail": 1,
"passTotal": 3,
"hasPassData": true,
"timedOut": false,
"pairedN": 3,
"treatment": {
"timeMs": 46675.333333333336,
"tokensIn": 327701.3333333333,
"tokens": 332371.0,
"cacheRead": 307709.0,
"n": 3,
"cacheWrite": 19969.666666666668,
"tokensOut": 4669.666666666667
},
"baselineFail": 2,
"baseAvailable": 3,
"activationFired": 3
},
{
"activationExpected": 3,
"skill": "minimal-api-file-upload",
"baseline": {
"timeMs": 14422.333333333334,
"tokensIn": 17643.0,
"tokens": 19134.666666666668,
"cacheRead": 11205.0,
"n": 3,
"cacheWrite": 6436.0,
"tokensOut": 1491.6666666666667
},
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"timedOut": false,
"pairedN": 3,
"treatment": {
"timeMs": 12653.333333333334,
"tokensIn": 47163.333333333336,
"tokens": 48576.0,
"cacheRead": 36275.333333333336,
"n": 3,
"cacheWrite": 10883.333333333334,
"tokensOut": 1412.6666666666667
},
"baselineFail": 0,
"baseAvailable": 3,
"activationFired": 3
}
],
"commit": {
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-15T22:05:10+00:00",
"message": "Merge pull request #873 from dotnet/add-dotnet-refactoring-skills",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f",
"id": "26323a52990d0cbfc838117109b40e115aac891f"
},
"judgeModel": "gpt-5.6-terra",
"model": "claude-sonnet-5"
},
{
"date": 1789574378990,
"skills": [
{
"activationExpected": 3,
"skill": "configuring-opentelemetry-dotnet",
"baseline": {
"timeMs": 11623.0,
"tokensIn": 11619.0,
"tokens": 12563.0,
"cacheRead": 0.0,
"n": 3,
"cacheWrite": 11616.0,
"tokensOut": 944.0
},
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"timedOut": false,
"pairedN": 3,
"treatment": {
"timeMs": 11596.666666666666,
"tokensIn": 25889.666666666668,
"tokens": 26906.0,
"cacheRead": 11697.333333333334,
"n": 3,
"cacheWrite": 14186.333333333334,
"tokensOut": 1016.3333333333334
},
"baselineFail": 0,
"baseAvailable": 3,
"activationFired": 3
},
{
"activationExpected": 1,
"skill": "convert-blazor-server-to-webapp",
"baseline": {
"timeMs": 24929.0,
"tokensIn": 36977.0,
"tokens": 39642.0,
"cacheRead": 24481.0,
"n": 1,
"cacheWrite": 12487.0,
"tokensOut": 2665.0
},
"treatAvailable": 1,
"treatmentFail": 0,
"passTotal": 1,
"hasPassData": true,
"timedOut": false,
"pairedN": 1,
"treatment": {
"timeMs": 11386.0,
"tokensIn": 45491.0,
"tokens": 46813.0,
"cacheRead": 28298.0,
"n": 1,
"cacheWrite": 17184.0,
"tokensOut": 1322.0
},
"baselineFail": 0,
"baseAvailable": 1,
"activationFired": 1
},
{
"activationExpected": 3,
"skill": "dotnet-webapi",
"baseline": {
"timeMs": 76425.0,
"tokensIn": 280077.3333333333,
"tokens": 284408.6666666667,
"cacheRead": 257681.66666666666,
"n": 3,
"cacheWrite": 22345.666666666668,
"tokensOut": 4331.333333333333
},
"treatAvailable": 3,
"treatmentFail": 2,
"passTotal": 3,
"hasPassData": true,
"timedOut": false,
"pairedN": 3,
"treatment": {
"timeMs": 50650.333333333336,
"tokensIn": 302933.6666666667,
"tokens": 307582.3333333333,
"cacheRead": 280053.0,
"n": 3,
"cacheWrite": 22842.666666666668,
"tokensOut": 4648.666666666667
},
"baselineFail": 2,
"baseAvailable": 3,
"activationFired": 3
},
{
"activationExpected": 3,
"skill": "minimal-api-file-upload",
"baseline": {
"timeMs": 10993.0,
"tokensIn": 11619.0,
"tokens": 12736.333333333334,
"cacheRead": 0.0,
"n": 3,
"cacheWrite": 11616.0,
"tokensOut": 1117.3333333333333
},
"treatAvailable": 3,
"treatmentFail": 0,
"passTotal": 3,
"hasPassData": true,
"timedOut": false,
"pairedN": 3,
"treatment": {
"timeMs": 12044.333333333334,
"tokensIn": 25843.333333333332,
"tokens": 27061.333333333332,
"cacheRead": 11661.333333333334,
"n": 3,
"cacheWrite": 14176.0,
"tokensOut": 1218.0
},
"baselineFail": 1,
"baseAvailable": 3,
"activationFired": 3
}
],
"commit": {
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"timestamp": "2026-09-15T22:05:10+00:00",
"message": "Merge pull request #873 from dotnet/add-dotnet-refactoring-skills",
"url": "https://github.com/dotnet/skills/commit/26323a52990d0cbfc838117109b40e115aac891f",
"id": "26323a52990d0cbfc838117109b40e115aac891f"
},
"judgeModel": "claude-opus-4.8",
"model": "gpt-5.6-luna"
},
{
"judgeModel": "gpt-5.6-terra",
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
}
},
"date": 1789642372197,
"skills": [
{
"baselineFail": 0,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 28933.333333333332,
"timeMs": 19921.333333333332,
"tokensIn": 40176.666666666664,
"n": 3,
"tokensOut": 1744.6666666666667,
"cacheWrite": 11239.333333333334,
"tokens": 41921.333333333336
},
"baseline": {
"cacheRead": 28859.0,
"timeMs": 21770.0,
"tokensIn": 35492.666666666664,
"n": 3,
"tokensOut": 1703.6666666666667,
"cacheWrite": 6629.666666666667,
"tokens": 37196.333333333336
},
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"activationFired": 3,
"timedOut": false,
"pairedN": 3,
"treatmentFail": 0
},
{
"baselineFail": 1,
"passTotal": 1,
"hasPassData": true,
"activationExpected": 1,
"baseAvailable": 1,
"treatment": {
"cacheRead": 30085.0,
"timeMs": 16381.0,
"tokensIn": 43918.0,
"n": 1,
"tokensOut": 1485.0,
"cacheWrite": 13829.0,
"tokens": 45403.0
},
"baseline": {
"cacheRead": 11141.0,
"timeMs": 19651.0,
"tokensIn": 18604.0,
"n": 1,
"tokensOut": 1821.0,
"cacheWrite": 7461.0,
"tokens": 20425.0
},
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"activationFired": 1,
"timedOut": false,
"pairedN": 1,
"treatmentFail": 1
},
{
"baselineFail": 2,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 300764.3333333333,
"timeMs": 65753.66666666667,
"tokensIn": 321386.0,
"n": 3,
"tokensOut": 5249.333333333333,
"cacheWrite": 20599.0,
"tokens": 326635.3333333333
},
"baseline": {
"cacheRead": 196864.66666666666,
"timeMs": 57774.0,
"tokensIn": 208404.0,
"n": 3,
"tokensOut": 4127.666666666667,
"cacheWrite": 11520.0,
"tokens": 212531.66666666666
},
"treatAvailable": 3,
"skill": "dotnet-webapi",
"activationFired": 3,
"timedOut": false,
"pairedN": 3,
"treatmentFail": 2
},
{
"baselineFail": 0,
"passTotal": 3,
"hasPassData": true,
"activationExpected": 3,
"baseAvailable": 3,
"treatment": {
"cacheRead": 28853.666666666668,
"timeMs": 18577.333333333332,
"tokensIn": 39777.666666666664,
"n": 3,
"tokensOut": 1561.6666666666667,
"cacheWrite": 10920.0,
"tokens": 41339.333333333336
},
"baseline": {
"cacheRead": 22904.666666666668,
"timeMs": 21136.666666666668,
"tokensIn": 29546.333333333332,
"n": 3,
"tokensOut": 1599.0,
"cacheWrite": 6638.333333333333,
"tokens": 31145.333333333332
},
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"activationFired": 3,
"timedOut": false,
"pairedN": 3,
"treatmentFail": 0
}
],
"model": "claude-opus-4.8"
},
{
"judgeModel": "gpt-5.6-terra",
"model": "claude-sonnet-5",
"skills": [
{
"hasPassData": true,
"activationFired": 3,
"baselineFail": 0,
"baseAvailable": 3,
"timedOut": false,
"baseline": {
"cacheRead": 11205.0,
"cacheWrite": 6441.0,
"tokensIn": 17648.0,
"n": 3,
"tokens": 19229.666666666668,
"tokensOut": 1581.6666666666667,
"timeMs": 15321.333333333334
},
"treatmentFail": 0,
"treatment": {
"cacheRead": 36451.666666666664,
"cacheWrite": 11184.666666666666,
"tokensIn": 47641.0,
"n": 3,
"tokens": 48956.333333333336,
"tokensOut": 1315.3333333333333,
"timeMs": 11940.333333333334
},
"activationExpected": 3,
"pairedN": 3,
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"passTotal": 3
},
{
"hasPassData": true,
"activationFired": 1,
"baselineFail": 1,
"baseAvailable": 1,
"timedOut": false,
"baseline": {
"cacheRead": 11205.0,
"cacheWrite": 7399.0,
"tokensIn": 18606.0,
"n": 1,
"tokens": 20106.0,
"tokensOut": 1500.0,
"timeMs": 12358.0
},
"treatmentFail": 0,
"treatment": {
"cacheRead": 30152.0,
"cacheWrite": 13745.0,
"tokensIn": 43901.0,
"n": 1,
"tokens": 45128.0,
"tokensOut": 1227.0,
"timeMs": 10835.0
},
"activationExpected": 1,
"pairedN": 1,
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"passTotal": 1
},
{
"hasPassData": true,
"activationFired": 3,
"baselineFail": 2,
"baseAvailable": 3,
"timedOut": false,
"baseline": {
"cacheRead": 395944.6666666667,
"cacheWrite": 13544.0,
"tokensIn": 409518.6666666667,
"n": 3,
"tokens": 414234.0,
"tokensOut": 4715.333333333333,
"timeMs": 81347.0
},
"treatmentFail": 2,
"treatment": {
"cacheRead": 387106.6666666667,
"cacheWrite": 20435.666666666668,
"tokensIn": 407571.0,
"n": 3,
"tokens": 412553.0,
"tokensOut": 4982.0,
"timeMs": 51365.666666666664
},
"activationExpected": 3,
"pairedN": 3,
"treatAvailable": 3,
"skill": "dotnet-webapi",
"passTotal": 3
},
{
"hasPassData": true,
"activationFired": 3,
"baselineFail": 1,
"baseAvailable": 3,
"timedOut": false,
"baseline": {
"cacheRead": 17093.0,
"cacheWrite": 6485.666666666667,
"tokensIn": 23581.333333333332,
"n": 3,
"tokens": 25030.333333333332,
"tokensOut": 1449.0,
"timeMs": 14214.0
},
"treatmentFail": 0,
"treatment": {
"cacheRead": 43617.0,
"cacheWrite": 10912.333333333334,
"tokensIn": 54534.666666666664,
"n": 3,
"tokens": 56067.0,
"tokensOut": 1532.3333333333333,
"timeMs": 14294.333333333334
},
"activationExpected": 3,
"pairedN": 3,
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"passTotal": 3
}
],
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"date": 1789745909366
},
{
"judgeModel": "claude-opus-4.8",
"model": "gpt-5.6-luna",
"skills": [
{
"hasPassData": true,
"activationFired": 3,
"baselineFail": 0,
"baseAvailable": 3,
"timedOut": false,
"baseline": {
"cacheRead": 0.0,
"cacheWrite": 11617.0,
"tokensIn": 11620.0,
"n": 3,
"tokens": 12783.0,
"tokensOut": 1163.0,
"timeMs": 12945.333333333334
},
"treatmentFail": 0,
"treatment": {
"cacheRead": 11697.333333333334,
"cacheWrite": 14182.666666666666,
"tokensIn": 25886.0,
"n": 3,
"tokens": 26807.666666666668,
"tokensOut": 921.6666666666666,
"timeMs": 6679.333333333333
},
"activationExpected": 3,
"pairedN": 3,
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"passTotal": 3
},
{
"hasPassData": true,
"activationFired": 1,
"baselineFail": 0,
"baseAvailable": 1,
"timedOut": false,
"baseline": {
"cacheRead": 24471.0,
"cacheWrite": 12423.0,
"tokensIn": 36903.0,
"n": 1,
"tokens": 39177.0,
"tokensOut": 2274.0,
"timeMs": 13678.0
},
"treatmentFail": 0,
"treatment": {
"cacheRead": 28298.0,
"cacheWrite": 16956.0,
"tokensIn": 45263.0,
"n": 1,
"tokens": 46627.0,
"tokensOut": 1364.0,
"timeMs": 8240.0
},
"activationExpected": 1,
"pairedN": 1,
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"passTotal": 1
},
{
"hasPassData": true,
"activationFired": 3,
"baselineFail": 2,
"baseAvailable": 3,
"timedOut": false,
"baseline": {
"cacheRead": 179161.0,
"cacheWrite": 16130.0,
"tokensIn": 195324.0,
"n": 3,
"tokens": 199058.33333333334,
"tokensOut": 3734.3333333333335,
"timeMs": 36039.0
},
"treatmentFail": 2,
"treatment": {
"cacheRead": 209822.0,
"cacheWrite": 26325.333333333332,
"tokensIn": 236179.33333333334,
"n": 3,
"tokens": 239981.66666666666,
"tokensOut": 3802.3333333333335,
"timeMs": 29140.666666666668
},
"activationExpected": 3,
"pairedN": 3,
"treatAvailable": 3,
"skill": "dotnet-webapi",
"passTotal": 3
},
{
"hasPassData": true,
"activationFired": 3,
"baselineFail": 1,
"baseAvailable": 3,
"timedOut": false,
"baseline": {
"cacheRead": 7818.0,
"cacheWrite": 11728.0,
"tokensIn": 19551.0,
"n": 3,
"tokens": 20825.0,
"tokensOut": 1274.0,
"timeMs": 8021.0
},
"treatmentFail": 0,
"treatment": {
"cacheRead": 11661.666666666666,
"cacheWrite": 14180.666666666666,
"tokensIn": 25848.333333333332,
"n": 3,
"tokens": 27109.0,
"tokensOut": 1260.6666666666667,
"timeMs": 8153.333333333333
},
"activationExpected": 3,
"pairedN": 3,
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"passTotal": 3
}
],
"commit": {
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"timestamp": "2026-09-17T03:09:52+00:00",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"author": {
"name": "Abhitej John",
"username": "AbhitejJohn"
},
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"date": 1789745909486
},
{
"skills": [
{
"treatment": {
"cacheRead": 21248.666666666668,
"tokensOut": 1836.0,
"timeMs": 19228.666666666668,
"tokensIn": 29338.0,
"n": 3,
"tokens": 31174.0,
"cacheWrite": 8069.333333333333
},
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"activationExpected": 3,
"baselineFail": 2,
"treatmentFail": 0,
"hasPassData": true,
"baseline": {
"cacheRead": 12490.0,
"tokensOut": 1480.0,
"timeMs": 16795.333333333332,
"tokensIn": 18374.0,
"n": 3,
"tokens": 19854.0,
"cacheWrite": 5872.333333333333
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
},
{
"treatment": {
"cacheRead": 22078.0,
"tokensOut": 1940.0,
"timeMs": 20277.0,
"tokensIn": 32187.0,
"n": 1,
"tokens": 34127.0,
"cacheWrite": 10089.0
},
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"activationExpected": 1,
"baselineFail": 1,
"treatmentFail": 1,
"hasPassData": true,
"baseline": {
"cacheRead": 51828.0,
"tokensOut": 2909.0,
"timeMs": 28075.0,
"tokensIn": 59950.0,
"n": 1,
"tokens": 62859.0,
"cacheWrite": 8097.0
},
"activationFired": 1,
"timedOut": false,
"baseAvailable": 1,
"passTotal": 1,
"pairedN": 1
},
{
"treatment": {
"cacheRead": 657719.3333333334,
"tokensOut": 8789.0,
"timeMs": 113347.33333333333,
"tokensIn": 682004.0,
"n": 3,
"tokens": 690793.0,
"cacheWrite": 24141.333333333332
},
"treatAvailable": 3,
"skill": "dotnet-webapi",
"activationExpected": 3,
"baselineFail": 2,
"treatmentFail": 2,
"hasPassData": true,
"baseline": {
"cacheRead": 459383.3333333333,
"tokensOut": 12971.333333333334,
"timeMs": 130567.33333333333,
"tokensIn": 484082.0,
"n": 3,
"tokens": 497053.3333333333,
"cacheWrite": 24592.333333333332
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
},
{
"treatment": {
"cacheRead": 101863.33333333333,
"tokensOut": 4139.333333333333,
"timeMs": 41341.333333333336,
"tokensIn": 113844.0,
"n": 3,
"tokens": 117983.33333333333,
"cacheWrite": 11939.0
},
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"activationExpected": 3,
"baselineFail": 3,
"treatmentFail": 1,
"hasPassData": true,
"baseline": {
"cacheRead": 58184.0,
"tokensOut": 3587.3333333333335,
"timeMs": 35394.0,
"tokensIn": 66465.66666666667,
"n": 3,
"tokens": 70053.0,
"cacheWrite": 8255.0
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
}
],
"date": 1789836946353,
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"judgeModel": "gpt-5.6-terra",
"model": "claude-haiku-4.5"
},
{
"skills": [
{
"treatment": {
"cacheRead": 11776.0,
"tokensOut": 565.0,
"timeMs": 5403.333333333333,
"tokensIn": 21229.333333333332,
"n": 3,
"tokens": 21794.333333333332,
"cacheWrite": 0.0
},
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"activationExpected": 3,
"baselineFail": 1,
"treatmentFail": 0,
"hasPassData": true,
"baseline": {
"cacheRead": 3072.0,
"tokensOut": 704.0,
"timeMs": 7075.666666666667,
"tokensIn": 11672.0,
"n": 3,
"tokens": 12376.0,
"cacheWrite": 0.0
},
"activationFired": 2,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
},
{
"treatment": {
"cacheRead": 16384.0,
"tokensOut": 633.0,
"timeMs": 5044.0,
"tokensIn": 28390.0,
"n": 1,
"tokens": 29023.0,
"cacheWrite": 0.0
},
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"activationExpected": 1,
"baselineFail": 0,
"treatmentFail": 0,
"hasPassData": true,
"baseline": {
"cacheRead": 4608.0,
"tokensOut": 628.0,
"timeMs": 4110.0,
"tokensIn": 12194.0,
"n": 1,
"tokens": 12822.0,
"cacheWrite": 0.0
},
"activationFired": 1,
"timedOut": false,
"baseAvailable": 1,
"passTotal": 1,
"pairedN": 1
},
{
"treatment": {
"cacheRead": 30378.666666666668,
"tokensOut": 395.0,
"timeMs": 5234.333333333333,
"tokensIn": 40134.0,
"n": 3,
"tokens": 40529.0,
"cacheWrite": 0.0
},
"treatAvailable": 3,
"skill": "dotnet-webapi",
"activationExpected": 3,
"baselineFail": 3,
"treatmentFail": 3,
"hasPassData": true,
"baseline": {
"cacheRead": 4608.0,
"tokensOut": 254.66666666666666,
"timeMs": 2605.0,
"tokensIn": 11729.666666666666,
"n": 3,
"tokens": 11984.333333333334,
"cacheWrite": 0.0
},
"activationFired": 1,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
},
{
"treatment": {
"cacheRead": 13312.0,
"tokensOut": 683.3333333333334,
"timeMs": 5483.333333333333,
"tokensIn": 25936.333333333332,
"n": 3,
"tokens": 26619.666666666668,
"cacheWrite": 0.0
},
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"activationExpected": 3,
"baselineFail": 1,
"treatmentFail": 0,
"hasPassData": true,
"baseline": {
"cacheRead": 4608.0,
"tokensOut": 626.0,
"timeMs": 6570.0,
"tokensIn": 11671.666666666666,
"n": 3,
"tokens": 12297.666666666666,
"cacheWrite": 0.0
},
"activationFired": 3,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
}
],
"date": 1789836946473,
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"judgeModel": "claude-opus-4.8",
"model": "gpt-5.3-codex"
},
{
"skills": [
{
"treatment": {
"cacheRead": 6400.0,
"tokensOut": 2143.3333333333335,
"timeMs": 11194.333333333334,
"tokensIn": 10139.666666666666,
"n": 3,
"tokens": 12283.0,
"cacheWrite": 0.0
},
"treatAvailable": 3,
"skill": "configuring-opentelemetry-dotnet",
"activationExpected": 3,
"baselineFail": 1,
"treatmentFail": 0,
"hasPassData": true,
"baseline": {
"cacheRead": 6400.0,
"tokensOut": 1803.3333333333333,
"timeMs": 10055.0,
"tokensIn": 10059.333333333334,
"n": 3,
"tokens": 11862.666666666666,
"cacheWrite": 0.0
},
"activationFired": 0,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
},
{
"treatment": {
"cacheRead": 6400.0,
"tokensOut": 3995.0,
"timeMs": 17739.0,
"tokensIn": 10783.0,
"n": 1,
"tokens": 14778.0,
"cacheWrite": 0.0
},
"treatAvailable": 1,
"skill": "convert-blazor-server-to-webapp",
"activationExpected": 1,
"baselineFail": 1,
"treatmentFail": 1,
"hasPassData": true,
"baseline": {
"cacheRead": 6400.0,
"tokensOut": 3142.0,
"timeMs": 15017.0,
"tokensIn": 10581.0,
"n": 1,
"tokens": 13723.0,
"cacheWrite": 0.0
},
"activationFired": 0,
"timedOut": false,
"baseAvailable": 1,
"passTotal": 1,
"pairedN": 1
},
{
"treatment": {
"cacheRead": 361792.0,
"tokensOut": 8372.5,
"timeMs": 64015.0,
"tokensIn": 418873.5,
"n": 2,
"tokens": 427246.0,
"cacheWrite": 0.0
},
"treatAvailable": 2,
"skill": "dotnet-webapi",
"activationExpected": 3,
"baselineFail": 2,
"treatmentFail": 1,
"hasPassData": true,
"baseline": {
"cacheRead": 200896.0,
"tokensOut": 7327.0,
"timeMs": 71308.5,
"tokensIn": 246311.0,
"n": 2,
"tokens": 253638.0,
"cacheWrite": 0.0
},
"activationFired": 1,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 2,
"pairedN": 2
},
{
"treatment": {
"cacheRead": 6400.0,
"tokensOut": 2334.6666666666665,
"timeMs": 9213.666666666666,
"tokensIn": 10104.666666666666,
"n": 3,
"tokens": 12439.333333333334,
"cacheWrite": 0.0
},
"treatAvailable": 3,
"skill": "minimal-api-file-upload",
"activationExpected": 3,
"baselineFail": 1,
"treatmentFail": 2,
"hasPassData": true,
"baseline": {
"cacheRead": 6400.0,
"tokensOut": 2325.0,
"timeMs": 9138.0,
"tokensIn": 10059.333333333334,
"n": 3,
"tokens": 12384.333333333334,
"cacheWrite": 0.0
},
"activationFired": 0,
"timedOut": false,
"baseAvailable": 3,
"passTotal": 3,
"pairedN": 3
}
],
"date": 1789836946581,
"commit": {
"author": {
"username": "AbhitejJohn",
"name": "Abhitej John"
},
"message": "Merge pull request #1184 from dotnet/dependabot/npm_and_yarn/eng/evaluation-tools/microsoft/vally-cli-0.16.0",
"url": "https://github.com/dotnet/skills/commit/8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3",
"timestamp": "2026-09-17T03:09:52+00:00",
"id": "8bbfe7a4d1c5c0cd42cd04e38031779c75f2dda3"
},
"judgeModel": "gpt-5.6-terra",
"model": "mai-code-1.1-flash"
}
]
},
"lastUpdate": 1789836946581,
"schemaVersion": 2
}