Skip to content

Commit 3e28c36

Browse files
spec(047): Phase 3 finish — honest scope accounting (deferred/not-attempted)
Replaces the "100% V1 dispatch coverage now reached" claim in the tracker with the precise statement: every typed-items host family scoped by Phase 3's batch list has a V1 descriptor. Adds an explicit "Phase 3 deferred / not-attempted" enumeration to both §14 and the tracker covering the long tail that was never on the Phase 3 batch list — ContentDialog / Flyout / Popup family, navigation / title-bar / media family, ItemsView / ItemContainer / plain GridViewElement, interop + a11y wrappers, and the Reactor composition primitives that likely should stay out of the V1 handler protocol entirely. Also flags TemplatedFlipViewElement<T> as the one genuine engine gap still carried from Phase 3 close-out (FlipView lacks ContainerContentChanging; would need a PreMountedItems ChildrenStrategy). The intermediate base TemplatedFlipViewElementBase is reserved in the element hierarchy for that future port. No code changes — docs accuracy only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent ae52ee8 commit 3e28c36

2 files changed

Lines changed: 63 additions & 4 deletions

File tree

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1431,7 +1431,9 @@ ARM64 stable-AC re-capture on `LAPTOP-4MEP83VI` remains deferred for the §14 ra
14311431

