Skip to content

Snap release/2.0-stable to release/2.0-experimental - #6634

Merged
agniuks merged 44 commits into
release/2.0-experimentalfrom
user/autosnap/snap-to-release/2.0-experimental-20260717
Jul 21, 2026
Merged

Snap release/2.0-stable to release/2.0-experimental#6634
agniuks merged 44 commits into
release/2.0-experimentalfrom
user/autosnap/snap-to-release/2.0-experimental-20260717

Conversation

@agniuks

@agniuks agniuks commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Automated snap from release/2.0-stable to release/2.0-experimental

Source commit: 783728c


IMPORTANT: Do NOT squash merge this PR!
Use 'Merge (preserve all commits)' to maintain the complete commit history.

dotnet-maestro Bot and others added 30 commits June 2, 2026 19:46
…it/DCPP build 20260602.3

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1024.260527-1035.1 -> To Version 2.0.0-stable-27200.1026.260601-1300.3
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.15 -> To Version 2.0.16-stable-Rolling.20260602.3
…ly pre-prune + test infra) [release/2.0-stable cherry-pick] (#6535)

* RuntimeCompatibilityOptions: Containment v2 foundation (catalog + Apply pre-prune + cpp-local release enum) [release/2.0-stable cherry-pick]

Cherry-pick of the Containment v2 foundation to release/2.0-stable.
Companion to PR #6534 on main.

The diff is the same shape as PR #6534 with one important difference:
s_catalogGroupsProd is populated with the eight production change IDs
shipping on the 2.0 servicing branch, grouped under WinAppSDK_2_1_0
and WinAppSDK_2_1_5 (file-local enumerators in
RuntimeCompatibilityOptions.cpp's anonymous-namespace
WinAppSDKReleaseVersion enum). This is what lets Apply pre-prune the
disabled list correctly for apps pinned below those releases.

The release-version enum (formerly named WinAppSDKPatchVersion in
FrUdk's public header) is now WASDK-internal and lives only in
Apply's .cpp - in the anonymous namespace, named
WinAppSDKReleaseVersion to sidestep the visible-name collision with
the still-unscoped legacy FrUdk enum. The FrUdk-side rename to
WinAppSDKPatchVersionDeprecated + UINT32(-1) sentinel happens in
companion ADO PR 15764977 (os.2020).

The two existing 2-arg production callsite macros on this branch
(#define WINAPPSDK_CHANGEID_61684930 in dev/ApplicationData/M.W.S.ApplicationData.cpp
and #define WINAPPSDK_CHANGEID_62382643 in dev/MRTCore/.../Helper.cpp,
both expanding to ", WinAppSDK_2_1_5") are NOT migrated in this PR.
The new catalog encodes the same patch association, so the worker's
existing patch check and Apply's pre-prune both agree (belt-and-
suspenders, no semantic conflict). Macro migration to the 1-arg form
will happen in a follow-up PR alongside the Microsoft.FrameworkUdk
package bump (companion to PR 3 on main); that PR is gated on the
os.2020 FrUdk publish.

Validation: TestAll.ps1 on x64 Debug runs CompatibilityTests with
the catalog populated; 6/6 pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* RuntimeCompatibilityOptions: sync WinAppSDKReleaseVersion comment with merged #6534 wording

The merged version of #6534 on main refined the WinAppSDKReleaseVersionFromValues helper's preamble comment to explicitly call out release engineering's catalog-growth role. Forward-port that wording to the 2.0 cherry-pick so the two diverge only on the intentional branch-specific deltas (populated catalog enumerators, populated s_catalogGroupsProd, and the FrUdk-bump-pending comment in Apply).

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it/DCPP build 20260605.2

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1024.260527-1035.1 -> To Version 2.0.0-stable-27200.1027.260605-1010.0
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.15 -> To Version 2.0.16-stable-Rolling.20260605.2
…it/DCPP build 20260609.1

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1024.260527-1035.1 -> To Version 2.0.0-stable-27200.1028.260608-1010.2
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.15 -> To Version 2.0.16-stable-Rolling.20260609.1
…rOnStable

Bring in the Removal of the MinorUpdateLibrary task and the Revision numbers to stable
…ngs() (#6558) (#6566)

* Fix bad regkey path for ApplicationData.GetForUnpackaged().LocalSettings() (#6558)

* Fix bad regkey path for ApplicationData.GetForUnpackaged().LocalSettings()

* Fixed Clear*()

* Removed obsolete references to Roaming*

* Fixed tests to use consistent test data

---------

Co-authored-by: Scott Jones <sjones@microsoft.com>

* Added containment

* Incorporated feedback

* Revert "Incorporated feedback"

This reverts commit c045b9a.

---------

Co-authored-by: Scott Jones <sjones@microsoft.com>
…it/DCPP build 20260617.1

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1024.260527-1035.1 -> To Version 2.0.0-stable-27200.1029.260616-0840.3
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.15 -> To Version 2.0.16-stable-Rolling.20260617.1
…7c1-9144-4b4f-b90c-58a097e7cc03

[release/2.0-stable] Update DCPP and Containment v2
…it/DCPP build 20260622.2

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1029.260616-0840.3 -> To Version 2.0.0-stable-27200.1030.260622-0700.1
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.16-stable-Rolling.20260617.1 -> To Version 2.0.16-stable-Rolling.20260622.2
…it/DCPP build 20260629.1

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1029.260616-0840.3 -> To Version 2.0.0-stable-27200.1031.260629-0710.0
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.16-stable-Rolling.20260617.1 -> To Version 2.0.16-stable-Rolling.20260629.1
…it/DCPP build 20260630.1

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1029.260616-0840.3 -> To Version 2.0.0-stable-27200.1032.260629-2200.0
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.16-stable-Rolling.20260617.1 -> To Version 2.0.16-stable-Rolling.20260630.1
…ateInstance failures (#6568)

* Fix UniversalBGTask crash and gracefully handle CoCreateInstance failures (#6507)

UniversalBGTask::Task::Run could crash backgroundTaskHost.exe in two
scenarios:

1. When LocalSettings has no entry for the task's TaskId,
   ApplicationDataContainerSettings::Lookup returns S_OK with a null
   IInspectable. The subsequent unbox_value<guid> then throws
   hresult_no_interface, and because the broker treats the failure as
   transient it re-fires the trigger forever.

2. When CoCreateInstance fails (e.g. the COM class isn't registered
   against the package), the wrapped THROW_IF_FAILED produced no
   diagnostic context.

Fix:

- If LocalSettings.Lookup returns null, log via wil and unregister the
  orphaned OS task so the broker stops re-firing it.
- If CoCreateInstance fails, log the HR with the CLSID and TaskId and
  return cleanly. The registration is left in place so the broker can
  retry on the next trigger in case the failure is transient.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [2.0 Servicing] Add containment for UniversalBGTask::Task::Run crash fix (bug 62755661)

Wrap the crash-hardening behavior behind WINAPPSDK_CHANGEID_62755661 (WinAppSDK_2_2_2) and add the RuntimeCompatibilityChange.UniversalBGTask_RunCrash enum entry so apps can opt out via RuntimeCompatibilityOptions.

* Update dev/WindowsAppRuntime_UniversalBGTaskDLL/Task.cpp

Co-authored-by: agniuks <41223743+agniuks@users.noreply.github.com>

* [2.0 Servicing] Fix build break: import FrameworkUdk targets in UniversalBGTaskDLL

Task.cpp now includes <FrameworkUdk/Containment.h> for the containment fix,
but WindowsAppRuntime_UniversalBGTaskDLL.vcxproj did not import the
Microsoft.FrameworkUdk targets, so the FrameworkUdk include directory was
missing from the compiler command line, causing:

  Task.cpp(10,10): error C1083: Cannot open include file:
  'FrameworkUdk/Containment.h': No such file or directory

Import Microsoft.FrameworkUdk.targets (which adds the include path and the
Microsoft.Internal.FrameworkUdk.lib link dependency) plus the matching
package-restore Error check, mirroring the existing pattern used by
Microsoft.Windows.ApplicationModel.Resources.vcxproj and other Containment
consumers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: agniuks <41223743+agniuks@users.noreply.github.com>
…it/DCPP build 20260701.1

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1029.260616-0840.3 -> To Version 2.0.0-stable-27200.1033.260630-2330.0
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.16-stable-Rolling.20260617.1 -> To Version 2.0.16-stable-Rolling.20260701.1
…it/DCPP build 20260701.2

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1029.260616-0840.3 -> To Version 2.0.0-stable-27200.1033.260630-2330.1
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.16-stable-Rolling.20260617.1 -> To Version 2.0.17
…n.Details.xml to #6513 state (#6592)

* Revert "Update dependencies from https://dev.azure.com/microsoft/LiftedIXP/_git/DCPP build 20260617.1"

This reverts commit 78720cd.

* Revert "Update dependencies from https://dev.azure.com/microsoft/LiftedIXP/_git/DCPP build 20260609.1"

This reverts commit 7a2bed8.

* Revert "Update dependencies from https://dev.azure.com/microsoft/LiftedIXP/_git/DCPP build 20260605.2"

This reverts commit 85f0069.

* Revert "Update dependencies from https://dev.azure.com/microsoft/LiftedIXP/_git/DCPP build 20260602.3"

This reverts commit b9c6dc6.

* Keep Microsoft.FrameworkUdk at post-bump 260616-0840.3 so 1-arg IsChangeEnabled callsites compile

The revert to #6513 downgraded FrameworkUdk to the pre-bump build, whose IsChangeEnabled template lacks the defaulted patchVersion param, breaking the 1-arg callsites in Helper.cpp and Task.cpp (C2672). Keep FrameworkUdk post-bump while leaving InteractiveExperiences reverted to 2.0.15 to fix the NuGet restore failure.
…it/DCPP build 20260705.3

On relative base path root
Microsoft.FrameworkUdk From Version 2.0.0-stable-27200.1029.260616-0840.3 -> To Version 2.0.0-stable-27200.1034.260705-0915.2
Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1024.260527-1035.1 -> To Version 2.0.0-stable-27200.1034.260705-0915.2
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.15 -> To Version 2.0.17-stable-Rolling.20260705.3
…it/DCPP (#6594)

Microsoft.FrameworkUdk: 2.0.0-stable-27200.1029.260616-0840.3 -> 2.0.0-stable-27200.1033.260630-2330.1
Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage: 2.0.0-stable-27200.1024.260527-1035.1 -> 2.0.0-stable-27200.1033.260630-2330.1
Microsoft.WindowsAppSDK.InteractiveExperiences: 2.0.15 -> 2.0.17
…it/DCPP build 20260708.3

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1033.260630-2330.1 -> To Version 2.0.0-stable-27200.1036.260708-1000.0
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.17 -> To Version 2.0.17-stable-Rolling.20260708.3
…it/DCPP build 20260708.4

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1033.260630-2330.1 -> To Version 2.0.0-stable-27200.1036.260708-1000.1
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.17 -> To Version 2.0.17-stable-Rolling.20260708.4
dotnet-maestro Bot and others added 11 commits July 10, 2026 01:12
…it/DCPP build 20260709.2

On relative base path root
Microsoft.FrameworkUdk , Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage From Version 2.0.0-stable-27200.1033.260630-2330.1 -> To Version 2.1.0-stable-27200.1036.260708-1000.3
Microsoft.WindowsAppSDK.InteractiveExperiences From Version 2.0.17 -> To Version 2.1.1
…on/_git/WindowsAppSDKClosed build 2.0.0-stable.20260709.4

On relative base path root
Microsoft.WindowsAppSDK.AppLicensingInternal.TransportPackage From Version 2.0.0-stable.20260423.1 -> To Version 2.0.0-stable.20260709.4
…b71-4ad2-4e2e-81a5-f3f80a993420

[release/2.0-stable] Update dependencies from microsoft/LiftedIXP/DCPP
…588-b005-41dc-bfa5-6735c5a7c80a

[release/2.0-stable] Update dependencies from microsoft/ProjectReunion/WindowsAppSDKClosed
WinUI PR 16052384 (bug 62927180) merged the GetKeyboardModifiersState race fix into release/2.0-stable with containment gate WINAPPSDK_CHANGEID_62927180, but the corresponding RuntimeCompatibilityChange enum was missing from Foundation, leaving apps unable to opt out of the change. Add the enum in numeric order.
…keyboardmodifiers

Add WindowsServices_GetKeyboardModifiersStateRace enum (62927180)
Containment v2 (2.0 train) requires the catalog entry alongside the IDL enum. Fold WindowsServices_GetKeyboardModifiersStateRace (62927180) into s_changes_2_3_0[] in ascending order so RuntimeCompatibilityOptions::Apply's pre-prune walk covers it.
…80-keyboardmodifiers

Add 62927180 to 2.3.0 containment catalog group
…6603) (#6612)

* Cherry-pick MrmGetFilePathFromName S_OK fallback (gated) into release/2.0-stable

Cherry-picks PR #6603 into release/2.0-stable, but gates the behavior change
behind a RuntimeCompatibilityOptions containment check so apps can disable it.

MrmGetFilePathFromName is documented to always succeed and return a best-effort
path even when no PRI file exists. On 2.0-stable it fails with
ERROR_FILE_NOT_FOUND, which makes `new ResourceManager()` throw when there is no
resources.pri (the XAML-island / no-PRI scenario).

Because this changes an HRESULT from a failure to S_OK, the change is contained
under WINAPPSDK_CHANGEID_63048673:
- Enabled (default): MrmGetFilePathFromName returns S_OK with a non-null
  best-effort path (the provided filename, else resources.pri) under the base
  directory (if set) otherwise the module directory.
- Disabled (via RuntimeCompatibilityOptions): behavior reverts byte-for-byte to
  the current 2.0-stable behavior (ERROR_FILE_NOT_FOUND). Both terminal search
  passes jump to Final, skipping the DefaultFallback pass.

Changes:
- MRM.cpp: gate the reachable DefaultFallback pass + S_OK return on
  IsChangeEnabled<WINAPPSDK_CHANGEID_63048673>(). Add #include
  <FrameworkUdk/Containment.h> and an inline #define for the change ID,
  following the existing 62382643 precedent in Helper.cpp. Preserve the module
  directory since the parent-folder search mutates exeDir in place.
- MRM.vcxproj: link the FrameworkUdk Containment worker (targets import +
  EnsureNuGetPackageBuildImports).
- MrmUnitTest.vcxproj: deploy Microsoft.Internal.FrameworkUdk.dll next to the
  test host (mrm.dll now imports it).
- Helper.cpp (GetDefaultPriFile): inside the existing 62382643 block, gate the
  sparse-packaged [modulename].pri fallback on actual file existence (CheckFile)
  so it still fires once MrmGetFilePathFromName returns S_OK. Correct whether
  63048673 is enabled or disabled; preserves 62382643 behavior.
- MrmTests.cpp: strengthen GetFilePath to assert the fallback path is under the
  module directory.
- BypassTests.json: remove the now-passing UnitTest::BasicTest::GetFilePath and
  MrtCoreUnpackagedTests.TestClass.DefaultResourceManager entries so they gate.

Note for release engineering: per the ContainmentV2 model this PR only defines
and gates the change ID; associating 63048673 to a release group in
RuntimeCompatibilityOptions.cpp's s_catalogGroupsProd[] is the separate
branch-cut step.

Verified locally (x64 Debug): MrmUnitTest 21/21 (change enabled by default).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add unit test confirming pre-fix behavior when fallback change is disabled

Adds ContainmentDisabledTest::GetFilePathFallbackDisabled to MrmUnitTest. It
disables WINAPPSDK_CHANGEID_63048673 via the FrameworkUdk containment worker
(WinAppSdk::Containment::SetConfiguration) and verifies MrmGetFilePathFromName
reverts to the previous behavior: ERROR_FILE_NOT_FOUND (null path) for a
non-existent PRI file, instead of S_OK with a best-effort path.

The class uses IsolationLevel=Method so it runs in its own process. This is
required because IsChangeEnabled<>() caches its result in a process-lifetime
function-local static, so the disabled-state test must not share a process with
BasicTest::GetFilePath (which exercises the enabled default state).

MrmUnitTest.vcxproj: import the FrameworkUdk targets so the test can call the
Containment worker (mrm.dll already imports Microsoft.Internal.FrameworkUdk.dll,
deployed next to the test host).

Verified locally (x64 Debug): MrmUnitTest 22/22, including both the enabled
(GetFilePath) and disabled (GetFilePathFallbackDisabled) cases.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@agniuks

agniuks commented Jul 18, 2026

Copy link
Copy Markdown
Contributor Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
2 pipeline(s) were filtered out due to trigger conditions.

@agniuks

agniuks commented Jul 18, 2026

Copy link
Copy Markdown
Contributor Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
2 pipeline(s) were filtered out due to trigger conditions.

@agniuks

agniuks commented Jul 21, 2026

Copy link
Copy Markdown
Contributor Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
2 pipeline(s) were filtered out due to trigger conditions.

@agniuks
agniuks merged commit 1b38f7b into release/2.0-experimental Jul 21, 2026
46 checks passed
@agniuks
agniuks deleted the user/autosnap/snap-to-release/2.0-experimental-20260717 branch July 21, 2026 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants