adding scaffolding skill and test - #329
Conversation
There was a problem hiding this comment.
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-aspnetskill 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.yamlscenarios to validate migrations, dependent-entity scaffolding,.httpgeneration, 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.
…d/Components/Routes.razor Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
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.
…d/Components/Layout/ReconnectModal.razor.css Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
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>
There was a problem hiding this comment.
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.
…d/Components/Layout/ReconnectModal.razor.css Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
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.
|
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. |
…i/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
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.
|
/evaluate |
|
❌ Evaluation failed. View workflow run |
|
/evaluate |
|
❌ Evaluation failed. View workflow run |
…ng configurations
|
/evaluate |
📊 Skill Evaluation Results1 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).
🔍 Full Results - additional metrics and failure investigation steps
▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
…uding models, DbContexts, and configuration files
|
/evaluate |
|
❌ Evaluation failed. View workflow run |
|
/evaluate |
📊 Skill Evaluation Results1 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).
🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
|
@AbhitejJohn @SamMonoRT this is ready for review |
|
@AbhitejJohn @SamMonoRT @danroth27 Can someone do a review of this skill so we can decide whether to merge or cancel this PR, please? |
AbhitejJohn
left a comment
There was a problem hiding this comment.
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.
…updating file paths and adding checks for Razor Pages and DbContext presence
|
/evaluate |
📊 Skill Evaluation Results1 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);
ℹ️ Column legend
✅ create-datadriven-aspnetcore — detailsReason: Mean preference +32.0% [95% CI 9.8%, 54.2%], win rate 80.0% (4W/1T/0L over 5 trial(s)) — credibly better
🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
|
@AbhitejJohn all comments addressed and evals re-run. I think it's ready. |
|
🧪 Cross-family skill evaluation dispatched A cross-family Vally evaluation has been triggered for the skill changed by this PR (
Results will be posted here when the run completes. |
AbhitejJohn
left a comment
There was a problem hiding this comment.
Approving but please review the cross-family eval report before merging.
🧪 Cross-family evaluation results —
|
| 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 | 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.
|
/evaluate 068711e |
📊 Skill Evaluation Results1 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);
ℹ️ Column legend
❌ create-datadriven-aspnetcore — detailsReason: 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)
🔍 Full Results - additional metrics and failure investigation steps
▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
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