|
| 1 | +# Archived Decisions |
| 2 | + |
| 3 | +# Team Decisions |
| 4 | + |
| 5 | +## 2026-03-14: Cyclops & Colossus: Students GridView LEFT JOIN + Test Timing |
| 6 | + |
| 7 | +**Agents:** Cyclops (Component Dev), Colossus (Integration Test Engineer) |
| 8 | +**Date:** 2026-03-14 |
| 9 | + |
| 10 | +### Decision 1: GetJoinedTableData LEFT JOIN Fix |
| 11 | + |
| 12 | +**Problem:** `GetJoinedTableData()` used `SelectMany` (INNER JOIN), hiding students without enrollments from GridView. |
| 13 | + |
| 14 | +**Solution:** Replaced with `Students.Include(Enrollments)` loop. Students without enrollments now appear with Count=0 and Date=DateTime.Today. |
| 15 | + |
| 16 | +**Rationale:** Simplest correct approach. No GroupJoin complexity needed. Data loss bug resolved; each student appears exactly once with total enrollment count. |
| 17 | + |
| 18 | +**Impact:** All students visible in GridView regardless of enrollment status. No other files changed. Build clean. Commit d3dc610f. |
| 19 | + |
| 20 | +### Decision 2: Blur + Retry Pattern for BWFC TextBox Playwright Tests |
| 21 | + |
| 22 | +**Problem:** `StudentsPage_AddNewStudentFormWorks` failing due to BWFC TextBox using `@onchange` (blur-triggered) for `TextChanged`, not `@oninput`. Playwright's `FillAsync` triggers `input` events; `change` fires only on blur. |
| 23 | + |
| 24 | +**Solution:** |
| 25 | +1. Explicit blur after last field: `await emailBox.BlurAsync()` + 200ms wait |
| 26 | +2. Increased post-click wait: 1000ms (up from 500ms) |
| 27 | +3. Retry loop with 3-second deadline, polling every 300ms |
| 28 | + |
| 29 | +**Convention:** Future BWFC TextBox Playwright tests must blur the last field before button submit. BWFC-specific requirement (Web Forms `onchange` semantics). |
| 30 | + |
| 31 | +**Status:** Already implemented from previous session. Verified in place. No new changes needed. |
| 32 | + |
| 33 | +--- |
| 34 | + |
| 35 | +## 2026-03-14: Forge Review: UpdatePanel ContentTemplate Enhancement |
| 36 | + |
| 37 | +**Reviewer:** Forge (Lead / Web Forms Reviewer) |
| 38 | +**Related Agent:** Cyclops (implementation), Rogue (tests), Jubilee (samples) |
| 39 | +**Status:** ✅ APPROVED |
| 40 | + |
| 41 | +### Summary |
| 42 | + |
| 43 | +UpdatePanel ContentTemplate enhancement is production-ready. Added `ContentTemplate` RenderFragment parameter, updated base class to `BaseStyledComponent`, verified Web Forms fidelity. |
| 44 | + |
| 45 | +### Verdict Checklist |
| 46 | + |
| 47 | +| Criterion | Result | |
| 48 | +|-----------|--------| |
| 49 | +| Web Forms fidelity | ✅ PASS — `ContentTemplate` matches System.Web.UI.UpdatePanel property | |
| 50 | +| HTML output | ✅ PASS — Renders as `<div>` (Block) or `<span>` (Inline), exactly matching Web Forms | |
| 51 | +| Base class change | ✅ ACCEPTABLE — `BaseStyledComponent` is enhancement over expando `class` only; justified & maintains backward compatibility | |
| 52 | +| Backward compatibility | ✅ PASS — Existing `<ChildContent>` patterns work; zero breaking changes | |
| 53 | +| Migration story | ✅ PASS — L1 script output `<ContentTemplate>` compiles without RZ10012 warnings | |
| 54 | +| Render mode decision | ✅ CORRECT — Library components don't force render modes | |
| 55 | +| Tests (12 total) | ✅ PASS — 100% pass rate; all scenarios covered | |
| 56 | +| Sample page | ✅ EXCELLENT — Reference quality; 6 examples + migration guide | |
| 57 | + |
| 58 | +### Key Technical Validations |
| 59 | + |
| 60 | +1. **ContentTemplate Property:** Confirmed in Microsoft Learn as property of `System.Web.UI.UpdatePanel` (NET Framework 3.5+). Blazor `RenderFragment` is correct equivalent. |
| 61 | + |
| 62 | +2. **UpdatePanel Styling:** Web Forms UpdatePanel inherits from `Control` (not `WebControl`) but accepts expando attributes including `class`. Our `BaseStyledComponent` goes beyond original (adds full style properties) but is justified enhancement: doesn't break compatibility, improves consistency, better migration experience. |
| 63 | + |
| 64 | +3. **Fallback Logic:** `@(ContentTemplate ?? ChildContent)` correctly prioritizes ContentTemplate while maintaining Blazor convention support. |
| 65 | + |
| 66 | +### Team Recognition |
| 67 | + |
| 68 | +- **Cyclops:** Clean implementation, thorough XML docs, correct architectural decisions |
| 69 | +- **Rogue:** Comprehensive test coverage (12 tests, all scenarios) |
| 70 | +- **Jubilee:** Gold-standard sample page with migration guide |
| 71 | +- **All agents:** Perfect adherence to lockout protocol |
| 72 | + |
| 73 | +**Approved by:** Forge |
| 74 | +**Status:** Ready to merge |
| 75 | +**Blocking issues:** None |
| 76 | + |
| 77 | +--- |
| 78 | + |
0 commit comments