Skip to content

Commit 5a0edf1

Browse files
csharpfritzCopilot
andcommitted
docs: update Cyclops history and decisions for M9 code fixes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8f536e1 commit 5a0edf1

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,9 @@ Audited 13 controls. Found: AccessKey/ToolTip missing from base class (universal
7474
Team update (2026-02-24): M8 scope excludes version bump to 1.0 and release decided by Jeffrey T. Fritz
7575

7676
Team update (2026-02-25): Deployment pipeline patterns established compute Docker version with nbgv before build, gate on secrets, dual NuGet publishing decided by Forge
77+
78+
### Milestone 9 Migration-Fidelity Fixes (2026-02-25)
79+
80+
- **ToolTip → BaseStyledComponent (WI-01):** Added `[Parameter] public string ToolTip { get; set; }` to `BaseStyledComponent.cs`. Removed duplicate ToolTip declarations from 8 components: Button, Calendar, DataList, FileUpload, HyperLink, Image, ImageButton, ImageMap. All controls inheriting BaseStyledComponent (28+) now get ToolTip automatically. Intentionally preserved ToolTip on sub-component types (ChartSeries, DataPoint, MenuItem, TreeNode) and binding fields (MenuItemBinding.ToolTipField, TreeNodeBinding.ToolTipField) since those are semantically different item-level tooltips.
81+
- **ValidationSummary comma-split bug fix (WI-05):** `AspNetValidationSummary.razor.cs` used `Split(',')[1]` to extract error messages, which truncated messages containing commas. Fixed to use `IndexOf(',')` + `Substring()` to take everything after the first comma. This is a data corruption bug — any validation message with a comma would silently lose content.
82+
- **SkinID type fix (WI-07):** Changed `SkinID` property in `BaseWebFormsComponent.cs` from `bool` to `string`. Web Forms SkinID is the name of a skin to apply (a string), not a boolean flag. The `[Obsolete]` attribute was preserved since theming is not available in Blazor.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Cyclops M9 Code Fixes — Decisions
2+
3+
### ToolTip belongs on BaseStyledComponent
4+
5+
**By:** Cyclops
6+
**What:** `[Parameter] public string ToolTip { get; set; }` is defined on `BaseStyledComponent`, not on individual controls. Removed 8 duplicate declarations (Button, Calendar, DataList, FileUpload, HyperLink, Image, ImageButton, ImageMap).
7+
**Why:** Web Forms `WebControl.ToolTip` is defined at the base class level. All styled controls should inherit it. Sub-component types (ChartSeries, DataPoint, MenuItem, TreeNode) keep their own ToolTip because those are item-level tooltips with different semantics.
8+
9+
### ValidationSummary must not use Split for message extraction
10+
11+
**By:** Cyclops
12+
**What:** `AspNetValidationSummary.ValidationMessages` uses `IndexOf(',')` + `Substring()` instead of `Split(',')[1]` to extract error messages from the field-prefixed format.
13+
**Why:** Error messages may contain commas. `Split(',')[1]` silently truncates the message at the first comma within the message text itself. The field identifier is always before the first comma, so `IndexOf` + `Substring` correctly extracts the full message.
14+
15+
### SkinID is a string, not a bool
16+
17+
**By:** Cyclops
18+
**What:** `BaseWebFormsComponent.SkinID` type changed from `bool` to `string`. The `[Obsolete]` attribute is preserved.
19+
**Why:** Web Forms `Control.SkinID` is a string containing the name of the skin to apply. A boolean makes no sense for this property and would break any migration code that sets `SkinID="MySkin"`.

0 commit comments

Comments
 (0)