Commit 70feccc
Milestone 22: WingtipToys Migration Tooling Pipeline (#413)
* chore: bump version.json to 0.17 for next dev cycle
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add TDD tests for ListView EditItemTemplate rendering (Issue #406)
Write 6 bUnit tests in EditTemplateTests.razor verifying EditItemTemplate
renders when EditIndex matches item index. 2 pass (negative/null edge cases),
4 fail pre-fix confirming the template swap bug described in Issue #406.
Tests cover: EditIndex parameter rendering, non-matching items still using
ItemTemplate, default EditIndex=-1, HandleCommand edit/cancel template swap,
and EditItemTemplate null fallback.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix ListView EditItemTemplate not rendering when EditIndex changes (#406)
The template selection logic and even/odd toggle were inside CascadingValue's
ChildContent, which is a deferred RenderFragment. Variables like dataItemIndex
captured by this closure had their final loop value (item count) instead of the
per-iteration value when the CascadingValue rendered.
Moved template selection and even/odd toggle before the CascadingValue so they
execute during BuildRenderTree when dataItemIndex has the correct value per
iteration. Also updated the CrudEvents test to assert actual template rendering
instead of documenting the gap.
Closes #406
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Update Cyclops history and decision inbox for #406 fix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix ListView EditItemTemplate not rendering on EditIndex change (#406)
Add @key="dataItemIndex" to CascadingValue elements in ListView.razor's
foreach loops (both non-grouped and grouped paths). Without @key, Blazor's
positional diff did not detect template swaps when EditIndex changed because
the CascadingValue structure looked identical to the diff engine.
Closes #406
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): log M22 planning session, merge decisions
Session: 2026-03-02-m22-planning-release
Requested by: Jeffrey T. Fritz
Changes:
- Logged session to .ai-team/log/2026-03-02-m22-planning-release.md
- Merged Forge M22 planning decision from inbox
- Merged Cyclops ListView EditItemTemplate fix decision from inbox
- Merged Rogue ListView EditTemplate TDD tests decision from inbox
- Propagated M22 planning updates to agent histories
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): summarize oversized agent histories
Session: 2026-03-02-m22-planning-release
Requested by: Jeffrey T. Fritz
Changes:
- Summarized forge history.md (17KB > 10KB): M17 gate review through Themes roadmap
- Summarized cyclops history.md (17KB > 12KB): M20 theming and release process
- Summarized rogue history.md (13KB > 10KB): M20 theming and FontInfo tests
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Added WingtipToys
* docs(ai-team): WingtipToys migration analysis session
Session: 2026-03-02-wingtiptoys-migration-analysis
Requested by: Jeffrey T. Fritz
Changes:
- Logged session to .ai-team/log/2026-03-02-wingtiptoys-migration-analysis.md
- Merged Forge's migration plan from inbox into decisions.md
- Propagated team update to agent history files
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): merge squad WingtipToys defaults from inbox
Session: 2026-03-02-wingtiptoys-migration-analysis
Requested by: Jeffrey T. Fritz
Changes:
- Merged squad-wingtiptoys-defaults.md from inbox into decisions.md
- Deleted processed inbox file
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(FormView): Add RenderOuterTable parameter
When RenderOuterTable=false, FormView renders template content directly
without the wrapping <table> element, matching Web Forms behavior.
Default is true for backward compatibility.
Includes 8 new bUnit tests covering default, explicit true/false,
empty data, edit mode, and structural equivalence scenarios.
Closes the only blocking component gap for WingtipToys migration.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): FormView fix, migration strategy, project reframe
Session: 2026-03-02-formview-migration-strategy
Requested by: Jeffrey T. Fritz
Changes:
- Logged session: FormView RenderOuterTable fix + migration tooling strategy
- Merged 3 decisions: user directive (migration tool focus), FormView RenderOuterTable impl, ASPX migration tooling strategy
- Propagated team updates to affected agents
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(Validations): Add ModelErrorMessage component
Add ModelErrorMessage component to close the last BWFC control gap.
Matches ASP.NET Web Forms <asp:ModelErrorMessage> for zero-markup migration.
- Inherits BaseStyledComponent (display-only, not a validator)
- Reads errors from EditContext via string-keyed ModelStateKey
- Renders <span> with error text when errors exist, nothing when clean
- Supports CssClass, SetFocusOnError, AssociatedControlID
- Strips BWFC validator metadata (\x1F encoding) from messages
- HTML-encodes error messages for XSS safety
- Multiple errors joined with <br> in single <span>
- Added bwfc.Validation.SetFocus JS function to Basepage.js
- 13 bUnit tests covering all edge cases (1464/1464 total passing)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ModelErrorMessage): Add docs, sample page, catalog entry
- Created docs/ValidationControls/ModelErrorMessage.md with full docs
- Created ModelErrorMessageSample.razor with EditForm demo
- Added ComponentCatalog.cs entry in Validation section
- Updated status.md: Validation Controls 7->8, TOTAL 51->52
- Updated mkdocs.yml nav with ModelErrorMessage page
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): M21 wrap-up session log, merge decisions
Session: 2026-03-02-m21-wrapup
Requested by: Jeffrey T. Fritz
Changes:
- Logged M21 wrap-up session (ModelErrorMessage component, docs, samples, tests)
- Merged 2 decision inbox files (Beast docs, Forge spec) into decisions.md
- Deduplicated decisions.md (5 exact dupes removed, 3 ModelErrorMessage blocks consolidated)
- Propagated ModelErrorMessage decisions to Cyclops, Rogue, Beast, Jubilee, Forge histories
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* test(ModelErrorMessage): Add smoke + interactive integration tests
- Added InlineData smoke test in ControlSampleTests.cs
- Added 3 Playwright interactive tests in InteractiveComponentTests.cs:
- Submit empty form shows error spans
- Valid submit shows no errors
- Clear button removes errors
- Uses WaitForSelectorAsync pattern for CI stability
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): merge Colossus integration test decision
Session: 2026-03-02-m21-wrapup
Requested by: Jeffrey T. Fritz
Changes:
- Merged Colossus integration test decision from inbox
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(migration): Add three-layer migration pipeline tooling
- Add webforms-migration Copilot skill with complete transformation rules
- Add bwfc-scan.ps1 project scanner (inventory + readiness scoring)
- Add bwfc-migrate.ps1 mechanical transform script (~40% automation)
- Add migration.agent.md interactive migration agent definition
- Add AutomatedMigration.md MkDocs guide for the pipeline
- Update mkdocs.yml navigation
Three-layer pipeline: Script (40%) -> Skill (45%) -> Agent (15%)
Verified: WingtipToys scans at 100% readiness, 230/230 controls covered
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): merge PR target directive
Session: 2026-03-02-m22-migration-tooling
Requested by: Jeffrey T. Fritz
Changes:
- Merged PR target directive from inbox
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): WingtipToys migration analysis session
Session: 2026-03-02-wingtiptoys-migration-analysis
Requested by: Jeffrey T. Fritz
Changes:
- Updated session log with PR #413, Layer 1-3 effectiveness metrics
- Merged forge-wingtiptoys-migration-analysis.md from decisions inbox
- Propagated cross-agent updates to Forge, Cyclops, Rogue
- Summarized Forge history (21KB -> 8KB), Cyclops (15KB -> 11KB), Rogue (12KB -> 9KB)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): log executive report and screenshot session
Session: 2026-03-02-executive-report-screenshots
Requested by: Jeffrey T. Fritz
Changes:
- Logged session to .ai-team/log/2026-03-02-executive-report-screenshots.md
- No inbox decisions to merge (inbox empty)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Make AfterWingtipToys Blazor sample site buildable and renderable
Convert the Layer 1 migration output of WingtipToys into a working Blazor
site for screenshot demos. Key changes:
- Create Blazor infrastructure: App.razor, Routes.razor, _Imports.razor,
MainLayout.razor with Bootstrap 3 navbar and category menu
- Create model classes: Product, Category, CartItem
- Stub all code-behind files with ComponentBase (replacing System.Web types)
- Add sample data to Default, ProductList, ShoppingCart, ProductDetails pages
- Fix razor markup: replace Web Forms expressions with Blazor syntax
- Simplify Account, Checkout, Admin pages to remove invalid references
- Remove Site.Mobile.razor and ViewSwitcher.razor (not needed for demo)
- Copy WingtipToys logo to wwwroot/Images
- Build succeeds with 0 errors, 0 warnings
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: sync cart data, fix connection strings, add product images
- Update AfterWingtipToys ShoppingCart with real product data matching original
- Update WingtipToys Web.config LocalDB connection string: v11.0 -> MSSQLLocalDB
- Add Directory.Build.props to block NBGV inheritance in WingtipToys
- Add product images to AfterWingtipToys wwwroot
- Update ProductList with proper data binding
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: add executive report with real side-by-side screenshots
Both original Web Forms (IIS Express :5200) and migrated Blazor (Kestrel :5201)
running simultaneously. Screenshots show Home, Products, and Shopping Cart
comparisons from live applications.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: add actual migration timeline appendix to executive report
Adds footnote on estimated effort and detailed appendix showing real
Squad + BWFC timing: 4.5 hours wall clock for 33 files (analysis through
running site), with 5 agents working in parallel.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: resolve 7 CSS/visual differences between original and migrated WingtipToys
- Switch from CDN Bootstrap to local Bootswatch Cerulean theme (navbar color fix)
- Restore GroupItemCount=4, GroupTemplate, LayoutTemplate to ProductList (4-column grid)
- Fix BoundField.DataFormatString bug: pass obj directly instead of obj.ToString()
- Add missing Trucks category (5 categories matching original)
- Update to all 16 products with correct CategoryIDs from original seeder
- Copy Site.css + Cerulean CSS to wwwroot/Content/ for static file serving
- Add CSS fidelity analysis section to executive report
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore: update screenshots after CSS fidelity fixes
Fresh Playwright screenshots showing:
- Blue Cerulean navbar (was dark gray)
- 4-column product grid with 16 products (was single column, 8 products)
- Dollar sign currency formatting on cart prices (was missing)
- Updated side-by-side comparison PNGs
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): CSS fixes session log and decision merge
Session: 2026-03-03-css-fixes-screenshots
Requested by: Jeff Fritz
Changes:
- Logged session to .ai-team/log/2026-03-03-css-fixes-screenshots.md
- Merged 2 decisions from inbox into decisions.md (Cyclops WingtipToys build config, Forge CSS fidelity)
- Propagated cross-agent updates to Cyclops and Forge history
- Summarized Cyclops history.md (14.2KB -> 9.7KB)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 3e1b282 commit 70feccc
218 files changed
Lines changed: 45556 additions & 22 deletions
File tree
- .ai-team
- agents
- beast
- cyclops
- forge
- jubilee
- rogue
- .github
- agents
- skills/webforms-migration
- docs/Migration
- planning-docs
- screenshots
- samples
- AfterWingtipToys
- Account
- Admin
- Catalog/Images
- Thumbs
- Checkout
- Components
- Layout
- Content
- Images
- Models
- Scripts
- WebForms
- MSAjax
- fonts
- wwwroot
- Content
- Images
- Products
- WingtipToys
- WingtipToys
- scripts
- src/BlazorWebFormsComponents
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
62 | 83 | | |
63 | 84 | | |
64 | 85 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
61 | 60 | | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
79 | 98 | | |
| 99 | + | |
80 | 100 | | |
81 | 101 | | |
82 | 102 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
72 | 84 | | |
73 | 85 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
79 | 91 | | |
80 | 92 | | |
81 | 93 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5470 | 5470 | | |
5471 | 5471 | | |
5472 | 5472 | | |
| 5473 | + | |
| 5474 | + | |
| 5475 | + | |
| 5476 | + | |
| 5477 | + | |
| 5478 | + | |
| 5479 | + | |
| 5480 | + | |
| 5481 | + | |
| 5482 | + | |
| 5483 | + | |
| 5484 | + | |
| 5485 | + | |
| 5486 | + | |
| 5487 | + | |
| 5488 | + | |
| 5489 | + | |
| 5490 | + | |
| 5491 | + | |
| 5492 | + | |
| 5493 | + | |
| 5494 | + | |
| 5495 | + | |
| 5496 | + | |
0 commit comments