Skip to content

Bump JasperFx 2.37.2 → 2.38.0, Weasel 9.23.1 → 9.23.2, and adopt compliance wave 3 - #407

Merged
jeremydmiller merged 2 commits into
mainfrom
chore/jasperfx-2.38.0-weasel-9.23.2
Aug 3, 2026
Merged

Bump JasperFx 2.37.2 → 2.38.0, Weasel 9.23.1 → 9.23.2, and adopt compliance wave 3#407
jeremydmiller merged 2 commits into
mainfrom
chore/jasperfx-2.38.0-weasel-9.23.2

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Supersedes #406, which pinned 2.37.3 — a version that was never published; the wave-3 suites shipped
in 2.38.0 instead. Rather than leave a bump PR and a blocked adoption PR racing on the same
Directory.Packages.props, this carries both. Closes #399.

The bump

Package family From To
JasperFx / .Events / .ComplianceTests / both SourceGenerators 2.37.2 2.38.0
Weasel.SqlServer / .Storage / .EntityFrameworkCore 9.23.1 9.23.2

JasperFx.RuntimeCompiler stays at 5.0.0 — already latest.

The half this bump actually consumes is jasperfx#613, compliance wave 3. Also in 2.38.0 and
deliberately not consumed here:

  • jasperfx#616 lifts Marten's ProjectionScenario harness into a new
    JasperFx.Events.TestSupport namespace. That is what Consume the lifted JasperFx.Events ProjectionScenario #404 will consume to delete Polecat's
    seven-file twin under Events/TestSupport/, and it is the larger piece of work this bump unblocks.
    Nothing here depends on it and the namespaces do not collide, so it stays a separate change.
  • jasperfx#611 (EventProjection published types discovered semantically, not syntactically),
    jasperfx#615 (blue/green side-effect gate warm-up off the agent start path, #598/#610),
    jasperfx#617 (container-scoped projections usable by live aggregation, marten#5095).

Weasel 9.23.2 is taken for matrix coherence — weasel#425 is itself just the JasperFx 2.38.0 floor.
Its only other change, weasel#423, gives Sqlite and MySql the non-generic
Weasel.Core.ICommandBuilder and touches no SQL Server surface.

