Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ dotnet test tests/Reactor.AppTests
dotnet test tests/Reactor.AppTests --filter "ClassName=Reactor.AppTests.Tests.AccessibilityTests"
```

CI runs unit tests + selftests + full solution build on every PR. .NET 9 SDK, `windows-latest` runner.
CI runs unit tests + selftests + full solution build on every PR. .NET 10 SDK, `windows-latest` runner.

## Architecture

Expand Down Expand Up @@ -121,7 +121,7 @@ Tests that write to `Console.Out`/`Console.Error` must be grouped with `[Collect

### AOT compatibility

`IsAotCompatible=true` is set for all net8.0+ projects. The core Reactor library promotes IL trimming/AOT warnings to errors — new reflection usage must be annotated before merging. Non-Reactor projects (tests, samples) suppress these warnings.
`IsAotCompatible=true` is set for all net10.0+ projects. The core Reactor library promotes IL trimming/AOT warnings to errors — new reflection usage must be annotated before merging. Non-Reactor projects (tests, samples) suppress these warnings.

### WinUI library projects

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope

## Prerequisites

- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
- Windows App SDK 2.0 — restored automatically from NuGet, no manual install required
- Visual Studio 2022 (17.8+) or VS Code with C# Dev Kit

Expand Down
8 changes: 4 additions & 4 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,28 @@
<!-- Enable AOT compatibility analysis on all projects except Roslyn
analyzers / source-generators (netstandard2.0). Placed in .targets
so that TargetFramework from the project file is already resolved. -->
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))">
<IsAotCompatible>true</IsAotCompatible>
<!-- Show every individual trimmer warning instead of collapsing them. -->
<TrimmerSingleWarn>false</TrimmerSingleWarn>
</PropertyGroup>

<!-- Promote IL trimming/AOT warnings to errors on the core Reactor library.
This ensures new reflection usage must be annotated before it can merge. -->
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0')) And '$(MSBuildProjectName)' == 'Reactor'">
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) And '$(MSBuildProjectName)' == 'Reactor'">
<WarningsAsErrors>$(WarningsAsErrors);IL2026;IL2062;IL2065;IL2067;IL2069;IL2070;IL2072;IL2073;IL2075;IL2087;IL2090;IL2091;IL2111;IL3000;IL3050</WarningsAsErrors>
</PropertyGroup>

<!-- Suppress trimming/AOT warnings in consumer projects (tests, samples, CLI).
The core Reactor library is already warning-free; these projects intentionally
call reflection-based APIs and will not be AOT-published. -->
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0')) And '$(MSBuildProjectName)' != 'Reactor'">
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) And '$(MSBuildProjectName)' != 'Reactor'">
<NoWarn>$(NoWarn);IL2026;IL2062;IL2065;IL2067;IL2070;IL2072;IL2075;IL2090;IL2091;IL3000;IL3050</NoWarn>
</PropertyGroup>

<!-- Prevent PublishAot from leaking into netstandard projects (e.g. Roslyn
analyzers/generators) when passed as a global property. -->
<PropertyGroup Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
<PropertyGroup Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))">
<PublishAot>false</PublishAot>
</PropertyGroup>

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,9 @@ If you're building line-of-business applications:

### Prerequisites

- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
- Windows App SDK 2.0 — pulled automatically on `dotnet restore`
- Visual Studio 2022 (17.8+) or just the .NET 8 CLI
- Visual Studio 2022 (17.8+) or just the .NET 10 CLI

> This project uses Windows App SDK 2.0 (`Microsoft.WindowsAppSDK` 2.0.1). The package comes from NuGet — no manual SDK installer is needed.

Expand All @@ -151,7 +151,7 @@ Or create a `.csproj` manually:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
<TargetFramework>net10.0-windows10.0.22621.0</TargetFramework>
<UseWinUI>true</UseWinUI>
<WindowsPackageType>None</WindowsPackageType>
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
Expand Down
14 changes: 7 additions & 7 deletions docs/specs/022-packaging-and-distribution.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ The `<EmbeddedResource Include="..\..\SKILL.md">` line stays — `mur --skill` s

