Skip to content

Upgrade to .NET 10#242

Merged
StevenTCramer merged 102 commits into
masterfrom
Cramer/2025-07-23/clean
Nov 11, 2025
Merged

Upgrade to .NET 10#242
StevenTCramer merged 102 commits into
masterfrom
Cramer/2025-07-23/clean

Conversation

@StevenTCramer
Copy link
Copy Markdown
Contributor

Summary

  • Upgrade target framework from net9.0 to net10.0
  • Update all Microsoft packages to .NET 10 RC versions
  • Resolve all build warnings (NU1510, NU1903, CS0436)
  • Remove Newtonsoft.Json security vulnerability

Changes

Package Updates

  • Microsoft.Extensions.* → 10.0.0-rc.2.25502.107
  • Microsoft.AspNetCore.* → 10.0.0-rc.2.25502.107
  • Microsoft.CodeAnalysis.* → 5.0.0-2.final

NU1510 Fixes (Unnecessary Package References)

  • Remove Microsoft.AspNetCore.Http.Abstractions from TimeWarp.Modules and Common.Server
  • Remove Microsoft.Extensions.DependencyInjection.Abstractions from TimeWarp.Modules and Common.Server
  • Remove System.Net.Http.Json and Microsoft.Extensions.Http from Web.Spa
  • Remove Microsoft.Extensions.Configuration.Abstractions from Api.Server

NU1903 Fix (Security Vulnerability)

  • Remove Microsoft.AspNetCore.SignalR.Core 1.2.0 from Web.Contracts (which brought in vulnerable Newtonsoft.Json 11.0.2)
  • Remove System.ServiceModel.Primitives from Web.Contracts (only needed in Grpc.Contracts)

CS0436 Fix (Program Class Conflict)

  • Add NoWarn suppression for CS0436 in test projects to handle conflict between Fixie's generated Program class and .NET 10's ASP.NET Core source generator
  • Filed fixie/fixie#369 for permanent fix

Other Changes

  • Convert Grpc.Server from top-level statements to explicit Program class

Test Plan

  • Solution builds successfully with no errors or warnings
  • Fixie tests run successfully (verified Api.Server.Integration.Tests)
  • All 6 API integration tests pass

🤖 Generated with Claude Code

StevenTCramer and others added 30 commits July 23, 2025 23:33
- Check for existing PRs before creating new ones
- Create separate PR for each changed file instead of one combined PR
- Use consistent branch naming pattern: sync-file/[sanitized-filename]
- Prevent duplicate PRs by checking open PRs with matching branch names

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Move C# coding standards from .ai/ to Documentation/Developer/Reference/
- Move .NET conventions from .ai/ to Documentation/Developer/Reference/
- Update Reference Overview.md with proper description of reference docs
- Reference documentation now properly organized for developer lookup

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Creates a new task to configure a development container that allows running Claude Code
in a containerized environment with access to a single git worktree.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Starting work on Dev Container configuration for Claude Code.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Implements a secure development container based on Claude Code's official
configuration with additional .NET and TimeWarp-specific tooling.

Features:
- .NET 10 Preview 6 with fallback to 9.0 and 8.0
- Node.js 20 base (matching Claude Code requirements)
- Claude Code pre-installed via npm
- Security firewall with whitelisted domains
- Docker-in-Docker support for Aspire
- Git worktree mounting capability
- Persistent command history and configuration
- PowerShell Core for project scripts

Security:
- Network restrictions following Claude Code best practices
- Whitelisted domains: GitHub, npm, Anthropic, Microsoft/.NET services
- Default deny policy for other connections

Based on: https://docs.anthropic.com/en/docs/claude-code/devcontainer
and https://github.com/anthropics/claude-code/tree/main/.devcontainer

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Use correct channel syntax (10.0-preview instead of 10.0-preview6)
- Remove redundant features from devcontainer.json since they're installed in Dockerfile
- Keep only docker-in-docker as a feature since it's complex to install manually
The dotnet-install.sh script doesn't support .NET 10 preview channel yet,
so we download and extract the SDK directly from Microsoft's CDN.
Use the correct URL from builds.dotnet.microsoft.com found on the official
.NET 10 download page. The previous URL was malformed.
The Node.js base image doesn't include lsb-release by default, which is
needed to detect the Ubuntu version for PowerShell installation.
The node:20 base image uses Debian 12, not Ubuntu. Updated to use the
correct Microsoft repository for Debian bookworm.
Changed Docker repository from Ubuntu to Debian since the node:20 base
image uses Debian 12 (bookworm).
Since Aspire has matured and RunDocker.ps1 will be removed, we don't need
Docker inside the container. Aspire can run directly with dotnet run.

