Skip to content

Tags: dotnet/maui

Tags

10.0.100

Toggle 10.0.100's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
[release/10.0.1xx-sr10] [Android] Fix scrolling performance in shadow…

…ed containers (#37312)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

Backport of #37291 to `release/10.0.1xx-sr10`.

/cc @kubaflo

Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>

11.0.100-preview.7.26410.2

Toggle 11.0.100-preview.7.26410.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
[release/11.0.1xx-preview7] [XAML] Re-enable Incremental Hot Reload b…

…y default in Debug (#37163)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

Backport of #37157 to release/11.0.1xx-preview7

Re-enables XAML Incremental Hot Reload by default for Debug builds while
preserving the opt-out and keeping Release/publish builds disabled by
default. The legacy hot-reload fallback MSBuild test remains explicitly
pinned to XIHR off.

**Validation**
- The backport patch matches squash merge commit
`6bb9daf7aa47bde8e750635959e7c4db3c46561e` exactly (`git range-diff`).
- `dotnet build Microsoft.Maui.BuildTasks.slnf` passed with 0 warnings
and 0 errors.
- `MSBuildTests.HotReloadSupportForXSG` passed for Debug and Release
(2/2).
- `git diff --check` passes.

cc @PureWeen @Redth

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

11.0.0-preview.6.26360.8

Toggle 11.0.0-preview.6.26360.8's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Update new dotnet/dotnet barid 322330 and dotnet/macios barid 322326 (#…

…36500)

```
darc update-dependencies --id 322330
darc update-dependencies --id 322326 #macios
```

This pull request updates several dependency versions in the project to
newer preview builds. The changes are focused on aligning the .NET SDK,
runtime, Extensions, and macOS/iOS/tvOS/MacCatalyst SDKs to the latest
available versions for improved stability and compatibility.

Dependency version updates:

* Updated `Microsoft.NET.Sdk` and `Microsoft.NETCore.App.Ref` to version
`11.0.100-preview.6.26359.118` in both `eng/Version.Details.xml` and
`eng/Versions.props`, ensuring the project uses the latest .NET SDK and
runtime.
[[1]](diffhunk://#diff-fb62e94a1d6f29f863e3d0a22aa38269f6cd1d7f03b109dc06e2cbf2548b86d3L3-R9)
[[2]](diffhunk://#diff-1ea18ff65faa2ae6fed570b83747086d0317f5e4bc325064f6c14319a9c4ff67L34-R56)
* Updated multiple `Microsoft.Extensions.*` package versions to
`11.0.0-preview.6.26359.118` in both dependency and version property
files, keeping the Extensions libraries consistent with the latest
preview.
[[1]](diffhunk://#diff-fb62e94a1d6f29f863e3d0a22aa38269f6cd1d7f03b109dc06e2cbf2548b86d3L56-R158)
[[2]](diffhunk://#diff-1ea18ff65faa2ae6fed570b83747086d0317f5e4bc325064f6c14319a9c4ff67L34-R56)
* Updated `Microsoft.AspNetCore.*` and related dependencies to
`11.0.0-preview.6.26359.118` in `eng/Version.Details.xml` for improved
ASP.NET Core support.
* Updated macOS, iOS, tvOS, and MacCatalyst SDK dependencies to
`26.5.11720-net11-p6` in both dependency and version property files,
ensuring the latest platform SDKs are used.
[[1]](diffhunk://#diff-fb62e94a1d6f29f863e3d0a22aa38269f6cd1d7f03b109dc06e2cbf2548b86d3L20-R34)
[[2]](diffhunk://#diff-1ea18ff65faa2ae6fed570b83747086d0317f5e4bc325064f6c14319a9c4ff67L70-R73)
* Updated various toolset dependencies (e.g.,
`Microsoft.DotNet.Build.Tasks.Feed`, `Microsoft.DotNet.Arcade.Sdk`) to
`11.0.0-beta.26359.118` for build infrastructure improvements.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

10.0.90

Toggle 10.0.90's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Stabilize Version 10.0.90 (#36509)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

## Summary

Completes the SR9 servicing-version transition after the required
content backports.

- Preserves `PatchVersion` at `90`.
- Sets `PreReleaseVersionLabel` to `servicing`.
- Enables `StabilizePackageVersion` so SR9 produces stable release
packages.

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

10.0.80

Toggle 10.0.80's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Revert PR #33584: restore BindableObject property-context lookup model (

#35970)

> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could <a
href="https://github.com/dotnet/maui/wiki/Testing-PR-Builds">test the
resulting artifacts</a> from this PR and let us know in a comment if
this change resolves your issue. Thank you!

This reverts the `BindableObject` micro-optimization changes from PR
#33584 on `release/10.0.1xx-sr8` due to regression risk. The revert
restores the previous property-context storage/access behavior and
removes the `InternalId` path added in that PR.

- **BindableObject revert (Controls.Core)**
- Restore `_properties` to `Dictionary<BindableProperty,
BindablePropertyContext>`.
- Remove `CollectionsMarshal`-based lookup/add path and `NETSTANDARD`
split logic.
- Restore `CreateAndAddContext` behavior (`_properties.Add(property,
context)`).
- Revert `GetContext` and `GetValues<T>` to `BindableProperty`-keyed
lookups.
- Restore `GetLocalValueEnumerator()`, `LocalValueEnumerator`, and
`LocalValueEntry`.

- **BindableProperty revert (Controls.Core)**
  - Remove `InternalId` infrastructure:
    - `using System.Threading`
    - `_nextInternalId`
    - `InternalId` field
    - `Interlocked.Increment(...)` assignment in constructor

- **Benchmark cleanup**
- Remove
`src/Core/tests/Benchmarks/Benchmarks/BindableObjectBenchmarker.cs`
introduced by PR #33584.

- **Regression tests added (Controls.Core.UnitTests)**
- Add `GetValuesReturnsSetStateAndValue` to validate `GetValues<T>`
preserves expected set-state/value semantics for set vs unset
properties.
- Add `LocalValueEnumeratorReturnsLocallySetValues` to validate the
restored local value enumeration path (`GetLocalValueEnumerator` /
`LocalValueEntry`) over locally set values.
- Add
`DefaultValueCreatorCachesValueWhenReentrantPropertyAddsResizeStore` to
validate re-entrant `DefaultValueCreator` execution (including
additional property sets that grow the backing store) still caches the
created value and invokes the creator once.

Example of restored lookup path:

```csharp
readonly Dictionary<BindableProperty, BindablePropertyContext> _properties =
	new Dictionary<BindableProperty, BindablePropertyContext>(4);

internal BindablePropertyContext GetContext(BindableProperty property) =>
	_properties.TryGetValue(property, out var result) ? result : null;

BindablePropertyContext GetOrCreateContext(BindableProperty property) =>
	GetContext(property) ?? CreateAndAddContext(property);
```

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: rmarinho <1235097+rmarinho@users.noreply.github.com>
Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>

11.0.0-preview.5.26304.4

Toggle 11.0.0-preview.5.26304.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Backport simulator runtime provisioning fix (#35773)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

## Summary
- Backports only the simulator runtime provisioning fix from PR #35364
commit 7b16d25.
- Avoids deleting all simulator runtimes if the first install attempt
fails.
- Tries the exact universal, default universal, and default iOS
simulator runtimes, with pre/post simulator diagnostics.

## Validation
- `git diff --cached --check`
- `ruby -e 'require "yaml"; YAML.load_file(ARGV.fetch(0)); puts "ruby
yaml parse: ok"' eng/pipelines/common/provision.yml`

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

10.0.71

Toggle 10.0.71's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Increment patch version from 70 to 71 (#35786)

10.0.70

Toggle 10.0.70's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
[release/10.0.1xx-sr7] Fix BackButtonBehavior_IconOverride_CustomIcon…

…ShownOnBackButton on iOS 26 (#35566)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

### Issue

UI test `BackButtonBehavior_IconOverride_CustomIconShownOnBackButton`
fails on iOS 26 (vlatest) on the `release/10.0.1xx-sr7` branch.

- Build:
[1427432](https://dev.azure.com/dnceng-public/public/_build/results?buildId=1427432)
(`maui-pr-uitests` on SR7 head `bdca474345`)
- Failed twice (both attempts) — deterministic, not flaky
- Failure: `System.TimeoutException : Timed out waiting for element...`
at `ShellNavigationFeatureTests.cs:line 922`
- Other platforms (Android API 30, iOS 18.5, MacCatalyst) all pass

### Root cause

PR #35521 backported the `_sendPopPending` product fix from #34890 to
SR7 and **removed** the `Assert.Ignore` from tests 50 and 51 (since the
product is now fixed and those tests should pass on iOS 26).

It left in place an obsolete iOS 26 workaround in test 52:

```csharp
[Test, Order(52)]
public void BackButtonBehavior_IconOverride_CustomIconShownOnBackButton()
{
    if (iOS26OrHigher)
    {
        NavigateToDetail1AndWait();   // ← obsolete after #35521
    }
    App.WaitForElement("Detail1GoBackButton");
    ...
```

That workaround was originally needed when test 51 was being skipped on
iOS 26 (so test 52 started from Main and had to navigate to Detail1
itself).

Now that #35521 un-ignored test 51, the flow on iOS 26 is:
1. Test 51 runs, calls `NavigateToDetail1AndWait()` and ends with
`ShellScreenshot()` — UI is on **Detail1**, no reset
2. Test 52 starts on Detail1, hits `if (iOS26OrHigher)` and tries to
navigate **Main → Detail1**
3. But we're already on Detail1, so `NavigateToDetail1Button` isn't
visible → `TimeoutException`

This is purely a test state-leak bug — not a product regression.

### Fix

Remove the now-redundant `iOS26OrHigher` block from test 52. After the
removal, test 52 starts by tapping `Detail1GoBackButton` directly, which
is correct because:
- Test 51 leaves the UI on Detail1
- `Detail1GoBackButton` is a custom page-content button (created via
`ShellNavHelper.CreateNavButton(..., "Detail1GoBackButton")` in
`ShellNavigationControlPage.xaml.cs`), **not** the shell back arrow — it
is unaffected by test 51's `IsVisibleButton` toggle (which sets
`BackButtonBehavior.IsVisible=false` on the shell back arrow)

### Diff

```diff
 [Test, Order(52)]
 public void BackButtonBehavior_IconOverride_CustomIconShownOnBackButton()
 {
-    if (iOS26OrHigher)
-    {
-        NavigateToDetail1AndWait();
-    }
     App.WaitForElement("Detail1GoBackButton");
     App.Tap("Detail1GoBackButton");
     ...
```

### Follow-up (main)

`main` and `net11.0` have the **opposite** asymmetry: the product fix
(`_sendPopPending` reset) is already there, but tests 50 and 51 still
carry the `Assert.Ignore` (so iOS 26 coverage for those scenarios is
silently skipped). When those `Assert.Ignore` lines get removed, the
same workaround should also be removed from test 52 — otherwise main
will hit the same failure this PR fixes here.

### Validation

- Tested locally: only the obsolete branch is removed; remaining test
body matches the iOS 18.5 / Android / MacCatalyst flow that already
passes
- The 4 deleted lines were dead code on every other platform anyway
(`iOS26OrHigher` is false there)
- No product code touched

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

11.0.0-preview.4.26230.3

Toggle 11.0.0-preview.4.26230.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
[release/11.0.1xx-preview4] Update dependencies from dotnet/dotnet, d…

…otnet/macios (#35271)

This pull request updates the following dependencies

[marker]: <> (Begin:5ff6fff7-e896-44f6-b87f-673c4569f4a5)
## From https://github.com/dotnet/macios
- **Subscription**:
[5ff6fff7-e896-44f6-b87f-673c4569f4a5](https://maestro.dot.net/subscriptions?search=5ff6fff7-e896-44f6-b87f-673c4569f4a5)
- **Build**:
[20260501.3](https://dev.azure.com/devdiv/DevDiv/_build/results?buildId=13990367)
([312733](https://maestro.dot.net/channel/9588/github:dotnet:macios/build/312733))
- **Date Produced**: May 1, 2026 8:08:10 AM UTC
- **Commit**:
[cbe42632ab063a8b23df492692f92beeeda68a16](dotnet/macios@cbe4263)
- **Branch**:
[release/11.0.1xx-preview4](https://github.com/dotnet/macios/tree/release/11.0.1xx-preview4)

[DependencyUpdate]: <> (Begin)

- **Dependency Updates**:
  - From [26.4.11511-net11-p4 to 26.4.11514-net11-p4][3]
     - Microsoft.iOS.Sdk.net11.0_26.4
     - Microsoft.MacCatalyst.Sdk.net11.0_26.4
     - Microsoft.macOS.Sdk.net11.0_26.4
     - Microsoft.tvOS.Sdk.net11.0_26.4

[3]: dotnet/macios@16dad20...cbe4263

[DependencyUpdate]: <> (End)


[marker]: <> (End:5ff6fff7-e896-44f6-b87f-673c4569f4a5)




[marker]: <> (Begin:74f9a062-0c3c-4244-97f5-1bdef5ec5486)
## From https://github.com/dotnet/dotnet
- **Subscription**:
[74f9a062-0c3c-4244-97f5-1bdef5ec5486](https://maestro.dot.net/subscriptions?search=74f9a062-0c3c-4244-97f5-1bdef5ec5486)
- **Build**:
[20260430.15](https://dev.azure.com/dnceng/internal/_build/results?buildId=2964538)
([312694](https://maestro.dot.net/channel/9588/github:dotnet:dotnet/build/312694))
- **Date Produced**: May 1, 2026 3:25:05 AM UTC
- **Commit**:
[4370ea16341331f045fa9b89cc46e03aed27195c](dotnet/dotnet@4370ea1)
- **Branch**:
[release/11.0.1xx-preview4](https://github.com/dotnet/dotnet/tree/release/11.0.1xx-preview4)

[DependencyUpdate]: <> (Begin)

- **Dependency Updates**:
  - From [11.0.0-preview.4.26224.122 to 11.0.0-preview.4.26230.115][2]
     - Microsoft.AspNetCore.Authentication.Facebook
     - Microsoft.AspNetCore.Authentication.Google
     - Microsoft.AspNetCore.Authentication.MicrosoftAccount
     - Microsoft.AspNetCore.Authorization
     - Microsoft.AspNetCore.Components
     - Microsoft.AspNetCore.Components.Analyzers
     - Microsoft.AspNetCore.Components.Forms
     - Microsoft.AspNetCore.Components.Web
     - Microsoft.AspNetCore.Components.WebAssembly
     - Microsoft.AspNetCore.Components.WebAssembly.Server
     - Microsoft.AspNetCore.Components.WebView
     - Microsoft.AspNetCore.Metadata
     - Microsoft.Extensions.Configuration
     - Microsoft.Extensions.Configuration.Abstractions
     - Microsoft.Extensions.Configuration.Json
     - Microsoft.Extensions.DependencyInjection
     - Microsoft.Extensions.DependencyInjection.Abstractions
     - Microsoft.Extensions.FileProviders.Abstractions
     - Microsoft.Extensions.Hosting.Abstractions
     - Microsoft.Extensions.Logging
     - Microsoft.Extensions.Logging.Abstractions
     - Microsoft.Extensions.Logging.Console
     - Microsoft.Extensions.Logging.Debug
     - Microsoft.Extensions.Primitives
     - Microsoft.JSInterop
     - Microsoft.NETCore.App.Ref
  - From [11.0.0-beta.26224.122 to 11.0.0-beta.26230.115][2]
     - Microsoft.DotNet.Arcade.Sdk
     - Microsoft.DotNet.Build.Tasks.Feed
     - Microsoft.DotNet.Build.Tasks.Installers
     - Microsoft.DotNet.Build.Tasks.Workloads
     - Microsoft.DotNet.Helix.Sdk
     - Microsoft.DotNet.RemoteExecutor
     - Microsoft.DotNet.SharedFramework.Sdk
     - Microsoft.DotNet.XUnitExtensions
- From [11.0.100-preview.4.26224.122 to 11.0.100-preview.4.26230.115][2]
     - Microsoft.NET.Sdk

[2]: dotnet/dotnet@48bd87d...4370ea1

[DependencyUpdate]: <> (End)


[marker]: <> (End:74f9a062-0c3c-4244-97f5-1bdef5ec5486)



[marker]: <> (Begin:Coherency Updates)
## Coherency Updates

The following updates ensure that dependencies with a
*CoherentParentDependency*
attribute were produced in a build used as input to the parent
dependency's build.
See [Dependency Description
Format](https://github.com/dotnet/arcade/blob/master/Documentation/DependencyDescriptionFormat.md#dependency-description-overview)

[DependencyUpdate]: <> (Begin)

- **Coherency Updates**:
- **Microsoft.MacCatalyst.Sdk.net10.0_26.4**: from 26.4.10255 to
26.4.10259 (parent: Microsoft.MacCatalyst.Sdk.net11.0_26.4)
- **Microsoft.macOS.Sdk.net10.0_26.4**: from 26.4.10255 to 26.4.10259
(parent: Microsoft.macOS.Sdk.net11.0_26.4)
- **Microsoft.iOS.Sdk.net10.0_26.4**: from 26.4.10255 to 26.4.10259
(parent: Microsoft.iOS.Sdk.net11.0_26.4)
- **Microsoft.tvOS.Sdk.net10.0_26.4**: from 26.4.10255 to 26.4.10259
(parent: Microsoft.tvOS.Sdk.net11.0_26.4)

[DependencyUpdate]: <> (End)

[marker]: <> (End:Coherency Updates)

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: GitHub Actions <github-actions@xamarin.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

10.0.60

Toggle 10.0.60's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Use Azure Artifacts Maven feed for CFSClean network isolation complia…

…nce (#35089)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

## Problem

The official build pipeline (`dotnet-maui`, def 1095) fails because
[CFSClean network isolation](#34540)
blocks direct access to `repo.maven.apache.org`. This breaks two
separate Gradle invocations:

1. **`src/Core/AndroidNative` build** — our own Gradle project
2. **`Microsoft.Android.Sdk.Bindings.Gradle.targets`** — Android SDK
binding generator in `Core.csproj`

Per [1ES CFS guidance](https://aka.ms/1es/netiso/CFS), the fix is to
route all Maven dependency resolution through an Azure Artifacts feed
with upstream sources.

## Fix

### Gradle configuration changes
- **`settings.gradle`** — Replace `mavenCentral()`, `google()`,
`gradlePluginPortal()` with the `dotnet-public-maven` Azure Artifacts
feed. Add the [Azure Artifacts Gradle credential
provider](https://pkgs.dev.azure.com/artifacts-public/PublicTools/_packaging/AzureArtifacts/maven/v1)
plugin (v1.1.1) for local authentication.
- **`build.gradle`** — Point `buildscript.repositories` to the same feed
for AGP classpath resolution.
- **`eng/init.gradle`** — Global Gradle init script that redirects any
remaining Maven Central/Google Maven references (e.g. from
`Microsoft.Android.Sdk.Bindings.Gradle.targets`) to the feed. Installed
into `GRADLE_USER_HOME` by the pipeline.

### Pipeline changes
- **`cache-gradle.yml`** — Copy `init.gradle` into `GRADLE_USER_HOME`
**after** cache restore to prevent stale cached copies. Uses
`$(GRADLE_USER_HOME)` variable for the destination path.

### Why the ingestion script (`eng/ingest-maven-deps.sh`) is needed

The `dotnet-public-maven` feed proxies Maven Central, but new packages
require an **authenticated first-time pull** to be saved. The Gradle
credential provider plugin has two limitations that prevent `dotnet
build` from self-ingesting:

1. **Skips entirely in CI** — when `TF_BUILD=True` (Azure Pipelines),
the plugin is a no-op
2. **Doesn't cover all Gradle scopes** — the plugin injects auth into
`pluginManagement.repositories` and `project.repositories`, but NOT
`buildscript.repositories` or AGP's internal `detachedConfiguration`
scopes. This means `dotnet build` locally cannot ingest new packages
through the Android SDK binding targets even with correct credentials.

We verified this by adding an un-ingested package
(`io.coil-kt:coil:2.7.0`) — `dotnet build` fails with 401 despite the
credential provider authenticating successfully.

**Upstream issue:**
[microsoft/artifacts-credprovider#671](microsoft/artifacts-credprovider#671)

The script works around these gaps by:
1. Acquiring an auth token via the .NET credential provider (MSAL)
2. Pre-ingesting platform-specific artifacts (aapt2) for all OS variants
(macOS/Linux/Windows)
3. Running Gradle with `--refresh-dependencies` to bypass local cache
4. Falling back to `curl` with Bearer token for unreachable scopes

**Run `./eng/ingest-maven-deps.sh` after adding or updating any
Maven/Gradle dependency.**

### Documentation updates
- `settings.gradle` — explains the feed setup and when to run the script
- `gradle-wrapper.properties` — warning not to upgrade Gradle past 8.x
(`dotnet/android#10738`)
- `copilot-instructions.md` — always-on guidance for Gradle 401 failures
- `azdo-build-investigator/SKILL.md` — error signatures and DO NOTs for
CI investigation
- `android.instructions.md` — quick reference for Android developers

## Verified

- ✅ Internal official build
[2961149](https://dev.azure.com/dnceng/internal/_build/results?buildId=2961149)
passed — Pack macOS + Pack Windows both green
- ✅ Same pattern used by dotnet/aspnetcore ([PR
#64962](dotnet/aspnetcore#64962))
- ✅ Feed is public — no auth needed to read already-ingested packages,
external contributors can build without credentials
- ✅ Locally verified: `dotnet build` works for already-ingested
packages, fails for new ones (confirming script is needed)

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Matt Mitchell (.NET) <mmitche@microsoft.com>