Skip to content

Commit 2443b6e

Browse files
csharpfritzCopilot
andcommitted
docs(ai-team): log feature audit session, merge 8 decisions
Session: 2026-02-23-feature-audit Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-02-23-feature-audit.md - Merged 8 decisions from inbox into decisions.md - Consolidated overlapping decisions (AccessKey/ToolTip, Chart architecture, DataBoundComponent gap) - Propagated updates to 6 agent history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 254fce6 commit 2443b6e

12 files changed

Lines changed: 222 additions & 123 deletions

File tree

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,15 @@
3838
- **Child component docs pattern:** Chart introduces a multi-component documentation pattern (Chart, ChartSeries, ChartArea, ChartLegend, ChartTitle) with separate parameter tables for each. This nested-component doc approach should be used for any future components with required child components.
3939
- **Chart Type Gallery added:** Added a "Chart Type Gallery" section to `docs/DataControls/Chart.md` between "Chart Palettes" and "Web Forms Features NOT Supported". Contains 8 subsections (Column, Line, Bar, Pie, Doughnut, Area, Scatter, Stacked Column) each with a screenshot, `SeriesChartType` enum value, and 1-2 sentence usage guidance. Includes `!!! warning` admonitions on Pie and Doughnut for the Phase 1 palette limitation (single series color instead of per-segment colors).
4040
- **Chart image path convention:** Chart screenshots live at `docs/images/chart/chart-{type}.png` (lowercase, hyphenated). Referenced from Chart.md using relative paths: `../images/chart/chart-{type}.png`. This `docs/images/{component}/` pattern should be used for any future component screenshots.
41-
41+
- **AccessKey and ToolTip missing across all WebControl-based components:** Neither `BaseWebFormsComponent` nor `BaseStyledComponent` defines `AccessKey` or `ToolTip` parameters. Every control inheriting from WebControl in Web Forms has these, so they are universally 🔴 Missing. Adding them to `BaseStyledComponent` would fix all styled controls in one shot.
42+
- **Label uses wrong base class for style support:** `Label` inherits `BaseWebFormsComponent` (no style) instead of `BaseStyledComponent`. Web Forms `Label` inherits from `WebControl` and supports all style properties (CssClass, BackColor, Font, etc.). This is the biggest gap for Label — 11 style properties are missing.
43+
- **ListControl-derived components share common gaps:** ListBox, RadioButtonList (and CheckBoxList, DropDownList) all have the same missing properties: `AppendDataBoundItems`, `DataTextFormatString`, `CausesValidation`, `ValidationGroup`, and `TextChanged` event. These could be fixed once in a shared base.
44+
- **Literal/Localize/PlaceHolder/View/MultiView are near-complete:** Controls inheriting from `Control` (not `WebControl`) have no style properties by design. The Blazor implementations are essentially feature-complete — matching all relevant properties and events.
45+
- **Substitution and Xml are permanently deferral candidates:** Both controls are tightly coupled to server-side ASP.NET infrastructure (output caching and XSLT transformation respectively). Neither concept maps to Blazor's component model. Recommend documenting migration alternatives rather than implementing.
46+
- **Style property computed but not directly settable:** Across all `BaseStyledComponent`-derived controls, the `Style` property is computed from BackColor/ForeColor/Font/etc. via `IStyle.ToStyle()`. Web Forms allowed direct `Style["property"] = "value"` assignment. This pattern difference is consistent but worth noting in migration guides.
47+
- **Panel is the most feature-complete styled control:** Panel implements 6 out of 7 specific Web Forms properties (only BackImageUrl missing). Combined with full BaseStyledComponent inheritance, it has the highest coverage of any editor control.
48+
49+
50+
Team update (2026-02-23): AccessKey/ToolTip must be added to BaseStyledComponent decided by Beast, Cyclops
51+
Team update (2026-02-23): Chart implementation architecture consolidated (10 decisions) decided by Cyclops, Forge
52+
Team update (2026-02-23): DetailsView/PasswordRecovery branch (sprint3) must be merged forward decided by Forge

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,6 @@
4848
- Chart pages use JS interop (`ChartJsInterop.cs`) — console errors are expected if Chart.js CDN/bundle isn't fully loaded; page errors are not
4949
- Pre-existing test suite has 97 failures on non-Chart tests due to ASP.NET structured log console errors (`[timestamp] Error:`) being caught by `Assert.Empty(consoleErrors)` — these are unrelated to Chart work
5050

