Skip to content

Commit e5399ae

Browse files
committed
docs(ai-team): Sprint 3 execution complete
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%)
1 parent 984f078 commit e5399ae

8 files changed

Lines changed: 149 additions & 12 deletions

File tree

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,17 @@
1616
- **ImageMap is in Navigation Controls, not Editor Controls:** Despite being image-related, ImageMap is categorized under Navigation Controls in the mkdocs nav, alongside HyperLink, Menu, SiteMapPath, and TreeView.
1717
- **Style migration pattern:** Web Forms used `TableItemStyle` child elements (e.g., `<TitleStyle BackColor="Navy" />`). The Blazor components use CSS class name string parameters (e.g., `TitleStyleCss="my-class"`). This is a key migration note for Calendar, and should be documented for any future components with similar style patterns.
1818
- **Branch naming varies:** PR branches on upstream use `copilot/create-*` naming (not `copilot/fix-*` as referenced in some task descriptions). Always verify branch names via `git ls-remote` or GitHub API.
19+
- **Deferred controls doc pattern:** For controls permanently excluded from the library, use `docs/Migration/DeferredControls.md` with per-control sections: What It Did → Why It's Not Implemented → Recommended Alternatives → Migration Example (Before/After). Include a summary table at the end. This is distinct from the component doc pattern — deferred controls don't have Features Supported/Not Supported sections since they have zero Blazor implementation.
20+
- **Migration section nav is semi-alphabetical:** The Migration section in mkdocs.yml keeps "Getting started" and "Migration Strategies" at the top, then remaining entries in alphabetical order.
1921

