Milestone 6: Feature Gap Closure - 54 work items closing ~345 audit gaps#342
Milestone 6: Feature Gap Closure - 54 work items closing ~345 audit gaps#342csharpfritz merged 23 commits intoFritzAndFriends:devfrom
Conversation
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
…ends#333) - Create CalendarSelectionMode enum (None, Day, DayWeek, DayWeekMonth) - Refactor Calendar.SelectionMode from string to CalendarSelectionMode enum - Remove .GetAwaiter().GetResult() blocking call in CreateDayRenderArgs - Add Caption, CaptionAlign, UseAccessibleHeader properties - Update tests and samples to use enum values
- Calendar: date selection, selection modes, styling, day/title formats, events - FileUpload: basic upload, file type filtering, multiple files, disabled, styled - ImageMap: navigate/postback/mixed hot spot modes, rectangle/circle/polygon shapes - Updated NavMenu and ComponentList with links to all three new components
…ents into dev # Conflicts: # docs/EditorControls/FileUpload.md
…Friends#338 merge The FileUpload PR (FritzAndFriends#338) inadvertently reverted Sprint 1 gate review entries from agent histories (beast, cyclops, forge, jubilee, rogue) and downgraded the FileUpload InputFile decision in decisions.md. Restored from commit f85aa42 (docs(ai-team): Sprint 1 gate review results).
Creates .agent.md files for all 6 team agents (Beast, Cyclops, Forge, Jubilee, Rogue, Scribe) so they appear in GitHub Copilot's agent picker. Content sourced from existing .ai-team/agents/*/charter.md files.
Squad is the single Copilot agent that delegates to the specialized agents defined in .ai-team/agents/. Individual agent files were incorrectly created the correct pattern is one coordinator agent (squad.agent.md) that routes work to Forge, Cyclops, Beast, Jubilee, Rogue, and Scribe based on task type.
Session: 2026-02-10-sprint2-complete Requested by: Jeffrey T. Fritz Changes: - Logged Sprint 2 session (4 components shipped with docs, samples, tests) - Merged Sprint 2 design review decision from inbox - Removed duplicate FileUpload InputFile decision from inbox (already consolidated) - Appended Sprint 2 completion decision to decisions.md - Propagated cross-agent updates to all 5 agent histories
…ents into dev # Conflicts: # docs/UtilityFeatures/PageService.md # samples/AfterBlazorServerSide/Components/Pages/ControlSamples/Calendar/Index.razor
Session: 2026-02-11-sprint3-planning Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-02-11-sprint3-planning.md - Merged 3 decisions from inbox into decisions.md - Updated status.md to reflect 48/53 components complete - Sprint 3 scope: DetailsView + PasswordRecovery - Propagated cross-agent updates to all agent history files
Session: 2026-02-12-sprint3-execution Requested by: Jeffrey T. Fritz Changes: - Logged Sprint 3 execution session - Merged 7 decisions from inbox into decisions.md - Sprint 3 gate review: DetailsView + PasswordRecovery APPROVED - Propagated cross-agent updates to Beast, Colossus, Cyclops, Rogue, Jubilee - status.md updated to 50/53 (94%)
Session: 2026-02-12-milestone4-planning Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-02-12-milestone4-planning.md - Merged decisions from inbox (Chart.js evaluation, milestone plan, milestones directive) - Propagated milestone 4 updates to 5 agent history files
Session: 2026-02-12-milestone4-planning Requested by: Scribe (automatic) Changes: - Summarized Forge history.md (exceeded ~12KB threshold) - Preserved all team updates and key patterns
…sed) Closes the highest-impact feature gaps from the 53-control audit. P0 — Base class fixes (~180 gaps): AccessKey, ToolTip on all controls; DataBoundComponent inherits BaseStyledComponent; ValidatorDisplay + SetFocusOnError; Image/Label base class upgrades. P1 — Control improvements (~120 gaps): GridView paging/sorting/row editing; Calendar style sub-components + enums; FormView header/footer/empty data; HyperLink NavigateUrl rename; ValidationSummary HeaderText/ShowSummary/ValidationGroup. P2 — Nice-to-have (~45 gaps): DataTextFormatString + AppendDataBoundItems on BaseListControl; CausesValidation on CheckBox/RadioButton/TextBox; Menu Orientation; Label AssociatedControlID; Login controls base class upgrade. 168 files changed, +5,712 / -1,775 lines 1,065 tests passing, 0 failures
| @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
|
|
||
| @code { | ||
| bool _invalidSubmit = false; | ||
| ForwardRef<InputBase<string>> Name = new ForwardRef<InputBase<string>>(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| } | ||
|
|
||
| // Separate model/handler instances per test to avoid shared state | ||
| private ExampleModel exampleModel = new ExampleModel(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| private void HandleInvalidSubmit() { _invalidSubmit = true; } | ||
|
|
||
| private bool _invalidSubmit2 = false; | ||
| ForwardRef<InputBase<string>> Name2 = new ForwardRef<InputBase<string>>(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
|
|
||
| private bool _invalidSubmit2 = false; | ||
| ForwardRef<InputBase<string>> Name2 = new ForwardRef<InputBase<string>>(); | ||
| private ExampleModel exampleModel2 = new ExampleModel(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| private void HandleInvalidSubmit2() { _invalidSubmit2 = true; } | ||
|
|
||
| private bool _invalidSubmit3 = false; | ||
| ForwardRef<InputBase<string>> Name3 = new ForwardRef<InputBase<string>>(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
|
|
||
| private bool _invalidSubmit3 = false; | ||
| ForwardRef<InputBase<string>> Name3 = new ForwardRef<InputBase<string>>(); | ||
| private ExampleModel exampleModel3 = new ExampleModel(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| private void HandleInvalidSubmit3() { _invalidSubmit3 = true; } | ||
|
|
||
| private bool _invalidSubmit4 = false; | ||
| ForwardRef<InputBase<string>> Name4 = new ForwardRef<InputBase<string>>(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
|
|
||
| private bool _invalidSubmit4 = false; | ||
| ForwardRef<InputBase<string>> Name4 = new ForwardRef<InputBase<string>>(); | ||
| private ExampleModel exampleModel4 = new ExampleModel(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| @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
Milestone 6 Feature Gap Closure
Summary
Closes the highest-impact feature gaps identified in the 53-control audit. This milestone delivers 54 work items across 3 priority tiers, closing an estimated ~345 audit gaps and raising overall project health from ~68% to ~85%.
Files changed: 168 | +5,712 / -1,775 lines
Tests: 1,065 passing (0 failures)
P0 Base Class Fixes (~180 gaps closed)
P1 Individual Control Improvements (~120 gaps closed)
P2 Nice-to-Have (~45 gaps closed)
Testing
Breaking Changes