51+
52+
Team update (2026-02-23): DetailsView/PasswordRecovery branch (sprint3) must be merged forward decided by Forge
53+
Team update (2026-02-23): AccessKey/ToolTip must be added to BaseStyledComponent decided by Beast, Cyclops

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,20 @@
5858
- **JS interop pattern for Chart:** Uses `IJSRuntime` directly (not the shared `BlazorWebFormsJsInterop` service) because Chart.js interop is chart-specific, not page-level. `ChartJsInterop` lazily imports the ES module and exposes `CreateChartAsync`, `UpdateChartAsync`, `DestroyChartAsync`.
5959
- **BaseStyledComponent already has Width/Height as Unit type:** Chart adds `ChartWidth`/`ChartHeight` as string parameters for CSS dimension styling on the wrapper div, avoiding conflict with the base class Unit properties.
6060
- **Instance-based canvas IDs:** Uses `Guid.NewGuid()` (truncated to 8 chars) for canvas element IDs, consistent with the ImageMap pattern that avoids static counters.
61+
- **Feature audit — Editor Controls A–I (13 controls):** Created audit docs in `planning-docs/` comparing Web Forms API vs Blazor implementation for AdRotator, BulletedList, Button, Calendar, CheckBox, CheckBoxList, DropDownList, FileUpload, HiddenField, HyperLink, Image, ImageButton, ImageMap.
62+
- **Common missing property: AccessKey.** Every component that inherits WebControl in Web Forms has AccessKey. Neither `BaseStyledComponent` nor `BaseWebFormsComponent` provides it. This is the single most pervasive gap — affects all 13 audited controls.
63+
- **ToolTip inconsistently provided.** Some components (Button, FileUpload, Calendar, HyperLink, Image, ImageButton, ImageMap) add ToolTip directly. Others (AdRotator, BulletedList, CheckBox, CheckBoxList, DropDownList) do not. ToolTip should be on the base class.
64+
- **Image base class mismatch.** `Image` inherits `BaseWebFormsComponent` but Web Forms `Image` inherits `WebControl`. This means Image is missing ALL style properties (CssClass, BackColor, ForeColor, Font, Width, Height, BorderColor, BorderStyle, BorderWidth, Style). ImageMap correctly uses `BaseStyledComponent` per team decision. Image should follow the same pattern.
65+
- **HyperLink.NavigateUrl naming mismatch.** Web Forms uses `NavigateUrl`; Blazor uses `NavigationUrl`. This breaks migration — developers must rename the attribute.
66+
- **List controls missing common ListControl properties.** BulletedList, CheckBoxList, and DropDownList all lack DataTextFormatString, AppendDataBoundItems, CausesValidation, and ValidationGroup. These are inherited from ListControl in Web Forms.
67+
- **Calendar style sub-properties use CSS strings.** All 9 style sub-properties (DayStyle, TitleStyle, etc.) are implemented as CSS class strings instead of `TableItemStyle` objects. Functional but not API-compatible.
68+
- **HiddenField correctly uses BaseWebFormsComponent.** Matches Web Forms where HiddenField inherits Control (not WebControl), so no style properties needed.
6169

