Skip to content

Conversation

@gimlichael
Copy link
Member

@gimlichael gimlichael commented Aug 29, 2025

This pull request introduces version 4.3.0 across multiple Savvyio packages, focusing on dependency upgrades and improved documentation and discoverability for new extension packages. The most important changes are the addition of new extension package references (notably for Newtonsoft.Json and Text.Json), updates to package release notes, and the inclusion of comprehensive guidelines for unit testing and XML documentation within the codebase.

Dependency and Package Updates:

  • Upgraded dependencies to the latest compatible versions for all supported target frameworks in Savvyio.Core, Savvyio.Domain, Savvyio.Domain.EventSourcing, Savvyio.Commands, and Savvyio.Commands.Messaging [1] [2] [3] [4] [5] [6].

  • Updated PackageReleaseNotes.txt files to announce version 4.3.0 and list the new and existing package references, including Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and Savvyio.Extensions.DependencyInjection.Text.Json.

Documentation and Discoverability:

  • Added Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and Savvyio.Extensions.DependencyInjection.Text.Json to the list of referenced projects in .docfx/docfx.json, improving documentation coverage and discoverability.

  • Updated all relevant README.md files for core and extension packages to include links to the new extension packages, ensuring users are aware of these new integrations [1] [2] [3] [4] [5] [6].

Development Guidelines:

  • Added a new .github/copilot-instructions.md file with detailed guidelines for writing unit tests and XML documentation in the Savvyio codebase, promoting consistency and maintainability for contributors.

Summary by CodeRabbit

  • New Features

    • Added DI packages for JSON marshalling with AddNewtonsoftJsonMarshaller and AddJsonMarshaller.
  • Improvements

    • Added null-guard validation across many DI extension methods for clearer failures on bad input.
  • Documentation

    • Prepended 4.3.0 release notes, updated CHANGELOG, expanded READMEs and related-package lists, and extended DocFX coverage.
  • Tests

    • Added unit test suites for the new JSON DI extensions and multiple NATS components; refined NATS option tests.
  • Chores

    • Upgraded dependency pins, added new projects to the solution and updated project references.

@gimlichael gimlichael requested a review from Copilot August 29, 2025 21:31
@gimlichael gimlichael self-assigned this Aug 29, 2025
@coderabbitai
Copy link

coderabbitai bot commented Aug 29, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Warning

Rate limit exceeded

@gimlichael has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 24 minutes and 49 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between b68eb76 and 0dc5283.

📒 Files selected for processing (7)
  • .github/copilot-instructions.md (1 hunks)
  • .nuget/Savvyio.App/README.md (2 hunks)
  • .nuget/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/README.md (1 hunks)
  • .nuget/Savvyio.Extensions.DependencyInjection.Text.Json/README.md (1 hunks)
  • README.md (2 hunks)
  • src/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj (1 hunks)
  • src/Savvyio.Extensions.DependencyInjection.Text.Json/Savvyio.Extensions.DependencyInjection.Text.Json.csproj (1 hunks)

Walkthrough

Adds two new DI extension libraries for JSON marshalling (Text.Json and Newtonsoft.Json) with tests; updates solution and project references; adds upfront null-guards to many IServiceCollection extension methods; changes AddConfiguredOptions to also register the configurator and options as singletons; updates docs/release notes and bumps two AWS SDK pins.

Changes

Cohort / File(s) Summary
New DI JSON libraries
src/Savvyio.Extensions.DependencyInjection.Text.Json/*, src/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/*
New projects and csproj files; public static ServiceCollectionExtensions with AddJsonMarshaller and AddNewtonsoftJsonMarshaller, input validation, default option setup and DI registrations.
Tests for new libraries
test/Savvyio.Extensions.DependencyInjection.Text.Json.Tests/*, test/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.Tests/*
Unit tests covering null handling, default registrations, option customization, and service lifetime behavior for the new marshaller extensions.
Solution & app reference
Savvyio.sln, src/Savvyio.App/Savvyio.App.csproj
Added four projects to solution (two libs + two tests); added Text.Json DI project reference to Savvyio.App.
Core DI infrastructure
src/Savvyio.Extensions.DependencyInjection/ServiceCollectionExtensions.cs
Modified AddConfiguredOptions to register the Action and the configured TOptions instance as singletons in addition to Configure; added multiple upfront Validator.ThrowIfNull(services) guards and XML doc updates.
Null-guards across DI extensions
src/Savvyio.Extensions.DependencyInjection.*/*/ServiceCollectionExtensions.cs
Introduced Validator.ThrowIfNull(services) and corresponding XML exception docs in many extension libraries (Dapper, DapperExtensions, EFCore*, NATS, RabbitMQ, QueueStorage, SimpleQueueService, etc.).
NATS tests & tweaks
test/Savvyio.Extensions.NATS.Tests/*
Added constructor and options tests for NatsCommandQueue and NatsEventBus; refactored NatsMessageOptions tests; adjusted test project references.
Doc generation config
.docfx/docfx.json
Added inclusion patterns for the two new DI JSON projects so DocFX will generate API docs for them.
Dependency pins
Directory.Packages.props
Bumped AWSSDK.SQS and AWSSDK.SimpleNotificationService package versions.
Changelog / READMEs / Copilot guidance
CHANGELOG.md, README.md, .github/copilot-instructions.md
Added 4.3.0 entries describing new DI JSON extensions; updated package listings and added Copilot guidance for tests and XML docs.
NuGet release notes & READMEs
.nuget/**/PackageReleaseNotes.txt, .nuget/**/README.md
Prepended 4.3.0 release notes across many packages and added the new DI JSON packages to related-package lists.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Dev as Developer
  participant SVC as IServiceCollection
  participant Ext as ServiceCollectionExtensions
  participant DI as DI Container

  Dev->>SVC: AddJsonMarshaller(jsonSetup?, serviceSetup?)
  SVC->>Ext: call extension
  Ext->>SVC: Validator.ThrowIfNull(services)
  Ext->>SVC: AddMarshaller<JsonMarshaller>(serviceSetup)
  Ext->>SVC: AddConfiguredOptions(JsonFormatterOptions, jsonSetup or default)
  note right of SVC: AddConfiguredOptions now also registers:<br/>- Action<JsonFormatterOptions> singleton<br/>- JsonFormatterOptions instance singleton
  SVC->>DI: register marshaller & options & configurator singletons
  DI-->>Dev: services ready (fluent IServiceCollection)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • V4.3.0/di additions #38 — Adds the same DI JSON projects and docfx include patterns; strongly related to solution/project additions and docs.
  • V3.0.0/alm and marshaller #21 — Touches marshaller DI patterns and AddConfiguredOptions behavior that the new JSON marshaller extensions rely on.

Poem

Hop hop, I wire the graph with glee,
New marshals join our DI tree.
Nulls are caught—no sneaky slips,
Options sail with singleton ships.
Tests nibble bugs before they spawn 🐇✨

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch v4.3.0/di-additions

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This pull request introduces version 4.3.0 across the Savvyio codebase, focusing on dependency upgrades and the addition of two new JSON marshaller extension packages for Microsoft Dependency Injection.

  • Upgraded AWS package dependencies to latest compatible versions
  • Added new Savvyio.Extensions.DependencyInjection.Text.Json package for Microsoft's built-in JSON
  • Added new Savvyio.Extensions.DependencyInjection.Newtonsoft.Json package for Newtonsoft JSON
  • Updated README files and package documentation to include new extension packages
  • Enhanced XML documentation coverage and validation across dependency injection extension methods

Reviewed Changes

Copilot reviewed 101 out of 103 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
Directory.Packages.props Updated AWS SDK package versions to latest compatible releases
CHANGELOG.md Added version 4.3.0 release notes documenting new JSON extensions
Various README.md files Updated package lists to include new JSON extension packages
src/Savvyio.Extensions.DependencyInjection.*.Json/ New projects providing DI extensions for JSON marshallers
test/Savvyio.Extensions.*.Tests/ Added comprehensive unit test coverage for new components
.github/copilot-instructions.md Added development guidelines for unit testing and XML documentation
.docfx/docfx.json Updated documentation configuration to include new packages

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +35 to +36


Copy link

Copilot AI Aug 29, 2025

Choose a reason for hiding this comment

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

There are unnecessary extra blank lines between methods. A single blank line is sufficient for separation.

Suggested change

