Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions .ai-team/agents/bishop/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,12 @@
Team update (2026-03-06): Forge produced 8 script improvement recommendations (S1-S8) assigned to Bishop S1: @inherits WebFormsPageBase in _Imports.razor, S2: AddHttpContextAccessor in Program.cs, S3: : Page : WebFormsPageBase, S4: @using Enums, S5: Page_Load rename, S6: Cookie auth scaffold, S7: src~/action~ URL conversion, S8: Stub base class. Recommended Cycle 1: S1+S2+S3+S4 decided by Forge
Team update (2026-03-06): LoginView is native BWFC migration script must stop converting to AuthorizeView. Strip asp: prefix only, preserve template names decided by Jeffrey T. Fritz, Forge
Team update (2026-03-06): WebFormsPageBase is the canonical base class for all migrated pages (not ComponentBase). All agents must use WebFormsPageBase decided by Jeffrey T. Fritz

### RouteData → [Parameter] Bug Fix (Bishop)

- **Bug:** `[RouteData]` on Web Forms method parameters was replaced with `[Parameter]` inline — but `[Parameter]` targets Properties only (CS0592). Also, using `//` TODO comments inline risked absorbing the closing `)` of method signatures.
- **Root cause:** `[RouteData]` is a Web Forms model-binding attribute for method parameters. `[Parameter]` is a Blazor component attribute valid only on properties. No inline Blazor equivalent exists for method parameter route binding.
- **Fix:** Changed regex to strip `[RouteData]` entirely from method parameters (not replace with `[Parameter]`). A `/* TODO */` block comment is placed on the preceding line directing Layer 2 to promote the value to a `[Parameter]` property on the component class. Block comment (`/* */`) used instead of line comment (`//`) to avoid absorbing trailing code.
- **Regex change:** `([ \t]*)\[RouteData\]` → `([ \t]*)\[RouteData\]\s*` (also consumes trailing whitespace to keep formatting clean).
- **L1 tests:** All 15 pass (100% pass rate, 100% line accuracy).
- **Key pattern:** When a Web Forms attribute has no inline Blazor equivalent, strip it and leave a TODO for Layer 2 — never substitute an attribute that targets a different declaration type.
36 changes: 36 additions & 0 deletions .squad/decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -9424,6 +9424,42 @@ Seven new files in `src/BlazorWebFormsComponents/Handlers/` implementing the cor
*— Cyclops, Component Dev*


### 2026-03-18: ID Rendering Pattern for Data Controls — Approved

**By:** Forge (Lead / Web Forms Reviewer)

**Date:** 2026-03-18

**Status:** APPROVED

## Cyclops — id="@ClientID" on Data Controls

**Verdict: APPROVED**

Components modified: GridView, DropDownList, FormView, DataList (table + flow layouts), DataGrid.

### Why this is correct

1. **Pattern consistency** — Uses the same id="@ClientID" binding as Button, Label, Panel, DetailsView, HiddenField. No deviation.
2. **Null safety** — ComponentIdGenerator.GetClientID() returns
ull when no ID parameter is set. Blazor omits null-valued attributes entirely, so no empty id="" ever renders.
3. **Web Forms fidelity** — Original Web Forms data controls always render their ClientID as the HTML id attribute. This was a gap in the Blazor implementation.
4. **Build clean** — 0 errors, same 101 pre-existing warnings.

## Bishop — RouteData Script Fix

**Verdict: APPROVED**

### Why this is correct

1. **Root cause addressed** — // TODO line comment before [Parameter] consumed trailing content (closing parens). Block comment /* TODO */ is self-terminating and cannot absorb adjacent syntax.
2. **Correct semantic change** — [RouteData] is a Web Forms model-binding attribute for method parameters. [Parameter] targets properties, not method params. Placing [Parameter] inline would cause CS0592. Stripping the attribute and leaving a TODO for L2 is the right approach.
3. **Pattern consistency** — /* TODO */ block comments already used in the same script for NavigationManager.NavigateTo conversions (lines 1772, 1781).
4. **L1 tests** — 15/15 pass, 100% line accuracy.

## Convention Established

The canonical pattern for rendering HTML id on Blazor components is id="@ClientID" as a direct attribute binding. No conditional wrapper needed — Blazor's null-attribute omission handles the no-ID case. This applies to all current and future component implementations.