70+
71+
Team update (2026-02-23): AccessKey/ToolTip must be added to BaseStyledComponent decided by Beast, Cyclops
72+
Team update (2026-02-23): Label should inherit BaseStyledComponent instead of BaseWebFormsComponent decided by Beast
73+
Team update (2026-02-23): DataBoundComponent style gap DataBoundStyledComponent<T> recommended decided by Forge
74+
Team update (2026-02-23): Chart implementation architecture consolidated (10 decisions) decided by Cyclops, Forge
75+
Team update (2026-02-23): Validation Display property missing from all validators migration-blocking decided by Rogue
76+
Team update (2026-02-23): ValidationSummary comma-split bug is data corruption risk decided by Rogue
77+
Team update (2026-02-23): Login controls missing outer WebControl style properties decided by Rogue

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,26 @@ Evaluated 4 JS libraries for Chart component. D3 rejected (zero built-in charts,
4949
📌 Team update (2026-02-12): Chart component feasibility confirmed — Chart.js recommended via JS interop. Effort: L. Target Milestone 4. — decided by Forge
5050
📌 Team update (2026-02-12): Milestone 4 planned — Chart component with Chart.js via JS interop. 8 work items, design review required before implementation. — decided by Forge + Squad
5151

52+
### Feature Comparison Audit: Data Controls + Navigation Controls (2026-02-12)
53+
54+
Completed full API surface audit of 12 controls (9 Data + 3 Navigation) comparing Web Forms API vs Blazor implementation. Created `planning-docs/{ControlName}.md` for each.
55+
56+
**Key findings on control coverage:**
57+
58+
1. **Best coverage:** Repeater (minimal Web Forms API, nearly 100% match), DataList (38 props, 8 events matching — excellent style/template support), SiteMapPath (27 props, 5 events — near-complete), DataPager (27 props, 7 events — solid paging).
59+
60+
2. **Good but incomplete:** DetailsView (27 props, 16 events — strong CRUD events, missing style props; on sprint3 branch), TreeView (21 props, 11 events — good core + data binding + accessibility, missing node styles), Menu (16 props, 7 events — good rendering + JS interop, missing base styles and Orientation).
61+
62+
3. **Weakest coverage:** GridView (9 props, 8 events — only basic table rendering, no paging/sorting/editing/selection), FormView (10 props, 12 events — good mode switching but missing nearly all display properties), ListView (14 props, 9 events — great templates, no CRUD events), Chart (14 props, 6 events — architectural deviation to Chart.js/canvas).
63+
64+
**Recurring pattern — style property gap:** Controls inheriting DataBoundComponent<T> (DataGrid, GridView, FormView, DetailsView, ListView) lack WebControl-level style properties (BackColor, ForeColor, Font, BorderColor, Width, Height, etc.) because DataBoundComponent inherits BaseWebFormsComponent, not BaseStyledComponent. DataList is the exception — it implements IStyle directly with all style parameters.
65+
66+
**Recurring pattern — missing CRUD events:** GridView, ListView, and DataGrid are all missing row/item-level CRUD events (RowDeleting/RowDeleted, ItemEditing, etc.) that are essential for inline editing scenarios. Only DetailsView and FormView have these.
67+
68+
**Recurring pattern — no PagerSettings:** All controls that support paging (GridView, DetailsView, FormView) are missing the PagerSettings configuration object that Web Forms uses to configure pager appearance.
69+
70+
**DetailsView branch status:** DetailsView exists on `sprint3/detailsview-passwordrecovery` but is not on the current working branch (`milestone4/chart-component`).
71+
5272
### Themes and Skins Migration Strategy (2026-02-12)
5373

5474
- Evaluated 5 approaches for migrating Web Forms Themes/Skins to Blazor: CSS Custom Properties, CascadingValue ThemeProvider, Generated CSS Isolation, DI Service, and Hybrid.
@@ -59,3 +79,9 @@ Evaluated 4 JS libraries for Chart component. D3 rejected (zero built-in charts,
5979
- The library already uses CascadingParameters extensively (TableItemStyle, LoginControl styles) — ThemeProvider follows the same pattern.
6080
- Implementation is opt-in and non-breaking: no `ThemeProvider` wrapper = no behavior change.
6181
- Strategy is exploratory per Jeff's request — the README exclusion of themes/skins still stands until a decision to implement.
82+
83+
Team update (2026-02-23): AccessKey/ToolTip must be added to BaseStyledComponent fixes all 20+ styled controls in one change decided by Beast, Cyclops
84+
Team update (2026-02-23): DataBoundComponent style gap confirmed systemic DataBoundStyledComponent<T> recommended decided by Forge
85+
Team update (2026-02-23): GridView is highest-priority data control gap (no paging/sorting/editing) decided by Forge
86+
Team update (2026-02-23): DetailsView/PasswordRecovery branch (sprint3) must be merged forward decided by Forge
87+
Team update (2026-02-23): CascadingValue ThemeProvider recommended for Themes/Skins migration decided by Forge

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,6 @@
5555
- **NavMenu Chart node:** Added under Data Components with `Expanded="false"` and 8 sub-nodes for each chart type, alphabetically ordered.
5656
- **ComponentList updated:** Replaced placeholder `Chart(?)` with a working link.
5757

58+
59+
Team update (2026-02-23): DetailsView/PasswordRecovery branch (sprint3) must be merged forward decided by Forge
60+
Team update (2026-02-23): AccessKey/ToolTip must be added to BaseStyledComponent decided by Beast, Cyclops

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,17 @@
3232

3333
📌 Test pattern: Chart component tests use `BunitContext` directly (not `BlazorWebFormsTestContext`) with `JSInterop.Mode = JSRuntimeMode.Loose` to handle Chart.js interop calls. ChartConfigBuilder is the most testable part — pure static class, no JS/canvas dependency. bUnit 2.x requires `Render<T>` not `RenderComponent<T>`. `GetPaletteColors` is internal, so palette behavior is tested indirectly via BuildConfig dataset colors. — Rogue
3434

35+
📌 Feature Comparison Audit — Validation Controls + Login Controls (2026-02-12): Created 13 audit documents in `planning-docs/` comparing Web Forms API vs Blazor implementation for CompareValidator, CustomValidator, RangeValidator, RegularExpressionValidator, RequiredFieldValidator, ValidationSummary, ChangePassword, CreateUserWizard, Login, LoginName, LoginStatus, LoginView, PasswordRecovery. — Rogue
36+
37+
📌 Validation controls common gaps: (1) `Display` property (None/Static/Dynamic) missing from all validators — affects layout behavior. (2) `SetFocusOnError` missing from all validators. (3) `ControlToValidate` uses `ForwardRef<InputBase<T>>` instead of string ID — different API shape from Web Forms. (4) `InitialValue` missing from RequiredFieldValidator. (5) `ControlToCompare` missing from CompareValidator. (6) `AccessKey` and `ToolTip` missing from all validators. (7) ValidationSummary is missing `HeaderText`, `ShowMessageBox`, `ShowSummary`, `ShowValidationErrors`, and `ValidationGroup` — significant functional gaps. (8) ValidationSummary error message parsing uses fragile comma-split (`x.Split(',')[1]`). — Rogue
38+
39+
📌 Login control template support status: (1) ChangePassword: `ChangePasswordTemplate` and `SuccessTemplate` both supported as RenderFragment. (2) CreateUserWizard: `CreateUserStep`, `CompleteStep`, `SideBarTemplate`, `HeaderTemplate` all supported — but limited to 2 fixed wizard steps (no arbitrary WizardSteps). (3) Login: `LayoutTemplate` NOT supported (commented out in code). (4) LoginView: `AnonymousTemplate`, `LoggedInTemplate`, `RoleGroups` all supported — best template coverage of all login controls. (5) PasswordRecovery: component NOT FOUND in source tree despite Sprint 3 history references — needs investigation. — Rogue
40+
41+
📌 Login controls inherit BaseWebFormsComponent (not BaseStyledComponent): Login, ChangePassword, CreateUserWizard, LoginView all lack outer-level WebControl style properties (BackColor, CssClass, ForeColor, Width, Height, etc.). Only LoginName and LoginStatus inherit BaseStyledComponent and have full style support. Sub-element styles are handled via CascadingParameters for the composite login controls. — Rogue
42+
43+
44+
Team update (2026-02-23): AccessKey/ToolTip must be added to BaseStyledComponent decided by Beast, Cyclops
45+
Team update (2026-02-23): DataBoundComponent style gap DataBoundStyledComponent<T> recommended decided by Forge
46+
Team update (2026-02-23): DetailsView/PasswordRecovery branch (sprint3) must be merged forward decided by Forge
47+
Team update (2026-02-23): Validation Display property gap confirmed migration-blocking decided by Rogue
48+
Team update (2026-02-23): ValidationSummary comma-split bug confirmed immediate fix needed decided by Rogue

0 commit comments

Comments
 (0)