Skip to content

Sprint 3: Add DetailsView and PasswordRecovery components#3

Closed
csharpfritz wants to merge 27 commits into
devfrom
sprint3/detailsview-passwordrecovery
Closed

Sprint 3: Add DetailsView and PasswordRecovery components#3
csharpfritz wants to merge 27 commits into
devfrom
sprint3/detailsview-passwordrecovery

Conversation

@csharpfritz

Copy link
Copy Markdown
Owner

Sprint 3: DetailsView + PasswordRecovery

Brings the library to 50/53 components (94%) — effectively feature-complete for practical Web Forms migration.

New Components

DetailsView (Data Controls)

  • Single-record display in vertical table layout (one row per field)
  • AutoGenerateRows via reflection, explicit field definitions
  • Three modes: ReadOnly, Edit, Insert with mode switching
  • Single-record paging with numeric page links
  • Full CRUD events: ItemCommand, ModeChanging/Changed, PageIndexChanging/Changed, ItemDeleting/Deleted, ItemUpdating/Updated, ItemInserting/Inserted
  • DetailsViewMode enum (ReadOnly=0, Edit=1, Insert=2)
  • Inherits DataBoundComponent<ItemType> matching GridView pattern

PasswordRecovery (Login Controls)

  • 3-step password reset: UserName → Question → Success
  • Table-based HTML matching ChangePassword/CreateUserWizard patterns
  • All configurable labels, titles, instructions per step
  • Events: VerifyingUser, UserLookupError, VerifyingAnswer, AnswerLookupError, SendingMail, SendMailError
  • Templates: UserNameTemplate, QuestionTemplate, SuccessTemplate
  • Reuses existing LoginControls style sub-components + new SuccessTextStyle

Testing

  • 71 new bUnit tests (42 DetailsView + 29 PasswordRecovery)
  • 797 total tests passing, 0 failures
  • Integration tests: 2 smoke tests + 5 interaction tests for sample pages

Documentation

  • docs/DataControls/DetailsView.md — full component docs with migration guide
  • docs/LoginControls/PasswordRecovery.md — full component docs with migration guide
  • docs/Migration/DeferredControls.md — migration notes for Chart, Substitution, Xml (permanently deferred with Blazor alternatives)
  • mkdocs.yml updated, README.md updated

Samples

  • DetailsView sample: auto-generated rows, paging, edit mode
  • PasswordRecovery sample: 3-step flow with event handlers
  • NavMenu.razor and ComponentList.razor updated

Gate Review

Both components reviewed and APPROVED by Forge (Lead/Web Forms Reviewer).

Copilot AI and others added 19 commits February 9, 2026 17:08
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com>
…ends#333)

- Create CalendarSelectionMode enum (None, Day, DayWeek, DayWeekMonth)
- Refactor Calendar.SelectionMode from string to CalendarSelectionMode enum
- Remove .GetAwaiter().GetResult() blocking call in CreateDayRenderArgs
- Add Caption, CaptionAlign, UseAccessibleHeader properties
- Update tests and samples to use enum values
- Calendar: date selection, selection modes, styling, day/title formats, events

- FileUpload: basic upload, file type filtering, multiple files, disabled, styled

- ImageMap: navigate/postback/mixed hot spot modes, rectangle/circle/polygon shapes

- Updated NavMenu and ComponentList with links to all three new components
…ents into dev

# Conflicts:
#	docs/EditorControls/FileUpload.md
…Friends#338 merge

