Skip to content

Prepare the 0.1.0-preview.15 release - #1202

Merged
Alexandre Zollinger Chohfi (azchohfi) merged 1 commit into
mainfrom
azchohfi-release-0-1-0-preview-15
Sep 11, 2026
Merged

Alexandre Zollinger Chohfi (azchohfi) merged 1 commit into
mainfrom
azchohfi-release-0-1-0-preview-15

Conversation

@azchohfi

Copy link
Copy Markdown
Collaborator

Release-prep PR for 0.1.0-preview.15, following docs/contributing/release-runbook.md.

Changelog coverage audit

21 commits since v0.1.0-preview.14 — 6 touched CHANGELOG.md, 15 did not. No entries were missing.

The decisive probe: which commits touched shipped product source (src/Reactor/, src/Reactor.Advanced/, src/Reactor.Analyzers/, src/Reactor.Devtools/, src/Reactor.Cli/, tools/Templates/, Directory.Build.props) without a changelog entry? The answer was zero. Because a zero-result is not a measurement, the same probe was re-run with the changelog filter removed as a positive control — it matched 5 commits, all of which already carry an entry:

Commit PR Entry present
323b7d75b #1197 — Markdown list content wrapping ✅ Fixed
5664a4d98 #1196 — struct-typed .Margin/.Padding/.CornerRadius ✅ Added + Changed
d9a92bb17 #1195 — CleanElement resets / IsTabStop leak ✅ Fixed
9cde98a76 #1194 — REACTOR_ICON_001 ✅ Added
c0da12623 #1191 — binary icon sources ✅ Added

