Skip to content

Commit ae52ee8

Browse files
spec(047): Phase 3 finish — §14 + tracker close-out (Port (7) landed)
Flips Port (7) ItemsRepeater<T> from carry-forward to landed. §14's "Phase 3 finish carry-forwards" list now reads "none remaining" — every typed-items host has a V1 descriptor and the engine surface is complete. The production swap (RegisterV1BuiltInHandlers wiring + legacy switch deletion) is Phase 4 cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4aa7347 commit ae52ee8

2 files changed

Lines changed: 13 additions & 7 deletions

File tree

docs/specs/047-extensible-control-model.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,9 +1429,9 @@ ARM64 stable-AC re-capture on `LAPTOP-4MEP83VI` remains deferred for the §14 ra
14291429
- **Port (9) FlipView** — reuses the existing `ItemsHost<>` strategy (verifying the handoff alternative (b)). `FlipView.Items` is a flat `IList<object>` sink; the engine pre-mounts each `Element` item through ItemsHost's existing dispatch body. No new `PreMountedItems` strategy needed. `SelectedIndex` + `OnSelectedIndexChanged` round-trip via `.HandCodedControlled` (new `FlipViewEventPayload`).
14301430
- **Ports (10) TabView + (11) Pivot** — new `TabItemsHost<TElement, TControl, TItem>` ChildrenStrategy shared between both. Each item provides Header + Element Content; the descriptor's `CreateContainer` lambda builds the per-host container (`WinUI.TabViewItem` with `IsClosable` + `IconSource`; `WinUI.PivotItem` with Header + Content). Positional rebuild on Update — `ContentControl`-based walk unmounts each existing container's content before the collection clears. TabView's `OnTabCloseRequested` + `OnAddTabButtonClick` wire via `.HandCodedEvent` against a new `TabViewEventPayload`; Pivot reuses `FlipViewEventPayload` for its single `SelectionChanged` slot. **Known scope:** TabView's `TabStripHeader` / `TabStripFooter` Elements + spec 045 §2.4 docking drag pipeline + §2.2 pinnable headers stay on the legacy arm; common-case TabView ports through.
14311431

1432-
**Phase 3 finish carry-forwards** (for a follow-up session — engine surface is sufficient; element/DSL work remaining):
1432+
- **Port (7) ItemsRepeater<T>** — new `ItemsRepeaterElementBase` + `ItemsRepeaterElement<T>` records modeled on `LazyStackElementBase` (the base implements `IKeyedItemSource` + `IItemsRepeaterFactorySource` so it flows through Engine (1)'s arm without new engine work). Distinct from Lazy*Stack: no hard-coded `StackLayout` (nullable `Layout` property — author supplies any `WinUI.Layout`) and no implicit `ScrollViewer` wrap (host externally for scrolling). Legacy `MountItemsRepeater` / `UpdateItemsRepeater` arms added for V1 OFF parity (there was no legacy arm before — the element type is new). DSL surface: `ItemsRepeater<T>(items, keySelector, viewBuilder)` factory in `Dsl.cs` matching `LazyVStack` / `LazyHStack`. Single base-derived descriptor on `ItemsRepeaterElementBase` catches every closed-T variant via `RegisterHandlerForDerivedTypes`.
14331433

1434-
- **Port (7) `ItemsRepeater<T>` G2** — requires a new `ItemsRepeaterElement<T>` element + DSL surface. Engine (1)'s ItemsRepeater arm is already proven by Port (6).
1434+
**Phase 3 finish carry-forwards:** none remaining — every typed-items host has a V1 descriptor and the engine surface is complete. Production swap (Phase 4 cleanup) registers each descriptor in `RegisterV1BuiltInHandlers` and deletes the matching legacy `MountXxx` switch arm.
14351435

14361436
**Phase 3 finish advisory perf** — Cloud PC x64 re-capture under `docs/specs/047/phase3-results/CPC-ander-YTZ3O-x64-advisory/2026-05-28-phase3-finish-3x5/` (n=15, 3 launches × 5 reps). V1 ON (descriptors) vs V1 OFF (today), against prior `2026-05-27-phase3-closeout-3x5/`:
14371437

docs/specs/tasks/047-extensible-control-model-implementation.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -911,11 +911,17 @@ carve-outs:
911911
base-derived descriptor catches every closed-T variant. Behavior
912912
diff: descriptor's TControl is `WinUI.ItemsRepeater` directly
913913
(no auto-`ScrollViewer` wrapping).
914-
- [ ] **`ItemsRepeater<T>` G2 port** — carried forward. Requires a new
915-
`ItemsRepeaterElement<T>` element + DSL surface that doesn't
916-
exist today (only `ItemsViewElementBase` for the higher-level
917-
`ItemsView`). Engine arm proven by Port (6); shipping the
918-
element + DSL is a follow-up.
914+
- [x] **`ItemsRepeater<T>` G2 port** — closed by Phase 3 finish. New
915+
`ItemsRepeaterElementBase` + `ItemsRepeaterElement<T>` records
916+
(Element.cs) model on `LazyStackElementBase` and implement
917+
`IKeyedItemSource` + `IItemsRepeaterFactorySource`, so dispatch
918+
flows through Engine (1)'s ItemsRepeater arm with no new engine
919+
work. Legacy `MountItemsRepeater` / `UpdateItemsRepeater` arms
920+
added (the element type is new — there was no legacy arm before).
921+
DSL surface: `ItemsRepeater<T>` factory in `Dsl.cs`. Single
922+
base-derived `ItemsRepeaterDescriptor` catches every closed-T
923+
variant. 11 new fixtures (Desc_ItemsRepeater_*). 100% V1 dispatch
924+
coverage now reached.
919925
- [x] **G3 typed lists — `TreeView`, `FlipView`, `TabView`, `Pivot`**
920926
closed by Phase 3 finish.
921927
- **TreeView** via new `TreeChildren<TElement, TControl>`

0 commit comments

Comments
 (0)