Copilot uses AI. Check for mistakes.
Assert.Throws<ArgumentNullException>(() => new NatsCommandQueue(_marshaller, null));
}


Copy link

Copilot AI Aug 29, 2025

Choose a reason for hiding this comment

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

There are unnecessary extra blank lines between methods. A single blank line is sufficient for separation.

Suggested change

Copilot uses AI. Check for mistakes.
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 11

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
.docfx/docfx.json (1)

70-71: Duplicate "xrefService" keys under build; remove one to avoid ambiguous config.

JSON with duplicate keys is undefined; DocFX will effectively ignore one. Keep a single "xrefService" entry.

Apply this diff to remove the trailing duplicate:

   "disableGitFeatures": false,
-  "xrefService": [
-      "https://xref.docs.microsoft.com/query?uid={uid}" ]
+  "xrefService": [
+      "https://xref.docs.microsoft.com/query?uid={uid}" ]
 }

Also applies to: 132-134

.nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/PackageReleaseNotes.txt (1)

75-77: Fix namespace and grammar in New Features bullet

The namespace should be Savvyio.Extensions.DependencyInjection.DapperExtensions (not .Dapper), and “consist” → “consists”.

-- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Dapper namespace that consist of extension methods for the IServiceCollection interface: AddDapperExtensionsDataStore
+- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.DapperExtensions namespace that consists of extension methods for the IServiceCollection interface: AddDapperExtensionsDataStore
src/Savvyio.Extensions.DependencyInjection.EFCore.Domain.EventSourcing/ServiceCollectionExtensions.cs (1)

18-27: Fix XML doc: refers to EfCoreAggregateRepository instead of EfCoreTracedAggregateRepository

Summary/remarks/seealso reference the non-traced type, which is misleading for these traced overloads. Adjust the XML to the traced variants.

-/// Adds an <see cref="EfCoreAggregateRepository{TEntity,TKey}"/> to the specified <see cref="IServiceCollection" />.
+/// Adds an <see cref="EfCoreTracedAggregateRepository{TEntity,TKey}"/> to the specified <see cref="IServiceCollection" />.
...
-/// <remarks>The <see cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/> will be type forwarded accordingly.</remarks>
+/// <remarks>The <see cref="EfCoreTracedAggregateRepository{TEntity,TKey}"/> will be type forwarded accordingly.</remarks>
...
-/// Adds an <see cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/> to the specified <see cref="IServiceCollection" />.
+/// Adds an <see cref="EfCoreTracedAggregateRepository{TEntity,TKey,TMarker}"/> to the specified <see cref="IServiceCollection" />.
...
-/// <seealso cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/>
+/// <seealso cref="EfCoreTracedAggregateRepository{TEntity,TKey,TMarker}"/>
-/// <remarks>The <see cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/> will be type forwarded accordingly.</remarks>
+/// <remarks>The <see cref="EfCoreTracedAggregateRepository{TEntity,TKey,TMarker}"/> will be type forwarded accordingly.</remarks>

Also applies to: 36-46

src/Savvyio.Extensions.DependencyInjection/ServiceCollectionExtensions.cs (1)

36-42: Avoid divergence between TOptions singleton and IOptions.Value
Registering a pre-built TOptions instance and the setup delegate as separate singletons can drift from the aggregated options pipeline (additional Configure calls, binders, PostConfigure) and yields duplicate TOptions and Action<TOptions> registrations when AddConfiguredOptions<T> is called multiple times—making single‐service resolution order‐dependent.

Use IOptions<TOptions>.Value to resolve TOptions and avoid duplicate singletons:

- return services
-     .Configure(setup) // support for IOptions<TOptions>
-     .AddSingleton(setup) // support for Action<TOptions>
-     .AddSingleton(options); // support for TOptions
+ return services
+     .Configure(setup) // support for IOptions<TOptions>
+     .AddSingleton<Action<TOptions>>(setup) // expose configurator if needed
+     .AddSingleton<TOptions>(sp => sp.GetRequiredService<Microsoft.Extensions.Options.IOptions<TOptions>>().Value);

Verification checklist:

  • Injected TOptions equals IOptions<TOptions>.Value under multiple Configure<TOptions> calls.
  • Action<TOptions> resolution remains deterministic (or consume IEnumerable<Action<TOptions>> if multiple configurators are registered).
🧹 Nitpick comments (76)
.nuget/Savvyio.Messaging/PackageReleaseNotes.txt (3)

1-2: Include a release date (and optional compare link) for traceability.

Add an explicit release date (e.g., “Released: 2025-08-29”) and, if feasible, a compare link to the tag to help consumers correlate changes.

Example:

 Version: 4.3.0
 Availability: .NET 9 and .NET 8
+Released: 2025-08-29

5-5: Call out notable dependency upgrades instead of a generic statement.

Listing the key bumped packages (top 3–5) improves the usefulness of the notes. If none apply to Savvyio.Messaging specifically, consider stating “No API changes; internal dependency updates only.”

Example structure:

- - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
+ - CHANGED Dependencies upgraded to latest compatible versions for all supported TFMs:
+   - <PackageA> <old> → <new>
+   - <PackageB> <old> → <new>
+   - <PackageC> <old> → <new>

3-3: Replace non-breaking space with a normal blank line.

The current line appears to be a non-breaking space, which can render oddly in some NuGet views.

- 
+
.nuget/Savvyio.Extensions.RabbitMQ/PackageReleaseNotes.txt (3)

3-3: Replace the non-breaking space with a normal blank line.

Line 3 appears to contain U+00A0 (NBSP). This can cause odd diffs/rendering across editors.

- 
+

5-5: Call out notable upgraded dependencies and breaking-change status.

The generic “Dependencies upgraded” note is fine, but listing key packages (e.g., RabbitMQ.Client, Microsoft.Extensions.*) and stating “No breaking changes” improves clarity for consumers.

Example:

 # ALM
-- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
+- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
+  - RabbitMQ.Client: x.y.z → a.b.c
+  - Microsoft.Extensions.Options: x.y.z → a.b.c
+  - …
+# Compatibility
+- No breaking changes in this release.

1-2: Optionally include a release date for traceability.

If other packages add dates, consider adding one here for consistency.

Example:

 Version: 4.3.0
+Released: 2025-08-29
 Availability: .NET 9 and .NET 8
.nuget/Savvyio.Extensions.DependencyInjection.RabbitMQ/PackageReleaseNotes.txt (3)

3-3: Replace non-breaking spaces on “blank” lines

Lines contain NBSP (U+00A0) instead of true blank lines, which causes noisy diffs/rendering in some viewers.

Apply:

- 
+
- 
+

Also applies to: 6-6


4-6: Clarify change scope and call out lack of breaking changes (if true)

If 4.3.0 only bumps dependencies, say so explicitly and note “No API or behavior changes” to set expectations. Optionally enumerate key upgraded dependencies.

Proposed tweak:

 # ALM
-- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
+- CHANGED Dependencies upgraded to the latest compatible versions across all supported TFMs.
+- NOTE No breaking API or runtime behavior changes.  <!-- if accurate -->
+  - (Optional) Highlights: <dep> x.y.z → a.b.c, <dep> …

4-4: Consider expanding the ALM acronym once

If these notes target external consumers, consider “Application Lifecycle Management (ALM)” once for clarity. Keep the short form thereafter.

-# ALM
+# Application Lifecycle Management (ALM)
.nuget/Savvyio.Extensions.DapperExtensions/PackageReleaseNotes.txt (2)

4-5: Consider calling out notable dependency bumps.

Optional: add one or two bullets naming key packages and new versions (e.g., Dapper, SavvyIO core) to improve traceability for consumers scanning release notes.


3-6: Replace non‑breaking space “blank” lines with real blank lines.

Lines appear to contain NBSP characters, which cause noisy diffs and inconsistent rendering in some viewers. Prefer empty lines.

- 
+ 
- 
+ 
Directory.Packages.props (1)

7-8: Add AWSSDK.Core to Directory.Packages.props
SQS and SNS are already centrally pinned and no AWSSDK packages are version-pinned in individual csproj files; including AWSSDK.Core in the central Directory.Packages.props will prevent future version drift.

.nuget/Savvyio.Domain.EventSourcing/PackageReleaseNotes.txt (1)

1-6: Consider adding release date and a link to the diff/changelog for 4.3.0.

Including a release date (UTC) and a link to the repo CHANGELOG or GitHub compare view improves traceability across packages.

