Skip to content

chore(deps): upgrade marten 8->9 and wolverine 5->6 (critter stack)#125

Merged
leehopper merged 1 commit into
mainfrom
chore/critter-stack-marten9-wolverine6
May 30, 2026
Merged

chore(deps): upgrade marten 8->9 and wolverine 5->6 (critter stack)#125
leehopper merged 1 commit into
mainfrom
chore/critter-stack-marten9-wolverine6

Conversation

@leehopper
Copy link
Copy Markdown
Owner

Summary

Coordinated major upgrade of the full Critter Stack — Marten 8 → 9 and Wolverine 5 → 6 (JasperFx 2.0). This consolidates the four dependabot PRs that each failed CI in isolation because the five packages are interdependent and must move together:

Package changes (backend/Directory.Packages.props)

Package From To
Marten 8.37.1 9.2.1
Marten.EntityFrameworkCore 8.37.1 9.2.1
WolverineFx 5.39.3 6.1.0
WolverineFx.EntityFrameworkCore 5.39.3 6.1.0
WolverineFx.Marten 5.39.3 6.1.0
WolverineFx.RuntimeCompilation 6.1.0 (new)

NuGet resolves JasperFx 2.2.0 / JasperFx.Events / Weasel 9.0 transitively; all five packages target net10.0. EF Core floors already satisfied (≥ 10.0.2).

Breaking-change fixes (Marten 9 / Wolverine 6 / JasperFx 2.0)

Verified against the restored 9.2.1 / 6.1.0 assemblies (reflection) and the migration guide:

  1. [Identity] attribute relocated Marten.SchemaJasperFxIdempotencyMarker.cs (Marten no longer defines its own; it honors the shared JasperFx attribute).
  2. Enum/exception namespace moves (JasperFx 2.0 consolidation):
    • TenancyStyleJasperFx.MultiTenancy, TrackLevelJasperFx.OpenTelemetry (MartenConfiguration.cs usings).
    • DocumentAlreadyExistsExceptionJasperFx (out of Marten.Exceptions; the two stream-collision exceptions stayed) — Program.cs OnException registration + WolverineErrorRoutingTests.cs.
  3. Projection programming-model change — convention-method SingleStreamProjection subclasses (OnboardingProjection, PlanProjection) must now be partial so the compile-time JasperFx.Events source generator (shipped in the Marten analyzer asset) emits the aggregate dispatcher; the runtime reflection fallback was removed. UserProfileFromOnboardingProjection uses an explicit ApplyEvent override, so it is unaffected.
  4. Wolverine 6 extracted runtime Roslyn codegen into WolverineFx.RuntimeCompilation. Required for the Development / integration-test host, which boots with CodeGeneration.TypeLoadMode.Auto; without it the host throws No IAssemblyGenerator is registered. Production uses TypeLoadMode.Static and never invokes it.

The reflection-based per-event schema-version helper (MapEventTypeWithSchemaVersion / EventStoreOptionsExtensions) is unchanged — verified the assembly-root type and method signature are byte-identical in 9.2.1.

Verification

  • dotnet build RunCoach.slnx — clean, 0 warnings (SonarAnalyzer 10.27 + StyleCop pass under TreatWarningsAsErrors).
  • Full suite 1124 / 1124 passing (dotnet test --solution RunCoach.slnx) on Testcontainers Postgres, including: Solo async daemon + ApplyAllDatabaseChangesOnStartup clean boot, the legacy-event upcaster synthetic-row regression test, and the idempotency Wolverine error-routing tests.
  • No behavioral regressions observed in the documented risk areas (daemon advisory locks, transaction bracketing, projection dispatch, serialization round-trip).

🤖 Generated with Claude Code

Coordinated major upgrade of the full Critter Stack, consolidating the four
dependabot PRs (#119 Marten, #120 WolverineFx, #121 WolverineFx.EntityFrameworkCore,
#122 WolverineFx.Marten) that each failed in isolation because the five packages
are interdependent and must move together.

Packages (backend/Directory.Packages.props):
- Marten / Marten.EntityFrameworkCore 8.37.1 -> 9.2.1
- WolverineFx / .EntityFrameworkCore / .Marten 5.39.3 -> 6.1.0
- WolverineFx.RuntimeCompilation 6.1.0 (new)

Breaking-change fixes (Marten 9 / Wolverine 6 / JasperFx 2.0):
- [Identity] attribute moved Marten.Schema -> JasperFx (IdempotencyMarker)
- TenancyStyle -> JasperFx.MultiTenancy, TrackLevel -> JasperFx.OpenTelemetry
- DocumentAlreadyExistsException moved Marten.Exceptions -> JasperFx
  (Program.cs OnException registration + WolverineErrorRoutingTests)
- convention-method projections (OnboardingProjection, PlanProjection) must now
  be partial so the compile-time JasperFx.Events source generator emits the
  aggregate dispatcher; the runtime reflection fallback was removed
- Wolverine 6 extracted runtime Roslyn codegen into WolverineFx.RuntimeCompilation,
  required for the Development/test host (TypeLoadMode.Auto); production stays
  Static and never invokes it

Verified locally: dotnet build clean (0 warnings), full suite 1124/1124 passing
on Testcontainers Postgres (Solo async daemon + ApplyAllDatabaseChangesOnStartup
boot clean; upcaster and idempotency error-routing tests green).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 30, 2026

Warning

Review limit reached

@leehopper, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 40 minutes and 37 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, 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 include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: cae6bb34-82b8-49f9-8173-fb9a41d64671

📥 Commits

Reviewing files that changed from the base of the PR and between 5b1e549 and 82e5560.

📒 Files selected for processing (8)
  • backend/Directory.Packages.props
  • backend/src/RunCoach.Api/Infrastructure/Idempotency/IdempotencyMarker.cs
  • backend/src/RunCoach.Api/Infrastructure/MartenConfiguration.cs
  • backend/src/RunCoach.Api/Modules/Coaching/Onboarding/OnboardingProjection.cs
  • backend/src/RunCoach.Api/Modules/Training/Plan/PlanProjection.cs
  • backend/src/RunCoach.Api/Program.cs
  • backend/src/RunCoach.Api/RunCoach.Api.csproj
  • backend/tests/RunCoach.Api.Tests/Infrastructure/Idempotency/WolverineErrorRoutingTests.cs

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 15 package(s) with unknown licenses.
See the Details below.

License Issues

backend/src/RunCoach.Api/RunCoach.Api.csproj

PackageVersionLicenseIssue Type
JasperFx2.2.0NullUnknown License
JasperFx.Events2.2.0NullUnknown License
JasperFx.RuntimeCompiler5.0.0NullUnknown License
JasperFx.SourceGenerator2.2.0NullUnknown License
Marten9.2.1NullUnknown License
Marten.EntityFrameworkCore9.2.1NullUnknown License
Weasel.Core9.0.1NullUnknown License
Weasel.EntityFrameworkCore9.0.1NullUnknown License
Weasel.Postgresql9.0.1NullUnknown License
WolverineFx6.1.0NullUnknown License
WolverineFx.EntityFrameworkCore6.1.0NullUnknown License
WolverineFx.Marten6.1.0NullUnknown License
WolverineFx.Postgresql6.1.0NullUnknown License
WolverineFx.RDBMS6.1.0NullUnknown License
WolverineFx.RuntimeCompilation6.1.0NullUnknown License
Allowed Licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, 0BSD, Unlicense, CC0-1.0, CC-BY-4.0, Zlib, BSL-1.0, Python-2.0, PSF-2.0, Artistic-2.0, MPL-2.0, WTFPL, PostgreSQL
Excluded from license check: pkg:githubactions/SonarSource/sonarqube-scan-action, pkg:npm/runcoach-frontend

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
nuget/FastExpressionCompiler 5.4.1 🟢 3.7
Details
CheckScoreReason
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Maintained🟢 1030 commit(s) and 24 issue activity found in the last 90 days -- score normalized to 10
Code-Review⚠️ 0Found 0/2 approved changesets -- score normalized to 0
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 9binaries present in source code
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Packaging🟢 10packaging workflow detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
nuget/JasperFx 2.2.0 UnknownUnknown
nuget/JasperFx.Events 2.2.0 UnknownUnknown
nuget/JasperFx.RuntimeCompiler 5.0.0 UnknownUnknown
nuget/JasperFx.SourceGenerator 2.2.0 UnknownUnknown
nuget/Marten 9.2.1 UnknownUnknown
nuget/Marten.EntityFrameworkCore 9.2.1 UnknownUnknown
nuget/Weasel.Core 9.0.1 UnknownUnknown
nuget/Weasel.EntityFrameworkCore 9.0.1 UnknownUnknown
nuget/Weasel.Postgresql 9.0.1 UnknownUnknown
nuget/WolverineFx 6.1.0 UnknownUnknown
nuget/WolverineFx.EntityFrameworkCore 6.1.0 UnknownUnknown
nuget/WolverineFx.Marten 6.1.0 UnknownUnknown
nuget/WolverineFx.Postgresql 6.1.0 UnknownUnknown
nuget/WolverineFx.RDBMS 6.1.0 UnknownUnknown
nuget/WolverineFx.RuntimeCompilation 6.1.0 UnknownUnknown

Scanned Files

  • backend/src/RunCoach.Api/RunCoach.Api.csproj

@leehopper leehopper merged commit 5867681 into main May 30, 2026
17 checks passed
leehopper added a commit that referenced this pull request May 30, 2026
…ap (#126)

* docs: record marten 9 / wolverine 6 upgrade in decision log and roadmap

- DEC-071: the Critter Stack 2026 upgrade (Marten 9.2.1 / Wolverine 6.1.0 on
  JasperFx 2.0) — rationale for keeping EventAppendMode.Rich over the new
  QuickAppend default, the WolverineFx.RuntimeCompilation dev/test requirement,
  and the partial-projection source-generator change. Builds on DEC-048/049/067.
- ROADMAP: marked the stale "Marten 9 upgrade" deferred item as shipped (PR #125)
  and folded in the two deferred levers — QuickAppend adoption and Marten.PgVector
  for the LLM/coaching layer.
- Research artifact R-076 (batch-27a-critter-stack-9-6-migration.md): consolidated,
  source-cited migration map (breaking changes, default flips, value unlocked),
  registered in the research queue.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: scope wolverine 6.2.x fixes as future-patch in batch-27a artifact

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

1 participant