Skip to content

Commit b0b3dcc

Browse files
csharpfritzCopilot
andcommitted
docs(ai-team): M10 batch 1 session log and decisions
Session: 2026-02-25-m10-batch1 Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-02-25-m10-batch1.md - Merged 4 decisions from inbox into decisions.md (forge, jubilee, beast, cyclops) - Propagated cross-agent updates to all agent history files - Summarized oversized history files (forge, cyclops, beast, rogue) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 578e858 commit b0b3dcc

11 files changed

Lines changed: 109 additions & 220 deletions

File tree

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

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,48 +7,14 @@
77

88
## Learnings
99

10-
<!-- Append new learnings below. Each entry is something lasting about the project. -->
10+
<!-- ⚠ Summarized 2026-02-25 by Scribe — older entries condensed into Core Context -->
1111

12-
<!-- ⚠ Summarized 2026-02-25 by Scribe — original entries covered 2026-02-10 through 2026-02-12 -->
12+
### Core Context (2026-02-10 through 2026-02-25)
1313

14-
### Summary: Documentation Conventions (2026-02-10 through 2026-02-12)
14+
Established doc structure: title → intro (MS docs link) → Features Supported → NOT Supported → Web Forms syntax → Blazor syntax → HTML Output → Migration Notes → Examples → See Also. mkdocs.yml nav alphabetical within categories. Branch naming: `copilot/create-*`. Chart doc introduced JS interop "HTML Output Exception" pattern and multi-component (child) doc pattern. Chart Type Gallery at `docs/images/chart/chart-{type}.png`. Created PasswordRecovery doc (3-step wizard pattern), DetailsView doc (generic component pattern). Deferred controls use `docs/Migration/DeferredControls.md`. Feature audit: AccessKey/ToolTip base class gap, Substitution/Xml deferred, Style is computed.
1515

16-
**Doc structure:** title → intro (MS docs link) → Features Supported → NOT Supported → Web Forms syntax → Blazor syntax → HTML Output → Migration Notes (Before/After) → Examples → See Also. Admonitions for gotchas. mkdocs.yml nav is alphabetical within category sections. Migration section keeps "Getting started" and "Migration Strategies" at top.
16+
**Key patterns:** Style migration: TableItemStyle → CSS class string parameters. DeferredControls.md has dual role (fully deferred + partially implemented). Chart screenshots at `docs/images/{component}/`. Shared sub-component docs linked from parent control docs.
1717