```
Microsoft.UI.Reactor.1.0.0-preview.42.nupkg
├── lib/net9.0-windows10.0.22621.0/
├── lib/net10.0-windows10.0.22621.0/
│ ├── Reactor.dll
│ └── Reactor.xml # XML doc comments
├── analyzers/dotnet/cs/
Expand Down Expand Up @@ -195,7 +195,7 @@ Add `Microsoft.SourceLink.GitHub` so consumers can step into Reactor source duri

`mur` is short-lived (will fold into the framework once the dev loop stabilizes) but in the meantime it's a real tool consumers need. It cannot ship cleanly as a `dotnet tool` because:

- `src/Reactor.Cli/Reactor.Cli.csproj:4-5` targets `net9.0-windows10.0.22621.0` with `Platforms>x64;ARM64`.
- `src/Reactor.Cli/Reactor.Cli.csproj:4-5` targets `net10.0-windows10.0.22621.0` with `Platforms>x64;ARM64`.
- .NET global tools must be AnyCPU and don't cleanly handle Windows-only TFMs.
- Even if we got it working, Copilot SDK native dependencies (`GitHub.Copilot.SDK`) and WinUI runtime expectations make a self-contained exe the more reliable path.

Expand All @@ -206,10 +206,10 @@ On every CI run, publish:
- `bin/x64/mur.exe` and `bin/arm64/mur.exe` (plus their managed/native dependencies) inside `reactor-skill-kit-<version>.zip`
- Per RID — `--runtime win-x64` and `--runtime win-arm64` — to pick up the right native bits (Copilot SDK natives, etc.)

**Framework-dependent (`--self-contained false`)** — the consumer's machine supplies the .NET 9 desktop runtime. This saves ~70 MB per RID over self-contained. Tradeoffs:
**Framework-dependent (`--self-contained false`)** — the consumer's machine supplies the .NET 10 desktop runtime. This saves ~70 MB per RID over self-contained. Tradeoffs:

- Requires `winget install Microsoft.DotNet.Runtime.9` on the consumer's machine. Acceptable for the P0 audience (Microsoft engineers) and for P2/P3 consumers willing to install a runtime.
- `install-skill-kit.ps1` checks for .NET 9 and warns clearly if it's missing.
- Requires `winget install Microsoft.DotNet.Runtime.10` on the consumer's machine. Acceptable for the P0 audience (Microsoft engineers) and for P2/P3 consumers willing to install a runtime.
- `install-skill-kit.ps1` checks for .NET 10 and warns clearly if it's missing.

**Sample apps stay self-contained.** Reactor's sample apps and bench/perf projects continue to use `WindowsAppSDKSelfContained=true` (the Directory.Build.props default). Sample apps are sensitive to the WinUI runtime version — bundling makes it trivial to test against different SDK versions during dev. Tools (`mur`) are not.

Expand Down Expand Up @@ -402,7 +402,7 @@ Target experience after P1 ships:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows10.0.22621.0</TargetFramework>
<TargetFramework>net10.0-windows10.0.22621.0</TargetFramework>
<UseWinUI>true</UseWinUI>
<WindowsPackageType>None</WindowsPackageType>
</PropertyGroup>
Expand Down Expand Up @@ -454,7 +454,7 @@ Verified locally:
- `dotnet build Reactor.sln -c Release` → 0 errors.
- `dotnet test tests/Reactor.Tests` → 6836 passed.
- `dotnet test tests/Reactor.SelfTests` → 639 passed.
- `dotnet pack src/Reactor -c Release -p:Platform=x64 -p:Version=0.0.1-smoke` → produces `.nupkg` containing `lib/net9.0-windows10.0.22621/Reactor.dll`, `analyzers/dotnet/cs/Reactor.Analyzers.dll`, `analyzers/dotnet/cs/Reactor.Localization.Generator.dll`, `LICENSE`, `Reactor.xml`.
- `dotnet pack src/Reactor -c Release -p:Platform=x64 -p:Version=0.0.1-smoke` → produces `.nupkg` containing `lib/net10.0-windows10.0.22621.0/Reactor.dll`, `analyzers/dotnet/cs/Reactor.Analyzers.dll`, `analyzers/dotnet/cs/Reactor.Localization.Generator.dll`, `LICENSE`, `Reactor.xml`.

Still TODO under P0:
- **Bootstrap MinVer**: `git tag v0.1.0-experimental.0 && git push --tags` so the first CI run produces `0.1.0-experimental.0.<height>` rather than the pre-bootstrap default.
Expand Down
2 changes: 1 addition & 1 deletion docs/specs/030-reactor-gallery-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ No per-feature or per-sample csproj. The head app globs sample content directly
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows10.0.22621.0</TargetFramework>
<TargetFramework>net10.0-windows10.0.22621.0</TargetFramework>
<RootNamespace>Reactor.Gallery</RootNamespace>
<UseWindowsAppSDK>true</UseWindowsAppSDK>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion docs/specs/035-demo-script-tool-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ The tool reads and writes this file. It is human-editable outside the tool.

## Demo Prompt

This demo shows how to build a real-time chat UI using .NET 9 top-level
This demo shows how to build a real-time chat UI using .NET 10 top-level
statements and the Spectre.Console library. Single-file mode. Each step
should compile and run standalone with `dotnet run`. Use NuGet inline
references where needed.
Expand Down
2 changes: 1 addition & 1 deletion tests/startup_perf/diag.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
$ErrorActionPreference = "Continue"
$root = $PSScriptRoot
$arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "ARM64" } else { "x64" }
$tfm = "net9.0-windows10.0.22621.0"
$tfm = "net10.0-windows10.0.22621.0"
$rid = if ($arch -eq "ARM64") { "win-arm64" } else { "win-x64" }
$ProviderGuid = [guid]'FD80D616-E92B-4B2B-9BED-131ADA36A8FD'

Expand Down
6 changes: 3 additions & 3 deletions tests/stress_perf/SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,10 @@ Shared library consumed by all three apps:

WinUI variants (`Direct`, `Bound`, `DirectX`, `Reactor`,
`ReactorOptimized`, `ReactorGrid`, `VirtualList.Reactor`) target
`net9.0-windows10.0.22621.0` and pick up the repo-wide
`net10.0-windows10.0.22621.0` and pick up the repo-wide
`WindowsAppSDKVersion` from `Directory.Build.props`. The WPF variant
targets `net9.0-windows`; `PresentTracer` is plain `net9.0`. The
shared scaffold (`StressPerf.Shared`) is `net9.0-windows`.
targets `net10.0-windows`; `PresentTracer` is plain `net10.0`. The
shared scaffold (`StressPerf.Shared`) is `net10.0-windows`.

```bash
# Build all
Expand Down
Loading