.nuget/Savvyio.EventDriven/PackageReleaseNotes.txt (1)

1-6: Mirror release-note metadata (date + changelog link) across packages.

Same suggestion as other packages: add a release date and a reference link for 4.3.0 to keep notes consistent.

.nuget/Savvyio.Extensions.EFCore.Domain.EventSourcing/PackageReleaseNotes.txt (1)

1-6: Add release date and cross-reference to CHANGELOG.

Minor consistency improvement to align with multi-package release notes.

src/Savvyio.Extensions.DependencyInjection.Domain/ServiceCollectionExtensions.cs (1)

15-24: Document default lifetime behavior.

Consider noting that Scoped is the default lifetime when setup is null to make the API docs self-contained.

Apply:

 /// <returns>A reference to <paramref name="services" /> so that additional configuration calls can be chained.</returns>
-/// <remarks>If the underlying type of <typeparamref name="TService"/> implements <see cref="IDependencyInjectionMarker{TMarker}"/> interface then this is automatically handled. Also, the implementation will be type forwarded accordingly.</remarks>
+/// <remarks>
+/// If the underlying type of <typeparamref name="TService"/> implements <see cref="IDependencyInjectionMarker{TMarker}"/> this is automatically handled and the implementation is type-forwarded accordingly.
+/// When <paramref name="setup"/> is null, the default <see cref="ServiceLifetime"/> is <see cref="ServiceLifetime.Scoped"/>.
+/// </remarks>
.nuget/Savvyio.EventDriven.Messaging/PackageReleaseNotes.txt (1)

3-3: Replace non-breaking space with a true blank line.

The whitespace line uses U+00A0; prefer a normal empty line to avoid diff noise/render quirks.

Apply:

- 
+
.nuget/Savvyio.Extensions.SimpleQueueService/PackageReleaseNotes.txt (1)

3-3: Normalize blank line whitespace.

Line contains U+00A0; replace with an actual empty line.

- 
+
.nuget/Savvyio.Extensions.QueueStorage/PackageReleaseNotes.txt (1)

1-6: Release notes entry reads well; add minor formatting fixes.

  • Replace the non-breaking space lines with real blank lines to avoid hidden Unicode in diffs.
  • Keep a trailing newline at EOF for tooling friendliness.
 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+
 # ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+
.nuget/Savvyio.Extensions.Text.Json/PackageReleaseNotes.txt (1)

1-6: Good 4.3.0 block; unify whitespace and ensure newline at EOF.

  • Swap NBSP-only lines for actual blank lines.
  • File appears to miss a trailing newline—add one.
 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+
 # ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+
.nuget/Savvyio.Domain/PackageReleaseNotes.txt (1)

1-6: Consistent 4.3.0 header; minor whitespace nit.

Replace NBSP-only lines with true blank lines; keep trailing newline.

 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+
 # ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+
.nuget/Savvyio.Extensions.DependencyInjection.QueueStorage/PackageReleaseNotes.txt (1)

1-6: 4.3.0 block looks good; apply whitespace cleanup.

Avoid NBSP lines; ensure final newline.

 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+
 # ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+
.nuget/Savvyio.Extensions.SimpleQueueService/README.md (1)

33-33: New DI JSON package links — LGTM

Both additions fit the existing style and positioning among DI packages. LanguageTool’s warnings here look like false positives for list formatting; safe to ignore.

Also applies to: 37-37

.nuget/Savvyio.Extensions.EFCore/PackageReleaseNotes.txt (1)

1-6: Optional: Add release date to the 4.3.0 release notes block

Version and Availability lines are correctly present; consider adding a Date: YYYY-MM-DD entry to the 4.3.0 section in PackageReleaseNotes.txt for traceability.

.nuget/Savvyio.Commands/PackageReleaseNotes.txt (1)

1-6: Release note entry LGTM; verify TFMs and dep bumps; avoid NBSP whitespace lines.

  • Content/format matches prior entries. Please confirm the csproj TFMs truly are .NET 9/.NET 8 and that all dependency bumps landed for 4.3.0.
  • Optional: add the release date for 4.3.0 for traceability.
  • Minor nit: the blank lines appear to be non-breaking spaces (U+00A0). Prefer plain empty lines to avoid rendering quirks in some viewers.
.nuget/Savvyio.Extensions.Dispatchers/PackageReleaseNotes.txt (2)

1-6: 4.3.0 entry looks consistent; minor whitespace nit

LGTM on content. Replace the NBSP-only spacer lines with true blank lines to avoid invisible-diff noise across editors/OS.

Apply for the lines rendered as a single NBSP:

- 
+

1-6: Optional: add release date for traceability

If repo conventions allow, add a date under the version header (e.g., “Released: 2025-08-29”).

.nuget/Savvyio.Core/PackageReleaseNotes.txt (2)

1-6: Content LGTM; normalize spacer lines

Same NBSP-only line issue as other release notes. Swap NBSP with real blank lines for cleaner diffs.

- 
+

1-6: Optional: version dating

Consider adding a release date for 4.3.0 if that’s standardizing across packages.

.nuget/Savvyio.Extensions.DependencyInjection.Dapper/PackageReleaseNotes.txt (1)

1-6: 4.3.0 block approved; whitespace polish

Entry mirrors other packages. Replace NBSP spacer lines with empty lines to avoid encoding surprises.

- 
+
.nuget/Savvyio.Extensions.DependencyInjection.SimpleQueueService/README.md (1)

37-37: Addition of Text.Json DI package: looks good

Consistent naming and emoji pattern; LanguageTool warnings here seem spurious.

If desired, ensure the DI package bullets remain strictly alphabetical within the DI group across all README files.

.nuget/Savvyio.Commands.Messaging/PackageReleaseNotes.txt (2)

1-6: 4.3.0 release notes: OK; unify spacing

Content matches other packages. Replace NBSP-only spacer lines with blank lines for consistency.

- 
+

10-12: Minor formatting consistency

The “# ALM” header spacing differs slightly from adjacent sections. Align spacing/padding to avoid churn in future diffs.

.nuget/Savvyio.Extensions.DependencyInjection.EFCore.Domain.EventSourcing/PackageReleaseNotes.txt (1)

1-6: Normalize whitespace and optionally add a release date for traceability

There are NBSP lines; replace with regular blank lines. Optionally add a release date line under Availability.

 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+ 
+# ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+ 
+Release date: 2025-08-29
.nuget/Savvyio.Extensions.RabbitMQ/README.md (1)

33-37: New DI JSON package links look correct; keep ordering consistent across READMEs

The additions are fine. For consistency, ensure the placement/order of the two DI JSON entries matches other package READMEs. If you aim for grouping, consider clustering JSON-related DI packages together.

.nuget/Savvyio.Extensions.NATS/PackageReleaseNotes.txt (1)

1-6: Same whitespace nit as other release notes; optional release date

Replace NBSP with plain blank lines; consider adding a release date line.

 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+ 
 # ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+ 
+Release date: 2025-08-29
.nuget/Savvyio.Extensions.EFCore.Domain.EventSourcing/README.md (1)

33-37: Links added—consider consistency across repos

Entries are good. Please ensure the same insertion points/order for the DI JSON packages across all README “Related Packages” lists for uniform discoverability.

.nuget/Savvyio.Extensions.DependencyInjection.Dapper/README.md (1)

33-37: Mirror ordering with other READMEs

The two DI JSON links are correct. For polish, align their ordering/position with the other README lists in this PR.

.nuget/Savvyio.Extensions.Newtonsoft.Json/README.md (1)

3-3: Name the library “Newtonsoft.Json” consistently.

Minor wording improvement for searchability/consistency.

-Extend the Savvy I/O core assemblies with support for Newtonsoft JSON.
+Extend the Savvy I/O core assemblies with support for Newtonsoft.Json.
.nuget/Savvyio.Extensions.DependencyInjection.EFCore/PackageReleaseNotes.txt (1)

1-6: 4.3.0 block reads well and matches repo-wide ALM phrasing.

No issues. Consider adding specific dependency highlights in future if notable.

src/Savvyio.Extensions.DependencyInjection.Text.Json/Savvyio.Extensions.DependencyInjection.Text.Json.csproj (1)

4-4: Clarify description to explicitly mention System.Text.Json.

Tiny polish to be precise about the built-in JSON stack.

