Skip to content

[Master] Wolverine 6.0 #2715

Description

@jeremydmiller

Status: in-flight (AOT pillar + all 13 extension-package AOT flags + cold-start #1577 Tier 1 + foundation re-pin to the alpha.20 matrix + 6.0.0-alpha.5 cut + Marten 9 test alignment + DCB parity all complete; remaining: cold-start #1577 Tier 2/3 + #2728, feature work JasperFx/CritterWatch#239 / #2221, CI/dev-loop #2810, release-cut tasks tracked in #2745)
Target version: Wolverine 6.0
Milestone: 6.0
Part of [Master] Critter Stack 2026 (JasperFx/jasperfx#217).
Pillars: cold-start (JasperFx/jasperfx#212), AOT compliance (JasperFx/jasperfx#213).
Dedupe pillar (JasperFx/jasperfx#214) is not in scope for Wolverine — that pillar is Marten ↔ Polecat consolidation only.

Wolverine 6 is the messaging/orchestration release of the Critter Stack 2026 wave. The work is dominated by the cold-start and AOT pillars, plus accumulated Wolverine-specific items on the 6.0 milestone (defaults flip to ServiceLocationPolicy.NotAllowed, scheduler integrations, Result-pattern support).

Wolverine's runtime codegen stays — per the Critter Stack 2026 blog post, source-generator conversion is architecturally not feasible for Wolverine. The AOT story leans entirely on JasperFx's existing dotnet run -- codegen write pre-generation path: dev-time codegen produces source files; production publish drops JasperFx.RuntimeCompiler and the trimmer drops Roslyn.

Goals for 6.0

  1. Cold-start friendly. Drive down first-message latency from a fresh process. Long-standing issue Optimize Cold Start Times #1577 fits squarely under pillar Code generation goes boom when a route pattern has a dash #212.
  2. AOT-clean (Static mode). Wolverine apps that pre-generate handlers via codegen write publish AOT-clean. Runtime codegen remains supported but is annotated with [RequiresDynamicCode] / [RequiresUnreferencedCode].
  3. Defaults flip toward best-perf config — most visibly, ServiceLocationPolicy.NotAllowed becomes the Wolverine 6 default (Make ServiceLocationPolicy.NotAllowed the Default in Wolverine 6 #2584).
  4. Wolverine-as-MediatR ergonomics — formal Result-pattern support (Formal support for the stupid Result pattern in "Wolverine as MediatR" usage #2221).
  5. Scheduler integrations — Quartz.Net + TickerQ (#2507).
  6. API cleanup — accumulated [Obsolete] APIs since Wolverine 5 are removed.

Out of scope for Wolverine 6

  • Source-generator conversion. Per the blog post: "not remotely possible" — architecturally rejected. Wolverine stays on runtime codegen + AOT annotations.
  • Dedupe pillar work ([Pillar] Dedupe Marten ↔ Polecat jasperfx#214). That pillar covers Marten ↔ Polecat only.

✅ Major milestones already landed

2026-05-19 landings (foundation re-align + AOT extension sweep + cold-start Tier 1 + DCB)


What's left

Cold-start (JasperFx/jasperfx#212)

AOT (JasperFx/jasperfx#213)

Wolverine-specific 6.0 work (existing milestone issues)

CI / dev-loop

  • Optimize Marten CI build wall-clock by combining test invocations #2810 — Optimize Marten CI build wall-clock by combining test invocations. CIMarten spawns dotnet test once per test class (111 classes in MartenTests); the process-spawn + fixture-init overhead is the gating job on most cross-stack pin-bump PRs (see PR Bump JasperFx pins to alpha.12 / Events alpha.7 + AOT chunk M #2806). Options: batch classes, enable xUnit collection-level parallelism, or split slow daemon tests into a separate project. Same pattern applies to CIPersistence / CIEfCore / other RunSingleProjectOneClassAtATime consumers. (Chip staged at .claude/chips/2810-marten-ci-build-time.md; paused per Jeremy's preference for manual involvement.)

Foundation bump

  • Adopt JasperFx 2.0 + JasperFx.Events 2.0 when alphas stabilize. (Directory.Packages.props via PR Wolverine: re-pin to JasperFx.Events alpha.16 / Marten 9.0-alpha.4 / Polecat 4.0-alpha.8 / Weasel 9.0-alpha.6 (foundation re-align) #2848: JasperFx 2.0.0-alpha.20, JasperFx.Events 2.0.0-alpha.21, JasperFx.Events.SourceGenerator 2.0.0-alpha.13 (wired for projection dispatch), JasperFx.RuntimeCompiler 5.0.0-alpha.5, Marten 9.0.0-alpha.5, Polecat 4.0.0-alpha.10, Weasel 9.0.0-alpha.7. Note: Marten + Polecat are one Events alpha behind (alpha.20); the alpha.21 delta is the DCB boundary-aggregate evolver — a convergence re-pin will follow once Marten #4514 lands.)
  • TFM alignment: drop net8.0; targets become net9.0;net10.0. Add net11.0 when JasperFx does. (Directory.Build.props sets net9.0;net10.0 as the default for all packaged projects.)
  • Version bump to 6.0.0-alpha.1 on all packaged Wolverine projects. (Currently on 6.0.0-alpha.5 per PR Wolverine: re-pin to JasperFx.Events alpha.16 / Marten 9.0-alpha.4 / Polecat 4.0-alpha.8 / Weasel 9.0-alpha.6 (foundation re-align) #2848.)
  • Wolverine.RuntimeCompilation project review — its scope and packaging story relative to JasperFx.RuntimeCompiler. (Reviewed: kept as a separate opt-in package WolverineFx.RuntimeCompilation. Description on the csproj explains the contract: production deployments that pre-generate via codegen write don't reference this package; the trimmer drops Roslyn.)

Documentation

  • AOT publishing guide specific to Wolverine: pre-generate with codegen write at dev time, publish with Static mode and no AddRuntimeCompilation(), no runtime code generation in production. (docs/guide/aot.md.)
  • Migration guide Wolverine 5 → Wolverine 6: TFM bump, ServiceLocationPolicy default change, JasperFx 2.0 adoption, API removals. (docs/guide/migration.md. Pre-release spot-check tracked in [Release] Wolverine 6.0 Release Punchlist #2745.)

Cross-product dependencies

  • JasperFx 2.0 ([Master] JasperFx 2.0 jasperfx#215) and JasperFx.Events 2.0 ([Master] JasperFx.Events 2.0 jasperfx#216) — Wolverine consumes both; AOT and cold-start completion are blocked on their stabilization.
  • JasperFx's dotnet run -- codegen write must produce byte-stable output that round-trips cleanly into Wolverine's Static mode. Tracked in the JasperFx 2.0 plan; flagging the dependency here.
  • Wolverine does not participate in the dedupe pillar; Marten 9 ↔ Polecat 4 coordination doesn't gate Wolverine 6.

Open design questions

Explicitly out of scope for Wolverine 6

  • Source-generator conversion of Wolverine's codegen layer (architectural — out).
  • Marten ↔ Polecat dedup work (different pillar, different products).

Linked implementation work

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions