Repository navigation
V6.0.0/double digits - #64
gimlichael wants to merge 27 commits into
Conversation
Moves the shared build baseline from net9.0 and net10.0 to net11.0 and net10.0, including the test target selection in CI. The net9.0-only System.Linq.Async reference in Savvyio.Messaging is removed because both remaining targets provide async LINQ.
Adds net11 package versions for the Entity Framework Core, SQLite, logging, and cryptography dependencies, moves the net9-specific pins out, and refreshes AWS SDK, Dapper, and Coverlet versions to their latest stable releases.
The CI pipeline now installs preview .NET SDKs so the net11.0 target can build and test before it is generally available across all runners.
The service update automation now keeps an explicitly planned TBD minor or major version instead of resetting it to the next patch, and avoids duplicating an existing pending release block in PackageReleaseNotes.txt.
The Dockerfile used to run tests against the .NET 10 SDK with a .NET 9 runtime, which is no longer needed once net9.0 support is dropped.
Updates the modern availability include to .NET 11 and .NET 10, and renders namespace child types as definition lists so each type summary reads as a single entry.
The root README and agent guidance describe the library as targeting .NET 10 and .NET 11, matching the new target framework baseline.
Documents the .NET 11 baseline change, the removal of .NET 9 support, and the service automation changes in the changelog, and updates contributor guidance to list net11.0 as the CI target.
Adds a 6.0.0 release notes block to each package describing the .NET 11 target addition and the .NET 9 removal, so consumers see the breaking framework baseline in NuGet package notes.
Package README files now describe the supported runtime as .NET 10 and .NET 11 instead of .NET 9 and .NET 10, so the NuGet landing pages match the new target framework baseline.
Namespace declarations across the solution now use file-scoped syntax, matching the repository style. This is a mechanical change with no behavior impact, and it prepares the codebase for enforcing the rule in .editorconfig.
The namespace rule is now an error instead of a suggestion, and the note that existing block-scoped files should be left alone is removed. The codebase is converted in the previous commit, so the rule can be enforced without new violations.
Remove the UTF-8 byte order mark and normalize line endings to LF so the files match the charset and end_of_line rules in .editorconfig.
Apply formatting-only cleanups to the NATS, RabbitMQ, and messaging code and tests, including target-typed new expressions and collection expression spacing. No behavior changes.
Tracked text files were stored with mixed CRLF line endings and a UTF-8 byte order mark. Normalize them to LF without a BOM so diffs only show real changes and the new line ending check passes.
The new line_endings job fails the test quality gate when tracked text files are not stored with LF line endings. The CI jobs move from ubuntu-24.04 to ubuntu-26.04 to match the current runner image.
Savvyio's own AssemblyContext duplicated the scanning logic now provided by Cuemon. The dispatcher, handler, and cloud event converters use Cuemon's implementation and exclude the Savvyio core assembly from brute-force scanning.
Assembly scanning now uses Cuemon's AssemblyContext, so the Savvyio.Reflection copy is no longer needed. Its tests are rewritten against the Cuemon implementation.
Configured options are now provided by Cuemon's AddConfiguredOptions, so these test files import Cuemon.Extensions.DependencyInjection instead of relying on the Savvyio copy that is being removed.
AddConfiguredOptions now comes from Cuemon.Extensions.DependencyInjection, which shares one options instance across TOptions and IOptions<TOptions>. Removing the Savvyio copy is a breaking change for callers that used it from this package.
The Cuemon configured options share one instance between direct options and IOptions<TOptions>.Value, and defer setup until materialization. The tests now assert that behavior instead of the previous eager, separate instance.
Documents the .NET 11 baseline, the removal of .NET 9 support, and the move of configured options to Cuemon so consumers can see the breaking changes in the release notes.
The benchmark fixture prompt is removed from the repository prompts folder, so benchmark guidance is no longer generated from this file.
[High impact] The changes reach library consumers across its framework support and shared dependency-injection behavior. The PR still needs the previously reported release-heading fix before merging; the new setup-guide mismatch is non-blocking.
|
|
|
||
| For more details, please refer to `PackageReleaseNotes.txt` on a per assembly basis in the `.nuget` folder. | ||
|
|
||
| ## [6.0.0] - 2026-11-10 |
There was a problem hiding this comment.
Service updates stop before tagging
The new 6.0.0 heading has a release date, but the latest stable tag is v5.0.13. service-update.yml accepts a newer version only when its heading says TBD, so it exits before updating dependencies. Keep this heading as TBD until v6.0.0 is tagged so the workflow can use the pending-major-release path added here.
| ## [6.0.0] - 2026-11-10 | |
| ## [6.0.0] - TBD |
Prompt To Fix With AI
This is a comment left during a code review.
Path: CHANGELOG.md
Line: 7
Comment:
**Service updates stop before tagging**
The new `6.0.0` heading has a release date, but the latest stable tag is `v5.0.13`. `service-update.yml` accepts a newer version only when its heading says `TBD`, so it exits before updating dependencies. Keep this heading as `TBD` until `v6.0.0` is tagged so the workflow can use the pending-major-release path added here.
```suggestion
## [6.0.0] - TBD
```
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| - CI provisions preview SDKs and tests .NET 11, preserving the single-target CI policy; local tests cover both supported targets; the local test container uses the .NET 11 SDK with the .NET 10 runtime and Microsoft Testing Platform arguments, | ||
| - Updated Codebelt.Coverlet.MTP from 10.1.0 to 10.1.1, | ||
| - Updated framework availability in contributor guidance, package READMEs, and DocFX includes; retained .NET 10 for DocFX metadata generation, | ||
| - Service-update automation preserves pending major/minor release versions and uses the modern framework availability fallback, | ||
| - Set the MinVer minimum major/minor to 6.0 for the breaking framework baseline change; release versions remain Git-tag derived, |
There was a problem hiding this comment.
CHANGELOG.md claims that this PR sets the MinVer minimum to 6.0 and updates the local test container. Neither change is present: the build still sets only MinVerTagPrefix, and Dockerfile.tests is deleted rather than updated. Remove these claims or add the changes they describe so maintainers can rely on the release notes.
Prompt To Fix With AI
This is a comment left during a code review.
Path: CHANGELOG.md
Line: 17-21
Comment:
**Release notes misstate setup**
`CHANGELOG.md` claims that this PR sets the MinVer minimum to `6.0` and updates the local test container. Neither change is present: the build still sets only `MinVerTagPrefix`, and `Dockerfile.tests` is deleted rather than updated. Remove these claims or add the changes they describe so maintainers can rely on the release notes.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.PublishAsync now checks the cancellation token before serializing and sending, so a cancelled publish no longer reaches the NATS server. The test asserts the bus publishes nothing and surfaces the original cancellation token.
The schema comparison now normalizes line endings and trims trailing whitespace before matching, so the assertion does not fail on whitespace differences in the EF Core model output.
The single Docker test environment is split into separate net10.0 and net11.0 runners, each using its matching testrunner image. The Ubuntu WSL distribution is also moved to Ubuntu-26.04.
| @@ -4,12 +4,18 @@ | |||
| { | |||
| "name": "WSL-Ubuntu", | |||
| "type": "wsl", | |||
| "wslDistribution": "Ubuntu-24.04" | |||
| "wslDistribution": "Ubuntu-26.04" | |||
There was a problem hiding this comment.
Setup guide names old environments
testenvironments.json now selects Ubuntu-26.04 and two framework-specific Docker environments. But .github/CONTRIBUTING.md still lists Ubuntu-24.04 and the single Docker-Ubuntu environment with codebeltnet/ubuntu-testrunner:8-9-10-11. Contributors following that guide prepare the wrong WSL distribution or look for an environment that no longer appears. Update the setup guidance to match these entries.
Prompt To Fix With AI
This is a comment left during a code review.
Path: testenvironments.json
Line: 7
Comment:
**Setup guide names old environments**
`testenvironments.json` now selects `Ubuntu-26.04` and two framework-specific Docker environments. But `.github/CONTRIBUTING.md` still lists `Ubuntu-24.04` and the single `Docker-Ubuntu` environment with `codebeltnet/ubuntu-testrunner:8-9-10-11`. Contributors following that guide prepare the wrong WSL distribution or look for an environment that no longer appears. Update the setup guidance to match these entries.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #64 +/- ##
==========================================
- Coverage 98.70% 98.63% -0.08%
==========================================
Files 177 176 -1
Lines 3643 3589 -54
Branches 327 318 -9
==========================================
- Hits 3596 3540 -56
- Misses 46 48 +2
Partials 1 1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|



This pull request moves Savvy I/O to .NET 10 and .NET 11 and replaces its assembly discovery and configured-options implementations with Cuemon APIs. It also updates CI and release automation, documents the breaking migration, and applies repository-wide source formatting conventions.
Framework support and dependencies:
Cuemon integration:
CI and release automation:
Documentation and code consistency: