Skip to content

feat: Audit gap fixes — ID rendering, RouteData bug, style docs#477

Merged
csharpfritz merged 14 commits intoFritzAndFriends:devfrom
csharpfritz:feature/audit-gap-fixes-march-18
Mar 19, 2026
Merged

feat: Audit gap fixes — ID rendering, RouteData bug, style docs#477
csharpfritz merged 14 commits intoFritzAndFriends:devfrom
csharpfritz:feature/audit-gap-fixes-march-18

Conversation

@csharpfritz
Copy link
Collaborator

Summary

Three audit gap fixes from the March 8 refresh audit (dev-docs/component-audit-2026-03-08-refresh.md):

1. RouteData→Parameter script bug fix (Bishop)

  • Build-breaking bug discovered in Run 15 — [Parameter] // TODO comment absorbed closing ) on method parameters
  • Fix: strips [RouteData] entirely and uses /* TODO */ block comment directing Layer 2 to promote to [Parameter] property
  • Correctly identified that [Parameter] targets properties only (CS0592), not method params
  • All 15 L1 tests pass at 100% line accuracy

2. ID rendering for data controls (Cyclops)

  • Added id=@ClientID rendering to 5 data controls: GridView, DropDownList, FormView, DataList, DataGrid
  • DetailsView and HiddenField already had ID rendering
  • Follows established pattern from Button/TextBox/Label/Panel/CheckBox
  • Uses ComponentIdGenerator — omits id when no developer ID is set
  • Build passes clean (0 errors)

3. Style sub-component documentation (Beast)

  • Created docs/UtilityFeatures/StylingComponents.md (14.5 KB)
  • Covers all 66 style sub-components with cascading parameter patterns
  • Web Forms→Blazor migration examples and complete inventory by parent control
  • Added to mkdocs.yml under Utility Features navigation

Review

All code changes reviewed and approved by Forge (Lead / Web Forms Reviewer).

csharpfritz and others added 11 commits March 18, 2026 11:57
…Parameter]

The [RouteData] → [Parameter] conversion placed [Parameter] on method
parameters, but ParameterAttribute targets properties only (CS0592).
This caused build failures in ProductDetails.razor.cs and
ProductList.razor.cs (Run 15 regression).

Fix: strip [RouteData] entirely and leave a /* TODO */ block comment
directing Layer 2 to promote the value to a [Parameter] property.
Block comments avoid absorbing the closing ) of method signatures.

All 15 L1 tests pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add ClientID-based id attribute rendering to GridView, DropDownList,
FormView, DataList, and DataGrid following the established pattern
from Button/TextBox/Label/Panel/CheckBox.

DetailsView and HiddenField already had ID rendering.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Create comprehensive guide for the 66 style sub-components covering
cascading parameter patterns, Web Forms to Blazor migration examples,
and complete inventory organized by parent control.

Added to mkdocs.yml under Utility Features navigation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…trol ID rendering, style docs

Session: 2026-03-18T15-48-15Z-audit-gap-fixes
Requested by: Team orchestration

Changes:
- Bishop: Fixed RouteData→Parameter conversion in bwfc-migrate.ps1 (CS0592, 15/15 L1 tests pass)
- Cyclops: Extended ID rendering to data controls (GridView, DropDownList, FormView, DataList, DataGrid)
- Beast: Created StylingComponents.md documentation (all 66 style sub-components)
- Merged 5 decisions from inbox; deleted inbox files
- Appended cross-agent team updates to Cyclops and Beast history

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Appended Forge's decision to decisions.md (ID rendering pattern approval for Bishop and Cyclops work).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Batch implementation of properties identified by gap analysis:

- CausesValidation + ValidationGroup on 5 list controls
  (DropDownList, CheckBoxList, RadioButtonList, ListBox, BulletedList)
- Calendar.TodaysDate, HyperLink.ImageUrl
- DataPager: PagedControlID, QueryStringField
- DataList: DataKeyField, EditItemIndex
- Menu: ScrollDownText, ScrollUpText, IncludeStyleBlock
- TreeView.NodeWrap
- Validator stubs: EnableClientScript, ShowMessageBox, ControlToCompare
- ScriptManager.ScriptPath, SiteMapPath.SkipLinkText

Build passes clean (0 errors).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add 10 Web Forms Chart parameters with migration-compatible mappings:
- 5 new enums: AntiAliasingStyles, GradientStyle, ChartHatchStyle,
  ImageStorageMode, TextAntiAliasingQuality
- 8 [Parameter] properties: AntiAliasing, BackGradientStyle,
  BackHatchStyle, BackSecondaryColor, BorderlineDashStyle,
  ImageLocation, ImageStorageMode, TextAntiAliasingQuality
