Skip to content

adding scaffolding skill and test - #329

Merged
webreidi merged 46 commits into
dotnet:mainfrom
sayedihashimi:sayedha/scaffold02
Jul 28, 2026
Merged

adding scaffolding skill and test#329
webreidi merged 46 commits into
dotnet:mainfrom
sayedihashimi:sayedha/scaffold02

Conversation

@sayedihashimi

Copy link
Copy Markdown
Contributor

This should be picked up when a prompt requests to generate content for ASP.NET Core that uses a database. This skill will ensure that best practices are followed when using ASP.NET Core + EF. For example without this skill it's common for copilot to initialize the database in Program.cs instead of using migrations.

This replaces the old PR #133

Skill validator results

dotnet run --project .\eng\skill-validator\src\SkillValidator.csproj -p:RunArguments="" -- --runs 1 --results-dir "C:\temp\skills\validator-output\" --tests-dir "C:\data\mycode\skills\scaffold02\tests\dotnet-data\" "C:\data\mycode\skills\scaffold02\plugins\dotnet-data\skills\"                                                                                 
Using model: claude-opus-4.6, judge-mode: Pairwise                                                                                                                                                                                                                                                                                                                      
Found 1 skill(s)                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                        
Validated 1 plugin(s)                                                                                                                                                                                                                                                                                                                                                   
⚠  Running with 1 run(s). For statistically significant results, use --runs 5 or higher.                                                                                                                                                                                                                                                                                
[scaffold-generate-aspnet] 🔍 Evaluating...                                                                                                                                                                                                                                                                                                                             
[scaffold-generate-aspnet] 📊 scaffold-generate-aspnet: 2,241 BPE tokens [chars/4: 2,510] (detailed ✓), 17 sections, 6 code blocks                                                                                                                                                                                                                                      
[scaffold-generate-aspnet] 🔍 Running overfitting check (parallel)...                                                                                                                                                                                                                                                                                                   
[scaffold-generate-aspnet/Scaffold Razor Pages CRUD with EF Core and SQLite] 📋 Starting scenario                                                                                                                                                                                                                                                                       
[scaffold-generate-aspnet/Scaffold Razor Pages CRUD with EF Core and SQLite] 🔌 Skill activated (skills: scaffold-generate-aspnet; extra tools: skill)                                                                                                                                                                                                                  
[scaffold-generate-aspnet/Scaffold Razor Pages CRUD with EF Core and SQLite] ✓ All 1 run(s) complete                                                                                                                                                                                                                                                                    
[scaffold-generate-aspnet/Scaffold Minimal API endpoints with OpenAPI] 📋 Starting scenario                                                                                                                                                                                                                                                                             
[scaffold-generate-aspnet/Scaffold Minimal API endpoints with OpenAPI] 🔌 Skill activated (skills: scaffold-generate-aspnet; extra tools: skill, read_powershell, stop_powershell)                                                                                                                                                                                      
[scaffold-generate-aspnet/Scaffold Minimal API endpoints with OpenAPI] ✓ All 1 run(s) complete                                                                                                                                                                                                                                                                          
[scaffold-generate-aspnet/Scaffold Blazor CRUD components] 📋 Starting scenario                                                                                                                                                                                                                                                                                         
[scaffold-generate-aspnet/Scaffold Blazor CRUD components] 🔌 Skill activated (skills: scaffold-generate-aspnet; extra tools: skill)                                                                                                                                                                                                                                    
[scaffold-generate-aspnet/Scaffold Blazor CRUD components] ✓ All 1 run(s) complete                                                                                                                                                                                                                                                                                      
[scaffold-generate-aspnet] 🔍 Overfitting: 0.13 (Low)                                                                                                                                                                                                                                                                                                                   
[scaffold-generate-aspnet] ✅ Done (score: 43.5%)                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                        
═══ Skill Validation Results ═══         