### 2026-03-19T02:50Z: Defer AJAX controls from Component Health Dashboard
**By:** Squad (Coordinator), on behalf of Jeffrey T. Fritz
Expand Down
29 changes: 29 additions & 0 deletions .squad/decisions/inbox/bishop-routedata-fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Decision: Strip [RouteData] instead of replacing with [Parameter]

**Date:** 2026-03-08
**Author:** Bishop
**Status:** Implemented

## Context

Run 15 revealed that the `[RouteData]` → `[Parameter]` conversion in `bwfc-migrate.ps1` caused build failures (`CS0592`) in `ProductDetails.razor.cs` and `ProductList.razor.cs`. The `[Parameter]` attribute targets `Property` declarations only, but `[RouteData]` appears on **method parameters** in Web Forms model-binding signatures.

## Decision

**Strip `[RouteData]` from method parameters entirely.** Do not replace with `[Parameter]` inline.

- A `/* TODO */` block comment is placed above the parameter directing Layer 2 to create a `[Parameter]` property on the component class.
- Block comment (`/* */`) is used instead of line comment (`//`) to prevent absorbing the closing `)` of the method signature.

## Rationale

- `[RouteData]` is a Web Forms model-binding attribute with no inline Blazor equivalent
- `[Parameter]` cannot decorate method parameters — it targets properties only
- Layer 2 is the right place to refactor the method signature (promote parameters to component properties)
- Block comments are safe inside method parameter lists; line comments risk absorbing trailing syntax

## Impact

- **bwfc-migrate.ps1**: RouteData regex updated (lines ~1724-1732)
- **All L1 tests pass**: 15/15, 100% line accuracy
- **Layer 2 agents** should look for `/* TODO: RouteData parameter */` comments as signals to create `[Parameter]` properties
59 changes: 59 additions & 0 deletions .squad/orchestration-log/2026-03-18T15-48-15Z-beast.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Orchestration Log: Beast (Technical Writer)
**Timestamp:** 2026-03-18T15:48:15Z
**Agent:** Beast (Technical Writer)
**Mode:** Background
**Task:** Create style sub-component documentation

## Outcome
**SUCCESS** — Created docs/UtilityFeatures/StylingComponents.md (14.5 KB), added to mkdocs.yml nav.

## What Was Done
1. Analyzed component audit findings: 66 style sub-components with zero standalone documentation
2. Identified knowledge gap: Developers migrating from Web Forms don't discover Blazor equivalents without docs
- GridView HeaderStyle → GridViewHeaderStyle
- DetailsView RowStyle → DetailsViewRowStyle
- Calendar DayStyle → CalendarDayStyle
- etc.
3. Created comprehensive documentation covering:
- **Conceptual foundation:** Cascading parameter pattern (5-step flow)
- **Complete parameter catalog:** BackColor, ForeColor, Font-*, HorizontalAlign, VerticalAlign, Wrap, BorderColor, BorderStyle, BorderWidth, Width, Height, CssClass, AdditionalAttributes
- **Inventory of all 66 components:** Organized by parent control type
- **Before/after examples:** Web Forms property model → Blazor component model (5 real-world examples)
- **Migration path:** How to translate existing Web Forms styles
- **Architecture explanation:** UiStyle/UiTableItemStyle base classes and Style object rendering
- **Best practices & troubleshooting:** Common issues and solutions
4. Updated mkdocs.yml nav (added Styling Components entry under Utility Features)

## Design Decisions Made
1. **Placement:** Utility Features (not per-control docs) — cross-cutting pattern, avoids 48x duplication
2. **Parameter Parity:** Web Forms names used throughout (BackColor, Font-Bold, etc.) — enables copy-paste migration
3. **Completeness:** All 66 components listed — developers don't need to read source code
4. **Format:** Before/after examples — matches Web Forms developers' mental model

## Files Created/Modified
- Created: `docs/UtilityFeatures/StylingComponents.md` (14,429 bytes, ~400 lines)
- Modified: `mkdocs.yml` (added nav entry under Utility Features)
- Modified: `.squad/agents/beast/history.md` (learning log)

## Content Summary
- **Section 1:** How Style Sub-Components Work (cascading parameter flow)
- **Section 2:** Complete Parameter Catalog (organized by category)
- **Section 3:** Real-World Examples (5 progressively complex examples)
- **Section 4:** Style Object Architecture (UiStyle/UiTableItemStyle for debugging)

## Impact
- Closes critical documentation gap for all 66 style sub-components identified in audit
- Enables complete, visually-consistent Web Forms → Blazor migrations
- Developers can now find any style component via web search or nav
- Pattern-level explanation centralized (no 66x duplication)

## Related Components
- GridView, DetailsView, FormView, DataList, DataGrid (extended with ID rendering by Cyclops)
- Calendar, TreeView, Menu, Login controls (documented for first time)
- All style sub-components now discoverable

## Quality Assurance
- All 66 components listed with parent control type
- Web Forms parameter names verified for parity
- Examples tested against documentation accuracy
- Navigation integration verified in mkdocs.yml
35 changes: 35 additions & 0 deletions .squad/orchestration-log/2026-03-18T15-48-15Z-bishop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Orchestration Log: Bishop (Migration Tooling Dev)
**Timestamp:** 2026-03-18T15:48:15Z
**Agent:** Bishop (Migration Tooling Dev)
**Mode:** Background
**Task:** Fix RouteData→Parameter script bug in bwfc-migrate.ps1

## Outcome
**SUCCESS** — Fixed by stripping [RouteData] and using /* TODO */ block comment instead of [Parameter] on method params (CS0592). All 15 L1 tests pass.

## What Was Done
1. Identified the root cause: `[Parameter]` attribute targets properties only, but `[RouteData]` appears on method parameters in Web Forms model-binding signatures
2. Implemented solution:
- Strip `[RouteData]` from method parameters entirely
- Place `/* TODO */` block comment above the parameter directing Layer 2 to create a `[Parameter]` property on the component class
- Used block comment (`/* */`) instead of line comment (`//`) to prevent absorbing the closing `)` of the method signature
3. Updated bwfc-migrate.ps1 regex (lines ~1724-1732)
4. Validated against Run 15 test cases: 15/15 passed, 100% line accuracy

## Decision Made
**Strip [RouteData] from method parameters entirely.** Do not replace with [Parameter] inline. Layer 2 is the right place to refactor the method signature (promote parameters to component properties).

## Files Modified
- `migration-toolkit/scripts/bwfc-migrate.ps1` (RouteData regex)

## Test Results
- L1 tests: 15/15 PASS (100%)
- Build: SUCCESS
- Line accuracy: 100%

## Impact
Layer 2 agents should now look for `/* TODO: RouteData parameter */` comments as signals to create `[Parameter]` properties. This unblocks downstream component migration.

## Related Decisions
- Affects Cyclops's data control components (ID rendering) which depend on clean script execution
- Layer 2 agents: Use `/* TODO: RouteData parameter */` as refactoring signals
44 changes: 44 additions & 0 deletions .squad/orchestration-log/2026-03-18T15-48-15Z-cyclops.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Orchestration Log: Cyclops (Component Dev)
**Timestamp:** 2026-03-18T15:48:15Z
**Agent:** Cyclops (Component Dev)
**Mode:** Background
**Task:** Extend ID rendering to data controls (GridView, DropDownList, FormView, DataList, DataGrid)

## Outcome
**SUCCESS** — 5 controls updated, DetailsView and HiddenField already had it. Build clean.

## What Was Done
1. Audited data controls for ID rendering support
2. Found 7 WingtipToys-active controls missing ID rendering
3. On inspection, 2 (DetailsView, HiddenField) already had it
4. Added `id="@ClientID"` to outermost HTML element of:
- GridView
- DropDownList
- FormView
- DataList (both TableRepeatLayout and FlowRepeatLayout modes)
- DataGrid
5. Followed established pattern used by Button, TextBox, Label, Panel, and CheckBox

## Decision Made
**ID Rendering Extended to All Data Controls.** Added `id="@ClientID"` to the outermost HTML element of GridView, DropDownList, FormView, DataList, and DataGrid. ClientID is inherited from BaseWebFormsComponent and delegates to ComponentIdGenerator.GetClientID(this). Blazor automatically omits the id attribute when ClientID is null.

## Files Modified
- `src/Components/GridView.razor` (added id)
- `src/Components/DropDownList.razor` (added id)
- `src/Components/FormView.razor` (added id)
- `src/Components/DataList.razor` (added id on both layout modes)
- `src/Components/DataGrid.razor` (added id)

## Build Results
- Build: SUCCESS
- No compilation errors
- All existing tests pass

## Impact
- Total WingtipToys-active controls with ID support: 14 (was 9)
- All data-bound controls now support custom ID assignment
- Maintains consistency with existing Web Forms behavior

## Dependent Work
- Builds on Bishop's clean script execution (no build failures from prior fixes)
- Beast's style documentation covers these controls' style components
Loading
Loading