This simplifies the container and should resolve the memory/startup issues.
Instead of Docker-in-Docker, mount the host's Docker socket into the
container. This allows Aspire to manage containers while running inside
the dev container. Only the Docker CLI is installed, not the daemon.

This approach is simpler, uses less memory, and containers persist on
the host even when the dev container is rebuilt.
Handle the case where group 999 exists but isn't named 'docker'.
Try to create with GID 999 first, then without GID if that fails.
Make usermod non-fatal in case docker group still doesn't exist.
The container was exiting immediately after starting. Added
'sleep infinity' command to keep it running for VS Code to connect.
Use absolute path to post-create.sh since the working directory
in the container might not be where we expect.
The script was using incorrect paths because the container mounts
TimeWarp.Architecture directly as /workspace/timewarp-architecture,
not as a subdirectory.
The permission issue was caused by UID mismatch:
- Host WSL user: UID 1000
- Container node user: UID 1000 (from base image)
- Container vscode user: UID 1001 (wrongly created)

Now we delete the node user and create vscode with UID 1000 to match
the host user. This ensures proper file permissions without sudo.
Following Claude Code's official dev container pattern:
- Create /home/vscode/.claude directory with proper ownership in Dockerfile
- Add chmod +x *.ps1 to post-create script for executable PowerShell scripts

This ensures the container works immediately without manual fixes.
These scripts were originally developed on Windows and never had Unix
execute permissions. Setting them properly so they work in WSL and
containers without needing chmod.
Now that PowerShell scripts have proper execute permissions in the
repository, we don't need to chmod them in the container.
Found and fixed 41 additional .ps1 files throughout the repository that
were missing execute permissions. These were all originally developed on
Windows.
Microsoft domains like dotnet.microsoft.com return CNAMEs (Azure Front Door)
instead of direct IPs. Updated the script to:
- Follow CNAME chains to get actual IPs
- Skip domains that can't be resolved instead of failing
- Handle duplicate IPs gracefully

This prevents the firewall initialization from failing on Microsoft domains.
Dev containers should provide the environment, not assume the code is
buildable. Removed Build.ps1 execution and made dotnet restore optional.
The container is for development and debugging, including broken code.
Created validate-container.sh that tests:
- All development tools (.NET, Node, PowerShell, etc.)
- Claude Code installation
- Docker socket mount and permissions
- File permissions and writability
- Network access (with firewall)
- Aspire readiness

This helps quickly diagnose any dev container issues.
CRITICAL FIXES:
- Added 'dotnet workload install aspire' to Dockerfile
- Fixed all references from 'claude-code' to 'claude'
- Added build-time verification that Claude is installed
- Made post-create script fail if Claude is missing

Claude is ESSENTIAL for agentic workflows and must work out of the box.
- Remove Aspire workload installation (deprecated in Aspire 9+)
- Install Aspire.ProjectTemplates via dotnet new instead
- Add validation script execution to post-create
- Update to use --include-previews flag for compatibility

This aligns with Aspire 9.0.0 packages used in the project and resolves workload verification errors.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
…nings

- Run 'dotnet workload update' before restore to update manifests
- Prevents 'An issue was encountered verifying workloads' warning
- Ensures all .NET SDK manifests are up to date in container

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Fix Web.Server.Integration.Tests project references to use correct relative paths (up 4 levels)
- Fix Web.Spa.Integration.Tests project references to use correct relative paths (up 4 levels)
- Resolves build errors on Linux/WSL where incorrect paths were causing missing type references

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Remove .aider.conf.yml and legacy DGML dependency diagrams that are no longer used in the project.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
StevenTCramer and others added 27 commits November 9, 2025 15:44
Updated packages:
- Riok.Mapperly: 4.1.1 → 4.3.0
- libphonenumber-csharp: 8.13.54 → 9.0.18 (major version)

libphonenumber-csharp major version update includes breaking changes
but the library maintains backward compatibility for core phone number
parsing and formatting functionality.

Test results: 24 tests passed (8 analyzers, 1 common, 6 API, 9 Web.Spa)
Pre-existing failures: 2 Web.Spa tests
Build status: Successful

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated package:
- System.ServiceModel.Primitives: 8.1.1 → 8.1.2

Patch version update for WCF service model primitives.