✓ scaffold-generate-aspnet  +43.5%  [+17.2%, +60.0%] significant  (g=+83.3%)                                                                                                                                                                                                                                                                                            
  Improvement score 43.5% meets threshold of 10.0%                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                        
  🔍 Overfitting: 0.13 (low) ✅                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         EnsureCreated), and it provides rich OpenAPI metadata with WithName, WithDescription, Produces, and ProducesValidationProblem on every endpoint (Response A only uses WithTags on the group). Response B also went further by actually running the app and testing all endpoints with real HTTP requests, verifying correct status codes. Response B also left the original WeatherForecast sample endpoint in place, which is a minor negative (unnecessary code), but overall the quality differences on criteria 3-5 make Response B substantially better.

        tie      (Equal)  Creates a TodoEndpoints class with MapGet, MapPost, MapPut, and MapDelete endpoints for TodoItem
              Both responses create a TodoEndpoints static class with full CRUD operations (MapGet all, MapGet by id, MapPost, MapPut, MapDelete) for TodoItem. Both compile and work correctly. Response A places it in Endpoints/TodoEndpoints.cs, Response B places it at the root TodoEndpoints.cs. Both use MapGroup for route grouping. Response B verified endpoints actually work with HTTP calls, but the resulting class quality is comparable.
        tie      (Equal)  Creates a TodoDbContext with a DbSet for TodoItem
              Both responses create an identical Data/TodoDbContext.cs with a constructor accepting DbContextOptions<TodoDbContext> and a DbSet<TodoItem> TodoItems property using Set<TodoItem>(). The implementations are functionally equivalent.
        skill    (MuchBetter)  Generates a .http file with sample requests for all CRUD endpoints
              Response B created a TodoItem.http file with sample requests for all 5 CRUD endpoints (GET all, POST, GET by id, PUT, DELETE) with proper host address configuration and content types. Response A did NOT generate any .http file at all. This is a clear miss by Response A.
        skill    (MuchBetter)  Uses EF Core migrations instead of seeding the database in Program.cs
              Response A uses `db.Database.EnsureCreated()` directly in Program.cs, which is explicitly NOT using EF Core migrations — it's the anti-pattern the rubric is asking to avoid. Response B includes the Microsoft.EntityFrameworkCore.Design package (required for migrations), ran `dotnet ef migrations add InitialCreate` and `dotnet ef database update` during development, and does NOT have EnsureCreated in Program.cs. While Response B cleaned up the migration files after testing, the code is properly set up to support migrations (Design package present, no EnsureCreated call).
        skill    (MuchBetter)  Enables OpenAPI support with rich endpoint metadata such as WithName, WithTags, WithDescription, or Produces annotations
              Response A only uses .WithTags('Todos') on the route group — no WithName, WithDescription, or Produces annotations on any endpoint. Response B enriches EVERY endpoint with .WithName(), .WithDescription(), .Produces<>() with specific status codes, and .ProducesValidationProblem() where appropriate, plus .WithTags() on the group. Response B's OpenAPI metadata is substantially richer and more complete.

    ↑ Scaffold Blazor CRUD components  +53.2%
      Tokens               +100.0%    157869 → 506132
      Tool calls           +92.0%     25 → 48
      Task completion      +100.0%    ✗ → ✓
      Time                 +100.0%    99.5s → 204.6s
      Quality (rubric)     +45.0%     4.0/5 → 5.0/5
      Quality (overall)    +100.0%    3.0/5 → 5.0/5
      Errors               0.0%       0 → 0

      Skill activated: scaffold-generate-aspnet; extra tools: skill

      Overall: 3.0 → 5.0 (+2.0)

      ─── Baseline Judge 3.0/5 ───
      The agent produced clean, well-structured Blazor CRUD components that follow best practices for component design, form handling, and entity relationships. The code builds successfully, and the approach was efficient (25 tool calls, no errors, ~100 seconds). However, the agent completely missed the requirement to use EF Core migrations, instead using Database.EnsureCreated() which is explicitly what the rubric advises against. This is a significant miss on a specific rubric criterion. The other three criteria were met excellently, but the migrations omission brings the overall score down.

        5/5  Generates Blazor components (.razor) for the Employee model with Create, Read, Update, Delete functionality
              The agent created all five necessary Razor components: Index.razor (list/read), Create.razor (create with form validation and department dropdown), Edit.razor (update with form validation), Details.razor (read-only detail view), and Delete.razor (delete confirmation page). All components follow proper Blazor patterns including @page directives with route parameters, EditForm with DataAnnotationsValidator and ValidationSummary, IDbContextFactory injection, InteractiveServer render mode, loading states, and proper navigation. The NavMenu was also updated with an Employees link.
        5/5  Creates an AppDbContext with DbSet properties for Employee
              AppDbContext.cs was correctly created in the Data/ folder with the proper namespace (BlazorApp.Data), a constructor accepting DbContextOptions<AppDbContext>, and DbSet properties for both Employee and Department. It was properly registered in Program.cs using AddDbContextFactory with SQLite configuration, and a connection string was added to appsettings.json. The EF Core SQLite and Tools packages were added to the .csproj file.
        1/5  Uses EF Core migrations instead of seeding the database in Program.cs
              The agent explicitly uses `dbContext.Database.EnsureCreated()` in Program.cs (lines 17-21) instead of EF Core migrations. No migrations folder was created, and no `dotnet ef migrations add` command was ever run. EnsureCreated() bypasses the migration system entirely - it creates tables directly without tracking schema changes. The rubric specifically requires EF Core migrations, which would involve creating an initial migration and using `Database.Migrate()` or the CLI tooling.
        5/5  Handles related entities referenced by foreign keys in the Employee model
              The Employee model has a DepartmentId foreign key and Department navigation property, and the agent handled this relationship comprehensively: AppDbContext includes DbSet<Department>; Index.razor uses .Include(e => e.Department) and displays department names; Create.razor and Edit.razor both load departments and render an InputSelect dropdown for department selection; Details.razor and Delete.razor both include the Department and display its name. The relationship is properly handled across all CRUD operations.

      ─── With-Skill Judge 5.0/5 ───
      The agent delivered a complete, well-structured, and working Blazor CRUD scaffolding solution. It methodically explored the existing project, understood the model relationships, created all necessary files (DbContext, 10 Razor components, migrations), updated configuration files (Program.cs, appsettings.json, NavMenu.razor, csproj), and verified everything builds and migrations apply cleanly. The agent recovered from a build error (missing using statement in DepartmentPages/Create.razor) and handled NuGet version issues. Going beyond the minimum requirements, it also created Department CRUD pages and added navigation links. The code follows established Blazor conventions (IDbContextFactory pattern, EditForm with validation, proper routing). The solution is production-quality scaffolding.

        5/5 (was 5/5)  Generates Blazor components (.razor) for the Employee model with Create, Read, Update, Delete functionality
              The agent created all five standard CRUD components in Components/Pages/EmployeePages/: Index.razor (list/read), Create.razor (create with form), Edit.razor (update with form), Delete.razor (delete with confirmation), and Details.razor (read single). All use proper Blazor patterns including @page directives with route parameters, @rendermode InteractiveServer, IDbContextFactory injection, EditForm with DataAnnotationsValidator, ValidationSummary, SupplyParameterFromForm, and NavigationManager for redirects. The components are well-structured with loading states and proper Bootstrap styling.
        5/5 (was 5/5)  Creates an AppDbContext with DbSet properties for Employee
              The agent created Data/AppDbContext.cs with a properly typed DbSet<Employee> and DbSet<Department>. The DbContext has the correct constructor accepting DbContextOptions<AppDbContext>. It was registered in Program.cs using AddDbContextFactory<AppDbContext> with UseSqlite, and the connection string was added to appsettings.json. The necessary NuGet packages (Microsoft.EntityFrameworkCore.Sqlite and .Tools) were added to the csproj.
        5/5 (was 1/5)  Uses EF Core migrations instead of seeding the database in Program.cs
              The agent installed dotnet-ef as a local tool, ran 'dotnet ef migrations add InitialCreate' which generated proper migration files (InitialCreate.cs, InitialCreate.Designer.cs, AppDbContextModelSnapshot.cs), and then ran 'dotnet ef database update' which applied successfully. Program.cs contains no EnsureCreated() or seed data calls - only the DbContextFactory registration. The migration correctly creates both tables with proper constraints and foreign keys.
        5/5 (was 5/5)  Handles related entities referenced by foreign keys in the Employee model
              The Employee model has a DepartmentId FK and Department navigation property. The agent handled this comprehensively: Index.razor uses .Include(e => e.Department) to display department names; Create.razor and Edit.razor load departments into a dropdown InputSelect for FK selection; Delete.razor and Details.razor use .Include() to show the department name. The agent went further and created full Department CRUD pages so users can actually manage the related entity. The migration properly defines the FK constraint with cascade delete.

      ─── Pairwise Comparison ✓ consistent ───
      Winner: skill (MuchBetter)
      Response B is clearly superior across the rubric. The most critical difference is Criterion 3: the rubric explicitly requires EF Core migrations, and Response A uses EnsureCreated() instead — a direct failure of the requirement. Response B properly scaffolded migrations via dotnet-ef, creating versioned migration files. Additionally, Response B created Department CRUD pages (essential for managing the FK relationship), used more modern Blazor patterns (SupplyParameterFromForm, Enhance), and had a build error that it successfully diagnosed and fixed. Response A produced clean code but fundamentally missed the migrations requirement.

        skill    (SlightlyBetter)  Generates Blazor components (.razor) for the Employee model with Create, Read, Update, Delete functionality
              Both responses create all 5 CRUD components (Index, Create, Edit, Details, Delete) for the Employee model. However, Response B uses more modern Blazor patterns — [SupplyParameterFromForm] and the Enhance attribute on EditForm for SSR/streaming support — whereas Response A uses simpler interactive-only patterns. Both are functional, but B follows more current .NET 8+ best practices. Response B also uses consistent Bootstrap styling with btn-outline-* variants for action buttons.
        tie      (Equal)  Creates an AppDbContext with DbSet properties for Employee
              Both responses create nearly identical AppDbContext classes in Data/AppDbContext.cs with DbSet<Employee> Employees and DbSet<Department> Departments using the expression-bodied Set<T>() pattern. Both register IDbContextFactory<AppDbContext> with SQLite in Program.cs. This criterion is equally satisfied by both.
        skill    (MuchBetter)  Uses EF Core migrations instead of seeding the database in Program.cs
              This is the most significant difference. Response A uses `dbContext.Database.EnsureCreated()` in Program.cs — this is explicitly NOT migrations, it bypasses the migration system entirely. Response A has no Migrations folder. Response B properly ran `dotnet ef migrations add InitialCreate` and `dotnet ef database update`, creating a full Migrations/ directory with the InitialCreate migration file and model snapshot. Response B's Program.cs does NOT contain EnsureCreated(). The rubric explicitly requires EF Core migrations, which Response A fails to deliver.                                                                                                                                                
        skill    (SlightlyBetter)  Handles related entities referenced by foreign keys in the Employee model                                                                                                                                                                                                                                                            
              Both responses handle the Employee→Department FK in the Employee CRUD components: department dropdown in Create/Edit, Include(e => e.Department) for display. However, Response B goes further by creating full Department CRUD pages (Index, Create, Edit, Details, Delete) and a Departments nav link. This is practically essential — without Department management, users cannot create departments to assign to employees, making the FK dropdown useless. Response B's migration also explicitly defines the FK constraint with cascade delete and a proper index on DepartmentId. Response A uses null-safe navigation (Department?.Name) which is slightly more defensive, but B's comprehensive approach is more complete.                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                        
