Migrate solution net7.0 β net9.0 with six-gate parity report - #72
devin-ai-integration[bot] wants to merge 7 commits into
Conversation
Co-Authored-By: harrison.reeves <harrisonreeves00@gmail.com>
Co-Authored-By: harrison.reeves <harrisonreeves00@gmail.com>
Co-Authored-By: harrison.reeves <harrisonreeves00@gmail.com>
Co-Authored-By: harrison.reeves <harrisonreeves00@gmail.com>
Co-Authored-By: harrison.reeves <harrisonreeves00@gmail.com>
Co-Authored-By: harrison.reeves <harrisonreeves00@gmail.com>
Co-Authored-By: harrison.reeves <harrisonreeves00@gmail.com>
π€ Devin AI EngineerI'll be helping with this pull request! Here's what you should know: β I will automatically:
Note: I can only respond to comments from users who have write access to this repository. βοΈ Control Options:
|
| new Education | ||
| { | ||
| Id = Guid.NewGuid(), | ||
| Id = new Guid("c92ea179-dd5c-46ca-b7b5-b44a191b974c"), |
There was a problem hiding this comment.
π Info: Seed GUID matches migration and snapshot
The HasData seed changed from Guid.NewGuid() to a fixed GUID that already matches both the migration and SampleDbContextModelSnapshot, so the model is consistent and no pending-model-changes warning arises.
Was this helpful? React with π or π to provide feedback.
| (re.compile(r"was missing required properties, including the following: \w+.*" | ||
| r"was missing required properties including: '\w+'\."), | ||
| "System.Text.Json reworded the missing-required-properties message in .NET 9"), |
There was a problem hiding this comment.
π Info: Justification regexes hardcode exact framework message wording
The justify patterns hardcode the exact net7/net9 message phrasings and specific RFC section fragments. Any future wording change or new status code flips a flow to mismatch and fails the gate. Acceptable for a one-shot snapshot, but brittle if the tooling is reused.
Was this helpful? React with π or π to provide feedback.
β net9.0 runtime verification via Swagger UI β full Education CRUD passedRan the migrated net9.0 build locally (.NET 9.0.317) against docker compose Postgres and exercised every Education endpoint through Swagger UI in the browser. Recording: https://app.devin.ai/attachments/e4c5acc4-d74d-4958-b55c-e139aec44188/net9-swagger-e2e-edited.mp4 Swagger UI renders cleanly on the pinned Swashbuckle 9.0.6 β the main regression risk in this PR β with the Full lifecycle through the UI, all green:
The update round-tripped through Postgres correctly:
|



Summary
Migrates all six projects from
net7.0tonet9.0and proves parity via a self-containedparity-report/index.htmlcovering six gates: build, unit tests, static analyser, smoke test, golden snapshot diff (20 itemised flows), and EF migration SQL parity. Legacy baselines were captured on the untouched net7 code and committed before any migration edit; every gate was re-run on net9 and diffed against them. All gates are green β the only differences are documented, inherent .NET 9 framework changes (no integration test project added).Key changes beyond the TFM/package bumps (EF Core 9.0.19, Npgsql 9.x, Mapster 10, xunit 2.9.3, FakeItEasy 9, test SDK 18.9):
Directory.Build.props(new):EnableNETAnalyzers+AnalysisLevel=latest+TreatWarningsAsErrorsβ the static-analyser gate. Net9 builds with 0 warnings/0 errors (legacy had 3 warnings).Swashbuckle.AspNetCorepinned to 9.0.6, not 10.x: v10 pullsMicrosoft.OpenApi2.x, which throwsTypeLoadExceptionat runtime withMicrosoft.AspNetCore.OpenApi9.0.x.Program.cs: connection string resolved once and null-guarded (?? throw new InvalidOperationException(...)) β fixes CS8604 under warnings-as-errors.SampleDbContext:HasDataseed changed fromGuid.NewGuid()to the stable GUID already in the committed migration; EF Core 9 rejects nondeterministic seeds withPendingModelChangesWarning.[FromBody] EducationDto) to preserve the legacy 400 ModelState bodies; the two test call sites usenull!instead.dotnet-versionfixed 6.0.x β 9.0.x, actions bumped to v4.Parity verdicts (
scripts/parity/capture/diff/report tooling, artifacts underparity-report/):typeURLs RFC 7231 β RFC 9110; System.Text.Json reworded its missing-required-properties message).SuccessβOKdescriptions, explicitrequired[], defaultstyleomission.NULL; migrations-historyProductVersionreflects the EF9 tool).Open
parity-report/index.htmldirectly in a browser β single file, inline CSS, no external deps, regenerable viascripts/parity/generate_report.py.Link to Devin session: https://app.devin.ai/sessions/5612e1dd80b241f7b8c74330e2cbc8ef
Open in Devin Desktop: https://app.devin.ai/desktop/session/5612e1dd80b241f7b8c74330e2cbc8ef?variant=devin
Requested by: @detectiveharree
Note
Devin errored when opening this Pull Request as detectiveharree.
As a fallback, Devin opened this PR as itself.
Devin Review