Test results: 24 tests passed (8 analyzers, 1 common, 6 API, 9 Web.Spa)
Pre-existing failures: 2 Web.Spa tests
Build status: Successful

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated package:
- TimeWarp.SourceGenerators: 1.0.0-alpha.8 → 1.0.0-beta.7

This is a major pre-release update from alpha to beta, indicating improved
stability and feature completeness for the TimeWarp source generator package.

Test results: 24 tests passed (8 analyzers, 1 common, 6 API, 9 Web.Spa)
Pre-existing failures: 2 Web.Spa tests
Build status: Successful

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Create task for migrating API documentation from Swashbuckle.AspNetCore
to Scalar.AspNetCore based on impact analysis.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Replace Swashbuckle.AspNetCore with Scalar.AspNetCore to modernize
API documentation interface while maintaining OpenAPI compatibility.

Package Changes:
- Remove Swashbuckle.AspNetCore and all variants from Directory.Packages.props
- Remove MicroElements.Swashbuckle.FluentValidation package
- Add Scalar.AspNetCore to Common.Server.csproj

Code Changes:
- CommonServerModule: Replace AddSwaggerGen with AddOpenApi
- CommonServerModule: Replace UseSwaggerUi with UseScalarApiReference
- Web.Server Program: Update method calls and remove unused constants
- Remove SwaggerOperation attributes from 4 endpoint files
- Update GlobalUsings to remove Swashbuckle and add Scalar imports

Build Status: All projects compile successfully

Refs: Kanban/InProgress/042_Migrate-From-Swashbuckle-To-Scalar.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Remove FluentValidation.AspNetCore (deprecated and no longer maintained)
and migrate to manual validation approach using core FluentValidation.

Package Changes:
- Remove FluentValidation.AspNetCore from Directory.Packages.props
- Update FluentValidation.DependencyInjectionExtensions from 11.9.1 to 12.1.0
- Replace FluentValidation.AspNetCore with FluentValidation.DependencyInjectionExtensions in project files

Code Changes:
- Remove AddFluentValidationAutoValidation() call from Web.Server/Program.cs
- Remove AddFluentValidationClientsideAdapters() call from Web.Server/Program.cs
- Remove FluentValidation.AspNetCore using from Web.Server/GlobalUsings.cs
- Remove FluentValidation.AspNetCore using from Api.Server/GlobalUsings.cs
- Keep AddValidatorsFromAssemblyContaining for validator registration

Note: FluentValidation.AspNetCore is deprecated per FluentValidation/FluentValidation#1959
The team recommends using core FluentValidation with manual validation.

Build Status: All projects compile successfully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…tion.AspNetCore

- Remove FastEndpoints.Swagger from Api.Server (use Scalar directly)
- Remove deprecated FluentValidation.AspNetCore package
- Add IHttpContextAccessor registration (previously done by deprecated package)
- Register FluentValidationBehavior pipeline in Web.Server for validation
- Update FluentValidation.DependencyInjectionExtensions to 12.1.0

This migration improves the API documentation experience with Scalar's modern
interface while maintaining full validation functionality through MediatR
pipeline behaviors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
All tests pass with identical results to baseline:
- 35 tests passing
- 2 pre-existing failures (CosmosDB emulator)
- 4 skipped tests
- Slight performance improvement in test execution

No regressions detected from this upgrade.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Created task to remove unused AutoMapper dependency and document Mapperly as the preferred mapping library. Analysis shows AutoMapper is registered but never used (no Profile classes, no IMapper usage).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Removed AutoMapper from the solution as it was registered but never actually used. No Profile classes or IMapper usage existed in the codebase.

Changes:
- Removed AutoMapper package from Directory.Packages.props
- Removed AutoMapper reference from Web.Server.csproj
- Removed AutoMapper global using from Web.Server/GlobalUsings.cs
- Removed AddAutoMapper registration from Web.Server/Program.cs

Mapperly (Riok.Mapperly 4.1.1) is already referenced in Web.Application as the preferred mapping library for future use.

Build succeeded with 0 warnings and 0 errors.
Core integration tests passed successfully.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Marked all checklist items as complete and added completion summary with:
- Commit hash and file changes
- Build and test results (all passed)
- Impact analysis

Moved task from InProgress to Done folder.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated package:
- xunit.runner.visualstudio: 3.0.1 → 3.1.5

This package enables running xUnit tests in Visual Studio Test Explorer
and via dotnet test. Used by the Aspire test project.

Note: The Aspire xUnit test has a pre-existing failure (incorrect resource
name) that is unrelated to this package update. All Fixie-based tests pass.

Test results: 24 Fixie tests passed (8 analyzers, 1 common, 6 API, 9 Web.Spa)
Pre-existing failures: 2 Web.Spa tests
Build status: Successful

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated IntegrationTest1.cs with correct resource name and endpoint:
- Changed resource name from "api-server" to "api" (matches ApiServerProjectResourceName constant)
- Fixed endpoint URL from "api/weatherForecasts" to "api/weatherforecast" (singular, matches actual route)
- Enabled Aspire test in RunTests.ps1 (now passing)

Test now passes successfully.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated Microsoft.Azure.AppConfiguration.AspNetCore from 8.0.0 to 8.4.0.
All tests pass with no regressions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated Microsoft.NET.Test.Sdk from 17.12.0 to 18.0.0 (major version).
All tests pass with no regressions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated Azure.Identity from 1.13.2 to 1.17.0.
All tests pass with no new regressions (2 pre-existing CosmosDB failures).

Used by Common.Server for DefaultAzureCredential in Azure App Configuration Key Vault access.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated Microsoft.Identity.Web from 3.9.2 to 4.0.1 (major version).
All tests pass with no regressions.

Used by Web.Server for Microsoft Entra ID (Azure AD) authentication.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Documented all completed package updates in two waves:
- Wave 1: Infrastructure & Core Libraries (7 packages)
- Wave 2: Azure & Identity (4 packages)

Marked all checklist items as complete and documented:
- Test results showing all 25 tests passing
- Additional work fixing Aspire integration test
- Outstanding Aspire packages deferred for coordinated update

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Fixed two breaking changes introduced by Aspire package updates:

1. WithCommand API change: Updated to use new CommandOptions parameter
   - Changed from individual parameters to CommandOptions object
   - Updated updateState, iconName, and iconVariant to use CommandOptions properties

2. CosmosDB API change: Updated AddDatabase to AddCosmosDatabase
   - Changed from cosmos.AddDatabase() to cosmos.AddCosmosDatabase()
   - Moved RunAsEmulator() to be called on cosmos resource before adding database
   - Changed cosmosdb variable type to var to handle new return type

Both changes address obsolete API warnings in Aspire 9.x.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated Aspire packages from 9.0.0 to 9.5.2:
- Aspire.Hosting.AppHost
- Aspire.Hosting.Azure.CosmosDB
- Aspire.Hosting.Testing
- Aspire.Microsoft.Azure.Cosmos

All tests pass with updated packages. CosmosDB emulator updated to latest version to resolve expired evaluation period.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Added Wave 3 (Aspire Updates) to completed updates:
- 4 Aspire packages updated from 9.0.0 to 9.5.2
- Documented breaking changes and their fixes
- Updated test results to reflect CosmosDB emulator update
- Marked all outstanding items as complete

All NuGet packages are now up to date!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Renamed WeatherForecastDto to TWeatherForecast across all files for consistency with naming conventions
- Removed incorrect value equality assertion from clone test (line 41)
- WeatherForecastDto comment claiming it was a record class was incorrect - git history shows it was always a sealed class
- Clone test now correctly validates only reference inequality, not value equality
- Updated serialization test namespace and method signature

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Changed UserDto to TUser in examples to align with T-prefix naming convention for DTOs
- Maintains consistency with recent TWeatherForecast rename

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Added SVG avatar for repository branding

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Added IApiServerApiService registration in AspireSpaTestApplication
- Added IAccessTokenProvider (fake) for authentication
- Configured JsonSerializerOptions for API serialization
- Added required using statements to GlobalUsings.cs
- Updated test expectation from 1 to 5 forecasts (matches API handler)

The test was failing because the FetchWeatherForecasts handler couldn't be
constructed - it requires IApiServerApiService which wasn't registered in
the test DI container. The handler would silently fail, leaving the state null.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Added additional work items (DTO rename, test fixes, documentation)
- Updated final test results showing all tests passing
- Task is now complete with all packages updated and all tests passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated packages to .NET 10 RC versions and fixed all build warnings:

- Upgrade target framework from net9.0 to net10.0
- Update Microsoft.Extensions.* packages to 10.0.0-rc.2.25502.107
- Update Microsoft.AspNetCore.* packages to 10.0.0-rc.2.25502.107
- Update Microsoft.CodeAnalysis.* packages to 5.0.0-2.final

