Skip to content

Finish Critter Stack 2026 RC + .NET 10 conversion (12 solutions remaining after CqrsMinimalApi pilot) #3

@jeremydmiller

Description

@jeremydmiller

Summary

Complete the Critter Stack 2026 RC + .NET 10 conversion across the remaining sample solutions. The pilot (CqrsMinimalApi) is converted, building, and green (5/5 tests) on the branch chore/rc-conversion (commit c3eb1cf); this issue tracks sweeping the other 12 solutions with the now-proven recipe.

Target RC matrix

Package(s) Pin
WolverineFx + all WolverineFx.* 6.0.0-rc.2
Marten / Marten.AspNetCore / Marten.Newtonsoft 9.0.0-rc.3
Polecat 4.0.0-rc.2
JasperFx / .Events / .Events.SourceGenerator / .SourceGeneration (if referenced directly) 2.0.0-rc.3
JasperFx.RuntimeCompiler (if referenced — 5.x line) 5.0.0-rc.3
Weasel.* (if referenced directly) 9.0.0-rc.1

Target framework: net10.0 for every project.

Proven per-solution recipe (validated on CqrsMinimalApi)

  1. Bump critter-stack PackageReferences to the RC matrix (per-csproj — no central package management here).
  2. Bump TFM to net10.0.
  3. Add WolverineFx.RuntimeCompilation 6.0.0-rc.2 to any project that boots Wolverine in TypeLoadMode.Dynamic (dev/test default) — see Finding 1.
  4. CREATE DATABASE <name> for the solution's database(s) — see Finding 3.
  5. dotnet build -c Release + run tests against Postgres on :5433.
  6. Apply migration-skill code changes where the solution uses migration-relevant APIs (inline-lambda projections → convention methods on partial classes; ServiceLocationPolicy; IForwardsTo; Newtonsoft package extraction; SnapshotLifecycle/OperationRole namespace moves; WolverineHost.ForForAsync).

Authoritative references: marten-migration-v8-to-v9 and wolverine-migration-v5-to-v6 skills in JasperFx/ai-skills (both updated with the findings below).

Findings from the pilot (carry into the sweep)

  1. 🔴 Wolverine 6 removed Roslyn from core. An app in the default TypeLoadMode.Dynamic throws InvalidOperationException at StartAsync ("no IAssemblyGenerator (Roslyn) is registered. Core WolverineFx no longer ships the runtime compiler"). Fix: add WolverineFx.RuntimeCompilation (dev/test) or pre-generate + TypeLoadMode.Static (prod). This will hit every solution that boots Wolverine. Captured in wolverine-migration-v5-to-v6 + tracked at ai-skills#58.
  2. 🟡 Stale Docker infra (fixed). docker-compose.yml pinned postgres:latest, which drifted to PostgreSQL 18 — its data-dir layout is incompatible with the /var/lib/postgresql/data mount and the container Exited (1). Pinned to postgres:17 on the conversion branch. (ProjectManagement/docker-compose.yml should be checked for the same :latest drift.)
  3. 🟡 Samples don't auto-create their databases. Each solution uses its own DB name (cqrs_minimal_api, basket, catalog, ordering, …); Marten creates schema objects but not the database itself, so a fresh Postgres needs each DB pre-created before tests connect. Consider either documenting the CREATE DATABASE step or configuring auto-creation.

Remaining solutions

  • CqrsMinimalApi — pilot, converted + green (commit c3eb1cf)
  • BankAccountES (check for inline-lambda projections / aggregation self-mutation under UseIdentityMapForAggregates)
  • BookingMonolith
  • CleanArchitectureTodos
  • ContributorApi
  • EcommerceMicroservices
  • EcommerceModularMonolith
  • MartenWithProjectAspire (TripProjection — likely inline-lambda projection registration)
  • MeetingGroupMonolith
  • MoreSpeakers
  • OutboxDemo
  • PaymentsMonolith
  • ProjectManagement (Program.cs — ServiceLocationPolicy / Wolverine bootstrap; Tests — WolverineHost.ForForAsync)

Environment

  • Postgres 17 via the repo docker-compose.yml on host port 5433 (matches ~30 of the sample connection strings; 2 stragglers point at 5432).

Acceptance

  • All 13 solutions pinned to the RC matrix on net10.0
  • dotnet build -c Release clean per solution
  • Tests pass where present (DBs pre-created; Postgres 17 on :5433)
  • Any new skill/guide/RC gaps beyond the three above filed back (ai-skills / product repos)
  • PR off chore/rc-conversion

A conversion chip with the full recipe is staged at .claude/chips/convert-critterstacksamples-to-rc.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions