Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .squad/agents/beast/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
- **Created:** 2026-02-10


📌 Team update (2026-03-24): Documentation task breakdown complete — 8 GitHub issues (#505–#512) created for component doc syntax conversions, ViewState/PostBack migration guide, and cross-linking. Issues labeled squad+type:docs. Coordinate with Forge for content review. #508 (ViewState docs) blocks on PR #503 merge. — decided by Forge

📌 Team update (2026-03-17): HttpHandlerBase implementation complete (7 files in Handlers/). Returns IEndpointConventionBuilder; Session markers added; build passes 0 errors. — decided by Cyclops

## Core Context
Expand Down
16 changes: 16 additions & 0 deletions .squad/agents/cyclops/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@
---
## Active Decisions & Alerts

📌 **Team update (2026-03-24):** ViewState Phase 1 implementation complete & merged — `feature/viewstate-postback-shim` ready. ViewStateDictionary core, mode-adaptive IsPostBack, SSR hidden field round-trip, IDataProtectionProvider integration, CryptographicException fallback. All 2588 tests pass (2 breaking contracts fixed by Coordinator). Phase 2 (SSR persistence integration) approved. — decided by Cyclops

📌 **Team update (2026-03-17):** HttpHandlerBase implementation validated by Rogue — 94 tests passing, all adapter patterns verified correct. Commit 040fbad5 (15 files, 3218 insertions) on feature/httphandler-base ready for integration. — decided by Rogue

📌 **Team update (2026-03-17):** Fixed #471 (GUID IDs) and #472 (L1 script). CheckBox/RadioButton/RadioButtonList now use ClientID exclusively; no GUID fallbacks. L1 script test suite: 7/10 → 15/15 (100%). All 2105 tests pass. — decided by Cyclops
Expand Down Expand Up @@ -578,3 +580,17 @@ Team update: ModalPopupExtender and CollapsiblePanelExtender implemented by Cycl
**Key patterns applied:** var everywhere (IDE0007), WebUtility.HtmlEncode instead of HttpUtility, Blazor route URLs instead of .aspx, `new()` target-typed syntax.

**Build:** 0 errors, 0 warnings (excluding pre-existing NU1510 from upstream deps).
### ViewState + IsPostBack Phase 1 Core Infrastructure (2026-03-24)

**Summary:** Implemented Phase 1 of the ViewState/PostBack shim per Forge's architecture proposal. Created ViewStateDictionary class implementing IDictionary<string, object?> with null-safe indexer (Web Forms compat), type-safe convenience methods, IsDirty tracking, and IDataProtector-based Serialize/Deserialize with JsonElement type coercion. Updated BaseWebFormsComponent: ViewState upgraded from Dictionary to ViewStateDictionary, [Obsolete] removed, IsPostBack with mode-adaptive logic (SSR checks HTTP method, Interactive tracks _hasInitialized), CurrentRenderMode/IsHttpContextAvailable, RenderViewStateField, IDataProtectionProvider injection, ViewState deserialization from form POST. Updated WebFormsPageBase similarly. Created WebFormsRenderMode enum.

**Key decisions:**
- IDataProtectionProvider is injected as nullable (null-safe) backward compat for apps that don't register DataProtection
- ViewState deserialization happens BEFORE OnInit/OnLoad events in OnInitializedAsync matches Web Forms lifecycle
- CryptographicException from tampered payloads silently fails to empty ViewState (fail-safe)
- Component ID for hidden field uses the developer-set `ID` parameter (`__bwfc_viewstate_{ID}`)
- `var` used everywhere per IDE0007 enforcement

**Files created:** ViewStateDictionary.cs, WebFormsRenderMode.cs
**Files modified:** BaseWebFormsComponent.cs, WebFormsPageBase.cs
**Build:** 0 errors, 122 warnings (all pre-existing)
36 changes: 34 additions & 2 deletions .squad/agents/forge/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
- **Stack:** C#, Blazor, .NET, ASP.NET Web Forms, bUnit, xUnit, MkDocs, Playwright
- **Created:** 2026-02-10

## Core Context
## Active Decisions & Alerts

<!-- Summarized 2026-03-04 by Scribe — originals in history-archive.md -->
📌 **Team update (2026-03-24):** ViewState Phase 1 architecture implemented — ViewStateDictionary (SSR + Interactive modes), mode-adaptive IsPostBack, hidden form field encryption, IDataProtectionProvider optional integration, CryptographicException fail-safe. Phase 2 (SSR persistence, AutoPostBack, analyzers, docs) planned for 7 weeks. Cyclops implementation validated; all 2588 tests pass. — decided by Forge

M1–M16: 6 PRs reviewed, Calendar/FileUpload rejected, ImageMap/PageService approved, ASCX/Snippets shelved. M2–M3 shipped (50/53 controls, 797 tests). Chart.js for Chart. DataBoundStyledComponent<T> recommended. Key patterns: Enums/ with int values, On-prefix events, feature branches→upstream/dev, ComponentCatalog.cs. Deployment: Docker+NBGV, dual NuGet, Azure webhook. M7–M14 milestone plans. HTML audit: 3 tiers, M11–M13. M15 fidelity: 132→131 divergences, 5 fixable bugs. Data controls: 90%+ sample parity, 4 remaining bugs. M17 AJAX: 6 controls shipped.

Expand Down Expand Up @@ -671,3 +671,35 @@ Analysis written to `.squad/decisions/inbox/forge-departmentportal-migration-pla
Plan written to session workspace plan.md. Architecture decisions written to `.squad/decisions/inbox/forge-p1p5-plan.md`.

📡 Team update (2026-03-22): P1–P5 implementation plan completed — 6 phases, 4 new files, 4 modified files, ~9 days. Execution order: P2→P3→P1→P4→P5→FindControl. Key: WebControl gets proper Render pipeline, 4 new shim types, namespace stays in BWFC.CustomControls. ✅ decided by Forge

### Documentation Improvement Task Decomposition (2025-01-24)

**Task:** Break down remaining documentation work (from PR #504 audit and ViewState Phase 1 PR #503) into actionable GitHub issues.

**Deliverable:** 8 GitHub issues created on FritzAndFriends/BlazorWebFormsComponents:
- #505: Convert DataControls documentation to tabbed syntax (GridView, Repeater, DataGrid, DataList, ListView, DetailsView, FormView, Chart, DataPager, PagerSettings)
- #506: Convert ValidationControls documentation to tabbed syntax (BaseValidator, BaseCompareValidator, RequiredFieldValidator, CompareValidator, RangeValidator, RegularExpressionValidator, CustomValidator, ValidationSummary)
- #507: Expand stub documentation (RegularExpressionValidator _TODO_, ValidationSummary stub with headers only, Label incomplete)
- #508: Document ViewState and PostBack shim features from PR #503 (create ViewStateAndPostBack.md migration guide, document ViewStateDictionary, IsPostBack, hidden field persistence)
- #509: Complete User-Controls.md migration guide (expand with ViewState patterns, state management, PostBack handling, working examples)
- #510: Add cross-linking between related components (validation ↔ each other, list controls ↔ variants, data controls ↔ each other)
- #511: Update mkdocs.yml navigation (add new migration guides, verify all docs indexed)
- (#504 EditorControls conversion was also created but not queried in final list)

**Key scoping decisions:**

1. **Batch by component family** — Groups related controls together for efficient parallel work. EditorControls (22+ files), DataControls (10 files), ValidationControls (10 files) are three independent conversion tracks.

2. **Stubs expanded during conversion** — Don't create separate tasks for expanding RegularExpressionValidator/ValidationSummary. These are handled as part of ValidationControls conversion (#506).

3. **ViewState documentation as separate migration guide** — New PR #503 features warrant standalone docs (docs/MigrationGuides/ViewStateAndPostBack.md) rather than scattered component-by-component mentions.

4. **User-Controls.md expansion depends on ViewState docs** — Will reference new ViewState shim patterns when complete.

5. **Cross-linking as low-priority cleanup** — Can execute in parallel with syntax conversion work; final-pass quality improvement rather than blocker.

6. **mkdocs.yml as final integration step** — Updated last to avoid navigation churn during other doc edits.

**Pattern established:** All 8 issues follow consistent template (Context, Scope, Definition of Done, Notes). Labeled with `squad` + `type:docs`. Enables clear work delegation and measurable completion criteria.

**Status:** Issues created and triaged in inbox. Awaiting team assignment. Decision note written to `.squad/decisions/inbox/forge-doc-task-plan.md`.
Expand Down
19 changes: 19 additions & 0 deletions .squad/agents/rogue/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@
---
## Active Decisions & Alerts

📌 **Team update (2026-03-24):** ViewState Phase 1 test coverage complete — 73 contract tests written for ViewStateDictionary and IsPostBack behavior. 3 breaking changes identified in existing tests (expected); all 2588 tests now passing. InternalsVisibleTo added for test access, EphemeralDataProtectionProvider integration verified. Phase 2 test infrastructure ready. — decided by Rogue

📌 **Team update (2026-03-17):** HttpHandlerBase handler tests validated — 94 tests passing, 1 test fixed (HttpMethod_DefaultIsGet bad assumption). No implementation bugs found; adapter architecture verified. Commit 040fbad5 (15 files, 3218 insertions) on feature/httphandler-base. — decided by Rogue

📌 **Team update (2026-03-17):** Rogue wrote 11 bUnit tests for GUID ID rendering (#471). New RadioButton/IDRendering.razor (6 tests), enhanced CheckBox/IDRendering.razor (+3 tests). All tests pass; integrated into regression suite. — decided by Rogue
Expand Down Expand Up @@ -365,4 +367,21 @@ Test file: `src/BlazorWebFormsComponents.Test/UpdatePanel/ContentTemplateTests.r

**Team update (2026-03-20):** Middleware integration testing pattern established (TestServer + AspxRewriteMiddlewareTests.cs, 46 tests). Microsoft.AspNetCore.TestHost added to test dependencies. decided by Rogue

### ViewStateDictionary, IsPostBack & WebFormsRenderMode Contract Tests (2026-03-24)

**73 contract tests across 3 files — all pass.** Tests written against the ViewState-PostBack-Shim-Proposal spec; validated against Cyclops's Phase 1 implementation.

**ViewStateDictionaryTests.cs (48 tests):** Basic dictionary ops, null safety (missing key returns null not throw), type coercion, IsDirty tracking (set/add/remove/clear/MarkClean), serialization roundtrip with EphemeralDataProtectionProvider, JSON type coercion after deserialization (int/bool/string/double/DateTime), edge cases (100K strings, special chars in keys), IDictionary interface compliance, Web Forms migration pattern, LoadFrom merge.

**IsPostBackTests.cs (14 tests):** BaseWebFormsComponent + WebFormsPageBase in Interactive (false during init, true after) and SSR (GET=false, POST=true) modes. Guard pattern (!IsPostBack) block execution tests.

**WebFormsRenderModeTests.cs (7 tests):** Enum values, CurrentRenderMode auto-detection, IsHttpContextAvailable.

**Key findings:**
- Existing ViewState tests will break: `ViewState_NonExistentKey_ThrowsKeyNotFoundException` (returns null now), `ViewState_HasObsoleteAttribute` ([Obsolete] removed), `IsPostBack_AlwaysReturnsFalse` (mode-adaptive now)
- bUnit 2.x: `Render<T>()` not `RenderComponent<T>()`; `PageService` namespace conflict requires full qualification in .cs files
- BaseWebFormsComponent sets _hasInitialized at END of OnInitializedAsync; WebFormsPageBase sets in OnInitialized
- IDataProtectionProvider must be registered for BaseWebFormsComponent rendering (EphemeralDataProtectionProvider in tests)

**File paths:** `src/BlazorWebFormsComponents.Test/ViewStateDictionaryTests.cs`, `IsPostBackTests.cs`, `WebFormsRenderModeTests.cs`

Loading
Loading