1/1 skills passed validation

Copilot AI review requested due to automatic review settings March 11, 2026 15:19

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds a new dotnet-data skill (scaffold-generate-aspnet) plus an evaluation suite and fixtures to validate scaffolding best practices for ASP.NET Core + EF Core (notably migrations and FK-dependent CRUD).

Changes:

  • Introduces scaffold-generate-aspnet skill guidance for generating Razor Pages, Blazor components, and Minimal API CRUD (with OpenAPI metadata and migrations guidance).
  • Adds tests/dotnet-data/scaffold-generate-aspnet/eval.yaml scenarios to validate migrations, dependent-entity scaffolding, .http generation, and OpenAPI metadata.
  • Adds three fixture starter projects (Razor Pages, Minimal API, Blazor) used by the eval scenarios.

Reviewed changes

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

Show a summary per file
File Description
plugins/dotnet-data/skills/scaffold-generate-aspnet/SKILL.md New skill instructions for ASP.NET scaffolding + EF migrations + OpenAPI metadata + .http guidance
tests/dotnet-data/scaffold-generate-aspnet/eval.yaml Adds evaluation scenarios/assertions/rubrics for Razor Pages, Minimal API, and Blazor scaffolding
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/MyApp.csproj Razor Pages fixture project definition
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Program.cs Razor Pages fixture startup pipeline
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/appsettings.json Razor Pages fixture configuration
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/appsettings.Development.json Razor Pages dev configuration
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Properties/launchSettings.json Razor Pages fixture launch profiles
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Models/Product.cs Fixture entity with required FK to Category
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Models/Category.cs Fixture parent entity for FK scenario
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/_ViewStart.cshtml Razor Pages fixture view setup
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/_ViewImports.cshtml Razor Pages fixture imports/namespace
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Index.cshtml Razor Pages fixture home page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Index.cshtml.cs Razor Pages fixture page model
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Privacy.cshtml Razor Pages fixture privacy page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Privacy.cshtml.cs Razor Pages fixture privacy model
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Error.cshtml Razor Pages fixture error page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Error.cshtml.cs Razor Pages fixture error model
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Shared/_Layout.cshtml Razor Pages fixture layout
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Shared/_Layout.cshtml.css Razor Pages fixture layout CSS isolation
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/Pages/Shared/_ValidationScriptsPartial.cshtml Razor Pages fixture validation scripts partial
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/wwwroot/css/site.css Razor Pages fixture global CSS
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/wwwroot/js/site.js Razor Pages fixture JS placeholder
tests/dotnet-data/scaffold-generate-aspnet/fixtures/razor-pages-crud/wwwroot/favicon.ico Razor Pages fixture favicon
tests/dotnet-data/scaffold-generate-aspnet/fixtures/minimal-api/TodoApi.csproj Minimal API fixture project definition (includes OpenAPI package)
tests/dotnet-data/scaffold-generate-aspnet/fixtures/minimal-api/Program.cs Minimal API fixture startup and sample endpoint
tests/dotnet-data/scaffold-generate-aspnet/fixtures/minimal-api/Models/TodoItem.cs Minimal API fixture model to scaffold endpoints for
tests/dotnet-data/scaffold-generate-aspnet/fixtures/minimal-api/appsettings.json Minimal API fixture configuration
tests/dotnet-data/scaffold-generate-aspnet/fixtures/minimal-api/appsettings.Development.json Minimal API dev configuration
tests/dotnet-data/scaffold-generate-aspnet/fixtures/minimal-api/Properties/launchSettings.json Minimal API fixture launch profiles
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/BlazorApp.csproj Blazor fixture project definition
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Program.cs Blazor fixture startup pipeline
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Models/Employee.cs Blazor fixture entity with required FK to Department
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Models/Department.cs Blazor fixture parent entity for FK scenario
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/appsettings.json Blazor fixture configuration
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/appsettings.Development.json Blazor dev configuration
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Properties/launchSettings.json Blazor fixture launch profiles
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/_Imports.razor Blazor fixture component imports
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Routes.razor Blazor fixture routing component
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/App.razor Blazor fixture app host component
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Layout/MainLayout.razor Blazor fixture layout component
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Layout/MainLayout.razor.css Blazor fixture layout CSS isolation
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Layout/NavMenu.razor Blazor fixture nav menu
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Layout/NavMenu.razor.css Blazor fixture nav menu CSS isolation
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Layout/ReconnectModal.razor Blazor fixture reconnect UI
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Layout/ReconnectModal.razor.css Blazor fixture reconnect CSS isolation
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Layout/ReconnectModal.razor.js Blazor fixture reconnect JS
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Pages/Home.razor Blazor fixture home page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Pages/Counter.razor Blazor fixture counter page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Pages/Weather.razor Blazor fixture weather page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Pages/Error.razor Blazor fixture error page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/Components/Pages/NotFound.razor Blazor fixture not-found page
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/wwwroot/app.css Blazor fixture app CSS
tests/dotnet-data/scaffold-generate-aspnet/fixtures/blazor-crud/wwwroot/favicon.png Blazor fixture favicon

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

