Skip to content

Commit 6c4fc72

Browse files
csharpfritzCopilot
andcommitted
chore: WingtipToys Run 32 benchmark output and sample improvements
- Run 32 report and screenshots (25/25 tests passing) - AfterWingtipToys markup and code-behind fixes from gap analysis - Migration artifacts for WingtipToys Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent a27306b commit 6c4fc72

80 files changed

Lines changed: 4366 additions & 1053 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
65.9 KB
Loading
76.1 KB
Loading
60.5 KB
Loading
77.3 KB
Loading
106 KB
Loading
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# WingtipToys Migration Benchmark — Run 32
2+
3+
| Field | Value |
4+
|-------|-------|
5+
| **Date** | 2026-05-05 |
6+
| **Branch** | `feature/wingtip-next-features-review` |
7+
| **CLI Commit** | HEAD (post-Bishop transforms) |
8+
| **Duration** | 00:41:21 |
9+
| **Result** |**25/25 acceptance tests passing** |
10+
11+
## Summary
12+
13+
Run 32 validates three new CLI transforms added in this session:
14+
15+
1. **EnforceCodeStyleInBuild=false** — suppresses analyzer-as-error in scaffolded projects
16+
2. **MarkupReferencedMemberStubTransform** — generates stub fields/methods for markup references missing from code-behind
17+
3. **ValidatorGenericTypeTransform** — adds explicit `Type="string"` / `InputType="string"` to BWFC validators
18+
19+
These transforms reduced initial build errors from **205** (Run 31) to **23** (Run 32 Phase 1), an **89% reduction**.
20+
21+
## Phase Results
22+
23+
### Phase 1: Migration Toolkit
24+
25+
```
26+
Input: 32 files (samples\WingtipToys)
27+
Output: 176 files (96 migrated + 80 static assets)
28+
Time: ~30s
29+
Errors: 0 CLI errors
30+
```
31+
32+
### Phase 2a: Build Repair
33+
34+
| Metric | Before | After |
35+
|--------|--------|-------|
36+
| Build errors | 23 | 0 |
37+
| Warnings | 33 | 8 |
38+
39+
**Fixes applied:**
40+
- Quarantined legacy OWIN/Identity/Bundling files (IdentityConfig.cs, BundleConfig.cs, Startup.Auth.cs, RouteConfig.cs, IdentityModels.cs)
41+
- Fixed markup transform gaps (missing route directives, template syntax)
42+
43+
### Phase 2b: Acceptance Test Repair
44+
45+
Initial test results: **17/25 passed** (8 failures)
46+
47+
**Failures grouped:**
48+
- 3 auth route issues → added `@page "/Account/Login"` and `@page "/Account/Register"` directives
49+
- 5 product data/link issues → wired `ProductContext` with InMemory EF, seeded 21 products from original `ProductDatabaseInitializer`, fixed product links and cart operations
50+
51+
### Phase 3: Final Acceptance Tests
52+
53+
```
54+
Test Run Successful.
55+
Total tests: 25
56+
Passed: 25
57+
Total time: 26.55 Seconds
58+
```
59+
60+
**All 25 tests green:**
61+
- NavigationTests ✅
62+
- StaticAssetTests ✅
63+
- ShoppingCartTests ✅
64+
- AuthenticationTests ✅
65+
66+
## Build Metrics
67+
68+
| Metric | Run 31 | Run 32 |
69+
|--------|--------|--------|
70+
| Initial build errors | 205 | 23 |
71+
| Post-repair errors | N/A (abandoned) | 0 |
72+
| Acceptance tests | 0/25 | 25/25 |
73+
| CLI transforms used | 14 | 16 (+2 new) |
74+
75+
## Key Improvements Over Run 31
76+
77+
1. **89% fewer initial errors** (205 → 23) thanks to member stub and analyzer suppression transforms
78+
2. **Full acceptance test pass** — first green run since Run 28 (April 27)
79+
3. **InMemory EF approach** eliminated LocalDB dependency for the benchmark
80+
4. **No L2 Copilot intervention needed** for validator generics (handled by CLI now)
81+
82+
## Remaining Gaps (for future runs)
83+
84+
1. **No automatic data layer wiring** — ProductContext and seed data required manual repair
85+
2. **OWIN/Identity quarantine is manual** — CLI could detect and exclude these files
86+
3. **Cart session state** — uses in-memory dictionary; production would need ProtectedSessionStorage
87+
4. **Static file copy NuGet warning** — UTF-8 BOM issue in `Migrate-NugetStaticAssets.ps1`
88+
5. **Home page carousel dot** — minor rendering artifact (extra period) visible in screenshot
89+
90+
## Screenshots
91+
92+
| Page | Screenshot |
93+
|------|-----------|
94+
| Home | ![Home](home.png) |
95+
| Products | ![Products](products.png) |
96+
| Product Details | ![Details](product-details.png) |
97+
| Shopping Cart | ![Cart](cart.png) |
98+
| Login | ![Login](login.png) |
99+
100+
## Files Modified (Phase 2 Repair)
101+
102+
<details>
103+
<summary>Expand file list</summary>
104+
105+
- `samples/AfterWingtipToys/WingtipToys.csproj` — quarantine excludes, InMemory EF package
106+
- `samples/AfterWingtipToys/Program.cs` — ProductContext registration, seed data
107+
- `samples/AfterWingtipToys/Account/Login.razor` — added `/Account/Login` route
108+
- `samples/AfterWingtipToys/Account/Register.razor` — added `/Account/Register` route
109+
- `samples/AfterWingtipToys/ProductList.razor` — fixed product links
110+
- `samples/AfterWingtipToys/ProductList.razor.cs` — injected ProductContext
111+
- `samples/AfterWingtipToys/ProductDetails.razor.cs` — injected ProductContext
112+
- `samples/AfterWingtipToys/ShoppingCart.razor` — fixed cart table markup
113+
- `samples/AfterWingtipToys/ShoppingCart.razor.cs` — wired cart operations
114+
115+
</details>
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
@page "/About"
2-
32
<PageTitle>About</PageTitle>
43
<Site>
5-
<Content ContentPlaceHolderID="MainContent">
6-
<h1>About</h1>
7-
<p>Wingtip Toys is a sample storefront focused on transportation-themed toys and a migration-friendly shopping experience.</p>
8-
</Content>
4+
<ChildComponents>
5+
<Content ContentPlaceHolderID="MainContent">
6+
<h2>@(Title).</h2>
7+
<h3>Your application description page.</h3>
8+
<p>Use this area to provide additional information.</p>
9+
</Content>
10+
</ChildComponents>
911
</Site>
Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,32 @@
1-
@page "/Account/AddPhoneNumber"
2-
3-
<PageTitle>Add phone number</PageTitle>
1+
@page "/AddPhoneNumber"
2+
<PageTitle>Phone Number</PageTitle>
43
<Site>
5-
<Content ContentPlaceHolderID="MainContent">
6-
<h1>Add phone number</h1>
7-
<p>This workflow is not implemented in the migrated benchmark sample.</p>
8-
</Content>
4+
<ChildComponents>
5+
<Content ContentPlaceHolderID="MainContent">
6+
<h2>@(Title).</h2>
7+
8+
<div class="form-horizontal">
9+
<h4>Add a phone number</h4>
10+
<hr />
11+
<ValidationSummary CssClass="text-danger" />
12+
<p class="text-danger">
13+
<Literal id="ErrorMessage" @ref="ErrorMessage" />
14+
</p>
15+
<div class="form-group">
16+
<Label AssociatedControlID="PhoneNumber" CssClass="col-md-2 control-label">Phone Number</Label>
17+
<div class="col-md-10">
18+
<TextBox id="PhoneNumber" @ref="PhoneNumber" CssClass="form-control" TextMode="@TextBoxMode.Phone" />
19+
<RequiredFieldValidator Type="string" ControlToValidate="PhoneNumber"
20+
CssClass="text-danger" ErrorMessage="The PhoneNumber field is required." />
21+
</div>
22+
</div>
23+
<div class="form-group">
24+
<div class="col-md-offset-2 col-md-10">
25+
<Button OnClick="@PhoneNumber_Click"
26+
Text="Submit" CssClass="btn btn-default" />
27+
</div>
28+
</div>
29+
</div>
30+
</Content>
31+
</ChildComponents>
932
</Site>
Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
1-
@page "/Account/Confirm"
2-
3-
<PageTitle>Account confirmation</PageTitle>
1+
@page "/Confirm"
2+
<PageTitle>Account Confirmation</PageTitle>
43
<Site>
5-
<Content ContentPlaceHolderID="MainContent">
6-
<h1>Account confirmation</h1>
7-
<p>Account confirmation is not required for this migrated benchmark sample.</p>
8-
</Content>
4+
<ChildComponents>
5+
<Content ContentPlaceHolderID="MainContent">
6+
<h2>@(Title).</h2>
7+
8+
<div>
9+
<PlaceHolder id="successPanel" @ref="successPanel" Visible="true">
10+
<p>
11+
Thank you for confirming your account. Click <HyperLink id="login" @ref="login" NavigateUrl="/Account/Login">here</HyperLink> to login
12+
</p>
13+
</PlaceHolder>
14+
<PlaceHolder id="errorPanel" @ref="errorPanel" Visible="false">
15+
<p class="text-danger">
16+
An error has occurred.
17+
</p>
18+
</PlaceHolder>
19+
</div>
20+
</Content>
21+
</ChildComponents>
922
</Site>
Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,43 @@
1-
@page "/Account/Forgot"
2-
3-
<PageTitle>Forgot your password?</PageTitle>
1+
@page "/Forgot"
2+
<PageTitle>Forgot password</PageTitle>
43
<Site>
5-
<Content ContentPlaceHolderID="MainContent">
6-
<h1>Forgot your password?</h1>
7-
<p>Password reset is not implemented in the migrated benchmark sample.</p>
8-
</Content>
4+
<ChildComponents>
5+
<Content ContentPlaceHolderID="MainContent">
6+
<h2>@(Title).</h2>
7+
8+
<div class="row">
9+
<div class="col-md-8">
10+
<PlaceHolder id="loginForm" @ref="loginForm">
11+
<div class="form-horizontal">
12+
<h4>Forgot your password?</h4>
13+
<hr />
14+
<PlaceHolder id="ErrorMessage" @ref="ErrorMessage" Visible="false">
15+
<p class="text-danger">
16+
<Literal id="FailureText" @ref="FailureText" />
17+
</p>
18+
</PlaceHolder>
19+
<div class="form-group">
20+
<Label AssociatedControlID="Email" CssClass="col-md-2 control-label">Email</Label>
21+
<div class="col-md-10">
22+
<TextBox id="Email" @ref="Email" CssClass="form-control" TextMode="@TextBoxMode.Email" />
23+
<RequiredFieldValidator Type="string" ControlToValidate="Email"
24+
CssClass="text-danger" ErrorMessage="The email field is required." />
25+
</div>
26+
</div>
27+
<div class="form-group">
28+
<div class="col-md-offset-2 col-md-10">
29+
<Button OnClick="@OnForgot" Text="Submit" CssClass="btn btn-default" />
30+
</div>
31+
</div>
32+
</div>
33+
</PlaceHolder>
34+
<PlaceHolder id="DisplayEmail" @ref="DisplayEmail" Visible="false">
35+
<p class="text-info">
36+
Please check your email to reset your password.
37+
</p>
38+
</PlaceHolder>
39+
</div>
40+
</div>
41+
</Content>
42+
</ChildComponents>
943
</Site>

0 commit comments

Comments
 (0)