Fix NU1510 warnings (unnecessary package references):
- Remove Microsoft.AspNetCore.Http.Abstractions from TimeWarp.Modules and Common.Server
- Remove Microsoft.Extensions.DependencyInjection.Abstractions from TimeWarp.Modules and Common.Server
- Remove System.Net.Http.Json and Microsoft.Extensions.Http from Web.Spa
- Remove Microsoft.Extensions.Configuration.Abstractions from Api.Server

Fix NU1903 warning (Newtonsoft.Json security vulnerability):
- Remove Microsoft.AspNetCore.SignalR.Core 1.2.0 from Web.Contracts
- Remove System.ServiceModel.Primitives from Web.Contracts (only needed in Grpc.Contracts)

Fix CS0436 warning (Program class conflict):
- Add NoWarn suppression for CS0436 in Testing.Common.csproj
- Add NoWarn suppression in Api.Server.Integration.Tests.csproj
- Add NoWarn suppression in Web.Spa.Integration.Tests.csproj
- Add NoWarn suppression in Web.Server.Integration.Tests.csproj
- Filed issue fixie/fixie#369 for permanent fix

Convert Grpc.Server from top-level statements to explicit Program class.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@claude
Copy link
Copy Markdown

claude Bot commented Nov 11, 2025

Claude finished @StevenTCramer's task —— View job


PR Review: Upgrade to .NET 10

Todo List

  • Read key configuration files and analyze package updates
  • Review build warning fixes (NU1510, NU1903, CS0436)
  • Examine security vulnerability remediation
  • Check new development container setup
  • Analyze test configuration changes
  • Provide comprehensive review feedback

Review Summary

This is a comprehensive upgrade to .NET 10 with good attention to resolving warnings and security issues. The changes are well-structured and thoroughly documented.

✅ Strengths

Package Management

  • Systematic upgrade to .NET 10 RC packages (10.0.0-rc.2.25502.107) Directory.Build.props:26
  • Proper central package management via Directory.Packages.props
  • Migration from Swashbuckle to Scalar for API documentation

Security Improvements

  • Removed vulnerable Newtonsoft.Json dependency by eliminating Microsoft.AspNetCore.SignalR.Core 1.2.0
  • Clean removal of unnecessary transitive dependencies

Build Configuration

  • Appropriate CS0436 warning suppression in test projects to handle Fixie/ASP.NET Core Program class conflict
  • Filed upstream issue for permanent resolution (fixie/fixie#369)
  • Converted Grpc.Server from top-level statements to explicit Program class for consistency

Development Experience

  • Comprehensive .devcontainer setup for Claude Code integration
  • Well-configured VS Code settings and extensions
  • Proper port forwarding and container environment configuration

⚠️ Potential Concerns

Package Version Inconsistencies

  • EF Core packages remain at 9.0.10 while Microsoft.Extensions.* are at 10.0.0-rc.2.25502.107 Directory.Packages.props:52-53
  • This version mismatch could cause compatibility issues

Security Package Retention

  • Microsoft.AspNetCore.SignalR.Core 1.2.0 still present in Directory.Packages.props:43 despite being marked for removal
  • This package should be completely removed if no longer needed

RC Version Risks

  • Using RC packages in production could introduce stability risks
  • Consider timeline for GA release before production deployment

🔧 Recommendations

  1. Remove Unused Package: Complete removal of Microsoft.AspNetCore.SignalR.Core from Directory.Packages.props if not needed
  2. Version Alignment: Update EF Core packages to 10.0.0 versions when available for consistency
  3. Test Coverage: The disabled Playwright E2E tests (RunTests.ps1:21) should be re-enabled before release
  4. Documentation: Consider documenting the .NET 10 upgrade impact on deployment environments

🧪 Testing Notes

  • Fixie integration tests are properly configured with CS0436 warning suppression
  • Test script structure is well-organized with clear output formatting
  • Missing E2E test execution could hide integration issues

Performance & Architecture

  • No performance regressions expected from the framework upgrade
  • Development container configuration is optimized for the development workflow
  • Proper service orchestration maintained through Aspire integration

Overall Assessment

Strong upgrade implementation with attention to security and build quality. The main concern is the incomplete package removal and version inconsistencies that should be addressed before merge.

@StevenTCramer StevenTCramer merged commit f01f068 into master Nov 11, 2025
2 checks passed
@StevenTCramer StevenTCramer deleted the Cramer/2025-07-23/clean branch November 11, 2025 03:24
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