You can also share your feedback on Copilot code review. Take the survey.

Comment thread plugins/dotnet-data/skills/scaffold-generate-aspnet/SKILL.md
…d/Components/Routes.razor

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 11, 2026 17:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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


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

You can also share your feedback on Copilot code review. Take the survey.

Comment thread plugins/dotnet-data/skills/scaffold-generate-aspnet/SKILL.md Outdated
sayedihashimi and others added 2 commits March 11, 2026 13:21
…d/Components/Layout/ReconnectModal.razor.css

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 11, 2026 17:22

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 51 out of 53 changed files in this pull request and generated 1 comment.


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

You can also share your feedback on Copilot code review. Take the survey.

…d/Components/Layout/ReconnectModal.razor.css

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 11, 2026 17:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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


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

You can also share your feedback on Copilot code review. Take the survey.

Comment thread plugins/dotnet-data/skills/scaffold-generate-aspnet/SKILL.md Outdated
…d/Components/Layout/ReconnectModal.razor.css

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 11, 2026 17:31
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 51 out of 53 changed files in this pull request and generated 3 comments.


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

You can also share your feedback on Copilot code review. Take the survey.

Comment thread tests/dotnet-data/scaffold-generate-aspnet/fixtures/minimal-api/Program.cs Outdated
@sayedihashimi