(#1199 also touched the changelog but no shipped source — it is docs/CI only, and its entry says so explicitly.)

Deliberately omitted, with reasons

None of the 15 commits without an entry reaches a published package. Each was checked by file path, and the non-obvious ones by diff:

Adjudication: did the two Fixed product bugs actually ship broken?

A bug introduced and fixed inside the same unreleased window never shipped and needs no entry. Settled by checking whether the buggy code shape exists at the previous tag, not by issue filing dates:

  • Fix Markdown list content wrapping #1197 — git show v0.1.0-preview.14:src/Reactor.Advanced/Markdown/MarkdownBuilder.cs contains Element element = HStack(4, TextBlock(marker).VAlign(...), content);. The infinite-width StackPanel measure shipped. Entry is correct.
  • Cover the CleanElement resets REACTOR_POOL_001 could not see, and stop leaking IsTabStop #1195 — v0.1.0-preview.14:src/Reactor.Analyzers/ModifierTable.cs contains both ["Stretch"] = "Viewbox-only modifier." and ["IsHitTestVisible"] = "No modifier exists; …", and v0.1.0-preview.14:src/Reactor/Core/ElementPool.cs contains the if (fe is Control tabStopControl) tabStopControl.ClearValue(Control.IsTabStopProperty); gate. Both the analyzer blind spot and the non-Control IsTabStop leak shipped. Entries are correct.

One reviewed-and-kept judgement call: #1195's third Fixed bullet (the pool ⇄ analyzer consistency invariants now scanning all of CleanElement) describes a test-invariant widening rather than user-facing behaviour. It was left in place because it is the mechanism that explains the two product fixes above it, and deleting a merged, reviewed entry during a release cut loses that context.

Spec cross-references on the existing entries were spot-checked against the specs rather than inferred: docs/specs/036-window-design.md:228 is ### 4.1 WindowSpec, and docs/specs/061-in-build-did-you-mean.md exists.

Release cut

  1. ## [Unreleased] → ## [0.1.0-preview.15] — 2026-09-11, with a fresh empty ## [Unreleased] above it carrying all six Keep-a-Changelog buckets.
  2. <ReactorPublicVersion> bumped to 0.1.0-preview.15 in the root Directory.Build.props — the single source of truth, so no file sweep. README stays version-agnostic.
  3. Guide recompiled with mur docs compile --skip-screenshots --skip-diagrams, producing exactly 12 {{reactorVersion}} substitutions across 8 guide pages and no other churn (verified by reading every changed line of git diff -- docs/guide).

Validation

Check Result
dotnet build tests/Reactor.Tests -p:Platform=x64 -p:SkipSignaturesGen=true ✅ 0 errors
dotnet test … --filter-class "*TemplateMetadataTests*" ✅ 6/6 passed, module label net10.0|x64 (handshake-derived, so the run really started)
dotnet pack the template with -p:MicrosoftUIReactorVersion=0.1.0-preview.15 ✅ packed
Stamped version inside the .nupkg ✅ .template.config/template.json symbol MSUIReactorVersion has defaultValue='0.1.0-preview.15'
Negative control — any 0.1.0-preview.14 left in the package? ✅ none

The package was verified by expanding the .nupkg rather than via dotnet new install / floating restore: that touches no global template state and never restores Microsoft.UI.Reactor, so it cannot be fooled by an internal ADO CI build such as 0.1.0-preview.13.30 sitting in the shared local NuGet cache (those sort above released previews while predating recent features). local-nupkgs and the temp expansion directory were cleaned up.

Pre-flight

Check Result
git ls-remote --tags origin v0.1.0-preview.15 ✅ absent (positive control: v0.1.0-preview.14 → 456d63e03)
gh release view v0.1.0-preview.15 ✅ release not found (positive control: preview.14 returns its JSON)
Four packages absent from NuGet.org ⚠️ UNVERIFIED — not a pass

nuget.org is unreachable from this environment (The SSL connection could not be established against https://api.nuget.org/v3-flatcontainer/microsoft.ui.reactor/index.json), which is also why every build in this PR logs NU1900. The runbook's "confirm the four packages aren't already published" step therefore could not be completed here and is flagged rather than implied to have passed — a failed lookup is not a measurement. Someone with NuGet.org reachability should confirm Microsoft.UI.Reactor, Microsoft.UI.Reactor.Advanced, Microsoft.UI.Reactor.Devtools and Microsoft.UI.Reactor.ProjectTemplates have no 0.1.0-preview.15 before the publish gate is approved.

After merge (not done in this PR)

Tagging is deliberately left for explicit approval. When approved, tag the merge commit (git tag -a v0.1.0-preview.15 <sha> then git push origin v0.1.0-preview.15, individually — never git push --tags). Note that the tag does not publish to NuGet.org: publishing requires approving the OneBranch Production_PublishNuGet stage, and the two-person rule means the approver must be a different person than whoever pushed the tag.

Cut `## [Unreleased]` to `## [0.1.0-preview.15] — 2026-09-11`, open a fresh
`Unreleased` block with all six Keep-a-Changelog buckets, bump the single
source-of-truth `<ReactorPublicVersion>` in the root `Directory.Build.props`,
and recompile the guide so the `{{reactorVersion}}` token matches.

Changelog coverage audit over the 21 commits since `v0.1.0-preview.14`: no
entries were missing. Every commit that touched shipped product source
(`src/Reactor*`, `tools/Templates`, `Directory.Build.props`) already carried a
changelog entry — #1191, #1194, #1195, #1196, #1197 — and the probe was
positive-controlled by re-running it without the changelog filter, which
matched all five. The 15 commits without an entry are dependency bumps
(10 Dependabot npm bumps under `tests/` and `samples/`, one `@types/node`
devDependency under `src/vscode-reactor`, and two `Directory.Packages.props`
commits that are CLI/test-only and net-zero on `GitHub.Copilot.SDK`), CI
infrastructure (#1178, which regenerated only a sourcemap, not `extension.js`),
test-harness lint and lockfile work (#1176, #1169), and a sample Node server
fix (#1175) — none of which reaches a published package.

The two `Fixed`-bucket product changes were adjudicated against the previous
tag rather than by issue filing date, to confirm they had genuinely shipped
broken rather than being introduced and fixed inside this window:

  * #1197 — `v0.1.0-preview.14:src/Reactor.Advanced/Markdown/MarkdownBuilder.cs`
    contains the `HStack(4, ...)` list row, so the infinite-width measure shipped.
  * #1195 — `v0.1.0-preview.14:src/Reactor.Analyzers/ModifierTable.cs` contains
    both the `["Stretch"]` and `["IsHitTestVisible"]` exclusions, and
    `v0.1.0-preview.14:src/Reactor/Core/ElementPool.cs` contains the
    `if (fe is Control tabStopControl)` gate, so both shipped.

Docs regeneration produced exactly 12 `{{reactorVersion}}` substitutions across
8 guide pages and no other churn.

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

Copy link
Copy Markdown
Contributor

📦 Build metrics

Artifact sizes for 18c1fa0 vs the base branch (9ace8a2).

Packages (compressed .nupkg)

Artifact base PR Δ
Microsoft.UI.Reactor.nupkg 1.70 MB 1.70 MB +68 B (0.00%) ≈
Microsoft.UI.Reactor.Advanced.nupkg 487.6 KB 487.6 KB +15 B (0.00%) ≈
Microsoft.UI.Reactor.Devtools.nupkg 283.2 KB 283.3 KB +27 B (+0.01%) ≈

Assemblies in Microsoft.UI.Reactor

Artifact base PR Δ
Reactor.Analyzers.dll 373.0 KB 373.0 KB +0 B (0.00%) ≈
Reactor.dll 2.43 MB 2.43 MB +0 B (0.00%) ≈
Reactor.Localization.Generator.dll 16.0 KB 16.0 KB +0 B (0.00%) ≈
Reactor.Wrappers.Abstractions.dll 10.5 KB 10.5 KB +0 B (0.00%) ≈
Reactor.Wrappers.Generator.dll 99.5 KB 99.5 KB +0 B (0.00%) ≈

Assemblies in Microsoft.UI.Reactor.Advanced

Artifact base PR Δ
Reactor.Advanced.dll 1021.5 KB 1021.5 KB +0 B (0.00%) ≈

Assemblies in Microsoft.UI.Reactor.Devtools

Artifact base PR Δ
Microsoft.UI.Reactor.Devtools.dll 784.0 KB 784.0 KB +0 B (0.00%) ≈

No size change beyond the noise floor. ✅

✅ smaller / ⚠️ larger / ≈ within noise. Sizes come from a Release dotnet pack on the CI runner: packages are the compressed .nupkg download size, assemblies the uncompressed DLL inside it.
workflow run.

@azchohfi
Alexandre Zollinger Chohfi (azchohfi) merged commit f17ce2d into main Sep 11, 2026
31 checks passed
@azchohfi
Alexandre Zollinger Chohfi (azchohfi) deleted the azchohfi-release-0-1-0-preview-15 branch September 11, 2026 08:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant