Skip to content

V6.0.0/double digits - #64

Open
gimlichael wants to merge 27 commits into
mainfrom
v6.0.0/double-digits
Open

gimlichael wants to merge 27 commits into
mainfrom
v6.0.0/double-digits

Conversation

@gimlichael

Copy link
Copy Markdown
Member

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:

  • Add net11.0 and remove net9.0 across packages and tests, with framework-specific .NET 11 release-candidate dependencies and updates to AWS, DapperExtensions, and coverage tooling.
  • Remove the .NET 9-only async LINQ dependency because both supported frameworks provide the required APIs.

Cuemon integration:

  • Replace Savvyio.Reflection.AssemblyContext with Cuemon.Reflection assembly discovery for dispatchers, handlers, and cloud-event converters, explicitly excluding Savvyio core from scans.
  • Remove Savvyio's AddConfiguredOptions API in favor of Cuemon.Extensions.DependencyInjection. Direct options and IOptions.Value now share one instance and the Microsoft configuration and validation pipeline, with setup deferred until materialization and the first registration retained.
  • Update consumer call sites and regression coverage for assembly filtering, reference traversal, shared options, deferred validation, and configuration composition.

CI and release automation:

  • Provision preview SDKs, run CI tests on .NET 11, move Linux runners to Ubuntu 26.04, and require tracked text files to use LF endings through the test quality gate.
  • Preserve pending major and minor release versions and avoid duplicate pending package release-note blocks; remove the legacy test Dockerfile.

Documentation and code consistency:

  • Update package READMEs, release notes, contributor guidance, and framework availability documentation for the new baseline and describe the breaking API migration in the changelog.
  • Convert source and test namespaces to file-scoped declarations, enforce that style, and normalize UTF-8 text and LF endings with related formatting cleanup.
  • Render namespace type summaries as definition lists and remove the obsolete benchmark-generation prompt.

aicia-bot and others added 24 commits October 24, 2026 04:28
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.
@gimlichael gimlichael self-assigned this Oct 24, 2026
@greptile-apps

greptile-apps Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[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.

Fix All in CodexFindings

  1. P1 Service updates stop before tagging ▶
  2. P2 Setup guide names old environments ▶
  3. P2 Release notes misstate setup ▶
Fix with agent prompt
### Issue 1
CHANGELOG.md:undefined-7
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
```

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!

### Issue 2
testenvironments.json:7
`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.

### Issue 3
CHANGELOG.md:17-21
`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.

Summary

This PR moves Savvy I/O to .NET 10 and .NET 11 and adopts Cuemon APIs for discovery and configured options.

  • Direct options and IOptions<TOptions>.Value now use the same configured object.
  • Savvy I/O discovery uses Cuemon’s assembly scanner.
  • Savvy I/O targets .NET 10 and .NET 11.
  • Release notes and package docs explain the new framework baseline and migration.

Reviews (2) · Last reviewed commit: "🔧 split docker test environments by dot..." · Reviewed by Greptile

Comment thread CHANGELOG.md

For more details, please refer to `PackageReleaseNotes.txt` on a per assembly basis in the `.nuget` folder.

## [6.0.0] - 2026-11-10

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 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.

Suggested change
## [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!

Fix in Codex

Comment thread CHANGELOG.md
Comment on lines +17 to +21
- 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,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 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.

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.

Fix in Codex

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.
Comment thread testenvironments.json
@@ -4,12 +4,18 @@
{
"name": "WSL-Ubuntu",
"type": "wsl",
"wslDistribution": "Ubuntu-24.04"
"wslDistribution": "Ubuntu-26.04"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 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.

Fix in Codex

@codecov

codecov Bot commented Oct 25, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.74078% with 19 lines in your changes missing coverage. Please review.
✅ Project coverage is 98.63%. Comparing base (8d9f9b1) to head (e92b1ff).

Files with missing lines Patch % Lines
src/Savvyio.Core/Domain/DomainException.cs 0.00% 7 Missing ⚠️
...rc/Savvyio.Core/Messaging/AcknowledgedEventArgs.cs 42.85% 4 Missing ⚠️
src/Savvyio.Core/SavvyioOptionsExtensions.cs 87.50% 3 Missing ⚠️
src/Savvyio.Domain/ValueObject.cs 91.30% 2 Missing ⚠️
src/Savvyio.Core/MetadataFactory.cs 92.85% 1 Missing ⚠️
src/Savvyio.Core/SavvyioOptions.cs 97.77% 1 Missing ⚠️
src/Savvyio.Extensions.Dapper/DapperDataSource.cs 96.87% 1 Missing ⚠️
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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sonarqubecloud

Copy link
Copy Markdown

This branch has not been deployed

No deployments
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.

2 participants