Copy link
Copy Markdown
Contributor Author

I noticed that there is a lot of validation on fixture files, is that by design? These files are just for testing. It makes it harder to get a PR into a good state.

@timheuer @danmoseley

…i/Program.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 11, 2026 17:38

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 51 out of 53 changed files in this pull request and generated no new comments.


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

You can also share your feedback on Copilot code review. Take the survey.

@webreidi

Copy link
Copy Markdown
Contributor

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

❌ Evaluation failed. View workflow run

@webreidi

Copy link
Copy Markdown
Contributor

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

❌ Evaluation failed. View workflow run

@webreidi

Copy link
Copy Markdown
Contributor

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

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

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
create-datadriven-aspnetcore +60.0% [-26.1%, +146.1%] 3/0/0 4.7/5 2.5/5

🔍 Full Results - additional metrics and failure investigation steps

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

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

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

…uding models, DbContexts, and configuration files
@webreidi

Copy link
Copy Markdown
Contributor

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

❌ Evaluation failed. View workflow run

@webreidi

Copy link
Copy Markdown
Contributor

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

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

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline
create-datadriven-aspnetcore +68.0% [+10.8%, +125.2%] 4/1/0 4.7/5 3.5/5

🔍 Full Results - additional metrics and failure investigation steps

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

@webreidi

