Skip to content

Commit 6506080

Browse files
csharpfritzCopilot
andcommitted
docs(ai-team): milestone 9 session log and decisions merge
Session: 2026-02-25-milestone9-wave1 Requested by: Jeffrey T. Fritz Changes: - Logged M9 Wave 1+2 session - Merged 5 decisions from inbox - Consolidated ToolTip and ValidationSummary decisions - Removed duplicate rendermode decision - Updated 6 agent histories with cross-agent propagation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent eb32844 commit 6506080

12 files changed

Lines changed: 92 additions & 413 deletions

File tree

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,6 @@
6767
- **M9 Planning-Docs Historical Headers (WI-10):** Added `> ⚠️ Historical Snapshot (Pre-Milestone 6)` header to all 54 per-control audit files and SUMMARY.md in `planning-docs/`. Excluded README.md and MILESTONE*-PLAN.md files (still current/active). This prevents future contributors from treating pre-M6 gap data as current.
6868
- **ChangePassword/Login parity gap:** Login.md documents Orientation and TextLayout with full reference tables and migration examples, but ChangePassword.md has neither. Both controls should have identical coverage for these shared layout properties.
6969
- **ToolTip universality documented (WI-04):** Added ToolTip to Features Supported in Label.md, TextBox.md, and GridView.md (Button.md already had it). Added "Common Properties on All Styled Controls" section to Migration/readme.md explaining that ToolTip (renders as `title` attribute) is universally available on all BaseStyledComponent-derived controls. Used `!!! tip` admonition and code examples. No dedicated Common Properties page created — kept it inline in the migration guide for minimal footprint.
70+
71+
Team update (2026-02-25): ToolTip moved to BaseStyledComponent (28+ controls), ValidationSummary comma-split fixed, SkinID boolstring fixed decided by Cyclops
72+
Team update (2026-02-25): M9 plan ratified 12 WIs across P0/P1/P2, migration fidelity theme decided by Forge

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,7 @@ Added 9 smoke tests and 9 interaction tests for M7 sample pages: GridView Select
4040
## Summary: M9 Integration Test Coverage Audit (WI-11)
4141