18-
**Key patterns:** Style migration: Web Forms `TableItemStyle` child elements → Blazor CSS class string parameters. Deferred controls use `docs/Migration/DeferredControls.md` with What/Why/Alternatives/Before-After (no Features sections). ImageMap is in Navigation Controls. Branch naming: `copilot/create-*` on upstream. Chart doc introduces JS interop "HTML Output Exception" pattern and multi-component (child) doc pattern. Chart Type Gallery at `docs/images/chart/chart-{type}.png`.
19-
20-
📌 Team update (2026-02-10): Docs and samples must ship in the same sprint as the component — decided by Jeffrey T. Fritz
21-
📌 Team update (2026-02-10): PRs #328 (ASCX CLI) and #309 (VS Snippets) shelved indefinitely — decided by Jeffrey T. Fritz
22-
📌 Team update (2026-02-10): Sprint 1 gate review — ImageMap (#337) APPROVED, PageService (#327) APPROVED, ready to merge — decided by Forge
23-
📌 Team update (2026-02-10): Sprint 2 complete — Localize, MultiView+View, ChangePassword, CreateUserWizard shipped with docs, samples, tests. 709 tests passing. 41/53 components done. — decided by Squad
24-
📌 Team update (2026-02-11): Sprint 3 scope: DetailsView + PasswordRecovery. Chart/Substitution/Xml deferred. 48/53 → target 50/53. — decided by Forge
25-
📌 Team update (2026-02-11): Colossus added as dedicated integration test engineer. Rogue retains bUnit unit tests. — decided by Jeffrey T. Fritz
26-
- **PasswordRecovery doc pattern follows ChangePassword:** The PasswordRecovery doc mirrors the ChangePassword.md structure — same "Authentication Integration" warning admonition, same style migration guidance (TableItemStyle → CSS classes via cascading parameters), same emphasis on event-driven architecture. This three-step wizard pattern (UserName → Question → Success) with `@ref` for calling component methods (SetQuestion, SkipToSuccess) is unique among login controls and should be noted for any future wizard-style components.
27-
- **DetailsView doc covers generic component:** DetailsView is generic (`DetailsView<ItemType>`), unlike most other data controls. The doc explicitly calls out the `ItemType` requirement and the reflection-based auto-field generation. The Fields child content pattern with CascadingValue registration is worth noting for any future components that use child component registration.
28-
- **Sprint 3 docs delivered:** DetailsView and PasswordRecovery documentation created with full structure (features, Web Forms syntax, Blazor syntax, HTML output, migration notes, examples, See Also). Added to mkdocs.yml nav (alphabetical) and linked in README.md.
29-
30-
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. Action item: fix DetailsView docs to replace `DataSource=` with `Items=` in Blazor code samples. — decided by Forge
31-
32-
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
33-
34-
- **Chart doc is first JS interop component:** The Chart component is unique in the library — it's the first to use JavaScript interop (Chart.js via ES module import). The doc template needed a new "HTML Output Exception" admonition pattern to explain why `<canvas>` replaces `<img>`. This pattern should be reused for any future components that deviate from identical HTML output.
35-
- **DeferredControls.md updated for partial implementation:** Chart moved from fully-deferred to partially-implemented. The DeferredControls page now has a dual role: documenting controls not implemented at all (Substitution, Xml) AND documenting unsupported sub-features of implemented controls (27 unsupported chart types). This "partially implemented" pattern may apply to future controls.
36-
- **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.
37-
- **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).
38-
- **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.
39-
### Summary: Feature Audit Findings (2026-02-23)
40-
41-
AccessKey/ToolTip missing from base classes (universal gap). Label needs BaseStyledComponent. ListControl-derived components share common gaps (AppendDataBoundItems, DataTextFormatString, CausesValidation). Literal/Localize/PlaceHolder/View/MultiView near-complete. Substitution/Xml permanently deferred. Style property is computed (not directly settable). Panel is most feature-complete styled control.
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): Chart implementation architecture consolidated (10 decisions) decided by Cyclops, Forge
46-
Team update (2026-02-23): DetailsView/PasswordRecovery branch (sprint3) must be merged forward decided by Forge
47-
48-
Team update (2026-02-23): BaseListControl<TItem> introduced docs should reflect shared base for list controls decided by Cyclops
49-
Team update (2026-02-23): Label AssociatedControlID switches rendered element document accessibility benefit decided by Cyclops
50-
Team update (2026-02-23): Login controls now inherit BaseStyledComponent update docs for outer style support decided by Rogue, Cyclops
51-
Team update (2026-02-23): Milestone 6 Work Plan ratified 54 WIs, Beast assigned branding (UI-11) and docs (UI-12) decided by Forge
5218
Team update (2026-02-23): Menu Orientation requires Razor local variable workaround document this pattern decided by Jubilee
5319