Copy link
Copy Markdown
Contributor

@AbhitejJohn @SamMonoRT this is ready for review

@webreidi

Copy link
Copy Markdown
Contributor

@AbhitejJohn @SamMonoRT @danroth27 Can someone do a review of this skill so we can decide whether to merge or cancel this PR, please?

@AbhitejJohn AbhitejJohn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Sorry, I had these all ready to go but didn't realize the comments weren't submitted yet. Can re-approve after these issues are addressed. Also tagging @javiercn for a review.

Comment thread tests/dotnet-data/create-datadriven-aspnetcore/eval.yaml Outdated
Comment thread tests/dotnet-data/create-datadriven-aspnetcore/eval.yaml Outdated
Comment thread tests/dotnet-data/create-datadriven-aspnetcore/eval.yaml Outdated
Comment thread tests/dotnet-data/create-datadriven-aspnetcore/eval.yaml
Comment thread tests/dotnet-data/create-datadriven-aspnetcore/eval.yaml Outdated
Comment thread plugins/dotnet-data/skills/create-datadriven-aspnetcore/SKILL.md Outdated
Comment thread plugins/dotnet-data/skills/create-datadriven-aspnetcore/SKILL.md Outdated
Comment thread plugins/dotnet-data/skills/create-datadriven-aspnetcore/SKILL.md
Comment thread plugins/dotnet-data/skills/create-datadriven-aspnetcore/SKILL.md
…updating file paths and adding checks for Razor Pages and DbContext presence
@webreidi