4242
Audited all sample page `@page` routes against ControlSampleTests.cs and InteractiveComponentTests.cs. Found 105 sample routes total; 100 covered by smoke tests, 57 interaction tests exist. Identified **5 pages without any smoke test**: ListView/CrudOperations (M7 — highest priority), Label, Panel/BackImageUrl, LoginControls/Orientation, and DataGrid/Styles. All other M7 features (GridView Selection/DisplayProperties, TreeView Selection/ExpandCollapse, Menu Selection, FormView Events/Styles, DetailsView Styles/Caption) have full smoke + interaction test coverage. Report written to `.ai-team/decisions/inbox/colossus-m9-test-audit.md`.
43+
44+
Team update (2026-02-25): ToolTip moved to BaseStyledComponent (28+ controls), ValidationSummary comma-split fixed, SkinID boolstring fixed decided by Cyclops
45+
Team update (2026-02-25): M9 plan ratified 12 WIs, migration fidelity decided by Forge
46+
Team update (2026-02-25): Test coverage audit merged 5 gaps identified, P0: ListView CrudOperations decided by Colossus

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,7 @@ Audited 13 controls. Found: AccessKey/ToolTip missing from base class (universal
8181
- **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.
8282
- **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.
8383
- **ToolTip rendering in templates (WI-03):** Audited all `.razor` files inheriting BaseStyledComponent (directly or via DataBoundComponent chain). Added `title="@ToolTip"` to outermost HTML elements on 32 components that were missing it. Components already rendering ToolTip (Button, Calendar, DataList, FileUpload, HyperLink, Image, ImageButton, ImageMap) were left alone. Skipped: ListView and Repeater (no wrapper element), all style sub-components (GridViewRowStyle, CalendarDayStyle, etc.), and GridViewRow/DataGridRow (row sub-components). For multi-layout components (CheckBoxList, RadioButtonList, Panel, CheckBox, RadioButton), added title to every branch's outermost element. For Login controls (Login, ChangePassword, CreateUserWizard), added title to inner `<table>` elements since outer `<EditForm>` is a Blazor component. TextBox uses `CalculatedAttributes` dictionary — added ToolTip there. All 1206 tests pass.
84+
85+
Team update (2026-02-25): Doc audit found DetailsView/DataGrid features needing implementation verification decided by Beast
86+
Team update (2026-02-25): Test audit found 5 missing smoke tests (P0: ListView CrudOperations) decided by Colossus
87+
Team update (2026-02-25): M9 plan ratified 12 WIs, migration fidelity decided by Forge

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,7 @@ Verified all 8 known priority gaps from prior audits against current `dev` branc
117117
Planned M9: "Migration Fidelity & Hardening" — 12 work items, ~30 gap closures. P0: ToolTip → BaseStyledComponent (4 WIs, ~28 gaps — highest-leverage remaining base class fix). P1: ValidationSummary comma-split fix + SkinID type fix (3 WIs). P2: Housekeeping — stale branch cleanup, doc gap audit, planning-docs refresh, integration test coverage review, sample navigation audit (5 WIs).
118118

119119
📌 Team update (2026-02-25): Milestone 9 planned — 12 WIs, ~30 gaps, "Migration Fidelity & Hardening". P0: ToolTip base class fix. P1: ValidationSummary bug + SkinID type. P2: Housekeeping. — decided by Forge
120+
121+
Team update (2026-02-25): Doc audit found 10 gaps across FormView, DetailsView, DataGrid, ChangePassword, PagerSettings decided by Beast
122+
Team update (2026-02-25): Nav audit found 4 missing components + 15 missing SubPages decided by Jubilee
123+
Team update (2026-02-25): Test audit found 5 missing smoke tests decided by Colossus

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,7 @@ Chart: 8 basic + 4 advanced sample pages (DataBinding, MultiSeries, Styling, Cha
5252
- Some pages are partially reachable via in-page `Nav.razor` components, but TreeView Selection/ExpandCollapse and DetailsView Styles/Caption have no nav links at all.
5353
- DataList has a SubPage name mismatch: catalog says "Flow" but file is `SimpleFlow.razor`.
5454
- Report written to `.ai-team/decisions/inbox/jubilee-m9-nav-audit.md`.
55+
56+
� Team update (2026-02-25): ToolTip moved to BaseStyledComponent (28+ controls) decided by Cyclops
57+
Team update (2026-02-25): M9 plan ratified 12 WIs, migration fidelity decided by Forge
58+
Team update (2026-02-25): Nav audit merged 4 missing components + 15 missing SubPages in ComponentCatalog.cs decided by Jubilee

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,18 @@ Wrote 41 bUnit tests across 6 new test files for P2 features:
9191

9292
Team update (2026-02-24): M8 scope excludes version bump to 1.0 and release decided by Jeffrey T. Fritz
9393
Team update (2026-02-24): PagerSettings shared sub-component created may need bUnit tests decided by Cyclops
94+
95+
### Milestone 9: Migration Fidelity QA — WI-02 + WI-06
96+
97+
Wrote 24 bUnit tests across 2 files for migration fidelity work:
98+
99+
**ToolTipTests.razor (WI-02, 20 tests):** Extended existing file with 20 new tests. 9 controls gained ToolTip from BaseStyledComponent: Label (span title), TextBox (input title via CalculatedAttributes), CheckBox (span title), RadioButton (span title), Panel (div title), Table (table title), DropDownList (select title), ListBox (select title), LinkButton (a title). Each tested with ToolTip present and absent. HyperLink regression test added. All 3 regression controls (Button, Image, HyperLink) confirmed working after base class move.
100+
101+
**CommaSplitTests.razor (WI-06, 4 tests):** Validation message format is `Text,ErrorMessage\x1F ValidationGroup`. The comma-split fix uses `IndexOf(',')` + `Substring()` instead of `Split(',')` so commas in ErrorMessage are preserved. Tests: single comma in message, multiple commas, no commas, empty ErrorMessage. All pass.
102+
103+
📌 Test pattern: Validation messages are stored as `Text + "," + ErrorMessage + "\x1F" + ValidationGroup` by BaseValidator. AspNetValidationSummary extracts ErrorMessage using first-comma split (IndexOf + Substring). ErrorMessage with commas is preserved correctly. — Rogue
104+
105+
📌 Test pattern: ToolTip renders as `title` attribute on the outermost element. TextBox adds it via CalculatedAttributes dictionary (not direct markup). CheckBox/RadioButton render title on the wrapping `<span>` when Text is present, on `<input>` when no Text. Panel renders on `<div>` (no GroupingText) or `<fieldset>` (with GroupingText). — Rogue
106+
107+
Team update (2026-02-25): ToolTip moved to BaseStyledComponent (28+ controls), ValidationSummary comma-split fixed, SkinID boolstring fixed decided by Cyclops
108+
Team update (2026-02-25): M9 plan ratified 12 WIs, migration fidelity decided by Forge

.ai-team/decisions.md

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -449,12 +449,13 @@ Suggested timeline:
449449
**What:** Going forward, use "milestones" instead of "sprints" for naming work batches. All future planning uses "milestone" terminology.
450450
**Why:** User preference — captured for team memory. Applies retroactively to planning references where practical.
451451

452-
### 2026-02-23: AccessKey and ToolTip must be added to BaseStyledComponent (consolidated)
452+
### 2026-02-23: AccessKey must be added to BaseStyledComponent
453453

454454
**By:** Beast, Cyclops
455-
**What:** `AccessKey` (string) and `ToolTip` (string) are missing from all styled controls. Both are standard `WebControl` properties present on every control inheriting `WebControl` in Web Forms. Beast's audit of 15 editor controls (L–X) and Cyclops's audit of 13 editor controls (A–I) independently confirmed the gap. 7 of 13 A–I controls add ToolTip individually; the remaining 6 lack it entirely.
456-
**Recommendation:** Add `[Parameter] public string AccessKey { get; set; }` and `[Parameter] public string ToolTip { get; set; }` to `BaseStyledComponent`. This fixes the gap for all 20+ styled controls in one change.
455+
**What:** `AccessKey` (string) is missing from all styled controls. Standard `WebControl` property. Beast's audit of 15 editor controls (L–X) and Cyclops's audit of 13 editor controls (A–I) independently confirmed the gap.
456+
**Recommendation:** Add `[Parameter] public string AccessKey { get; set; }` to `BaseStyledComponent`.
457457
**Why:** Universal gap confirmed by two independent audits across 28 controls. Base-class fix is the highest-leverage single change available.
458+
**Status:** AccessKey added in Milestone 6. ToolTip consolidated into 2026-02-25 entry below.
458459

459460
### 2026-02-23: Label should inherit BaseStyledComponent
460461

@@ -539,12 +540,12 @@ Suggested timeline:
539540
**Recommendation:** Add `Display` parameter to `BaseValidator<T>`.
540541
**Why:** Migration-blocking for pages using `Display="Static"`.
541542

542-
### 2026-02-23: ValidationSummary functional gaps and comma-split bug
543+
### 2026-02-23: ValidationSummary functional gaps
543544

544545
**By:** Rogue
545-
**What:** `AspNetValidationSummary` is missing `HeaderText`, `ShowMessageBox`, `ShowSummary`, `ShowValidationErrors`, and `ValidationGroup`. Error message parsing uses `x.Split(',')[1]` which silently corrupts messages containing commas.
546-
**Recommendation:** Fix comma-split bug immediately (data corruption risk). Prioritize `HeaderText` and `ValidationGroup` (common in multi-form pages).
547-
**Why:** Comma-split is a latent data corruption bug. Missing properties affect multi-form page migration.
546+
**What:** `AspNetValidationSummary` is missing `HeaderText`, `ShowMessageBox`, `ShowSummary`, `ShowValidationErrors`, and `ValidationGroup`. Prioritize `HeaderText` and `ValidationGroup` (common in multi-form pages).
547+
**Why:** Missing properties affect multi-form page migration.
548+
**Status:** Comma-split bug fixed in M9 (2026-02-25) — see consolidated entry below.
548549

549550
### 2026-02-23: Login controls outer style properties (consolidated)
550551

@@ -1922,3 +1923,53 @@ Removed the `@rendermode InteractiveServer` directive. No other sample page in t
19221923
**By:** Forge
19231924
**What:** Established three CI/CD patterns: (1) Compute version with nbgv outside Docker build and inject via build-arg, since .dockerignore excludes .git. (2) Gate optional deployment steps on repository secrets with `if: ${{ secrets.SECRET_NAME != '' }}` so workflows don't fail when secrets aren't configured. (3) Dual NuGet publishing always push to GitHub Packages, conditionally push to nuget.org.
19241925
**Why:** The .dockerignore excluding .git is a structural constraint that won't change (it's correct for build performance). Secret-gating ensures the workflows work in forks and PRs where secrets aren't available. Dual NuGet publishing gives us private (GitHub) and public (nuget.org) distribution without duplicating the pack step. These patterns should be followed for any future workflow additions.
1926+
1927+
### 2026-02-25: Milestone 9 Plan Migration Fidelity & Hardening
1928+
1929+
**By:** Forge
1930+
**What:** Milestone 9 ratified: 12 WIs, ~30 gap closures. P0: ToolTip BaseStyledComponent (4 WIs, ~28 gaps). P1: ValidationSummary comma-split fix, SkinID boolstring fix (3 WIs). P2: Branch cleanup, doc audit, planning-docs headers, integration test review, nav audit (5 WIs). 7 of 8 prior audit gaps already fixed; 1 confirmed open + 2 newly identified.
1931+
**Why:** ToolTip base class fix has highest blast radius (~28 controls). ValidationSummary is data corruption risk. SkinID type mismatch breaks compiled migration code. Full plan at `planning-docs/MILESTONE9-PLAN.md`.
1932+
1933+
### 2026-02-25: ToolTip belongs on BaseStyledComponent (consolidated)
1934+
1935+
**By:** Beast, Cyclops (original audit: 2026-02-23), Cyclops (implementation: 2026-02-25)
1936+
**What:** `[Parameter] public string ToolTip { get; set; }` added to `BaseStyledComponent`. Removed 8 duplicate declarations (Button, Calendar, DataList, FileUpload, HyperLink, Image, ImageButton, ImageMap). 32 templates updated with `title="@ToolTip"`. Sub-component types (ChartSeries, DataPoint, MenuItem, TreeNode) keep their own ToolTip (item-level semantics). All 28+ styled controls now inherit ToolTip automatically.
1937+
**Why:** Web Forms `WebControl.ToolTip` is defined at base class level. Two independent audits (Beast LX, Cyclops AI) confirmed universal gap. Base-class fix is highest-leverage single change.
1938+
1939+
### 2026-02-25: ValidationSummary comma-split fixed (consolidated)
1940+
1941+
**By:** Rogue (bug identification: 2026-02-23), Cyclops (fix: 2026-02-25)
1942+
**What:** `AspNetValidationSummary.ValidationMessages` now uses `IndexOf(',')` + `Substring()` instead of `Split(',')[1]` to extract error messages. The field identifier is always before the first comma; everything after is the message.
1943+
**Why:** Error messages containing commas were silently truncated data corruption bug. Original audit by Rogue identified the issue; Cyclops implemented the fix.
1944+
1945+
### 2026-02-25: SkinID is a string, not a bool
1946+
1947+
**By:** Cyclops
1948+
**What:** `BaseWebFormsComponent.SkinID` type changed from `bool` to `string`. `[Obsolete]` attribute preserved.
1949+
**Why:** Web Forms `Control.SkinID` is a string containing the skin name. Boolean type breaks any migration code setting `SkinID="MySkin"`.
1950+
1951+
### 2026-02-25: Documentation gap audit M6-M8 features (WI-09)
1952+
1953+
**By:** Beast
1954+
**What:** Audited docs against M6-M8 features. Fully documented: GridView, TreeView, Menu, Validators, Login. Gaps found: FormView (ItemCommand, styles, PagerSettings not in Blazor sections), DetailsView (Caption missing, styles/PagerSettings possibly stale), DataGrid (paging status unclear), ChangePassword (Orientation/TextLayout undocumented), PagerSettings (no dedicated doc page).
1955+
**Why:** Ensures documentation accuracy before 1.0. Gaps prioritized P1-P3.
1956+
1957+
### 2026-02-25: Planning-docs marked as historical snapshots (WI-10)
1958+
1959+
**By:** Beast
1960+
**What:** Added historical snapshot headers to all 54 per-control audit files and SUMMARY.md in `planning-docs/`. Excluded README.md and MILESTONE*-PLAN.md (still current).
1961+
**Why:** Prevents future contributors from treating pre-M6 gap data as current.
1962+
1963+
### 2026-02-25: Integration test coverage audit (WI-11)
1964+
1965+
**By:** Colossus
1966+
**What:** 100 of 105 sample page routes covered by smoke tests. 5 gaps: ListView CrudOperations (M7, P0), Label, Panel/BackImageUrl, LoginControls/Orientation, DataGrid/Styles (all pre-M7, P1). 9 of 10 M7 features have full coverage (smoke + interaction). 57 interaction tests exist.
1967+
**Why:** Read-only audit to identify test coverage gaps before 1.0.
1968+
1969+
### 2026-02-25: Sample site navigation audit (WI-12)
1970+
1971+
**By:** Jubilee
1972+
**What:** 4 components missing entirely from ComponentCatalog.cs (Menu, DataBinder, PasswordRecovery, ViewState). 15 SubPages missing across GridView (5), TreeView (2), FormView (3), DetailsView (2), ListView (1), DataGrid (1), Panel (1). DataList "Flow" SubPage name mismatch. All 10 M7/M8 feature pages exist on disk but none linked in sidebar.
1973+
**Why:** Users cannot discover sample pages that aren't in the sidebar navigation.
1974+
1975+

0 commit comments

Comments
 (0)