The FileUpload PR (FritzAndFriends#338) inadvertently reverted Sprint 1 gate review
entries from agent histories (beast, cyclops, forge, jubilee, rogue)
and downgraded the FileUpload InputFile decision in decisions.md.

Restored from commit f85aa42 (docs(ai-team): Sprint 1 gate review results).
Creates .agent.md files for all 6 team agents (Beast, Cyclops, Forge,
Jubilee, Rogue, Scribe) so they appear in GitHub Copilot's agent picker.
Content sourced from existing .ai-team/agents/*/charter.md files.
Squad is the single Copilot agent that delegates to the specialized
agents defined in .ai-team/agents/. Individual agent files were
incorrectly created  the correct pattern is one coordinator agent
(squad.agent.md) that routes work to Forge, Cyclops, Beast, Jubilee,
Rogue, and Scribe based on task type.
Session: 2026-02-10-sprint2-complete
Requested by: Jeffrey T. Fritz

Changes:
- Logged Sprint 2 session (4 components shipped with docs, samples, tests)
- Merged Sprint 2 design review decision from inbox
- Removed duplicate FileUpload InputFile decision from inbox (already consolidated)
- Appended Sprint 2 completion decision to decisions.md
- Propagated cross-agent updates to all 5 agent histories
…ents into dev

# Conflicts:
#	docs/UtilityFeatures/PageService.md
#	samples/AfterBlazorServerSide/Components/Pages/ControlSamples/Calendar/Index.razor
Session: 2026-02-11-sprint3-planning
Requested by: Jeffrey T. Fritz

Changes:
- Logged session to .ai-team/log/2026-02-11-sprint3-planning.md
- Merged 3 decisions from inbox into decisions.md
- Updated status.md to reflect 48/53 components complete
- Sprint 3 scope: DetailsView + PasswordRecovery
- Propagated cross-agent updates to all agent history files
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%)
DetailsView: Single-record data display with auto-generated rows, edit/insert
modes, paging, and full CRUD events. Inherits DataBoundComponent<T>.

PasswordRecovery: 3-step password reset wizard (UserName  Question  Success)
following ChangePassword/CreateUserWizard table-based patterns.

Also includes:
- 71 new bUnit tests (42 DetailsView + 29 PasswordRecovery), 797 total passing
- Documentation for both components
- Deferred controls migration guide (Chart, Substitution, Xml)
- Sample pages for both components
- Integration tests (smoke + interaction) for both sample pages
- NavMenu and ComponentList updated

Components: 50/53 complete (94%)
var rowIndex = 0;
@foreach (var field in fieldList)
{
var isAlternating = rowIndex % 2 == 1;

Check warning

Code scanning / CodeQL

Useless assignment to local variable Warning

This assignment to
isAlternating
is useless, since its value is never read.

Copilot Autofix

AI 4 months ago

In general, to fix a "useless assignment to local variable" warning, either (a) remove the variable and associated assignment if the value truly is not needed, or (b) if the value was intended to be used, update the code so that it is consumed (for example, for conditional logic or styling). Here, the calculation of isAlternating has no effect on the rendered output, so the safest behavior-preserving fix is to remove the unused variable declaration/assignment and keep the rest of the loop intact.

Specifically for src/BlazorWebFormsComponents/DetailsView.razor, within the @foreach (var field in fieldList) loop (around line 36–44), remove the line var isAlternating = rowIndex % 2 == 1;. If alternating-row behavior is desired in the future, it can be reintroduced by actually using this expression (for example, to set a CSS class), but that would change current behavior and goes beyond a minimal, non-functional fix. No new imports, methods, or definitions are needed; we only delete the unused variable.

Suggested changeset 1
src/BlazorWebFormsComponents/DetailsView.razor

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/src/BlazorWebFormsComponents/DetailsView.razor b/src/BlazorWebFormsComponents/DetailsView.razor
--- a/src/BlazorWebFormsComponents/DetailsView.razor
+++ b/src/BlazorWebFormsComponents/DetailsView.razor
@@ -35,7 +35,6 @@
 			var rowIndex = 0;
 			@foreach (var field in fieldList)
 			{
-				var isAlternating = rowIndex % 2 == 1;
 				<tr>
 					<td>@field.HeaderText</td>
 					<td>@field.GetValue(CurrentItem, CurrentMode)</td>
EOF
@@ -35,7 +35,6 @@
var rowIndex = 0;
@foreach (var field in fieldList)
{
var isAlternating = rowIndex % 2 == 1;
<tr>
<td>@field.HeaderText</td>
<td>@field.GetValue(CurrentItem, CurrentMode)</td>
Copilot is powered by AI and may make mistakes. Always verify output.
Comment on lines +362 to +367
foreach (var prop in properties)
{
if (!prop.CanRead) continue;

fields.Add(new DetailsViewAutoField(prop.Name, prop));
}

Check notice

Code scanning / CodeQL

Missed opportunity to use Where Note

This foreach loop
implicitly filters its target sequence
- consider filtering the sequence explicitly using '.Where(...)'.

Copilot Autofix

AI 4 months ago

To fix the problem, we should replace the manual in-loop filtering (if (!prop.CanRead) continue;) with an explicit LINQ filter on the properties sequence. Instead of iterating over all properties and skipping unreadable ones, we iterate only over readable properties using .Where(p => p.CanRead).

Concretely, in src/BlazorWebFormsComponents/DetailsView.razor.cs, within GenerateAutoFields(), update the foreach (var prop in properties) loop to iterate over properties.Where(prop => prop.CanRead) and remove the if (!prop.CanRead) continue; check. No new imports or helpers are required because System.Linq is already imported. This change preserves behaviour: we still add a DetailsViewAutoField for every readable property and ignore unreadable ones.

Suggested changeset 1
src/BlazorWebFormsComponents/DetailsView.razor.cs

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/src/BlazorWebFormsComponents/DetailsView.razor.cs b/src/BlazorWebFormsComponents/DetailsView.razor.cs
--- a/src/BlazorWebFormsComponents/DetailsView.razor.cs
+++ b/src/BlazorWebFormsComponents/DetailsView.razor.cs
@@ -359,10 +359,8 @@
 			var fields = new List<DetailsViewField>();
 			var properties = typeof(ItemType).GetProperties(BindingFlags.Public | BindingFlags.Instance);
 
-			foreach (var prop in properties)
+			foreach (var prop in properties.Where(prop => prop.CanRead))
 			{
-				if (!prop.CanRead) continue;
-
 				fields.Add(new DetailsViewAutoField(prop.Name, prop));
 			}
 
EOF
@@ -359,10 +359,8 @@
var fields = new List<DetailsViewField>();
var properties = typeof(ItemType).GetProperties(BindingFlags.Public | BindingFlags.Instance);

foreach (var prop in properties)
foreach (var prop in properties.Where(prop => prop.CanRead))
{
if (!prop.CanRead) continue;

fields.Add(new DetailsViewAutoField(prop.Name, prop));
}

Copilot is powered by AI and may make mistakes. Always verify output.
…ests

- Remove duplicate Pages/ControlSamples/FileUpload/Default.razor that conflicted
  with Components/Pages/ControlSamples/FileUpload/Index.razor (same @page route
  caused System.InvalidOperationException: ambiguous routes on every page load)
- Fix PasswordRecovery integration tests: InputText in .NET 10 renders without
  explicit type=text attribute; use ID-based selectors instead
- Fix DetailsView EditButton test: use exact role match to avoid matching sidebar
  links; use Locator.WaitForAsync for Blazor interactive DOM updates
- ChangePassword/CreateUserWizard: use ID-based selectors instead of
  type-based selectors (.NET 10 InputText rendering change)
- Image/ImageMap: replace external via.placeholder.com URLs with local
  SVG placeholder images to eliminate network dependency
- TreeView/Images: fix image path /img/C#.png -> /img/CSharp.png
- Calendar: filter ASP.NET Core structured log messages from console
  error assertions (timestamp-prefixed messages are not real errors)
- Remove duplicate ImageMap InlineData from EditorControl tests
  (ImageMap is categorized as Navigation Control per team decisions)

Result: 111/111 integration tests passing, 797/797 bUnit tests passing
Session: 2026-02-12-boy-scout-test-fixes
Requested by: Jeffrey T. Fritz

Changes:
- Logged session to .ai-team/log/
- Merged 3 decisions from inbox into decisions.md
- Propagated cross-agent updates to Jubilee and Colossus history
DetailsViewAutoField.GetValue() was ignoring the mode parameter, always
rendering plain text regardless of Edit/Insert mode. Now renders:
- ReadOnly: plain text (unchanged)
- Edit: <input type="text" value="{current}"> pre-filled
- Insert: <input type="text" value=""> empty

Added integration test DetailsView_EditMode_RendersInputTextboxes that
verifies clicking Edit produces input textboxes and Cancel returns to
plain text.

Result: 112/112 integration tests passing, 797/797 bUnit tests passing
Session: 2026-02-12-detailsview-edit-mode-fix
Requested by: Jeffrey T. Fritz

Changes:
- Logged session
- Merged decisions from inbox
- Updated agent histories
…criteria

- Add 4 missing integration tests: DetailsView_EmptyData, PasswordRecovery full flow, help link, custom text
- Record milestone exit criteria: samples + integration tests + all green required before submission
- Total: 116/116 integration tests passing
…p to Navigation

- Merged two 'Utility Features' TreeNode branches into one (ID Rendering + PageService)
- Moved ImageMap from Editor Components to Navigation Components per team decision
- Alphabetized Editor Components entries (Button before Calendar, HyperLink before Image)
…tion

- Create DataBinder sample: Eval(), shorthand Eval, formatted Eval, modern alternative
- Create ViewState sample: dictionary API with counter demo, settings form, modern alternative
- Alphabetize all NavMenu TreeView branches, ComponentList columns, and mkdocs.yml nav
- Move ImageMap from Editor Controls to Navigation Controls in ComponentList and mkdocs
- Add Utility Features section to ComponentList with all 4 entries
- Add 4 integration tests: 2 smoke + 2 interaction (120/120 passing)
@csharpfritz csharpfritz force-pushed the dev branch 2 times, most recently from 97eedc5 to 1219f33 Compare February 25, 2026 17:25
@csharpfritz csharpfritz closed this Mar 5, 2026
@csharpfritz csharpfritz deleted the sprint3/detailsview-passwordrecovery branch March 5, 2026 21:06
csharpfritz added a commit that referenced this pull request May 6, 2026
…ntsTransform

- ServerCodeBlockTransform (Order 510): converts <% if/else/foreach %> statement
  blocks to Razor @if/@foreach syntax; sanitizes raw <% %> inside @* *@ comments
- TemplateFieldChildComponentsTransform (Order 620): wraps ItemStyle/HeaderStyle/
  FooterStyle inside TemplateField with <ChildComponents> wrapper for BWFC compat
- Both registered in Program.cs DI and TestHelpers.CreateDefaultPipeline()
- 46 new tests (39 transform + 7 integration), 545 total CLI tests passing

Closes Run 33 gaps #3 and #5.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
csharpfritz added a commit that referenced this pull request May 8, 2026
* feat(cli): compile page code-behind safely

Merge the page runtime shim, emit compile-safe page code-behind into the generated app, and add explicit BWFC global usings for local project-reference scaffolds. Include focused test updates plus Wingtip run29-run31 reports documenting the benchmark progression.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(cli): port NuGet asset extraction and EDMX conversion to native C#

- Add NuGetStaticAssetExtractor service (replaces Migrate-NugetStaticAssets.ps1 shell-out)
- Add EdmxToEfCoreConverter service (replaces Convert-EdmxToEfCore.ps1 shell-out)
- Add MarkupReferencedMemberStubTransform and ValidatorGenericTypeTransform
- Add deprecation warnings to all 4 PS1 scripts
- Update CLI docs for direct adoption
- CLI now has zero runtime PowerShell dependencies
- 506 tests passing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: WingtipToys Run 32 benchmark output and sample improvements

- Run 32 report and screenshots (25/25 tests passing)
- AfterWingtipToys markup and code-behind fixes from gap analysis
- Migration artifacts for WingtipToys

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(cli): add ServerCodeBlockTransform and TemplateFieldChildComponentsTransform

- ServerCodeBlockTransform (Order 510): converts <% if/else/foreach %> statement
  blocks to Razor @if/@foreach syntax; sanitizes raw <% %> inside @* *@ comments
- TemplateFieldChildComponentsTransform (Order 620): wraps ItemStyle/HeaderStyle/
  FooterStyle inside TemplateField with <ChildComponents> wrapper for BWFC compat
- Both registered in Program.cs DI and TestHelpers.CreateDefaultPipeline()
- 46 new tests (39 transform + 7 integration), 545 total CLI tests passing

Closes Run 33 gaps #3 and #5.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: Run 33 benchmark report and gap analysis

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: WingtipToys migration Run 34 — 25/25 tests passing

- L1 migration toolkit run with ServerCodeBlockTransform (Order 510) and
  TemplateFieldChildComponentsTransform (Order 620) — both confirmed working
- Full repair cycle: 266 → 0 build errors
- Implemented CartSessionStore (singleton) + CartService (scoped) with ASP.NET
  Core session-key architecture so cart state survives SSR→circuit transition
- Added Minimal API endpoints /AddToCart and /RemoveFromCart as HTTP 302
  round-trips, making cart mutations testable with Playwright NetworkIdle
- Removed @page directive from AddToCart.razor to resolve ambiguous route conflict
- Run report and 5 screenshots at dev-docs/migration-tests/wingtiptoys/run34/
- Bishop history.md updated with architectural learnings

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix Run 34 shim and transform gaps

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add Run 35 gap transforms

Implement CLI fixes for G1, G3, G8, and G10 by normalizing display expressions, rewriting EF6 DbContext constructors, extending ServerShim compatibility, and rewriting HttpUtility calls to WebUtility. Include transform registration updates, source-copy coverage, docs, and regression tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix DisplayExpressionTransform to emit idiomatic @expr for simple expressions

Simple dotted identifiers (Item.ProductName) now emit @Item.ProductName
Complex expressions (method calls, operators) still emit @(expr)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix Run 37 gaps: G1 display-expr, G2 ScriptManager strip, G4 compile-surface stubs

G1: Remove String.Format from DisplayExpressionTransform negative lookahead
    so format expressions become @(String.Format(...)) instead of leaking as raw <%#:

G2: Add ScriptManagerStripTransform (Order 255) that removes asp:ScriptManager,
    webopt:bundlereference, and Scripts.Render PlaceHolder blocks from master pages

G4: Add CompileSurfaceStubTransform that detects pages with Identity/external API
    references and emits build-safe stubs, preserving originals in migration-artifacts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Protect BWFC data control migrations

Add explicit migration skill rules that forbid replacing BWFC data controls with manual HTML, and update the CLI migration pipeline to keep ListView, FormView, GridView, Repeater, and related templates on BWFC components. Preserve ItemType, add template Context="Item" normalization, and keep query-bound pages on SelectMethod wrappers so generated markup stays valid for BWFC controls.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix FormView SSR first-render and SessionShim string round-trip

- FormView: establish CurrentItem during OnParametersSet() so SSR
  renders item content on first request
- SessionShim: handle raw string session values consistently for
  cross-request persistence

Discovered during WingtipToys migration benchmark Run 39.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add WingtipToys migration benchmark Run 39

25/25 acceptance tests passing. BWFC data controls preserved:
- ProductList uses ListView (not manual HTML)
- ProductDetails uses FormView (not manual HTML)
- ShoppingCart uses GridView (not manual HTML)

Total time: 38:34. Gaps found: FormView SSR first-render,
SessionShim string round-trip, acceptance-path runtime wiring.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add WingtipToys migration benchmark reports Run 35-38

Run 35: 25/25 tests, 17:34 total
Run 36: 25/25 tests, 10:12 total (best time)
Run 37: 25/25 tests, 18:39 total
Run 38: 25/25 tests, 21:22 total

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add regression tests for FormView SSR and SessionShim round-trip

- FormView: verify CurrentItem set during OnParametersSet for SSR
- SessionShim: verify string and object values round-trip correctly

Prevents regression of bugs discovered in WingtipToys Run 39.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add runtime scaffold detection for benchmark migrations

RuntimeDetector scans source for EF contexts, session usage, and
Identity pages. ProgramCsEmitter generates matching Program.cs
service registrations and middleware.

Reusable across all Web Forms migrations, not WingtipToys-specific.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Run Wingtip benchmark 40

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: log Run 40 benchmark results and merge decisions

Session: Scribe memory consolidation (2026-05-07T12:43)
Decisions merged: 19 inbox files (14026 bytes total)
Orchestration log: bishop-run40 entry
Session log: run40-benchmark entry
Bishop history: summarized from 23915 → 2833 bytes

Changes:
- Created .squad/decisions/decisions.md (17503 bytes, all decisions consolidated)
- Created .squad/orchestration-log/2026-05-07T12-43-bishop-run40.md (2125 bytes)
- Created .squad/log/2026-05-07T12-43-run40-benchmark.md (1399 bytes)
- Updated .squad/agents/bishop/history.md (summarized, 2833 bytes)
- Updated .squad/agents/colossus/history.md (Run 40 team update appended)
- Deleted .squad/decisions/inbox/* (19 files)
- No deduplication conflicts found

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix BWFC data control template emission for ListView, FormView, GridView

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: log template emission fix session

Session: 2026-05-07-template-emission-fix
Requested by: Bishop (via Scribe)

Changes:
- Merged 1 inbox decision: GridView ItemType propagation + ListView context normalization
- Created orchestration log: bishop-template-emission-fix
- Created session log: template-emission-fix
- Updated Bishop history with transform learnings
- Updated Colossus history with cross-agent notification
- CLI tests: 598 → 603 passing (+5 for template emission fixes)
- Commit 1bdbb1f validated in orchestration log

* Add CartSessionKeyTransform for stable cart persistence

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add compile-surface quarantine for non-migratable pages

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* WingtipToys migration benchmark Run 41

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix quarantine allowlist, static files, and antiforgery gaps from Run 41

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(ai-team): Scribe memory consolidation

Session: 2026-05-07-scribe-memory-consolidation
Requested by: Copilot CLI

Changes:
- Merged 4 inbox files to decisions.md
- Deleted merged inbox files
- Deduplicated team decisions
- Created 4 orchestration log entries (bishop-23, bishop-22, bishop-21, rogue-1)
- Updated 6 agent history files with team update
- No history summarization needed (all < 15KB)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* WingtipToys migration benchmark Run 42 — 25/25, 22:00, 96% first-pass

Run 42 validates quarantine allowlist, static file middleware, and SSR
antiforgery fixes from Run 41. Key results:
- 25/25 acceptance tests passing
- 96% first-pass rate (24/25, only auth redirect needed repair)
- 22:00 total time (54% faster than Run 41's 47:54)
- Build: 87 initial errors → 0 in single repair round
- Quarantine correctly scoped to Admin, Checkout, PayPal pages only

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update copilot-instructions.md with CLI, migration toolkit, and migration rules

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add migration benchmark progression and sample complexity ordering

- Reorder samples/ in project structure by increasing complexity
- Mark WingtipToys as current benchmark focus
- Add Migration Benchmark Progression table (WingtipToys → ContosoUniversity → DepartmentPortal)
- Note that DepartmentPortal is the most sophisticated future target

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(ai-team): Merge Bishop spawn decisions and logs

Session: 2026-05-08-g3-g4-fixes
Requested by: Jeff

Changes:
- Merged inbox decision: Update Copilot migration instructions with CLI and toolkit guidance
- Created orchestration log for Bishop spawn (G3/G4 CLI fixes)
- Created session log for memory tracking
- Cleared decisions/inbox/

* Fix G3 auth redirect scaffold and G4 validator type inference

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Run 43: 25/25 acceptance tests — G3+G4 validated, runtime fixes

- G3: Auth redirect scaffold with POST-based LoginHandler/RegisterHandler
- G4: RequiredFieldValidator type inference (TextBox→string)
- Build repair: 86→0 errors in 2 rounds
- Runtime fixes: SQL Server→SQLite, seed data, route aliasing, cart page
- New gaps identified: G5 (db provider), G6 (route aliasing), G7 (redirect page quarantine)
- 6 screenshots captured, full report at dev-docs/migration-tests/wingtiptoys/run43/

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix G6 route aliasing and G7 quarantine bypass

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat: add FormView DataItem parameter + Content SSR fallback + Run 44 (23/25)

- FormView: added DataItem parameter that wraps single item into Items
  collection, fixing empty rendering for single-record data binding
- Content: added ShouldRenderInline fallback for SSR mode (no MasterPage)
- Run 44 benchmark: 23/25 acceptance tests passing (92%)
- All 2904 BWFC unit tests pass across net8.0/net9.0/net10.0
- Updated AfterWingtipToys sample with latest migration output

Remaining failures:
- UpdateCartQuantity: BoundField renders read-only (needs TemplateField)
- RegisterAndLogin: Auth flow timeout (not BWFC-related)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(ai-team): Merge bishop TemplateField fix decisions; orchestration & session log

Session: 2026-05-08-templatefield-fix
Requested by: Copilot

Changes:
- Merged bishop-g3-g4-fixes.md, bishop-g6-g7-fixes.md into decisions.md (2 files)
- Wrote orchestration log for CLI TemplateField transform fix (Run 44 regression)
- Wrote brief session log for decision merge
- decisions.md now 51,720 bytes (scheduled archival next session)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat: WingtipToys Run 45 — 25/25 acceptance tests, TemplateField preserved

- CLI correctly preserves TemplateField columns (verified: not a CLI bug)
- L2 repair maintains TemplateField with editable inputs in ShoppingCart
- All 3 TemplateField columns (Quantity/TextBox, Item Total/calc, Remove/CheckBox) intact
- Added CLI TemplateField preservation tests (627 CLI tests passing)
- 25/25 Playwright acceptance tests pass including cart quantity update
- Total runtime: ~14 minutes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(ci): remove WingtipToys tests from CI integration tests

WingtipToys acceptance tests require SQL Server and are benchmark tests,
not CI tests. They should only run locally via src/WingtipToys.AcceptanceTests.

- Remove ProjectReference to AfterWingtipToys from AfterBlazorServerSide.Tests.csproj
- Remove WingtipToysAcceptanceTests.cs and WingtipToysPlaywrightFixture.cs
- Keep standalone src/WingtipToys.AcceptanceTests/ for local benchmarks

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* ci: disable CodeQL on PRs/push, keep manual dispatch only

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* ci: disable Squad workflows, keep manual dispatch only

All 11 Squad workflows (squad-ci, squad-docs, squad-heartbeat,
squad-insider-release, squad-issue-assign, squad-label-enforce,
squad-preview, squad-promote, squad-release, squad-triage,
sync-squad-labels) now only trigger via workflow_dispatch.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants