Skip to content

Commit dea8487

Browse files
csharpfritzCopilot
andcommitted
docs(ai-team): Forge M17 review - approved with notes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent f5a1968 commit dea8487

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,28 @@ Line-by-line classification: DataList (110 lines), GridView (33 lines), ListView
4343

4444

4545
Team update (2026-02-27): M17 sample pages created for Timer, UpdatePanel, UpdateProgress, ScriptManager, Substitution. Default.razor filenames. ComponentCatalog already populated decided by Jubilee
46+
47+
### Summary: M17 AJAX Controls Gate Review (2026-02-28)
48+
49+
**By:** Forge
50+
**What:** Full Web Forms fidelity review of all 6 M17 controls (Timer, ScriptManager, ScriptManagerProxy, UpdatePanel, UpdateProgress, Substitution) against .NET Framework 4.8 API documentation.
51+
52+
**Verdict: APPROVE WITH NOTES** — All 6 controls pass for PR. Four minor fidelity notes for follow-up:
53+
54+
1. **ScriptManager `EnablePartialRendering` default** — Web Forms defaults to `true`, Blazor stub defaults to `false` (bare bool). No functional impact (no-op stub), but fidelity gap if property is read.
55+
2. **ScriptManager missing `Scripts` property** — Web Forms ScriptManager has a `Scripts` collection (ScriptReferenceCollection). Only ScriptManagerProxy has it in the Blazor implementation. Low-priority since ScriptManager is a no-op stub.
56+
3. **UpdateProgress `CssClass` not rendered** — Inherits BaseStyledComponent so accepts CssClass parameter, but the .razor template doesn't apply it to the `<div>` output. Migrating `<asp:UpdateProgress CssClass="loading">` would silently drop the class.
57+
4. **UpdateProgress non-dynamic layout style** — Renders `visibility:hidden` but Web Forms renders `display:block;visibility:hidden`. Functionally identical (div is block by default) but not byte-identical.
58+
59+
**What passed clean:**
60+
- All 6 component names match Web Forms originals exactly
61+
- Timer: Interval (60000 default), Enabled (inherited), OnTick event — all correct
62+
- ScriptManager/Proxy: correct as no-op stubs with BaseWebFormsComponent
63+
- UpdatePanel: RenderMode (Block=div, Inline=span), UpdateMode, ChildrenAsTriggers — all correct. ChildContent instead of ContentTemplate is intentional per Blazor conventions.
64+
- UpdateProgress: AssociatedUpdatePanelID, DisplayAfter (500), DynamicLayout (true), ProgressTemplate — all correct
65+
- Substitution: MethodName preserved for migration, SubstitutionCallback for Blazor, no wrapper element — all correct
66+
- All 3 enums (ScriptMode, UpdatePanelRenderMode, UpdatePanelUpdateMode) match Web Forms values exactly with correct int assignments
67+
- ComponentCatalog properly categorizes AJAX and Migration Helper controls
68+
- Base class choices appropriate: stubs use BaseWebFormsComponent, UpdateProgress uses BaseStyledComponent (has CssClass in WF)
69+
70+
**Key pattern learned:** AJAX controls split cleanly into two categories: (1) functional components that change Blazor behavior (Timer, UpdatePanel, UpdateProgress) and (2) pure migration stubs that render nothing (ScriptManager, ScriptManagerProxy, Substitution). The stub pattern is sound — accept-but-ignore properties to prevent compilation errors during migration.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
### 2026-02-28: M17 AJAX Controls Gate Review — APPROVE WITH NOTES
2+
**By:** Forge
3+
**What:** Reviewed all 6 M17 controls (Timer, ScriptManager, ScriptManagerProxy, UpdatePanel, UpdateProgress, Substitution) for Web Forms fidelity against .NET Framework 4.8 API. Verdict: **APPROVE WITH NOTES** — ready to PR with 4 minor follow-up items.
4+
5+
**Follow-up items (non-blocking, file as issues):**
6+
1. ScriptManager `EnablePartialRendering` should default to `true` (Web Forms default), not `false`.
7+
2. ScriptManager should accept a `Scripts` collection property (like ScriptManagerProxy does) for full markup compatibility.
8+
3. UpdateProgress template should render `CssClass` on the `<div>` element — currently the property is accepted but silently ignored.
9+
4. UpdateProgress non-dynamic layout should render `style="display:block;visibility:hidden;"` to match Web Forms byte-for-byte (currently omits `display:block`).
10+
11+
**Why:** None of these block migration. Items 1–2 affect no-op stubs with zero runtime behavior. Items 3–4 are cosmetic HTML gaps. All can be addressed in a patch follow-up without design changes.

0 commit comments

Comments
 (0)