- 2 EventCallback parameters: CustomizeLegend, CustomizeMapAreas
- CSS rendering: BackGradientStyle maps to linear/radial-gradient,
  BorderlineDashStyle maps to border-style on container div
- Server-only properties marked [Obsolete] with migration guidance

Migrated Chart markup now compiles unchanged. Coverage: 25% -> 100%
markup acceptance with 50% real visual fidelity.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…endering

- 40 tests for quick-win properties across 15 components
  (CausesValidation/ValidationGroup, TodaysDate, ImageUrl, etc.)
- 22 tests for Chart Phase 1 params and CSS gradient/border rendering
- 10 tests for ID rendering on GridView, DropDownList, FormView,
  DataList, DataGrid
- Total test suite: 2373 tests, 0 failures

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Chart/Styling: BackGradientStyle, BorderlineDashStyle, AntiAliasing demos
- HyperLink: ImageUrl example
- Calendar: TodaysDate override demo
- Menu: ScrollDownText/ScrollUpText with Unicode arrows
- TreeView: NodeWrap with long wrapping text
- ValidationSummary: ShowMessageBox migration compatibility
- DataPager: PagedControlID and QueryStringField section
- DataList: DataKeyField and EditItemIndex demo

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- 15 smoke tests covering uncovered Ajax Toolkit sample pages
- 1 Chart Styling render test verifying canvas elements and CSS
- Every sample page now has at least one integration test

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comprehensive analysis of Web Forms Chart vs Chart.js architecture
with 4 implementation options per property, plugin analysis, and
recommended Pattern B+ approach. Covers migration-first vs
fidelity-first tradeoffs with full property mapping table.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@@ -0,0 +1,46 @@
@code {
ForwardRef<InputBase<int>> Number = new ForwardRef<InputBase<int>>();

Check notice

Code scanning / CodeQL

Missed 'readonly' opportunity Note test

Field 'Number' can be 'readonly'.
cut.FindComponent<CompareValidator<int>>().Instance.ControlToCompare.ShouldBe("OtherInput");
}

private ExampleModel model = new ExampleModel();

Check notice

Code scanning / CodeQL

Missed 'readonly' opportunity Note test

Field 'model' can be 'readonly'.
cut.FindComponent<AspNetValidationSummary>().Instance.ShowMessageBox.ShouldBeTrue();
}

private ExampleModel model = new ExampleModel();

Check notice

Code scanning / CodeQL

Missed 'readonly' opportunity Note test

Field 'model' can be 'readonly'.
csharpfritz and others added 2 commits March 18, 2026 15:56
Batch A - Validators:
- BaseValidator: EnableClientScript (stub), AssociatedControlID (stub)
  Covers all 5 validators via inheritance

Batch B - FormView:
- AllowPaging (wired to pager visibility)
- CellPadding, CellSpacing, GridLines (table rendering, GridView pattern)

Batch C - Login events:
- ChangePassword: OnSendingMail, OnSendMailError
- CreateUserWizard: OnSendingMail, OnSendMailError
  (copied from PasswordRecovery pattern)

Batch D - GridView + Menu:
- GridView: AutoGenerateDeleteButton (wired to command column)
- Menu: DynamicHorizontalOffset, DynamicVerticalOffset

Build passes clean (0 errors).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- BaseValidator EnableClientScript/AssociatedControlID on RequiredFieldValidator + CompareValidator
- FormView AllowPaging, CellPadding, CellSpacing, GridLines
- GridView AutoGenerateDeleteButton (including rendered delete link verification)
- ChangePassword + CreateUserWizard OnSendingMail/OnSendMailError events
- Menu DynamicHorizontalOffset/DynamicVerticalOffset

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@code {
bool _validSubmit = false;
bool _invalidSubmit = false;
ForwardRef<InputBase<string>> NameRef = new ForwardRef<InputBase<string>>();

Check notice

Code scanning / CodeQL

Missed 'readonly' opportunity Note test

Field 'NameRef' can be 'readonly'.
bool _validSubmit = false;
bool _invalidSubmit = false;
ForwardRef<InputBase<string>> NameRef = new ForwardRef<InputBase<string>>();
ForwardRef<InputBase<int>> NumberRef = new ForwardRef<InputBase<int>>();

Check notice

Code scanning / CodeQL

Missed 'readonly' opportunity Note test

Field 'NumberRef' can be 'readonly'.
@csharpfritz csharpfritz merged commit eac6c4b into FritzAndFriends:dev Mar 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant