Skip to content

V5.0.10/service update - #58

Merged
gimlichael merged 14 commits into
mainfrom
v5.0.10/service-update
Jul 26, 2026
Merged

V5.0.10/service update#58
gimlichael merged 14 commits into
mainfrom
v5.0.10/service-update

Conversation

@codebelt-aicia

Copy link
Copy Markdown
Contributor

This is a service update that focuses on package dependencies.

Automated changes:

  • Codebelt/Cuemon package versions bumped to latest compatible
  • PackageReleaseNotes.txt updated for v5.0.10
  • CHANGELOG.md entry added for v5.0.10

Note: Third-party packages (Microsoft.Extensions.*, BenchmarkDotNet, etc.) are not auto-updated.
Use Dependabot or manual updates for those.

Generated by codebelt-aicia
Triggered by: yamldotnet @ 10.1.6

@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown

Greptile Summary

This is a patch release (v5.0.10) that bumps Codebelt/Cuemon package dependencies, adds .editorconfig-driven code style enforcement, and modernizes core platform code for .NET 9.

  • Dependency bumps: Cuemon (10.5.4→10.5.5), Codebelt extensions (10.1.5→10.1.6), NATS.Client (2.8.2→3.0.1), AWS SDK SQS/SNS, EFCore, Microsoft.Data.Sqlite, and Microsoft.NET.Test.Sdk all updated; SQLitePCLRaw.bundle_e_sqlite3 added to resolve transitive security warnings in test projects.
  • Code modernization: object locks replaced with System.Threading.Lock, StringComparison.Ordinal added to signature comparisons, CultureInfo.InvariantCulture added to culture-sensitive operations, XML <T:...> doc-comment references simplified to plain <see cref=\"...\"/> form.
  • Analyzer hardening: Production builds now enable AnalysisLevel=latest / AnalysisMode=Recommended / EnforceCodeStyleInBuild=true; test projects suppress with AnalysisMode=none (replacing the previously invalid AnalysisLevel=none).

Confidence Score: 5/5

Safe to merge; all code changes are targeted correctness improvements with no regressions introduced by this PR's own diff.

The code-level changes — replacing object locks with System.Threading.Lock, adding StringComparison.Ordinal to cryptographic comparisons, adding CultureInfo.InvariantCulture to numeric validation, sealing internal classes, and extracting helper methods — are all straightforward, low-risk improvements. New test coverage is additive. The only dependency with a major version jump (NATS.Client 2.x→3.x) was flagged and discussed in a prior review thread.

Files Needing Attention: No files require special attention beyond the NATS.Client major-version concern already raised in the prior thread.

Important Files Changed

Filename Overview
Directory.Packages.props Bumps multiple package versions; notable major version jump for NATS.Client (2.8.2→3.0.1) already flagged in prior thread; all other bumps are minor patch increments
Directory.Build.props Adds analyzer hardening for production builds; corrects test project analyzer suppression from invalid AnalysisLevel=none to proper AnalysisMode=none; RunAnalyzers=false already present as belt-and-suspenders
src/Savvyio.Core/HandlerServicesDescriptor.cs Refactors double-checked lazy init to use System.Threading.Lock with null-coalescing assignment; extracts FormatDiscoveryHeader and AppendAssembly helpers; pattern is thread-safe on all platforms
src/Savvyio.Messaging/Cryptography/SignedMessageExtensions.cs Adds StringComparison.Ordinal to signature equality check — correct improvement for cryptographic comparisons
src/Savvyio.EventDriven.Messaging/CloudEvents/Cryptography/SignedCloudEventExtensions.cs Adds StringComparison.Ordinal to cloud event signature equality check — same improvement as SignedMessageExtensions
src/Savvyio.Domain/ValueObject.cs Upgrades lock field from object to System.Threading.Lock — correct .NET 9 modernization
src/Savvyio.Extensions.SimpleQueueService/AmazonResourceNameOptions.cs Passes CultureInfo.InvariantCulture to IsNumeric for culture-invariant account ID validation; test updated to match new exception message
test/Savvyio.Extensions.Text.Json.Tests/Converters/MessageConverterTest.cs New test file covering MessageConverter CanConvert, CloudEvent extension attribute round-trip, and writable metadata round-trip
test/Savvyio.Extensions.Text.Json.Tests/Converters/RequestConverterTest.cs New test file covering RequestConverter CanConvert, auto-property and writable-property rehydration, unsupported request failure, and round-trip through write

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[GenerateHandlerDiscoveries called] --> B{_models != null?}
    B -- Yes --> C[Return _models fast path]
    B -- No --> D[Acquire Lock]
    D --> E{_models == null?\n via ??= operator}
    E -- Yes --> F[BuildHandlerDiscoveries]
    F --> G[Assign _models]
    E -- No --> H[Skip build]
    G --> I[Release Lock]
    H --> I
    I --> J[Return _models]