-    <Description>Extend the Savvy I/O support for Microsoft Dependency Injection with support for official built-in JSON implementations.</Description>
+    <Description>Extend Savvy I/O for Microsoft Dependency Injection with support for System.Text.Json.</Description>
.nuget/Savvyio.App/PackageReleaseNotes.txt (1)

1-34: List new DI JSON extensions in 4.3.0 references

Savvyio.App now references the Text.Json DI extension; add both DI JSON extensions here for parity and discoverability.

 - Savvyio.Extensions.DependencyInjection.SimpleQueueService
+- Savvyio.Extensions.DependencyInjection.Newtonsoft.Json
+- Savvyio.Extensions.DependencyInjection.Text.Json
 - Savvyio.Extensions.Dispatchers
src/Savvyio.Extensions.DependencyInjection.QueueStorage/ServiceCollectionExtensions.cs (1)

32-38: Also guard setup delegates (azureQueueSetup/azureEventBusSetup)

Prevent NREs earlier and surface clearer argument errors, mirroring the services guard.

 public static IServiceCollection AddAzureCommandQueue(this IServiceCollection services, Action<AzureQueueOptions> azureQueueSetup, Action<ServiceOptions> serviceSetup = null)
 {
-    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(azureQueueSetup);
     return services
 public static IServiceCollection AddAzureCommandQueue<TMarker>(this IServiceCollection services, Action<AzureQueueOptions<TMarker>> azureQueueSetup, Action<ServiceOptions> serviceSetup = null)
 {
-    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(azureQueueSetup);
     return services
 public static IServiceCollection AddAzureEventBus(this IServiceCollection services, Action<AzureQueueOptions> azureQueueSetup, Action<AzureEventBusOptions> azureEventBusSetup, Action<ServiceOptions> serviceSetup = null)
 {
-    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(azureQueueSetup);
+    Validator.ThrowIfNull(azureEventBusSetup);
     return services
 public static IServiceCollection AddAzureEventBus<TMarker>(this IServiceCollection services, Action<AzureQueueOptions<TMarker>> azureQueueSetup, Action<AzureEventBusOptions<TMarker>> azureEventBusSetup, Action<ServiceOptions> serviceSetup = null)
 {
-    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(azureQueueSetup);
+    Validator.ThrowIfNull(azureEventBusSetup);
     return services

Also applies to: 51-57, 71-78, 92-99

src/Savvyio.Extensions.DependencyInjection.Dapper/ServiceCollectionExtensions.cs (1)

26-32: Optional: validate dataSourceSetup callbacks too

Add guards for dataSourceSetup to fail fast on bad inputs, consistent with services guard.

 public static IServiceCollection AddDapperDataSource(this IServiceCollection services, Action<DapperDataSourceOptions> dataSourceSetup, Action<ServiceOptions> serviceSetup = null)
 {
-    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(dataSourceSetup);
     return services
 public static IServiceCollection AddDapperDataSource<TMarker>(this IServiceCollection services, Action<DapperDataSourceOptions<TMarker>> dataSourceSetup, Action<ServiceOptions> serviceSetup = null)
 {
-    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(dataSourceSetup);
     return services

Also applies to: 45-51

src/Savvyio.Extensions.DependencyInjection.DapperExtensions/ServiceCollectionExtensions.cs (1)

23-27: Consider offering overloads that accept ServiceOptions to control lifetime

Other stores (e.g., EFCore) expose an overload taking Action. Providing it here would allow callers to configure lifetimes consistently.

@@
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
+using Cuemon.Extensions.DependencyInjection;
@@
     public static class ServiceCollectionExtensions
     {
@@
         public static IServiceCollection AddDapperExtensionsDataStore<T>(this IServiceCollection services) where T : class
         {
             Validator.ThrowIfNull(services);
             return services.AddDataStore<DapperExtensionsDataStore<T>, T, DapperExtensionsQueryOptions<T>>();
         }
+
+        /// <summary>
+        /// Adds an implementation of <see cref="DapperExtensionsDataStore{T}"/> with configurable <see cref="ServiceOptions"/>.
+        /// </summary>
+        public static IServiceCollection AddDapperExtensionsDataStore<T>(this IServiceCollection services, Action<ServiceOptions> setup) where T : class
+        {
+            Validator.ThrowIfNull(services);
+            return services.AddDataStore<DapperExtensionsDataStore<T>, T, DapperExtensionsQueryOptions<T>>(setup);
+        }
@@
         public static IServiceCollection AddDapperExtensionsDataStore<T, TMarker>(this IServiceCollection services) where T : class
         {
             Validator.ThrowIfNull(services);
             return services.AddDataStore<DapperExtensionsDataStore<T, TMarker>, T, DapperExtensionsQueryOptions<T>>();
         }
+
+        /// <summary>
+        /// Adds an implementation of <see cref="DapperExtensionsDataStore{T,TMarker}"/> with configurable <see cref="ServiceOptions"/>.
+        /// </summary>
+        public static IServiceCollection AddDapperExtensionsDataStore<T, TMarker>(this IServiceCollection services, Action<ServiceOptions> setup) where T : class
+        {
+            Validator.ThrowIfNull(services);
+            return services.AddDataStore<DapperExtensionsDataStore<T, TMarker>, T, DapperExtensionsQueryOptions<T>>(setup);
+        }

Also applies to: 39-43

.nuget/Savvyio.Extensions.EFCore.Domain/PackageReleaseNotes.txt (1)

1-6: Release block OK; minor whitespace cleanup

Looks good. Replace the non-breaking space lines (U+00A0) with regular blank lines to avoid rendering quirks in some viewers.

 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+
 # ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+
.nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/PackageReleaseNotes.txt (1)

1-6: Release block OK; minor whitespace cleanup

Same NBSP issue as other release files; swap for plain blank lines.

 Version: 4.3.0
 Availability: .NET 9 and .NET 8
- 
+
 # ALM
 - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+
src/Savvyio.Extensions.DependencyInjection.SimpleQueueService/ServiceCollectionExtensions.cs (1)

31-37: Optionally guard awsSetup for clearer failure mode

If AddConfiguredOptions does not accept null, add explicit validation to surface a precise error.

 public static IServiceCollection AddAmazonCommandQueue(this IServiceCollection services, Action<AmazonCommandQueueOptions> awsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(awsSetup);
     return services
         .AddMessageQueue<AmazonCommandQueue, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(awsSetup);
 }
@@
 public static IServiceCollection AddAmazonCommandQueue<TMarker>(this IServiceCollection services, Action<AmazonCommandQueueOptions<TMarker>> awsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(awsSetup);
     return services
         .AddMessageQueue<AmazonCommandQueue<TMarker>, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(awsSetup);
 }
@@
 public static IServiceCollection AddAmazonEventBus(this IServiceCollection services, Action<AmazonEventBusOptions> awsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(awsSetup);
     return services
         .AddMessageBus<AmazonEventBus, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(awsSetup);
 }
@@
 public static IServiceCollection AddAmazonEventBus<TMarker>(this IServiceCollection services, Action<AmazonEventBusOptions<TMarker>> awsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(awsSetup);
     return services
         .AddMessageBus<AmazonEventBus<TMarker>, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(awsSetup);
 }

Also applies to: 50-56, 69-75, 88-94

src/Savvyio.Extensions.DependencyInjection.RabbitMQ/ServiceCollectionExtensions.cs (1)

28-31: Optionally guard setup delegates too (clearer error when null)

rabbitMqSetup is required; consider null-guarding it for earlier, clearer exceptions, and document it.

 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="rabbitMqSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddRabbitMqCommandQueue(this IServiceCollection services, Action<RabbitMqCommandQueueOptions> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(rabbitMqSetup);
     return services
         .AddMessageQueue<RabbitMqCommandQueue, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(rabbitMqSetup);
 }
@@
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="rabbitMqSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddRabbitMqCommandQueue<TMarker>(this IServiceCollection services, Action<RabbitMqCommandQueueOptions<TMarker>> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(rabbitMqSetup);
     return services
         .AddMessageQueue<RabbitMqCommandQueue<TMarker>, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(rabbitMqSetup);
 }
@@
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="rabbitMqSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddRabbitMqEventBus(this IServiceCollection services, Action<RabbitMqEventBusOptions> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(rabbitMqSetup);
     return services
         .AddMessageBus<RabbitMqEventBus, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(rabbitMqSetup);
 }
@@
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="rabbitMqSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddRabbitMqEventBus<TMarker>(this IServiceCollection services, Action<RabbitMqEventBusOptions<TMarker>> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(rabbitMqSetup);
     return services
         .AddMessageBus<RabbitMqEventBus<TMarker>, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(rabbitMqSetup);
 }

Also applies to: 33-37, 47-50, 52-56, 66-69, 71-75, 85-88, 90-94

src/Savvyio.Extensions.DependencyInjection.EFCore/ServiceCollectionExtensions.cs (1)

25-27: Optionally validate required dataSourceSetup

Both AddEfCoreDataSource overloads require dataSourceSetup; guard it and document to surface errors early (rather than deferring to AddConfiguredOptions).

 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="dataSourceSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddEfCoreDataSource(this IServiceCollection services, Action<EfCoreDataSourceOptions> dataSourceSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(dataSourceSetup);
     return services.AddDataSource<EfCoreDataSource>(serviceSetup)
         .AddUnitOfWork<EfCoreDataSource>(serviceSetup)
         .AddConfiguredOptions(dataSourceSetup);
 }
@@
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="dataSourceSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddEfCoreDataSource<TMarker>(this IServiceCollection services, Action<EfCoreDataSourceOptions<TMarker>> dataSourceSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(dataSourceSetup);
     return services.AddDataSource<EfCoreDataSource<TMarker>>(serviceSetup)
         .AddUnitOfWork<EfCoreDataSource<TMarker>>(serviceSetup)
         .AddConfiguredOptions(dataSourceSetup);
 }

Also applies to: 30-34, 45-47, 50-54

src/Savvyio.Extensions.DependencyInjection.NATS/ServiceCollectionExtensions.cs (1)

28-31: Optionally guard natsSetup for earlier failure and align XML docs

Mirror the services guard for natsSetup to avoid deferred null issues inside AddConfiguredOptions.

 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="natsSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddNatsCommandQueue(this IServiceCollection services, Action<NatsCommandQueueOptions> natsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(natsSetup);
     return services
         .AddMessageQueue<NatsCommandQueue, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(natsSetup);
 }
@@
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="natsSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddNatsCommandQueue<TMarker>(this IServiceCollection services, Action<NatsCommandQueueOptions<TMarker>> natsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(natsSetup);
     return services
         .AddMessageQueue<NatsCommandQueue<TMarker>, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(natsSetup);
 }
@@
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="natsSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddNatsEventBus(this IServiceCollection services, Action<NatsEventBusOptions> natsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(natsSetup);
     return services
         .AddMessageBus<NatsEventBus, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(natsSetup);
 }
@@
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null.
+/// <paramref name="natsSetup"/> cannot be null.
 /// </exception>
 public static IServiceCollection AddNatsEventBus<TMarker>(this IServiceCollection services, Action<NatsEventBusOptions<TMarker>> natsSetup, Action<ServiceOptions> serviceSetup = null)
 {
     Validator.ThrowIfNull(services);
+    Validator.ThrowIfNull(natsSetup);
     return services
         .AddMessageBus<NatsEventBus<TMarker>, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton))
         .AddConfiguredOptions(natsSetup);
 }

Also applies to: 33-37, 47-50, 52-56, 66-69, 71-75, 85-88, 90-94

.github/copilot-instructions.md (3)

1-4: Confirm whether multiple YAML front-matter blocks are supported

This file has two front-matter sections. If your tooling only reads the first, the second section’s applyTo may be ignored. Consider consolidating to one front matter and using headings for sections, or split into two files.

Example consolidation:

----
-description: 'Writing Unit Tests in Savvyio'
-applyTo: '**/*.cs'
----
+---
+description: 'Copilot authoring guidelines for Savvyio'
+applyTo: '**/*.cs'
+---
@@
----
-description: 'Writing XML documentation in Savvyio'
-applyTo: '**/*.cs'
----
+# Writing XML documentation in Savvyio

Also applies to: 119-121


107-110: Grammar nit: “derived from this”

Tighten phrasing for clarity.

-- Do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit (and derived from this).
+- Do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit (and those derived from it).

119-119: markdownlint MD003 (heading style) hint

