Skip to content

Add packaged-app identity/AUMID groundwork and Windows gating to PackagedApp extension#9914

Merged
Evangelink merged 11 commits into
mainfrom
dev/amauryleve/improve-packagedapp-extension
Jul 14, 2026
Merged

Add packaged-app identity/AUMID groundwork and Windows gating to PackagedApp extension#9914
Evangelink merged 11 commits into
mainfrom
dev/amauryleve/improve-packagedapp-extension

Conversation

@Evangelink

@Evangelink Evangelink commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

Follow-up to the discussion under #9908 about Microsoft.Testing.Extensions.PackagedApp. Today the launcher's only real launch path is CopyDirectory + Process.Start, which cannot launch a packaged (MSIX) WinUI/UWP app. VSTest gets loose-layout registration and AUMID activation from Visual-Studio-internal deployment components (IVsAppContainerProjectDeploy2, IDeploymentServicesProvider.GetAppLauncher(), MEF-composed from the VS install) that are not redistributable, so a standalone MTP extension cannot depend on them.

This PR lands the parts of that flow that need no VS-internal API, plus makes the extension honest about what it can do today. It does not add any public API surface: AppxManifestInfo/AppxApplicationInfo are internal helpers (tracked in InternalAPI.Unshipped.txt).

Changes

  • AppxManifestInfo (new, internal): parses AppxManifest.xml and computes the PackageFamilyName and, per declared <Application>, the Application User Model ID ({PackageFamilyName}!{AppId}) using the public Windows publisher-hash algorithm — SHA-256 of the UTF-16LE Publisher, first 8 bytes, Crockford base32. Pure managed and cross-platform; it is the managed, VS-independent equivalent of VS's internal deploymentFile.AppUserModelId. A package may declare several applications, so ResolveApplication(executableFileName) selects the one whose Executable matches the requested test host and rejects ambiguous requests instead of defaulting to the first entry.
  • Windows gating: IsEnabledAsync() now returns OperatingSystem.IsWindows(). On non-Windows the launcher is never registered, so the platform keeps its default in-process path instead of being forced onto the controller/deploy path by a no-op launcher.
  • Fail fast on packaged layouts: LaunchTestHostAsync detects a packaged layout (an AppxManifest.xml at the executable's directory or a parent package root) and throws an actionable error — including the AUMID of the application matching the requested executable and a pointer to Implement packaged (MSIX) app registration and AUMID activation in Microsoft.Testing.Extensions.PackagedApp #9933 — instead of silently Process.Starting an executable that can't host the run. Non-packaged (loose-layout) hosts keep the existing behavior unchanged.
  • Honest descriptions: the extension display description, the NuGet PackageDescription, PACKAGE.md, and the public XML docs now describe the supported path as launching a non-packaged (loose-layout) Windows host (for example, unpackaged WinUI), and describe genuinely packaged (MSIX) apps — UWP or packaged WinUI — as the rejected/planned path pending Implement packaged (MSIX) app registration and AUMID activation in Microsoft.Testing.Extensions.PackagedApp #9933. (UWP always requires package identity and an AppxManifest.xml, so it is inherently packaged and is not part of the supported path today.)

Still a follow-up (not in this PR — #9933)

Actual PackageManager.RegisterPackageByUriAsync registration, IApplicationActivationManager AUMID activation, and the AppContainer connect-back transport (the platform passes the controller IPC pipe name via an environment variable, which an activated packaged process does not inherit) remain to be done. (#2784 tracks the distinct unpackaged WinUI scenario and is not the tracker for this work.)

Verification

  • Microsoft.Testing.Extensions.PackagedApp builds with 0 warnings / 0 errors (incl. -p:TreatWarningsAsErrors=true); internal API and xlf updated.
  • AppxManifestInfoTests and PackagedAppTestHostLauncherTests (including multi-application resolution and subdirectory-executable package-root detection) discovered and passing.

The PackagedApp launcher's only real launch path was CopyDirectory + Process.Start, which cannot launch a packaged (MSIX) WinUI/UWP app; VSTest gets registration + AUMID activation from VS-internal deployment components (IVsAppContainerProjectDeploy2, IDeploymentServicesProvider) that are not redistributable.

This adds the parts that need no VS-internal API:
- AppxManifestInfo: parses AppxManifest.xml and computes PackageFamilyName + Application User Model ID using the public Windows publisher-hash algorithm (SHA-256 of the UTF-16LE publisher, first 8 bytes, Crockford base32). Pure managed, cross-platform, unit-tested against the well-known 8wekyb3d8bbwe vector.
- IsEnabledAsync now gates on OperatingSystem.IsWindows(), so on non-Windows the launcher is never registered and the platform keeps its default in-process path (instead of being forced onto the controller/deploy path).
- LaunchTestHostAsync now detects a packaged layout (AppxManifest.xml) and fails fast with an actionable message including the AUMID activation would use, referencing #2784, instead of silently starting an executable that cannot host the run. Non-packaged (loose-layout) hosts keep the existing Process.Start path.

Registration (PackageManager.RegisterPackageByUriAsync) + AUMID activation (IApplicationActivationManager) and the sandbox connect-back transport remain a follow-up (#2784).

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

Copilot-Session: c5c7d634-e822-4475-9312-a9dde92753f6
Copilot AI review requested due to automatic review settings July 13, 2026 20:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds groundwork in the Microsoft.Testing.Extensions.PackagedApp extension to recognize packaged (MSIX) layouts by parsing AppxManifest.xml to compute PFN/AUMID, gates the extension to Windows-only registration, and fails fast with an actionable error when a packaged layout is detected (since AUMID activation isn’t implemented yet).

Changes:

  • Add AppxManifestInfo to parse AppxManifest.xml and compute PackageFamilyName and AppUserModelId (AUMID), plus unit tests for the publisher-hash algorithm and manifest parsing.
  • Gate PackagedAppTestHostLauncher.IsEnabledAsync() to OperatingSystem.IsWindows() and reject packaged layouts (manifest present) with a localized, actionable error.
  • Update resources (.resx + .xlf) and internal API tracking; expose internals to the unit test assembly.
Show a summary per file
File Description
test/UnitTests/Microsoft.Testing.Extensions.UnitTests/Microsoft.Testing.Extensions.UnitTests.csproj Conditionally reference the PackagedApp extension only for .NETCoreApp TFMs.
test/UnitTests/Microsoft.Testing.Extensions.UnitTests/AppxManifestInfoTests.cs New unit tests covering publisher-id hashing and manifest parsing edge cases.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/AppxManifestInfo.cs New manifest parser + PFN/AUMID computation.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/PackagedAppTestHostLauncher.cs Windows gating + fail-fast rejection for packaged layouts; updated doc remarks.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/ExtensionResources.resx Add new localized strings for invalid manifest and unsupported packaged launch.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.cs.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.de.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.es.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.fr.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.it.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.ja.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.ko.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.pl.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.pt-BR.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.ru.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.tr.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.zh-Hans.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Resources/xlf/ExtensionResources.zh-Hant.xlf Add new trans-units for the new resource keys.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/Microsoft.Testing.Extensions.PackagedApp.csproj Add InternalsVisibleTo for the unit test assembly.
src/Platform/Microsoft.Testing.Extensions.PackagedApp/InternalAPI/InternalAPI.Unshipped.txt Track newly introduced internal API surface for AppxManifestInfo.

Review details

  • Files reviewed: 20/20 changed files
  • Comments generated: 3
  • Review effort level: Low

Comment thread src/Platform/Microsoft.Testing.Extensions.PackagedApp/AppxManifestInfo.cs Outdated
@github-actions

This comment has been minimized.

Regenerated via UpdateXlf. The last localized check-in added translations for
'GlobalTestFixtureShouldBeValidClassLayout' (fr) and 'SlowTestStillRunning' (ru)
that XliffTasks rejects (placeholder mismatch), breaking the build with
"xlf is out-of-date with resx". UpdateXlf resets those two units to state="new"
so the build passes; they will be re-translated on the next localization pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4350f662-0e5d-4e05-b156-1ef619da3b9e
Copilot AI review requested due to automatic review settings July 14, 2026 07:59
Responds to Copilot review feedback on the PackagedApp extension:
- Replace TryReadFromLayout (a Try* method that could still throw on parse/IO errors) with GetManifestPath, a truly non-throwing existence probe that returns the manifest path or null; the launcher now does an explicit ReadFromManifest when a packaged layout is detected.
- Add PackagedAppTestHostLauncherTests: IsEnabledAsync is enabled only on Windows (runs on both Windows and non-Windows CI legs), and LaunchTestHostAsync fails fast on a packaged layout with an actionable message carrying the computed AUMID (or package family name when no Application is declared).
- Update AppxManifestInfoTests to cover GetManifestPath (including that it never parses).

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

Copilot-Session: c5c7d634-e822-4475-9312-a9dde92753f6

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 23/23 changed files
  • Comments generated: 3
  • Review effort level: Low

Comment thread src/Analyzers/MSTest.Analyzers/xlf/Resources.fr.xlf
Copilot AI review requested due to automatic review settings July 14, 2026 08:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 23/23 changed files
  • Comments generated: 2
  • Review effort level: Medium

Comment thread src/Platform/Microsoft.Testing.Extensions.PackagedApp/AppxManifestInfo.cs Outdated
@github-actions

This comment has been minimized.

Adds PackagedAppLaunchNotSupportedTests, an end-to-end acceptance test that bakes an AppxManifest.xml (Name=Contoso.MyTestApp, Publisher=CN=Contoso, Application Id=App) next to a real Microsoft.Testing.Platform test host that calls AddPackagedAppDeployment(). Running the host exercises the full controller/launch path: the PackagedApp launcher detects the packaged layout and throws instead of Process.Start-ing it. The asset catches the exception and returns a sentinel exit code, so the test deterministically asserts the failure and that the message stays actionable (contains the computed AUMID Contoso.MyTestApp_h91ms92gdsmmt!App and the #2784 tracking URL).

The manifest is baked into an immutable per-fixture asset (not mutated at test time), so it is parallel-safe. Windows-only, matching the launcher's OS gating; on other OSes the launcher stays disabled and the layout is never inspected.

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

Copilot-Session: c5c7d634-e822-4475-9312-a9dde92753f6
Copilot AI review requested due to automatic review settings July 14, 2026 08:26
@Evangelink

Copy link
Copy Markdown
Member Author

Added end-to-end acceptance coverage for the packaged-layout fail-fast in 213236f8e: PackagedAppLaunchNotSupportedTests bakes an AppxManifest.xml next to a real MTP test host that calls AddPackagedAppDeployment(), so the full controller/launch path runs and the launcher's packaged-layout detection + throw is exercised (not just the unit-level AppxManifestInfo parsing). The asset catches the exception and returns a sentinel exit code, and the test asserts the message stays actionable (contains the computed AUMID Contoso.MyTestApp_h91ms92gdsmmt!App and the #2784 tracking URL). Verified locally on Windows: both TFM cases (net8.0, net10.0) pass.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 24/24 changed files
  • Comments generated: 2
  • Review effort level: Medium

Comment thread src/Platform/Microsoft.Testing.Extensions.PackagedApp/AppxManifestInfo.cs Outdated
@github-actions

This comment has been minimized.

Copilot AI review requested due to automatic review settings July 14, 2026 10:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 22/22 changed files
  • Comments generated: 7
  • Review effort level: Medium

Comment thread src/Platform/Microsoft.Testing.Extensions.PackagedApp/AppxManifestInfo.cs Outdated
Comment thread test/UnitTests/Microsoft.Testing.Extensions.UnitTests/AppxManifestInfoTests.cs Outdated
Comment thread src/Platform/Microsoft.Testing.Extensions.PackagedApp/AppxManifestInfo.cs Outdated
@github-actions

This comment has been minimized.

@Evangelink Evangelink changed the title Add public-API packaged-app identity/AUMID groundwork and Windows gating to PackagedApp extension Add packaged-app identity/AUMID groundwork and Windows gating to PackagedApp extension Jul 14, 2026
…criptions

- AppxManifestInfo now parses all <Application> entries and adds ResolveApplication(executableFileName) that disambiguates by executable and rejects ambiguous matches, instead of always selecting the first application. The launcher reports the AUMID of the app matching the requested test host.
- Update the extension description, NuGet PackageDescription, and PACKAGE.md to distinguish the supported non-packaged (loose-layout) path from the unsupported packaged (MSIX) path pending #2784; regenerate xlf.
- Update InternalAPI and unit tests accordingly.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a7e0a98b-132a-4c4d-9d3a-4764c1504e05
Copilot AI review requested due to automatic review settings July 14, 2026 10:16

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 24/24 changed files
  • Comments generated: 1
  • Review effort level: Medium

…g issue

- Add UTF-8 BOM to the PackagedApp .cs files in the diff to match the repo convention (.editorconfig requires utf-8-bom for *.cs).
- Point the packaged-app 'not implemented yet' references to the dedicated tracker #9933 instead of #2784 (which tracks unpackaged WinUI and states MSIX already works).
- Update the AddPackagedAppDeployment XML docs to state only non-packaged (loose-layout) hosts are launched today and packaged (MSIX) layouts are rejected.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a7e0a98b-132a-4c4d-9d3a-4764c1504e05
Copilot AI review requested due to automatic review settings July 14, 2026 10:23
Update TestingPlatformBuilderHook and the test host handle summaries to state only non-packaged (loose-layout) hosts are launched today and packaged (MSIX) layouts are rejected (tracked by #9933).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a7e0a98b-132a-4c4d-9d3a-4764c1504e05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 27/27 changed files
  • Comments generated: 2
  • Review effort level: Medium

Comment thread src/Platform/Microsoft.Testing.Extensions.PackagedApp/PACKAGE.md Outdated
Copilot AI review requested due to automatic review settings July 14, 2026 10:29

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 27/27 changed files
  • Comments generated: 2
  • Review effort level: Medium

@github-actions

This comment has been minimized.

Application/@eXecutable in an MSIX manifest can be package-root-relative (e.g. bin\\host.exe), so the manifest may live in a parent of the executable's directory. Add AppxManifestInfo.FindManifestPath, which walks up from the executable's directory to the nearest AppxManifest.xml, and use it in the launcher so such valid layouts are still detected instead of falling through to Process.Start. ResolveApplication now matches on the executable file name so a subdirectory-qualified Executable still resolves. Added unit tests.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a7e0a98b-132a-4c4d-9d3a-4764c1504e05
Copilot AI review requested due to automatic review settings July 14, 2026 11:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 27/27 changed files
  • Comments generated: 1
  • Review effort level: Medium

Comment thread src/Platform/Microsoft.Testing.Extensions.PackagedApp/PACKAGE.md Outdated
@github-actions

This comment has been minimized.

UWP apps always require package identity and an AppxManifest.xml, so they are inherently packaged and are rejected by the launcher today. Only genuinely unpackaged hosts (for example, unpackaged WinUI) use the implemented copy-and-launch path. Update PACKAGE.md, the NuGet PackageDescription, the extension resource description, and the public XML docs (PackagedAppExtensions, TestingPlatformBuilderHook, the launcher, and the handle) so the supported path no longer advertises UWP, while UWP/packaged WinUI stay described as the rejected/planned MSIX path. Regenerated xlf.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a7e0a98b-132a-4c4d-9d3a-4764c1504e05
Copilot AI review requested due to automatic review settings July 14, 2026 12:12

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 27/27 changed files
  • Comments generated: 1
  • Review effort level: Medium

@github-actions

This comment has been minimized.

Copilot AI review requested due to automatic review settings July 14, 2026 13:50

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 27/27 changed files
  • Comments generated: 1
  • Review effort level: Medium

@github-actions

Copy link
Copy Markdown
Contributor

🧪 Test quality grade — PR #9914

GradeTestNotes
D (60–69) new AppxManifestInfoTests.
ComputePublisherId_
IsStableForSameInput
Tautological assertion — f(x) == f(x) with identical literal input proves determinism but not correctness; consider asserting against a known hash value instead.
A (90–100) new AppxManifestInfoTests.
ComputePublisherId_
ForMicrosoftStorePublisher_
MatchesWellKnownHash
No issues found.
A (90–100) new AppxManifestInfoTests.
ComputePublisherId_
IsCaseSensitive
No issues found.
A (90–100) new AppxManifestInfoTests.
ComputePublisherId_
IsThirteenCharacters
No issues found.
A (90–100) new AppxManifestInfoTests.
FindManifestPath_
WhenManifestIsInAnAncestorDirectory_
ReturnsTheNearestManifest
Good negative + positive assertion pair (GetManifestPath misses, FindManifestPath finds).
A (90–100) new AppxManifestInfoTests.
FindManifestPath_
WithoutAnyManifest_
ReturnsNull
No issues found.
A (90–100) new AppxManifestInfoTests.
GetManifestPath_
WithManifest_
ReturnsPathWithoutParsing
No issues found.
A (90–100) new AppxManifestInfoTests.
GetManifestPath_
WithoutManifest_
ReturnsNull
No issues found.
A (90–100) new AppxManifestInfoTests.
ReadFromManifest_
ComputesPackageFamilyNameAndAppUserModelId
Thorough: checks PackageName, Publisher, PackageFamilyName, Application.Id and AppUserModelId in one cohesive test.
A (90–100) new AppxManifestInfoTests.
ReadFromManifest_
IgnoresSchemaNamespaceVersion
No issues found.
A (90–100) new AppxManifestInfoTests.
ReadFromManifest_
ParsesAllApplicationsInManifestOrder
No issues found.
A (90–100) new AppxManifestInfoTests.
ReadFromManifest_
WithoutApplication_
LeavesApplicationsEmpty
Good triple assertion: empty collection, null resolve, correct family name.
A (90–100) new AppxManifestInfoTests.
ReadFromManifest_
WithoutIdentity_
Throws
No issues found.
A (90–100) new AppxManifestInfoTests.
ReadFromManifest_
WithoutPublisher_
Throws
No issues found.
A (90–100) new AppxManifestInfoTests.
ResolveApplication_
MatchesExecutableDeclaredWithASubdirectoryPath
No issues found.
A (90–100) new AppxManifestInfoTests.
ResolveApplication_
WithMultipleApplications_
SelectsTheOneMatchingTheExecutable
No issues found.
A (90–100) new AppxManifestInfoTests.
ResolveApplication_
WithMultipleApplicationsAndNoMatch_
Throws
No issues found.
A (90–100) new AppxManifestInfoTests.
ResolveApplication_
WithSingleApplication_
ReturnsItRegardlessOfExecutable
No issues found.
A (90–100) new PackagedAppLaunchNotSupportedTests.
LaunchTestHost_
WithPackagedLayout_
FailsFastWithActionableMessage
Integration test with three targeted assertions: exit code, AUMID, and tracking-issue URL.
A (90–100) new PackagedAppTestHostLauncherTests.
IsEnabledAsync_
IsEnabledOnlyOnWindows
Cross-platform gate verified cleanly; runs on both Windows and non-Windows CI legs.
A (90–100) new PackagedAppTestHostLauncherTests.
LaunchTestHostAsync_
WithMultipleApplications_
ReportsTheOneMatchingTheExecutable
No issues found.
A (90–100) new PackagedAppTestHostLauncherTests.
LaunchTestHostAsync_
WithPackagedLayout_
ThrowsWithApplicationUserModelId
No issues found.
A (90–100) new PackagedAppTestHostLauncherTests.
LaunchTestHostAsync_
WithPackagedLayoutWithoutApplication_
ThrowsWithPackageFamilyName
No issues found.

This advisory comment was generated automatically. Grades are heuristic
and informational — they do not block merging. Re-run with
/grade-tests.

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • awmgmcpg

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "awmgmcpg"

See Network Configuration for more information.

🤖 Automated content by GitHub Copilot. Generated by the Grade Tests on PR (on open / sync) workflow. · 56.7 AIC · ⌖ 4.66 AIC · ⊞ 8.9K · [◷]( · )

@Evangelink
Evangelink enabled auto-merge (squash) July 14, 2026 15:06
@Evangelink Evangelink added the state/needs-review Awaiting review from the team. label Jul 14, 2026
@Evangelink
Evangelink merged commit ac1a791 into main Jul 14, 2026
39 checks passed
@Evangelink
Evangelink deleted the dev/amauryleve/improve-packagedapp-extension branch July 14, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-review Awaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants