diff --git a/.ai-team/agents/colossus/history.md b/.ai-team/agents/colossus/history.md index ca2788d40..020f01191 100644 --- a/.ai-team/agents/colossus/history.md +++ b/.ai-team/agents/colossus/history.md @@ -101,3 +101,11 @@ Added 5 missing smoke test InlineData entries to ControlSampleTests.cs covering Team update (2026-02-26): WebFormsPage unified wrapper inherits NamingContainer, adds Theme cascading, replaces separate wrappers decided by Jeffrey T. Fritz, Forge Team update (2026-02-26): SharedSampleObjects is the single source for sample data parity between Blazor and WebForms decided by Jeffrey T. Fritz + +## Summary: PR #377 DetailsView Integration Test Fix (2026-02-26) + +Fixed 5 stale Customer→Product assertions in InteractiveComponentTests.cs after DetailsView sample pages migrated from Customer to Product model (SharedSampleObjects.Models.Product). Changes: "Customer Details"→"Product Details" (Styles), "Customer Record"→"Product Record" (Caption), "No customers found."→"No products found." (EmptyData), Customer field names→Product field names in EditMode assertion message. All 7 DetailsView integration tests passing. + +## Learnings + +- When sample data models change (e.g., Customer→Product), integration test assertions referencing model-specific text (header text, empty data messages, caption text, field name lists in assertion messages) must be updated in lockstep. Smoke tests won't catch these because they only verify page loads without errors — interactive tests with text-matching assertions are the ones that break. diff --git a/.ai-team/agents/cyclops/history.md b/.ai-team/agents/cyclops/history.md index 8fa07a1c3..aef9dd0f0 100644 --- a/.ai-team/agents/cyclops/history.md +++ b/.ai-team/agents/cyclops/history.md @@ -124,3 +124,19 @@ Team update (2026-02-26): WebFormsPage unified wrapper inherits NamingContainer, adds Theme cascading, replaces separate wrappers decided by Jeffrey T. Fritz, Forge Team update (2026-02-26): SharedSampleObjects is the single source for sample data parity between Blazor and WebForms decided by Jeffrey T. Fritz Team update (2026-02-26): Login+Identity controls deferred to future milestone do not schedule implementation decided by Jeffrey T. Fritz + +### M15 HTML Fidelity Bug Fixes (#380, #379, #378) + +- **BulletedList `
    ` rendering (#380):** Removed HTML `type` attribute from `
      ` element — WebForms uses CSS `list-style-type` only, not the HTML `type` attribute. Made `start` attribute conditional (only renders when `FirstBulletNumber != 1`). The `IsOrderedList` property and `ListStyleType` CSS mappings were already correct. Replaced `OrderedListType` property with `GetStartAttribute()` helper returning `int?` (null suppresses the attribute in Blazor). +- **LinkButton `class` pass-through (#379):** Updated `GetCssClassOrNull()` in LinkButton.razor to add `aspNetDisabled` class when `Enabled=false`, matching the Button component's `CalculatedCssClass` pattern. Base CssClass pass-through was already working via the existing `GetCssClassOrNull()` method. Added 5 tests covering CssClass rendering, disabled state, and PostBackUrl+CssClass combo. +- **Image `longdesc` conditional (#378):** The `GetLongDesc()` method in Image.razor already correctly returned null when `DescriptionUrl` was empty/unset, suppressing the `longdesc` attribute. Added 3 explicit tests verifying conditional rendering behavior. `DescriptionUrl` defaults to `string.Empty` in Image.razor.cs. +- **Patterns followed:** Checked WebForms audit HTML to match exact attribute output. Followed Button's `CalculatedCssClass` pattern for disabled-state class handling. Used Blazor's null-attribute-suppression for conditional rendering (return null → attribute not rendered). All existing tests pass; added 10 new tests total. +- **All 1277 tests pass**, 0 regressions. + +### M15 HTML Fidelity Closure Fixes (#383, #382, GridView default) + +- **FileUpload ID rendering (#383):** Verified that FileUpload renders the developer-set ID exactly (e.g., `id="myUpload"`) with no GUID suffix. In .NET 10, `InputFile` does not generate its own internal id — the `id` from `GetInputAttributes()` via `ClientID` is rendered as-is. When no ID is set, no `id` attribute is rendered. Added 2 regression tests in `FileUpload/IdRendering.razor`. +- **CheckBox span wrapper removal (#382):** Verified that CheckBox renders `` and `