A linter reports a setext-style heading around here. Ensure all headings use atx (“# …”) and that any horizontal rules are separated by blank lines so they aren’t parsed as setext underlines. Alternatively, replace thematic breaks with “***”.

src/Savvyio.Extensions.DependencyInjection.EFCore.Domain/ServiceCollectionExtensions.cs (1)

25-27: Document that dataSourceSetup must not be null

Both overloads pass dataSourceSetup to AddConfiguredOptions, which throws if the configurator is null. Add corresponding XML for dataSourceSetup to reflect runtime behavior.

 /// <returns>A reference to <paramref name="services" /> so that additional calls can be chained.</returns>
 /// <remarks>The <see cref="EfCoreAggregateDataSource"/> will be type forwarded accordingly.</remarks>
 /// <exception cref="ArgumentNullException">
-/// <paramref name="services"/> cannot be null.
+/// <paramref name="services"/> cannot be null -or-
+/// <paramref name="dataSourceSetup"/> cannot be null.
 /// </exception>

Also applies to: 44-46

test/Savvyio.Extensions.NATS.Tests/EventDriven/NatsEventBusTest.cs (1)

15-17: Make test fields readonly

These are set once and never reassigned; mark readonly to communicate intent and prevent accidental mutation.

-        private IMarshaller _marshaller = JsonMarshaller.Default;
-        private NatsEventBusOptions _options = new ();
+        private readonly IMarshaller _marshaller = JsonMarshaller.Default;
+        private readonly NatsEventBusOptions _options = new();
test/Savvyio.Extensions.NATS.Tests/NatsMessageOptionsTest.cs (2)

1-1: Remove leading indentation before using directive.

Minor style nit: drop the leading spaces before using System;.

-    using System;
+using System;

29-39: Prefer parameterized test over sequential assertions.

Use [Theory] with [InlineData] to isolate failures and avoid mutating the same instance.

-[Fact]
-public void ValidateOptions_ShouldThrow_WhenSubjectIsNullOrWhitespace()
-{
-    var options = new NatsMessageOptions { Subject = null };
-    Assert.Throws<InvalidOperationException>(() => options.ValidateOptions());
-
-    options.Subject = "";
-    Assert.Throws<InvalidOperationException>(() => options.ValidateOptions());
-
-    options.Subject = "   ";
-    Assert.Throws<InvalidOperationException>(() => options.ValidateOptions());
-}
+[Theory]
+[InlineData(null)]
+[InlineData("")]
+[InlineData("   ")]
+public void ValidateOptions_ShouldThrow_WhenSubjectIsNullOrWhitespace(string subject)
+{
+    var options = new NatsMessageOptions { Subject = subject };
+    Assert.Throws<InvalidOperationException>(() => options.ValidateOptions());
+}
test/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.Tests/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.Tests.csproj (1)

1-11: Mark test project as non-packable.

Avoid accidental packaging by setting IsPackable to false (if not set in shared props).

 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <RootNamespace>Savvyio.Extensions.DependencyInjection.Newtonsoft.Json</RootNamespace>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
 
   <ItemGroup>
     <ProjectReference Include="..\..\src\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj" />
   </ItemGroup>
 
 </Project>
.nuget/Savvyio.Extensions.DependencyInjection.Text.Json/PackageReleaseNotes.txt (2)

5-5: Grammar: “consist” → “consists”.

Subject is singular (“class”).

-- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consist of extension methods for the IServiceCollection interface: AddJsonMarshaller
+- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consists of extension methods for the IServiceCollection interface: AddJsonMarshaller

3-3: Replace non‑breaking spaces with empty lines.

Ensures clean rendering across viewers.

- 
+
@@
- 
+

Also applies to: 6-6

CHANGELOG.md (3)

17-22: Grammar: “consist” → “consists”.

Minor but user-facing.

-- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consist of extension methods for the IServiceCollection interface: AddNewtonsoftJsonMarshaller
+- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consists of extension methods for the IServiceCollection interface: AddNewtonsoftJsonMarshaller
...
-- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consist of extension methods for the IServiceCollection interface: AddJsonMarshaller
+- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consists of extension methods for the IServiceCollection interface: AddJsonMarshaller

470-477: Typo: “Savvio.EventDriven” → “Savvyio.EventDriven”.

-#### Savvio.EventDriven
+#### Savvyio.EventDriven

603-611: Polish repeated phrasing “was moved to the namespace to the namespace equivalent …”.

Tighten these sentences for readability; repetition appears multiple times in this block.

-- IAggregateRepository interface in the Savvyio.Domain namespace was moved to the to the namespace equivalent in the Savvyio.Core assembly
+- IAggregateRepository interface in the Savvyio.Domain namespace was moved to the equivalent namespace in the Savvyio.Core assembly
test/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.Tests/ServiceCollectionExtensionsTest.cs (3)

35-44: Use GetRequiredService and dispose provider; enable validation.

Improves test failure signals and validates DI graph on build.

-            var provider = services.BuildServiceProvider();
-            var marshaller = provider.GetService<NewtonsoftJsonMarshaller>();
+            using var provider = services.BuildServiceProvider(new ServiceProviderOptions
+            {
+                ValidateScopes = true,
+                ValidateOnBuild = true
+            });
+            var marshaller = provider.GetRequiredService<NewtonsoftJsonMarshaller>();

61-66: Same here for options retrieval.

-            var provider = services.BuildServiceProvider();
-            var options = provider.GetService<NewtonsoftJsonFormatterOptions>();
+            using var provider = services.BuildServiceProvider(new ServiceProviderOptions
+            {
+                ValidateScopes = true,
+                ValidateOnBuild = true
+            });
+            var options = provider.GetRequiredService<NewtonsoftJsonFormatterOptions>();

82-86: Assert descriptor via TryGet as alternative (optional).

Current Assert.Single is fine; alternatively, asserting both ServiceType and ImplementationType can catch mis-registrations.

-            var descriptor = Assert.Single(services, d => d.ServiceType == typeof(NewtonsoftJsonMarshaller));
+            var descriptor = Assert.Single(
+                services,
+                d => d.ServiceType == typeof(NewtonsoftJsonMarshaller) &&
+                     (d.ImplementationType == typeof(NewtonsoftJsonMarshaller) || d.ImplementationInstance is NewtonsoftJsonMarshaller));
.nuget/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/PackageReleaseNotes.txt (2)

5-5: Grammar: singularize and fix verb agreement in feature bullet

Use “consists of an extension method” (singular) to match the single API listed.

-- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consist of extension methods for the IServiceCollection interface: AddNewtonsoftJsonMarshaller
+- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consists of an extension method for the IServiceCollection interface: AddNewtonsoftJsonMarshaller

6-6: Add trailing newline (editorconfig/md conventions)

File currently lacks a trailing newline; add one for POSIX/tooling friendliness.

.nuget/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/README.md (1)

3-3: Tighten wording to explicitly mention Newtonsoft.Json marshalling

Minor clarity improvement.

-Extend the Savvy I/O support for Microsoft Dependency Injection with Newtonsoft JSON implementations.
+Extend Savvy I/O’s Microsoft Dependency Injection support with Newtonsoft.Json marshalling implementations.
test/Savvyio.Extensions.DependencyInjection.Text.Json.Tests/ServiceCollectionExtensionsTest.cs (2)

33-41: Also assert interface registration (IMarshaller) for stronger coverage

Verifies consumers resolving the interface work as expected.

             var provider = services.BuildServiceProvider();
             var marshaller = provider.GetService<JsonMarshaller>();
             Assert.NotNull(marshaller);
+            var iMarshaller = provider.GetService<IMarshaller>();
+            Assert.NotNull(iMarshaller);

Add missing using:

 using System;
 using Codebelt.Extensions.Xunit;
 using Cuemon.Extensions.Text.Json.Formatters;
 using Microsoft.Extensions.DependencyInjection;
 using Savvyio.Extensions.DependencyInjection.Text.Json;
 using Savvyio.Extensions.Text.Json;
+using Savvyio.Messaging;
 using Xunit;

74-83: Optionally validate default lifetime too

If the extension defaults to Singleton, assert it to prevent regressions.

             var descriptor = Assert.Single(services, d => d.ServiceType == typeof(JsonMarshaller));
             Assert.Equal(ServiceLifetime.Scoped, descriptor.Lifetime);
             Assert.Equal(ServiceLifetime.Scoped, lifetime);
+            // Optional: verify default would be Singleton when not overridden
+            // var services2 = new ServiceCollection();
+            // services2.AddJsonMarshaller();
+            // var def = Assert.Single(services2, d => d.ServiceType == typeof(JsonMarshaller));
+            // Assert.Equal(ServiceLifetime.Singleton, def.Lifetime);
test/Savvyio.Extensions.NATS.Tests/Commands/NatsCommandQueueTest.cs (2)

13-15: Make fixture fields readonly to avoid accidental mutation across tests

Improves test robustness.

-        private IMarshaller _marshaller = JsonMarshaller.Default;
-        private NatsCommandQueueOptions _options = new ();
+        private readonly IMarshaller _marshaller = JsonMarshaller.Default;
+        private readonly NatsCommandQueueOptions _options = new();

48-50: Remove stray blank line

Keeps formatting tidy.

-        
+
         [Fact]
         public void Constructor_ShouldThrow_WhenOptionsAreInvalid()
Savvyio.sln (1)

142-149: Additions of four DI JSON projects look correct; minor GUID consistency nit.

Projects are wired with correct paths; consider standardizing project type GUID to the SDK-style C# GUID {9A19103F-16F7-4668-BE54-9A1E7A4F7556} for consistency with many entries above. Not blocking.

src/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/ServiceCollectionExtensions.cs (1)

19-23: Doc nit: state the exact default explicitly.

Consider clarifying the default to match the code (Formatting.None).

Apply this minimal doc tweak:

-/// <param name="jsonSetup">The <see cref="NewtonsoftJsonFormatterOptions" /> which may be configured. Default is optimized for messaging.</param>
+/// <param name="jsonSetup">The <see cref="NewtonsoftJsonFormatterOptions" /> which may be configured. Default sets <c>Settings.Formatting = Formatting.None</c> (optimized for messaging).</param>

Comment on lines +33 to +37
* [Savvyio.Extensions.DependencyInjection.Newtonsoft.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/) 📦
* [Savvyio.Extensions.DependencyInjection.QueueStorage](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.QueueStorage/) 📦
* [Savvyio.Extensions.DependencyInjection.RabbitMQ](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.RabbitMQ/) 📦
* [Savvyio.Extensions.DependencyInjection.SimpleQueueService](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.SimpleQueueService/) 📦
* [Savvyio.Extensions.DependencyInjection.Text.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Text.Json/) 📦
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Add DI JSON package links — LGTM

Links for the two new DI JSON extensions are correctly added and aligned with the 4.3.0 scope.

Run to confirm repo-wide discoverability (DocFX and App project reference):


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "DocFX includes:"
rg -n '"Savvyio\.Extensions\.DependencyInjection\.(Newtonsoft\.Json|Text\.Json)"' .docfx/docfx.json || true

echo "Savvyio.App.csproj reference to Text.Json DI extension:"
fd -H -t f Savvyio.App.csproj | xargs -I{} rg -n 'ProjectReference.+Savvyio\.Extensions\.DependencyInjection\.Text\.Json' {} || true

echo "README contains both DI JSON links once:"
rg -n 'Savvyio\.Extensions\.DependencyInjection\.(Newtonsoft\.Json|Text\.Json)' .nuget/Savvyio.App/README.md

Length of output: 1063


Include both DI JSON extensions in docs and project references

  • .docfx/docfx.json: add entries for Savvyio.Extensions.DependencyInjection.Newtonsoft.Json (and verify Text.Json) so the new packages are discoverable.
  • Savvyio.App.csproj: add a <ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj" /> for the Newtonsoft.Json DI extension.
🧰 Tools
🪛 LanguageTool

[grammar] ~33-~33: There might be a mistake here.
Context: ...DependencyInjection.Newtonsoft.Json/) 📦 * [Savvyio.Extensions.DependencyInjection.Q...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ...sions.DependencyInjection.Text.Json/) 📦 * [Savvyio.Extensions.Dispatchers](https://...

(QB_NEW_EN)

🤖 Prompt for AI Agents
In .nuget/Savvyio.App/README.md lines 33 to 37 the README lists DI JSON
extension packages but the repository and docs are missing references to the
Newtonsoft.Json DI extension; update .docfx/docfx.json to add an entry for
Savvyio.Extensions.DependencyInjection.Newtonsoft.Json (and verify the existing
Text.Json entry is correct) so the package appears in generated docs, and update
Savvyio.App.csproj to include a ProjectReference to
..\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj
so the Newtonsoft.Json DI extension is referenced by the solution.

Comment on lines +33 to +37
* [Savvyio.Extensions.DependencyInjection.Newtonsoft.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/) 📦
* [Savvyio.Extensions.DependencyInjection.QueueStorage](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.QueueStorage/) 📦
* [Savvyio.Extensions.DependencyInjection.RabbitMQ](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.RabbitMQ/) 📦
* [Savvyio.Extensions.DependencyInjection.SimpleQueueService](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.SimpleQueueService/) 📦
* [Savvyio.Extensions.DependencyInjection.Text.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Text.Json/) 📦
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

❓ Verification inconclusive

Verify NuGet package availability

Quickly confirm both new package IDs resolve on NuGet.


🏁 Script executed:

#!/bin/bash
set -euo pipefail
pkgs=(
  "Savvyio.Extensions.DependencyInjection.Newtonsoft.Json"
  "Savvyio.Extensions.DependencyInjection.Text.Json"
)
for p in "${pkgs[@]}"; do
  code=$(curl -s -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3/registration5-gz-semver2/${p}/index.json")
  if [[ "$code" == "200" ]]; then
    echo "OK: ${p} exists on NuGet."
  else
    echo "MISS: ${p} not found (HTTP ${code}). Check link/name." >&2
  fi
done

Length of output: 966


Fix missing NuGet packages
Both Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and Savvyio.Extensions.DependencyInjection.Text.Json return HTTP 404 on NuGet. Ensure those packages are published (or correct the IDs/links) before merging.

🧰 Tools
🪛 LanguageTool

[grammar] ~33-~33: There might be a mistake here.
Context: ...DependencyInjection.Newtonsoft.Json/) 📦 * [Savvyio.Extensions.DependencyInjection.Q...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ...sions.DependencyInjection.Text.Json/) 📦 * [Savvyio.Extensions.Dispatchers](https://...

(QB_NEW_EN)

🤖 Prompt for AI Agents
In .nuget/Savvyio.Commands/README.md around lines 33 to 37 the README lists
Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and
Savvyio.Extensions.DependencyInjection.Text.Json but both package links return
404; verify the correct NuGet package IDs on nuget.org and either publish the
missing packages or update the README links to the correct IDs (or remove the
entries if they are not intended to be published), then confirm the links
resolve before merging.

Comment on lines +1 to +2
Version: 4.3.0
Availability: .NET 9 and .NET 8
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Verify TFMs match the project file(s).

Availability lists .NET 9 and .NET 8. Please confirm the csproj for Savvyio.Extensions.DapperExtensions actually targets net9.0 and net8.0.

Run:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
# Locate the csproj
fd -a '^Savvyio\.Extensions\.DapperExtensions\.csproj$' | tee /dev/stderr

# Show TargetFramework(s)
csproj="$(fd -a '^Savvyio\.Extensions\.DapperExtensions\.csproj$' | head -n1)"
echo "---- TargetFrameworks ----"
rg -nP '^\s*<TargetFrameworks?>' -n "$csproj" -C1 || true

echo "---- PackageReferences ----"
rg -nP 'PackageReference' "$csproj" -C0 || true

Length of output: 189


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate the .csproj file
csproj=$(find . -type f -name 'Savvyio.Extensions.DapperExtensions.csproj' | head -n1)
echo "CSProj path: $csproj"

# Show TargetFramework(s)
echo "---- TargetFramework(s) ----"
grep -n '<TargetFramework' "$csproj" || true

# Show PackageReferences for context
echo "---- PackageReferences ----"
grep -n 'PackageReference' "$csproj" || true

Length of output: 836


🏁 Script executed:

#!/bin/bash
set -euo pipefail

csproj=./src/Savvyio.Extensions.DapperExtensions/Savvyio.Extensions.DapperExtensions.csproj
echo "---- CSProj Path ----"
echo "$csproj"

echo "---- First 200 lines of the .csproj ----"
head -n 200 "$csproj" || true

Length of output: 1127


Add TargetFrameworks or update release notes
The project file at src/Savvyio.Extensions.DapperExtensions/Savvyio.Extensions.DapperExtensions.csproj does not specify any <TargetFramework> or <TargetFrameworks> elements, so it doesn’t actually target .NET 8 or .NET 9. Either add

<PropertyGroup>
  <TargetFrameworks>net8.0;net9.0</TargetFrameworks>
</PropertyGroup>

to the .csproj or adjust .nuget/Savvyio.Extensions.DapperExtensions/PackageReleaseNotes.txt to match the actual target frameworks.

🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DapperExtensions/PackageReleaseNotes.txt around
lines 1-2, the release notes claim availability for .NET 8 and .NET 9 but the
project
src/Savvyio.Extensions.DapperExtensions/Savvyio.Extensions.DapperExtensions.csproj
lacks a TargetFramework/TargetFrameworks entry; either add a PropertyGroup to
that .csproj specifying TargetFrameworks as net8.0;net9.0 (so the project
actually builds for those frameworks) or update the PackageReleaseNotes.txt to
reflect the real targeted frameworks; ensure the chosen fix is applied
consistently across the repo and commit the change.

Comment on lines +33 to +37
* [Savvyio.Extensions.DependencyInjection.Newtonsoft.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/) 📦
* [Savvyio.Extensions.DependencyInjection.QueueStorage](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.QueueStorage/) 📦
* [Savvyio.Extensions.DependencyInjection.RabbitMQ](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.RabbitMQ/) 📦
* [Savvyio.Extensions.DependencyInjection.SimpleQueueService](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.SimpleQueueService/) 📦
* [Savvyio.Extensions.DependencyInjection.Text.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Text.Json/) 📦
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Add a quick verification for new NuGet links and keep list order consistent.

  • The two new DI JSON packages look correct. Please verify the links resolve and consider alphabetizing the DI.* section for maintainability.

You can run:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
for p in Savvyio.Extensions.DependencyInjection.Newtonsoft.Json Savvyio.Extensions.DependencyInjection.Text.Json; do
  echo "Checking $p ..."
  curl -sI "https://www.nuget.org/packages/$p/" | gawk 'NR==1{print}'
done

Length of output: 808


Fix broken NuGet package links and sort DI. section*

  • Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and Savvyio.Extensions.DependencyInjection.Text.Json links return HTTP 404 – update them to the correct NuGet package URLs.
  • Alphabetize the DI.* entries for consistency.
    File: .nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/README.md lines 33-37
🧰 Tools
🪛 LanguageTool

[grammar] ~33-~33: There might be a mistake here.
Context: ...DependencyInjection.Newtonsoft.Json/) 📦 * [Savvyio.Extensions.DependencyInjection.Q...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ...sions.DependencyInjection.Text.Json/) 📦 * [Savvyio.Extensions.Dispatchers](https://...

(QB_NEW_EN)

🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/README.md
around lines 33 to 37, the two NuGet links for
Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and
Savvyio.Extensions.DependencyInjection.Text.Json are broken (404) and the DI.*
list should be alphabetized; update those two links to the correct NuGet package
URLs (verify package IDs on nuget.org and replace the hrefs), then reorder the
DI.* list items so they are in alphabetical order.

Comment on lines +1 to +6
Version: 4.3.0
Availability: .NET 9 and .NET 8

# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)

Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Polish release notes formatting

Add a colon after CHANGED and replace non-breaking spaces with normal blank lines for consistency/readability.

-Version: 4.3.0
-Availability: .NET 9 and .NET 8
- 
-# ALM
-- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
- 
+Version: 4.3.0
+Availability: .NET 9 and .NET 8
+
+# ALM
+- CHANGED: Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
+
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Version: 4.3.0
Availability: .NET 9 and .NET 8
 
# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
 
Version: 4.3.0
Availability: .NET 9 and .NET 8
# ALM
- CHANGED: Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
🧰 Tools
🪛 LanguageTool

[grammar] ~1-~1: There might be a mistake here.
Context: Version: 4.3.0 Availability: .NET 9 and .NET 8   # ALM ...

(QB_NEW_EN)


[grammar] ~2-~2: There might be a mistake here.
Context: ...n: 4.3.0 Availability: .NET 9 and .NET 8   # ALM - CHANGED Dependencies have been upg...

(QB_NEW_EN)


[grammar] ~4-~4: There might be a mistake here.
Context: ... Availability: .NET 9 and .NET 8   # ALM - CHANGED Dependencies have been upgraded ...

(QB_NEW_EN)

🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DependencyInjection.NATS/PackageReleaseNotes.txt
around lines 1 to 6, the release notes need minor formatting fixes: change the
header "CHANGED" to "CHANGED:" (add a colon) and replace any non-breaking space
characters with normal spaces/newlines so blank lines render correctly; ensure
there is a regular blank line between the Availability line and the "# ALM"
section and that list items remain on their own lines.

Comment on lines 1 to 3
# Savvyio.Extensions.DependencyInjection.NATS

Extend the Savvy I/O support for Microsoft Dependency Injection with official built-in JSON implementations.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Wrong package title; fix copy/paste.

Header says NATS but this is Text.Json’s README.

-# Savvyio.Extensions.DependencyInjection.NATS
+# Savvyio.Extensions.DependencyInjection.Text.Json
-
-Extend the Savvy I/O support for Microsoft Dependency Injection with official built-in JSON implementations.
+Extend Savvy I/O with Microsoft Dependency Injection support for System.Text.Json-based marshalling.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Savvyio.Extensions.DependencyInjection.NATS
Extend the Savvy I/O support for Microsoft Dependency Injection with official built-in JSON implementations.
# Savvyio.Extensions.DependencyInjection.Text.Json
Extend Savvy I/O with Microsoft Dependency Injection support for System.Text.Json-based marshalling.
🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DependencyInjection.Text.Json/README.md around
lines 1 to 3, the header and opening line incorrectly refer to
"Savvyio.Extensions.DependencyInjection.NATS"; change the title to
"Savvyio.Extensions.DependencyInjection.Text.Json" and update the description to
reference the Text.Json JSON implementation (e.g., "Extend the Savvy I/O support
for Microsoft Dependency Injection with the official built‑in System.Text.Json
implementation.") so the README correctly describes the Text.Json package
instead of NATS.

Comment on lines +7 to +11
## [4.3.0] - 2025-08-30

This is a feature release that extends the two projects, `Savvyio.Extensions.Newtonsoft.Json` and `Savvyio.Extensions.Text.Json` with support for Microsoft Dependency Injection.

Also includes a service update that focuses on bumping package dependencies.
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Clarify 4.3.0 wording: DI support is delivered via new DI packages, not the core JSON packages.

The current text suggests the non-DI JSON packages got DI support. Recommend rewording to avoid confusion.

-This is a feature release that extends the two projects, `Savvyio.Extensions.Newtonsoft.Json` and `Savvyio.Extensions.Text.Json` with support for Microsoft Dependency Injection.
+This is a feature release that adds two DI extension packages providing Microsoft Dependency Injection support for JSON marshalling:
+`Savvyio.Extensions.DependencyInjection.Newtonsoft.Json` and `Savvyio.Extensions.DependencyInjection.Text.Json`.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## [4.3.0] - 2025-08-30
This is a feature release that extends the two projects, `Savvyio.Extensions.Newtonsoft.Json` and `Savvyio.Extensions.Text.Json` with support for Microsoft Dependency Injection.
Also includes a service update that focuses on bumping package dependencies.
## [4.3.0] - 2025-08-30
This is a feature release that adds two DI extension packages providing Microsoft Dependency Injection support for JSON marshalling:
`Savvyio.Extensions.DependencyInjection.Newtonsoft.Json` and `Savvyio.Extensions.DependencyInjection.Text.Json`.
Also includes a service update that focuses on bumping package dependencies.
🤖 Prompt for AI Agents
CHANGELOG.md lines 7-11: reword the 4.3.0 entry to make clear that Dependency
Injection support is provided by new DI-specific packages rather than being
added to the core JSON packages; update the sentences to state that new packages
(e.g., Savvyio.Extensions.Newtonsoft.Json.DependencyInjection and
Savvyio.Extensions.Text.Json.DependencyInjection) were added to enable Microsoft
DI integration, and keep the note about dependency bumps unchanged.

<ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.QueueStorage\Savvyio.Extensions.DependencyInjection.QueueStorage.csproj" />
<ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.RabbitMQ\Savvyio.Extensions.DependencyInjection.RabbitMQ.csproj" />
<ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.SimpleQueueService\Savvyio.Extensions.DependencyInjection.SimpleQueueService.csproj" />
<ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.Text.Json\Savvyio.Extensions.DependencyInjection.Text.Json.csproj" />
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Add Text.Json DI reference — verify docs and packaging alignment

Good addition. Please ensure Savvyio.App’s release notes list this new DI extension (and Newtonsoft.Json DI if intentionally included elsewhere) so consumers see it discoverable.

Apply this to .nuget/Savvyio.App/PackageReleaseNotes.txt (v4.3.0 block):

- - Savvyio.Extensions.DependencyInjection.RabbitMQ
- - Savvyio.Extensions.DependencyInjection.SimpleQueueService
+ - Savvyio.Extensions.DependencyInjection.RabbitMQ
+ - Savvyio.Extensions.DependencyInjection.SimpleQueueService
+ - Savvyio.Extensions.DependencyInjection.Newtonsoft.Json
+ - Savvyio.Extensions.DependencyInjection.Text.Json
  - Savvyio.Extensions.Dispatchers

Run to double-check consistency:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "Project refs:"
rg -nP '\.Extensions\.DependencyInjection\.Text\.Json' src/Savvyio.App/Savvyio.App.csproj
echo "Release notes mentions:"
rg -n 'Savvyio\.Extensions\.DependencyInjection\.(Text|Newtonsoft)\.Json' .nuget/Savvyio.App/PackageReleaseNotes.txt || true

Length of output: 477


Update v4.3.0 release notes to include new DI extensions

The v4.3.0 entry in .nuget/Savvyio.App/PackageReleaseNotes.txt doesn’t list the new JSON DI packages. Add these lines under the existing list:

   - Savvyio.Extensions.DependencyInjection.RabbitMQ
   - Savvyio.Extensions.DependencyInjection.SimpleQueueService
+  - Savvyio.Extensions.DependencyInjection.Newtonsoft.Json
+  - Savvyio.Extensions.DependencyInjection.Text.Json
   - Savvyio.Extensions.Dispatchers
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.Text.Json\Savvyio.Extensions.DependencyInjection.Text.Json.csproj" />
- Savvyio.Extensions.DependencyInjection.RabbitMQ
- Savvyio.Extensions.DependencyInjection.SimpleQueueService
- Savvyio.Extensions.DependencyInjection.Newtonsoft.Json
- Savvyio.Extensions.DependencyInjection.Text.Json
- Savvyio.Extensions.Dispatchers
🤖 Prompt for AI Agents
In src/Savvyio.App/Savvyio.App.csproj around line 30, the project now includes
Savvyio.Extensions.DependencyInjection.Text.Json but the v4.3.0 release notes in
.nuget/Savvyio.App/PackageReleaseNotes.txt were not updated; open that file,
find the v4.3.0 entry and add a bullet (or line) listing the new DI JSON
extension(s) (e.g. Savvyio.Extensions.DependencyInjection.Text.Json) under the
existing list so the release notes reflect the new package(s).

@codecov
Copy link

codecov bot commented Aug 29, 2025

Codecov Report

❌ Patch coverage is 87.75510% with 6 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.97%. Comparing base (1f70381) to head (b68eb76).

Files with missing lines Patch % Lines
...ection.QueueStorage/ServiceCollectionExtensions.cs 0.00% 4 Missing ⚠️
...ncyInjection.Dapper/ServiceCollectionExtensions.cs 75.00% 1 Missing ⚠️
...ction.EFCore.Domain/ServiceCollectionExtensions.cs 75.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #38      +/-   ##
==========================================
+ Coverage   74.81%   74.97%   +0.16%     
==========================================
  Files         175      177       +2     
  Lines        3633     3681      +48     
  Branches      360      362       +2     
==========================================
+ Hits         2718     2760      +42     
- Misses        913      919       +6     
  Partials        2        2              

☔ View full report in Codecov by Sentry.
📢 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

@gimlichael gimlichael merged commit e301a94 into main Aug 29, 2025
6 of 12 checks passed
@gimlichael gimlichael deleted the v4.3.0/di-additions branch August 29, 2025 22:03
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