5420
- **Milestone 8 release-readiness docs polish:** Formally deferred Substitution and Xml controls in `status.md` (changed from 🔴 Not Started to ⏸️ Deferred with rationale). Added Deferred column to summary table. Updated `docs/Migration/DeferredControls.md` to mark Chart as fully implemented (removed "Phase 1"/"Partial" hedging). Removed all "Phase 1"/"Phase 2/3" hedging from `docs/DataControls/Chart.md`. Fixed duplicate `DeferredControls.md` entry in `mkdocs.yml` and re-alphabetized Migration nav. Fixed broken `ImageMap` link in `README.md` (pointed to EditorControls, should be NavigationControls). Added missing doc links in README for MultiView, View, ChangePassword, CreateUserWizard. Marked Xml as deferred in README component list.
@@ -81,3 +47,12 @@ AccessKey/ToolTip missing from base classes (universal gap). Label needs BaseSty
8147
5. **DataGrid.md** — Moved Paging, Sorting, Selection, and Editing from "NOT Supported" to "Supported" (all now implemented). Added AllowPaging/PageSize/CurrentPageIndex/PageIndexChanged, AllowSorting/SortCommand, SelectedIndex/EditItemIndex to Blazor syntax. Added paging and sorting examples with event handlers.
8248
- **Documentation pattern: PagerSettings as shared sub-component doc:** PagerSettings is the first shared (non-control) sub-component to get its own dedicated doc page. It's referenced via `[PagerSettings](PagerSettings.md)` links from FormView, DetailsView, and GridView docs. Future shared sub-components (e.g., TableItemStyle if ever documented separately) should follow this pattern.
8349

50+
51+
Team update (2026-02-25): All login controls (Login, LoginView, ChangePassword, PasswordRecovery, CreateUserWizard) now inherit from BaseStyledComponent decided by Cyclops
52+
53+
Team update (2026-02-25): ComponentCatalog.cs now links all sample pages; new samples must be registered there decided by Jubilee
54+
55+
56+
Team update (2026-02-25): Future milestone work should include a doc review pass to catch stale 'NOT Supported' entries decided by Beast
57+
58+
Team update (2026-02-25): Shared sub-components of sufficient complexity get their own doc page (e.g., PagerSettings) decided by Beast

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,12 @@ Added 5 missing smoke test InlineData entries to ControlSampleTests.cs covering
5959
- Panel/BackImageUrl sample page uses external placeholder URLs (`via.placeholder.com`). The existing `VerifyPageLoadsWithoutErrors` filter for "Failed to load resource" handles this, so the smoke test works despite the team convention against external image URLs.
6060
- LoginControls/Orientation is at `/ControlSamples/LoginControls/Orientation` (not under `/ControlSamples/Login` or `/ControlSamples/ChangePassword` as initially suggested in the issue).
6161

62+
63+
64+
Team update (2026-02-25): Future milestone work should include a doc review pass to catch stale 'NOT Supported' entries decided by Beast
65+
66+
Team update (2026-02-25): Shared sub-components of sufficient complexity get their own doc page (e.g., PagerSettings) decided by Beast
67+
68+
Team update (2026-02-25): All login controls (Login, LoginView, ChangePassword, PasswordRecovery, CreateUserWizard) now inherit from BaseStyledComponent decided by Cyclops
69+
70+
Team update (2026-02-25): ComponentCatalog.cs now links all sample pages; new samples must be registered there decided by Jubilee

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

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@
77

88
## Learnings
99

10-
<!-- Append new learnings below. Each entry is something lasting about the project. -->
11-
<!-- ⚠ Summarized 2026-02-23 by Scribe — original entries covered 2026-02-10 through 2026-02-12 -->
10+
<!-- ⚠ Summarized 2026-02-25 by Scribe — older entries condensed into Core Context -->
1211

13-
### Summary: Milestones 1–3 Implementation (2026-02-10 through 2026-02-12)
12+
### Core Context (2026-02-10 through 2026-02-25)
1413

15-
Built Calendar (enum fix, async events), ImageMap (BaseStyledComponent, Guid IDs, Enabled propagation), FileUpload (InputFile integration, path sanitization), PasswordRecovery (3-step wizard, per-step EditForm, SubmitButtonStyle→LoginButtonStyle cascading), DetailsView (DataBoundComponent<T>, auto-field reflection, mode switching, 10 events, paging). Image and Label upgraded to BaseStyledComponent (WI-15/WI-17).
14+
Built Calendar (enum fix, async events), ImageMap (BaseStyledComponent, Guid IDs), FileUpload (InputFile integration, path sanitization), PasswordRecovery (3-step wizard), DetailsView (DataBoundComponent<T>, auto-field reflection, 10 events). Image and Label upgraded to BaseStyledComponent. Chart: BaseStyledComponent, CascadingValue "ParentChart", JS interop via ChartJsInterop, ChartConfigBuilder pure static. Feature audit: AccessKey/ToolTip gap, Image needs BaseStyledComponent, HyperLink.NavigateUrl mismatch, list controls missing shared features.
1615

17-
**Key patterns:** Enum files in `Enums/` with explicit int values. Instance-based Guid IDs (not static). `_ = callback.InvokeAsync()` for render-time events. `Path.GetFileName()` for file save security. Login controls inherit BaseWebFormsComponent with CascadingParameter styles.
18-
19-
### Summary: Milestone 4 Chart Component (2026-02-12)
20-
21-
Chart uses BaseStyledComponent, CascadingValue `"ParentChart"` for child registration. JS interop via separate `ChartJsInterop` (not shared service). `ChartConfigBuilder` is pure static class for testability. ChartWidth/ChartHeight as strings (avoid base Width/Height conflict). SeriesChartType.Point → Chart.js "scatter". 8 Phase 1 types; unsupported throw NotSupportedException. ChartSeries data binding via reflection on Items/XValueMember/YValueMembers.
22-
23-
### Summary: Feature Audit — Editor Controls A–I (2026-02-23)
24-
25-
Audited 13 controls. Found: AccessKey/ToolTip missing from base class (universal gap), Image needs BaseStyledComponent, HyperLink.NavigateUrl naming mismatch, list controls missing DataTextFormatString/AppendDataBoundItems/CausesValidation/ValidationGroup, Calendar styles use CSS strings instead of TableItemStyle objects.
26-
27-
📌 Team update (2026-02-12): DetailsView auto-generated fields must render <input type="text"> in Edit/Insert mode — decided by Cyclops
16+
**Key patterns:** `_ = callback.InvokeAsync()` for render-time events. `Path.GetFileName()` for file save security. Chart Width/Height as strings. Orientation enum collides with parameter name in Razor — use fully-qualified `Enums.Orientation.Vertical`.
2817

2918
<!-- ⚠ Summarized 2026-02-25 by Scribe — original entries covered Milestone 6–7 implementation details -->
3019

@@ -49,12 +38,9 @@ Audited 13 controls. Found: AccessKey/ToolTip missing from base class (universal
4938
📌 Team update (2026-02-23): Milestone 6 Work Plan ratified — 54 WIs across P0/P1/P2 tiers targeting ~345 feature gaps — decided by Forge
5039
📌 Team update (2026-02-23): UI overhaul requested — ComponentCatalog (UI-2) and search (UI-8) assigned to Cyclops — decided by Jeffrey T. Fritz
5140

52-
### Milestone 8 Release-Readiness Bug Fixes (2026-02-24)
41+
### Summary: Milestone 8 Release-Readiness Bug Fixes (2026-02-24)
5342

54-
- **Menu JS interop crash (Bug 1):** `Menu.js` `Sys.WebForms.Menu` constructor crashes when `getElement()` returns null (e.g., headless Chrome timing). Fixed by adding null guard after `getElement()` (early return if element missing) and wrapping entire constructor body in try/catch to prevent unhandled exceptions from killing the Blazor circuit. File: `src/BlazorWebFormsComponents/wwwroot/Menu/Menu.js`.
55-
- **Calendar attribute rendering (Bug 2):** `Calendar.razor` line 64 used raw Razor expression injection to conditionally add `scope="col"` to `<th>` tags. This caused `@(UseAccessibleHeader` to appear literally in server logs due to Razor parsing issues. Fixed by replacing with proper conditional attribute: `scope="@(UseAccessibleHeader ? "col" : null)"` -- Blazor omits the attribute entirely when value is null. File: `src/BlazorWebFormsComponents/Calendar.razor`.
56-
- **Menu auto-ID generation (Bug 3):** Menu JS interop requires a DOM element ID, but when no `ID` parameter is provided, it passes an empty string causing null element lookup. Fixed by adding `OnParametersSet` override in `Menu.razor.cs` that auto-generates `menu_{GetHashCode():x}` when ID is null/empty. File: `src/BlazorWebFormsComponents/Menu.razor.cs`.
57-
- **Shared PagerSettings sub-component:** Created `PagerSettings` class (plain C# POCO, not a Blazor component) with all 12 Web Forms PagerSettings properties (Mode, PageButtonCount, First/Last/Next/PreviousPageText, image URLs, Position, Visible). Created `PagerPosition` enum in `Enums/` (PagerButtons already existed). Created `IPagerSettingsContainer` interface in `Interfaces/`. Created `UiPagerSettings` abstract base component following the `UiTableItemStyle` CascadingParameter pattern but for settings instead of styles. Created 3 concrete sub-component pairs: `GridViewPagerSettings`, `FormViewPagerSettings`, `DetailsViewPagerSettings` — each inherits `UiPagerSettings` and uses `[CascadingParameter(Name = "ParentXxx")]` to set properties on the parent's `PagerSettings` instance. Wired into GridView, FormView, DetailsView: added `IPagerSettingsContainer` to each control's interface list, added `PagerSettings` property + `PagerSettingsContent` RenderFragment parameter, rendered `@PagerSettingsContent` inside existing `<CascadingValue>` block. Key files: `Enums/PagerPosition.cs`, `PagerSettings.cs`, `Interfaces/IPagerSettingsContainer.cs`, `UiPagerSettings.cs`, `GridViewPagerSettings.razor(.cs)`, `FormViewPagerSettings.razor(.cs)`, `DetailsViewPagerSettings.razor(.cs)`.
43+
Fixed 3 bugs: Menu JS null guard + try/catch for getElement(), Calendar conditional scope attribute (`scope="@(UseAccessibleHeader ? "col" : null)"`), Menu auto-ID generation (`menu_{GetHashCode():x}` when ID null). Created shared PagerSettings sub-component (POCO with 12 properties, PagerPosition enum, IPagerSettingsContainer interface, UiPagerSettings base following CascadingParameter pattern). Wired into GridView, FormView, DetailsView with concrete sub-component pairs (GridViewPagerSettings, FormViewPagerSettings, DetailsViewPagerSettings).
5844
Team update (2026-02-24): Substitution/Xml formally deferred no implementation needed decided by Beast
5945
Team update (2026-02-24): M8 scope excludes version bump to 1.0 and release decided by Jeffrey T. Fritz
6046

@@ -90,3 +76,10 @@ Audited 13 controls. Found: AccessKey/ToolTip missing from base class (universal
9076
- **PasswordRecovery → BaseStyledComponent (#354):** Changed `PasswordRecovery.razor` and `PasswordRecovery.razor.cs` to inherit `BaseStyledComponent`. Added `class="@CssClass"`, `style="border-collapse:collapse;@Style"`, and `title="@ToolTip"` to all three step `<table>` elements (UserName, Question, Success steps). Follows the same pattern as Login, ChangePassword, and CreateUserWizard. All existing tests pass.
9177
- **Pattern followed:** Login controls with `<table>` elements add `class="@CssClass" style="border-collapse:collapse;@Style" title="@ToolTip"` to the outer table, matching Login.razor and ChangePassword.razor.
9278

79+
80+
81+
Team update (2026-02-25): Future milestone work should include a doc review pass to catch stale 'NOT Supported' entries decided by Beast
82+
83+
Team update (2026-02-25): Shared sub-components of sufficient complexity get their own doc page (e.g., PagerSettings) decided by Beast
84+
85+
Team update (2026-02-25): ComponentCatalog.cs now links all sample pages; new samples must be registered there decided by Jubilee

0 commit comments

Comments
 (0)