You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Carve GridViewDescriptor — its ItemsHost<> strategy pre-mounts every
item into GridView.Items (no virtualization), diverging from legacy
MountGridView's ItemsSource+CCC lazy realization. A|B tests still
pass, but production memory/lifecycle would silently regress; closing
needs hand-coded GridViewHandler or RecyclingItemsHost<> shape.
Updated coverage table: 75 routed / 12 deferred / 8 primitives.
* Align legacy UpdateNavigationView with V1 NavigationViewDescriptor —
add PaneDisplayMode, IsSettingsVisible, conditional PaneTitle,
MenuItems rebuild on ref-change, and SelectedItem re-selection
(with new FindNavItemByTag helper). Previously legacy only wrote
a subset of these on update; reviewer correctly flagged the A|B
divergence for record-with updates that change MenuItems / Selected.
* Fix PreMountedItems<> release fallback at ChildrenStrategy.cs:577 —
the count-drift path was clamping oldCount=items.Count and continuing
positional reconciliation, which would index past oldSource bounds
when items.Count > oldSource.ItemCount or skip stale source items'
teardown when smaller. Replaced with the same full-rebuild path as
the type-mismatch release fallback above.
* Doc fix: remove ModifiedElement from the tracker's composition-
primitive carve list — it's unwrapped before V1/legacy dispatch at
the top of Reconciler.Mount, not a switch arm; coverage table stays
at 8 primitives.
Validation: dotnet test 9134/0; full V1 ON selftest 4410/0;
full V1 OFF selftest 4410/0 (each suite required one re-run to clear
the known FloatRoot/Reliability/DockHooks docking flake family).
Ignored 9 github-code-quality bot comments: 8 are integer-valued
double == checks in test fixtures (values are assigned constants,
exact equality is reliable); 1 claims WinUI FontFamily is IDisposable
(it is not).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
-**Coverage of V1-reachable surface:**76 / 87 ≈ **87%** (excludes the 8 composition primitives that are permanently above the protocol).
1448
-
-**Coverage of all element-type switch arms:**76 / 95 ≈ **80%**.
1449
-
-**Path to 100% reachable:** the next PR ports the 11 deferred (overlays, NavigationHost, TabView gap closure, XamlHost/Page unification). Phase 4 cleanup follows.
1447
+
-**Coverage of V1-reachable surface:**75 / 87 ≈ **86%** (excludes the 8 composition primitives that are permanently above the protocol).
1448
+
-**Coverage of all element-type switch arms:**75 / 95 ≈ **79%**.
1449
+
-**Path to 100% reachable:** the next PR ports the 12 deferred (overlays, NavigationHost, TabView gap closure, GridView CCC virtualization, XamlHost/Page unification). Phase 4 cleanup follows.
1450
1450
1451
1451
**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/`:
-**Coverage of all switch arms:**75 / 95 ≈ **79%**.
1082
+
-**Path to 100% reachable:** the follow-up PR closes the 12 deferred:
1057
1083
1. Port the 7 overlay descriptors (ContentDialog, Flyout, Popup, MenuBar, MenuFlyout, CommandBar, CommandBarFlyout) — needs a decorator strategy variant for modal lifecycle beyond `IDecoratorElementHandler`.
1058
1084
2. Refactor `NavigationHostElement` cleanup path so V1 can own it (internal-expose `MountNavigationHost` / `UpdateNavigationHost`, duplicate cleanup logic in the V1 handler, remove the `UnmountRecursive` intercept).
1059
1085
3. Close `TabViewDescriptor` gaps (engine post-children mount-hook + `ImperativeBridged` for named slots + port `BuildTabHeader` / `BuildPinButton` / `TryUpdatePinHeaderInPlace` + drag pipeline trampolines + conditional `SelectedIndex` write + in-place `CanUpdate`).
1060
-
4. Unify `XamlInterop.Register` with V1 auto-registration so `XamlHostElement` / `XamlPageElement` descriptors can register without `EnsureRegistrableElementType` clash.
1086
+
4. Close `GridViewDescriptor` lifecycle gap — either author a Phase 1 hand-coded `GridViewHandler` mirroring `ListViewHandler`'s CCC virtualization, or introduce a `RecyclingItemsHost<>` ChildrenStrategy variant.
1087
+
5. Unify `XamlInterop.Register` with V1 auto-registration so `XamlHostElement` / `XamlPageElement` descriptors can register without `EnsureRegistrableElementType` clash.
1061
1088
1062
1089
Phase 4 cleanup (deletion of legacy switch arms + `UseV1Protocol`
1063
-
flag) is unblocked for the 76 routed arms today; the remaining 11
1090
+
flag) is unblocked for the 75 routed arms today; the remaining 12
1064
1091
arms unblock as the follow-up PR lands each closure.
0 commit comments