Loading

Reviews (4): Last reviewed commit: "📝 update changelog for v5.0.10 with tes..." | Re-trigger Greptile

aicia-bot and others added 10 commits July 24, 2026 15:11
Update all dependencies to latest stable versions including AWSSDK SDKs, Microsoft.Data.Sqlite, Microsoft.EntityFrameworkCore, NATS clients, and related packages.
The direct inclusion of SQLitePCLRaw.bundle_e_sqlite3 satisfies a transitive security warning. This package is only referenced by test projects and does not affect Savvyio production code.
Enable .NET code analyzers with latest analysis level and recommended mode. Add code style enforcement in build to catch violations during compilation. Suppress CA2260 and S6618 warnings.
Update NGINX base image from 1.31.2-alpine to 1.31-alpine for DocFX container.
Add Roslyn analyzer suppressions CA1711, CA1725, CA1848, and CA1873 to the build configuration. Update GlobalSuppressions.cs in Savvyio.Core and Savvyio.Extensions.EFCore to justify design decisions. Create GlobalSuppressions.cs for Savvyio.Extensions.Newtonsoft.Json to align with analyzer expectations across all packages.
Replace object locker with System.Threading.Lock throughout the codebase for improved performance and modern .NET 9 interop. Add CultureInfo.InvariantCulture to all culture-aware StringBuilder and string operations to ensure consistent output regardless of system locale. Optimize performance by replacing Enumerable.Any() with Count > 0 checks on known collection types. Add necessary using directives for System.Globalization and System.Threading where required. Update test assertions to reflect the API modernizations.
Update XML doc comment examples in Copilot instructions to use correct tag formats: replace see cref with type references, and use c tags for array types instead of see cref. These corrections align documentation with .NET documentation best practices.
@codecov

codecov Bot commented Jul 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.62%. Comparing base (938570e) to head (dce9c3d).

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #58      +/-   ##
==========================================
+ Coverage   98.40%   98.62%   +0.21%     
==========================================
  Files         177      177              
  Lines        3773     3783      +10     
  Branches      363      365       +2     
==========================================
+ Hits         3713     3731      +18     
+ Misses         58       50       -8     
  Partials        2        2              

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

aicia-bot and others added 3 commits July 25, 2026 17:55
Extract helper methods in HandlerServicesDescriptor and converters (Newtonsoft.Json and Text.Json) to improve code organization and maintainability without changing behavior.
Add comprehensive tests for Text.Json converters (MessageConverter, RequestConverter) and extend Newtonsoft.Json RequestConverter tests with writable properties coverage.
Comment thread Directory.Packages.props
Comment on lines +27 to 29
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.8.1" />
<PackageVersion Include="MinVer" Version="7.0.0" />
<PackageVersion Include="Moq" Version="4.20.72" />

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 NATS.Client major version bump (2.8.2 → 3.0.1) — behavioral breaking change

NATS.NET 3.0 changed the default subscriber-channel overflow mode from BoundedChannelFullMode.Wait to BoundedChannelFullMode.DropNewest and increased the default channel capacity from 1 024 to 16 384. For NatsEventBus.SubscribeAsync (which uses a push subscription), this means that if the consumer handler is slower than the publisher and the internal channel fills up, incoming messages will be silently dropped rather than applying back-pressure. The drop is invisible to the application — no exception, no metric, no dead-letter. For NatsCommandQueue the JetStream pull-fetch path is less exposed, but the same channel backs the JetStream push path in v3. If any workload relies on back-pressure semantics today, it will silently lose messages after upgrading.

Prompt To Fix With AI
This is a comment left during a code review.
Path: Directory.Packages.props
Line: 27-29

Comment:
**NATS.Client major version bump (2.8.2 → 3.0.1) — behavioral breaking change**

NATS.NET 3.0 changed the default subscriber-channel overflow mode from `BoundedChannelFullMode.Wait` to `BoundedChannelFullMode.DropNewest` and increased the default channel capacity from 1 024 to 16 384. For `NatsEventBus.SubscribeAsync` (which uses a push subscription), this means that if the consumer handler is slower than the publisher and the internal channel fills up, incoming messages will be **silently dropped** rather than applying back-pressure. The drop is invisible to the application — no exception, no metric, no dead-letter. For `NatsCommandQueue` the JetStream pull-fetch path is less exposed, but the same channel backs the JetStream push path in v3. If any workload relies on back-pressure semantics today, it will silently lose messages after upgrading.

How can I resolve this? If you propose a fix, please make it concise.

@gimlichael
gimlichael merged commit 5f95510 into main Jul 26, 2026
273 checks passed
@gimlichael
gimlichael deleted the v5.0.10/service-update branch July 26, 2026 10:46
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