Commit f0d3e81
spec(047): §14 Phase 3 completion — register Phase 3 descriptors + close engine gaps (#440)
* Spec 047 §14 Phase 3 completion (1/N): PreMountedItems + TemplatedFlipView descriptor
Adds the engine-gap closer carried forward from Phase 3 finish: the typed
`TemplatedFlipViewElement<T>` peer now routes through V1 dispatch via a
new `PreMountedItems<TElement, TControl>` ChildrenStrategy and a
base-derived `TemplatedFlipViewDescriptor` registered on
`TemplatedFlipViewElementBase`.
Engine
- IItemsBinderStrategy.Bind signature widened to take `Element? oldElement`
(null on Mount, set on Update). Keeps the consolidated dispatch arm in
V1HandlerAdapter + DescriptorHandler to a single is-check + interface call.
All 4 existing implementers ignore the new param (they read prior state
from the control) — only the new PreMountedItems<> uses it.
- PreMountedItems<TElement, TControl> in ChildrenStrategy.cs: pre-mounts every
item up-front through IItemViewSource into the control's IList<object> Items
sink, and on Update positionally reconciles via Reconciler.ReconcileV1Child
for shared slots, appending new tail slots and truncating excess. Rubber-duck
recommendations adopted: Debug.Assert on (oldElement is TElement) and on
`items.Count == oldSource.ItemCount` with release fallback to full rebuild
if the invariant breaks; throws InvalidOperationException (not silent null
writes) if mount/reconcile returns null in a slot.
Descriptor
- TemplatedFlipViewDescriptor uses PreMountedItems<> + HandCodedControlled
for SelectedIndex with the existing FlipViewEventPayload shared trampoline
slot. `callback` returns a synthetic non-null delegate gated on
`el.HasCallbacks` so the engine only subscribes when at least one closed-T
leaf has wired OnSelectedIndexChanged.
- Registered base-derived in RegisterV1BuiltInHandlers via
RegisterHandlerForDerivedTypes<TemplatedFlipViewElementBase, FlipView>.
Tests
- New Desc_TemplatedFlipView_MountUpdate covers: pre-mount item-count,
pre-mounted slots are UIElements, initial SelectedIndex applied, mount
didn't fire callback, programmatic SelectedIndex write echo-suppressed,
grow/shrink/edit-in-place positional reconcile, shrink clamps SelectedIndex,
same-ref idempotency, edit-in-place preserves slot identity (CanUpdate path
through ReconcileV1Child).
- New Desc_TemplatedFlipView_NoCallback_DoesNotSubscribe covers the
HasCallbacks=false trampoline-not-subscribed branch.
Docs
- §14 carry-forwards: TemplatedFlipView engine-gap closed; updated stale
`TemplatedFlipViewDescriptor stays carved` comment in FlipViewDescriptor.
Validation
- dotnet test tests/Reactor.Tests -c Release -p:Platform=x64 → 9134 ok / 0 fail
- --self-test --filter `Desc_` V1 ON = 630 ok / 0 fail; V1 OFF = 630 ok /
0 fail (parity holds, both flags +17 vs Phase 3 finish baseline of 613 for
the new TemplatedFlipView fixtures).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add Semantic V1 descriptor
Add a SemanticElement descriptor backed by SemanticPanel with SingleContent child reconciliation and descriptor selftest coverage for mount/update parity.
Validated with: dotnet build src\Reactor\Reactor.csproj -c Release -p:Platform=x64; dotnet build tests\Reactor.AppTests.Host\Reactor.AppTests.Host.csproj -c Release -p:Platform=x64; dotnet run --project tests\Reactor.AppTests.Host -c Release -p:Platform=x64 --no-build -- --self-test --filter Desc_Semantic
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add GridView descriptor
Port the untyped GridViewElement path to a V1 descriptor using ItemsHost and descriptor-managed selection/item-click events. Add the descriptor selftest and registry entries for mount/update coverage.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add ItemContainer descriptor
Port ItemContainerElement to a V1 single-content descriptor. Add descriptor selftest coverage for mount, child update, and IsSelected update.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add AnnounceRegion V1 descriptor
Add a descriptor for the AnnounceRegionElement hidden TextBlock live-region anchor and register descriptor selftest coverage for mount/update parity.
Validated with: dotnet build src\Reactor\Reactor.csproj -c Release -p:Platform=x64; dotnet build tests\Reactor.AppTests.Host\Reactor.AppTests.Host.csproj -c Release -p:Platform=x64; dotnet run --project tests\Reactor.AppTests.Host -c Release -p:Platform=x64 --no-build -- --self-test --filter Desc_AnnounceRegion
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add ItemsView descriptor
Port ItemsViewElementBase to a base-derived V1 descriptor using TemplatedItemsErased. Extend the erased keyed binder to reproduce the legacy ItemsView ItemsSource/ItemTemplate shape and add descriptor selftest coverage for mount/update and property changes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: defer polymorphic and XAML interop descriptors
Defer IconElement: the current V1 descriptor engine requires a stable TControl identity, while IconElement's legacy path chooses different native IconElement subclasses from IconData and can replace the native control when the IconData subtype changes. This needs an element-aware polymorphic factory or an approved replacement strategy before it can route through _v1Handlers without semantic drift.
Defer XamlHostElement: its factory returns arbitrary user-owned FrameworkElement instances, so the descriptor model cannot express the control type, pooling policy, or ownership safely through a single new() TControl descriptor.
Defer XamlPageElement: it is closer to descriptor-shaped than XamlHost, but the bridge still delegates to Frame.Navigate for arbitrary user XAML page types. The attempted descriptor selftest could not provide a deterministic code-only page target without crashing the WinUI navigation path, so this stays carved for orchestrator review rather than landing an unvalidated descriptor.
Validated with: dotnet build tests\Reactor.AppTests.Host\Reactor.AppTests.Host.csproj -c Release -p:Platform=x64; dotnet run --project tests\Reactor.AppTests.Host -c Release -p:Platform=x64 --no-build -- --self-test --filter Desc_Semantic; dotnet run --project tests\Reactor.AppTests.Host -c Release -p:Platform=x64 --no-build -- --self-test --filter Desc_AnnounceRegion
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add AnimatedVisualPlayer V1 descriptor
Selftest: Desc_AnimatedVisualPlayer_MountUpdate (V1 ON).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add AnnotatedScrollBar V1 descriptor
Selftest: Desc_AnnotatedScrollBar_MountUpdate (V1 ON).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add MapControl V1 descriptor
Selftest: Desc_MapControl_MountUpdate (V1 ON descriptor availability only). MapControl construction process-terminates this headless host without the Maps runtime/token, so E2E must own real lifecycle coverage.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add ParallaxView V1 descriptor
Selftest: Desc_ParallaxView_MountUpdate (V1 ON).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add RefreshContainer V1 descriptor
Selftest: Desc_RefreshContainer_MountUpdate (V1 ON).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add SwipeControl V1 descriptor
Selftest: Desc_SwipeControl_MountUpdate (V1 ON).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add SemanticZoom V1 descriptor
Selftest: Desc_SemanticZoom_MountUpdate (V1 ON).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add MediaPlayerElement V1 descriptor
Selftest: Desc_MediaPlayerElement_MountUpdate (V1 ON, no media source).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add WebView2 V1 descriptor
Selftest: Desc_WebView2_MountUpdate (V1 ON, no Source to avoid async CoreWebView2 init).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add TitleBar V1 descriptor
Selftest: Desc_TitleBar_MountUpdate (V1 ON). SetTitleBar is deferred to Loaded so the title bar is attached before window registration.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add NavigationView V1 descriptor
Selftest: Desc_NavigationView_MountUpdate (V1 ON). Selection trampoline handles built-in settings selection by reporting a null SelectedTag because WinUI does not expose a NavigationViewItem tag for Settings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: fix DescSemanticZoom fixture's nested ListView registration
Batch 3 SemanticZoom fixture referenced a non-existent ListViewDescriptor
for its inner ZoomedInView/ZoomedOutView ListViewElement children. Use
the Phase 1 hand-coded ListViewHandler instead (the canonical V1
registration for ListView).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: §14 Phase 3 completion — IDecoratorElementHandler engine extension
Adds a new decorator-style V1 handler shape for elements whose returned
UIElement identity may change on update or whose unmount disposition
diverges from the standard pool-return. Targets the 8 elements deferred
during Phase 3 batches:
- Target-wrapping decorators: FlyoutElement, MenuFlyoutElement,
CommandBarFlyoutElement (returned UIElement IS the user's inner
Target child — type isn't known until inspection).
- Modal lifecycle wrappers: ContentDialogElement, PopupElement
(returned control is a placeholder; the actual modal surface is
side-mounted or lazy).
- Polymorphic mounts: IconElement (concrete control type depends
on the element's runtime subtype).
- Interop bridges: XamlHostElement, XamlPageElement.
Surface changes (3 minimum-correct items per rubber-duck spec):
1. IV1HandlerEntry.Update returns UIElement (was void). Standard
handlers (V1HandlerAdapter) always return `control` unchanged,
preserving §13 Q12's no-substitution invariant on the standard
IElementHandler surface. Reconciler.Update threads the result
into the parent slot via the existing legacy-registry path
(already handled by ReconcileV1Child).
2. IV1HandlerEntry.Unmount returns V1UnmountDisposition enum
(CollectSelf | ContinueDefaultTraversal | SkipPool). Standard
handlers always return CollectSelf, matching pre-extension
behavior. Reconciler.UnmountRecursive + UnmountAndCollect switch
on the returned disposition to control pool collection and
traversal recursion.
3. New IDecoratorElementHandler<TElement> contract (TElement only,
no TControl) + V1DecoratorHandlerAdapter<TElement> bridging into
IV1HandlerEntry. Distinct from IElementHandler<TElement,TControl>
so the public author-facing surface retains its no-substitution
invariant; only built-in V1 ports use this decorator shape.
Registered via Reconciler.RegisterDecoratorHandler<TElement>
(internal — built-in ports only).
No descriptor registrations changed in this commit. Descriptor ports
for the 8 deferred elements follow in subsequent commits.
Validation:
- dotnet build src/Reactor/Reactor.csproj: 0 errors
- dotnet build tests/Reactor.AppTests.Host: 0 errors
- --self-test --filter Desc_ V1 ON: 728 ok / 0 failures
- --self-test --filter Desc_ V1 OFF: 728 ok / 0 failures
- Desc_ parity: ON ≡ OFF (no regression introduced by widening).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add Icon V1 descriptor
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add XamlHost V1 descriptor
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: add XamlPage V1 descriptor
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: §14 Phase 3 completion — register Phase 3 descriptors in production V1 dispatch
Wires every Phase 3 descriptor authored across batches 1–4 (plus the
Phase 1 hand-coded handlers + base-derived templated/lazy/items hosts +
PreMountedItems TemplatedFlipView) into RegisterV1BuiltInHandlers, the
sole built-in V1 registration site. With this PR, V1 ON becomes the
production dispatch path for ~78 element types; only the carve-list
elements documented in the RegisterV1BuiltInHandlers XML doc still fall
through to the legacy Mount/Update switch.
Carve list (intentionally NOT registered — documented inline):
- Composition primitives (Component, Func, Memo, ErrorBoundary,
CommandHost, Validation.*) — sit ABOVE the V1 handler protocol
- Interop bridges (XamlHost, XamlPage) — descriptors exist but
XamlInterop.Register populates _typeRegistry at startup, would
clash with EnsureRegistrableElementType; unification = Phase 4
- Deferred overlays (ContentDialog, Flyout, MenuBar, MenuFlyout,
CommandBar, CommandBarFlyout, Popup) — require decorator-style
ports for modal lifecycle; follow-up PR
- Deferred stateful host (NavigationHost) — per-instance route/cache
state intercepted in UnmountRecursive before V1 dispatch arm;
needs small refactor; follow-up PR
- TabViewDescriptor — bisect (3× clean V1 ON full selftest with
only this carved, vs. 1–4 random docking-text-find failures per
run when registered) ratifies the descriptor's documented gaps:
spec 045 §2.4 drag pipeline (OnTabDragStarting/Completed), §2.2
pinnable headers (BuildTabHeader/BuildPinButton/in-place
TryUpdatePinHeaderInPlace), in-place CanUpdate for tab content
(preserves focus/state on re-renders), conditional SelectedIndex
write, TabStripHeader/Footer Element slots. Closing requires
engine work (post-children mount-hook so SelectionChanged
subscribes after children-add + ImperativeBridged for named tab
strip slots); tracked alongside overlays + NavigationHost.
Validation:
- dotnet test tests/Reactor.Tests -c Release -p:Platform=x64:
Passed! 9134 / 0 failed / 62 skipped
- dotnet run --project tests/Reactor.AppTests.Host --self-test
V1 ON (run 1): 4410 ok, 0 failures
V1 ON (run 2): 4410 ok, 0 failures
V1 OFF: 4410 ok, 0 failures
- Desc_ filter A|B: 744 / 744 (perfect parity)
Helpers added (internal, [Experimental(`REACTOR_V1_PREVIEW'')]):
RegisterDescriptor<TElement, TControl>(descriptor)
RegisterDescriptorForDerivedTypes<TBase, TControl>(descriptor)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec047: §14 Phase 3 completion — update spec + tracker for Phase 3 completion
Document Phase 3 completion in both the spec (§14) and the implementation
tracker. With the engine extension (IDecoratorElementHandler) +
PreMountedItems strategy + descriptor batches + production registration
sweep landed:
- Engine gap closed (TemplatedFlipView via PreMountedItems)
- Every Phase 3 batch descriptor authored AND registered:
- Untyped items hosts: GridView, ItemsView, ItemContainer
- Heavy/specialized: WebView2, NavigationView, TitleBar,
MediaPlayerElement, AnimatedVisualPlayer, MapControl,
SemanticZoom, AnnotatedScrollBar, RefreshContainer,
SwipeControl, ParallaxView
- Polymorphic/a11y: IconElement (via new IDecoratorElementHandler),
SemanticElement, AnnounceRegion
Intentional carve list (documented inline in RegisterV1BuiltInHandlers
and re-enumerated in both docs for the follow-up reviewer):
- Dialog/overlay family (ContentDialog, Flyout, Popup, MenuBar,
MenuFlyout, CommandBar, CommandBarFlyout) — modal lifecycle needs
decorator-style ports beyond the IDecoratorElementHandler shape
- NavigationHost — UnmountRecursive intercepts before V1 arm
- TabViewDescriptor — bisect-ratified gaps need engine work
(post-children mount-hook for safe SelectionChanged wiring +
ImperativeBridged for tab strip slots)
- XamlHost/XamlPage — XamlInterop.Register clashes with V1 auto-reg
- Composition primitives (Component, Func, Memo, ErrorBoundary,
CommandHost, Validation.*) — sit ABOVE V1 protocol; Phase 4 keeps
their legacy arms
A|B parity bar met: 9134 xunit + 4410 selftest (V1 ON ≡ V1 OFF),
0 failures both flags across 3 consecutive full V1 ON runs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec(047): record PR #440 + quantified V1 dispatch coverage (76/95 = 80% arms; 76/87 = 87% of V1-reachable)
Updates §14 in both the spec and tracker to reference PR #440 and add an explicit coverage table breaking the 95 legacy switch arms into 76 routed / 11 reachable-deferred / 8 permanent composition-primitive carves, plus the enumerated path-to-100% for the follow-up PR.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* spec(047): address PR #440 CR feedback (Copilot reviewer)
* 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>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 836c301 commit f0d3e81
36 files changed
Lines changed: 3487 additions & 138 deletions
File tree
- docs/specs
- tasks
- src/Reactor/Core
- V1Protocol
- Descriptor
- Descriptors
- tests/Reactor.AppTests.Host/SelfTest
- Fixtures
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1433 | 1433 | | |
1434 | 1434 | | |
1435 | 1435 | | |
1436 | | - | |
| 1436 | + | |
| 1437 | + | |
| 1438 | + | |
| 1439 | + | |
| 1440 | + | |
| 1441 | + | |
| 1442 | + | |
| 1443 | + | |
| 1444 | + | |
| 1445 | + | |
| 1446 | + | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
1437 | 1450 | | |
1438 | 1451 | | |
1439 | 1452 | | |
| |||
Lines changed: 134 additions & 41 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
928 | 928 | | |
929 | 929 | | |
930 | 930 | | |
931 | | - | |
932 | | - | |
933 | | - | |
934 | | - | |
935 | | - | |
936 | | - | |
937 | | - | |
938 | | - | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
939 | 936 | | |
940 | 937 | | |
941 | 938 | | |
| |||
959 | 956 | | |
960 | 957 | | |
961 | 958 | | |
962 | | - | |
963 | | - | |
964 | | - | |
965 | | - | |
966 | | - | |
967 | | - | |
968 | | - | |
969 | | - | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
970 | 996 | | |
971 | 997 | | |
972 | 998 | | |
973 | | - | |
974 | | - | |
975 | | - | |
976 | | - | |
977 | | - | |
978 | | - | |
979 | | - | |
980 | | - | |
981 | | - | |
982 | | - | |
983 | | - | |
984 | | - | |
985 | | - | |
986 | | - | |
987 | | - | |
988 | | - | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
989 | 1047 | | |
990 | | - | |
991 | | - | |
992 | | - | |
993 | | - | |
994 | | - | |
995 | | - | |
996 | | - | |
997 | | - | |
998 | | - | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
| 1057 | + | |
| 1058 | + | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + | |
| 1062 | + | |
| 1063 | + | |
| 1064 | + | |
| 1065 | + | |
| 1066 | + | |
| 1067 | + | |
| 1068 | + | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| 1073 | + | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
999 | 1092 | | |
1000 | 1093 | | |
1001 | 1094 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3831 | 3831 | | |
3832 | 3832 | | |
3833 | 3833 | | |
3834 | | - | |
| 3834 | + | |
3835 | 3835 | | |
| 3836 | + | |
| 3837 | + | |
| 3838 | + | |
| 3839 | + | |
3836 | 3840 | | |
3837 | 3841 | | |
3838 | 3842 | | |
| |||
3844 | 3848 | | |
3845 | 3849 | | |
3846 | 3850 | | |
| 3851 | + | |
3847 | 3852 | | |
3848 | 3853 | | |
3849 | 3854 | | |
| |||
3910 | 3915 | | |
3911 | 3916 | | |
3912 | 3917 | | |
| 3918 | + | |
| 3919 | + | |
3913 | 3920 | | |
3914 | 3921 | | |
3915 | 3922 | | |
| |||
0 commit comments