Skip to content

Commit e2111e4

Browse files
csharpfritzCopilot
andcommitted
docs(ai-team): log benchmark fixes session and merge decisions
Session: 2026-03-04-benchmark-fixes Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-04-benchmark-fixes.md - Merged 6 decision files from inbox into decisions.md - Consolidated overlapping toolkit-location decisions - Normalized inbox decision block formats (# Decision -> ###) - Propagated cross-agent updates to 6 agent history files - Deleted merged inbox files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent ad25738 commit e2111e4

13 files changed

Lines changed: 116 additions & 99 deletions

.ai-team/agents/beast/history.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,7 @@
142142
- Added "Migration Tests" nav section to `mkdocs.yml` after the Migration section.
143143
- **Convention established:** Each migration test run gets its own subfolder named `{app}-{YYYY-MM-DD}` containing `report.md` and an `images/` directory. The README.md index links to all runs.
144144

145+
146+
Team update (2026-03-04): Migration test reports go in docs/migration-tests/ directed by Jeffrey T. Fritz
147+
Team update (2026-03-04): PRs must target upstream FritzAndFriends repo, not origin fork directed by Jeffrey T. Fritz
148+
Team update (2026-03-04): Layer 1 benchmark baseline established by Cyclops data at docs/migration-tests/wingtiptoys-2026-03-04/ decided by Cyclops

.ai-team/agents/colossus/history.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,5 @@ Added 5 smoke tests (Timer, UpdatePanel, UpdateProgress, ScriptManager, Substitu
8282

8383
Team update (2026-03-03): ListView CRUD test conventions established 43 tests, event ordering via List<string>, cancellation assertions, bUnit double-render handling decided by Rogue
8484

85+
86+
Team update (2026-03-04): PRs must target upstream FritzAndFriends repo, not origin fork directed by Jeffrey T. Fritz

.ai-team/agents/cyclops/history.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,7 @@ Team update (2026-02-28): GetCssClassOrNull() uses IsNullOrEmpty not IsNullOrWhi
120120
- **Architecture:** SQLite, scoped CartStateService/CheckoutStateService, MockPayPalService, ASP.NET Core Identity with canEdit role.
121121
- **Pattern:** Layer 2+3 takes ~9 min with Copilot vs estimated 4-8 hours manually. The migration skills provide reliable translation rules. Having a reference implementation (AfterWingtipToys) to validate against accelerates decisions significantly.
122122

123+
124+
Team update (2026-03-04): Migration test reports go in docs/migration-tests/ directed by Jeffrey T. Fritz
125+
Team update (2026-03-04): PRs must target upstream FritzAndFriends repo, not origin fork directed by Jeffrey T. Fritz
126+
Team update (2026-03-04): migration-toolkit/ is the distribution package for external users; .github/skills/ is internal only decided by Forge, Jeffrey T. Fritz

.ai-team/agents/forge/history.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,6 @@ Team updates (2026-03-02): Unified release (PR #408), project reframed as migrat
138138

139139
**Key learning:** Distributable assets (things end-users copy to their own projects) live in `migration-toolkit/`. Internal project skills (things that help contributors work on THIS repo) live in `.github/skills/`. Clean separation prevents confusion about what ships to customers vs what's internal tooling.
140140
Team updates (2026-03-02-03): Unified release (PR #408), project reframed as migration system (Jeff), ModelErrorMessage docs (Beast), themes last directive (Jeff Fritz).
141+
142+
Team update (2026-03-04): PRs must target upstream FritzAndFriends repo, not origin fork directed by Jeffrey T. Fritz
143+
Team update (2026-03-04): Layer 1 benchmark: 14 unconverted expressions + 4 Register directives define Layer 2 scope decided by Cyclops

.ai-team/agents/jubilee/history.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,5 @@
9090

9191
Team update (2026-03-03): WingtipToys 7-phase feature schedule established 26 work items, critical path through Data Foundation Product Browsing Shopping Cart Checkout Polish decided by Forge
9292

93+
94+
Team update (2026-03-04): PRs must target upstream FritzAndFriends repo, not origin fork directed by Jeffrey T. Fritz

.ai-team/agents/rogue/history.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,5 @@ Key test patterns: (1) CSS class selectors for template switching. (2) cut.Invok
9292
Key file paths: `src/BlazorWebFormsComponents.Test/ListView/EditTemplateTests.razor`, `src/BlazorWebFormsComponents.Test/FormView/RenderOuterTable.razor`, `src/BlazorWebFormsComponents.Test/ListView/ListViewCrudEventTests.razor`.
9393

9494
Team updates (2026-03-02-03): Skins roadmap (Forge), M22 planned (Forge), project reframed as migration system (Jeff), ModelErrorMessage spec (Forge), themes last directive (Jeff Fritz), IOrderedDictionary on ListView EventArgs (Cyclops), WingtipToys 7-phase schedule (Forge).
95+
96+
Team update (2026-03-04): PRs must target upstream FritzAndFriends repo, not origin fork directed by Jeffrey T. Fritz

.ai-team/decisions.md

Lines changed: 99 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5464,7 +5464,6 @@ Nothing is rendered (the component returns `null` / empty fragment). This matche
54645464
**What:** Created `docs/ValidationControls/ModelErrorMessage.md` for the new ModelErrorMessage validation component. Added to `mkdocs.yml` nav (alphabetical within Validation Controls). Updated `status.md` — Validation Controls count from 7→8, total from 51→52.
54655465
**Why:** M21 wrap-up deliverable. ModelErrorMessage is a new validation component that displays model state errors for a specific key, matching `<asp:ModelErrorMessage>`. Documentation covers: features (ModelStateKey, AssociatedControlID, SetFocusOnError, CssClass), Web Forms→Blazor syntax comparison, EditContext/ValidationMessageStore code-behind migration pattern, and HTML output. Follows established validation control documentation pattern.
54665466

5467-
54685467
### ModelErrorMessage integration test coverage added
54695468

54705469
**By:** Colossus
@@ -5476,13 +5475,11 @@ Nothing is rendered (the component returns `null` / empty fragment). This matche
54765475
**What:** PRs should always target the upstream repository (FritzAndFriends/BlazorWebFormsComponents), not the fork (csharpfritz/BlazorWebFormsComponents). Use cross-fork PR format: head = csharpfritz:{branch}, base = dev on FritzAndFriends.
54775476
**Why:** User request captured for team memory
54785477

5479-
54805478
### 2026-03-02: WingtipToys Migration Analysis Results
54815479
**By:** Forge
54825480
**What:** Comprehensive page-by-page comparison of all 33 WingtipToys source files (.aspx/.ascx/.master) against their migrated Blazor equivalents (.razor). Layer 1 (bwfc-migrate.ps1) successfully handled ~70% of markup transforms: 147+ tag prefix removals, 165+ runat="server" removals, Content wrapper stripping, @page directive generation, ~35 expression conversions, ItemType→TItem conversion, comment syntax, and URL prefix conversion. 18 data-binding expressions remain unconverted (<%#: syntax), 8 SelectMethod attributes need Items/DataItem replacement, 3 GetRouteUrl calls need route interpolation, 3 user-control tag prefixes (uc:, friendlyUrls:) need stripping. BWFC has 100% control coverage for WingtipToys (28/29 controls exist; ContentPlaceHolder maps to @Body). 4 pages are fully ready, 21 need Layer 2 skill work, 8 need Layer 3 architecture (Identity, EF, Session, PayPal). Estimated total migration effort: 18-26 hours across all three layers.
54835481
**Why:** Jeff needs to understand the effectiveness of the three-layer migration pipeline (Script → Skill → Agent) before the M22 Copilot-Led Migration Showcase. This analysis validates that Layer 1 handles high-volume mechanical transforms effectively, Layer 2 covers structural patterns via the Copilot Skill, and Layer 3 architectural decisions are limited to auth/data/session/integrations. The pipeline is proven: a developer using all three layers could migrate WingtipToys to a running Blazor app in under a day. Key actionable findings: (1) Layer 1 should add regex for <%#: Item.X %> → @context.X conversion, (2) Layer 1 should strip user-control tag prefixes during Register directive removal, (3) Account pages should use scaffolded Identity UI rather than migrating OWIN code-behind, (4) SelectMethod→Items is the #1 most common Layer 2 transform.
54845482

5485-
54865483
### 2026-03-02: Original WingtipToys Build & Run Configuration
54875484
**By:** Cyclops
54885485
**Date:** 2026-03-02
@@ -5543,21 +5540,119 @@ Jeff reframed the project as a "migration acceleration system." The toolkit is t
55435540
- **Jubilee:** The QUICKSTART references `samples/AfterWingtipToys/` as reference implementation.
55445541
- **All:** Three remaining docs (ARCHITECTURE-GUIDE.md, FAQ.md, CASE-STUDY.md) can be authored when prioritized.
55455542

5546-
55475543
### 2026-03-02: User directive Themes implementation last
55485544
**By:** Jeff Fritz (via Copilot)
55495545
**What:** Themes (#369, M11 Full Skins & Themes) should come LAST in priority. ListView CRUD events first, then WingtipToys remaining features, then themes.
55505546
**Why:** User request captured for team memory
5547+
55515548
### 2026-03-04: ListView EventArgs use IOrderedDictionary for Web Forms parity
55525549
**By:** Cyclops
55535550
**What:** Added IOrderedDictionary properties to ListViewInsertEventArgs (Values), ListViewUpdateEventArgs (Keys, OldValues, NewValues), and ListViewDeleteEventArgs (Keys, Values), initialized to empty OrderedDictionary in constructors. Matches FormViewUpdateEventArgs/FormViewDeleteEventArgs pattern. Also added TotalRowCount to ListViewPagePropertiesChangingEventArgs.
55545551
**Why:** ListView CRUD EventArgs were missing dictionary-based properties (Keys, Values, OldValues, NewValues) that Web Forms originals expose. Consumers can now populate these in event handlers, matching the Web Forms programming model. No breaking changes all new properties are additive. This supersedes the earlier M7 decision to avoid OrderedDictionary on ListView; full parity is now required.
5552+
55555553
### 2026-03-02: ListView CRUD Event Test Conventions
55565554
**By:** Rogue
55575555
**What:** 43 bUnit tests for all 16 ListView CRUD events. Conventions: (1) event ordering via List<string> with ShouldBe assertions, (2) cancellation tests set Cancel=true and assert -ed handler stays null, (3) DataBound/ItemDataBound use ShouldBeGreaterThanOrEqualTo for bUnit double-render, (4) ItemCreated needs async test with InvokeAsync, (5) CancelMode detection: InsertItemPosition!=None && EditIndex<0 = CancelingInsert.
55585556
**Why:** Proactive tests written ahead of implementation for immediate CI validation. Patterns should be followed for any future ListView event tests.
5557+
55595558
### 2026-03-03: WingtipToys remaining feature schedule
55605559
**By:** Forge
55615560
**What:** 7-phase prioritized schedule for WingtipToys migration: (1) Data Foundation EF Core, models, CartStateService, BoundField fix; (2) Product Browsing ProductList/Details data binding; (3) Shopping Cart AddToCart, ShoppingCart wiring; (4) Checkout Flow CheckoutStateService, mock PayPal, checkout pages; (5) Admin add/remove product, FileUpload, validation; (6) Identity & Auth ASP.NET Core Identity, login/register, authorization; (7) Polish CSS verification, smoke test. 26 work items total (10S + 13M + 2L). Critical path: Phase 1 2 3 4 7. Max parallelism after Phase 1.
55625561
**Why:** Jeff requested prioritization of remaining WingtipToys features. Gap is almost entirely code-behind logic markup/BWFC migration is done. ~10-14 working days with parallel execution.
55635562

5563+
### 2026-03-04: User directive — migration test reports location
5564+
**By:** Jeffrey T. Fritz (via Copilot)
5565+
**What:** Migration test runs with screenshots and measurements go in `docs/migration-tests/` with a subfolder per run containing a markdown report and supporting images. This is the standard location for all migration benchmarking.
5566+
**Why:** User request — establishes a repeatable pattern for tracking migration test results over time.
5567+
5568+
### 2026-03-03: User directive — PRs target upstream
5569+
**By:** Jeffrey T. Fritz (via Copilot)
5570+
**What:** Pull requests should be created on the upstream repository (FritzAndFriends/BlazorWebFormsComponents), not the origin fork (csharpfritz/BlazorWebFormsComponents). Use `gh pr create --repo FritzAndFriends/BlazorWebFormsComponents` or equivalent.
5571+
**Why:** User request — captured for team memory. The fork is for pushing branches; PRs belong on the org repo.
5572+
5573+
### 2026-03-03: User directive — distributable assets location
5574+
**By:** Jeffrey T. Fritz (via Copilot)
5575+
**What:** Distributable migration skills and PowerShell scripts must NOT live in `.github/skills/`. They belong in a `migration-toolkit/` folder that contains everything needed for external projects to consume. The `.github/skills/` folder is reserved for internal project skills only. Move the 3 BWFC migration skills and the PowerShell scripts (bwfc-scan.ps1, bwfc-migrate.ps1) into migration-toolkit/.
5576+
**Why:** User request — the toolkit is a product to distribute, not internal project configuration.
5577+
5578+
5579+
### 2026-03-04: Layer 1 Benchmark Baseline Established
5580+
**By:** Cyclops
5581+
**Status:** Informational
5582+
5583+
## What
5584+
5585+
Ran bwfc-scan.ps1 and bwfc-migrate.ps1 against WingtipToys to establish Layer 1 benchmark baselines. Results saved to `docs/migration-tests/wingtiptoys-2026-03-04/`.
5586+
5587+
## Key Numbers
5588+
5589+
- **Scan:** 0.9s, 32 files, 230 controls, 100% BWFC coverage
5590+
- **Migrate:** 2.4s, 276 transforms, 33 .razor files generated, 18 manual items flagged
5591+
- **Build:** 338 errors (expected — code-behind not yet transformed)
5592+
5593+
## Observations for the Team
5594+
5595+
1. **bwfc-migrate.ps1 scaffold targets net8.0** — should be updated to detect repo TFM or default to net10.0. Also generates NuGet PackageReference instead of ProjectReference for local dev.
5596+
2. **14 unconverted code blocks** are complex data binding expressions (`<%#: String.Format(...)%>`, `<%#: GetRouteUrl(...)%>`). These should be targeted by Layer 2 Copilot skill transforms.
5597+
3. **Register directives** are stripped but the component tag prefixes (`uc:`, `friendlyUrls:`) remain in markup as bare tags. Layer 2 needs to resolve these to Blazor component references.
5598+
4. **All 338 build errors are in code-behind** — markup transforms are clean. This validates the Layer 1 / Layer 2 boundary.
5599+
5600+
## Impact
5601+
5602+
- Beast: benchmark data is ready at `docs/migration-tests/wingtiptoys-2026-03-04/layer1-results.md`
5603+
- Forge: the 14 unconverted expressions + 4 Register directives define Layer 2 scope for markup
5604+
- All: `samples/FreshWingtipToys/` is the new fresh migration target — do NOT touch `samples/AfterWingtipToys/`
5605+
5606+
5607+
### 2026-03-04: Layer 2+3 Benchmark Approach
5608+
**By:** Cyclops
5609+
**Status:** Implemented
5610+
5611+
## Context
5612+
5613+
Layer 1 scripts produced FreshWingtipToys with 33 .razor files and 338 build errors. The task was to complete the migration using the BWFC migration skills and capture timing.
5614+
5615+
## Decisions
5616+
5617+
1. **Account pages copied from AfterWingtipToys reference.** Identity migration is complex (15 pages with UserManager, SignInManager, role checks) and boilerplate. In a real migration, these would be generated from ASP.NET Core Identity scaffolding. Time saved: ~15-20 min.
5618+
5619+
2. **MockPayPalService instead of real NVPAPICaller.** The original used PayPal NVP API (deprecated). Modern approach would be PayPal REST API v2 with HttpClient. Mock is sufficient for the benchmark.
5620+
5621+
3. **ProductDetails simplified from FormView to direct rendering.** The original used FormView with SelectMethod for a single product. Direct property rendering is simpler and more idiomatic Blazor.
5622+
5623+
4. **SQLite for development database.** Matches AfterWingtipToys. One-line change to switch to SQL Server for production.
5624+
5625+
5. **Site.Mobile.razor and ViewSwitcher.razor stubbed.** Blazor uses responsive CSS, not separate mobile layouts.
5626+
5627+
## Impact
5628+
5629+
- Total Layer 2+3 migration: **~9.4 minutes** with Copilot
5630+
- 81 files changed, 1540 insertions, 2807 deletions
5631+
- Clean build: 0 errors, 0 warnings
5632+
- The migration skills (bwfc-migration, bwfc-data-migration) provided accurate translation rules for every pattern encountered
5633+
5634+
5635+
### 2026-03-03: Restructure migration-toolkit as self-contained distribution package (consolidated)
5636+
**By:** Forge, Jeffrey T. Fritz
5637+
**Status:** Implemented
5638+
5639+
## Context
5640+
5641+
Distributable migration skills (bwfc-migration, bwfc-identity-migration, bwfc-data-migration) were located in `.github/skills/` alongside internal project skills (webforms-migration, documentation, component-development, bunit-test-migration, aspire). This mixed distributable assets with internal tooling, making it unclear what end-users should copy to their own projects.
5642+
5643+
## Decision
5644+
5645+
Move all distributable migration assets into `migration-toolkit/` as a self-contained distribution package:
5646+
5647+
- **`migration-toolkit/skills/`** — 3 Copilot skill files that users copy into their project's `.github/skills/`
5648+
- **`migration-toolkit/scripts/`** — 2 PowerShell scripts (bwfc-scan.ps1, bwfc-migrate.ps1) that users copy to their project root
5649+
- **`.github/skills/`** — retains only internal project skills used by contributors to this repo
5650+
5651+
Scripts are copied (not moved) because `scripts/` originals are still used by the project internally.
5652+
5653+
## Consequences
5654+
5655+
- `migration-toolkit/` is now the single artifact a user downloads/copies to migrate their Web Forms app
5656+
- No confusion about which skills are for end-users vs which are internal
5657+
- README.md updated with explicit usage instructions and NuGet link
5658+
- Relative links in README.md updated from `../scripts/` and `../.github/skills/` to local `scripts/` and `skills/` paths

.ai-team/decisions/inbox/copilot-directive-migration-tests-folder.md

Lines changed: 0 additions & 4 deletions
This file was deleted.

.ai-team/decisions/inbox/copilot-directive-pr-target.md

Lines changed: 0 additions & 4 deletions
This file was deleted.

.ai-team/decisions/inbox/copilot-directive-toolkit-location.md

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)