Skip to content

JasperFx 2.80.1, and drop the jasperfx#942 workaround (#423) - #424

Merged
jeremydmiller merged 1 commit into
mainfrom
fisher-423-jasperfx-2.80.1
Oct 4, 2026
Merged

jeremydmiller merged 1 commit into
mainfrom
fisher-423-jasperfx-2.80.1

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Closes #423.

What's in it

  • JasperFx 2.80.1 (from 2.79.2, spanning 2.80.0): all JasperFx packages, plus the AOT smoke's hand-pinned source generator.
  • jasperfx#942's workaround is gone. ValueTypeInfo.CreateWrapper / UnWrapper fall back to reflection in a native image since 2.80.0. So ValueTypeDelegates is deleted and StrongTypedIdentification calls ValueTypeInfo directly.
  • Compliance: 669 → 678.
  • jasperfx#948 (2.80.1, ResilientEventLoader wrapping) needed nothing. Nothing in Fisher matches on EventLoaderException, and the dead-letter and skip suites stay green.

What it does not do: strong-typed aggregate ids in a native image

#423 asked to lift that refusal. It isn't lifted, because #942 fixed only half of it. JasperFxSingleStreamProjectionBase's constructor also calls IEvent.CreateAggregateIdentitySource<TId>() and StreamAction.CreateAggregateIdentitySource<TId>(). Both still CompileFast() for any wrapper id, and that's measured: a natively published readonly record struct PodId(Guid) aggregate throws PlatformNotSupportedException from that constructor on 2.80.1.

Filed as jasperfx#950. The refusal now names #950 instead of #942, and the native smoke asserts it. A statically closed Snapshot<T, TId>() / LiveStreamAggregation<T, TId>() was built and measured, and is parked on a local branch rather than shipped, following #398's precedent of not shipping API that can't do its job natively. It's the one open item of #412.

Verification

  • Native smoke (macOS arm64, ILC 10.0.1) passes on 2.80.1. Pinned back to 2.79.2 with the workaround deleted, it fails at ValueTypeInfo.CreateWrapper from StrongTypedIdentification, so the smoke covers the path.
  • The mapped-version replay is load-bearing: without it, 4 of the 5 new facts fail.
  • Full CI-shaped run (Release, MTP executables with TRX) green on net9.0 and net10.0: 2522 / 36 / 31.
  • check_scoreboard.py agrees for both TFMs, and check_no_leaked_databases.py --since is clean.

🤖 Generated with Claude Code

- Bump the JasperFx packages (and the AOT smoke's source generator) to
  2.80.1.
- jasperfx#942: ValueTypeInfo.CreateWrapper / UnWrapper now fall back to
  reflection in a native image, so Fisher's local copy of that fallback
  (ValueTypeDelegates) is deleted and StrongTypedIdentification calls
  ValueTypeInfo directly. Pinned back to 2.79.2 with the copy deleted, the
  native smoke fails at ValueTypeInfo.CreateWrapper; on 2.80.1 it passes.
- A strong-typed AGGREGATE id still cannot run natively:
  JasperFxSingleStreamProjectionBase's identity sources
  (IEvent/StreamAction.CreateAggregateIdentitySource) CompileFast
  unconditionally. Filed as jasperfx#950. The refusal now names #950, and
  the native smoke asserts it. A statically closed Snapshot<T, TId> was
  built and measured against 2.80.1, and is parked rather than shipped,
  as in #398.
- jasperfx#943: GuidOptimisticConcurrencyCompliance's five mapped-version
  facts skipped unless the fixture opted in. Fisher has the route
  (fisher#245), so the fixture replays MappedVersionMembers and sets
  SupportsMappedConcurrencyMember; all five pass, and dropping the replay
  fails four.
- jasperfx#944: DocumentSearchCompliance's four hierarchy facts are green
  on the bump alone.

Closes #423

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jeremydmiller
jeremydmiller merged commit 1a28918 into main Oct 4, 2026
3 checks passed
@jeremydmiller
jeremydmiller deleted the fisher-423-jasperfx-2.80.1 branch October 4, 2026 20:34
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.

Upgrade to JasperFx 2.80.0 and drop the jasperfx#942 AOT workarounds

1 participant