Skip to content

Commit 8c18234

Browse files
RedthCopilot
andcommitted
Merge core vertical slice (2610231)
Foundation landed the same MAUI 11.0.0-preview.7.26426.4 bump this branch had taken ahead of it, so both conflicts were this branch's temporary pin against foundation's official one. Foundation's version is taken verbatim for both Directory.Packages.props and eng/baselines.json - they own those files, and the branch now carries no delta in either. The gesture work built on that pin is unaffected: same package stamp, same public Tap/Pointer APIs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2 parents e041b1f + 2610231 commit 8c18234

6 files changed

Lines changed: 128 additions & 25 deletions

File tree

Directory.Packages.props

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,10 @@
1212

1313
<ItemGroup Label="MAUI (neutral assemblies consumed from the published feed)">
1414
<!--
15-
Pinned to eng/baselines.json > developmentPackageBaseline. Bumping this without
16-
regenerating the API baselines will produce misleading diffs.
17-
18-
Moved from 26418.3 (nuspec commit 0b3bb76d2d) to 26426.4 (nuspec commit bedd1b18b7)
19-
to pick up the public gesture dispatch APIs from dotnet/maui#37420 and #37671.
20-
26418.3 predates both merges, so TapGestureRecognizer.SendTapped and the
21-
PointerGestureRecognizer send members are internal there and an out-of-tree backend
22-
cannot raise those gestures at all. Verified by reflecting over both packages.
15+
Pinned to eng/baselines.json > developmentPackageBaseline: the first coherent
16+
public-feed net11 MAUI package set, whose nuspec repository commits all resolve to
17+
0b3bb76d2d (PR #36657). Bumping this without regenerating the API baselines will
18+
produce misleading diffs.
2319
-->
2420
<PackageVersion Include="Microsoft.Maui.Core" Version="11.0.0-preview.7.26426.4" />
2521
<PackageVersion Include="Microsoft.Maui.Controls" Version="11.0.0-preview.7.26426.4" />
@@ -35,19 +31,21 @@
3531
DIFFERENT VERSION LINE FROM MAUI, deliberately.
3632
3733
These are ASP.NET Core packages, not MAUI packages, and they do not share MAUI's
38-
version stamp. There is no Microsoft.AspNetCore.Components.WebView at
39-
11.0.0-preview.7.26426.4 - that version simply does not exist - and pinning it there
40-
produced NU1102 for the whole BlazorWebView graph.
34+
version stamp. Pinning them to it produced NU1102/NU1603 for the whole BlazorWebView
35+
graph, because no ASP.NET Core package exists at a MAUI build number.
4136
4237
11.0.0-preview.7.26381.103 is not a guess: it is what
43-
Microsoft.AspNetCore.Components.WebView.Maui 11.0.0-preview.7.26426.4 declares in its
44-
own nuspec, and it matches the SDK build we pin in global.json
45-
(11.0.100-preview.7.26381.103), so the whole graph stays on one ASP.NET Core build.
38+
Microsoft.AspNetCore.Components.WebView.Maui declares in its own nuspec, and it
39+
matches the SDK build pinned in global.json (11.0.100-preview.7.26381.103), so the
40+
whole graph stays on one ASP.NET Core build.
41+
42+
NOTE: this floor did NOT move when the MAUI baseline was bumped from
43+
11.0.0-preview.7.26418.3 to 11.0.0-preview.7.26426.4 - the newer WebView.Maui nuspec
44+
declares the same 26381.103 dependencies. Verify against the nuspec before changing
45+
it; do not assume it tracks the MAUI stamp.
4646
47-
A higher version such as 11.0.0-rc.1.26378.118 also resolves, but it silently
48-
upgrades the transitive dependency past what MAUI asked for and mixes rc.1 ASP.NET
49-
Core bits with preview.7 MAUI bits. Matching the declared dependency is the coherent
50-
choice.
47+
A higher version resolves but silently upgrades past what MAUI asked for and mixes
48+
version lines. Matching the declared dependency is the coherent choice.
5149
5250
Verified by eng/tests/PackageGraphProbe.
5351
-->

PROVENANCE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import was being prepared. A branch name would have made the import unreproducib
1818
| `sourceBaseline` | `ee4d06cde6b49e297631b08426a33fb34f3152ef` | dotnet/maui `net11.0` @ 2026-08-18. The forward source baseline. |
1919
| `requiredAncestor` | `0b3bb76d2dd68d76b7c1302f43a76270d5949564` | PR [#36657](https://github.com/dotnet/maui/pull/36657), the Essentials/MainThread extensibility work. Minimum API floor. |
2020
| `behaviorBaseline` | `c1f4f7d879f6126029009902289efd6a4bb1bda9` | Tag `9.0.120`, the last published Tizen behaviour/API baseline. Retained here as tag `upstream/9.0.120`. |
21-
| `developmentPackageBaseline` | `11.0.0-preview.7.26418.3` | First coherent public-feed MAUI package set, from the [dnceng `dotnet11` feed](https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json). All key nuspec repository commits resolve to `0b3bb76d2d`. |
21+
| `developmentPackageBaseline` | `11.0.0-preview.7.26426.4` | Coherent public-feed MAUI package set, from the [dnceng `dotnet11` feed](https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json). All key nuspec repository commits resolve to `bedd1b18b7`. |
2222

2323
Two details are easy to get wrong and are worth stating explicitly:
2424

docs/migration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ the few hours the initial import was prepared.
9797
| `sourceBaseline` | `ee4d06cde6` — dotnet/maui `net11.0` @ 2026-08-18 |
9898
| `requiredAncestor` | `0b3bb76d2d` — PR #36657, Essentials/MainThread extensibility |
9999
| `behaviorBaseline` | `c1f4f7d879` — tag `9.0.120`, last published Tizen release |
100-
| `developmentPackageBaseline` | `11.0.0-preview.7.26418.3` from the dnceng `dotnet11` feed |
100+
| `developmentPackageBaseline` | `11.0.0-preview.7.26426.4` from the dnceng `dotnet11` feed |
101101

102102
Two traps worth repeating:
103103

docs/net11-status.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,15 @@ Foundation-owned; flagged rather than changed here.
121121
dotnet/maui#36657 (`0b3bb76d2d`) merged 2026-08-18. The newest .NET 11 MAUI build on nuget.org is
122122
`11.0.0-preview.7.26406.9`, which predates it.
123123
124-
Resolved, not blocked: the repository consumes `11.0.0-preview.7.26418.3` from the `dotnet11` dnceng
124+
Resolved, not blocked: the repository consumes `11.0.0-preview.7.26426.4` from the `dotnet11` dnceng
125125
feed, pinned centrally in `Directory.Packages.props` and mapped in `nuget.config` via
126-
`packageSourceMapping`. The frozen source baseline (`ee4d06cde6`) is later than that package, so a
127-
newer coherent dev build can be dropped in without touching anything else.
126+
`packageSourceMapping`.
127+
128+
Note that these packages are built from `bedd1b18b7`, which is 46 commits *ahead* of the frozen
129+
source baseline `ee4d06cde6` that the history import is pinned to. `eng/baselines.json` records the
130+
consequence in full: the gap is one-directional and applies to imported **source**, not to the
131+
assemblies this slice compiles against. Nothing in this backend depends on the three Tizen-touching
132+
commits in that gap.
128133
129134
### B5 - Runtime packs
130135

eng/baselines.json

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"is also written down."
3535
],
3636
"observedAgainst": "bedd1b18b7682193e05b47267509cec8c49c6853",
37+
"$note": "bedd1b18b7 is also developmentPackageBaseline.nuspecRepositoryCommit, so the Microsoft.Maui.* packages this repository compiles against DO contain these three API additions while the imported source baseline does not. The gap therefore applies to imported source only.",
3738
"commits": [
3839
{ "commit": "62418a4ec4", "pullRequest": 37420, "title": "Expose gesture recognizer dispatch APIs" },
3940
{ "commit": "78502a5325", "pullRequest": 37671, "title": "Harden gesture recognizer dispatch API contracts" },
@@ -60,8 +61,26 @@
6061
"version": "11.0.0-preview.7.26426.4",
6162
"feed": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json",
6263
"nuspecRepositoryCommit": "bedd1b18b7682193e05b47267509cec8c49c6853",
63-
"role": "Public-feed MAUI package set for net11. Used when building against published MAUI packages rather than source.",
64-
"note": "Moved from 11.0.0-preview.7.26418.3 (nuspec commit 0b3bb76d2d) to pick up the public gesture dispatch APIs from dotnet/maui#37420 and #37671. 26418.3 predates both merges, so TapGestureRecognizer.SendTapped and the PointerGestureRecognizer send members are internal there. LongPressGestureRecognizer.SendLongPressed/SendLongPressing remain internal even in 26426.4."
64+
"role": "Coherent public-feed MAUI package set for net11. Used when building against published MAUI packages rather than source.",
65+
"$comment": [
66+
"IMPORTANT: this is a DIFFERENT commit from sourceBaseline, and deliberately so.",
67+
"",
68+
" sourceBaseline ee4d06cde6 what the history import is pinned to",
69+
" nuspecRepositoryCommit bedd1b18b7 what these packages were built from",
70+
"",
71+
"bedd1b18b7 is 46 commits ahead of ee4d06cde6 and INCLUDES the three Tizen-touching",
72+
"commits recorded in sourceBaseline.knownGapAfterThisPin (#37420, #37671, #37755).",
73+
"",
74+
"So the gap is one-directional and applies only to imported SOURCE, not to the",
75+
"packages we compile against: the referenced Microsoft.Maui.* assemblies already",
76+
"carry those three API additions, while the imported PublicAPI.Unshipped.txt",
77+
"baseline does not. Anyone diffing our API baselines against these packages should",
78+
"expect exactly that delta and should not read it as drift."
79+
],
80+
"aspNetCoreDependencyFloor": {
81+
"version": "11.0.0-preview.7.26381.103",
82+
"note": "Declared by Microsoft.AspNetCore.Components.WebView.Maui's own nuspec at this package version, and unchanged by the MAUI bump. ASP.NET Core packages are on their own version line and must NOT be moved to the MAUI stamp - that version does not exist for them."
83+
}
6584
},
6685
"provenancePullRequests": [
6786
{ "number": 2360, "title": "Adds Tizen backend", "upstreamCommit": "438aef2e5d" },

tests/UnitTests/RepositoryInvariantTests.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,37 @@ public void ImportToolingIsPresent(string relativePath)
188188
Assert.True(File.Exists(Path.Combine(RepoRoot, relativePath)), $"Missing: {relativePath}");
189189
}
190190

191+
[Fact]
192+
public void BaselinePinRecordsWhatItExcludes()
193+
{
194+
// A pin is only genuinely reproducible if what it EXCLUDES is written down too.
195+
//
196+
// sourceBaseline (ee4d06cde6) is 4 commits after requiredAncestor, none touching
197+
// Tizen. But net11.0 continued past the pin, and three later commits do - all of
198+
// them touching only src/Controls/src/Core/PublicAPI/net-tizen/PublicAPI.Unshipped.txt.
199+
// So the Controls net-tizen Unshipped baseline sits three API additions behind
200+
// current net11.0: relevant to API baseline diffing, not to source migration.
201+
//
202+
// This survived several review-fix rounds by luck rather than design. Whoever
203+
// regenerates API baselines needs it, and it is the kind of prose that quietly
204+
// disappears in a rebase, so it is pinned here.
205+
var gap = ReadRepoJson("eng/baselines.json")
206+
.GetProperty("source").GetProperty("sourceBaseline").GetProperty("knownGapAfterThisPin");
207+
208+
var commits = gap.GetProperty("commits").EnumerateArray().ToList();
209+
Assert.Equal(3, commits.Count);
210+
211+
var pullRequests = commits.Select(c => c.GetProperty("pullRequest").GetInt32()).ToHashSet();
212+
Assert.Equal(new HashSet<int> { 37420, 37671, 37755 }, pullRequests);
213+
214+
// The characterisation matters as much as the list: these are API surface
215+
// declarations, not imported implementation. Losing that distinction would make
216+
// the gap look like missing code.
217+
var provenance = ReadRepoFile("PROVENANCE.md");
218+
Assert.Contains("What the pin excludes", provenance);
219+
Assert.Contains("PublicAPI.Unshipped.txt", provenance);
220+
}
221+
191222
[Theory]
192223
[InlineData("2360")]
193224
[InlineData("9619")]
@@ -362,6 +393,56 @@ public void NoProjectTargetsBelowTheDotNetFloor()
362393
$"These projects target below the .NET {floor} floor: " + string.Join(", ", offenders));
363394
}
364395

