Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
8b527d2
plan: DepartmentPortal ASCX sample milestone
csharpfritz Mar 21, 2026
9520ddc
docs(ai-team): Merge decisions from Forge custom controls planning se…
csharpfritz Mar 21, 2026
5b7c123
plan: add DepartmentBreadcrumb (bare Control base) to custom control…
csharpfritz Mar 21, 2026
7fb6131
feat: DepartmentPortal Web Forms sample Phase 1-2 complete
csharpfritz Mar 21, 2026
ebeee3e
feat: DepartmentPortal Phase 3-4 custom controls + all pages
csharpfritz Mar 22, 2026
f8b3f7d
fix: IIS Express runtime rename App_Code, CodeBehind, fix property n…
csharpfritz Mar 22, 2026
0b230a2
docs(ai-team): DepartmentPortal phases 3-5 completion
csharpfritz Mar 22, 2026
0b6098b
fix: remove duplicate AssemblyVersion attrs conflicting with NBGV
csharpfritz Mar 22, 2026
3b7ff30
Fix runtime bugs: login status, search, SectionPanel templates, data …
csharpfritz Mar 22, 2026
58cdd5b
Fix Employees search: replace FindControl with protected fields, use …
csharpfritz Mar 22, 2026
59c3d37
docs(ai-team): Orchestration logs, session log, and decision merge fo…
csharpfritz Mar 22, 2026
01cb621
fix: EmployeeDataGrid renders real employee data, remove duplicate Em…
csharpfritz Mar 22, 2026
9d0f032
feat: scaffold AfterDepartmentPortal Blazor SSR project + migration a…
csharpfritz Mar 22, 2026
5be8036
docs(squad): Log migration docs + upstream issues session
csharpfritz Mar 22, 2026
48dd5fb
feat: P1-P5 Custom Controls drop-in replacement framework
csharpfritz Mar 22, 2026
cae7a5d
docs(ai-team): P1-P5 Custom Controls Framework Session Completion
csharpfritz Mar 22, 2026
bd3a43a
docs(dev-docs): P1-P5 Custom Controls framework proposal
csharpfritz Mar 22, 2026
c845f16
docs: add XML summary to TemplatedWebControl.ChildContent
csharpfritz Mar 22, 2026
5a32d9e
docs(dev-docs): rewrite Section 6 shimming compatibility evidence
csharpfritz Mar 22, 2026
46b7b3f
docs(ai-team): Merge decisions inbox and remove inbox files
csharpfritz Mar 22, 2026
c893281
feat: add Focus() method to BaseWebFormsComponent with JS interop
csharpfritz Mar 22, 2026
6b4f909
chore: squad state updates for Focus() implementation
csharpfritz Mar 22, 2026
50ecdd2
feat: migrate all 7 DepartmentPortal custom controls to Blazor using …
csharpfritz Mar 22, 2026
ebe9947
feat: add 4 new BWFC analyzers for custom control migration patterns
csharpfritz Mar 22, 2026
743a39b
chore: squad state updates for migration and analyzer work
csharpfritz Mar 22, 2026
0eed65b
docs(ai-team): Log session & merge decisions (Cyclops + Colossus spawn)
csharpfritz Mar 22, 2026
4334973
Update BWFC021 FindControl analyzer to skip BaseWebFormsComponent types
csharpfritz Mar 22, 2026
805e7ef
refactor: rename FindControlRecursive to FindControl for drop-in comp…
csharpfritz Mar 22, 2026
b2ee1a3
feat(samples): make AfterDepartmentPortal runnable with CSS and home …
csharpfritz Mar 22, 2026
56b39dd
fix(samples): swap Home/Dashboard routes so all nav links resolve
csharpfritz Mar 22, 2026
98ff298
docs: add NuGet static asset migration strategy proposal
csharpfritz Mar 22, 2026
b843a6e
chore: commit squad state files (decisions inbox, agent history)
csharpfritz Mar 22, 2026
f53f023
ci: re-trigger checks for PR #489
csharpfritz Mar 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 70 additions & 1 deletion .squad/agents/beast/history.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Project Context
# Project Context

- **Owner:** Jeffrey T. Fritz
- **Project:** BlazorWebFormsComponents — Blazor components emulating ASP.NET Web Forms controls for migration
Expand All @@ -11,6 +11,53 @@

<!-- ⚠ Summarized 2026-02-27 by Scribe — covers M1–M16 -->

### Issue #: Comprehensive Migration Documentation (User Controls, FindControl, Custom Control Base Classes)

**Status:** DELIVERED

**Session (2026-03-17 by Beast):**
- Created/Updated 3 comprehensive migration guides covering 40+ KB of documentation
- **docs/Migration/User-Controls.md** (Updated from TODO) 9 KB, ~300 lines
- Web Forms ASCX structure Blazor .razor component conversion
- Step-by-step migration: markup, properties, events, lifecycle, data binding, FindControl replacement
- Complete EmployeeList example before/after
- Common pitfalls + solutions (parameter binding, element access, nested components, context loss)
- BWFC component integration recommendations

- **docs/Migration/FindControl-Migration.md** (New) 16 KB, ~550 lines
- Explains FindControl purpose in Web Forms control tree
- Deep dive: naming container boundaries (master pages, content placeholders, templates)
- Real examples from DepartmentPortal (master message control, SectionPanel with repeater)
- 5 Blazor patterns to replace FindControl: @ref, parameters, cascading parameters, EventCallback, DI
- BWFC's FindControl limitations + when to use it
- Complete migration examples table (Web Forms pattern Blazor equivalent)
- Common pitfalls (assuming @ref works like FindControl, null checks, state mutation)

- **docs/Migration/CustomControl-BaseClasses.md** (New) 23 KB, ~800 lines
- Inventory of current BWFC base classes: BaseWebFormsComponent, BaseStyledComponent, DataBoundComponent<T>, WebControl, CompositeControl, DataBoundControl, HtmlTextWriter
- Web Forms BWFC mapping table for all base class equivalents
- **5 Planned Improvements (P1P5) with full specification:**
- **P1: DataBoundWebControl<T>** Bridges DataBoundControl + HtmlTextWriter rendering. EmployeeDataGrid use case.
- **P2: TagKey + AddAttributesToRender** Auto-renders outer tag with attributes. StarRating, NotificationBell use cases. Simplifies 80% of migrations.
- **P3: HtmlTextWriter Enum Expansion** HTML5 tags (Nav, Section, Article, etc.), ARIA/data attributes, modern CSS (flexbox, grid, transforms). Modern markup patterns.
- **P4: CompositeControl Mixed Children** Support WebControl + markup + Blazor components. EmployeeCard complexity.
- **P5: ITemplate RenderFragment Bridge** Web Forms Blazor template pattern translation. SectionPanel use case.
- Each P1P5 includes: current state, what's missing, DepartmentPortal example, proposed API
- Implementation priority order: P2 P1 P3 P4 P5 (with dependency matrix)

- Updated mkdocs.yml navigation:
- Added "Custom Control Base Classes: Migration/CustomControl-BaseClasses.md" (after Custom Controls)
- Added "FindControl Migration: Migration/FindControl-Migration.md" (after User Controls)

**Key Documentation Patterns:**
- Followed established Beast style from Custom-Controls.md + MasterPages.md (before/after code, tables, "See Also" links)
- DepartmentPortal as primary reference for real-world examples (EmployeeList, SectionPanel, StarRating, etc.)
- Web Forms Blazor mapping tables for quick translation reference
- Pitfall sections with solutions for each guide
- "See Also" cross-references between related guides



<!-- ⚠ Summarized 2026-03-06 by Scribe — older entries archived -->

### Archived Sessions
Expand Down Expand Up @@ -563,3 +610,25 @@ Updated `.squad/skills/migration-standards/SKILL.md` to add new section at end:

