| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
|
Claude finished @MartinZikmund's task in 11m 4s —— View job Review Complete
SummaryVerdict: ship after fixing the one inline finding. 1 finding at medium severity, 1 at low. No blocking issues in the core logic. Inline finding (1)Medium — DatePickerFlyout_Unloaded.xaml line 38: dangling ElementName binding <TextBlock Text="{Binding Date, ElementName=TestNativeDatePickerFlyout}" /> — the element TestNativeDatePickerFlyout was the x:Name of the native flyout removed in this PR. The TextBlock remains but the binding target no longer exists; the runtime will log a binding warning and the TextBlock will be permanently empty. Remove the TextBlock (or its containing StackPanel row). Inline comment posted. Low-severity observation (no inline comment)DatePicker_Features.xaml lines 175–178 — the btnWithNativeFlyout button is now a dead end. The section is labeled "NativeDatePickerFlyout (iOS & Android only)" and the button says "PICK DATE (Flyout)", but <Button.Flyout /> is empty so nothing happens on click. The DatePicker immediately below (line 183) already demonstrates UseNativeStyle + UseNativeMinMaxDates correctly. The dead button + section header will confuse readers of the sample. The section could be removed or the label updated to point at the DatePicker below it. What looks goodBatchMergeXaml mc:Ignorable fix — the UpdateIgnorableNamespaces implementation is clean. Walking to root to collect declared namespace attributes (rather than maintaining a separate list), sorting with StringComparer.Ordinal for deterministic output, and covering the three Uno namespace host origins (http://uno.ui/, http://platform.uno/, http://nventive.com/) are all correct. The four new Given_MergedDictionary tests cover the key boundaries: conditional-in, non-conditional-excluded, legacy-hosts-in, no-ignorable-at-all. DatePicker / INativeDatePickerFlyout fix — the interface-inversion-of-dependency pattern is the right call: Uno.UI declares the interface, the Android runtime assembly implements it, DatePicker casts with is. No preprocessor conditional, no cross-assembly reference, and InternalsVisibleTo("Uno.UI.RuntimeTests") is already in place so the internal interface is visible to the test. The runtime test ([PlatformCondition(ConditionMode.Include, RuntimeTestPlatforms.SkiaAndroid)]) directly asserts forwarding rather than inferring it from behaviour. Dead conditional removal — all removed symbols (SILVERLIGHT, METRO, WINPRT, WINDOWS_PHONE, HAS_NATIVE_COMMANDBAR, IS_NATIVE_ELEMENT, #if __ANDROID, #if WinUI, #if !DESKTOP) are unreachable on any current target and the branches behind IS_NATIVE_ELEMENT and AppBar._isNativeTemplate had already rotted (event subscriptions to handlers that don't exist). Correct to delete rather than preserve. HAS_UNO_SKIA_<host> removal — the rationale is watertight: the SDK references every desktop host package together, so a netX.0-desktop head defined all eight at once, making host discrimination via #if impossible. HAS_UNO_SKIA and __UNO_SKIA__ (consumed by the XAML generator) are correctly left alone. *.Apple.cs retirement — IsApple and IsAppleUIKit both reduce to IsIOS or IsTvOS; the 29-file rename to *.UIKit.cs is correct. The *.reference.cs deletion is clean: the suffix compiled only on UnoRuntimeIdentifier-scoped projects, which no application ever selects, so the Lottie file and the SDK documentation entry were dead. BatchMergeXaml NuGetPackageRoot move — moving the parameter from RuntimeAssetsSelectorTask_v0 to RuntimeAssetsValidatorTask_v0 and adding UnoWinRTRuntimeIdentifier, TargetPlatformIdentifier, ResolvedCompileFileDefinitionsInput, and DisablePlatformAssetValidation is consistent with the UNOB0020 feature (multi-targeted library asset validation). The _UnoDisableUNOB0020Validation normalization guard (converting any non-true value to false before the boolean parameter conversion) is a nice defensive touch. Documentation — the three migration tables (XAML prefixes, file suffixes, preprocessor symbols) are complete and precise. The using-skia-rendering.md section on class libraries correctly inverts the 6.x description (platform asset now kept, not silently replaced). The new UNOB0020 error-code entry clearly explains both the detection limit (type presence only, not member changes) and the suppression property. Conventional Commits — all 25 commits follow the format and scope correctly. |
Sorry, something went wrong.
|
The build 227930 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 123 Details
|
Sorry, something went wrong.
|
⚠️⚠️ The build 227931 has failed on Uno.UI - docs. |
Sorry, something went wrong.
|
⚠️⚠️ The build 227930 has failed on Uno.UI - CI. |
Sorry, something went wrong.
|
Claude finished @MartinZikmund's task in 9m 24s —— View job Review Complete
SummaryVerdict: ship — no blocking issues. The one medium-severity finding from the first pass (DatePickerFlyout_Unloaded.xaml dangling ElementName=TestNativeDatePickerFlyout binding) was resolved in commit 37e549be, which removed the entire "native flyout" row. Two low-severity observations follow, neither merge-blocking. What looks goodBatchMergeXaml mc:Ignorable fix — UpdateIgnorableNamespaces correctly walks to the root to collect all conditional-namespace prefixes (filtering on the three Uno namespace host origins), sorts with StringComparer.Ordinal for deterministic output, and either sets or removes the attribute. The four Given_MergedDictionary tests (conditional-in, non-conditional-excluded, legacy-hosts-in, no-ignorable) cover the key boundaries cleanly. DatePicker / INativeDatePickerFlyout fix — Interface-inversion-of-dependency is the right call: Uno.UI declares the internal interface INativeDatePickerFlyout, the Android runtime assembly implements it via NativeDatePickerFlyout, and DatePicker casts with is. No preprocessor conditional, no cross-assembly reference. The runtime test ([PlatformCondition(ConditionMode.Include, RuntimeTestPlatforms.SkiaAndroid)]) directly asserts forwarding. The class-level [RunsOnUIThread] on Given_DatePicker covers the new test. Dead conditional removal — All removed symbols (SILVERLIGHT, METRO, WINPRT, WINDOWS_PHONE, HAS_NATIVE_COMMANDBAR, IS_NATIVE_ELEMENT, #if __ANDROID, #if WinUI, #if !DESKTOP) were unreachable on any current target. The commit message correctly explains that the two IS_NATIVE_ELEMENT-guarded arms had already rotted. XAMARIN (no underscores) is correctly kept — it's still defined for the Android and Apple target frameworks. HAS_UNO_SKIA_<host> removal — The rationale is watertight: the SDK references every desktop host package together, so a net*.0-desktop head defined all eight at once, making host discrimination via #if impossible. HAS_UNO_SKIA and __UNO_SKIA__ (consumed by the XAML generator) are correctly left alone. *.Apple.cs retirement — IsApple and IsAppleUIKit both reduce to IsIOS or IsTvOS; the rename to *.UIKit.cs is correct. The *.reference.cs deletion is sound: the suffix compiled only for projects that set UnoRuntimeIdentifier, which no application project does. Documentation — The three migration tables (XAML prefixes, file suffixes, preprocessor symbols), the using-skia-rendering.md platform-asset inversion, and the UNOB0020 error-code entry are all accurate. The detection-limit caveat ("type presence only, not member changes") is important and present. Low-severity observations (no inline comments; not blocking)UpdateIgnorableNamespaces also fires on theme-dict children — FinalizeXaml calls UpdateIgnorableNamespaces() on each MergedDictionary, including nested theme-dict children. The child walks to root to collect prefixes (correct), then stamps mc:Ignorable on its own element — which does not re-declare the conditional xmlns:* prefixes (those are on the root). Because the prefixes are in scope via XML namespace inheritance, this is valid XML. WinAppSDK likely ignores mc:Ignorable on non-root elements. This was also the pre-existing behaviour (the constructor hard-coded mc:Ignorable="ios android wasm skia" on every dict, root and child alike), so the PR does not regress it. ComboBox_FullScreen_Popup.xaml has three declared-but-unused namespace prefixes (not_android, not_ios, win) — these pre-date this PR and were not introduced by commit 37e549be, which only removed an empty <UserControl.Resources />. Not caused by this change; out of scope. |
Sorry, something went wrong.
|
🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24088/wasm-skia-net9/index.html |
Sorry, something went wrong.
|
🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24088/docs/index.html |
Sorry, something went wrong.
|
The build 227952 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 134 Details
|
Sorry, something went wrong.
|
Claude finished @MartinZikmund's task in 8m 54s —— View job Review Complete
SummaryVerdict: fix-first on the two UITest findings; all other new commits ship. 2 medium findings posted as inline comments. No blocking issues in the core logic. The prior two review passes are superseded — prior findings are all resolved or acknowledged. New inline findings (2)ComboBox_FullScreen_Popup.xaml line 16 — stale UITest reference. TextBlock_MeasureCache.xaml line 12 — stale UITest misses reads. New commits look goodSamples cleanup (4c043bf7) — the three remaining debris items from the native-flyout removal (DatePickerFlyout_Unloaded, DatePicker_Features, ComboBox_FullScreen_Popup) are correctly identified and removed. The commit message accurately describes the secondary problem (empty <Button.Flyout />) alongside the primary one (dangling ElementName). Docs linter (6392a63f) — HTML comment separators for adjacent DocFX alert pairs and the _is_ → *is* emphasis-style fix are correct remedies for MD028 and MD049; no content change. Conditional-symbol guidance (624adf8e) — the new table in code-style.md is accurate: LOOPING_SELECTOR_AVAILABLE, FOCUS_IMPLEMENTED, and the WIP family are correctly parked-not-dead; the developer-diagnostics and MUX-port-fidelity categories match what's in the tree; the SUPPORTS_NATIVE_DATEPICKER anecdote at the bottom is exactly the right motivating example for why "undefined ≠ deletable". The UNO_REFERENCE_API → HAS_UNO synonym guidance matches the cross-targeting targets comment. Screenshot diffs (73 linux / 134 windows) — these are expected from the removal of native-only android:, ios:, and wasm: markup that was excluded from every Skia project to begin with. The samples that carried that markup have now shrunk or been deleted, so their screenshots change. These are not regressions; the PR author should confirm the new snapshots are accepted before merging. |
Sorry, something went wrong.
|
🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24088/docs/index.html |
Sorry, something went wrong.
|
The build 228921 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 172 Details
|
Sorry, something went wrong.
|
Claude finished @MartinZikmund's task in 3m 24s —— View job Review Complete
SummaryVerdict: fix-first on two UITest issues. The two medium findings flagged in the previous review pass (2026-08-20) are still present — the UITest files weren't in the PR diff so inline comments cannot be posted on them; they are described here instead. Latest commit (9f0c804f)fix(build): Rewrite the task SHA in Uno.UI.Tasks.Tests — adds the new test project to the SHA-rewrite task set so the unit-test solution filter compiles. Clean; no review issues. The When_Native_View UITest was also removed alongside the deleted Android native view sample. Two medium UITest fixes still neededThe XAML markup was correctly deleted in 4c043bf7, but the UITest methods that exercise those samples still reference the deleted element names. Since these files are not in the PR diff, inline comments cannot be posted — fixes are described here: 1. UnoSamples_Tests.ComboBoxTests.cs line 154 — "Units1" → "Values2" ComboBoxTests_Fullscreen_Popup_iOS ([ActivePlatforms(Platform.iOS)]) calls _app.Marked("Units1"). Units1 was the x:Name of the ios:ComboBox removed from ComboBox_FullScreen_Popup.xaml. The surviving ComboBox is x:Name="Values2". Change: // was:
var values2 = _app.Marked("Units1");
// fix:
var values2 = _app.Marked("Values2");2. TextBlockTests.cs lines 424, 431, 438 — remove three stale misses reads When_Padding_Is_Changed_Then_Cache_Is_Missed ([ActivePlatforms(Platform.Browser)]) calls _app.Marked("misses").GetDependencyPropertyValue<int>("Text") three times. misses was the x:Name of the wasm:TextBlock removed from TextBlock_MeasureCache.xaml. The three locals (misses1, misses2, misses3) are captured but never asserted upon — delete all three lines. The width-comparison assertions (w1 > w2, w3 == w1) are unaffected. What looks good in the new commit
|
Sorry, something went wrong.
|
🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24088/wasm-skia-net9/index.html |
Sorry, something went wrong.
Four categories look dead to a symbol search but are deliberate: parked ported code, developer diagnostics, MUX port fidelity, and vendored third-party sources. Two more are invisible to a `#if` search entirely -- symbols emitted by a generator, and those consumed through [Conditional]. Placed in the path-scoped C# rule so it loads whenever src/**/*.cs is edited, which is when the mistake gets made. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTBMNbcPLwzdYrtPzY8s9Z
The CI Setup > Validations stage runs markdownlint-cli 0.38.0 over doc/**/*.md
and it reported five errors:
MD028 no-blanks-blockquote three pairs of adjacent DocFX alerts, which the
linter reads as one blockquote with a blank line
in it, in using-skia-rendering.md,
using-the-uno-sdk.md and platform-specific-csharp.md
MD049 emphasis-style *is* in the UNO_REFERENCE_API table row, where the
rest of the document uses underscores
Each alert pair is separated with an HTML comment, the remedy markdownlint
documents for MD028. It renders as nothing, so no published content changes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GP2BeVCQzY3sQB7QBv173u
Deleting the content behind the android: and ios: prefixes left the wrappers that used to hold it, and one binding to an element that went with it. DatePickerFlyout_Unloaded lost the whole native row: an empty <Button.Flyout /> made the "Open NativeDatePickerFlyout" button inert, and the TextBlock beside it bound to ElementName=TestNativeDatePickerFlyout, which no longer resolves. The code-behind reference to the button goes with it. DatePicker_Features loses btnWithNativeFlyout for the same reason. The heading above it named a flyout that is no longer in the sample; it now names the DatePicker below, which is what the UseNativeMinMaxDates toggle still drives. ComboBox_FullScreen_Popup loses an empty <UserControl.Resources />. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GP2BeVCQzY3sQB7QBv173u
The build stamps the commit SHA over the `v0` suffix of the MSBuild task types, but the new test project was not in the rewrite set, so its references still named the `_v0` types and the unit-test solution filter failed to compile. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsSTAhXXmx3UnADdnBPoBp
The verifier hardcoded the pre-7.0 conditional prefix set, so it kept feeding 'skia' into ExcludeXamlNamespacesProperty long after the props stopped emitting it. That only passed because XamlFileParser carried the IsSkiaNotConditional exemption this branch removes. Derive the lists from the prefixes the props actually produce: android, ios, tvos, desktop, wasm, winappsdk and win.
The verifier folded Microsoft.tvOS.Ref into the iOS branch, so a tvOS reference assembly got the iOS include/exclude lists: tvos landed in the exclude set and not_tvos in the include set, the exact inverse of what the SDK derives from the target framework. No test uses the tvOS reference assemblies today, but tvos: is a live prefix as of this branch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
ComboBoxTests_Fullscreen_Popup_iOS drove Units1, the ios:ComboBox with the custom fullscreen-popup template this branch removed; the surviving Values2 is already covered by ComboBoxTests_Fullscreen_Popup_Generic. DatePickerFlyout_Native_Unloaded drove TestNativeDatePickerFlyoutButton, removed with the native flyout row, and had been commented out as broken. The three misses reads in When_Padding_Is_Changed_Then_Cache_Is_Missed targeted the wasm:TextBlock that is gone, and fed locals no assertion read. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
CalendarDatePicker_themeresources.xaml kept wasm in mc:ignorable after the xmlns:wasm declaration and the wasm:Setter it guarded were removed, so the XAML compiler was told to ignore a prefix that is not declared -- the same defect the BatchMergeXaml ignorable fix addressed for merged output. The TODO above the removed setter went with it; the style it pointed at no longer exists anywhere. AppBar.xaml carried the same mismatch for netstdref and not_netstdref, which predates this branch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
Uno.UI and Uno.UI.FluentTheme are built for a plain netX.0, so every negated conditional prefix in their markup now resolves to "always included" and every positive one to "never". not_android: and not_wasm: therefore say nothing -- they were written when the prefix named a renderer rather than a target framework, and reading them today suggests a per-platform variant that the single Uno.UI build cannot have. Drop the prefix from the fourteen elements still carrying one, and the xmlns declarations that no longer name anything -- including the two ContentDialog and SystemResources kept without ever using. mc:Ignorable loses not_wasm alongside its declaration so the two stay in step. No behavior change: these elements were already emitted on every target. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R34nKe3bNnAssE9qwir9SZ
The samples compile into the -android, -ios and -browserwasm heads, so their not_android:, not_ios: and not_wasm: markup now genuinely excludes -- where in 6.x it was suppressed everywhere and behaved as "always". Each site was written against a native control that no longer exists, so what the prefix hides is markup the Skia rendering the sample needs. ComboBox_Picker and ComboBox_Popover lose their DropDownGlyph on Android, ComboBox_Popover its whole Popup and the state driving PopupBorder on iOS, and ComboBox_Disabled and ComboBox_ToggleDisabled their placeholder and drop-down animations on WebAssembly. ComboBox_DropDownPlacement drops the padding that gives the drop-down room to place itself, and Playground its XAML editor pane. The remaining declarations name a prefix nothing uses; they and their mc:Ignorable entries go with it. Desktop and WinAppSDK output is unchanged -- these prefixes already resolved to "included" there. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R34nKe3bNnAssE9qwir9SZ
The prefix table listed only winappsdk and not_winappsdk, and the one line about win and not_win called them a historical spelling, which read as a retirement notice for two prefixes that are live, supported, and still the more common form in Uno Platform's own markup. Both spellings now appear in the table, with a note that neither is deprecated and no migration applies. The namespace section also did not say that the prefix is matched by exact comparison, leaving open whether a decorated variant such as xmlns:not_winappsdkNamespace1 resolves as conditional. It does not; several CLR namespaces belong in one #using: segment instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
XAMARIN named a platform family but had drifted to mean roughly "an assembly Uno builds": Uno.CrossTargetting defined it for iOS, tvOS and Android, and eleven project files then defined it again for Skia, WebAssembly, Reference and netcoremobile. None of Uno.WinRT, Uno.UI.Dispatching, Uno.UI.Composition or Uno.UI.XamlHost branch on it, so those definitions only made the symbol read as though it meant something it did not. Each remaining use now states its own condition. FuncMemoizeExtensions keeps its locked memoizer on __ANDROID__ and __APPLE_UIKIT__, unchanged. The private SkipLast exists because netstandard2.0 lacks Enumerable.SkipLast, which is what it now says; its one caller is the XAML parser. CommandBarExtensions and AttachedProperty_CollectionProperty selected branches no compilation could reach, so the branches are gone. GlobalAssemblyInfo guarded two Code Access Security attributes that .NET ignores, in a file nothing compiles. Two conditions change behaviour rather than preserve it. Given_ItemsPresenter documents an Android pixel-conversion tolerance that an undefined symbol had switched off, including on Skia-Android; it is a runtime check now, so the tolerance applies where the comment says it should. SamplesApp defined the symbol for its Android head alone while the netcoremobile head defined it for all three mobile targets, so its iOS and tvOS heads now match Android. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
Uno.UI pins UnoRuntimeIdentifier to Skia, which defines UNO_HAS_ENHANCED_LIFECYCLE, so !UNO_HAS_ENHANCED_LIFECYCLE never compiled there. What the branch held is not a fallback that stopped being reachable: ReconfigureViewportPropagationPartial had no declaring partial and no caller anywhere in the repository, so the implementation could not have compiled had the branch ever been taken. Its declaration and call site were removed at some point and this was left behind. The remaining !UNO_HAS_ENHANCED_LIFECYCLE branches in Uno.UI are untouched. Each is a coherent Loaded/Unloaded fallback for the native Android and iOS renderers, named as such in its own comment, and belongs with that removal rather than with a vocabulary sweep. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
WINAPPSDK_PACKAGED was dropped as never consumed, but it is defined in Uno.Sdk and therefore ships to applications, where a repository-wide search cannot see its users. Separating MSIX from unpackaged has no other compile-time expression, and removing the symbol would have sent those branches to #else without a diagnostic. The spec records the distinction: for anything Uno.Sdk emits, the question is whether it is public surface. CommandBarExtensions registered NavigationCommand and BackButtonForeground with plain PropertyMetadata everywhere, because the FrameworkPropertyMetadata carrying ValueInheritsDataContext sat behind XAMARIN, which neither Uno.UI.Extras project defines. Uno targets are meant to inherit the data context here, so the metadata is selected on HAS_UNO, the discriminator the rest of the assembly already uses; WinAppSDK keeps PropertyMetadata, having no FrameworkPropertyMetadata. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
The sample was dropped with the native-era markup because its whole body sits in a wasm: element, which read as unreachable. Uno.Web.Http.CookieManager is not native-renderer API though -- it is a browser capability, and it stays relevant wherever the app runs in a browser, Skia WebAssembly included. The page is restored unchanged; its [Sample] registration is already behind __WASM__, so it appears only on the head that can exercise it. The other six samples removed alongside it were checked and stay removed. Each holds nothing but native-renderer content: an android:Grid, an android:Border wrapping a NativeView, an ios:StackPanel around a Picker described in the sample itself as iOS-specific, and the two HorizontalListView pages, whose own placeholders read "HorizontalListView is only used on Android". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
|
Claude finished @MartinZikmund's task in 6m 53s —— View job Review Complete
SummaryVerdict: ship. This pass reviews the same functional content as the 2026-08-24 18:21 review, which already gave a clean ship verdict. The branch appears to have been rebased (commit hashes changed; content is identical), which triggered the pull_request synchronize event. No new issues were found. What was verified
All prior findings — resolved
Screenshot diffs (73 linux / 182–193 windows — stable)Linux count (73) has been stable across all CI runs. Windows count has settled in the 178–193 range. Both are consistent with expected sample removals; the new baselines should be accepted before merge. |
Sorry, something went wrong.
|
🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24088/wasm-skia-net9/index.html |
Sorry, something went wrong.
|
🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24088/docs/index.html |
Sorry, something went wrong.
The runtime-asset-selector tests were written while the WinRT layer still shipped as Uno.dll. RuntimeAssetsSelectorTask now recognises the layer by "uno.winrt", so the fixture's Uno.dll was no longer treated as a WinRT assembly and stayed on the Skia runtime instead of being swapped for the platform implementation, failing all three assertions that check the swap. Only the assembly name moves; the package is already Uno.WinRT. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KvtjrJRTUBs5bhK6sXeaCe
|
Claude finished @MartinZikmund's task in 3m 35s —— View job Review Complete
SummaryVerdict: ship. The single new commit since the 2026-08-24 18:56 review is a clean test fix. No new issues; all prior findings remain resolved. New commit 84265c8e — correcttest(build): Follow the WinRT assembly rename in the selector tests The three tests in Given_RuntimeEnabledPackage.cs were written when the WinRT layer assembly was named Uno.dll, but RuntimeAssetsSelectorTask.IsWinRTAssembly (line 238) now recognises it as "uno.winrt" (case-insensitive). With the old name in the fixture, the task's IsWinRTAssembly("Uno") returned false, so no WinRT swap occurred, and every assertion that checked for the swap was failing. The fix is a precise rename:
After the fix, IsWinRTAssembly("Uno.WinRT") returns true, the task swaps correctly, and all assertions reflect the actual task behavior. The other two names in the array (Uno.Foundation, Uno.UI.Dispatching) are already present in the is pattern and were never affected. All prior findings — resolved
Screenshot diffs (73 linux / 182 windows — stable)Linux count (73) has been stable across all CI runs. Windows count has settled at ~178–193. Both are consistent with expected sample removals from this PR. The new baselines should be accepted before merge. |
Sorry, something went wrong.
|
🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24088/wasm-skia-net9/index.html |
Sorry, something went wrong.
|
🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24088/docs/index.html |
Sorry, something went wrong.
|
The build 229858 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 264 Details
|
Sorry, something went wrong.
|
Tick the box to add this pull request to the merge queue (same as @mergifyio queue).
|
Sorry, something went wrong.
The browserwasm head defines __WASM__ once it imports the Skia browser runtime's build assets, and the samples now compile into the head, so code written for the native WebAssembly backend is being compiled for the first time in years. #24088 removed the wasm-only elements from the TextBlock samples' XAML but left the #if __WASM__ code-behind writing measure-cache metrics into them, so those blocks now reference names the XAML no longer defines. The same applies to UnitTestsPage's keep-alive for SamplesApp.UnitTests.TSBindings.TSBindingsTests, a type that no longer exists anywhere. Drop all of them, along with the usings that only served them. Wasm_CustomEvent drives the DOM directly - UIElement.HtmlId, RegisterHtmlEventHandler and a document.getElementById script - which 7.0 removes with the native backend. Excluded through ItemExclusions.props rather than deleted, per the samples convention: SamplesApp.UITests still carries six tests against it, and retiring the sample and those together is a separate call. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tXCT4FVUg5GzGg67LfrRW
The browserwasm head defines __WASM__ once it imports the Skia browser runtime's build assets, and the samples now compile into the head, so code written for the native WebAssembly backend is being compiled for the first time in years. #24088 removed the wasm-only elements from the TextBlock samples' XAML but left the #if __WASM__ code-behind writing measure-cache metrics into them, so those blocks now reference names the XAML no longer defines. The same applies to UnitTestsPage's keep-alive for SamplesApp.UnitTests.TSBindings.TSBindingsTests, a type that no longer exists anywhere. Drop all of them, along with the usings that only served them. Wasm_CustomEvent drives the DOM directly - UIElement.HtmlId, RegisterHtmlEventHandler and a document.getElementById script - which 7.0 removes with the native backend. Excluded through ItemExclusions.props rather than deleted, per the samples convention: SamplesApp.UITests still carries six tests against it, and retiring the sample and those together is a separate call. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tXCT4FVUg5GzGg67LfrRW
| Back | FazBrowse Home | New Git URL |
GitHub Issue: closes #17684
PR Type:
🔄 Refactoring (no functional changes, no api changes)
What changed? 🚀
Conditional compilation vocabulary, continuing where #24087 left the platform axis.
XAML prefixes. Every prefix is now named after a target framework. The ones that named a renderer, or a
distinction that no longer exists, are removed:
Dead conditional markup is deleted rather than migrated. Content behind android:, ios: and wasm: was
excluded from every project in this repository both before and after the change, since they all target a plain
netX.0. It targeted the native renderers removed in 7.0 and referenced types that no longer exist — 126
elements and 76 attributes across 62 files. Seven samples whose entire body was such markup are removed, along
with the [ActivePlatforms(Platform.Android)] UI test that drove one of them.
File suffixes. *.Apple.cs and *.UIKit.cs had byte-for-byte identical rules (IsApple and IsAppleUIKit
are both IsIOS or IsTvOS), so the 29 *.Apple.cs files are renamed and the suffix retires. *.reference.cs is
dropped from the SDK — it selects on UnoRuntimeIdentifier, which nothing outside Uno.UWP /
Uno.Foundation / Uno.UI.Dispatching sets, so for an application it compiled nowhere and warned nowhere; those
three projects keep it through the repository's own targets. *.iOSmacOS.cs named the native macOS target
removed in 7.0.
Preprocessor symbols. The eight HAS_UNO_SKIA_<host> symbols and their __UNO_SKIA_<host>__ counterparts are
removed, closing #17684. They read as a compile-time host discriminator but cannot be one: the SDK references
every desktop host package together, so a netX.0-desktop head defined all of them at once. Nothing branched on
them. HAS_UNO_SKIA and __UNO_SKIA__ are untouched — the XAML generator emits the former.
UNO_REFERENCE_API is now documented as what it actually is. Every Uno.WinUI.Runtime.Skia.* package defines it,
including the Android, Apple UIKit and WebAssembly ones, so it is not "no platform identifier" — it is the host
axis, the same condition as HAS_UNO. Documented as a synonym rather than given a third spelling.
Two defects found on the way:
naming prefixes the merged file does not declare while omitting not_win and not_winappsdk, which it does. It
now collects the ignorable set from the conditional namespaces actually present.
#if SUPPORTS_NATIVE_DATEPICKER, a symbol no target framework defines. NativeDatePickerFlyout is live on
Skia-Android and reads that property when building the dialog, so it was silently ignored on the one target
where it does anything. An internal INativeDatePickerFlyout lets DatePicker set it without naming a type
from the Android runtime assembly.
Plus three conditionals that read as live and could never be true (#if __ANDROID, #if WinUI, #if !DESKTOP),
and the branches guarded by symbols that are defined nowhere — SILVERLIGHT, METRO, WINPRT,
WINDOWS_PHONE, __XAMARIN__, XAMARIN_ANDROID, HAS_NATIVE_COMMANDBAR, IS_NATIVE_ELEMENT. Two of those had
rotted: the IS_NATIVE_ELEMENT arm subscribes to handlers that exist nowhere in the tree, and AppBar's
_isNativeTemplate could only ever be false, so its MeasureOverride early-return never ran.
PR Checklist ✅
Breaking change impact and migration
Applications and libraries using the removed prefixes, suffixes or symbols must rename. All of it is mechanical
and all of it is listed in doc/articles/migrating-to-uno-7.md, which gains three tables: removed XAML prefixes,
removed file suffixes, and removed preprocessor symbols.
The one behavioural change beyond renaming is DatePicker.UseNativeMinMaxDates, which starts taking effect on
Skia-Android. An application that set it and silently got the default behaviour will now get the behaviour it
asked for.
Validation
the merged SoftwareBitmap partial was verified structurally (braces balanced, all 15 members preserved) but
no compiler has seen it. The DatePicker runtime test needs a Skia-Android device and has not been run here.
🤖 Generated with Claude Code
https://claude.ai/code/session_01PTBMNbcPLwzdYrtPzY8s9Z