Merged
Conversation
…410) - Fix ListView EditItemTemplate not rendering when EditIndex changes (#406) - Add TDD tests for ListView EditItemTemplate rendering - feat(FormView): Add RenderOuterTable parameter - feat(Validations): Add ModelErrorMessage component with 13 bUnit tests - docs(ModelErrorMessage): Add docs, sample page, catalog entry - test(ModelErrorMessage): Add smoke + interactive integration tests - WingtipToys migration analysis and planning - AI team session logs and decision merges Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* 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>
…in, Identity (#414) * chore: bump version.json to 0.17 for next dev cycle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(wingtiptoys): add EF Core data foundation, models, and CartStateService - Add ProductContext with SQLite, seed 16 products + 5 categories - Add Order/OrderDetail models - Add CartStateService (scoped DI, replaces Session state) - Register all services in Program.cs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(wingtiptoys): wire product browsing, shopping cart, and error page - ProductList: EF Core data binding with category filter - ProductDetails: data-bound product display - MainLayout: dynamic category navigation - AddToCart: CartStateService integration + redirect - ShoppingCart: GridView data binding with update/remove - ErrorPage: error display wiring Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(wingtiptoys): implement checkout flow with mock PayPal - Add CheckoutStateService for checkout state management - Add MockPayPalService (IPayPalService interface) - Wire CheckoutStart: order creation + PayPal redirect - Wire CheckoutReview: order display + payment completion - Wire CheckoutComplete: transaction confirmation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(wingtiptoys): add CartItem primary key configuration Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update executive report with v2 metrics and screenshots - Update to reflect fully functional migration (31/33 pages working) - Add 6 new screenshots (home, products, details, cart, login, category filter) - Update metrics: ~11 hours actual, 16 BWFC components, EF Core + Identity - Add Phase 2 timeline (data foundation, browsing, cart, admin, auth, checkout) - Update remaining work table (most items now complete) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log M22 feature completion session, merge 4 decisions Session: 2026-03-03-milestone22-feature-completion Requested by: Jeff Fritz Changes: - Logged session to .ai-team/log/ - Merged 4 decision(s) from inbox into decisions.md - Propagated updates to agent history files - Summarized oversized history files (Cyclops, Forge, Rogue) - Consolidated overlapping ListView OrderedDictionary decision Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: restore side-by-side comparison screenshots in executive report Replace individual Blazor-only screenshots with paired Web Forms (left) vs Blazor (right) comparison images for home, products, and cart pages. Keep additional migrated pages (details, cars filter, login) in a supplementary table section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: fix side-by-side comparison screenshots with matched zoom and data All comparisons now use identical 1280x900 viewport screenshots. Cart comparison shows same 3 items on both sides (.40 total). Updated executive report cart description. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore: bump version.json to 0.17 for next dev cycle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(listview): implement 16 CRUD events (#356) Fix two Web Forms lifecycle deviations: - ItemCreated: changed from EventCallback firing once on first render to EventCallback<ListViewItemEventArgs> firing per-item before ItemDataBound - ItemCommand: now fires for ALL commands before routing to specific handlers, matching Web Forms behavior where ItemCommand always fires first All 16 events verified: ItemInserting/Inserted, ItemUpdating/Updated, ItemDeleting/Deleted, ItemEditing, ItemCanceling, Sorting/Sorted, PagePropertiesChanging/Changed, LayoutCreated, SelectedIndexChanging/Changed, ItemCreated, DataBound. All 43 ListView tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: add migration toolkit (6 priority documents) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log ListView/toolkit session Session: 2026-03-03-listview-crud-and-toolkit Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-03-listview-crud-and-toolkit.md - Decisions already merged from inbox (prior session) - Cross-agent updates already propagated (prior session) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: add distributable BWFC migration skill for Copilot Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update Beast history and add decision record for bwfc-migration skill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: split migration skill into 3 focused skills Refactor the monolithic bwfc-migration skill (852 lines) into three focused skills optimized for Copilot context efficiency: - bwfc-migration (436 lines): Core markup migration controls, expressions, directives, code-behind, layouts. Used per-page. - bwfc-identity-migration (270 lines): ASP.NET Identity/Membership to Blazor Identity. One-time architectural concern. - bwfc-data-migration (381 lines): EF6 to EF Core, DataSource to services, Session to scoped services, architecture decisions. Each skill cross-references the others in its description and body. Skills are designed to be portable drop into any project's .github/skills/ folder to enable Web Forms migration with BWFC. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log ListView/toolkit session and merge decisions Session: 2026-03-03-listview-crud-and-toolkit Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/ - Merged decision inbox files into decisions.md - Consolidated overlapping migration toolkit delivery format decisions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * refactor: move distributable skills and scripts into migration-toolkit/ Per Jeff's directive: distributable migration assets belong in migration-toolkit/, not .github/skills/. Internal project skills remain in .github/skills/. - Moved 3 BWFC migration skills to migration-toolkit/skills/ - Copied 2 PowerShell scripts to migration-toolkit/scripts/ - Updated migration-toolkit/README.md with new structure Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update Forge history and decision record for toolkit restructure Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: fix component count and internal references in toolkit - Updated component count from 52 to 58 across 6 categories (not 7) - Added Chart, ImageMap, and Substitution to Editor Controls coverage table - Replaced all internal repo references (../.github/skills/, ../.github/agents/) with distributed toolkit paths (skills/bwfc-migration/, skills/bwfc-data-migration/) - Fixed wrong org name (AzimoLabs -> FritzAndFriends) in URLs - Toolkit docs now accurate for external distribution Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: create migration test run structure and template Establishes docs/migration-tests/ as the standard location for migration benchmark reports with per-run subfolders. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * benchmark: Layer 1 scan and migrate for WingtipToys Ran bwfc-scan.ps1 and bwfc-migrate.ps1 against original WingtipToys Web Forms source. Captured timing and output for benchmark report. Scan: 0.9s, 32 files, 230 controls, 100% BWFC coverage Migrate: 2.4s, 276 transforms, 33 razor files + 32 code-behind Build: 338 errors (expected - code-behind needs Layer 2) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * benchmark: Layer 2+3 migration for WingtipToys Completed structural and architectural migration of FreshWingtipToys using BWFC migration skills. Captured timing for each phase. - Phase 1 (Data infrastructure): 121s - models, services, EF Core, DI - Phase 2 (Core storefront): 136s - 8 pages migrated - Phase 3 (Checkout + Admin): 187s - 6 pages migrated - Phase 4 (Layout): 20s - MainLayout, App, Routes - Phase 5 (Build fix): 99s - 3 rounds to clean build - Total: ~563s (~9.4 min) for Layer 2+3 - Build result: 0 errors, 0 warnings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update Cyclops history and decision doc for Layer 2+3 benchmark Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * benchmark: verification screenshots and runtime fixes - Move static assets to wwwroot/ for proper Blazor static file serving - Copy product images from Catalog/Images to wwwroot/Images/Products/ - Fix CartStateService to use cookie-based cart ID (persists across circuits) - Add 6 verification screenshots: homepage, products, details, cart, category, login - Update benchmark report with full Layer 1-3 details, architecture table, screenshots Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: correct benchmark report verification accuracy Update report to distinguish page-load verification from functional testing. Add Known Issues section for cart, login, and register interactive features. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix shopping cart, login, and register in FreshWingtipToys Issue 1 - Shopping Cart: TextBox component was missing @onchange handler, so TextChanged/OnTextChanged callbacks never fired. Added HandleChange method to TextBox.razor.cs that updates Text, triggers validation, and invokes both TextChanged and OnTextChanged callbacks. Wired @onchange to both <input> and <textarea> elements in TextBox.razor. Issue 2 - Login: SignInManager.PasswordSignInAsync cannot set cookies from a SignalR circuit (InteractiveServer mode). Replaced direct SignInManager call with navigation to a minimal API endpoint (/Account/PerformLogin) that runs in HTTP context where cookies work. Issue 3 - Register: Same SignalR cookie limitation. UserManager.CreateAsync works fine in SignalR (no cookies), but SignInManager.SignInAsync does not. After user creation, redirect to /Account/PerformRegisterSignIn endpoint that validates credentials and sets the auth cookie via HTTP. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
#417) - Remove leftover LogError debug spam from UiStyle.cs that caused false console errors in Playwright tests - Add side-by-side visual comparison screenshots to benchmark report - Update migration tests README status to Complete Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: await async OnClick handlers and prevent TextBox value loss ButtonBaseComponent.Click() was void and didn't await InvokeAsync(), causing async OnClick/OnCommand handlers to fire-and-forget. Exceptions were silently swallowed and StateHasChanged never ran after completion. This broke Shopping Cart update, Login, and Register in Blazor Server. TextBox used only @onchange (blur-triggered), so when one field's TextChanged callback triggered a re-render, downstream fields had their typed values overwritten by the server-side empty state. Added @oninput handler for internal Text sync while preserving @onchange for TextChanged (Web Forms blur-triggered semantics). Also fixed ImageButton to use EventCallback instead of Action for the onclick handler, ensuring async Click() is properly awaited. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: static assets, logout endpoint, and migration tooling updates - Program.cs: UseStaticFiles() -> MapStaticAssets() for _framework/blazor.web.js - Program.cs: Add /Account/PerformLogout POST endpoint for SignInManager - MainLayout.razor: Logout form targets /Account/PerformLogout with data-enhance=false - Add Properties/launchSettings.json for Development environment - bwfc-migrate.ps1: Generate MapStaticAssets() + launchSettings.json in scaffold - SKILL.md: Add static assets, launchSettings, and Identity auth migration guidance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: WingtipToys migration benchmark Run 2 11/11 features PASS Full migration benchmark with updated tooling: - Layer 1 scan+migrate: 5.6s (32 files, 277 transforms) - Build: 7.3s (0 errors) - 11/11 features verified with Playwright - 6 page screenshots captured - Executive summary report with timing and comparisons Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log migration Run 2 session, merge decisions Session: 2026-03-04-migration-run2 Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-04-migration-run2.md - Merged 7 decisions from inbox into decisions.md - Consolidated overlapping toolkit decisions (346+350) - Propagated cross-agent updates to all 6 agent history files - Summarized Beast, Cyclops, Forge history.md (exceeded 12KB) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: WingtipToys full from-scratch migration regression Run 3 Complete from-scratch migration regression of WingtipToys (32 files, 230 controls) using the BWFC migration toolkit. Unlike Run 2 which copied Layer 2 from FreshWingtipToys, Run 3 writes all models, services, layout, identity pages, and storefront pages from scratch based on original Web Forms source. Results: 11/11 features PASS (identical to Run 2) - Home page, product categories, product list, product details - Add to cart, shopping cart (view/update/remove) - Register, login, logout Build: 0 errors, 63 warnings (all in BWFC library) Layer 1 (automated): 3.7s scan+migrate Layer 3 (build): 11.9s Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log migration Run 3 session Session: 2026-03-04-migration-run3 Requested by: Jeffrey T. Fritz * docs: correct unconverted patterns DataBinder/Eval already supported Run 2 and Run 3 reports incorrectly listed Eval with format strings as unconverted patterns requiring Layer 2. BWFC's DataBinder.Eval fully supports format strings, and the migration script already converts single-arg Eval. Updated both reports to distinguish: - Patterns already covered by BWFC (Eval with/without format strings) - Patterns that truly need Layer 2 (String.Format, GetRouteUrl, code blocks) Added decision proposal for enhancing bwfc-migrate.ps1 with two additional regex transforms for format-string Eval and simple String.Format patterns. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log DataBinder correction, merge Eval regex decision Session: 2026-03-04-databinder-correction Requested by: Jeffrey T. Fritz Changes: - Logged DataBinder correction session - Merged eval-regex-enhancement decision from inbox - Propagated decision update to Cyclops history - No duplicates found in decisions.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: enhance bwfc-migrate.ps1 with master page transforms and Eval regexes Add ConvertFrom-MasterPage function that handles .master-specific transforms: - Inject @inherits LayoutComponentBase - Strip document wrapper (DOCTYPE, html, head, body) - Extract head metadata into HeadContent block - Remove ScriptManager block entirely - Replace ContentPlaceHolder MainContent with @Body - Remap output path to Components/Layout/MainLayout.razor - Flag LoginView and SelectMethod for Layer 2 attention Add New-AppRazorScaffold function generating App.razor and Routes.razor. Add two new expression regexes in ConvertFrom-Expressions: - Eval with format string: Eval("prop", "{0:C}") -> @context.prop.ToString("C") - String.Format with Item: String.Format("{0:c}", Item.Prop) -> interpolated Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log master page script session, merge decisions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: WingtipToys migration Run 4 with master page + Eval enhancements Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: update Forge history and decisions with Run 4 results Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log migration Run 4 session, merge decisions Session: 2026-03-04-migration-run4 Requested by: Jeffrey T. Fritz Changes: - Logged Forge migration Run 4 (289 transforms, 0 errors, 11/11 PASS) - Merged inbox decision: forge-run4-results.md into decisions.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: fix Run 4 report image links and enhance executive summary - Fix Original Web Forms screenshot paths (../../ -> ../../../) to correctly resolve from docs/migration-tests/wingtiptoys-run4-2026-03-04/ to repo root - Enhance Section 1 executive summary with run-time metrics (~3s script, 12.32s build), success metrics (289 transforms, 0 errors, 11/11 pass), Run 3 comparisons, and quick-reference metrics table Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: complete GetRouteUrl RouteValueDictionary overloads The two RouteValueDictionary overloads were stubbed (returning null). Now delegate to LinkGenerator.GetPathByRouteValues like the object overloads. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log GetRouteUrl completion and report fixes session Session: 2026-03-04-getrouteurl-and-report-fixes Requested by: Jeff Fritz Changes: - logged session to .ai-team/log/2026-03-04-getrouteurl-and-report-fixes.md - merged 2 decision(s) from inbox into decisions.md - propagated updates to affected agent history files (beast, cyclops, forge, colossus) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ganization (#419) * Organize planning-docs into subdirectories Move 75 files into categorized subdirectories while preserving git history: - components/ 53 per-component analysis docs - milestones/ 11 milestone plans, audits, and post-fix reports - analysis/ 9 cross-cutting analysis docs - reports/ 1 executive report Update README.md to serve as index/table of contents for the new structure. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: migration script enhancements + integration test gaps Script enhancements (bwfc-migrate.ps1): - ConvertFrom-LoginView: auto-converts LoginView to AuthorizeView (AnonymousTemplateNotAuthorized, LoggedInTemplateAuthorized) - ConvertFrom-GetRouteUrl: converts Page.GetRouteUrl calls to BWFC GetRouteUrlHelper pattern with Evalcontext translation - ConvertFrom-SelectMethod: strips SelectMethod attributes and inserts TODO-annotated DI service injection guidance Integration tests (6 new entries): - CheckBoxList, DataPager, ImageButton, ListBox, LoginView, Theming added to ControlSampleTests.cs with matching interactive tests Housekeeping: - .gitignore: exclude samples/FreshWingtipToys/ and feasibility doc - Capture directive about excluded scratch artifacts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): capture PR target directive Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): session log and inbox merge for 2026-03-04 milestone work Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: script easy wins bare Item binding, Register cleanup, uc: prefix - Add bare <%#: Item %> @context regex (fixes 3 OpenAuthProviders items) - Improve Register directive messaging (less alarming flagging) - Strip uc:/uc1:/uc2: tag prefixes alongside asp: (fixes 1 item) Combined with PR #419's LoginView/GetRouteUrl/SelectMethod, this reduces WingtipToys Run 4 manual items from 18 ~10 (44% reduction). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): session log and decision merge for Run 5 migration Session: 2026-03-04-run5-migration Requested by: Jeffrey T. Fritz Changes: - Logged Run 5 migration session (309 transforms, clean build) - Merged decisions from inbox (Cyclops run5-migration, Beast run5-report) - Propagated cross-agent updates to Cyclops and Beast - Summarized oversized Cyclops and Forge history.md entries Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Run 5 WingtipToys migration benchmark with enhanced toolkit - Fresh WingtipToys migration: 3.25s script (309 transforms, 32 files) + clean build (0 errors, 4.56s) - Comprehensive 9-section benchmark report with Run 4 vs Run 5 comparison - BWFC capability analysis: 95+ EventCallbacks, component coverage assessment - Migration standards skill: .NET 10 target, EF Core, ASP.NET Core Identity, event handler mapping - Synced migration-toolkit/ as canonical home: enhanced script (47KB, 1164 lines), skills, README - Updated AfterWingtipToys sample with fresh migration output (~80 files) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): migration standards directives and session log Session: 2026-03-04-migration-standards Requested by: Jeffrey T. Fritz Changes: - Logged migration standards session - Merged migration standards and toolkit canonical directives - Merged Forge Run 5 analysis decisions - Consolidated toolkit canonical decision with earlier restructure - Propagated cross-agent updates to Forge, Cyclops, Beast - Summarized Forge and Cyclops histories (both over 12KB) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Run 6 improvement analysis session Session: 2026-03-04-run6-analysis Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-04-run6-analysis.md - Merged Forge's Run 6 improvement decisions from inbox - Consolidated overlapping BWFC migration standards + Run 6 enhancements - Propagated updates to affected agent history files (cyclops, beast, rogue, forge) - Archived Forge history entries older than 2 weeks to history-archive.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(migration): implement Run 6 top-4 script enhancements 1. Scaffold TFM: net8.0 net10.0, _Imports.razor adds RenderMode using + @rendermode InteractiveServer 2. SelectMethod TODO: BWFC-aware guidance (use Items parameter, OnInitializedAsync) 3. Static files: copy to wwwroot/ subdirectory instead of project root 4. Compilable stubs: detect Identity/Auth/Payment pages and emit @page/@code stubs Saves ~205s of manual fix time per migration run. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Run 6 script implementation session Session: 2026-03-04-run6-implementation Requested by: Jeffrey T. Fritz Changes: - Logged Cyclops implementation session - Merged Cyclops script enhancement decisions from inbox Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Run 6 benchmark session Session: 2026-03-04-run6-benchmark Requested by: Jeffrey T. Fritz Changes: - Logged Run 6 migration benchmark session - Merged Forge Run 6 benchmark decisions from inbox - Propagated updates to affected agent histories - Summarized Forge and Cyclops histories (exceeded ~12KB) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Run 6 WingtipToys migration benchmark 55% time reduction Layer 1 (script): 4.58s, 269 transforms, 79 static files to wwwroot/ Layer 2 (manual): ~3 min 25s EF Core models, services, page wiring Total: ~4 min 30s (down from ~10 min in Run 5) All 4 enhancements validated: - net10.0 TFM scaffolding (eliminated build fix round) - BWFC-aware SelectMethod TODO (highest impact preserved data controls) - wwwroot static file pathing (eliminated manual asset relocation) - Compilable stub auto-generation (6 pages auto-stubbed) 2 script bugs found: - @rendermode in _Imports.razor invalid in .NET 10 - Stub detection misses code-behind-only Identity references Final build: 0 errors, 0 warnings on net10.0 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: correct @rendermode placement in migration skills and standards Document that @rendermode is a directive attribute on component instances (Routes, HeadOutlet in App.razor), not a standalone directive in _Imports.razor. - migration-standards/SKILL.md: new Render Mode Placement subsection - bwfc-migration/SKILL.md: Step 2 adds @using static, new Step 2b for App.razor - METHODOLOGY.md: scaffold table includes App.razor - beast/history.md: append render mode correction learnings Reference: https://learn.microsoft.com/aspnet/core/blazor/components/render-modes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: remove invalid @rendermode InteractiveServer from _Imports.razor scaffold The @rendermode directive attribute cannot be used as a standalone directive in _Imports.razor. Removed it from both migration-toolkit and scripts copies of bwfc-migrate.ps1. The @using static import and App.razor @rendermode attributes were already correct. Closes the Run 6 benchmark build errors (8 errors from invalid directive). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): capture @rendermode placement directive Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): rendermode fix session log and decisions merge Session: 2026-03-04-rendermode-fix Requested by: Jeffrey T. Fritz Changes: - Logged rendermode fix session - Merged decision inbox (Cyclops rendermode fix, Copilot directive) - Deduplicated decisions.md (consolidated 3 overlapping rendermode decisions) - Propagated cross-agent updates to cyclops, beast, forge history.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: pin EF Core to 10.0.3 and update migration skills - Pin AfterWingtipToys to Microsoft.EntityFrameworkCore 10.0.3 (was preview.*) - Update migration-standards skill with EF Core version requirement - Update bwfc-data-migration skill with EF Core 10.0.3 reference - Add directive to decisions inbox Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): EF Core version directive session Session: 2026-03-04-efcore-version Requested by: Jeffrey T. Fritz Changes: - Logged EF Core version directive session - Merged EF Core directive from inbox into decisions.md - Propagated update to agent history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: add WebFormsPageBase for zero-change Page.Title migration Introduces WebFormsPageBase : ComponentBase that provides: - Title, MetaDescription, MetaKeywords (delegate to IPageService) - IsPostBack => false (if (!IsPostBack) compiles unchanged) - Page => this (Page.Title = "X" works as-is from Web Forms) Converted pages use @inherits WebFormsPageBase in _Imports.razor. Eliminates per-page @Inject IPageService and IsPostBack rewrites. Includes 8 bUnit tests (1472 total, 0 failures). Updates migration toolkit skills and methodology docs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): WebFormsPageBase session log and decisions Session: 2026-03-04-webformspagebase Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-04-webformspagebase.md - Merged decision files from inbox into decisions.md - Propagated updates to agent history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: consolidate WebFormsPage with IPageService head rendering WebFormsPage now provides NamingContainer + ThemeProvider + page head rendering (<PageTitle> + <meta> tags) in a single layout component. Developers only need two setup lines: 1. @inherits WebFormsPageBase (in _Imports.razor) 2. <WebFormsPage> wrapping @Body (in layout) - Added IPageService subscription to WebFormsPage.razor.cs - Added <PageTitle> and <HeadContent> rendering to WebFormsPage.razor - Added RenderPageHead parameter (default: true) for opt-out - 7 new bUnit tests (1479 total, 0 failures) - Updated Page System documentation with new architecture diagram - Page.razor kept as standalone fallback for non-WebFormsPage layouts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log WebFormsPage consolidation session Session: 2026-03-04-webformspage-consolidation Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/ - Merged 2 decisions from inbox into decisions.md (forge-page-consolidation, cyclops-webformspage-consolidation) - Consolidated into single decision block: WebFormsPage IPageService head rendering consolidation - Propagated updates to cyclops, forge, rogue, beast history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: wire WebFormsPageBase into sample app - Add @inherits WebFormsPageBase to Pages/_Imports.razor - Wrap @Body with <WebFormsPage> in MainLayout.razor - All 217 integration tests pass, all 1479 bUnit tests pass Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(ai-team): CRITICAL branching workflow directives Session: 2026-03-06-branching-workflow-directive Requested by: Jeff Fritz Changes: - Logged branching workflow directive session - Merged 2 critical directives from inbox into decisions.md - Consolidated into single branching workflow decision - Propagated to all 6 active agent history files (psylocke/bishop have no history.md) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): BWFC audit and skills review session Session: 2026-03-06-bwfc-audit-skills-review Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-06-bwfc-audit-skills-review.md - Merged 2 decisions from inbox into decisions.md (Forge audit, Beast skills review) - Propagated cross-agent updates to 6 agent history files - No duplicate decisions found (370 blocks, all unique headings) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: BWFC library audit + migration skills cross-reference - Audited all 153 Razor components + 197 C# classes in BWFC library - Updated CONTROL-COVERAGE.md: added 95 undocumented components across 4 new sections (Infrastructure, Field Columns, Style Sub-Components, Utilities), fixed ContentPlaceHolder listed as Not Supported - Fixed 16+ issues across 7 skill/doc files: stale LoginView->AuthorizeView guidance, wrong base class, incorrect IsPostBack/Page.Title mappings - Added missing BWFC features to bwfc-migration skill: MasterPage, Content, DataBinder.Eval, NamingContainer, Theming, Custom Controls - Updated QUICKSTART.md SDK version, _Imports.razor, layout guidance - Wrote audit report: dev-docs/bwfc-audit-2026-03-06.md - Wrote skills review: dev-docs/skills-review-2026-03-06.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Layer 2 migration: WingtipToys Web Forms to Blazor - Add Models (Category, Product, CartItem) with EF Core - Add ProductContext (IdentityDbContext) with SQLite - Add ProductDatabaseInitializer with full seed data - Add ShoppingCartService for cart operations - Configure Program.cs with Identity, Session, EF Core - Fix MainLayout with navigation links and AuthorizeView - Convert all page code-behinds to Blazor components - Convert Account/Login and Account/Register to ASP.NET Core Identity - Replace broken Web Forms patterns with Blazor equivalents - Stub remaining account/admin pages for compilation - Remove ViewSwitcher and MobileLayout (not needed) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Run 8: WingtipToys migration 14/14 acceptance tests pass - Layer 1 script: 269 transforms, 32 files, 2.5s - Layer 2 manual: EF Core models, Identity, services, 2 build iterations - Phase 3: 4 test rounds to resolve HTTP session + Interactive Server incompatibility - Auth pages use HTML form POST to minimal API endpoints - Cart operations use form POST to minimal API endpoints - AddToCart uses onclick JS workaround for Blazor enhanced nav - Includes comprehensive migration report in dev-docs/ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Run 8 report add timing, screenshots, before/after comparisons - Migration timeline with ASCII diagram and phase breakdown - 9 screenshots showing functional Blazor app (homepage, products, cart, auth) - Before/after code comparisons for 4 key pages (Default, MasterPage, ProductList, Login) - Updated executive summary with total wall-clock time (1h 55min) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Run 8 report update session log Session: 2026-03-06-run8-report-update Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-06-run8-report-update.md - Merged 2 decisions from inbox into decisions.md (beast-run8-report-update, copilot-directive-doc-scope) - Deduplicated decisions.md (0 exact duplicates found) - Propagated doc-scope directive to beast, jubilee, forge - Propagated report-format pattern to forge Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Summarize oversize agent history files Session: 2026-03-06-run8-report-update Requested by: Jeffrey T. Fritz Changes: - Summarized beast history.md: 19KB -> 9KB (7 blocks archived) - Summarized forge history.md: 18KB -> 11KB (5 blocks archived) - Summarized cyclops history.md: 17KB -> 6KB (5 blocks archived) - Summarized rogue history.md: 13KB -> 8KB (3 blocks archived) - Older entries moved to history-archive.md for each agent Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: LoginView migration preserves BWFC component instead of AuthorizeView ConvertFrom-LoginView now converts <asp:LoginView> to <LoginView> (BWFC) instead of <AuthorizeView>. AnonymousTemplate and LoggedInTemplate are left as-is since they are already the correct BWFC parameter names. Updated AfterWingtipToys MainLayout to use BWFC LoginView + LoginName. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): LoginView fix session log and decision merge Session: 2026-03-06-loginview-fix Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-06-loginview-fix.md - Merged directive + Cyclops decision from inbox into decisions.md - Consolidated overlapping LoginView decisions into single block - Propagated LoginView directive to all agent histories Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: implement 6 skill documentation fixes from Run 8 post-mortem (RF-01/02/05/09/13/14) - RF-01 (P0): Add Interactive Server mode warnings for cookie auth and session state - RF-02 (P0): Add copy-paste minimal API endpoint templates for login/register/logout - RF-05 (P1): Add prominent LoginView preservation warning (never convert to AuthorizeView) - RF-09 (P1): Document Blazor enhanced navigation breaking links to API endpoints - RF-13 (P1): Add ListView GroupItemCount migration example with LayoutTemplate/GroupTemplate - RF-14 (P1): Document DisableAntiforgery() requirement for all Blazor form POST endpoints Files updated: - migration-toolkit/skills/bwfc-identity-migration/SKILL.md - migration-toolkit/skills/bwfc-data-migration/SKILL.md - migration-toolkit/skills/migration-standards/SKILL.md - migration-toolkit/skills/bwfc-migration/SKILL.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(migration): implement 15 Run 9 improvements (P0+P1) Script fixes (Cyclops - 9 items): - RF-03: Auto-copy Models directory with EF6 using stripping - RF-04: DbContext transform (EF6 EF Core constructor/usings) - RF-06: Conditional EF Core/Identity packages in csproj scaffold - RF-07: Identity/session boilerplate in Program.cs scaffold - RF-08: Redirect handler detection minimal API TODO - RF-10: Page title extraction from <%@ Page Title="..." %> - RF-11: GetRouteUrl concrete replacement hints - RF-12: QueryString/RouteData SupplyParameterFromQuery/Parameter - RF-13: ListView GroupItemCount flagging Skill fixes (Beast - 6 items, already committed): - RF-01: HTTP session/Interactive Server warning - RF-02: Auth endpoint templates for cookie auth - RF-05: LoginView preservation reinforcement - RF-09: Enhanced navigation workaround patterns - RF-13: ListView GroupItemCount skill example - RF-14: DisableAntiforgery documentation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log run9-prep session and merge decisions Session: 2026-03-06-run9-prep Requested by: Jeff (csharpfritz) Changes: - Logged session to .ai-team/log/2026-03-06-run9-prep.md - Merged 3 decisions from inbox (forge, cyclops, beast) - Deduplicated/consolidated decisions.md - Propagated cross-agent updates - Summarized Forge history.md (13KB -> 8.5KB) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(migration): Run 9 WingtipToys migration 14/14 tests pass in 47 min Layer 1: bwfc-migrate.ps1 produced 297 transforms across 32 files Layer 2: Cyclops rewrote 28 code-behinds, created Data/Services Manual fixes: ProductDetails AddToCart link, auth form HTML endpoints, navbar toggle element, register-without-auto-signin 82 files changed, 1692 insertions(+), 761 deletions(-) All 14 acceptance tests pass (Navigation: 6, Cart: 5, Auth: 3) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Run 9 migration report with screenshots and comparison to Run 8 Executive report covering 47-minute migration (59% faster than Run 8). Includes 6 page screenshots, side-by-side comparison tables, 5-round test iteration details, and Run 10 recommendations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Run 9 CSS/image failure RCA log and decisions Session: 2026-03-06-run9-css-failure-rca Requested by: Jeffrey T. Fritz Changes: - Logged Run 9 CSS/image failure RCA (Forge investigation) - Merged inbox decision: forge-run9-css-failure-rca - Deduplicated decisions.md (no duplicates found, 398 blocks) - Propagated cross-agent update to cyclops, beast, rogue history.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add StaticAssetTests: 11 Playwright smoke tests for CSS, images, and visual integrity Addresses Run 9 RCA Fix 3. These acceptance tests catch the class of visual failures where functional tests pass but CSS is missing (navbar as bullet list) and product images return 404. Tests cover: - CSS file delivery and HTTP 200 status - Product list image integrity (naturalWidth check + HTTP status) - Bootstrap navbar class presence and minimum height - Visual sanity screenshots for homepage, product list, product details - Catch-all static asset 4xx/5xx detection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: Add CSS bundle detection + auto-inject CSS links into App.razor Fix 1a: ConvertFrom-MasterPage now extracts <webopt:bundlereference> tags, flags them as [CSSBundle] manual review items, and injects TODO comments into HeadContent. Also preserves CDN <link>/<script> refs from <head> (Bootstrap, jQuery, etc.). Fix 1b: New Invoke-CssAutoDetection function runs after static file copy. Scans wwwroot/Content/, wwwroot/css/, and root wwwroot/ for .css files. Scans source Site.Master for CDN references. Injects all found <link> tags into App.razor <head> before <HeadOutlet>. Addresses RC-1 from Run 9 CSS/Image Failure RCA Layer 1 output now ships with CSS references so Layer 2 doesn't start from zero. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Phase 1 fixes merged Run 10 prep Session: 2026-03-07-run10-phase1-fixes Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-07-run10-phase1-fixes.md - Merged 3 decision(s) from inbox into decisions.md (Forge, Beast, Rogue) - Consolidated Fix 1 + Forge implementation and Fix 3 + Rogue implementation - Propagated updates to affected agent history files (Cyclops, Beast, Forge) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Run 10 failure logged, decisions merged Session: 2026-03-07-run10-failure Requested by: Jeffrey T. Fritz Changes: - Logged Run 10 failure to .ai-team/log/ - Merged inbox decisions (Layer 2 namespace convention, Run 10 failure directive) - Propagated cross-agent updates to Cyclops, Forge, Beast, Rogue histories - No deduplication needed (no duplicate headings found) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Run 11 fixes - script + SKILL updates Session: 2026-03-07-run11-fixes Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-07-run11-fixes.md - Merged 6 decision(s) from inbox into decisions.md - Consolidated 2 overlapping decisions (Coordinator domain work, FreshWingtipToys) - Normalized Run 11 Cyclops migration decisions (h1->h3 format) - Propagated updates to cyclops, beast, forge, rogue history files - Summarized oversized history files (beast, cyclops, forge) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Run 12: WingtipToys migration 25/25 acceptance tests pass (100%) Complete ASP.NET Web Forms to Blazor migration of WingtipToys sample: - Migration script (bwfc-migrate.ps1) processed 32 files, 303 transforms - 79 static assets copied (CSS, images, fonts, scripts) - 8 models, 3 services adapted for Blazor/EF Core patterns - 16 Layer 2 fixes applied (validators, data-binding, routing) Post-migration fixes: - DI: Removed duplicate AddDbContext, use only AddDbContextFactory - Cart operations: Minimal API endpoints for AddToCart/RemoveFromCart (bypasses InteractiveServer HttpContext limitation) - Homepage: main element + container-fluid for test selector compatibility - AddToCart link: JS onclick to bypass Blazor enhanced navigation 302 issue - Package versions pinned to stable 10.0.0 (no preview versions) Run history: Run 11 (17/25, 68%) Run 12 (25/25, 100%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Run 12 migration report 25/25 (100%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(LoginView): null-check _user before accessing Identity in GetView() During first render before OnInitializedAsync completes, _user is null. Accessing _user.Identity throws NullReferenceException. Adding null check ensures AnonymousTemplate is shown until auth state is resolved. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(migrate): auto-add @using BlazorWebFormsComponents.LoginControls to _Imports.razor Without this using, LoginView is not recognized as a component and its child elements (AnonymousTemplate, LoggedInTemplate) render as raw HTML instead of being assigned as RenderFragment parameters. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: SSR default, pin packages, fix DI in migration script - Remove @rendermode="InteractiveServer" from HeadOutlet and Routes in App.razor template (SSR by default, per-page opt-in) - Add SSR guidance comment in App.razor template - Pin NuGet package versions from 10.0.0-* wildcards to 10.0.0 stable - Change DI template from AddDbContext to AddDbContextFactory with warning comment against dual registration - Verified: LoginControls @using already present in _Imports.razor - Verified: no enhanced-nav onclick workaround in script Addresses Run 12 post-migration fixes 1-5. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Merge Run 12 decisions + session log Session: 2026-03-08-run12-improvements Requested by: Jeff Changes: - Merged 3 decisions from inbox (LoginView namespace, Run 12 migration, SSR vs InteractiveServer) - Consolidated 4 overlapping decision groups (LoginControls @using, LoginView preservation, render mode, SSR fragments) - Logged session to .ai-team/log/2026-03-08-run12-improvements.md - Propagated SSR-default and Run 12 decisions to 6 agent histories Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Run 13 migration — 25/25 (100%) with SSR default - SSR as default render mode (first run without InteractiveServer) - 3 post-migration fixes (down from 6 in Run 12) - Pipeline time ~22 min (down from ~90 min in Run 12) - Includes migration report at dev-docs/migration-tests/wingtiptoys-run13-2026-03-08/ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log Run 13 session + merge decisions Session: 2026-03-08-run13-migration Requested by: Jeff Changes: - Logged session to .ai-team/log/2026-03-08-run13-migration.md - Merged 4 decisions from inbox into decisions.md (SSR enhanced nav, logout link, DbContextFactory, middleware order) - Consolidated 2 overlapping decision pairs (enhanced nav bypass + Run 13 enhanced nav; Run 12 dual DbContext + Run 13 factory-only) - Propagated updates to cyclops and forge history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: cleanup FreshWingtipToys + add Run 10/11 reports - Remove temporary FreshWingtipToys folder (leftover from prior runs) - Add Run 10 and Run 11 migration reports - Update Run 9 report Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ity Run 19 (#425) * feat: Post-merge validation with 100% acceptance tests - Branch recreated from dev (not main) per team directive - All 155 dev-docs files restored from feature branch - AfterContosoUniversity migrated app restored - ContosoUniversity.AcceptanceTests restored (40 tests) Fixed issue: Students without enrollments now appear in GridView - Changed LoadStudentEnrollments() to load all students with left join - Previously only students WITH enrollments were displayed - Now using Students.Include(Enrollments) instead of Enrollments.Include(Student) Test Results: 40/40 passing (100%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: reorganize dev-docs/migration-tests/ into project/runNN/ structure Reorganized the migration-tests folder from a flat directory with inconsistent naming into a clean hierarchical structure: - wingtiptoys/run01-run17/ (16 runs, run07 skipped) - contosouniversity/run01-run18/ (18 runs, renumbered to fix collisions) Key changes: - All runs now in project/runNN/ folders with zero-padded numbers - Merged standalone .md reports into run folders as summary.md - Renamed lowercase report.md to REPORT.md for consistency - Removed 5 duplicate root-level screenshots (identical to run13) - Resolved Contoso run11/12 numbering collisions (Mar 9 vs Mar 10 runs with same number); Mar 10+ runs renumbered 13-18 - Completely rewrote README.md with all 18 Contoso runs documented - Created placeholder for run18 (original files were untracked) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update Beast history and file reorg decision Appended migration-tests reorganization learnings to Beast history. Created decision inbox entry for the folder restructuring. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log session, merge 3 decisions Session: 2026-03-11-service-extensions-and-exec-summary Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/ - Merged 3 decision(s) from inbox into decisions.md - Propagated updates to agent history files (beast, cyclops, forge, jubilee, rogue, colossus) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Run 18b: Re-run migration after Checkout pattern fix Re-ran Layer 1 migration after Test-UnconvertiblePage script fix (path-based Checkout detection). ShoppingCart.razor is STILL stubbed due to a second false positive: the 'PayPal' pattern matches an image URL and alt text in markup, not actual PayPal SDK code. Results: - Layer 1: 32 files, 303 transforms, 1.58s - Stubs: 6 (unchanged - PayPal false positive persists) - Build: 6 errors (same Parameter TODO annotation bug) - Report updated with Run 18b section - Decision filed for PayPal pattern fix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Run 18c ShoppingCart GridView fix confirmed after PayPal pattern removal ShoppingCart.razor now contains full GridView with BoundField/TemplateField markup instead of a stub. Two false-positive patterns in Test-UnconvertiblePage have been fixed: 1. 'Checkout' content pattern replaced with path-based '^Checkout[/\\]' 2. 'PayPal' content pattern removed (matched image URLs, not SDK code) Results: - UnconvertibleStub count: 5 (Checkout/ only, down from 6) - Transforms: 314 (up from 303) - Layer 1 timing: 1.51s - Build: 6 pre-existing errors in ProductDetails/ProductList (P1, separate) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Run 18 GridView ShoppingCart breakthrough with screenshots and exec summary update - ShoppingCart.razor now uses BWFC GridView with BoundField/TemplateField - Fixed GetCartId() to read WingtipToysCartId cookie (was hardcoded 'sample-cart') - Fixed migration script: removed 'Checkout' and 'PayPal' false-positive patterns - Regenerated performance charts with Run 18 data (1.51s L1, 314 transforms) - 4 screenshots captured: Home, Products, Shopping Cart (GridView), Product Details - Executive Summary updated: Run 18 screenshots, GridView milestone, improved strategy section - Run 18 REPORT.md updated with build success and Layer 2 fix documentation - ServiceCollectionExtensions: merged with WebApplicationExtensions - Added AspxRewriteMiddleware, BlazorWebFormsComponentsOptions - ContosoUniversity folder reorganization Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log Run 18 analysis, merge Forge improvement recommendations Session: 2026-03-11-run18-improvements Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-11-run18-improvements.md - Merged Forge's Run 18 improvement recommendations into decisions.md - Merged Cyclops Run 18 checkout/PayPal/GridView fix decisions - Merged Beast chart generation decision - Merged user directives (eliminate Test-UnconvertiblePage, standardize ItemType, P0-2 approved) - Consolidated 3 overlapping Test-UnconvertiblePage decisions into 1 - Propagated team updates to Cyclops, Beast, and Forge histories Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * refactor: standardize generic type params to ItemType across all BWFC components Renamed TItemType -> ItemType in DataBoundComponent and SelectHandler. Renamed TItem -> ItemType in BaseListControl, BulletedList, CheckBoxList, DropDownList, ListBox, and RadioButtonList (both .razor and .razor.cs files). This aligns all generic type parameters with the ASP.NET Web Forms DataBoundControl.ItemType convention, ensuring BWFC's drop-in replacement promise matches the original attribute names. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test(wingtiptoys): Run 19 - fresh Layer 1 migration with P0 fixes First migration run with: - Test-UnconvertiblePage eliminated (0 stubs, all pages converted) - RouteData [Parameter] annotation bug fixed - ItemType standardized across BWFC library Results: 1.76s, 348 transforms, 32 files 35 razor files Build: 184 errors (expected L2 residuals), 122 warnings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert "test(wingtiptoys): Run 19 - fresh Layer 1 migration with P0 fixes" This reverts commit 58fdc8c. * docs: enforce mandatory L1L2 migration pipeline with no manual fixes - Add prominent 'Migration Pipeline MANDATORY' section to bwfc-migration SKILL.md with critical warning admonition, pipeline step table, exact bwfc-migrate.ps1 invocation command, Layer 2 Copilot transform checklist, and pipeline rules - Fix all TItem references ItemType throughout bwfc-migration SKILL.md (8 instances) to match standardized Web Forms DataBoundControl.ItemType naming - Update migration-standards SKILL.md: rename 'Layer 2 (Manual)' to 'Layer 2 (Copilot-Assisted)', add critical warning and script invocation command, expand Layer 2 transform list - Add decision file and update Beast history Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): migration pipeline rules session log Session: 2026-03-11-migration-pipeline-rules Requested by: Jeffrey T. Fritz Changes: - logged session to .ai-team/log/ - merged 4 decisions from inbox into decisions.md - consolidated 8 overlapping blocks into 3 - propagated updates to beast, cyclops, forge, jubilee, rogue history files - summarized beast and cyclops history.md (both exceeded 12KB) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * WingtipToys Run 20: L1+L2 pipeline 0 errors clean build Layer 1 (script): 1.70s, 348 transforms, 32 files, 0 stubs Layer 2 (Copilot): ~25 min, ~60 files transformed Build: 0 errors, 4 warnings (NuGet pruning only) Key improvements since Run 18: - Zero stubs (P0-1 fix) - Mandatory L1L2 pipeline (no fixes between layers) - ItemType standardization across all BWFC controls - IDbContextFactory pattern for async data loading Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Cyclops history with Run 20 learnings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix L1 script + skills: preserve SelectMethod, correct review items L1 Script (bwfc-migrate.ps1): - SelectMethod now PRESERVED in markup (was stripped) BWFC supports it natively - ContentPlaceHolder review items note BWFC components are available - GetRouteUrl review items reference GetRouteUrlHelper utility Skills (3 files, 15 references updated): - SelectMethod guidance: preserve + convert to delegate (not replace with Items) - All three skill files aligned on SelectHandler<ItemType> delegate pattern Run 20 Report: - Removed false claim that validators don't exist (all 6 exist) - Fixed SelectMethod L2 transform description Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log SelectMethod fix session, merge decisions Session: 2026-03-11-selectmethod-fix Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-11-selectmethod-fix.md - Merged 3 decision(s) from inbox into decisions.md - Consolidated 3 overlapping SelectMethod decisions into 1 - Propagated updates to 6 agent history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Summarize Cyclops and Beast history files Cyclops: 16181 -> 7853 bytes (archived ServiceCollectionExtensions, Run 18, P0 fixes, ItemType, L2 transform) Beast: 12969 -> 9509 bytes (archived Run 10 failure, Run 11 skill fixes, team updates 2026-03-07/08) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix build errors in Account pages: add stub properties and event handlers - Login.razor.cs: Add Email, Password fields and LogIn handler - Register.razor.cs: Add Email, Password fields and CreateUser_Click handler - Forgot.razor/.cs: Rename OnClick='Forgot' to 'Forgot_Click' (class name conflict), add Email field - ResetPassword.razor.cs: Add Email, Password fields and Reset_Click handler - ManagePassword.razor.cs: Add Password field, SetPassword_Click and ChangePassword_Click handlers - ManageLogins.razor/.cs: Fix <%# %> Web Forms syntax, add SuccessMessage and GetLogins stub - Manage.razor.cs: Add SuccessMessage and LoginsCount fields - RegisterExternalLogin.razor.cs: Add ProviderName, Email fields and LogIn_Click handler - OpenAuthProviders.razor/.cs: Add GetProviderNames stub with SelectHandler signature - TwoFactorAuthenticationSignIn.razor.cs: Add ProviderSubmit_Click and CodeSubmit_Click handlers - VerifyPhoneNumber.razor.cs: Add Code_Click handler - AddPhoneNumber.razor.cs: Add Phone field and PhoneNumber_Click handler - Fix TextMode string values to use TextBoxMode enum across all Account .razor files - Fix SelectMethod string references to delegate references for ListView components Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Run 21: Validate SelectMethod preservation + L1 fixes WingtipToys migration Run 21 results: - L1: 1.79s, 348 transforms, 0 stubs (all 3 L1 fixes confirmed) - L2: ~26 min, 44 files modified (431 ins, 560 del) - Build: 0 errors, 0 WingtipToys warnings - SelectMethod preserved as delegates on ProductList, ProductDetails, ShoppingCart - ContentPlaceHolder and GetRouteUrl review items now reference BWFC components Executive summary updated: 38 runs, 16 perfect scores, SelectMethod milestone added. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: L2 structural transform for ContosoUniversity sample Convert AfterContosoUniversity from L1-scaffolded Web Forms stubs to working Blazor components with EF Core SQLite, BWFC component patterns, and DI registration. Changes: - Models: EF Core with data annotations, ContosoUniversityContext (SQLite) - BLL: 4 logic classes + StudentViewModel using IDbContextFactory - Pages: About, Students, Courses, Instructors converted to Blazor partials - Infrastructure: Program.cs with DI, csproj with Sqlite, _Imports.razor - Cleanup: deleted EDMX artifacts, empty code-behinds - Build: 0 errors Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: ContosoUniversity SQL Server LocalDB (not SQLite) + Run 19 report - Fixed Program.cs: UseSqlite UseSqlServer with LocalDB connection - Removed Microsoft.EntityFrameworkCore.Sqlite package - Removed EnsureCreated() (existing database) - Added Run 19 migration report Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(L1): Replace SQLite scaffolding with SQL Server in migration script - Changed EF Core package from Sqlite to SqlServer in csproj template - Changed Program.cs example from UseSqlite to UseSqlServer with LocalDB - Prevents agents from defaulting to SQLite during L2 transforms Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(skills): Enforce SQL Server preservation + mandatory SelectMethod delegates - Removed 'Prefer SQLite for local dev' from migration-standards (was the root cause of repeated SQLite contamination) - Added NEVER-default-to-SQLite warnings in migration-standards and bwfc-data-migration - Made SelectMethod->delegate conversion MANDATORY (not 'alternatively Items=') - Restricted Items= binding to DataSource-originating patterns only - Added WARNING admonitions to all three skill files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Update Beast history + decision record for skill enforcement fixes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(skills): Reframe database guidance detect and match original provider - Changed emphasis from 'don''t use SQLite' to 'detect and match the original provider' - Added L1 Find-DatabaseProvider references so L2 agents know to check detection results - Aligns with L1 script enhancement that auto-detects from Web.config Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(team): Beast history + decision for provider detection framing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log skill enforcement fixes, merge 7 decisions Session: 2026-03-11-skill-enforcement-fixes Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/ - Merged 7 decision(s) from inbox into decisions.md (consolidated to 3 blocks) - Marked 2 superseded decisions (SelectMethod pattern sections 2.2, 6.2) - Propagated updates to beast, cyclops, rogue, forge history files - Summarized cyclops history.md (16.3KB to 8.2KB) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(L1): Auto-detect database provider from Web.config - Added Find-DatabaseProvider function that parses Web.config connectionStrings - Scaffolds the matching EF Core provider package (SqlServer, Sqlite, Npgsql, MySQL) - Includes detected connection string in Program.cs scaffold comment - Adds [DatabaseProvider] review item so L2 agents see the detection - Falls back to SqlServer when no Web.config or connectionStrings found Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log provider detection session, merge decisions Session: 2026-03-11-provider-detection Requested by: Jeffrey T. Fritz Changes: - Logged provider detection session (Cyclops Find-DatabaseProvider + Beast skill reframe) - Merged cyclops-db-provider-detect.md from decisions inbox - Consolidated 3 overlapping database provider decisions into single entry - Propagated cross-agent updates to Cyclops and Beast history Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Update executive summary lead with wins, refresh data + charts - Rewrote opening: bold stats, mini-table, bullet highlights replace 3 dense paragraphs - Tightened Drop-In Replacement section (renamed, trimmed) - Added Run 19 (CU), Run 20/21 (WT) data throughout - Updated chart script with 3 new data points, regenerated all 3 PNGs - Total runs: 38 -> 40, new milestones, updated What's Next roadmap Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log exec summary update session, merge decisions Session: 2026-03-11-exec-summary-update Requested by: Jeffrey T. Fritz Changes: - Logged exec summary update session (Beast + Coordinator work on EXECUTIVE-SUMMARY.md) - Merged 2 inbox decisions into decisions.md - No deduplication needed (no duplicate headings found) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(tests+samples): Rename TItem to ItemType in all test and sample files The ItemType standardization (renamed TItem/TItemType to ItemType across all generic data-bound components) was not applied to test files and sample pages. This caused RZ10001 and CS0411 build errors because the Razor compiler could not resolve the generic type parameter. Updated 43 files across: - RadioButtonList, BulletedList, CheckBoxList, DropDownList, ListBox tests - ToolTipTests (BaseWebFormsComponent) - All ControlSamples sample pages - AfterWingtipToys account pages Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log ItemType rename fix and decision Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(ci): Drop ClientSide build, fix CS1705 in test project - Remove AfterBlazorClientSide from build.yml (WebAssembly incompatible with HttpContextAccessor) - Add FrameworkReference to test project to resolve assembly version mismatch Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(lib): Add L2 automation shims Unit string, Response.Redirect, ViewState, GetRouteUrl - OPP-2: Implicit string-to-Unit conversion (Width="125px" just works) - OPP-3: ResponseShim wrapping NavigationManager for Response.Redirect() compat - OPP-5: ViewState dictionary on WebFormsPageBase - OPP-6: GetRouteUrl() on WebFormsPageBase Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Update Cyclops history and decision inbox for L2 shims Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Log L2 automation session, merge Forge analysis Session: 2026-03-11-l2-automation-tools Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-03-11-l2-automation-tools.md - Merged Forge L2 automation analysis from inbox into decisions.md - Merged Cyclops ItemType consumer coverage decision from inbox - Merged Cyclops L2 shims implementation decision from inbox - Propagated updates to affected agent history files (Beast, Cyclops, Forge, Jubilee, Rogue, Colossus) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: Add unit tests for L2 automation shims (OPP-2,3,5,6) - Unit implicit string conversion: 17 tests - ResponseShim: 9 tests - ViewState on WebFormsPageBase: 10 tests - GetRouteUrl on WebFormsPageBase: 7 tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Update Rogue history + file ResponseShim null URL bug Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(lib): Add EnumParameter<T> for string-accepting enum parameters Enables GridLines="None" syntax in Razor markup without @() wrapping. Implicit conversions preserve backward compatibility with enum values. New file: Enums/EnumParameter.cs - readonly struct with implicit conversions (T->EP, string->EP, EP->T) and equality operators. Components updated: BaseStyledComponent, BaseWebFormsComponent, BulletedList, Calendar, Chart, ChartSeries, CheckBox, CheckBoxList, DataPager, DetailsView, FormView, GridView, Image, ImageButton, ImageMap, ListBox, ListView, Literal, Login, ChangePassword, Menu, MenuItemStyle, MenuLevelStyle, NamingContainer, Panel, RadioButton, RadioButtonList, ScriptManager, SiteMapPath, Table, TableCell, TableFooterRow, TableHeaderCell, TableHeaderRow, TableRow, TextBox, TreeNode, TreeView, UiPagerSettings, UiStyle, UiTableItemStyle, UpdatePanel, BaseValidator, Style, TableItemStyle Interfaces updated: IImageComponent, IHasLayoutStyle, IHasLayoutTableItemStyle Skipped (abstract classes, not enums): DataListEnum, RepeatLayout, ButtonType, TreeViewImageSet, ValidationSummaryDisplayMode Test files needing .Value for ShouldBe(): ListView/SortingEvents, ScriptManager/ScriptManagerTests, UpdatePanel/UpdatePanelTests, Localize/InheritsLiteral Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Update cyclops history and decisions for EnumParameter<T> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(tests): Update EnumParameter assertions + fix ResponseShim null guard - Add .Value to ShouldBe/Assert calls for EnumParameter<T> compatibility - Fix ResponseShim.Redirect null URL: ArgumentNullException instead of NRE - Update test expectation from NullReferenceException to ArgumentNullException Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Add L2 automation shims documentation - EnumParameter<T>: string-accepting enum parameters across 46 components - ResponseRedirect: Response.Redirect() navigation shim - L2AutomationShims: Overview of all Layer 2 migration automation features - Updated mkdocs.yml nav with new utility feature pages Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log L2 analysis discussion session Session: 2026-03-12-l2-analysis-discussion Requested by: Jeffrey T. Fritz Changes: - logged session to .ai-team/log/2026-03-12-l2-analysis-discussion.md - merged inbox decisions into decisions.md (EnumParameter<T>, ResponseShim null bug) - consolidated 3 overlapping L2 automation decisions into 1 - propagated team updates to rogue, beast, forge, cyclops histories - orchestration log for Forge analysis Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): merge cookie degradation directive and PageTitle dedup decision Session: 2026-03-12-pagetitle-dedup-and-cookie-decision Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/ - Merged cookie graceful degradation directive from inbox - Merged PageTitle dedup decision from inbox - Merged render mode guards decision from inbox - Propagated updates to Cyclops, Beast, and Forge history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): merge cookie degradation directive, consolidate decisions, summarize histories Session: 2026-03-12-pagetitle-dedup-and-cookie-decision Requested by: Jeffrey T. Fritz Changes: - Merged Pattern B+ cookie graceful degradation directive from inbox - Consolidated duplicate cookie decisions in decisions.md - Summarized oversized history.md files (forge, cyclops, beast, rogue) - Archived detailed entries to history-archive.md files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): merge PageTitle dedup decision Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: render mode guards, Request/Response shims, PageTitle dedup Add HttpContext availability guards to WebFormsPageBase: - IsHttpContextAvailable property for SSR vs interactive detection - RequireHttpContext() throws for members needing HttpContext - GetRouteUrl guarded with clear error message Add Request compatibility shim (RequestShim): - Request.Cookies: EmptyRequestCookies fallback when no HttpContext - Request.QueryString: NavigationManager.Uri fallback - Request.Url: NavigationManager.Uri fallback Expand Response shim with cookie support (Pattern B+): - Response.Cookies: NullResponseCookies no-op fallback - Both cookie classes log warning on first access per instance Add PageTitle deduplication to L1 migration script: - ConvertFrom-PageDirective suppresses <PageTitle> when code-behind contains Page.Title assignment (L2 handles it instead) Update test infrastructure: - BlazorWebFormsTestContext always registers ILogger<T> - MockNavigationManager accepts optional initial URI - New RenderModeGuardTests (8 tests) - New RequestShimTests (7 tests) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * migrated squad * fix: correct three L1 script bugs found during ContosoUniversity migration 1. _Imports.razor template now includes @inherits WebFormsPageBase (was documented in METHODOLOGY.md but missing from script template) 2. MainLayout header now injects <BlazorWebFormsComponents.Page /> component (also documented but missing from script) 3. ContentPlaceHolder->@Body regex extended to match ContentPlaceHolder1 and BodyContent in addition to MainContent Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: regenerate AfterContosoUniversity with fixed L1 script Regenerated using corrected bwfc-migrate.ps1 that now: - Adds @inherits WebFormsPageBase to _Imports.razor - Injects <Page /> component in MainLayout - Matches ContentPlaceHolder1 for @Body replacement 76 build errors remain (34 CS + 42 Razor) all expected L2 work: - CS: System.Web.UI usings, BLL namespaces, EF6 types - RZ: Missing ItemType params, GridView style children, MainLayout tags Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: L1 script improvements strip System.Web usings, copy BLL dirs, fix HeadContent 1. Strip System.Web.* usings from code-behind files during copy (eliminates ~18 CS errors per migration) 2. Copy BLL/, BusinessLogic/, Logic/, Services/ directories alongside Models/ with System.Web using removal and TODO headers 3. Fix HeadContent generation: - Filter out empty <title></title> tags (Page component handles title) - Capture full <script src=cdn>...</script> tags including closing tag (was only capturing opening tag, causing unclosed tag errors) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: add ItemType="object" fallback for generic BWFC components in L1 When generic BWFC components (GridView, DetailsView, DropDownList, BoundField, etc.) lack an explicit ItemType attribute, the L1 script now adds ItemType="object" as a safe compilable default. L2 can refine to actual model types. Eliminates ~16 RZ10001 'type cannot be inferred' Razor errors. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: ContosoUniversity L1+L2 migration builds with 0 errors L1: bwfc-migrate.ps1 with ItemType=object fallback (1.5s) L2: AI-assisted semantic transforms (~15min) Transforms: WebForms to Blazor patterns, EF6 to EF Core DI, GridView styles to render fragment pattern, hex color Razor syntax, enum qualification, stripped ScriptManager/UpdatePanel/WebMethod Result: 0 errors, 12 warnings (pre-existing NU1510 from BWFC lib) Blocked: 4 SortedStyle components (scheduled for library creation) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sensei: improve migration-toolkit skill frontmatter descriptions Add WHEN: trigger phrases to all 4 migration-toolkit skills: - migration-standards: Low Medium-High - bwfc-migration: Low High (added FOR SINGLE OPERATIONS routing) - bwfc-identity-migration: Low Medium-High - bwfc-data-migration: Low Medium-High Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sensei: split bwfc-migration skill into main + 2 child docs Extract controls-specific sections to reduce SKILL.md from ~8,707 to ~3,981 tokens (under 5,000 hard limit): - CONTROL-REFERENCE.md (~3,434 tokens) Control translation tables, component coverage summary, structural/theming/custom control base classes - CODE-TRANSFORMS.md (~1,549 tokens) Code-behind lifecycle, event handlers, navigation, data binding, Master Page to Layout conversion Main SKILL.md retains: installation, migration pipeline, page rules, reference links, gotchas, and per-page checklist. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sensei: split bwfc-data-migration skill into main + child doc Extract architecture plumbing sections to reduce SKILL.md from ~6,296 to ~4,224 tokens (under 5,000 hard limit): - ARCHITECTURE-TRANSFORMS.md (~2,223 tokens) Global.asax to Program.cs, Web.config to appsettings.json, route table to @page directives, HTTP handlers/modules to middleware, third-party integrations, files to create, Blazor enhanced navigation workarounds Main SKILL.md retains: session state warning, EF6 to EF Core, DataSource to services, session to scoped services, common gotchas, and reference link. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add contoso-migration-test skill for end-to-end CU benchmark Workflow skill that orchestrates: - Phase 0: Prep (determine run number, clear output) - Phase 1: L1 automated script (~1s) - Phase 2: L2 Copilot-assisted transforms (~20-30 min) - Phase 3: Build validation - Phase 4: Playwright acceptance tests (40 tests) - Phase 5: Report generation with standard template Includes REPORT-TEMPLATE.md child doc with all required sections. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move contoso-migration-test to .github/skills (not a shipping skill) migration-toolkit/skills/ contains skills that ship to customers. The migration test skill is an internal dev/CI tool, so it belongs in .github/skills/ with other project-level skills. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(ContosoUniversity): add BWFC middleware and DB initialization - Add app.UseBlazorWebFormsComponents() for .aspx URL rewriting (fixes 20+ test failures) - Add Database.EnsureCreated() at startup to auto-create LocalDB schema (fixes HTTP 500s) - BLL service registrations and connection string were already correct Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: resolve 3 bug clusters blocking 16 acceptance tests Cluster 1 (7 tests): Add OnModelCreating to ContosoUniversityEntities to explicitly map Enrollment.Cours FK to Enrollment.CourseID, preventing EF Core from generating a shadow FK (CourseID1) due to the non-standard navigation property name. Cluster 2 (5 tests): Nav link IDs were already present. Added @page '/' route to Home.razor so root URL serves the layout with nav links. Cluster 3 (4 tests): Added PageTitle to Home.razor. About GridView and Courses DetailsView markup was already correct -- data loading fixes from Cluster 1 should cascade to resolve these. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: robust DB schema creation with seed data for ContosoUniversity EnsureCreated() is a no-op when the database already exists, leaving the schema incomplete (missing Enrollments table). This caused HTTP 500 on Students and Instructors pages which query the DB in OnInitialized. Now validates all tables exist on startup, drops and recreates the DB if schema is stale, and seeds sample data for Students, Instructors, Courses, Departments, and Enrollments. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ContosoUniversity migration test Run 20: 37/40 (92.5%) End-to-end migration benchmark results: - L1: 1.23s, 88 transforms, SelectMethod preserved - L2: ~80 min (incl. 4 test-fix iterations), 39 files transformed - Build: 0 errors, 4 warnings (BWFC library only) - Tests: 37/40 passed (Home 100%, About 100%, Instructors 100%, Navigation 100%, Courses 83%, Students 78%) - 3 remaining failures: interactive form handlers (add/search) Report at dev-docs/migration-tests/contosouniversity/run20/REPORT.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(squad): ContosoUniversity Run 20 orchestration, session log, and decision merge Session: 2026-03-13-cu-run20 Requested by: Jeffrey T. Fritz Branch: squad/l2-automation-tools Changes: - Orchestration logs: 8 agent spawns (Cyclops 3, Colossus 3, Beast 1, Scribe 1) - Session log: ContosoUniversity Run 20 final summary (37/40 tests passing, 92.5%) - Decision inbox: Merged 4 decisions from inbox/ to decisions.md (aspx links, sorted styles, L2 patterns) - Inbox cleaned: Deleted 4 inbox files after merge * fix: add UseBlazorWebFormsComponents() to migration skill Program.cs templates The ARCHITECTURE-TRANSFORMS.md Program.cs template was missing app.UseBlazorWebFormsComponents() from the middleware pipeline, which is why L2 agents never added it. Added to both the child doc template and the main SKILL.md service registration pattern. Reverted contoso-migration-test skill it's a test harness, not the source of truth for what to build. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: preserve form wrapper as div and fix CSS paths in L1 script Two CSS/layout bugs in bwfc-migrate.ps1 caused migrated sites to render with broken layouts: 1. ConvertFrom-FormWrapper now replaces <form runat=server> with <div> (preserving id attr) instead of stripping it. The form wrapper creates a block formatting context that CSS positioning depends on removing it broke relative positioning in page CSS. 2. ConvertFrom-MasterPage now rewrites relative CSS href paths to absolute (prefix with /) in extracted <link> tags. Relative paths in <HeadContent> resolve from the page URL, not the component, causing 404s on sub-pages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update bwfc-migration skill to reflect formdiv replacement and CSS path fixes - SKILL.md: 3 references updated from 'remove form wrapper' to 'replace with div' - SKILL.md: added explanation of CSS block formatting context preservation - CODE-TRANSFORMS.md: updated Master Page key changes for formdiv - CODE-TRANSFORMS.md: added CSS path rewriting note (relativeabsolute for HeadContent) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: add mandatory child doc reading instruction to bwfc-migration Layer 2 The Reference Documents section was a passive footnote at the bottom of SKILL.md. Agents doing Layer 2 transforms never saw the instruction to read CODE-TRANSFORMS.md and CONTROL-REFERENCE.md, causing them to miss lifecycle mappings, control translation tables, and structural component guidance. Moved the instruction to the top of the Layer 2 section with a loud MANDATORY warning and full content summaries so agents know exactly what each doc contains. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: ContosoUniversity migration Run 21 35/40 tests passing (87.5%) Run 21 completes in ~34 min total (69% faster than Run 20's 80 min). L1 script: 0.93s, L2 transforms: ~25 min, 3 build iterations. Key improvements from Run 20: - Mandatory child doc reading prevented repeated mistakes - Added @using BlazorWebFormsComponents.Enums to _Imports.razor - Fixed EF Core Cours primary key with [Key] attribute - All BWFC attribute syntax corrected (lowercase bools, WebColor, type-qualified enums, bare int Units) - Added <title> to App.razor, root route to Home.razor 5 remaining failures are BWFC component behavioral limitations: - GridView CRUD (delete/edit/add don't refresh) - DropDownList prerender with string Items - DetailsView with anonymous type objects Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): EDMXEF Core architecture decision merged L1 script enhancement Session: 2026-03-13T20-25-31Z-edmx-architecture Changes: - Merged Forge decision to .squad/decisions.md - Created session log: .squad/log/2026-03-13T20-25-31Z-edmx-architecture.md - Created orchestration log: .squad/orchestration-log/2026-03-13T20-25-31Z-forge.md Decision: Enhance bwfc-migrate.ps1 with EDMX parsing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: add EDMXEF Core parser script for L1 migration - New Convert-EdmxToEfCore.ps1 parses SSDL/CSDL/C-S Mapping - Generates entity classes with [Key], [Required], [MaxLength], etc. - Generates DbContext with OnModelCreating() FK relationships + cascade deletes - Integrated into bwfc-migrate.ps1 Models section - Skips EDMX artifacts (*.edmx, *.tt, *.Designer.cs) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Merge EDMX parser decision + session log Session: 2026-03-13T20-38-33Z-edmx-parser-build Requested by: Scribe Changes: - Merged cyclops-edmx-parser.md decision to decisions.md - Created session log (what, deliverables, next action) - Created orchestration log (Cyclops routing info) - Deleted inbox file * docs(ai-team): Merge Forge EDMX parser review decision, create orchestration log Session: 2026-03-13-forge-edmx-review Requested by: Scribe Changes: - Merged decision from .squad/decisions/inbox/forge-edmx-review.md decisions.md - Forge approval for Cyclops EDMXEF Core parser (all Run 21 requirements verified, 5 non-blocking suggestions noted) - Created orchestration log: 2026-03-13T20-45-00Z-forge.md - Deleted inbox file after merge * Run 22: ContosoUniversity migration test 39/40 (97.5%) EDMX parser eliminates all 5 model/FK failures from Run 21 (35/40). New Convert-EdmxToEfCore.ps1 correctly generates entity classes with PKs, FKs, cascade deletes, and full DbContext OnModelCreating. Fixed L1 EDMX array bug (Set-StrictMode + single FileInfo .Count). L2 transforms applied to all 6 pages, 4 BLL classes, infrastructure. 6 build iterations to resolve all errors. Remaining failure: StudentsPage_AddNewStudentFormWorks (binding timing). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): UpdatePanel ContentTemplate enhancement — session log, orchestration logs, decision merge Session: 2026-03-13-updatepanel-contenttemplate Requested by: Scribe (automated) Changes: - Created 4 orchestration logs (Cyclops, Rogue, Jubilee, Colossus) - Created session log with decision summary - Merged 5 decisions from inbox to decisions.md (no deduplication needed — distinct decisions) - Deleted 4 inbox decision files after merge - Updated Cyclops, Jubilee, Colossus history.md with cross-agent team updates - Rogue history.md updated with ContentTemplate TDD test summary Decisions merged: 1. UpdatePanel ContentTemplate + BaseStyledComponent base class (Cyclops) 2. UpdatePanel ContentTemplate test coverage — 12 TDD tests (Rogue) 3. AJAX Controls section added to ComponentList.razor (Jubilee) 4. UpdatePanel sample page with 6 usage patterns (Jubilee) 5. UpdatePanel integration test coverage — 3 Playwright tests (Colossus) All UpdatePanel tests passing (24/24). All agent orchestration logs created. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add ContentTemplate render fragment to UpdatePanel - Add ContentTemplate RenderFragment parameter matching Web Forms ITemplate - Render ContentTemplate ?? ChildContent for backward compatibility - Change base class to BaseStyledComponent (enables CSS styling) - Add 24 bUnit tests (12 new ContentTemplate + 12 existing) - Add sample page with 6 usage patterns (migration, styling, render modes) - Add 3 Playwright interaction tests + smoke test - Eliminates RZ10012 warnings for ContentTemplate in L1 migration output - Forge reviewed: APPROVED for Web Forms fidelity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: update L1 code-behind TODO header for UpdatePanel as BWFC component The code-behind TODO header previously said 'UpdatePanel / ScriptManager references -> remove', which is misleading now that UpdatePanel is a valid BWFC component with ContentTemplate support. Split into separate guidance: ScriptManager -> remove, UpdatePanel -> preserved by BWFC. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update migration-toolkit with UpdatePanel ContentTemplate support - CONTROL-REFERENCE.md: added UpdatePanel ContentTemplate section with before/after examples and key implementation points - L1 script: clarified UpdatePanel markup is preserved (ContentTemplate now a valid BWFC RenderFragment) - Squad agent history and decision records updated Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: harden AddNewStudent Playwright test for Blazor Server timing - Blur last TextBox field before clicking Insert to ensure @onchange fires - Increase post-click wait from 500ms to 1000ms for full SignalR round-trip - Add 3-second retry loop polling for row count change or name in DOM - No changes to other test methods Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: use LEFT JOIN in GetJoinedTableData so students without enrollments appear in GridView The SelectMany query was an INNER JOIN that excluded students without enrollments. Changed to Students.Include(Enrollments) with a foreach loop that shows Count=0 for students with no enrollments. This fixes the last failing acceptance test (StudentsPage_AddNewStudentFormWorks) where a newly added student would not appear if no course enrollment was created. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Session log + decision merge + agent history updates Session: 2026-03-14T13-22-00Z-students-left-join-fix Requested by: User (Scribe directive) Changes: - Logged Cyclops spawn (Students LEFT JOIN fix) to orchestration-log - Logged Colossus spawn (test timing verification) to orchestration-log - Created session log: Students LEFT JOIN + test timing - Merged 4 inbox decisions into decisions.md (Students LEFT JOIN + UpdatePanel enhancement + UpdatePanel docs + Forge review) - Deduplicated and consolidated decisions (UpdatePanel decisions into single comprehensive entry) - Deleted inbox files (4 total) - Appended team updates to Cyclops/Colossus/Beast/Forge history.md files * feat: migration toolkit improvements from Run 22 analysis L1 Script (bwfc-migrate.ps1): - Strip <ContentTemplate> wrappers to eliminate RZ10012 warnings - Auto-add @page "/" root route for Home/Default/Index pages - Generate <PageTitle> from Content title placeholders and Page Title attribute - Normalize ID="x" to id="x" for HTML/CSS/JS selector compatibility EDMX Parser (Convert-EdmxToEfCore.ps1): - Handle StoreGeneratedPattern=Computed with [DatabaseGenerated] annotation Migration Skills Documentation: - Document var usage requirement (IDE0007 enforced as error) - Document BWFC TextBox blur-based binding timing for Playwright tests - Add concrete session state examples (minimal API, scoped service, DB-backed) Issue Plan: - 34 issues across 4 milestones (M20-M23) for component parity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: handle EnumParameter<T> in Style.FromAttributes reflection Style.FromAttributes used Convert.ChangeType which cannot convert strings to EnumParameter<T>. Added pattern match for generic EnumParameter<> types that parses the underlying enum and creates the wrapper via Activator.CreateInstance. Also removed unnecessary Convert.ChangeType call since all branches now produce correctly typed values. Fixes: DataList InlineHeaderStyle tests (2 failures on CI) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: UpdatePanel Playwright tests use correct locators BWFC Button renders as <input type='submit'>, not <button>. Tests used 'button.btn-primary' which never matched. Fixed to: - Scope each test to data-audit-control section for isolation - Use input[type='submit'] locators (matching actual BWFC output) - Fix text mismatches ('Click Me' vs actual 'Increment') - Fix inline mode: 'The time is:' vs actual 'The current time is' Fixes 3 Playwright integration test failures on CI. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: M20 batch 1 — ToolTip on base class, AccessKey rendering, GridView style merging Issues resolved: - #15 AccessKey — already on BaseWebFormsComponent; added accesskey rendering to TextBox, HyperLink, Panel, Image, CheckBox (was missing from 5 components) - #16 ToolTip — moved from BaseStyledComponent up to BaseWebFormsComponent; removed duplicates from ChartSeries and MenuItem - #17 DataBoundComponent → BaseStyledComponent — already implemented - #18 Image/Label → BaseStyledComponent — already implemented Additional fixes: - GridView: merge border-collapse:collapse with base style props (BackColor, ForeColor, Width, Height) via GetCombinedTableStyle() Tests: 37 new bUnit tests (1587 total, all passing) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: M20 batch 2 — RequiredFieldValidator InitialValue, FormView CssClass, sample pages Issues resolved: - #45 RequiredFieldValidator InitialValue — validates against configurable initial value instead of just empty string (Web Forms parity) - #33 FormView CssClass/style — renders class and merged style on outer table Verified already implemented (no changes needed): - #19 Validator Display, #20 SetFocusOnError, #27 Login base classes, #31 ValidationSummary, #36 DataTextFormatString, #37 AppendDataBoundItems, #38 Label AssociatedControlID, #39 Panel BackImageUrl, #40 TextBox ReadOnly/MaxLength, #46 CompareValidator, #24 GridView paging, #25 sorting, #26 editing, #35 row selection, #23/#34 Calendar styles, #43 DataList, #41/#42 ListView, #44 FormView DefaultMode New: BaseProperties sample page with AccessKey, ToolTip, GridView styling demos Tests: 8 new bUnit tests (1595 total, all passing) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: Playwright integration tests for BaseProperties sample page - Smoke test: /ControlSamples/BaseProperties added to ControlSampleTests - AccessKey rendering verification (input, textbox, anchor) - ToolTip/title attribute verification across controls - GridView style properties (background-color, width) on table Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(squad): M20 Batch 6 orchestration logs and decision merge Session: 20260314-m20-batch6 Requested by: Scribe Changes: - Created orchestration logs for Forge, Cyclops, Rogue, Scribe (batch 6 spawns) - Created M20 Batch 6 session log (parallel work items #28, #29, #48) - Merged 5 decision inbox files to decisions.md (L1 script fixes, base class, documentation, EDMX) - Deleted inbox files after merge - Appended team updates to Forge, Cyclops, Rogue history files * feat: M20 health dashboard scoring spec + L1 script WIP - Forge: complete 7-dimension scoring methodology for component health dashboard (#48) — property parity, HTML fidelity, bUnit tests, integration tests, style support, sample pages, event support - Reference data for 60+ components across 9 categories - L1 script improvements in progress (#28) - L1 test harness in progress (#29) - Health dashboard Blazor front page in progress (#48) Note: Cyclops (#28), Rogue (#29), and Jubilee (#48) agents still running — their output will be committed in the next session. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: L1 script ~40% → ~60% automation coverage (#28) Add 5 new transformation categories to bwfc-migrate.ps1: Markup transforms (Normalize-AttributeValues + Add-DataSourceIDWarning): - Boolean normalization: True/False → true/false (with text-attr exclusions) - Enum type-qualifying: 18 attribute→enum mappings (GridLines→@GridLines.Both) - Unit normalization: strip px suffix from Width/Height/etc (bare int = pixels) - DataSourceID removal + data source control replacement with TODO comments Code-behind transforms (enhanced Copy-CodeBehind): - Response.Redirect → NavigationManager.NavigateTo (4 patterns) - Session[\"key\"] detection with migration guidance block - ViewState[\"key\"] detection with suggested field declarations Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: L1 migration test harness — 10 cases, 70% pass baseline (#29) - 10 focused test cases covering: asp: prefix removal, attribute stripping, directives, form wrappers, expressions, URL normalization, comments, content wrappers, ItemType conversion - Run-L1Tests.ps1 runner with line-accuracy scoring (~94.3%) - Baseline: 7/10 pass, 3 known L1 bugs documented (partial Eval, content wrapper indentation, ItemType double-add) - ~114ms per file average execution time Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fixes #441 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: Implement ConfirmButtonExtender and FilteredTextBoxExtender - Update BaseExtenderComponent with full JS module lifecycle - Add ConfirmButtonExtender (#451) with browser confirm() support - Add FilteredTextBoxExtender (#450) with keypress filtering - JS modules for both extenders in wwwroot/js/ - FilterType (flags) and FilterMode enums Fixes csharpfritz#58 Fixes csharpfritz#59 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Add documentation for Ajax Toolkit extender components - Create ConfirmButtonExtender.md with usage examples, properties, and migration guidance - Create FilteredTextBoxExtender.md with character filtering patterns and examples - Create AjaxToolkit/index.md as overview of extender pattern and render mode requirements - Update mkdocs.yml to add new 'Ajax Control Toolkit Extenders' navigation section Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add sample pages for Ajax Toolkit extender components Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: Add bUnit tests for ConfirmButtonExtender and FilteredTextBoxExtender Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: Implement ModalPopupExtender and CollapsiblePanelExtender Fixes #446 ModalPopupExtender with overlay, focus trap, drag support Fixes #447 CollapsiblePanelExtender with CSS transitions, toggle states Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Add documentation for ModalPopupExtender and CollapsiblePanelExtender Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Beast history: Document ModalPopupExtender and CollapsiblePanelExtender documentation delivery Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add sample pages for ModalPopupExtender and CollapsiblePanelExtender Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: Add bUnit tests for ModalPopupExtender and CollapsiblePanelExtender Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Implement 10 Ajax Toolkit components (Accordion, TabContainer, Calendar, AutoComplete, MaskedEdit, NumericUpDown, Slider, ToggleButton, PopupControl, HoverMenu) Adds container components (Accordion/AccordionPane, TabContainer/TabPanel) and 8 extender components following the BaseExtenderComponent pattern with JS interop. All include full property parity with ASP.NET Ajax Control Toolkit originals. Fixes #444, Fixes #445, Fixes #448, Fixes #449 Fixes #452, Fixes #453, Fixes #454, Fixes #455 Fixes #456, Fixes #457 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test/docs/samples: Add tests, documentation, and samples for all 10 Ajax Toolkit components - 265 new bUnit tests (Accordion, TabContainer, Calendar, AutoComplete, MaskedEdit, NumericUpDown, Slider, ToggleButton, PopupControl, HoverMenu) - 10 MkDocs documentation pages with migration guides and property tables - 10 sample pages with 40+ interactive demos in AfterBlazorServerSide - Updated AjaxToolkit index, mkdocs.yml nav, and ComponentCatalog Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Update L1 migration script for ajaxToolkit prefix conversion (#443) Add ConvertFrom-AjaxToolkitPrefix function that: - Strips ToolkitScriptManager entirely (not needed in Blazor) - Converts 16 known ajaxToolkit: controls to Blazor equivalents - Falls back to TODO comments for unrecognized controls - Adds @using BlazorAjaxToolkitComponents to _Imports.razor scaffold All regex patterns use (?s) single-line mode for multi-line tags. Fixes #443 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs/samples: Add Ajax Toolkit migration guide and showcase page - Comprehensive migration guide (docs/AjaxToolkit/migration-guide.md) covering all 14 controls with before/after examples, installation, troubleshooting - AjaxToolkitShowcase page demonstrating 10 controls in one interactive page - Updated mkdocs.yml nav and AjaxToolkit index Fixes #458, Fixes #459 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…and .NET 10 patterns (#467) * Initial plan * Add L3 performance optimization skill and update migration toolkit docs Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
…464) * feat: Add performance benchmark suite comparing .NET Framework vs .NET 10 Benchmark infrastructure: - Run-Benchmarks.ps1: Orchestrates IIS Express + dotnet run, measures cold start, warm avg, P95, min, max response times across multiple pages - Generate-BenchmarkReport.ps1: Produces Markdown report with SVG bar charts - Supports -SkipFramework, -Iterations, -WhatIf flags Initial results (partial - some apps have pre-existing build issues): - WingtipToys (.NET Framework 4.5.2): Home 8.7ms, ProductList 12.1ms, About 7.5ms - AfterContosoUniversity (.NET 10 Blazor): Home 2.5ms, Students 9.6ms, About 3.8ms Fixes #424 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * skill: Add performance-benchmarks skill for benchmark execution and diagnosis Documents the full benchmark workflow: scripts, app matrix, known issues, pre-flight checks, metrics interpretation, and re-run procedures. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: Fix AfterWingtipToys build error and increase IIS Express timeout - Add @using Microsoft.AspNetCore.Identity to ManageLogins.razor (fixes CS0246) - Increase ContosoUniversity IIS Express timeout from 30s to 60s Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * perf: Complete benchmark run with WingtipToys head-to-head comparison WingtipToys results (50 iterations): - Home: Framework 6ms avg Blazor 3.2ms avg (1.9x faster) - ProductList: Framework 10ms avg Blazor 2.4ms avg (4.2x faster) - About: Framework 6.7ms avg Blazor 2.8ms avg (2.4x faster) ContosoUniversity Framework: IIS Express cannot JIT-compile the .NET Framework 4.5.2 app with old Roslyn compiler within 180s. Blazor-only results included (Home 1.8ms, Students 7.2ms, About 3.2ms). Includes updated SVG charts and benchmark report. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * perf: Add MSBuild pre-compilation for Framework apps + update skill - Add Find-MSBuild helper to locate MSBuild.exe (VS 2022/2019/2017 + vswhere) - Pre-compile .NET Framework projects before IIS Express launch - Pre-compile ASP.NET views with aspnet_compiler.exe - Start LocalDB automatically before Framework app benchmarks - Add IIS Express stderr capture for diagnostic output on failures - Update performance-benchmarks skill with fixes and new patterns - Re-run benchmarks with complete results Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * perf: Complete 4-app benchmark with MSBuild pre-compilation All 4 apps now benchmark successfully: - WingtipToys: Framework 6.4/8.3/4.9ms Blazor 2.4/3.6/3.1ms (1.6-2.7x faster) - ContosoUniversity: Framework 2.2/6.5/3.6ms Blazor 1.6/6.3/2.8ms (1.0-1.4x faster) Fixes applied: - Find-MSBuild now checks VS 2026 (v18) first, then 2022/2019/2017 - ContosoUniversity uses .aspx URLs (no default document at /) - Readiness check uses first page URL instead of base URL - EF6/EF Core table rename (EnrollmentEnrollments) around Framework benchmark - Clear-BenchmarkPorts kills stale IIS Express on startup - Skill bumped to high confidence Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: add Ajax Toolkit to README and L1 migration skill - Added ## Ajax Control Toolkit Components section to README.md with NuGet badge and 14 component links - Created .squad/skills/migration-standards/ajax-toolkit-migration.md for L1 automation guidance - Updated migration-standards SKILL.md with reference to companion document - Fixed NuGet badge URL to match actual PackageId Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: add AJAX-TOOLKIT.md to bwfc-migration skill - Created migration-toolkit/skills/bwfc-migration/AJAX-TOOLKIT.md with full ACT migration reference - Updated SKILL.md to reference AJAX-TOOLKIT.md in Layer 2 mandatory reads and Reference Documents - Updated CONTROL-REFERENCE.md: removed outdated 'Not Covered' entry, added Ajax Toolkit section - 14 supported ACT components documented with installation, detection, L1/L2 patterns, examples Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: Add TextBoxWatermarkExtender Implements placeholder text for TextBox controls, matching the original Ajax Control Toolkit TextBoxWatermarkExtender behavior. - WatermarkText property for placeholder text - WatermarkCssClass for styling the watermark state - JS behavior handles focus/blur/input events Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add DragPanelExtender Makes panels draggable by a handle element. Matches the original Ajax Control Toolkit DragPanelExtender behavior. - DragHandleID property to specify the drag handle element - Falls back to entire target if no handle specified - Handles edge cases (text selection, left-click only) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add ResizableControlExtender Allows users to resize elements by dragging a handle. Matches the original Ajax Control Toolkit ResizableControlExtender behavior. - HandleCssClass for styling the resize handle - ResizableCssClass applied while actively resizing - Min/Max width and height constraints - Creates resize handle if not found Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add DropShadowExtender and AlwaysVisibleControlExtender - DropShadowExtender: CSS box-shadow with opacity, width, rounded corners, position tracking - AlwaysVisibleControlExtender: Fixed positioning with 9 anchor points, offsets, animation support - New enums: HorizontalSide, VerticalSide for positioning Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add RoundedCornersExtender and UpdatePanelAnimationExtender - RoundedCornersExtender: Selective border-radius with BoxCorners enum, optional background color - UpdatePanelAnimationExtender: MutationObserver-based update detection with CSS class and fade animations - New enum: BoxCorners (flags for corner selection) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add PasswordStrength and MaskedEditExtender - PasswordStrength: Real-time password quality indicator with text/bar modes, 5 strength levels - MaskedEditExtender: Input masking for phone/date/SSN with configurable mask patterns - New enums: DisplayPosition, StrengthIndicatorType, MaskType, InputDirection, AcceptNegative, DisplayMoney Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add ValidatorCalloutExtender and HoverMenuExtender - ValidatorCalloutExtender: Validation error callout bubbles with positioning, highlight CSS, icons - HoverMenuExtender: Hover-triggered popup menus with delays and positioning - New enum: PopupPosition (TopLeft, TopRight, BottomLeft, BottomRight) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add SlideShowExtender - SlideShowExtender: Image carousel with auto-play, navigation controls, slide titles/descriptions - Client-side slide management via Slides parameter or data-slides attribute - Play/pause, next/previous controls with configurable interval Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add ListSearchExtender and BalloonPopupExtender - ListSearchExtender: Type-to-filter for ListBox/DropDownList with Contains/StartsWith matching - BalloonPopupExtender: Styled tooltip balloons with pointer arrows, multiple trigger modes - New enums: PromptPosition, QueryPattern, BalloonStyle, BalloonSize, BalloonPosition Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add docs, tests, and migration guide for new ACT extenders Documentation (12 new files in docs/AjaxToolkit/): - TextBoxWatermark, DragPanel, ResizableControl, DropShadow - AlwaysVisibleControl, RoundedCorners, UpdatePanelAnimation - PasswordStrength, ValidatorCallout, SlideShow, ListSearch, BalloonPopup - Updated index.md with all new components bUnit Tests (6 new test files, 104 tests): - TextBoxWatermarkExtender, DropShadowExtender, PasswordStrength - ValidatorCalloutExtender, ListSearchExtender, BalloonPopupExtender Migration Toolkit: - Updated AJAX-TOOLKIT.md with migration patterns for all 12 extenders Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: Set correct ACT defaults for HoverMenuExtender (HoverDelay=300, PopDelay=100) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Updated status from Draft to Approved for issue #439. Links PRD to GitHub issue for tracking. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Session: 2026-03-16-prd-review Requested by: Jeffrey T. Fritz Changes: - Logged orchestration: Forge reviewed Component Health Dashboard PRD - Logged session: PRD review findings (3 errata items identified) - Merged decision inbox: forge-prd-439-review.md → decisions.md - Propagated cross-agent update to Cyclops history.md - No archival needed (decisions.md = 11.8 KB)
…e captured Session: 2026-03-16T13:35:00Z-prd-bugfix Requested by: Jeffrey T. Fritz Changes: - Logged orchestration for Forge PRD bug fix (3 bugs resolved) - Created session log for PRD bugfix session - Merged empty decision inbox (no new decisions) - Appended Playwright directive to Colossus history (HTML Fidelity dimension unblocked) - Created decisions-archive.md template for future archiving cycles
Session: 2026-03-16-msbuild-verification Requested by: Jeffrey T. Fritz Changes: - Added orchestration log: coordinator MSBuild verification - Added session log: msbuild-verification summary - Merged decision: MSBuild 18.5.0.12604 verified for .NET 4.8 WebForms compilation - Updated Forge history: Cross-agent notification that reflection tool is viable
…ation Session: 2026-03-16T06-58-13Z-prd-decomposition Requested by: Scribe Changes: - Created orchestration-log entry for Forge PRD decomposition task - Created session-log documenting 12 work items and dependency chain - Merged forge-prd-decomposition.md inbox into decisions.md - Archived pre-2026-03-14 decisions to decisions-archive.md - Appended PRD decomposition team update to 5 agent history files (Cyclops, Rogue, Jubilee, Beast, Colossus) - Deleted merged inbox file Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Session: 2026-03-16-dashboard-build-wave1 Requested by: Jeffrey T. Fritz Changes: - Merged 2 copilot directives from decisions/inbox/ into decisions.md - Directive 1: No reflection tool needed (use MSDN docs instead) - Directive 2: Playwright IS installed (HTML Fidelity unblocked) - Created session log for dashboard build Wave 1 launch - Deleted merged inbox files
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(dashboard): Wave 1 — health service, baselines, counting tests (#439) Component Health Dashboard foundation: - ComponentHealthService with hierarchy-walking property/event counter (§5.4) - File detection for tests, docs, and samples (§7.4) - Weighted scoring engine with missing-baseline handling (§4.1/§4.4) - AddComponentHealthDashboard() DI extension - reference-baselines.json: 61 components curated from MSDN docs - tracked-components.json: 61 component-to-WebForms type mappings - 39 counting verification tests (all passing) - PRD §3.2 updated: MSDN is sole baseline source (no reflection tool) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(dashboard): Wave 2 — dashboard page, docs, ComponentCatalog (#439) Dashboard UI and documentation: - /dashboard Razor page with category-grouped health tables - Worst-first sorting, color-coded scores (green/yellow/red) - Fraction display for props/events, binary indicators for tests/docs/samples - Category/status filtering, sort options, show/hide deferred toggle - Registered in ComponentCatalog under "Diagnostics" category - AddComponentHealthDashboard() wired in Program.cs - docs/dashboard.md: scoring model, reading guide, counting rules - Added to mkdocs.yml navigation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): merge decision inbox Session: 2026-03-16-scribe-merge Requested by: Scribe Changes: - Merged 5 decisions from inbox into decisions.md - Deleted inbox source files after merge * docs(ai-team): merge Forge review + Wave 2 results Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(dashboard): add status fields to tracked-components.json (#439) Substitution → Deferred, Xml → Deferred, ScriptManager → Stub. Added Xml to DefaultTrackedComponents fallback dictionary. Fixes Forge review finding #10. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * refactor(docs): update Executive Summary for clarity and structure * feat(dashboard): move health dashboard button to hero section Move Component Health Dashboard link from catalog grid to hero section as a button next to 'View on GitHub' and 'Get Started'. Remove the separate Diagnostics catalog entry from ComponentCatalog.cs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: L1 script bug fixes + 5 new test cases for #472 Fix 3 bugs in bwfc-migrate.ps1: - Scope Eval() regex in GetRouteUrl to avoid corrupting data-binding expressions - Use horizontal whitespace only in ContentWrapper regex to preserve indentation - Check for TItem= in ItemType fallback lookahead to prevent duplicates Add test cases TC11-TC15 covering all five #472 patterns: - TC11: Bool/enum/unit normalization - TC12: DataSourceID removal + data source control replacement - TC13: Response.Redirect -> NavigationManager.NavigateTo - TC14: Session[key] detection with migration guidance - TC15: ViewState[key] detection with field suggestions Extend Run-L1Tests.ps1 to verify code-behind (.razor.cs) output. Test suite: 7/10 (70%) -> 15/15 (100%), line accuracy: 94.3% -> 100% Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(#471): Replace GUID-based IDs with developer-provided ClientID CheckBox, RadioButton: Use ClientID directly for input id/label for attributes. When no ID is set, omit id/for (no GUID pollution). RadioButton: Keep GUID fallback only for radio group name attribute (required for mutual exclusion behavior), not for input id. RadioButtonList: GetInputId returns ClientID_N suffixes when ID is set, null when not set. Group name retains GUID fallback for radio behavior. FileUpload: Already correct - only renders id when ClientID is present. Updated 7 tests to match new behavior: without developer ID, no id/for attributes are rendered. Tests with developer ID verify exact ID values. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Update Cyclops history and decision for #471 GUID ID fix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Merged decisions #471 #472; 2105 tests pass Session: 2026-03-17-issues-471-472 Requested by: Jeffrey T. Fritz Changes: - Logged Cyclops #471/#472 fixes (GUID IDs, L1 script) - Logged Rogue GUID ID test coverage (11 bUnit tests) - Merged 4 inbox decisions to decisions.md - Deleted inbox files after merge - Appended team updates to Cyclops, Rogue, Colossus, Beast history.md - Created orchestration logs per agent - Created session log --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(squad): Merge HttpHandler decisions + session logs + agent updates Session: 2026-03-17T14-50-00Z-httphandler-impl Requested by: Jeff Fritz Changes: - Merged Forge's Architecture Proposal (56KB) and Cyclops's Implementation Decisions (5KB) from decisions/inbox/ to decisions.md - Created orchestration logs for Cyclops and Beast agent spawns - Created session log: 2026-03-17T14-50-00Z-httphandler-impl.md - Updated agent history files (cyclops, beast, rogue) with cross-team updates - Deleted 2 merged inbox files - decisions.md now ~655KB (deferred archival for next run) Team sync: HttpHandlerBase (7 files, 0 build errors) + Migrating .ashx Handlers docs (800 lines) both shipped. Rogue's test suite in progress. * feat: Add HttpHandlerBase for .ashx handler migration (#473) Implementation (7 files): - HttpHandlerBase: abstract base with ProcessRequestAsync + IsReusable - HttpHandlerContext/Request/Response/Server: adapter classes wrapping HttpContext - RequiresSessionStateAttribute: marker for session pre-load - HandlerEndpointExtensions: MapHandler<T> returning IEndpointConventionBuilder Tests (5 files, 94 tests passing): - HandlerEndpointExtensionTests, HttpHandlerContextTests - HttpHandlerRequestTests, HttpHandlerResponseTests, HttpHandlerServerTests Documentation: - MigratingAshxHandlers.md: 800-line migration guide with API mapping + examples - mkdocs.yml nav entry added Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): Session log + orchestration log for Rogue test validation Session: 2026-03-17T15-26-00Z-httphandler-validation Requested by: Orchestrator (continuation) Changes: - Orchestration log for Rogue's handler test validation (94 tests passing, 1 fix applied) - Session log documenting validation completion and verification - Cross-agent update appended to Rogue history: implementation validation done - Cross-agent update appended to Cyclops history: handler tests verified Cyclops' implementation * fix: Remove client-side demo from Build Demo Sites workflow The AfterBlazorClientSide (WebAssembly) project is not being deployed anywhere. Its build was failing with NETSDK1082 (no runtime pack for browser-wasm on .NET 10). Remove the restore, publish, and artifact upload steps for the client-side demo. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
CodeQL found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
Merged upstream/main into dev to resolve merge conflicts in PR #475. Conflicts were in .ai-team/ history files, .squad/ state files, BlazorMeetsWebForms.sln, and dev-docs analysis files. All append-only files preserve content from both branches. Source code conflicts in WebFormsPageBase, DataBoundComponent, ListView, FormView, ButtonBase, LoginView, SelectHandler, and ServiceCollectionExtensions resolved to keep dev features while incorporating main's additional overloads and event aliases. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Session: 2026-03-17-merge-resolution Orchestration: Forge (Lead) Changes: - Orchestration log: 2026-03-17T16-03-00Z-forge.md - Session log: 2026-03-17T16-03-00Z-merge-resolution.md - ~370 conflicts resolved across .ai-team/, .squad/, .sln, dev-docs, and source files - Build verified clean - Pushed to upstream/dev and origin/dev
Fixed CS1503 (EventCallback method group) in ImageButton/Index.razor, GridView/Selection.razor and CS0103 (missing method) in FormView/Simple.razor, FormView/Edit.razor. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Session: 2026-03-17T16-18-00Z-sample-fixes Requested by: Scribe Changes: - Logged Cyclops spawn fixing 4 sample compilation errors - Recorded ImageButton and GridView EventCallback signature fixes - Documented FormView PageIndexChanging method stubs - Verified build clean and CI re-running
…ents Repeater now has 6 EventCallback parameters (ItemCommand, ItemCreated, ItemDataBound + On* variants) and GridView has 30 events after row editing/deleting/updating operations were added. Updated test assertions to reflect the actual component state. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Six sample pages referenced a <Nav /> component that doesn't exist in their folder (ChangePassword, CreateUserWizard, DataPager, Localize, LoginView, MultiView). This caused RZ10012 warnings and 500 errors when navigating to LoginView in Playwright tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
AuthorizeView requires CascadingAuthenticationState to be registered. Without it, the LoginView sample page crashes with a 500 error because it can't resolve the authentication state cascading parameter. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What's New in v0.17.0
🚀 New Features
Ajax Control Toolkit Components
Launched the new
BlazorAjaxToolkitComponentslibrary with comprehensive ASP.NET Ajax Control Toolkit support (#460). Implemented foundational extenders includingConfirmButtonExtenderandFilteredTextBoxExtender(#462), then expanded to a complete library with 14+ additional extenders (#463, #468). These extenders enable drop-in replacements for common client-side behaviors in migrated applications.Core Components & Handlers
Added
FormViewandModelErrorMessagecomponents (#410) to expand form handling capabilities. IntroducedHttpHandlerBasefor migrating.ashxcustom HTTP handlers (#474), enabling a complete migration path for handler-based functionality.Component Health Dashboard
New component health dashboard provides visibility into component coverage, parity status, and migration readiness (#470).
Component Parity & Base Class Improvements
Enhanced base component classes with critical fixes and feature completions (#428), improving overall component stability and consistency.
🔧 Bug Fixes
OnClickhandler execution and preventedTextBoxvalue loss (fix: await async OnClick handlers and prevent TextBox value loss #418)UiStyledebug spam and cleaned up benchmark comparison screenshots (fix: post-benchmark cleanup UiStyle debug spam, comparison screenshots #417)ListViewCRUD operation issues (feat: ListView CRUD fixes + 3-skill migration toolkit #415)🛠️ Migration Toolkit
Comprehensive Migration Pipeline
Established a complete WingtipToys migration pipeline supporting full-stack application migration including EF Core context migration, shopping cart, checkout flows, admin interfaces, and identity systems (#413, #414). Achieved 25/25 passing integration tests with SSR enabled by default (#422).
Enhanced Migration Intelligence
Implemented L1 provider detection and
SelectMethodenforcement for data-binding scenarios (#425). Incorporated findings from ContosoUniversity Run 19 and Run 22 analysis into migration script improvements (#426).Toolkit Enhancements
Extended the 3-skill migration toolkit with integration test coverage and documentation reorganization (#419). Verified migration accuracy through the WingtipToys benchmark run (#416).
📊 Performance & Benchmarks
Performance Benchmark Suite
New comprehensive performance benchmark suite comparing .NET Framework and .NET 10 Blazor implementations (#464). Provides actionable metrics for post-migration optimization decisions.
L3 Post-Migration Optimization Skill
Added L3 post-migration performance optimization skill (#467) to help developers identify and resolve performance bottlenecks in migrated applications.
📝 Documentation
FormViewcomponents (M21: Fix ListView EditItemTemplate not rendering on EditIndex change (#406) #410)Migration Path: v0.17.0 delivers end-to-end Web Forms to Blazor migration capabilities with validated real-world migration pipelines, expanded component coverage, and performance visibility.