396+
[Fact]
397+
public void MauiPackageVersionsMatchTheDeclaredDevelopmentBaseline()
398+
{
399+
// Directory.Packages.props and eng/baselines.json both state which MAUI package set
400+
// this repository builds against. They are edited at different times for different
401+
// reasons, so they drift - and the symptom (API baselines generated against one
402+
// version while the build consumes another) is slow and confusing to diagnose.
403+
var baseline = ReadRepoJson("eng/baselines.json")
404+
.GetProperty("source").GetProperty("developmentPackageBaseline")
405+
.GetProperty("version").GetString();
406+
407+
var packages = ReadRepoFile("Directory.Packages.props");
408+
409+
var mismatched = Regex.Matches(packages, @"Include=""(Microsoft\.Maui\.[^""]+)"" Version=""([^""]+)""")
410+
.Where(m => m.Groups[2].Value != baseline)
411+
.Select(m => $"{m.Groups[1].Value}={m.Groups[2].Value}")
412+
.ToList();
413+
414+
Assert.True(
415+
mismatched.Count == 0,
416+
$"These MAUI packages do not match developmentPackageBaseline ({baseline}): "
417+
+ string.Join(", ", mismatched));
418+
}
419+
420+
[Fact]
421+
public void AspNetCoreFloorMatchesTheDeclaredDependencyFloor()
422+
{
423+
// The ASP.NET Core floor is declared by WebView.Maui's own nuspec and does NOT
424+
// track the MAUI stamp - it stayed at 26381.103 across the MAUI bump from
425+
// 26418.3 to 26426.4. Recorded in baselines.json so a future bump has something
426+
// to check against rather than an assumption to make.
427+
var floor = ReadRepoJson("eng/baselines.json")
428+
.GetProperty("source").GetProperty("developmentPackageBaseline")
429+
.GetProperty("aspNetCoreDependencyFloor").GetProperty("version").GetString();
430+
431+
var packages = ReadRepoFile("Directory.Packages.props");
432+
433+
foreach (Match m in Regex.Matches(packages, @"Include=""(Microsoft\.AspNetCore\.[^""]+|Microsoft\.JSInterop)"" Version=""([^""]+)"""))
434+
{
435+
// The .Maui bridge package IS a MAUI package and legitimately uses the MAUI stamp.
436+
if (m.Groups[1].Value.EndsWith(".Maui", StringComparison.Ordinal))
437+
continue;
438+
439+
Assert.True(
440+
m.Groups[2].Value == floor,
441+
$"{m.Groups[1].Value} is pinned to {m.Groups[2].Value} but the declared "
442+
+ $"ASP.NET Core floor is {floor}.");
443+
}
444+
}
445+
365446
[Fact]
366447
public void EveryProjectReferencedBySolutionExists()
367448
{

0 commit comments

Comments
 (0)