Compliance wave 3 (was #406)

Retired Replaced by
Events/activity_correlation_tests.cs (4) ActivityCorrelationCompliance
Projections/single_stream_projection_with_string_identity_tests.cs (6) StringIdentitySingleStreamCompliance

Ten suites now enrolled across three waves; the compliance namespace goes 55 → 65 and the full suite
stays at 1660, because the ten tests moved rather than multiplied.

The exit criterion, restated. No file in Polecat.Tests duplicates a Marten test except
Linq/additional_linq_operator_tests.cs, which the shared library cannot absorb: LINQ is
document-database behavior and JasperFx.Events.ComplianceTests spans only event sourcing. Parked in
marten#5118. Per #399's third suggestion the two marker kinds are now greppable apart and documented
in CLAUDE.mdported: means a file duplicates another store's test; a bare marten#NNNN means
Polecat implemented the same feature and the number is provenance. Fourteen files carry the latter
and none is porting work, which is what made #399 originally read as sixteen files instead of three.

Fixture and project changes: StreamIdentity/EnableCorrelationTracking handling plus
CorrelationIdFor/CausationIdFor/SetCorrelationId on PolecatComplianceFixture; a fourth global
alias (a closed generic, since the single stream projection base is generic over identity as well
as document); aggregateto_linq_operator_tests now declares its own AggregateToStringQuest because
the shared library's equivalent folds the compliance suite's events, not Polecat's; and
docs/projection-sg-audit-108.md stops citing four files that waves 1–3 deleted. A new
-p:ComplianceSourceDir=<path> hook builds a working copy of the suites instead of the package,
which is how a wave gets validated before its release.

Verification

Restore, full multi-TFM build, then the suite against a freshly created container, so no stale
pc_ tables could mask a schema-shape regression:

  • Compliance namespace: 65/65
  • Full suite: 1660 total, 0 failed, 3 pre-existing skips (net10.0)

🤖 Generated with Claude Code

https://claude.ai/code/session_01G8tN8ApXiKhyVzia4iwmof

…cing tests

Closes #399. Companion to jasperfx#613 (epic marten#5110, marten#5118).

Retired, and what replaced each:

- Events/activity_correlation_tests.cs -> ActivityCorrelationCompliance
- Projections/single_stream_projection_with_string_identity_tests.cs ->
  StringIdentitySingleStreamCompliance

With those gone, no file in Polecat.Tests duplicates a Marten test except
Linq/additional_linq_operator_tests.cs, which the shared library cannot absorb:
LINQ is document-database behavior and JasperFx.Events.ComplianceTests spans
only event sourcing. Polecat still re-declares IDocumentStore/IDocumentSession/
IQuerySession in its own namespace, so there is nothing for a document-db
compliance suite to be generic over yet.

Two markers, opposite meanings, now documented in CLAUDE.md and on the LINQ
file. `ported:` means a file duplicates another store's test and should move
into a shared suite. A bare `marten#NNNN` citation means Polecat implemented the
same feature and the number is provenance worth keeping. Fourteen files carry
the latter and none of them is porting work -- counting them is what made #399
originally read as sixteen files instead of three, and the count grows with
every parity feature, so it can never converge.

PolecatComplianceFixture picks up the seam the new suites need: StreamIdentity
and EnableCorrelationTracking handling in BuildStoreAsync, plus CorrelationIdFor,
CausationIdFor and SetCorrelationId. The alias file gains a fourth global using,
and unlike the other three it names a closed generic, because the single stream
projection base is generic over the identity type as well as the document.

aggregateto_linq_operator_tests reached into the retired string-identity file for
SelfAggregatingStringQuest. It now declares its own AggregateToStringQuest: the
shared library's equivalent folds the compliance suite's events, not Polecat's.
projection_sg_dispatch_audit_tests needed no change -- its rows bind to the
compliance library's types by name, the way waves 1 and 2 already left it -- but
docs/projection-sg-audit-108.md was citing four files that waves 1-3 deleted, so
those rows now point at the suite that owns each type.

Also adds a ComplianceSourceDir dev-loop escape hatch to Polecat.Tests.csproj:
build with -p:ComplianceSourceDir=<path> to compile a working copy of the suites
instead of the package, which is how wave 3 was validated before the release.

Compliance namespace 65/65, full suite 1660 with 0 failures.
The half this bump consumes is jasperfx#613, compliance wave 3: the
ActivityCorrelationCompliance and StringIdentitySingleStreamCompliance suites
the previous commit enrolls only exist from 2.38.0 on.

Also riding along in 2.38.0, none of it consumed here:

- jasperfx#616 lifts Marten's ProjectionScenario test harness into a new
  JasperFx.Events.TestSupport namespace. That is what #404 will consume to
  delete Polecat's seven-file twin under Events/TestSupport/, and it is the
  larger piece of work this bump unblocks. Nothing here depends on it and the
  namespaces do not collide, so it stays a separate change.
- jasperfx#611: EventProjection published types are discovered semantically
  rather than syntactically.
- jasperfx#615 (#598/#610): the blue/green side-effect gate warm-up moved off
  the agent start path.
- jasperfx#617 (marten#5095): container-scoped projections usable by live
  aggregation, and validated.

Weasel 9.23.2 is taken for matrix coherence -- weasel#425 is itself just the
JasperFx 2.38.0 floor. The only other change, weasel#423, gives Sqlite and MySql
the non-generic Weasel.Core.ICommandBuilder and touches no SQL Server surface.

Verified against a freshly created container, so no stale pc_ tables could mask a
schema-shape regression.
@jeremydmiller
jeremydmiller merged commit 0414f2d into main Aug 3, 2026
7 checks passed
@jeremydmiller
jeremydmiller deleted the chore/jasperfx-2.38.0-weasel-9.23.2 branch August 3, 2026 17:44
jeremydmiller added a commit that referenced this pull request Aug 3, 2026
Minor rather than patch: 5.9.1's line added public surface (IEventBinarySerializer,
EventStoreOptions.AddEventType/AddEventTypes) and moved the whole JasperFx/Weasel
matrix forward.

Since 5.9.1:

- feat: pluggable binary event serialization via IEventBinarySerializer (#388/#402)
- feat: EventStoreOptions.AddEventType / AddEventTypes (#395/#396)
- fix: escape interpolated identifiers and literals in constructed SQL (#390/#403)
- fix: throw a lone DcbConcurrencyException unwrapped from SaveChangesAsync (#394/#397)
- deps: JasperFx 2.37.2 -> 2.38.0, Weasel 9.23.0 -> 9.23.2 (#405, #407)
- Polecat's ProjectionScenario is now a thin subclass of the lifted
  JasperFx.Events.TestSupport harness rather than a seven-file copy of Marten's
  (#404/#408, jasperfx#616) -- a behavior change for anyone already using it, see
  the release notes
- test infrastructure: compliance waves 1-3 (#393, #400, #407), parallel-safe test
  suite (#389), IntegrationContext.StoreOptions document cleaning (#398/#401)
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.

Compliance wave 3+: the three remaining Marten-ported test files

1 participant