**WORKFLOW SKILL** — Execute end-to-end ContosoUniversity migration benchmark: clear output folder, run L1 script + L2 Copilot transforms, build, run Playwright acceptance tests, and generate a numbered run report. WHEN: "run contoso migration test", "test contoso university migration", "contoso migration benchmark", "run CU migration". INVOKES: bwfc-migrate.ps1, bwfc-migration skill, bwfc-data-migration skill, bwfc-identity-migration skill, migration-standards skill, dotnet CLI, Playwright tests.
97
96%
Does it follow best practices?
Impact
100%
3.03xAverage score across 3 eval scenarios
Passed
No known issues
End-to-end migration benchmark that converts the ContosoUniversity Web Forms sample to Blazor Server and validates with 40 Playwright acceptance tests.
| Item | Path |
|---|---|
| Web Forms source | samples/ContosoUniversity/ContosoUniversity/ |
| Blazor output | samples/AfterContosoUniversity/ |
| L1 script | migration-toolkit/scripts/bwfc-migrate.ps1 |
| Migration skills | migration-toolkit/skills/ (4 skills) |
| Acceptance tests | src/ContosoUniversity.AcceptanceTests/ |
| Run reports | dev-docs/migration-tests/contosouniversity/ |
ContosoUniversity database (attach samples/ContosoUniversity/ContosoUniversity.mdf if needed)pwsh bin/Debug/net10.0/playwright.ps1 install from test project after first build)runNN folders in dev-docs/migration-tests/contosouniversity/ and use the next sequential numbersamples/AfterContosoUniversity/ but keep the directory itselfExpected duration: < 2 seconds
.\migration-toolkit\scripts\bwfc-migrate.ps1 `
-Path samples\ContosoUniversity\ContosoUniversity `
-Output samples\AfterContosoUniversity `
-Verbose.razor files created, no .aspx files in outputExpected duration: 20–30 minutes
Load and apply all four migration skills from migration-toolkit/skills/:
| Skill | Responsibility |
|---|---|
migration-standards | Target architecture (.NET 10, Server Interactive), page base class, render mode |
bwfc-migration | Control translation, data binding expressions, Master→Layout, code-behind lifecycle |
bwfc-data-migration | EF6→EF Core, Session→Scoped services, Global.asax→Program.cs, Web.config→appsettings |
bwfc-identity-migration | Identity/auth migration (if applicable to source) |
Key transforms to execute:
Page_Load → OnInitializedAsync)SelectMethod as SelectHandler<ItemType> delegates (NOT Items=)DbContext with SQL Server LocalDB connectionProgram.cs with DI registration for all BLL servicesSite.Master → MainLayout.razorIDbContextFactory)dotnet build samples\AfterContosoUniversity\$env:ASPNETCORE_URLS = "http://localhost:44380"
dotnet run --project samples\AfterContosoUniversity\http://localhost:44380$env:CONTOSO_BASE_URL = "http://localhost:44380"
dotnet test src\ContosoUniversity.AcceptanceTests\ --verbosity normaldev-docs/migration-tests/contosouniversity/runNN/REPORT.md using REPORT-TEMPLATE.md| Rule | Detail |
|---|---|
| Database | SQL Server LocalDB — never SQLite |
| Connection | Server=(localdb)\mssqllocaldb;Database=ContosoUniversity |
| SelectMethod | Preserve as SelectHandler<ItemType> delegate — never convert to Items= |
| L1→L2 handoff | No manual fixes between layers — L2 starts from raw L1 output |
| Report every run | Even failed/partial runs get a report documenting what went wrong |
| ItemType | Use ItemType (not TItem) for all data-bound component type parameters |
9bf8669
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.