**Team update (2026-03-20):** Analyzer architecture guide (579 lines) + expanded Analyzers.md (+363 lines). Deprecation Guidance docs (#438, 32 KB). BaseValidator/BaseCompareValidator base class docs. MkDocs strict build clean. PR #487 opened on upstream. decided by Beast



### Issue #495: P1-P5 Custom Controls Framework Developer Documentation

**Status:** DELIVERED

**Session (2026-03-22 by Beast):**
- Created `dev-docs/proposals/p1-p5-custom-controls-framework.md` (~33 KB, ~500 lines)
- Executive summary, class hierarchy diagram, full API reference for 9 classes/interfaces
- Design decisions (TagKey vs strings, placeholder templating, generic DataSource, Literal alias)
- 5 migration patterns with before/after code examples
- Honest "can't be shimmed" table (ViewState, PostBack, DataSourceID, etc.)
- DepartmentPortal validation (5/7 drop-in, 2 manual rewrite)
- Test coverage map (40 new tests, 16 test components)
- Upstream issues table linking #490-#496
- Updated `dev-docs/README.md` with proposals/ table entry

**Key learnings:**
- Reading actual source to verify API surfaces is critical task description said 48 new tests but actual count is 40 in 4 new test files (plus 23 pre-existing across 3 files)
- Enum counts from source: HtmlTextWriterTag=78, HtmlTextWriterAttribute=55, HtmlTextWriterStyle=77
- `DataBoundWebControl<T>` design around Blazor's case-insensitive parameter matching is a subtle but important constraint worth documenting prominently
- The placeholder approach (`<!--BWFC_TPL_N-->`) for template interleaving is novel and deserves detailed explanation for future contributors
19 changes: 19 additions & 0 deletions .squad/agents/colossus/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,25 @@ Added 5 smoke tests (Timer, UpdatePanel, UpdateProgress, ScriptManager, Substitu

📌 Team update (2026-03-14): Students LEFT JOIN fix completed by Cyclops — replaced SelectMany (INNER JOIN) with Students.Include(Enrollments) loop. Students without enrollments appear with Count=0, Date=DateTime.Today. Colossus verified Playwright test timing fixes already in place from previous session. All tests passing. Commit d3dc610f.

## Session: 2026-03-22 — Analyzer Expansion BWFC020-023

**Task:** Expand BWFC Analyzers with 4 new custom control migration pattern detectors.

**Created:**
- BWFC020 (ViewStatePropertyPattern): Detects `get { return (T)ViewState["key"]; } set { ViewState["key"] = value; }` properties. Info severity. Code fix converts to `[Parameter] public T Name { get; set; }`.
- BWFC021 (FindControlUsage): Detects `FindControl("id")` calls. Warning severity. Code fix replaces with `FindControlRecursive("id")`.
- BWFC022 (PageClientScriptUsage): Detects `Page.ClientScript.*` usage. Warning severity. No code fix.
- BWFC023 (IPostBackEventHandlerUsage): Detects classes implementing `IPostBackEventHandler`. Warning severity. No code fix.

**Files created:** 6 analyzer source files, 4 test files. Updated `AnalyzerReleases.Unshipped.md` and `AllAnalyzersIntegrationTests.cs`.

**Verification:** All 139 tests pass (was 130 before). Build clean.

## Learnings

- Text-based (`SourceText.Replace`) code fixes are fragile for property replacement — FullSpan includes trivia that complicates newline/indentation. Prefer the syntax tree approach: use `property.WithAccessorList()` + `AddAttributeLists()` without `NormalizeWhitespace()`. Only use `NormalizeWhitespace()` when you can also fully control leading/trailing trivia on all lines.
- New "Migration" category introduced for BWFC020-023. Updated `AllAnalyzers_HaveValidCategory` integration test to accept both "Usage" and "Migration" categories.


**Summary:** 40 tests total — 11 passed, 29 failed, 0 skipped (33.5s duration)

Expand Down
27 changes: 26 additions & 1 deletion .squad/agents/cyclops/history.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Project Context
# Project Context

- **Owner:** Jeffrey T. Fritz
- **Project:** BlazorWebFormsComponents Blazor components emulating ASP.NET Web Forms controls for migration
Expand Down Expand Up @@ -500,3 +500,28 @@ Team update: ModalPopupExtender and CollapsiblePanelExtender implemented by Cycl
### CI Workflow: Analyzer Tests Added (2026-03-20)

**Summary:** Updated .github/workflows/build.yml to restore, build, run, upload, and publish analyzer test results alongside the existing unit tests. Also replaced the squad-ci.yml placeholder with real dotnet restore/build/test commands covering both test suites, including setup-dotnet for .NET 10. YAML validated with Python yaml parser.

### Focus() Method on BaseWebFormsComponent (2026-03-22)

**Summary:** Added public virtual void Focus() to BaseWebFormsComponent matching the ASP.NET Web Forms Control.Focus() API. Uses fire-and-forget JS interop (_ = JsRuntime.InvokeVoidAsync("bwfc.Page.Focus", ClientID)) same discard pattern validators use. Null-guards JsRuntime for SSR pre-render safety. Added wfc.Page.Focus(elementId) JS function to both Basepage.js (IIFE global) and Basepage.module.js (ES module export + window binding). Build: 0 errors. CustomControl tests: 63/63 pass.

### DepartmentPortal Custom Controls Migration (2026-03-22)

**Summary:** Migrated all 7 custom controls from `samples/DepartmentPortal/Code/Controls/` to Blazor components in `samples/AfterDepartmentPortal/Components/Controls/`. Each control inherits from the appropriate BWFC CustomControls base class (WebControl, DataBoundWebControl, or TemplatedWebControl).

**Controls migrated:**
- **StarRating** (WebControl) ViewState[Parameter], TagKey=Span, star rendering with color params
- **NotificationBell** (WebControl) TagKey=Div, EventCallback<NotificationEventArgs>, drawer rendering
- **EmployeeCard** (WebControl) CompositeControlflat RenderContents, photo/info/details link
- **EmployeeDataGrid** (DataBoundWebControl) PerformDataBinding override, paging/sorting/search
- **DepartmentBreadcrumb** (WebControl) IPostBackEventHandler removed, EventCallback<BreadcrumbEventArgs>
- **PollQuestion** (WebControl) IPostBackEventHandler removed, EventCallback<PollVoteEventArgs>, radio buttons
- **SectionPanel** (TemplatedWebControl) ITemplateRenderFragment, RenderTemplate() helper for header/content/footer

**Also created:** BreadcrumbEventArgs.cs, NotificationEventArgs.cs, PollVoteEventArgs.cs

**Pages updated:** Dashboard.razor (SectionPanel, PollQuestion, NotificationBell), Employees.razor (EmployeeDataGrid with sample data)

**Key patterns applied:** var everywhere (IDE0007), WebUtility.HtmlEncode instead of HttpUtility, Blazor route URLs instead of .aspx, `new()` target-typed syntax.

**Build:** 0 errors, 0 warnings (excluding pre-existing NU1510 from upstream deps).
Loading
Loading