diff --git a/.github/upgrades/plan.md b/.github/upgrades/plan.md new file mode 100644 index 0000000..cce47e3 --- /dev/null +++ b/.github/upgrades/plan.md @@ -0,0 +1,318 @@ +# .NET 10.0 Upgrade Plan — AutoBidder Solution + +## Table of Contents + +- [1. Executive Summary](#1-executive-summary) +- [2. Migration Strategy](#2-migration-strategy) +- [3. Detailed Dependency Analysis](#3-detailed-dependency-analysis) +- [4. Project-by-Project Plans](#4-project-by-project-plans) + - [4.1 AutoBidder.csproj](#41-autobiddercsproj) +- [5. Package Update Reference](#5-package-update-reference) +- [6. Breaking Changes Catalog](#6-breaking-changes-catalog) +- [7. Risk Management](#7-risk-management) +- [8. Testing & Validation Strategy](#8-testing--validation-strategy) +- [9. Complexity & Effort Assessment](#9-complexity--effort-assessment) +- [10. Source Control Strategy](#10-source-control-strategy) +- [11. Success Criteria](#11-success-criteria) + +--- + +## 1. Executive Summary + +### Scenario +Upgrade the **AutoBidder** Blazor/ASP.NET Core solution from **.NET 8.0** to **.NET 10.0 (LTS)**. + +### Scope +| Metric | Value | +|---|---| +| Total Projects | 1 | +| Total NuGet Packages | 3 (2 need upgrade, 1 compatible) | +| Total Lines of Code | 14,361 | +| Total Code Files | 50 | +| API Incompatibilities | 0 | +| Security Vulnerabilities | 0 | +| Estimated LOC Impact | 0+ (minimal) | + +### Target State +- All projects targeting `net10.0` +- All NuGet packages updated to .NET 10 compatible versions +- Solution builds with 0 errors +- No security vulnerabilities + +### Selected Strategy +**All-At-Once Strategy** — All projects upgraded simultaneously in a single atomic operation. + +**Rationale**: +- 1 project (small solution) +- Currently on .NET 8.0 (modern SDK-style) +- Zero project-to-project dependencies +- All packages have known target framework versions available +- No API incompatibilities detected +- No security vulnerabilities + +### Complexity Classification +**Simple** — 1 project, dependency depth 0, no high-risk indicators, no vulnerabilities. + +**Iteration strategy**: Fast batch (2-3 detail iterations covering all sections). + +### Critical Issues +- ?? `Npgsql.EntityFrameworkCore.PostgreSQL` 8.0.0 is marked compatible but has no suggested new version — verify compatibility with EF Core 10.0.5 at build time. + +## 2. Migration Strategy + +### Approach: All-At-Once + +The entire solution is upgraded in a **single coordinated atomic operation**. There are no intermediate states — the project file, all package references, and any required code modifications are applied together. + +### Justification +- **1 project** — no dependency ordering complexity +- **0 inter-project dependencies** — no phasing required +- **0 API incompatibilities** — minimal risk of breaking changes +- **Low difficulty** rating from assessment +- **SDK-style project** — clean project file structure +- All packages have target versions or are compatible + +### Execution Approach + +All operations are performed as a unified upgrade: + +1. Update `TargetFramework` in `AutoBidder.csproj` from `net8.0` to `net10.0` +2. Update all NuGet package references to their target versions +3. Restore dependencies +4. Build the solution and fix all compilation errors +5. Verify solution builds with 0 errors + +No parallel vs sequential decision is needed — there is only one project. + +## 3. Detailed Dependency Analysis + +### Dependency Graph + +The solution contains a single project with no inter-project dependencies. + +``` +Level 0 (Foundation): + ??? AutoBidder.csproj (AspNetCore, Blazor) + ??? Microsoft.AspNetCore.Identity.EntityFrameworkCore 8.0.0 + ??? Microsoft.EntityFrameworkCore.Sqlite 8.0.0 + ??? Npgsql.EntityFrameworkCore.PostgreSQL 8.0.0 +``` + +### Project Groupings + +Since there is only 1 project with 0 dependencies, all work is performed in a **single atomic operation** with no phasing required. + +| Phase | Projects | Description | +|---|---|---| +| Phase 1: Atomic Upgrade | AutoBidder.csproj | Framework + packages upgrade, build, fix errors | + +### Critical Path +There is no critical path — the single project is both leaf and root. The entire upgrade is a single step. + +### Circular Dependencies +None detected. + +## 4. Project-by-Project Plans + +### 4.1 AutoBidder.csproj + +#### Current State + +| Attribute | Value | +|---|---| +| Target Framework | `net8.0` | +| Project Kind | AspNetCore (Blazor) | +| SDK-style | Yes | +| Lines of Code | 14,361 | +| Code Files | 50 (76 total files) | +| NuGet Packages | 3 | +| Project Dependencies | 0 | +| Dependants | 0 | +| Risk Level | ?? Low | + +#### Target State + +| Attribute | Value | +|---|---| +| Target Framework | `net10.0` | +| Updated Packages | 2 of 3 | + +#### Migration Steps + +**1. Prerequisites** +- .NET 10 SDK installed ? +- No `global.json` to update ? + +**2. Framework Update** +- Update `TargetFramework` property in `AutoBidder.csproj` from `net8.0` to `net10.0` + +**3. Package Updates** + +| Package | Current Version | Target Version | Reason | +|---|---|---|---| +| Microsoft.AspNetCore.Identity.EntityFrameworkCore | 8.0.0 | 10.0.5 | Upgrade recommended for .NET 10 compatibility | +| Microsoft.EntityFrameworkCore.Sqlite | 8.0.0 | 10.0.5 | Upgrade recommended for .NET 10 compatibility | +| Npgsql.EntityFrameworkCore.PostgreSQL | 8.0.0 | (keep) | ? Compatible — verify at build time with EF Core 10.0.5 | + +**4. Expected Breaking Changes** +- No API incompatibilities detected by assessment +- Potential behavioral changes from EF Core 8 ? 10 (see §6 Breaking Changes Catalog) +- Potential ASP.NET Core / Blazor configuration or middleware changes + +**5. Code Modifications** +- No code modifications identified by the assessment (0 estimated LOC impact) +- Compilation errors (if any) will be discovered and fixed during the build step + +**6. Validation Checklist** +- [ ] `AutoBidder.csproj` targets `net10.0` +- [ ] All package references updated to target versions +- [ ] Solution restores without dependency conflicts +- [ ] Solution builds with 0 errors +- [ ] No security vulnerabilities + +## 5. Package Update Reference + +### Common Package Updates (affecting AutoBidder.csproj) + +| Package | Current | Target | Update Reason | +|---|---|---|---| +| Microsoft.AspNetCore.Identity.EntityFrameworkCore | 8.0.0 | 10.0.5 | Framework compatibility — align with .NET 10 | +| Microsoft.EntityFrameworkCore.Sqlite | 8.0.0 | 10.0.5 | Framework compatibility — align with .NET 10 | + +### Compatible Packages (no update required) + +| Package | Current Version | Status | +|---|---|---| +| Npgsql.EntityFrameworkCore.PostgreSQL | 8.0.0 | ? Compatible — verify at build time that it works with EF Core 10.0.5 | + +### Notes +- All EF Core-related packages should align to the same major version where possible +- `Npgsql.EntityFrameworkCore.PostgreSQL` 8.0.0 is marked compatible by the assessment; however, if build errors occur related to EF Core version mismatch, investigate whether a newer Npgsql version is required + +## 6. Breaking Changes Catalog + +The assessment detected **0 API incompatibilities**. However, the following areas should be monitored during the build and test phases: + +### Framework Breaking Changes (.NET 8 ? .NET 10) + +| Area | Risk | Description | +|---|---|---| +| ASP.NET Core / Blazor | Low | Possible middleware, routing, or configuration changes between .NET 8 and .NET 10 | +| Entity Framework Core 8 ? 10 | Low | Possible behavioral changes in query translation, migrations, or model building | +| Base Class Library (BCL) | Low | Minor API behavioral changes possible | + +### Package-Specific Considerations + +| Package | Consideration | +|---|---| +| Npgsql.EntityFrameworkCore.PostgreSQL 8.0.0 | Verify compatibility with EF Core 10.0.5 — if incompatible, investigate newer Npgsql version | +| Microsoft.AspNetCore.Identity.EntityFrameworkCore 10.0.5 | Identity API changes possible between major versions | + +### Discovery Approach +Since no specific breaking changes were identified, the primary discovery mechanism is: +1. Build the solution after all updates +2. Analyze compilation errors +3. Fix identified issues referencing .NET 10 migration documentation + +## 7. Risk Management + +### Risk Assessment + +| Project | Risk Level | Description | Mitigation | +|---|---|---|---| +| AutoBidder.csproj | ?? Low | Single project, 0 API issues, 2 straightforward package updates | Standard upgrade process; rollback via Git if needed | + +### Specific Risks + +| Risk | Probability | Impact | Mitigation | +|---|---|---|---| +| Npgsql EF Core compatibility | Low | Medium | If build fails due to EF Core version mismatch, upgrade Npgsql to a .NET 10-compatible version | +| Undiscovered breaking changes in Blazor/ASP.NET Core | Low | Low | Fix compilation errors during build step; consult .NET 10 migration guide | +| EF Core migration compatibility | Low | Medium | Verify existing database migrations still apply correctly with EF Core 10 | + +### Contingency Plans + +- **Build failures from Npgsql**: Search for a newer version of `Npgsql.EntityFrameworkCore.PostgreSQL` compatible with EF Core 10. If none exists, evaluate alternative PostgreSQL providers. +- **Unexpected compilation errors**: Use .NET 10 breaking changes documentation to resolve. The upgrade branch isolates all changes — the `docker` branch remains untouched. +- **Rollback**: Discard the `upgrade-to-NET10` branch and return to `docker` branch. + +## 8. Testing & Validation Strategy + +### Build Validation + +After the atomic upgrade: +- [ ] `dotnet restore` completes without dependency conflicts +- [ ] `dotnet build` completes with 0 errors +- [ ] No new warnings related to deprecated APIs + +### Test Execution + +No dedicated test projects were identified in the solution. Validation relies on: +1. Successful build with 0 errors +2. No dependency conflicts +3. No security vulnerabilities + +> ?? **Recommendation**: If there are test projects not captured in the solution file, or integration/manual tests, execute them after the upgrade to verify runtime behavior — particularly around Entity Framework Core database operations and Blazor component rendering. + +## 9. Complexity & Effort Assessment + +### Per-Project Complexity + +| Project | Complexity | Dependencies | Package Updates | Risk | Notes | +|---|---|---|---|---|---| +| AutoBidder.csproj | ?? Low | 0 projects | 2 packages | Low | Single project, no API issues, straightforward upgrade | + +### Overall Assessment + +| Factor | Rating | +|---|---| +| Solution Complexity | Low (1 project, 0 dependencies) | +| Package Update Complexity | Low (2 packages with known target versions) | +| Breaking Change Risk | Low (0 API incompatibilities detected) | +| Testing Complexity | Low (build verification only — no test projects) | +| Overall Upgrade Complexity | **Low** | + +## 10. Source Control Strategy + +### Branching + +| Parameter | Value | +|---|---| +| Source branch | `docker` | +| Upgrade branch | `upgrade-to-NET10` | +| Strategy | Single branch for all upgrade changes | + +### Commit Approach + +**Single commit** for the entire atomic upgrade operation: +- Framework update, package updates, compilation fixes — all in one commit +- Commit message: `Upgrade to .NET 10.0 — update framework and packages` + +### Merge Process + +1. Verify solution builds with 0 errors on `upgrade-to-NET10` +2. Merge `upgrade-to-NET10` into `docker` (or open a Pull Request for review) +3. Delete `upgrade-to-NET10` branch after successful merge + +## 11. Success Criteria + +### Technical Criteria + +- [ ] `AutoBidder.csproj` targets `net10.0` +- [ ] `Microsoft.AspNetCore.Identity.EntityFrameworkCore` updated to 10.0.5 +- [ ] `Microsoft.EntityFrameworkCore.Sqlite` updated to 10.0.5 +- [ ] `Npgsql.EntityFrameworkCore.PostgreSQL` compatible (build succeeds) +- [ ] Solution builds with 0 errors +- [ ] No package dependency conflicts +- [ ] No security vulnerabilities + +### Quality Criteria + +- [ ] Code quality maintained (no degraded patterns) +- [ ] No new compiler warnings from deprecated APIs + +### Process Criteria + +- [ ] All-At-Once strategy followed (single atomic operation) +- [ ] All changes on `upgrade-to-NET10` branch +- [ ] Single commit for entire upgrade diff --git a/.github/upgrades/tasks.md b/.github/upgrades/tasks.md new file mode 100644 index 0000000..7cbe7b7 --- /dev/null +++ b/.github/upgrades/tasks.md @@ -0,0 +1,70 @@ +# .NET 10.0 Upgrade — Execution Tasks + +## Progress Dashboard + +| Metric | Value | +|---|---| +| Total Tasks | 5 | +| Completed | 0 | +| In Progress | 0 | +| Failed | 0 | +| Not Started | 5 | + +--- + +## Tasks + +### [?] TASK-001: Verify Prerequisites +**Scope**: Environment validation +**References**: Plan §1, §4.1 + +**Actions:** +- [?] (1) Verify .NET 10 SDK is installed and available on the machine +- [ ] (2) Verify no `global.json` file conflicts with target framework `net10.0` +- [ ] (3) Verify current branch is `upgrade-to-NET10` + +--- + +### [ ] TASK-002: Update Target Framework +**Scope**: AutoBidder.csproj +**References**: Plan §2, §4.1 + +**Actions:** +- [ ] (1) Update `TargetFramework` property in `AutoBidder.csproj` from `net8.0` to `net10.0` +- [ ] (2) Verify the project file contains `net10.0` + +--- + +### [ ] TASK-003: Update NuGet Packages +**Scope**: AutoBidder.csproj +**References**: Plan §5 + +**Actions:** +- [ ] (1) Update `Microsoft.AspNetCore.Identity.EntityFrameworkCore` from 8.0.0 to 10.0.5 +- [ ] (2) Update `Microsoft.EntityFrameworkCore.Sqlite` from 8.0.0 to 10.0.5 +- [ ] (3) Verify `Npgsql.EntityFrameworkCore.PostgreSQL` 8.0.0 compatibility — if incompatible with EF Core 10, find and update to a compatible version +- [ ] (4) Restore packages and verify no dependency conflicts + +--- + +### [ ] TASK-004: Build and Fix Compilation Errors +**Scope**: AutoBidder.sln +**References**: Plan §6, §8 + +**Actions:** +- [ ] (1) Build the solution +- [ ] (2) If build errors exist, analyze and fix all compilation errors +- [ ] (3) Rebuild and verify solution builds with 0 errors + +--- + +### [ ] TASK-005: Commit and Final Validation +**Scope**: Repository +**References**: Plan §10, §11 + +**Actions:** +- [ ] (1) Verify all success criteria from Plan §11 are met +- [ ] (2) Stage all changes and commit with message: `Upgrade to .NET 10.0 — update framework and packages` +- [ ] (3) Verify commit succeeded + +---