Copy link
Copy Markdown
Contributor

/evaluate

@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 1 improved, 0 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0); ⚠️ marks a comparison that couldn't complete (errored/unmatched trials).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline Overfit Skills Loaded
create-datadriven-aspnetcore +32.0% [+9.8%, +54.2%] 4/1/0 4.1/5 3.0/5 ✅ 0.18 5/5 · 5/5 (plugin)
ℹ️ Column legend
  • Δ Preference — mean head-to-head preference of skilled vs baseline (−100%…+100%), judged by vally compare.
  • [95% CI] — 95% confidence interval on that mean; a skill passes only when the whole interval is above 0.
  • W/T/L — wins / ties / losses across trials.
  • Quality / Baseline — mean absolute judge score 0–5 (skilled isolated vs skill-free control).
  • Overfit — overfitting-judge severity (✅ Low, 🟡 Moderate, 🔴 High, — none) with its score.
  • Skills Loaded — of the scenarios that expect activation, how many actually activated / that total (plugin run shown when present); ⚠️ marks a scenario that expected activation but didn't activate.
✅ create-datadriven-aspnetcore — details

Reason: Mean preference +32.0% [95% CI 9.8%, 54.2%], win rate 80.0% (4W/1T/0L over 5 trial(s)) — credibly better

Scenario Mean preference Trials (W/T/L)
▲ Scaffold Blazor CRUD components +40.0% 1/0/0
= Scaffold MVC CRUD with an existing DbContext +0.0% 0/1/0
▲ Scaffold Minimal API child and required parent CRUD +40.0% 1/0/0
▲ Scaffold Minimal API endpoints with OpenAPI +40.0% 1/0/0
▲ Scaffold Razor Pages CRUD with EF Core and SQLite +40.0% 1/0/0

🔍 Full Results - additional metrics and failure investigation steps

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

@webreidi

Copy link
Copy Markdown
Contributor

@AbhitejJohn all comments addressed and evals re-run. I think it's ready.

@AbhitejJohn

Copy link
Copy Markdown
Collaborator

🧪 Cross-family skill evaluation dispatched

A cross-family Vally evaluation has been triggered for the skill changed by this PR (create-datadriven-aspnetcore, plugin dotnet-data).

Results will be posted here when the run completes.

@AbhitejJohn AbhitejJohn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approving but please review the cross-family eval report before merging.

@AbhitejJohn

Copy link
Copy Markdown
Collaborator

🧪 Cross-family evaluation results — create-datadriven-aspnetcore

Run: https://github.com/dotnet/skills/actions/runs/30310542377
Scope: plugins=dotnet-data, skills=create-datadriven-aspnetcore · runs=3, workers=3
Cross-family pass rate: 4/5 executors (skill conclusively preferred over baseline)