14321432
- **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-
**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.
1434+
**Phase 3 finish carry-forwards:** none remaining for the typed-items host families that were on Phase 3's scope (LazyVStack/HStack, ItemsRepeater<T>, ListView<T>, GridView<T>, TreeView, FlipView (simple), TabView, Pivot). The engine surface is complete. Production swap (Phase 4 cleanup) registers each descriptor in `RegisterV1BuiltInHandlers` and deletes the matching legacy `MountXxx` switch arm.
1435+
1436+
**Phase 3 deferred / not-attempted** (recorded for the Phase 3.5 / Phase 4 prelude — element types in the legacy `Reconciler.Mount` switch that have neither a Phase 1 V1 handler nor a Phase 3 descriptor; see `tasks/047-extensible-control-model-implementation.md` for the full enumeration). One genuine carve from close-out remains: `TemplatedFlipViewElement<T>` (the typed FlipView peer — needs a `PreMountedItems` ChildrenStrategy since FlipView lacks `ContainerContentChanging`). The rest of the deferred list — `GridViewElement` (plain), `ItemsViewElementBase`, dialog / overlay family (`ContentDialog`, `Flyout`, `Popup`, `MenuBar`, `MenuFlyout`, `CommandBar`, `CommandBarFlyout`), heavy / specialized controls (`WebView2`, `NavigationView`, `TitleBar`, `MediaPlayerElement`, `AnimatedVisualPlayer`, `MapControl`, `SemanticZoom`, `AnnotatedScrollBar`, `RefreshContainer`, `SwipeControl`, `ParallaxView`), interop / a11y (`SemanticElement`, `AnnounceRegion`, `XamlHost`, `XamlPage`, and the already-escape-hatched `IconElement`), and Reactor composition primitives (`Component`, `Func`, `Memo`, `ErrorBoundary`, `CommandHost`, `Validation.*`) — was never on the Phase 3 batch list. The composition primitives likely should NOT route through the V1 handler protocol (they sit above it); the rest are straightforward descriptor ports (or, where they'd surface engine gaps, would follow the close-out / finish pattern of landing the engine extension before the port).
14351437

14361438
**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/`:
14371439

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

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -920,10 +920,22 @@ carve-outs:
920920
added (the element type is new — there was no legacy arm before).
921921
DSL surface: `ItemsRepeater<T>` factory in `Dsl.cs`. Single
922922
base-derived `ItemsRepeaterDescriptor` catches every closed-T
923-
variant. 11 new fixtures (Desc_ItemsRepeater_*). 100% V1 dispatch
924-
coverage now reached.
923+
variant. 11 new fixtures (Desc_ItemsRepeater_*). Every typed-items
924+
host family scoped in Phase 3 now has a V1 descriptor (the
925+
precise close-out claim — the broader "every Element type"
926+
audit is captured under the "Phase 3 deferred / not-attempted"
927+
section below).
925928
- [x] **G3 typed lists — `TreeView`, `FlipView`, `TabView`, `Pivot`**
926-
closed by Phase 3 finish.
929+
closed by Phase 3 finish. **Note:** "FlipView" here is the
930+
simple non-templated `FlipViewElement` (Element[] items). The
931+
typed `TemplatedFlipViewElement<T>` peer stays carved exactly
932+
as documented at Phase 3 close-out — FlipView lacks
933+
`ContainerContentChanging` so the realization pipeline used by
934+
`TemplatedListView<T>` / `TemplatedGridView<T>` doesn't apply;
935+
a `PreMountedItems` strategy would land it but no fixture
936+
currently demands it. The intermediate marker base
937+
`TemplatedFlipViewElementBase` is reserved in the element
938+
hierarchy for that future port.
927939
- **TreeView** via new `TreeChildren<TElement, TControl>`
928940
strategy (hierarchical, positional rebuild on Update,
929941
recursive `ContentElement` mount).
@@ -939,6 +951,51 @@ carve-outs:
939951
- 29 new fixtures across the four descriptors (Desc_TreeView_*,
940952
Desc_FlipView_*, Desc_TabView_*, Desc_Pivot_*). Total Desc_
941953
baseline: 602 ok / 0 failures both V1 ON and V1 OFF.
954+
(Total grows to 613 after Port (7) ItemsRepeater<T> above.)
955+
956+
**Phase 3 deferred / not-attempted** (element types in the legacy
957+
`Reconciler.Mount` switch that have neither a Phase 1 V1 handler nor a
958+
Phase 3 descriptor — out of scope for the Phase 3 batch list, recorded
959+
here for a future Phase 3.5 / Phase 4 prelude). Cross-referenced from
960+
the audit at the end of `spec/047-phase3-finish`:
961+
962+
- **Genuine engine gap:** `TemplatedFlipViewElement<T>` — close-out
963+
carve. Needs a `PreMountedItems` ChildrenStrategy. The intermediate
964+
base `TemplatedFlipViewElementBase` already exists for the
965+
base-derived registration.
966+
- **Untyped items hosts not ported:** `GridViewElement` (the plain
967+
Element[] variant — `ListViewElement` got a Phase 1 V1 handler,
968+
GridView did not), `ItemsViewElementBase` (the higher-level
969+
`ItemsView` wrapping its own ItemsRepeater), `ItemContainerElement`.
970+
- **Dialog / overlay family:** `ContentDialogElement`,
971+
`FlyoutElement`, `PopupElement`, `MenuBarElement`,
972+
`MenuFlyoutElement`, `CommandBarElement`,
973+
`CommandBarFlyoutElement`. Button-family `Flyout` ships through the
974+
`.OneWayBridged` setter on the button descriptors; the standalone
975+
flyout elements are their own legacy paths.
976+
- **Heavy / specialized controls:** `WebView2Element`,
977+
`NavigationViewElement`, `NavigationHostElement`,
978+
`TitleBarElement`, `MediaPlayerElementElement`,
979+
`AnimatedVisualPlayerElement`, `MapControlElement`,
980+
`SemanticZoomElement`, `AnnotatedScrollBarElement`,
981+
`RefreshContainerElement`, `SwipeControlElement`,
982+
`ParallaxViewElement`.
983+
- **Polymorphic / interop / a11y:** `IconElement` (already documented
984+
as escape-hatched — polymorphic mount), `SemanticElement`,
985+
`AnnounceRegionElement`, `XamlHostElement`, `XamlPageElement`.
986+
- **Reactor infrastructure (likely SHOULD stay out of V1 dispatch):**
987+
`ComponentElement`, `FuncElement`, `MemoElement`,
988+
`ErrorBoundaryElement`, `CommandHostElement`, `ModifiedElement`,
989+
`Validation.FormFieldElement` /
990+
`ValidationVisualizerElement` / `ValidationRuleElement`. These are
991+
Reactor composition primitives, not WinUI control wrappers — they
992+
sit above the V1 handler protocol rather than being consumers of
993+
it.
994+
995+
The "100% V1 dispatch" goal as scoped by §14's Phase 3 batches IS
996+
met (every batch entry has a V1 handler or descriptor). The list
997+
above is genuine post-Phase-3 scope, not a regression against the
998+
shipped Phase 3 plan.
942999

9431000
**Carry-forward known defects** (from Phase 1):
9441001

0 commit comments

Comments
 (0)