2022
📌 Team update (2026-02-10): Docs and samples must ship in the same sprint as the component — decided by Jeffrey T. Fritz
2123
📌 Team update (2026-02-10): PRs #328 (ASCX CLI) and #309 (VS Snippets) shelved indefinitely — decided by Jeffrey T. Fritz
2224
📌 Team update (2026-02-10): Sprint 1 gate review — ImageMap (#337) APPROVED, PageService (#327) APPROVED, ready to merge — decided by Forge
2325
📌 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
2426
📌 Team update (2026-02-11): Sprint 3 scope: DetailsView + PasswordRecovery. Chart/Substitution/Xml deferred. 48/53 → target 50/53. — decided by Forge
2527
📌 Team update (2026-02-11): Colossus added as dedicated integration test engineer. Rogue retains bUnit unit tests. — decided by Jeffrey T. Fritz
28+
- **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.
29+
- **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.
30+
- **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.
31+
32+
📌 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
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Colossus — History
2+
3+
## 2026-02-10: Initial integration test audit
4+
5+
- Audited all 74 sample page routes against existing smoke tests
6+
- Added 32 missing smoke test `[InlineData]` entries in `ControlSampleTests.cs`
7+
- Added 4 interaction tests for Sprint 2 components (MultiView, ChangePassword, CreateUserWizard, Localize)
8+
- Fixed Calendar sample page CS1503 errors (bare enum values → fully qualified `CalendarSelectionMode.X`)
9+
10+
## 2026-02-10: Sprint 3 — DetailsView and PasswordRecovery tests
11+
12+
- Added smoke test `[InlineData("/ControlSamples/DetailsView")]` under Data Controls in `ControlSampleTests.cs`
13+
- Added smoke test `[InlineData("/ControlSamples/PasswordRecovery")]` under Login Controls in `ControlSampleTests.cs`
14+
- Added 3 interaction tests for DetailsView in `InteractiveComponentTests.cs`:
15+
- `DetailsView_RendersTable_WithAutoGeneratedRows` — verifies table renders with field rows
16+
- `DetailsView_Paging_ChangesRecord` — verifies pager links navigate between records
17+
- `DetailsView_EditButton_SwitchesMode` — verifies Edit link switches to edit mode with Update/Cancel links
18+
- Added 2 interaction tests for PasswordRecovery in `InteractiveComponentTests.cs`:
19+
- `PasswordRecovery_Step1Form_RendersUsernameInput` — verifies Step 1 username input and submit button render
20+
- `PasswordRecovery_UsernameSubmit_TransitionsToQuestionStep` — verifies username submission fires handler and transitions
21+
- Build verified: 0 errors, 0 warnings
22+
- Key learnings:
23+
- DetailsView sample has 3 sections: auto-generated rows, paging (with `PageIndexChanged` counter), and edit mode (with `ModeChanging`/`ItemUpdating` status message)
24+
- PasswordRecovery sample has 3 instances: default (with all 3 handlers), custom text, and help link. First instance has status message feedback via `_statusMessage`
25+
- DetailsView renders as `<table>` with `<tr>` rows per field — consistent with Web Forms output
26+
- PasswordRecovery Step 1 uses `input[type='text']` for username, button for submit
27+
28+
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 50/53 components (94%). Library effectively feature-complete. — decided by Forge

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,17 @@
2222
- **Instance-based IDs for generated HTML IDs:** Never use `static` counters for internal element IDs (like map names) — they leak across test runs and create non-deterministic output. Use `Guid.NewGuid()` as a field initializer instead.
2323
- **ImageAlign rendering:** `.ToString().ToLower()` on `ImageAlign` enum values produces the correct Web Forms output (`absbottom`, `absmiddle`, `texttop`). No custom mapping needed.
2424
- **Enabled propagation pattern:** When `Enabled=false` on a styled component, interactive child elements (like `<area>` in ImageMap) should render as inactive (nohref, no onclick). Check `Enabled` from `BaseWebFormsComponent` — it defaults to `true`.
25+
- **PasswordRecovery component:** Lives at `src/BlazorWebFormsComponents/LoginControls/PasswordRecovery.razor` and `.razor.cs`. Inherits `BaseWebFormsComponent` (matching ChangePassword/CreateUserWizard pattern, not BaseStyledComponent). Uses 3-step int tracking: 0=UserName, 1=Question, 2=Success. Each step has its own `EditForm` wrapping. Created `SuccessTextStyle` sub-component, `MailMessageEventArgs`, and `SendMailErrorEventArgs` event args classes.
26+
- **Login controls inherit BaseWebFormsComponent, not BaseStyledComponent:** Despite the Web Forms hierarchy (CompositeControl → WebControl), all existing login controls (Login, ChangePassword, CreateUserWizard) inherit `BaseWebFormsComponent` and manage styles via CascadingParameters. New login controls should follow this established pattern.
27+
- **SubmitButtonStyle maps to LoginButtonStyle cascading name:** PasswordRecovery uses `SubmitButtonStyle` as its internal property name but cascades via `Name="LoginButtonStyle"` to reuse the existing `LoginButtonStyle` sub-component. This is the correct approach when the Web Forms property name differs from the existing cascading name.
28+
- **EditForm per step for multi-step login controls:** PasswordRecovery wraps each step in its own `EditForm` (unlike ChangePassword which wraps everything in one). This is necessary because each step has different submit handlers and different model fields being validated.
29+
- **DetailsView component:** Lives at `src/BlazorWebFormsComponents/DetailsView.razor` and `DetailsView.razor.cs`. Inherits `DataBoundComponent<ItemType>` (same as GridView/FormView). Renders a single record as `<table>` with one `<tr>` per field. Auto-generates rows via reflection when `AutoGenerateRows=true`. Supports paging across items, mode switching (ReadOnly/Edit/Insert), and command row with Edit/Delete/New/Update/Cancel buttons.
30+
- **DetailsViewMode enum:** Separate from `FormViewMode` — Web Forms has both as distinct enums with identical values (ReadOnly=0, Edit=1, Insert=2). Created at `src/BlazorWebFormsComponents/Enums/DetailsViewMode.cs` using file-scoped namespace.
31+
- **DetailsView event args:** All event arg classes live in `src/BlazorWebFormsComponents/DetailsViewEventArgs.cs`. Includes `DetailsViewCommandEventArgs`, `DetailsViewDeleteEventArgs`, `DetailsViewDeletedEventArgs`, `DetailsViewInsertEventArgs`, `DetailsViewInsertedEventArgs`, `DetailsViewUpdateEventArgs`, `DetailsViewUpdatedEventArgs`, `DetailsViewModeEventArgs`. These parallel FormView's event args but are separate types, matching Web Forms.
32+
- **DetailsView field abstraction:** Uses `DetailsViewField` abstract base class and `DetailsViewAutoField` internal class for auto-generated fields. Field definitions can be added via `Fields` RenderFragment child content. External field components can register via `AddField`/`RemoveField` methods using a `DetailsViewFieldCollection` cascading value.
33+
- **Data control paging pattern:** DetailsView uses `PageIndex` (zero-based) to index into the `Items` collection. Each page shows one record. Pager row renders numeric page links. `PageChangedEventArgs` is reused from the existing shared class.
2534

26-
📌 Team update (2026-02-10): FileUpload needs InputFile integration — @onchange won't populate file data. Ship-blocking bug. — decided by Forge
35+
📌 Team update(2026-02-10): FileUpload needs InputFile integration — @onchange won't populate file data. Ship-blocking bug. — decided by Forge
2736
📌 Team update (2026-02-10): ImageMap base class must be BaseStyledComponent, not BaseWebFormsComponent — decided by Forge
2837
📌 Team update (2026-02-10): PRs #328 (ASCX CLI) and #309 (VS Snippets) shelved indefinitely — decided by Jeffrey T. Fritz
2938
📌 Team update (2026-02-10): Docs and samples must ship in the same sprint as the component — decided by Jeffrey T. Fritz
@@ -33,3 +42,4 @@
3342
📌 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
3443
📌 Team update (2026-02-11): Sprint 3 scope: DetailsView + PasswordRecovery. Chart/Substitution/Xml deferred. 48/53 → target 50/53. — decided by Forge
3544
📌 Team update (2026-02-11): Colossus added as dedicated integration test engineer. Rogue retains bUnit unit tests. — decided by Jeffrey T. Fritz
45+
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 50/53 components (94%). — decided by Forge

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,38 @@
8181

8282
📌 Team update (2026-02-10): Sprint 3 plan ratified — DetailsView + PasswordRecovery. Chart/Substitution/Xml deferred indefinitely with migration docs. 48/53 → target 50/53. — decided by Forge
8383
📌 Team update (2026-02-11): Colossus added as dedicated integration test engineer. Rogue retains bUnit unit tests. — decided by Jeffrey T. Fritz
84+
85+
### 2026-02-11 — Sprint 3 Gate Review
86+
87+
**DetailsView — APPROVED:**
88+
- Inherits `DataBoundComponent<ItemType>` — correct for data-bound controls. Uses same `Items` property as GridView/ListView.
89+
- All 10 Web Forms events implemented with correct `EventArgs` types. Pre-operation events support cancellation.
90+
- `DetailsViewMode` enum (ReadOnly=0, Edit=1, Insert=2) matches Web Forms exactly.
91+
- HTML output: `<table>` with one `<tr>` per field, command row with `<a>` links, nested-table numeric pager — all match Web Forms.
92+
- Auto-generation via reflection correctly generates fields from `ItemType` properties.
93+
- Minor issues (non-blocking): `CombinedStyle` has CellPadding/CellSpacing logic mismatch, `cellspacing` hardcoded to 0 in template, docs use `DataSource` but actual parameter is `Items`.
94+
- DetailsView docs `DataSource``Items` fix assigned to Beast.
95+
96+
**PasswordRecovery — APPROVED:**
97+
- Inherits `BaseWebFormsComponent` — consistent with ChangePassword and CreateUserWizard pattern.
98+
- 3-step wizard flow (UserName → Question → Success) matches Web Forms exactly.
99+
- Reuses existing `LoginCancelEventArgs`, `TableItemStyle`, `Style` cascading parameter pattern from other Login Controls.
100+
- `SuccessTextStyle` sub-component added following existing `UiTableItemStyle` pattern.
101+
- All 6 events implemented: `OnVerifyingUser`, `OnUserLookupError`, `OnVerifyingAnswer`, `OnAnswerLookupError`, `OnSendingMail`, `OnSendMailError`.
102+
- `SetQuestion()` and `SkipToSuccess()` APIs provide developer control matching Web Forms extensibility.
103+
- Table-based nested HTML output matches Web Forms PasswordRecovery output.
104+
- Minor issues (non-blocking): `RenderOuterTable` declared but not used, `SubmitButtonType`/`SubmitButtonImageUrl` declared but not rendered, sample uses `e.Sender` casting instead of `@ref`.
105+
106+
**Key Patterns Confirmed:**
107+
- Login Controls consistently inherit `BaseWebFormsComponent` (not `BaseStyledComponent`) and use cascading `TableItemStyle`/`Style` objects for styling — this is an established project convention.
108+
- Data-bound controls inherit `DataBoundComponent<T>` which provides `Items` (not `DataSource`) as the primary binding parameter.
109+
- Event naming in Login Controls uses `On` prefix (`OnVerifyingUser`, `OnChangingPassword`) — project convention, not Web Forms convention.
110+
- Both components ship with docs, samples, and tests per Sprint 2 policy.
111+
112+
**Sprint 3 Status:**
113+
- 50/53 components complete (94%)
114+
- 797 tests passing, 0 build errors
115+
- 3 remaining (Chart, Substitution, Xml) deferred indefinitely
116+
- Library is effectively feature-complete for practical Web Forms migration
117+
118+
📌 Team update (2026-02-11): Sprint 3 gate review — DetailsView APPROVED, PasswordRecovery APPROVED. 50/53 complete (94%). — decided by Forge

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,12 @@
3333
📌 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
3434
📌 Team update (2026-02-11): Sprint 3 scope: DetailsView + PasswordRecovery. Chart/Substitution/Xml deferred. 48/53 → target 50/53. — decided by Forge
3535
📌 Team update (2026-02-11): Colossus added as dedicated integration test engineer. Rogue retains bUnit unit tests. — decided by Jeffrey T. Fritz
36+
37+
### Sprint 3 — Sample Pages for DetailsView and PasswordRecovery (2026-02-11)
38+
39+
- **DetailsView sample:** Uses `Items` parameter with inline `List<Customer>` data (same pattern as GridView RowSelection sample). Demonstrates auto-generated rows, paging between records with `AllowPaging`, Edit mode switching with `AutoGenerateEditButton`, and empty data text. Uses `Customer` model from `SharedSampleObjects.Models`.
40+
- **PasswordRecovery sample:** Shows the 3-step flow (username → security question → success). Uses `SetQuestion()` on the component reference via the `LoginCancelEventArgs.Sender` cast pattern. Demonstrates custom text properties and help link configuration.
41+
- **PasswordRecovery event pattern:** The `LoginCancelEventArgs` exposes a `Sender` property that must be cast back to `PasswordRecovery` to call `SetQuestion()` — this is the key integration point for the security question step.
42+
- **Nav ordering note:** Data Components section in NavMenu.razor is not strictly alphabetical (DataList before DataGrid). I placed DetailsView after DataGrid and before FormView to maintain the closest alphabetical order without rearranging existing entries.
43+
44+
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 50/53 components (94%). — decided by Forge

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,9 @@
1919
📌 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
2020
📌 Team update (2026-02-11): Sprint 3 scope: DetailsView + PasswordRecovery. Chart/Substitution/Xml deferred. 48/53 → target 50/53. — decided by Forge
2121
📌 Team update (2026-02-11): Colossus added as dedicated integration test engineer. Rogue retains bUnit unit tests. — decided by Jeffrey T. Fritz
22+
23+
📌 Sprint 3 QA (2026-02-12): Wrote 71 bUnit tests for DetailsView (42 tests) and PasswordRecovery (29 tests). DetailsView tests cover: auto-generated row rendering, header/footer text and templates, command row buttons (Edit/Delete/New), mode switching (ReadOnly→Edit→Insert→Cancel), paging with page navigation, all events (ModeChanging, ModeChanged, ItemDeleting, ItemDeleted, ItemUpdating, ItemUpdated, ItemInserting, ItemInserted, PageIndexChanging, PageIndexChanged), empty data text/template, CssClass, GridLines, Visible=false. PasswordRecovery tests cover: Step 1 rendering (title, instruction, label, input, submit button, ID, help link/icon), Step 2 flow (question title, answer input, username display), Step 3 success text, full 3-step workflow, event firing (OnVerifyingUser, OnVerifyingAnswer, OnSendingMail, OnUserLookupError, OnAnswerLookupError), failure text on cancel, custom text properties, template overrides (UserNameTemplate, SuccessTemplate). All 797 tests pass (71 new + 726 existing). — Rogue
24+
25+
📌 Test pattern: DetailsView is a generic DataBoundComponent<ItemType> — tests must use `ItemType="Widget"` and provide `Items` parameter as a list. PasswordRecovery requires NavigationManager service registration (`Services.AddSingleton<NavigationManager>(new Mock<NavigationManager>().Object)`). Both follow the .razor test file pattern inheriting BlazorWebFormsTestContext via _Imports.razor. — Rogue
26+
27+
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 71 new tests verified. 797 total. — decided by Forge

0 commit comments

Comments
 (0)