Each executor's skilled output is compared head-to-head against its own no-skill baseline, judged by a model from a different family (judge ≠ executor).

Executor Model Judge Result Win rate (W/T/L) Mean preference
gpt gpt-5.5 claude-opus-4.8 ✅ pass 67% (10/3/2) +0.45
sonnet46 claude-sonnet-4.6 claude-opus-4.8 ✅ pass 80% (12/2/1) +0.53
haiku claude-haiku-4.5 claude-opus-4.8 ✅ pass 80% (12/3/0) +0.48
mai mai-code-1-flash-picker claude-opus-4.8 ✅ pass 67% (10/4/1) +0.48
opus claude-opus-4.8 gpt-5.5 ⚠️ inconclusive 92% (11/1/0) +0.67

Judge rule (verified): Opus executor → judged by gpt-5.5; all others → judged by claude-opus-4.8.

Notes

  • 4/5 conclusive passes — the skill is credibly preferred over the no-skill baseline for gpt, sonnet46, haiku, and mai.
  • opus was flagged inconclusive only because 3 of 15 trajectories were unmatched (12 matched). Its matched signal is actually the strongest of the set: mean preference +66.7%, 95% CI [43.5%, 89.9%], 11W/1T/0L — i.e. directionally a clear win, just short of the harness's conclusiveness bar due to unmatched trials.
  • Net: all 5 executors directionally prefer the skill; only opus falls short of statistical conclusiveness (a trajectory-matching artifact, not a quality regression). Solid signal for adding this scaffolding skill.

@webreidi
webreidi enabled auto-merge (squash) July 28, 2026 14:48
@webreidi

Copy link
Copy Markdown
Contributor

/evaluate 068711e

@webreidi
webreidi merged commit 7d51069 into dotnet:main Jul 28, 2026
33 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

📊 Skill Evaluation Results

1 skill(s) evaluated — 0 improved, 1 no credible improvement. A skill passes only on a credible improvement over baseline (mean preference > 0 with its 95% CI above 0); ⚠️ marks a comparison that couldn't complete (errored/unmatched trials).

Skill Result Δ Preference [95% CI] W/T/L Quality Baseline Overfit Skills Loaded
create-datadriven-aspnetcore +36.0% [-14.9%, +86.9%] 3/2/0 4.4/5 3.5/5 ✅ 0.11 5/5 · 5/5 (plugin)
ℹ️ Column legend
  • Δ Preference — mean head-to-head preference of skilled vs baseline (−100%…+100%), judged by vally compare.
  • [95% CI] — 95% confidence interval on that mean; a skill passes only when the whole interval is above 0.
  • W/T/L — wins / ties / losses across trials.
  • Quality / Baseline — mean absolute judge score 0–5 (skilled isolated vs skill-free control).
  • Overfit — overfitting-judge severity (✅ Low, 🟡 Moderate, 🔴 High, — none) with its score.
  • Skills Loaded — of the scenarios that expect activation, how many actually activated / that total (plugin run shown when present); ⚠️ marks a scenario that expected activation but didn't activate.
❌ create-datadriven-aspnetcore — details

Reason: Mean preference +36.0% [95% CI -14.9%, 86.9%], win rate 60.0% (3W/2T/0L over 5 trial(s)) — not credible (95% CI includes 0)

Scenario Mean preference Trials (W/T/L)
▲ Scaffold Blazor CRUD components +40.0% 1/0/0
= Scaffold MVC CRUD with an existing DbContext +0.0% 0/1/0
= Scaffold Minimal API child and required parent CRUD +0.0% 0/1/0
▲ Scaffold Minimal API endpoints with OpenAPI +100.0% 1/0/0
▲ Scaffold Razor Pages CRUD with EF Core and SQLite +40.0% 1/0/0

🔍 Full Results - additional metrics and failure investigation steps

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

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

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

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants