Skip to content

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

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions