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)
- Bump critter-stack
PackageReferences to the RC matrix (per-csproj — no central package management here).
- Bump TFM to
net10.0.
- Add
WolverineFx.RuntimeCompilation 6.0.0-rc.2 to any project that boots Wolverine in TypeLoadMode.Dynamic (dev/test default) — see Finding 1.
CREATE DATABASE <name> for the solution's database(s) — see Finding 3.
dotnet build -c Release + run tests against Postgres on :5433.
- 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.For → ForAsync).
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)
- 🔴 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.
- 🟡 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.)
- 🟡 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
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
A conversion chip with the full recipe is staged at .claude/chips/convert-critterstacksamples-to-rc.md.
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 branchchore/rc-conversion(commitc3eb1cf); this issue tracks sweeping the other 12 solutions with the now-proven recipe.Target RC matrix
WolverineFx+ allWolverineFx.*6.0.0-rc.2Marten/Marten.AspNetCore/Marten.Newtonsoft9.0.0-rc.3Polecat4.0.0-rc.2JasperFx/.Events/.Events.SourceGenerator/.SourceGeneration(if referenced directly)2.0.0-rc.3JasperFx.RuntimeCompiler(if referenced — 5.x line)5.0.0-rc.3Weasel.*(if referenced directly)9.0.0-rc.1Target framework:
net10.0for every project.Proven per-solution recipe (validated on CqrsMinimalApi)
PackageReferences to the RC matrix (per-csproj — no central package management here).net10.0.WolverineFx.RuntimeCompilation6.0.0-rc.2to any project that boots Wolverine inTypeLoadMode.Dynamic(dev/test default) — see Finding 1.CREATE DATABASE <name>for the solution's database(s) — see Finding 3.dotnet build -c Release+ run tests against Postgres on:5433.partialclasses;ServiceLocationPolicy;IForwardsTo; Newtonsoft package extraction;SnapshotLifecycle/OperationRolenamespace moves;WolverineHost.For→ForAsync).Authoritative references:
marten-migration-v8-to-v9andwolverine-migration-v5-to-v6skills in JasperFx/ai-skills (both updated with the findings below).Findings from the pilot (carry into the sweep)
TypeLoadMode.DynamicthrowsInvalidOperationExceptionatStartAsync("no IAssemblyGenerator (Roslyn) is registered. Core WolverineFx no longer ships the runtime compiler"). Fix: addWolverineFx.RuntimeCompilation(dev/test) or pre-generate +TypeLoadMode.Static(prod). This will hit every solution that boots Wolverine. Captured inwolverine-migration-v5-to-v6+ tracked at ai-skills#58.docker-compose.ymlpinnedpostgres:latest, which drifted to PostgreSQL 18 — its data-dir layout is incompatible with the/var/lib/postgresql/datamount and the containerExited (1). Pinned topostgres:17on the conversion branch. (ProjectManagement/docker-compose.ymlshould be checked for the same:latestdrift.)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 theCREATE DATABASEstep or configuring auto-creation.Remaining solutions
CqrsMinimalApi— pilot, converted + green (commitc3eb1cf)BankAccountES(check for inline-lambda projections / aggregation self-mutation underUseIdentityMapForAggregates)BookingMonolithCleanArchitectureTodosContributorApiEcommerceMicroservicesEcommerceModularMonolithMartenWithProjectAspire(TripProjection — likely inline-lambda projection registration)MeetingGroupMonolithMoreSpeakersOutboxDemoPaymentsMonolithProjectManagement(Program.cs —ServiceLocationPolicy/ Wolverine bootstrap; Tests —WolverineHost.For→ForAsync)Environment
docker-compose.ymlon host port5433(matches ~30 of the sample connection strings; 2 stragglers point at5432).Acceptance
net10.0dotnet build -c Releaseclean per solution:5433)chore/rc-conversionA conversion chip with the full recipe is staged at
.claude/chips/convert-critterstacksamples-to-rc.md.